pstream is dead; long live pstream taciturnaxolotl.github.io/pstream-ng/
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

add random subtitle key

Pas bd40ad05 5da91832

+47 -2
+1
src/assets/locales/en.json
··· 265 265 "changeSpeed": "Increase/decrease playback speed", 266 266 "toggleFullscreen": "Toggle fullscreen", 267 267 "toggleCaptions": "Toggle captions", 268 + "randomCaption": "Select random caption from last used language", 268 269 "syncSubtitlesEarlier": "Sync subtitles earlier (-0.5s)", 269 270 "syncSubtitlesLater": "Sync subtitles later (+0.5s)", 270 271 "barrelRoll": "Do a barrel roll! 🌀",
+4
src/components/overlays/KeyboardCommandsModal.tsx
··· 109 109 description: t("global.keyboardShortcuts.shortcuts.toggleCaptions"), 110 110 }, 111 111 { 112 + key: "Shift+C", 113 + description: t("global.keyboardShortcuts.shortcuts.randomCaption"), 114 + }, 115 + { 112 116 key: "[", 113 117 description: t( 114 118 "global.keyboardShortcuts.shortcuts.syncSubtitlesEarlier",
+29
src/components/player/hooks/useCaptions.ts
··· 148 148 if (enabled) await selectLastUsedLanguage(); 149 149 }, [selectLastUsedLanguage, enabled]); 150 150 151 + const selectRandomCaptionFromLastUsedLanguage = useCallback(async () => { 152 + const language = lastSelectedLanguage ?? "en"; 153 + 154 + // Filter captions by language 155 + const languageCaptions = captions.filter( 156 + (caption) => caption.language === language, 157 + ); 158 + 159 + // If no captions exist for that language, return early 160 + if (languageCaptions.length === 0) return; 161 + 162 + // Filter out the currently selected caption if possible 163 + const availableCaptions = languageCaptions.filter( 164 + (caption) => caption.id !== selectedCaption?.id, 165 + ); 166 + 167 + // If we filtered out all captions (only one caption available), use all captions 168 + const captionsToChooseFrom = 169 + availableCaptions.length > 0 ? availableCaptions : languageCaptions; 170 + 171 + // Pick a random caption 172 + const randomIndex = Math.floor(Math.random() * captionsToChooseFrom.length); 173 + const randomCaption = captionsToChooseFrom[randomIndex]; 174 + 175 + // Select the random caption 176 + await selectCaptionById(randomCaption.id); 177 + }, [lastSelectedLanguage, captions, selectedCaption, selectCaptionById]); 178 + 151 179 return { 152 180 selectLanguage, 153 181 disable, ··· 155 183 toggleLastUsed, 156 184 selectLastUsedLanguageIfEnabled, 157 185 selectCaptionById, 186 + selectRandomCaptionFromLastUsedLanguage, 158 187 }; 159 188 }
+13 -2
src/components/player/internals/KeyboardEvents.tsx
··· 35 35 (s) => s.setLastSuccessfulSource, 36 36 ); 37 37 38 - const { toggleLastUsed } = useCaptions(); 38 + const { toggleLastUsed, selectRandomCaptionFromLastUsedLanguage } = 39 + useCaptions(); 39 40 const setShowVolume = useEmpheralVolumeStore((s) => s.setShowVolume); 40 41 const setDelay = useSubtitleStore((s) => s.setDelay); 41 42 const delay = useSubtitleStore((s) => s.delay); ··· 263 264 toggleMute, 264 265 setIsRolling, 265 266 toggleLastUsed, 267 + selectRandomCaptionFromLastUsedLanguage, 266 268 display, 267 269 mediaPlaying, 268 270 mediaProgress, ··· 295 297 toggleMute, 296 298 setIsRolling, 297 299 toggleLastUsed, 300 + selectRandomCaptionFromLastUsedLanguage, 298 301 display, 299 302 mediaPlaying, 300 303 mediaProgress, ··· 325 328 toggleMute, 326 329 setIsRolling, 327 330 toggleLastUsed, 331 + selectRandomCaptionFromLastUsedLanguage, 328 332 display, 329 333 mediaPlaying, 330 334 mediaProgress, ··· 525 529 if (keyL === "o") dataRef.current.navigateToPreviousEpisode(); 526 530 527 531 // captions 528 - if (keyL === "c") dataRef.current.toggleLastUsed().catch(() => {}); // ignore errors 532 + if (keyL === "c" && !evt.shiftKey) 533 + dataRef.current.toggleLastUsed().catch(() => {}); // ignore errors 534 + // Random caption selection (Shift+C) 535 + if (k === "C" && evt.shiftKey) { 536 + dataRef.current 537 + .selectRandomCaptionFromLastUsedLanguage() 538 + .catch(() => {}); // ignore errors 539 + } 529 540 530 541 // Do a barrell roll! 531 542 if (keyL === "r") {