/* * Copyright (C) Contributors to the Suwayomi project * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ import { useTranslation } from 'react-i18next'; import { useContext, useEffect } from 'react'; import { List, ListItem, ListItemButton, ListItemText, Switch } from '@mui/material'; import ListSubheader from '@mui/material/ListSubheader'; import { t as translate } from 'i18next'; import { NavBarContext, useSetDefaultBackTo } from '@/components/context/NavbarContext.tsx'; import { GlobalUpdateSettings } from '@/components/settings/globalUpdate/GlobalUpdateSettings.tsx'; import { MetadataServerSettingKeys, MetadataServerSettings } from '@/typings.ts'; import { convertToGqlMeta, requestUpdateServerMetadata } from '@/util/metadata.ts'; import { makeToast } from '@/components/util/Toast.tsx'; import { useMetadataServerSettings } from '@/util/metadataServerSettings.ts'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { Mangas } from '@/lib/data/Mangas.ts'; const removeNonLibraryMangasFromCategories = async (): Promise => { try { const nonLibraryMangas = await requestManager.getMangas({ filter: { inLibrary: { equalTo: false }, categoryId: { isNull: false } }, }).response; const mangaIdsToRemove = Mangas.getIds(nonLibraryMangas.data.mangas.nodes); if (!mangaIdsToRemove.length) { await requestManager.updateMangasCategories(mangaIdsToRemove, { clearCategories: true, }).response; } makeToast(translate('library.settings.advanced.database.cleanup.label.success'), 'success'); } catch (e) { makeToast(translate('library.settings.advanced.database.cleanup.label.error'), 'error'); } }; export function LibrarySettings() { const { t } = useTranslation(); const { setTitle, setAction } = useContext(NavBarContext); useEffect(() => { setTitle(t('library.settings.title')); setAction(null); return () => { setTitle(''); setAction(null); }; }, [t]); useSetDefaultBackTo('settings'); const { metadata, settings } = useMetadataServerSettings(); const setSettingValue = ( setting: Setting, value: MetadataServerSettings[Setting], ) => { requestUpdateServerMetadata(convertToGqlMeta(metadata)! ?? {}, [[setting, value]]).catch(() => makeToast(t('search.error.label.failed_to_save_settings'), 'warning'), ); }; return ( {t('global.label.general')} } > setSettingValue('ignoreFilters', e.target.checked)} /> setSettingValue('showAddToLibraryCategorySelectDialog', e.target.checked)} /> {t('global.label.advanced')} } > removeNonLibraryMangasFromCategories()}> ); }