fix(subtitles): address CodeRabbit review

- Unify external detection: isExternalSubtitle drops the bare-DeliveryUrl case
  (an Hls-delivered sub has a DeliveryUrl but isn't sub-add-ed) so sorting,
  loading and resolution agree; compareTracksForMenu now uses it.
- applyMpvSubtitleSelection wraps player calls in try/catch — fire-and-forget
  call sites no longer risk unhandled rejections.
- VideoContext offline-transcoded branch: treat missing IsTextSubtitleStream as
  text (use !isImageBasedSubtitle), matching the shared helper.
- ItemContent.tv refreshSubtitleTracks: apply compareTracksForMenu like the
  initial list.
- Tests: use the @/ alias; rework the embedded cases to actually exercise
  identity (reversed player order) and the ordinal fallback (same-language,
  no title).
This commit is contained in:
Gauvain
2026-06-30 01:08:50 +02:00
parent 1c158dea4e
commit 90ea934548
4 changed files with 76 additions and 52 deletions

View File

@@ -198,7 +198,9 @@ export const VideoProvider: React.FC<{ children: ReactNode }> = ({
// track list (same as online) — robust to the transcoded file's track
// structure differing from the original MediaStreams. Order matches web.
for (const sub of [...allSubs].sort(compareTracksForMenu)) {
if (sub.IsTextSubtitleStream) {
// Treat missing IsTextSubtitleStream as text (image-based only when
// explicitly false — matches isImageBasedSubtitle).
if (!isImageBasedSubtitle(sub)) {
subs.push({
name: sub.DisplayTitle || "Unknown",
index: sub.Index ?? -1,