diff --git a/src/components/MigrateDialog.tsx b/src/components/MigrateDialog.tsx index d7f0a012..e788a87d 100644 --- a/src/components/MigrateDialog.tsx +++ b/src/components/MigrateDialog.tsx @@ -19,6 +19,12 @@ import FormGroup from '@mui/material/FormGroup'; import { CheckboxInput } from '@/components/atoms/CheckboxInput.tsx'; import { Mangas, MigrateMode } from '@/lib/data/Mangas.ts'; import { makeToast } from '@/components/util/Toast.tsx'; +import { convertSettingsToMetadata, useMetadataServerSettings } from '@/util/metadataServerSettings.ts'; +import { MetadataServerSettings } from '@/typings.ts'; +import { convertToGqlMeta, requestUpdateServerMetadata } from '@/util/metadata.ts'; +import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts'; + +type MigrationSettingsType = Pick; export const MigrateDialog = ({ mangaIdToMigrateTo, onClose }: { mangaIdToMigrateTo: number; onClose: () => void }) => { const { t } = useTranslation(); @@ -28,12 +34,22 @@ export const MigrateDialog = ({ mangaIdToMigrateTo, onClose }: { mangaIdToMigrat const { mangaId: mangaIdAsString } = useParams<{ mangaId: string }>(); const mangaId = Number(mangaIdAsString); - const [includeChapters, setIncludeChapters] = useState(true); - const [includeCategories, setIncludeCategories] = useState(true); - const [deleteChapters, setDeleteChapters] = useState(true); + const { + metadata, + settings: { includeChapters, includeCategories, deleteChapters }, + } = useMetadataServerSettings(); const [isMigrationInProcess, setIsMigrationInProcess] = useState(false); + const setMigrationFlag = ( + setting: Setting, + value: MigrationSettingsType[Setting], + ) => { + requestUpdateServerMetadata(convertToGqlMeta(metadata) ?? [], [ + [setting, convertSettingsToMetadata({ [setting]: value })[setting]], + ]).catch(defaultPromiseErrorHandler('MigrateDialog::updateSetting')); + }; + const migrate = async (mode: MigrateMode) => { if (mangaId == null) { throw new Error(`MigrateDialog::migrate: unexpected mangaId "${mangaId}"`); @@ -66,19 +82,19 @@ export const MigrateDialog = ({ mangaIdToMigrateTo, onClose }: { mangaIdToMigrat disabled={isMigrationInProcess} label={t('chapter.title')} checked={includeChapters} - onChange={(_, checked) => setIncludeChapters(checked)} + onChange={(_, checked) => setMigrationFlag('includeChapters', checked)} /> setIncludeCategories(checked)} + onChange={(_, checked) => setMigrationFlag('includeCategories', checked)} /> setDeleteChapters(checked)} + onChange={(_, checked) => setMigrationFlag('deleteChapters', checked)} /> diff --git a/src/typings.ts b/src/typings.ts index e46bf09d..61b609e9 100644 --- a/src/typings.ts +++ b/src/typings.ts @@ -232,6 +232,11 @@ export type MetadataServerSettings = { // client devices: string[]; + + // migration + includeChapters: boolean; + includeCategories: boolean; + deleteChapters: boolean; }; export interface ISearchSettings { diff --git a/src/util/metadataServerSettings.ts b/src/util/metadataServerSettings.ts index 21463757..66bf100c 100644 --- a/src/util/metadataServerSettings.ts +++ b/src/util/metadataServerSettings.ts @@ -26,6 +26,11 @@ export const getDefaultSettings = (): MetadataServerSettings => ({ // client devices: [DEFAULT_DEVICE], + + // migration + includeChapters: true, + includeCategories: true, + deleteChapters: true, }); export const convertSettingsToMetadata = (