Skip to content

Commit 8705f80

Browse files
committed
Merge remote-tracking branch 'origin/development' into development
2 parents 9ac6c69 + f146d97 commit 8705f80

File tree

1 file changed

+89
-7
lines changed

1 file changed

+89
-7
lines changed

Diff for: frontend/src/components/modals/SubtitleToolsModal.tsx

+89-7
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,51 @@ import {
99
Text,
1010
} from "@mantine/core";
1111
import { ColumnDef } from "@tanstack/react-table";
12+
import {
13+
useEpisodeSubtitleModification,
14+
useMovieSubtitleModification,
15+
} from "@/apis/hooks";
1216
import Language from "@/components/bazarr/Language";
1317
import SubtitleToolsMenu from "@/components/SubtitleToolsMenu";
1418
import SimpleTable from "@/components/tables/SimpleTable";
15-
import { withModal } from "@/modules/modals";
16-
import { isMovie } from "@/utilities";
19+
import { useModals, withModal } from "@/modules/modals";
20+
import { task, TaskGroup } from "@/modules/task";
21+
import { fromPython, isMovie, toPython } from "@/utilities";
1722

1823
type SupportType = Item.Episode | Item.Movie;
1924

2025
type TableColumnType = FormType.ModifySubtitle & {
2126
raw_language: Language.Info;
27+
seriesId: number;
28+
name: string;
29+
isMovie: boolean;
30+
};
31+
32+
type LocalisedType = {
33+
id: number;
34+
seriesId: number;
35+
type: "movie" | "episode";
36+
name: string;
37+
isMovie: boolean;
2238
};
2339

24-
function getIdAndType(item: SupportType): [number, "episode" | "movie"] {
40+
function getLocalisedValues(item: SupportType): LocalisedType {
2541
if (isMovie(item)) {
26-
return [item.radarrId, "movie"];
42+
return {
43+
seriesId: 0,
44+
id: item.radarrId,
45+
type: "movie",
46+
name: item.title,
47+
isMovie: true,
48+
};
2749
} else {
28-
return [item.sonarrEpisodeId, "episode"];
50+
return {
51+
seriesId: item.sonarrSeriesId,
52+
id: item.sonarrEpisodeId,
53+
type: "episode",
54+
name: item.title,
55+
isMovie: false,
56+
};
2957
}
3058
}
3159

@@ -41,6 +69,11 @@ const SubtitleToolView: FunctionComponent<SubtitleToolViewProps> = ({
4169
payload,
4270
}) => {
4371
const [selections, setSelections] = useState<TableColumnType[]>([]);
72+
const { remove: removeEpisode, download: downloadEpisode } =
73+
useEpisodeSubtitleModification();
74+
const { download: downloadMovie, remove: removeMovie } =
75+
useMovieSubtitleModification();
76+
const modals = useModals();
4477

4578
const columns = useMemo<ColumnDef<TableColumnType>[]>(
4679
() => [
@@ -109,17 +142,22 @@ const SubtitleToolView: FunctionComponent<SubtitleToolViewProps> = ({
109142
const data = useMemo<TableColumnType[]>(
110143
() =>
111144
payload.flatMap((item) => {
112-
const [id, type] = getIdAndType(item);
145+
const { seriesId, id, type, name, isMovie } = getLocalisedValues(item);
113146
return item.subtitles.flatMap((v) => {
114147
if (v.path) {
115148
return [
116149
{
117150
id,
151+
seriesId,
118152
type,
119153
language: v.code2,
120154
path: v.path,
121155
// eslint-disable-next-line camelcase
122156
raw_language: v,
157+
name,
158+
hi: toPython(v.forced),
159+
forced: toPython(v.hi),
160+
isMovie,
123161
},
124162
];
125163
} else {
@@ -143,7 +181,51 @@ const SubtitleToolView: FunctionComponent<SubtitleToolViewProps> = ({
143181
></SimpleTable>
144182
<Divider></Divider>
145183
<Group>
146-
<SubtitleToolsMenu selections={selections}>
184+
<SubtitleToolsMenu
185+
selections={selections}
186+
onAction={(action) => {
187+
selections.forEach((selection) => {
188+
const actionPayload = {
189+
form: {
190+
language: selection.language,
191+
hi: fromPython(selection.hi),
192+
forced: fromPython(selection.forced),
193+
path: selection.path,
194+
},
195+
radarrId: 0,
196+
seriesId: 0,
197+
episodeId: 0,
198+
};
199+
if (selection.isMovie) {
200+
actionPayload.radarrId = selection.id;
201+
} else {
202+
actionPayload.seriesId = selection.seriesId;
203+
actionPayload.episodeId = selection.id;
204+
}
205+
const download = selection.isMovie
206+
? downloadMovie
207+
: downloadEpisode;
208+
const remove = selection.isMovie ? removeMovie : removeEpisode;
209+
210+
if (action === "search") {
211+
task.create(
212+
selection.name,
213+
TaskGroup.SearchSubtitle,
214+
download.mutateAsync,
215+
actionPayload,
216+
);
217+
} else if (action === "delete" && selection.path) {
218+
task.create(
219+
selection.name,
220+
TaskGroup.DeleteSubtitle,
221+
remove.mutateAsync,
222+
actionPayload,
223+
);
224+
}
225+
});
226+
modals.closeAll();
227+
}}
228+
>
147229
<Button disabled={selections.length === 0} variant="light">
148230
Select Action
149231
</Button>

0 commit comments

Comments
 (0)