mirror of
https://github.com/p-stream/p-stream.git
synced 2026-03-11 17:55:33 +00:00
Refactor translation task handling to improve error management and state updates
This commit is contained in:
parent
f71b659a70
commit
48f72c228e
5 changed files with 31 additions and 19 deletions
|
|
@ -713,6 +713,7 @@ export function CaptionsView({
|
|||
selected={
|
||||
(!currentTranslateTask && selectedLanguage === language) ||
|
||||
(!!currentTranslateTask &&
|
||||
!currentTranslateTask.error &&
|
||||
currentTranslateTask.targetCaption.language === language)
|
||||
}
|
||||
rightText={captionsForLang.length.toString()}
|
||||
|
|
|
|||
|
|
@ -127,14 +127,21 @@ export function LanguageSubtitlesView({
|
|||
countryCode={v.language}
|
||||
selected={
|
||||
v.id === selectedCaptionId ||
|
||||
v.id === currentTranslateTask?.targetCaption?.id
|
||||
(!!currentTranslateTask &&
|
||||
!currentTranslateTask.error &&
|
||||
v.id === currentTranslateTask.targetCaption.id)
|
||||
}
|
||||
disabled={
|
||||
!!currentTranslateTask &&
|
||||
!currentTranslateTask.done &&
|
||||
!currentTranslateTask.error
|
||||
}
|
||||
disabled={!!currentTranslateTask && !currentTranslateTask.done}
|
||||
loading={
|
||||
(v.id === currentlyDownloading && downloadReq.loading) ||
|
||||
(!!currentTranslateTask &&
|
||||
v.id === currentTranslateTask.targetCaption.id &&
|
||||
!currentTranslateTask.done)
|
||||
!currentTranslateTask.done &&
|
||||
!currentTranslateTask.error)
|
||||
}
|
||||
error={
|
||||
v.id === currentlyDownloading && downloadReq.error
|
||||
|
|
@ -142,7 +149,9 @@ export function LanguageSubtitlesView({
|
|||
: undefined
|
||||
}
|
||||
onClick={() =>
|
||||
(!currentTranslateTask || currentTranslateTask.done) &&
|
||||
(!currentTranslateTask ||
|
||||
currentTranslateTask.done ||
|
||||
currentTranslateTask.error) &&
|
||||
startDownload(v.id)
|
||||
}
|
||||
onTranslate={() => {
|
||||
|
|
@ -153,7 +162,11 @@ export function LanguageSubtitlesView({
|
|||
: "/captionsOverlay/translateSubtitleOverlay",
|
||||
);
|
||||
}}
|
||||
isTranslatedTarget={v.id === currentTranslateTask?.targetCaption?.id}
|
||||
isTranslatedTarget={
|
||||
!!currentTranslateTask &&
|
||||
!currentTranslateTask.error &&
|
||||
v.id === currentTranslateTask.targetCaption.id
|
||||
}
|
||||
onDoubleClick={handleDoubleClick}
|
||||
flag
|
||||
translatable
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ export function TranslateSubtitleView({
|
|||
}: LanguageSubtitlesViewProps) {
|
||||
const { t } = useTranslation();
|
||||
const router = useOverlayRouter(id);
|
||||
const { setDirectCaption } = useCaptions();
|
||||
const { setDirectCaption, disable: disableCaptions } = useCaptions();
|
||||
const translateTask = usePlayerStore((s) => s.caption.translateTask);
|
||||
const translateCaption = usePlayerStore((s) => s.translateCaption);
|
||||
const clearTranslateTask = usePlayerStore((s) => s.clearTranslateTask);
|
||||
|
|
@ -109,6 +109,7 @@ export function TranslateSubtitleView({
|
|||
|
||||
async function onClick() {
|
||||
clearTranslateTask();
|
||||
disableCaptions();
|
||||
await translateCaption(caption, langCode);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ export function useCaptions() {
|
|||
(s) => s.resetSubtitleSpecificSettings,
|
||||
);
|
||||
const setCaption = usePlayerStore((s) => s.setCaption);
|
||||
const clearTranslateTask = usePlayerStore((s) => s.clearTranslateTask);
|
||||
const currentTranslateTask = usePlayerStore((s) => s.caption.translateTask);
|
||||
const lastSelectedLanguage = useSubtitleStore((s) => s.lastSelectedLanguage);
|
||||
const setIsOpenSubtitles = useSubtitleStore((s) => s.setIsOpenSubtitles);
|
||||
|
|
@ -119,16 +118,9 @@ export function useCaptions() {
|
|||
captionToSet.srtData = srtData;
|
||||
}
|
||||
|
||||
clearTranslateTask();
|
||||
setDirectCaption(captionToSet, caption);
|
||||
},
|
||||
[
|
||||
captions,
|
||||
getSubtitleTracks,
|
||||
setSubtitlePreference,
|
||||
setDirectCaption,
|
||||
clearTranslateTask,
|
||||
],
|
||||
[captions, getSubtitleTracks, setSubtitlePreference, setDirectCaption],
|
||||
);
|
||||
|
||||
const selectLanguage = useCallback(
|
||||
|
|
@ -141,11 +133,10 @@ export function useCaptions() {
|
|||
);
|
||||
|
||||
const disable = useCallback(async () => {
|
||||
clearTranslateTask();
|
||||
setIsOpenSubtitles(false);
|
||||
setCaption(null);
|
||||
setLanguage(null);
|
||||
}, [setCaption, setLanguage, setIsOpenSubtitles, clearTranslateTask]);
|
||||
}, [setCaption, setLanguage, setIsOpenSubtitles]);
|
||||
|
||||
const selectLastUsedLanguage = useCallback(async () => {
|
||||
const language = lastSelectedLanguage ?? "en";
|
||||
|
|
@ -226,7 +217,6 @@ export function useCaptions() {
|
|||
selectCaptionById(sameLanguageCaption.id);
|
||||
} else {
|
||||
// No caption with the same language found, clear the selection
|
||||
clearTranslateTask();
|
||||
setCaption(null);
|
||||
}
|
||||
}
|
||||
|
|
@ -235,7 +225,6 @@ export function useCaptions() {
|
|||
selectedCaption,
|
||||
setCaption,
|
||||
selectCaptionById,
|
||||
clearTranslateTask,
|
||||
currentTranslateTask,
|
||||
]);
|
||||
|
||||
|
|
|
|||
|
|
@ -238,6 +238,14 @@ export const createSourceSlice: MakeSlice<SourceSlice> = (set, get) => ({
|
|||
setCaption(caption) {
|
||||
const store = get();
|
||||
store.display?.setCaption(caption);
|
||||
if (
|
||||
!caption ||
|
||||
(store.caption.translateTask &&
|
||||
store.caption.translateTask.targetCaption.id !== caption?.id &&
|
||||
store.caption.translateTask.translatedCaption?.id !== caption?.id)
|
||||
) {
|
||||
store.clearTranslateTask();
|
||||
}
|
||||
set((s) => {
|
||||
s.caption.selected = caption;
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue