Skip to content

Commit

Permalink
Add persistance of sub scraping
Browse files Browse the repository at this point in the history
  • Loading branch information
leodenham committed May 20, 2024
1 parent ee4145a commit ff5b494
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 6 deletions.
38 changes: 33 additions & 5 deletions src/components/player/hooks/useCaptions.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { useCallback, useMemo } from "react";
import subsrt from "subsrt-ts";
import subsrt, { convert } from "subsrt-ts";

import { proxiedFetch } from "@/backend/helpers/fetch";
import { downloadCaption, downloadWebVTT } from "@/backend/helpers/subs";
import { Caption } from "@/stores/player/slices/source";
import { usePlayerStore } from "@/stores/player/store";
Expand All @@ -19,6 +20,12 @@ export function useCaptions() {
);
const setCaption = usePlayerStore((s) => s.setCaption);
const lastSelectedLanguage = useSubtitleStore((s) => s.lastSelectedLanguage);
const scrapedSubtitlesLast = useSubtitleStore((s) => s.scrapedSubtitlesLast);
const scrapedSubtitles = useSubtitleStore((s) => s.lastScraped);
const scrapedSubtitlesLang = useSubtitleStore((s) => s.lastScrapedLanguage);

const setScrapeSubtitles = useSubtitleStore((s) => s.setScrapeSubtitles);
const setScrapedLanguage = useSubtitleStore((s) => s.setScrapeSubtitlesLang);

const captionList = usePlayerStore((s) => s.captionList);
const getHlsCaptionList = usePlayerStore((s) => s.display?.getCaptionList);
Expand Down Expand Up @@ -106,10 +113,31 @@ export function useCaptions() {
}, [setCaption, setLanguage]);

const selectLastUsedLanguage = useCallback(async () => {
const language = lastSelectedLanguage ?? "en";
await selectLanguage(language);
return true;
}, [lastSelectedLanguage, selectLanguage]);
if (scrapedSubtitles && scrapedSubtitlesLang && scrapedSubtitlesLast) {
setScrapeSubtitles(scrapedSubtitles);
setScrapedLanguage(scrapedSubtitlesLang);
const text = await (await proxiedFetch(scrapedSubtitles)).text();
const converted = convert(text, "srt");
setCaption({
language: scrapedSubtitlesLang,
srtData: converted,
id: `scraped - ${scrapedSubtitlesLang}`,
});
} else {
const language = lastSelectedLanguage ?? "en";
await selectLanguage(language);
return true;
}
}, [
lastSelectedLanguage,
selectLanguage,
scrapedSubtitlesLast,
scrapedSubtitles,
scrapedSubtitlesLang,
setScrapeSubtitles,
setScrapedLanguage,
setCaption,
]);

const toggleLastUsed = useCallback(async () => {
if (enabled) disable();
Expand Down
15 changes: 14 additions & 1 deletion src/stores/subtitles/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ export interface SubtitleStore {
};
enabled: boolean;
lastSelectedLanguage: string | null;
lastScrapedLanguage: string | null;
lastScraped: string | null;
scrapedSubtitlesLast: boolean;
styling: SubtitleStyling;
overrideCasing: boolean;
delay: number;
Expand All @@ -61,6 +64,9 @@ export const useSubtitleStore = create(
lastSelectedLanguage: null,
},
lastSelectedLanguage: null,
lastScrapedLanguage: null,
lastScraped: null,
scrapedSubtitlesLast: false,
overrideCasing: false,
delay: 0,
scrapeSubtitles: null,
Expand Down Expand Up @@ -100,7 +106,10 @@ export const useSubtitleStore = create(
setLanguage(lang) {
set((s) => {
s.enabled = !!lang;
if (lang) s.lastSelectedLanguage = lang;
if (lang) {
s.lastSelectedLanguage = lang;
s.scrapedSubtitlesLast = false;
}
});
},
setCustomSubs() {
Expand All @@ -123,6 +132,7 @@ export const useSubtitleStore = create(
set((s) => {
s.lastSelectedLanguage = lang;
s.lastSync.lastSelectedLanguage = lang;
s.scrapedSubtitlesLast = false;
});
},
setScrapeSubtitles(id) {
Expand All @@ -135,11 +145,14 @@ export const useSubtitleStore = create(
if (lang) {
s.scrapeSubtitlesLang = lang;
s.enabled = true;
s.scrapedSubtitlesLast = true;
}
});
},
clearScrapeSubtitles() {
set((s) => {
s.lastScraped = s.scrapeSubtitles;
s.lastScrapedLanguage = s.scrapeSubtitlesLang;
s.scrapeSubtitles = null;
s.scrapeSubtitlesLang = null;
});
Expand Down

0 comments on commit ff5b494

Please sign in to comment.