mirror of
https://github.com/p-stream/p-stream.git
synced 2026-04-21 13:42:17 +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",
|
"changeSpeed": "Increase/decrease playback speed",
|
||||||
"toggleFullscreen": "Toggle fullscreen",
|
"toggleFullscreen": "Toggle fullscreen",
|
||||||
"toggleCaptions": "Toggle captions",
|
"toggleCaptions": "Toggle captions",
|
||||||
|
"randomCaption": "Select random caption from last used language",
|
||||||
"syncSubtitlesEarlier": "Sync subtitles earlier (-0.5s)",
|
"syncSubtitlesEarlier": "Sync subtitles earlier (-0.5s)",
|
||||||
"syncSubtitlesLater": "Sync subtitles later (+0.5s)",
|
"syncSubtitlesLater": "Sync subtitles later (+0.5s)",
|
||||||
"barrelRoll": "Do a barrel roll! 🌀",
|
"barrelRoll": "Do a barrel roll! 🌀",
|
||||||
|
|
|
||||||
|
|
@ -108,6 +108,10 @@ const getShortcutGroups = (t: (key: string) => string): ShortcutGroup[] => [
|
||||||
key: "C",
|
key: "C",
|
||||||
description: t("global.keyboardShortcuts.shortcuts.toggleCaptions"),
|
description: t("global.keyboardShortcuts.shortcuts.toggleCaptions"),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
key: "Shift+C",
|
||||||
|
description: t("global.keyboardShortcuts.shortcuts.randomCaption"),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
key: "[",
|
key: "[",
|
||||||
description: t(
|
description: t(
|
||||||
|
|
|
||||||
|
|
@ -148,6 +148,34 @@ export function useCaptions() {
|
||||||
if (enabled) await selectLastUsedLanguage();
|
if (enabled) await selectLastUsedLanguage();
|
||||||
}, [selectLastUsedLanguage, enabled]);
|
}, [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 {
|
return {
|
||||||
selectLanguage,
|
selectLanguage,
|
||||||
disable,
|
disable,
|
||||||
|
|
@ -155,5 +183,6 @@ export function useCaptions() {
|
||||||
toggleLastUsed,
|
toggleLastUsed,
|
||||||
selectLastUsedLanguageIfEnabled,
|
selectLastUsedLanguageIfEnabled,
|
||||||
selectCaptionById,
|
selectCaptionById,
|
||||||
|
selectRandomCaptionFromLastUsedLanguage,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,8 @@ export function KeyboardEvents() {
|
||||||
(s) => s.setLastSuccessfulSource,
|
(s) => s.setLastSuccessfulSource,
|
||||||
);
|
);
|
||||||
|
|
||||||
const { toggleLastUsed } = useCaptions();
|
const { toggleLastUsed, selectRandomCaptionFromLastUsedLanguage } =
|
||||||
|
useCaptions();
|
||||||
const setShowVolume = useEmpheralVolumeStore((s) => s.setShowVolume);
|
const setShowVolume = useEmpheralVolumeStore((s) => s.setShowVolume);
|
||||||
const setDelay = useSubtitleStore((s) => s.setDelay);
|
const setDelay = useSubtitleStore((s) => s.setDelay);
|
||||||
const delay = useSubtitleStore((s) => s.delay);
|
const delay = useSubtitleStore((s) => s.delay);
|
||||||
|
|
@ -263,6 +264,7 @@ export function KeyboardEvents() {
|
||||||
toggleMute,
|
toggleMute,
|
||||||
setIsRolling,
|
setIsRolling,
|
||||||
toggleLastUsed,
|
toggleLastUsed,
|
||||||
|
selectRandomCaptionFromLastUsedLanguage,
|
||||||
display,
|
display,
|
||||||
mediaPlaying,
|
mediaPlaying,
|
||||||
mediaProgress,
|
mediaProgress,
|
||||||
|
|
@ -295,6 +297,7 @@ export function KeyboardEvents() {
|
||||||
toggleMute,
|
toggleMute,
|
||||||
setIsRolling,
|
setIsRolling,
|
||||||
toggleLastUsed,
|
toggleLastUsed,
|
||||||
|
selectRandomCaptionFromLastUsedLanguage,
|
||||||
display,
|
display,
|
||||||
mediaPlaying,
|
mediaPlaying,
|
||||||
mediaProgress,
|
mediaProgress,
|
||||||
|
|
@ -325,6 +328,7 @@ export function KeyboardEvents() {
|
||||||
toggleMute,
|
toggleMute,
|
||||||
setIsRolling,
|
setIsRolling,
|
||||||
toggleLastUsed,
|
toggleLastUsed,
|
||||||
|
selectRandomCaptionFromLastUsedLanguage,
|
||||||
display,
|
display,
|
||||||
mediaPlaying,
|
mediaPlaying,
|
||||||
mediaProgress,
|
mediaProgress,
|
||||||
|
|
@ -525,7 +529,14 @@ export function KeyboardEvents() {
|
||||||
if (keyL === "o") dataRef.current.navigateToPreviousEpisode();
|
if (keyL === "o") dataRef.current.navigateToPreviousEpisode();
|
||||||
|
|
||||||
// captions
|
// 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!
|
// Do a barrell roll!
|
||||||
if (keyL === "r") {
|
if (keyL === "r") {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue