Skip to content

feat: per-file subtitle sync memory, audio/sub track memory, sub-step buttons - #22

Open
Adventurous-Field319 wants to merge 1 commit into
FengZeng:mainfrom
Adventurous-Field319:feature/per-file-subtitle-sync-and-track-memory
Open

feat: per-file subtitle sync memory, audio/sub track memory, sub-step buttons#22
Adventurous-Field319 wants to merge 1 commit into
FengZeng:mainfrom
Adventurous-Field319:feature/per-file-subtitle-sync-and-track-memory

Conversation

@Adventurous-Field319

Copy link
Copy Markdown

Summary

This PR adds several quality-of-life improvements for subtitle synchronization and per-file media settings.

Changes

Subtitle sync improvements:

  • Extended subtitle delay range from ±10s to ±300s
  • Added sub-step buttons (⏪ previous / ⏩ next subtitle line) to the player controls
  • Per-file subtitle delay memory — each file remembers its own delay, persisted to disk across app restarts (200-file LRU cap to prevent bloat)
  • Fixed sync bleed: switching files no longer carries over the previous file's delay

Per-file track memory:

  • Selected audio track (dub/language) is remembered per file and restored on app restart
  • Selected subtitle track is remembered per file and restored on app restart

Bug fixes:

  • Fixed race condition where track restore logic ran before persisted state finished loading from disk
  • Fixed type mismatch: MPV track IDs are number but were compared with === against stored string values, causing silent restore failures
  • Extended Rust UiState struct with MediaTracksState to prevent Serde from silently dropping new fields on save

New Tauri command:

  • Added mpv_get_property_string to read MPV property values from the frontend (used for verify+retry of sub-delay after subtitle track initialization resets it)

Notes

MPV resets sub-delay after subtitle tracks finish initializing (which happens after file-loaded fires). A verify-and-retry mechanism reads back the actual value at 500ms and 1500ms post-load and re-applies if needed.

- Extended subtitle delay slider range from +-10s to +-300s
- Added sub-step buttons (previous/next subtitle line) to RightControls
- Per-file subtitle delay memory: each file stores its own delay, persisted
  to disk across app restarts (200-file LRU cap)
- Per-file audio track memory: selected dub/language track remembered per file
- Per-file subtitle track memory: selected subtitle track remembered per file
- Fixed sync bleed: switching files no longer carries over previous delay
- Fixed race condition: hydration promise ensures disk state loads before restore
- Fixed type mismatch: MPV track IDs (number) vs stored strings (String cast)
- Fixed Rust UiState struct to persist new fields (MediaTracksState added)
- Added mpv_get_property_string Tauri command for reading MPV properties
- Verify+retry mechanism for sub-delay (MPV resets it on subtitle track init)
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