diff --git a/src/components/Utilities/ReleaseManagement/QuickSelectModal.tsx b/src/components/Utilities/ReleaseManagement/QuickSelectModal.tsx index 6d27e814..422a79e9 100644 --- a/src/components/Utilities/ReleaseManagement/QuickSelectModal.tsx +++ b/src/components/Utilities/ReleaseManagement/QuickSelectModal.tsx @@ -8,6 +8,7 @@ import ModalPanel from '@/components/Panels/ModalPanel'; import toast from '@/components/Toast'; import { useDeleteFilesMutation } from '@/core/react-query/file/mutations'; import { resetQueries } from '@/core/react-query/queryClient'; +import { ReleaseManagementItemType } from '@/core/react-query/release-management/types'; import { useSeriesFileSummaryQuery } from '@/core/react-query/webui/queries'; import useEventCallback from '@/hooks/useEventCallback'; @@ -15,14 +16,16 @@ type Props = { show: boolean; onClose: () => void; seriesId: number; + type: ReleaseManagementItemType; }; -const QuickSelectModal = ({ onClose, seriesId, show }: Props) => { +const QuickSelectModal = ({ onClose, seriesId, show, type }: Props) => { const fileSummaryQuery = useSeriesFileSummaryQuery( seriesId, { - groupBy: - 'GroupName,FileSource,FileVersion,ImportFolder,VideoCodecs,VideoResolution,AudioLanguages,SubtitleLanguages,VideoHasChapters', + groupBy: type === ReleaseManagementItemType.MultipleReleases + ? 'GroupName,FileSource,FileVersion,ImportFolder,VideoCodecs,VideoResolution,AudioLanguages,SubtitleLanguages,VideoHasChapters' + : 'ImportFolder,MultipleLocations', includeEpisodeDetails: true, }, show, @@ -76,68 +79,92 @@ const QuickSelectModal = ({ onClose, seriesId, show }: Props) => { (group, index) => (
-
- {group.GroupName === 'None' ? 'Manual link' : group.GroupName} -  -  - {group.Episodes?.length} -  Episodes - {group.RangeByType.Normal && ( - <> -  ( - {group.RangeByType.Normal.Range} - ) - - )} -  -  - {`v${group.FileVersion}`} -
-
- Import Folder:  - {group.ImportFolder} -
-
- {group.FileSource} -  |  - {group.VideoCodecs?.toUpperCase()} -  |  - {group.VideoResolution} - {group.AudioLanguages && ( - <> -  |  -
- {group.AudioLanguages.length === 0 ? 'No Audio' : ( - <> - {group.AudioLanguages.length > 1 ? 'Multi ' : 'Single '} - Audio ( - {group.AudioLanguages.join(', ')} - ) - - )} -
- - )} - {group.SubtitleLanguages && ( - <> + {type === ReleaseManagementItemType.DuplicateFiles && ( + <> +
+ Import Folder:  + {group.ImportFolder} +
+
+ {group.Episodes?.length} +  Episodes + {group.RangeByType.Normal && ( + <> +  ( + {group.RangeByType.Normal.Range} + ) + + )} +
+ + )} + + {type === ReleaseManagementItemType.MultipleReleases && ( + <> +
+ {group.GroupName === 'None' ? 'Manual link' : group.GroupName} +  -  + {group.Episodes?.length} +  Episodes + {group.RangeByType.Normal && ( + <> +  ( + {group.RangeByType.Normal.Range} + ) + + )} +  -  + {`v${group.FileVersion}`} +
+
+ Import Folder:  + {group.ImportFolder} +
+
+ {group.FileSource}  |  -
- {group.SubtitleLanguages.length === 0 ? 'No Subs' : ( - <> - {group.SubtitleLanguages.length > 1 ? 'Multi ' : 'Single '} - Subs ( - {group.SubtitleLanguages.join(', ')} - ) - - )} -
- - )} - {group.VideoHasChapters && ( - <> + {group.VideoCodecs?.toUpperCase()}  |  -
Chaptered
- - )} -
+ {group.VideoResolution} + {group.AudioLanguages && ( + <> +  |  +
+ {group.AudioLanguages.length === 0 ? 'No Audio' : ( + <> + {group.AudioLanguages.length > 1 ? 'Multi ' : 'Single '} + Audio ( + {group.AudioLanguages.join(', ')} + ) + + )} +
+ + )} + {group.SubtitleLanguages && ( + <> +  |  +
+ {group.SubtitleLanguages.length === 0 ? 'No Subs' : ( + <> + {group.SubtitleLanguages.length > 1 ? 'Multi ' : 'Single '} + Subs ( + {group.SubtitleLanguages.join(', ')} + ) + + )} +
+ + )} + {group.VideoHasChapters && ( + <> +  |  +
Chaptered
+ + )} +
+ + )}
{ diff --git a/src/pages/utilities/ReleaseManagement.tsx b/src/pages/utilities/ReleaseManagement.tsx index 075b17a5..e5834ca2 100644 --- a/src/pages/utilities/ReleaseManagement.tsx +++ b/src/pages/utilities/ReleaseManagement.tsx @@ -32,6 +32,7 @@ import { import { invalidateQueries, resetQueries } from '@/core/react-query/queryClient'; import { ReleaseManagementItemType } from '@/core/react-query/release-management/types'; import useEventCallback from '@/hooks/useEventCallback'; +import useIsFeatureSupported, { FeatureType } from '@/hooks/useIsFeatureSupported'; import type { ReleaseManagementOptionsType } from '@/components/Utilities/constants'; import type { EpisodeType } from '@/core/types/api/episode'; @@ -134,6 +135,8 @@ const ReleaseManagement = () => { }); }); + const isDuplicatesQuickSelectSupported = useIsFeatureSupported(FeatureType.DuplicatesQuickSelect); + return ( <> {`${titleMap[type]} | Shoko`} @@ -193,7 +196,8 @@ const ReleaseManagement = () => { {/* */} {/* )} */} - {(type === ReleaseManagementItemType.MultipleReleases && !selectedEpisode) && ( + {(type === ReleaseManagementItemType.MultipleReleases || isDuplicatesQuickSelectSupported) + && !selectedEpisode && (