Skip to content

Commit 0efa3aa

Browse files
committed
fix: every subtitle track is loaded and extracted at the same time, regardless of use
1 parent a45c168 commit 0efa3aa

2 files changed

Lines changed: 31 additions & 20 deletions

File tree

resources/js/components/video/VideoPlayer.vue

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,12 +1169,10 @@ defineExpose({
11691169
controlsList="nodownload"
11701170
>
11711171
<track
1172-
v-for="track in stateVideo.subtitles"
1173-
:key="track.id"
11741172
kind="captions"
1175-
:label="track.language"
1176-
:srclang="track.language"
1177-
:src="`/data/subtitles/${track.metadata_uuid}/${track.track_id}${track.track_id === 0 ? `.${track.language}` : ''}`"
1173+
:label="playerSubtitles?.currentSubtitleTrack?.language ?? 'und'"
1174+
:srclang="playerSubtitles?.currentSubtitleTrack?.language ?? 'und'"
1175+
:src="playerSubtitles?.currentSubtitleTrackUrl"
11781176
/>
11791177
Your browser does not support the video tag.
11801178
</video>
@@ -1657,7 +1655,7 @@ video::cue {
16571655
16581656
/* Incompatible with Firefox */
16591657
video::-webkit-media-text-track-container {
1660-
font-size: clamp(90%, calc(var(--subtitle-font-size, 100%) * var(--subtitle-font-multiplier, 1)), 240%) !important;
1658+
font-size: calc(var(--subtitle-font-size, 100%) * var(--subtitle-font-multiplier, 1)) !important;
16611659
}
16621660
16631661
/* Incompatible with Firefox */

resources/js/components/video/subtitles/PlayerSubtitles.vue

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { SubtitleResource } from '@/types/resources';
33
import type { PopoverItem } from '@aminnausin/cedar-ui';
44
import type { Ref } from 'vue';
55
6-
import { computed, inject, ref, useTemplateRef } from 'vue';
6+
import { computed, inject, nextTick, ref, useTemplateRef } from 'vue';
77
import { useContentStore } from '@/stores/ContentStore';
88
import { storeToRefs } from 'pinia';
99
import { round } from 'lodash-es';
@@ -34,6 +34,8 @@ const props = defineProps<PlayerSubtitlesProps>();
3434
3535
//#region Local State
3636
const currentSubtitleTrack = ref<SubtitleResource>();
37+
const currentSubtitleTrackUrl = computed<string>(() => buildSubtitleUrl(currentSubtitleTrack.value));
38+
3739
const isShowingSubtitles = ref(false);
3840
const subtitleSizeMultiplier = ref(1);
3941
const subtitleSizeMin = 0.5;
@@ -88,12 +90,9 @@ const defaultSubtitleTrack = computed<SubtitleResource | undefined>(() => {
8890
});
8991
9092
const handleSizeChange = (_: Event, dir: number = 0) => {
91-
if (dir) {
92-
subtitleSizeMultiplier.value = round(
93-
Math.max(Math.min(Number.parseFloat(`${subtitleSizeMultiplier.value}`) + subtitleSizeDelta * dir, subtitleSizeMax), subtitleSizeMin),
94-
2,
95-
);
96-
}
93+
if (dir === 0) return;
94+
95+
subtitleSizeMultiplier.value = round(Math.max(Math.min(Number.parseFloat(`${subtitleSizeMultiplier.value}`) + subtitleSizeDelta * dir, subtitleSizeMax), subtitleSizeMin), 2);
9796
};
9897
9998
const handleSizeWheel = (event: WheelEvent) => {
@@ -105,11 +104,12 @@ const handleSizeWheel = (event: WheelEvent) => {
105104
//#endregion
106105
107106
//#region Functions
107+
108108
/**
109109
* Handle Subtitles Toggle
110110
* @param track -> Defaults to first available subtitle only if not currently showing anything
111111
*/
112-
const handleSubtitles = (track?: SubtitleResource) => {
112+
const handleSubtitles = async (track?: SubtitleResource) => {
113113
const nextTrack = track ?? (isShowingSubtitles.value ? undefined : defaultSubtitleTrack.value);
114114
115115
isShowingSubtitles.value = !!nextTrack;
@@ -130,11 +130,13 @@ const handleSubtitles = (track?: SubtitleResource) => {
130130
const languageTag = nextTrack.track_id === 0 ? `.${nextTrack.language}` : '';
131131
instantiateOctopus(`/data/subtitles/${nextTrack.metadata_uuid}/${nextTrack.track_id}${languageTag}.ass`);
132132
hideAllTracks();
133-
} else {
134-
clearOctopus();
135-
for (const textTrack of player.value.textTracks) {
136-
textTrack.mode = isShowingSubtitles.value && textTrack.language === currentSubtitleTrack.value?.language ? 'showing' : 'hidden';
137-
}
133+
return;
134+
}
135+
clearOctopus();
136+
await nextTick();
137+
for (const textTrack of player.value.textTracks) {
138+
textTrack.mode = isShowingSubtitles.value ? 'showing' : 'hidden';
139+
console.log('enabled track', textTrack);
138140
}
139141
};
140142
@@ -155,14 +157,25 @@ const hideAllTracks = () => {
155157
textTrack.mode = 'hidden';
156158
}
157159
};
160+
161+
const buildSubtitleUrl = (subtitle?: SubtitleResource): string => {
162+
if (!subtitle) return '';
163+
164+
const { metadata_uuid, track_id, language, codec } = subtitle;
165+
const languageSlug = track_id === 0 ? `.${language}` : '';
166+
const extension = codec === 'ass' ? '.ass' : '.vtt';
167+
return `/data/subtitles/${metadata_uuid}/${track_id}${languageSlug}${extension}`;
168+
};
169+
158170
//#endregion
159171
defineExpose({
160172
handleSubtitles,
161173
clearSubtitles,
162174
resizeOctopus,
163175
isShowingSubtitles,
164-
currentSubtitleTrack,
165176
defaultSubtitleTrack,
177+
currentSubtitleTrack,
178+
currentSubtitleTrackUrl,
166179
subtitleSizeMultiplier,
167180
subtitlesPopover,
168181
});

0 commit comments

Comments
 (0)