Skip to content

Commit 7f076fe

Browse files
committed
fix: fix incompatibles with server-side changes
1 parent e8e3612 commit 7f076fe

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+340
-282
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
"@stylistic/stylelint-plugin": "^3.1.1",
5858
"@tanstack/eslint-plugin-query": "^5.62.1",
5959
"@types/format-thousands": "^2.0.3",
60+
"@types/json-schema": "^7.0.15",
6061
"@types/lodash": "^4.17.13",
6162
"@types/node": "^22.10.2",
6263
"@types/react": "^19.0.1",

pnpm-lock.yaml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/components/Collection/Episode/EpisodeFiles.tsx

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
mdiTrashCanOutline,
1010
} from '@mdi/js';
1111
import { Icon } from '@mdi/react';
12-
import { get, map } from 'lodash';
12+
import { map } from 'lodash';
1313

1414
import DeleteFilesModal from '@/components/Dialogs/DeleteFilesModal';
1515
import FileInfo from '@/components/FileInfo';
@@ -92,8 +92,7 @@ const EpisodeFiles = ({ anidbSeriesId, episodeFiles, episodeId, seriesId }: Prop
9292
return (
9393
<div className="flex flex-col gap-y-6 p-6 pt-4">
9494
{map(episodeFiles, (file) => {
95-
const ReleaseGroupID = get(file, 'AniDB.ReleaseGroup.ID', 0);
96-
const ReleaseGroupName = get(file, 'AniDB.ReleaseGroup.Name', null);
95+
const releaseGroup = file.ReleaseInfo?.Group;
9796

9897
return (
9998
<div className="flex flex-col gap-y-6" key={file.ID}>
@@ -141,24 +140,24 @@ const EpisodeFiles = ({ anidbSeriesId, episodeFiles, episodeId, seriesId }: Prop
141140
/>
142141
Copy ShokoID
143142
</div>
144-
{file.AniDB && (
145-
<a href={`https://anidb.net/file/${file.AniDB.ID}`} target="_blank" rel="noopener noreferrer">
143+
{file.ReleaseInfo?.ReleaseURI?.startsWith('https://anidb.net/file/') && (
144+
<a href={file.ReleaseInfo.ReleaseURI} target="_blank" rel="noopener noreferrer">
146145
<div className="flex items-center gap-x-2 font-semibold text-panel-text-primary">
147146
<div className="metadata-link-icon AniDB" />
148147
AniDB
149148
<Icon className="text-panel-icon-action" path={mdiOpenInNew} size={1} />
150149
</div>
151150
</a>
152151
)}
153-
{ReleaseGroupID > 0 && (
152+
{releaseGroup && releaseGroup.Source === 'AniDB' && (
154153
<a
155-
href={`https://anidb.net/group/${ReleaseGroupID}/anime/${anidbSeriesId}`}
154+
href={`https://anidb.net/group/${releaseGroup.ID}/anime/${anidbSeriesId}`}
156155
target="_blank"
157156
rel="noopener noreferrer"
158157
>
159158
<div className="flex items-center gap-x-2 font-semibold text-panel-text-primary">
160159
<div className="metadata-link-icon AniDB" />
161-
{ReleaseGroupName ?? 'Unknown'}
160+
{releaseGroup.Name}
162161
&nbsp;(AniDB)
163162
<Icon className="text-panel-icon-action" path={mdiOpenInNew} size={1} />
164163
</div>

src/components/Collection/TimelineSidebar.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ import type { SeriesType } from '@/core/types/api/series';
1111

1212
const TimelineItem = ({ series }: { series: SeriesType }) => {
1313
const mainPoster = useMainPoster(series);
14-
const seriesType = series.AniDB?.Type === SeriesTypeEnum.TVSpecial
15-
? 'TV Special'
16-
: series.AniDB?.Type;
14+
let seriesType = series.AniDB?.Type as string | undefined;
15+
if (seriesType === SeriesTypeEnum.TVSpecial) seriesType = 'TV Special';
16+
else if (seriesType === SeriesTypeEnum.MusicVideo) seriesType = 'Music Video';
1717

1818
return (
1919
<div className="flex gap-x-3" key={series.IDs.ID}>

src/components/Dashboard/DashboardSettingsModal.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ const DashboardSettingsModal = ({ onClose, show }: Props) => {
5757
combineContinueWatching,
5858
hideCollectionStats,
5959
hideContinueWatching,
60-
hideImportFolders,
60+
hideManagedFolders,
6161
hideMediaType,
6262
hideNextUp,
6363
hideQueueProcessor,
@@ -175,9 +175,9 @@ const DashboardSettingsModal = ({ onClose, show }: Props) => {
175175
/>
176176
<Checkbox
177177
justify
178-
label="Hide Import Folders"
179-
id="hideImportFolders"
180-
isChecked={hideImportFolders}
178+
label="Hide Managed Folders"
179+
id="hideManagedFolders"
180+
isChecked={hideManagedFolders}
181181
onChange={handleUpdate}
182182
/>
183183
<Checkbox

src/components/Dialogs/BrowseFolderModal.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ function BrowseFolderModal(props: Props) {
3333
<ModalPanel
3434
show={status}
3535
onRequestClose={() => handleClose()}
36-
header="Select Import Folder"
36+
header="Select Managed Folder"
3737
size="sm"
3838
overlayClassName="!z-[90]"
3939
>

src/components/Dialogs/ImportFolderModal.tsx renamed to src/components/Dialogs/ManagedFolderModal.tsx

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -9,55 +9,55 @@ import Select from '@/components/Input/Select';
99
import ModalPanel from '@/components/Panels/ModalPanel';
1010
import toast from '@/components/Toast';
1111
import {
12-
useCreateImportFolderMutation,
13-
useDeleteImportFolderMutation,
14-
useUpdateImportFolderMutation,
15-
} from '@/core/react-query/import-folder/mutations';
16-
import { useImportFoldersQuery } from '@/core/react-query/import-folder/queries';
12+
useCreateManagedFolderMutation,
13+
useDeleteManagedFolderMutation,
14+
useUpdateManagedFolderMutation,
15+
} from '@/core/react-query/managed-folder/mutations';
16+
import { useManagedFoldersQuery } from '@/core/react-query/managed-folder/queries';
1717
import { setStatus as setBrowseStatus } from '@/core/slices/modals/browseFolder';
18-
import { setStatus } from '@/core/slices/modals/importFolder';
18+
import { setStatus } from '@/core/slices/modals/managedFolder';
1919
import useEventCallback from '@/hooks/useEventCallback';
2020

2121
import BrowseFolderModal from './BrowseFolderModal';
2222

2323
import type { RootState } from '@/core/store';
24-
import type { ImportFolderType } from '@/core/types/api/import-folder';
24+
import type { ManagedFolderType } from '@/core/types/api/managed-folder';
2525

26-
const defaultImportFolder = {
26+
const defaultManagedFolder = {
2727
WatchForNewFiles: false,
2828
DropFolderType: 'None',
2929
Path: '',
3030
Name: '',
3131
ID: 0,
32-
} as ImportFolderType;
32+
} as ManagedFolderType;
3333

34-
function ImportFolderModal() {
34+
function ManagedFolderModal() {
3535
const dispatch = useDispatch();
3636

37-
const { ID, edit, status } = useSelector((state: RootState) => state.modals.importFolder);
37+
const { ID, edit, status } = useSelector((state: RootState) => state.modals.managedFolder);
3838

39-
const importFolderQuery = useImportFoldersQuery();
40-
const importFolders = importFolderQuery?.data ?? [] as ImportFolderType[];
39+
const managedFolderQuery = useManagedFoldersQuery();
40+
const managedFolders = managedFolderQuery?.data ?? [] as ManagedFolderType[];
4141

42-
const { isPending: isCreatePending, mutate: createFolder } = useCreateImportFolderMutation();
43-
const { isPending: isDeletePending, mutate: deleteFolder } = useDeleteImportFolderMutation();
44-
const { isPending: isUpdatePending, mutate: updateFolder } = useUpdateImportFolderMutation();
42+
const { isPending: isCreatePending, mutate: createFolder } = useCreateManagedFolderMutation();
43+
const { isPending: isDeletePending, mutate: deleteFolder } = useDeleteManagedFolderMutation();
44+
const { isPending: isUpdatePending, mutate: updateFolder } = useUpdateManagedFolderMutation();
4545

46-
const [importFolder, setImportFolder] = useState(defaultImportFolder);
46+
const [managedFolder, setManagedFolder] = useState(defaultManagedFolder);
4747

4848
const getFolderDetails = () => {
49-
setImportFolder(defaultImportFolder);
49+
setManagedFolder(defaultManagedFolder);
5050

5151
if (edit) {
52-
const folderDetails = find(importFolders, { ID }) ?? {};
53-
setImportFolder({ ...importFolder, ...folderDetails });
52+
const folderDetails = find(managedFolders, { ID }) ?? {};
53+
setManagedFolder({ ...managedFolder, ...folderDetails });
5454
}
5555
};
5656

5757
const handleInputChange = (event: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>) => {
5858
const name = event.target.id;
5959
const value = name === 'WatchForNewFiles' ? event.target.value === '1' : event.target.value;
60-
setImportFolder({ ...importFolder, [name]: value });
60+
setManagedFolder({ ...managedFolder, [name]: value });
6161
};
6262

6363
const handleBrowse = () => dispatch(setBrowseStatus(true));
@@ -66,31 +66,31 @@ function ImportFolderModal() {
6666
const handleDelete = useEventCallback(() => {
6767
deleteFolder({ folderId: ID }, {
6868
onSuccess: () => {
69-
toast.success('Import folder deleted!');
69+
toast.success('Managed folder deleted!');
7070
dispatch(setStatus(false));
7171
},
7272
});
7373
});
7474

7575
const handleSave = useEventCallback(() => {
7676
if (edit) {
77-
updateFolder(importFolder, {
77+
updateFolder(managedFolder, {
7878
onSuccess: () => {
79-
toast.success('Import folder edited!');
79+
toast.success('Managed folder edited!');
8080
dispatch(setStatus(false));
8181
},
8282
});
8383
} else {
84-
createFolder(importFolder, {
84+
createFolder(managedFolder, {
8585
onSuccess: () => {
86-
toast.success('Import folder added!');
86+
toast.success('Managed folder added!');
8787
dispatch(setStatus(false));
8888
},
8989
});
9090
}
9191
});
9292

93-
const onFolderSelect = (Path: string) => setImportFolder({ ...importFolder, Path });
93+
const onFolderSelect = (Path: string) => setManagedFolder({ ...managedFolder, Path });
9494
const isLoading = isCreatePending || isDeletePending || isUpdatePending;
9595

9696
return (
@@ -99,15 +99,15 @@ function ImportFolderModal() {
9999
show={status}
100100
onRequestClose={handleClose}
101101
onAfterOpen={() => getFolderDetails()}
102-
header={edit ? 'Edit Import Folder' : 'Add New Import Folder'}
102+
header={edit ? 'Edit Managed Folder' : 'Add New Managed Folder'}
103103
size="sm"
104104
noPadding
105105
>
106106
<div>
107107
<div className="flex flex-col gap-y-6 p-6">
108108
<Input
109109
id="Name"
110-
value={importFolder.Name}
110+
value={managedFolder.Name}
111111
label="Name"
112112
type="text"
113113
placeholder="Folder name"
@@ -116,7 +116,7 @@ function ImportFolderModal() {
116116
/>
117117
<Input
118118
id="Path"
119-
value={importFolder.Path}
119+
value={managedFolder.Path}
120120
label="Location"
121121
type="text"
122122
placeholder="Location"
@@ -127,7 +127,7 @@ function ImportFolderModal() {
127127
<Select
128128
label="Drop Type"
129129
id="DropFolderType"
130-
value={importFolder.DropFolderType ?? 'None'}
130+
value={managedFolder.DropFolderType ?? 'None'}
131131
onChange={handleInputChange}
132132
className="w-full"
133133
>
@@ -139,7 +139,7 @@ function ImportFolderModal() {
139139
<Select
140140
label="Watch For New Files"
141141
id="WatchForNewFiles"
142-
value={importFolder.WatchForNewFiles ? 1 : 0}
142+
value={managedFolder.WatchForNewFiles ? 1 : 0}
143143
onChange={handleInputChange}
144144
className="w-full"
145145
>
@@ -159,7 +159,7 @@ function ImportFolderModal() {
159159
onClick={handleSave}
160160
buttonType="primary"
161161
buttonSize="normal"
162-
disabled={importFolder.Name === '' || importFolder.Path === '' || isLoading}
162+
disabled={managedFolder.Name === '' || managedFolder.Path === '' || isLoading}
163163
>
164164
Save
165165
</Button>
@@ -172,4 +172,4 @@ function ImportFolderModal() {
172172
);
173173
}
174174

175-
export default ImportFolderModal;
175+
export default ManagedFolderModal;

src/components/Utilities/ReleaseManagement/Episode.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -111,17 +111,17 @@ const Episode = ({ episode, setFileOptions, type }: Props) => {
111111
<option value="delete">Will be deleted</option>
112112
</Select>
113113

114-
{file.AniDB?.ID && (
114+
{file.ReleaseInfo?.ReleaseURI?.startsWith('https://anidb.net/file/') && (
115115
<div className="flex gap-x-2">
116116
<div className="metadata-link-icon AniDB" />
117117
<a
118-
href={`https://anidb.net/file/${file.AniDB.ID}`}
118+
href={file.ReleaseInfo.ReleaseURI}
119119
target="_blank"
120120
rel="noreferrer noopener"
121121
className="flex cursor-pointer gap-x-1 font-semibold text-panel-text-primary"
122122
aria-label="Open AniDB file page"
123123
>
124-
{file.AniDB.ID}
124+
{file.ReleaseInfo.ReleaseURI.split('/').pop()}
125125
<span>(AniDB)</span>
126126
<Icon path={mdiOpenInNew} size={1} />
127127
</a>
@@ -150,17 +150,17 @@ const Episode = ({ episode, setFileOptions, type }: Props) => {
150150
<option value="variation">Marked as Variation</option>
151151
</Select>
152152

153-
{file.AniDB?.ID && (
153+
{file.ReleaseInfo?.ReleaseURI?.startsWith('https://anidb.net/file/') && (
154154
<div className="flex gap-x-2">
155155
<div className="metadata-link-icon AniDB" />
156156
<a
157-
href={`https://anidb.net/file/${file.AniDB.ID}`}
157+
href={file.ReleaseInfo.ReleaseURI}
158158
target="_blank"
159159
rel="noreferrer noopener"
160160
className="flex cursor-pointer gap-x-1 font-semibold text-panel-text-primary"
161161
aria-label="Open AniDB file page"
162162
>
163-
{file.AniDB.ID}
163+
{file.ReleaseInfo.ReleaseURI.split('/').pop()}
164164
<span>(AniDB)</span>
165165
<Icon path={mdiOpenInNew} size={1} />
166166
</a>

0 commit comments

Comments
 (0)