Skip to content

fix(ui+audio): resync on lazy unmute + review fixes#24

Merged
tcconnally merged 1 commit into
mainfrom
feat/ui-polish-perf
Jul 4, 2026
Merged

fix(ui+audio): resync on lazy unmute + review fixes#24
tcconnally merged 1 commit into
mainfrom
feat/ui-polish-perf

Conversation

@tcconnally

Copy link
Copy Markdown
Owner

Follow-up to #23 addressing the code-review findings on the branch.

Fixes

  • Choppy audio on unmute (cell.py _enable_audio_track): after selecting the audio track mid-stream, re-seek to the current position. Enabling a track cold under video_sync=audio made the master clock follow a half-filled buffer, producing stutter until audio_buffer filled. Re-seeking refills both decoders from a common point — one brief blip on unmute instead of sustained choppiness. The muted-cell decode-skip optimization is preserved.
  • Runaway LOADING pulse (cell.py hideEvent): stop the looping opacity animation when a cell is hidden, so a cell that never reached play() (failed query, app closing mid-stagger) doesn't drive repaints forever. Also removed the redundant stop() before start().
  • Fragile glyph tint (cell.py + theme.py): active favorite/trash colour now comes from QSS #favBtn:checked / #tagBtn:checked (new theme.FAVORITE gold) instead of a VS16 colour-emoji selector fonts can silently ignore. Glyphs are always monochrome VS15; removed _refresh_fav_glyph/_refresh_tag_glyph and _COLOR.
  • Duplicate _s() helper (constants.py): single source; cell.py and wizard.py import it.

Testing

  • All 8 test suites pass (tests/run_all.py).
  • ⚠️ Not verified live: the audio fix is reasoned from the mpv pipeline, not reproduced on-device (a wedged prior instance blocked a live run). Recommend confirming on the wall: unmute a cell and check the stutter is gone (expect one brief blip at the unmute moment).

🤖 Generated with Claude Code

…t glyph tint, dedup _s

Addresses the code-review findings on this branch:

- cell.py _enable_audio_track: re-seek to the current position after
  selecting the audio track. Enabling a track mid-stream started its
  decoder cold; with video_sync=audio the master clock followed the
  half-filled buffer, so unmuting a cell produced choppy audio until
  audio_buffer filled. Re-seeking refills both decoders from a common
  point (one brief blip on unmute instead of sustained stutter).

- cell.py hideEvent: stop the looping LOADING pulse so a cell that never
  reached play() (failed query, app closing mid-stagger) doesn't drive
  opacity repaints forever. Dropped the redundant stop()-before-start().

- cell.py + theme.py: drive the active favorite/trash glyph colour from
  QSS #favBtn:checked / #tagBtn:checked (new theme.FAVORITE gold) instead
  of a VS16 colour-emoji selector that fonts can silently ignore. Glyphs
  are always monochrome VS15; removed _refresh_fav_glyph/_refresh_tag_glyph
  and the _COLOR constant.

- constants.py: single _s() helper; cell.py and wizard.py now import it
  instead of each defining their own.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@tcconnally tcconnally merged commit a0b8f85 into main Jul 4, 2026
2 checks passed
@tcconnally tcconnally deleted the feat/ui-polish-perf branch July 4, 2026 17:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant