1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
import { useMovieSubtitleModification } from "@/apis/hooks";
import { usePayload } from "@/modules/redux/hooks/modal";
import { createTask, dispatchTask } from "@/modules/task/utilities";
import {
useLanguageProfileBy,
useProfileItemsToLanguages,
} from "@/utilities/languages";
import { FunctionComponent, useCallback } from "react";
import { BaseModalProps } from "./BaseModal";
import SubtitleUploadModal, {
PendingSubtitle,
Validator,
} from "./SubtitleUploadModal";
const MovieUploadModal: FunctionComponent<BaseModalProps> = (props) => {
const modal = props;
const payload = usePayload<Item.Movie>(modal.modalKey);
const profile = useLanguageProfileBy(payload?.profileId);
const availableLanguages = useProfileItemsToLanguages(profile);
const update = useCallback(async (list: PendingSubtitle<unknown>[]) => {
return list;
}, []);
const {
upload: { mutateAsync },
} = useMovieSubtitleModification();
const validate = useCallback<Validator<unknown>>(
(item) => {
if (item.language === null) {
return {
state: "error",
messages: ["Language is not selected"],
};
} else if (
payload?.subtitles.find((v) => v.code2 === item.language?.code2) !==
undefined
) {
return {
state: "warning",
messages: ["Override existing subtitle"],
};
}
return {
state: "valid",
messages: [],
};
},
[payload?.subtitles]
);
const upload = useCallback(
(items: PendingSubtitle<unknown>[]) => {
if (payload === null) {
return;
}
const { radarrId } = payload;
const tasks = items
.filter((v) => v.language !== null)
.map((v) => {
const { file, language, forced, hi } = v;
if (language === null) {
throw new Error("Language is not selected");
}
return createTask(file.name, mutateAsync, {
radarrId,
form: {
file,
forced,
hi,
language: language.code2,
},
});
});
dispatchTask(tasks, "upload-subtitles");
},
[mutateAsync, payload]
);
return (
<SubtitleUploadModal
hideAllLanguages
initial={{ forced: false }}
availableLanguages={availableLanguages}
columns={[]}
upload={upload}
update={update}
validate={validate}
{...modal}
></SubtitleUploadModal>
);
};
export default MovieUploadModal;
|