mirror of
https://github.com/p-stream/p-stream.git
synced 2026-03-11 17:55:33 +00:00
add random subtitle key
This commit is contained in:
parent
5da9183260
commit
bd40ad0582
4 changed files with 47 additions and 2 deletions
|
|
@ -265,6 +265,7 @@
|
|||
"changeSpeed": "Increase/decrease playback speed",
|
||||
"toggleFullscreen": "Toggle fullscreen",
|
||||
"toggleCaptions": "Toggle captions",
|
||||
"randomCaption": "Select random caption from last used language",
|
||||
"syncSubtitlesEarlier": "Sync subtitles earlier (-0.5s)",
|
||||
"syncSubtitlesLater": "Sync subtitles later (+0.5s)",
|
||||
"barrelRoll": "Do a barrel roll! 🌀",
|
||||
|
|
|
|||
|
|
@ -108,6 +108,10 @@ const getShortcutGroups = (t: (key: string) => string): ShortcutGroup[] => [
|
|||
key: "C",
|
||||
description: t("global.keyboardShortcuts.shortcuts.toggleCaptions"),
|
||||
},
|
||||
{
|
||||
key: "Shift+C",
|
||||
description: t("global.keyboardShortcuts.shortcuts.randomCaption"),
|
||||
},
|
||||
{
|
||||
key: "[",
|
||||
description: t(
|
||||
|
|
|
|||
|
|
@ -148,6 +148,34 @@ export function useCaptions() {
|
|||
if (enabled) await selectLastUsedLanguage();
|
||||
}, [selectLastUsedLanguage, enabled]);
|
||||
|
||||
const selectRandomCaptionFromLastUsedLanguage = useCallback(async () => {
|
||||
const language = lastSelectedLanguage ?? "en";
|
||||
|
||||
// Filter captions by language
|
||||
const languageCaptions = captions.filter(
|
||||
(caption) => caption.language === language,
|
||||
);
|
||||
|
||||
// If no captions exist for that language, return early
|
||||
if (languageCaptions.length === 0) return;
|
||||
|
||||
// Filter out the currently selected caption if possible
|
||||
const availableCaptions = languageCaptions.filter(
|
||||
(caption) => caption.id !== selectedCaption?.id,
|
||||
);
|
||||
|
||||
// If we filtered out all captions (only one caption available), use all captions
|
||||
const captionsToChooseFrom =
|
||||
availableCaptions.length > 0 ? availableCaptions : languageCaptions;
|
||||
|
||||
// Pick a random caption
|
||||
const randomIndex = Math.floor(Math.random() * captionsToChooseFrom.length);
|
||||
const randomCaption = captionsToChooseFrom[randomIndex];
|
||||
|
||||
// Select the random caption
|
||||
await selectCaptionById(randomCaption.id);
|
||||
}, [lastSelectedLanguage, captions, selectedCaption, selectCaptionById]);
|
||||
|
||||
return {
|
||||
selectLanguage,
|
||||
disable,
|
||||
|
|
@ -155,5 +183,6 @@ export function useCaptions() {
|
|||
toggleLastUsed,
|
||||
selectLastUsedLanguageIfEnabled,
|
||||
selectCaptionById,
|
||||
selectRandomCaptionFromLastUsedLanguage,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,8 @@ export function KeyboardEvents() {
|
|||
(s) => s.setLastSuccessfulSource,
|
||||
);
|
||||
|
||||
const { toggleLastUsed } = useCaptions();
|
||||
const { toggleLastUsed, selectRandomCaptionFromLastUsedLanguage } =
|
||||
useCaptions();
|
||||
const setShowVolume = useEmpheralVolumeStore((s) => s.setShowVolume);
|
||||
const setDelay = useSubtitleStore((s) => s.setDelay);
|
||||
const delay = useSubtitleStore((s) => s.delay);
|
||||
|
|
@ -263,6 +264,7 @@ export function KeyboardEvents() {
|
|||
toggleMute,
|
||||
setIsRolling,
|
||||
toggleLastUsed,
|
||||
selectRandomCaptionFromLastUsedLanguage,
|
||||
display,
|
||||
mediaPlaying,
|
||||
mediaProgress,
|
||||
|
|
@ -295,6 +297,7 @@ export function KeyboardEvents() {
|
|||
toggleMute,
|
||||
setIsRolling,
|
||||
toggleLastUsed,
|
||||
selectRandomCaptionFromLastUsedLanguage,
|
||||
display,
|
||||
mediaPlaying,
|
||||
mediaProgress,
|
||||
|
|
@ -325,6 +328,7 @@ export function KeyboardEvents() {
|
|||
toggleMute,
|
||||
setIsRolling,
|
||||
toggleLastUsed,
|
||||
selectRandomCaptionFromLastUsedLanguage,
|
||||
display,
|
||||
mediaPlaying,
|
||||
mediaProgress,
|
||||
|
|
@ -525,7 +529,14 @@ export function KeyboardEvents() {
|
|||
if (keyL === "o") dataRef.current.navigateToPreviousEpisode();
|
||||
|
||||
// captions
|
||||
if (keyL === "c") dataRef.current.toggleLastUsed().catch(() => {}); // ignore errors
|
||||
if (keyL === "c" && !evt.shiftKey)
|
||||
dataRef.current.toggleLastUsed().catch(() => {}); // ignore errors
|
||||
// Random caption selection (Shift+C)
|
||||
if (k === "C" && evt.shiftKey) {
|
||||
dataRef.current
|
||||
.selectRandomCaptionFromLastUsedLanguage()
|
||||
.catch(() => {}); // ignore errors
|
||||
}
|
||||
|
||||
// Do a barrell roll!
|
||||
if (keyL === "r") {
|
||||
|
|
|
|||
Loading…
Reference in a new issue