Skip to content

fix(transcript): harden chunks rendering - #19868

Open
Antreesy wants to merge 4 commits into
mainfrom
fix/19733/transcript-no-client-rects
Open

Antreesy wants to merge 4 commits into
mainfrom
fix/19733/transcript-no-client-rects

Conversation

@Antreesy

Copy link
Copy Markdown
Contributor

☑️ Resolves

Setup for all scenarios (during the call in the console):

const pinia = document.querySelector('#content').__vue_app__.config.globalProperties.$pinia
pinia._s.get('callView').isLiveTranscriptionEnabled = true
await setTimeout(() => {}, 1000)
const r = document.querySelector('.transcript').__vueParentComponent.proxy
const say = (message, peerId = 'a', final = true) => r.handleTranscript({ attributes: { peerId, actorId: peerId, actorType: 'users', name: peerId.toUpperCase() } }, message, 'en', final)
const hide = (hidden = true) => { document.querySelector('.transcript').style.display = hidden ? 'none' : '' }

Scenario 1: skip line detection for chunks without layout

  • Run: say('hello'); setTimeout(() => { hide(); say('more') }, 3000)
  • Before: Uncaught TypeError: Cannot read properties of undefined (reading 'lastChunkIndex') at Proxy.updateLines
  • After: clean.

Scenario 2: stop line detection when the last known chunk has no layout

  • Run: say('hello'); say('more'); setTimeout(() => { hide(); say('other speaker', 'b') }, 3000)
  • Before: Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'top') at Proxy.updateLines
  • After: Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'bottom') at Proxy.getLineBoundaries.

Scenario 3: return no line boundaries when lines have no layout

  • Run: say('hello'); say('more'); setTimeout(() => { hide(); say('other speaker', 'b') }, 3000)
  • Before: Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'bottom') at Proxy.getLineBoundaries
  • After: Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'bottom') at Proxy.scrollToBlockAndLine.

Scenario 4: skip scrolling to a line without layout

  • Run: say('hello'); say('more'); setTimeout(() => { hide(); say('other speaker', 'b') }, 3000)
  • Run after a few seconds: hide(false)
  • Before: Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'bottom') at Proxy.scrollToBlockAndLine
  • After: clean

AI (if applicable)

  • The content of this PR was partly or fully generated using AI

🖌️ UI Checklist

🖼️ Screenshots / Screencasts

2026-10-16_16h03_32

🏁 Checklist

  • 🌏 Tested with different browsers / clients:
    • Chromium (Chrome / Edge / Opera / Brave)
    • Firefox
    • Safari
    • Talk Desktop
    • Integrations with Files sidebar and other apps
    • Not risky to browser differences / client
  • 🖌️ Design was reviewed, approved or inspired by the design team
  • ⛑️ Tests are included or not possible
  • 📗 User documentation in https://github.com/nextcloud/documentation/tree/master/user_manual/talk has been updated or is not required

@Antreesy Antreesy added this to the ☃️ Next Major (36) milestone Oct 16, 2026
@Antreesy
Antreesy requested a review from danxuliu October 16, 2026 14:16
@Antreesy Antreesy self-assigned this Oct 16, 2026
@Antreesy Antreesy added bug feature: frontend 🖌️ "Web UI" client feature: call 📹 Voice and video calls labels Oct 16, 2026
@nextcloud-command nextcloud-command added the AI assisted This PR contains AI-assisted commits label Oct 16, 2026
- A transcript block that is not rendered has no client rects, so no lines
were found and the last line was read from an empty list.

Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Maksim Sukharev <antreesy.web@gmail.com>
… layout

- Lines are kept between updates, so the last known chunk can lose its client
rects before the lines are reset, and its last rect was read from an empty list.

Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Maksim Sukharev <antreesy.web@gmail.com>
- Stored lines can point to chunks that lost their client rects, so the
boundaries are empty until the lines are detected again.

Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Maksim Sukharev <antreesy.web@gmail.com>
- When the transcript is hidden the line has no boundaries, so scrolling is
skipped and retried on the next update.

Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Maksim Sukharev <antreesy.web@gmail.com>
@Antreesy
Antreesy force-pushed the fix/19733/transcript-no-client-rects branch from 1f93021 to 0fc55c0 Compare October 16, 2026 14:49
@Antreesy
Antreesy added this pull request to stack #19871 October 16, 2026 15:08
@Antreesy Antreesy mentioned this pull request Oct 16, 2026
3 of 11 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI assisted This PR contains AI-assisted commits bug feature: call 📹 Voice and video calls feature: frontend 🖌️ "Web UI" client

Projects

None yet

Development

Successfully merging this pull request may close these issues.

TranscriptBlock: TypeError in updateLines/getLineBoundaries when a chunk has no layout boxes (empty getClientRects)

2 participants