diff --git a/src/modules/metadata/Metadata.constants.ts b/src/modules/metadata/Metadata.constants.ts index 4837e4bc..259c8d50 100644 --- a/src/modules/metadata/Metadata.constants.ts +++ b/src/modules/metadata/Metadata.constants.ts @@ -66,9 +66,6 @@ const APP_METADATA_OBJECT: Record = { shouldShowPageNumber: undefined, backgroundColor: undefined, pageGap: undefined, - profiles: undefined, - readingModesDefaultProfile: undefined, - defaultProfile: undefined, hotkeys: undefined, imagePreLoadAmount: undefined, }; @@ -136,7 +133,6 @@ export const GLOBAL_METADATA_KEYS: AppMetadataKeys[] = [ 'exitMode', 'customFilter', 'shouldSkipDupChapters', - 'profiles', 'hotkeys', ]; diff --git a/src/modules/reader/components/ReaderHotkeys.tsx b/src/modules/reader/components/ReaderHotkeys.tsx index 3c9b64ab..499185ec 100644 --- a/src/modules/reader/components/ReaderHotkeys.tsx +++ b/src/modules/reader/components/ReaderHotkeys.tsx @@ -74,16 +74,8 @@ export const ReaderHotkeys = ({ const { enableScope, disableScope } = useHotkeysContext(); const { manga } = useReaderStateMangaContext(); const { isVisible, setIsVisible: setIsOverlayVisible } = useReaderOverlayContext(); - const { - hotkeys, - pageScaleMode, - shouldStretchPage, - shouldOffsetDoubleSpreads, - readingMode, - readingDirection, - defaultProfile, - profiles, - } = ReaderService.useSettings(); + const { hotkeys, pageScaleMode, shouldStretchPage, shouldOffsetDoubleSpreads, readingMode, readingDirection } = + ReaderService.useSettings(); const openChapter = ReaderControls.useOpenChapter(); const openPage = ReaderControls.useOpenPage(); @@ -165,17 +157,6 @@ export const ReaderHotkeys = ({ () => updateSetting('shouldOffsetDoubleSpreads', !shouldOffsetDoubleSpreads.value), [updateSetting, shouldOffsetDoubleSpreads.value], ); - useHotkeys(hotkeys[ReaderHotkey.CYCLE_PROFILES], () => { - updateSettingCycleThrough( - updateSetting, - deleteSetting, - 'defaultProfile', - defaultProfile.value, - profiles, - defaultProfile.isDefault, - true, - ); - }); useEffect(() => { enableScope(HotkeyScope.READER); diff --git a/src/modules/reader/components/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopProfile.tsx b/src/modules/reader/components/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopProfile.tsx deleted file mode 100644 index 789681b5..00000000 --- a/src/modules/reader/components/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopProfile.tsx +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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 ManageAccountsIcon from '@mui/icons-material/ManageAccounts'; -import { useTranslation } from 'react-i18next'; -import { IReaderSettingsWithDefaultFlag } from '@/modules/reader/types/Reader.types.ts'; -import { MultiValueButtonDefaultableProps } from '@/modules/core/Core.types.ts'; -import { ValueRotationButton } from '@/modules/core/components/buttons/ValueRotationButton.tsx'; -import { - createProfileValueToDisplayData, - getReaderProfile, - getValidReaderProfile, -} from '@/modules/reader/utils/ReaderSettings.utils.tsx'; - -export const ReaderNavBarDesktopProfile = ({ - defaultProfile, - profiles, - readingModesDefaultProfile, - readingMode, - updateSetting, - ...buttonSelectInputProps -}: Pick & - Pick, 'isDefaultable' | 'onDefault'> & { - updateSetting: (profile: string) => void; - }) => { - const { t } = useTranslation(); - - const activeProfile = getReaderProfile(defaultProfile, profiles, readingModesDefaultProfile, readingMode.value); - - return ( - } - /> - ); -}; diff --git a/src/modules/reader/components/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopQuickSettings.tsx b/src/modules/reader/components/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopQuickSettings.tsx index 5b7ee890..33f96656 100644 --- a/src/modules/reader/components/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopQuickSettings.tsx +++ b/src/modules/reader/components/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopQuickSettings.tsx @@ -16,19 +16,9 @@ import { ReaderNavBarDesktopOffsetDoubleSpread } from '@/modules/reader/componen import { ReaderNavBarDesktopReadingDirection } from '@/modules/reader/components/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopReadingDirection.tsx'; import { ReaderSettingsTypeProps } from '@/modules/reader/types/Reader.types.ts'; import { ReaderNavBarDesktopProps } from '@/modules/reader/types/ReaderOverlay.types.ts'; -import { ReaderNavBarDesktopProfile } from '@/modules/reader/components/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopProfile.tsx'; export const ReaderNavBarDesktopQuickSettings = ({ - settings: { - defaultProfile, - profiles, - readingModesDefaultProfile, - readingMode, - shouldOffsetDoubleSpreads, - pageScaleMode, - shouldStretchPage, - readingDirection, - }, + settings: { readingMode, shouldOffsetDoubleSpreads, pageScaleMode, shouldStretchPage, readingDirection }, updateSetting, openSettings, isDefaultable, @@ -38,15 +28,6 @@ export const ReaderNavBarDesktopQuickSettings = ({ return ( - updateSetting('defaultProfile', value)} - isDefaultable={isDefaultable} - onDefault={() => onDefault?.('defaultProfile')} - /> updateSetting('readingMode', value)} diff --git a/src/modules/reader/components/overlay/navigation/mobile/ReaderBottomBarMobileQuickSettings.tsx b/src/modules/reader/components/overlay/navigation/mobile/ReaderBottomBarMobileQuickSettings.tsx index b81967d9..21ac507f 100644 --- a/src/modules/reader/components/overlay/navigation/mobile/ReaderBottomBarMobileQuickSettings.tsx +++ b/src/modules/reader/components/overlay/navigation/mobile/ReaderBottomBarMobileQuickSettings.tsx @@ -12,13 +12,12 @@ import { ReaderSettingReadingDirection } from '@/modules/reader/components/setti import { ReaderService } from '@/modules/reader/services/ReaderService.ts'; import { useReaderStateMangaContext } from '@/modules/reader/contexts/state/ReaderStateMangaContext.tsx'; import { MangaIdInfo } from '@/modules/manga/Manga.types.ts'; -import { ReaderSettingProfile } from '@/modules/reader/components/settings/layout/profiles/ReaderSettingProfile.tsx'; import { DefaultSettingFootnote } from '@/modules/reader/components/settings/DefaultSettingFootnote.tsx'; const DEFAULT_MANGA: MangaIdInfo = { id: -1 }; export const ReaderBottomBarMobileQuickSettings = () => { const { manga } = useReaderStateMangaContext(); - const { defaultProfile, profiles, readingMode, readingDirection } = ReaderService.useSettings(); + const { readingMode, readingDirection } = ReaderService.useSettings(); const deleteSetting = ReaderService.useCreateDeleteSetting(manga ?? DEFAULT_MANGA); if (!manga) { @@ -28,13 +27,6 @@ export const ReaderBottomBarMobileQuickSettings = () => { return ( - ReaderService.updateSetting(manga, 'defaultProfile', value)} - isDefaultable - onDefault={() => deleteSetting('defaultProfile')} - /> ReaderService.updateSetting(manga, 'readingMode', value)} diff --git a/src/modules/reader/components/settings/hotkeys/ReaderSettingHotkey.tsx b/src/modules/reader/components/settings/hotkeys/ReaderSettingHotkey.tsx index 012d49a2..0b637e4d 100644 --- a/src/modules/reader/components/settings/hotkeys/ReaderSettingHotkey.tsx +++ b/src/modules/reader/components/settings/hotkeys/ReaderSettingHotkey.tsx @@ -31,7 +31,6 @@ const READER_HOTKEY_TO_TITLE: Record = { [ReaderHotkey.CYCLE_SCALE_TYPE]: 'reader.settings.hotkey.scale_type', [ReaderHotkey.STRETCH_IMAGE]: 'reader.settings.hotkey.stretch_image', [ReaderHotkey.OFFSET_SPREAD_PAGES]: 'reader.settings.hotkey.offset_spread_pages', - [ReaderHotkey.CYCLE_PROFILES]: 'reader.settings.hotkey.profiles', }; export const ReaderSettingHotkey = ({ diff --git a/src/modules/reader/components/settings/layout/ReaderDefaultLayoutSettings.tsx b/src/modules/reader/components/settings/layout/ReaderDefaultLayoutSettings.tsx index b488529f..dcfda334 100644 --- a/src/modules/reader/components/settings/layout/ReaderDefaultLayoutSettings.tsx +++ b/src/modules/reader/components/settings/layout/ReaderDefaultLayoutSettings.tsx @@ -8,53 +8,37 @@ import Stack from '@mui/material/Stack'; import { ComponentProps } from 'react'; +import { useTranslation } from 'react-i18next'; import { ReaderLayoutSettings } from '@/modules/reader/components/settings/layout/ReaderLayoutSettings.tsx'; -import { ReaderSettingProfiles } from '@/modules/reader/components/settings/layout/profiles/ReaderSettingProfiles.tsx'; -import { ReaderSettingReadingModesDefaultProfile } from '@/modules/reader/components/settings/layout/profiles/ReaderSettingReadingModesDefaultProfile.tsx'; import { ReaderSettingProfileSettings } from '@/modules/reader/components/settings/layout/profiles/ReaderSettingProfileSettings.tsx'; -import { DEFAULT_READER_PROFILE } from '@/modules/reader/constants/ReaderSettings.constants.tsx'; -import { IReaderSettings } from '@/modules/reader/types/Reader.types.ts'; +import { + READING_MODE_VALUE_TO_DISPLAY_DATA, + READING_MODE_VALUES, +} from '@/modules/reader/constants/ReaderSettings.constants.tsx'; +import { ReaderSettingReadingMode } from '@/modules/reader/components/settings/layout/ReaderSettingReadingMode.tsx'; export const ReaderDefaultLayoutSettings = ( props: Omit, 'setShowPreview'>, ) => { const { settings, updateSetting } = props; + const { t } = useTranslation(); + return ( - - { - if (removedProfiles.length) { - updateSetting( - 'readingModesDefaultProfile', - Object.fromEntries( - Object.entries(settings.readingModesDefaultProfile).map( - ([readingMode, profile]) => [ - readingMode, - removedProfiles.includes(profile) ? DEFAULT_READER_PROFILE : profile, - ], - ), - ) as IReaderSettings['readingModesDefaultProfile'], - ); - } - - updateSetting('profiles', profiles); - }} + + updateSetting('readingMode', value)} /> - - - updateSetting('readingModesDefaultProfile', readingModesDefaultProfile) - } - /> - - {settings.profiles.map((profile) => ( - + {READING_MODE_VALUES.map((readingMode) => ( + ))} ); diff --git a/src/modules/reader/components/settings/layout/ReaderLayoutSettings.tsx b/src/modules/reader/components/settings/layout/ReaderLayoutSettings.tsx index 0d43d906..71120ea5 100644 --- a/src/modules/reader/components/settings/layout/ReaderLayoutSettings.tsx +++ b/src/modules/reader/components/settings/layout/ReaderLayoutSettings.tsx @@ -18,7 +18,6 @@ import { ReaderSettingStretchPage } from '@/modules/reader/components/settings/l import { ReaderSettingsTypeProps } from '@/modules/reader/types/Reader.types.ts'; import { ReaderSettingPageGap } from '@/modules/reader/components/settings/layout/ReaderSettingPageGap.tsx'; import { ReaderSettingWidth } from '@/modules/reader/components/settings/layout/ReaderSettingWidth.tsx'; -import { ReaderSettingProfile } from '@/modules/reader/components/settings/layout/profiles/ReaderSettingProfile.tsx'; import { DefaultSettingFootnote } from '@/modules/reader/components/settings/DefaultSettingFootnote.tsx'; export const ReaderLayoutSettings = ({ @@ -33,20 +32,13 @@ export const ReaderLayoutSettings = ({ {isDefaultable && ( - updateSetting('defaultProfile', value)} + updateSetting('readingMode', value)} isDefaultable={isDefaultable} - onDefault={() => onDefault?.('defaultProfile')} + onDefault={() => onDefault?.('readingMode')} /> )} - updateSetting('readingMode', value)} - isDefaultable={isDefaultable} - onDefault={() => onDefault?.('readingMode')} - /> & - Pick, 'isDefaultable' | 'onDefault'> & { - updateSetting: (profile: string) => void; - }) => { - const { t } = useTranslation(); - - const validReaderProfile = getValidReaderProfile(defaultProfile.value, profiles); - - return ( - - ); -}; diff --git a/src/modules/reader/components/settings/layout/profiles/ReaderSettingProfileSettings.tsx b/src/modules/reader/components/settings/layout/profiles/ReaderSettingProfileSettings.tsx index 0b68ed16..bb754962 100644 --- a/src/modules/reader/components/settings/layout/profiles/ReaderSettingProfileSettings.tsx +++ b/src/modules/reader/components/settings/layout/profiles/ReaderSettingProfileSettings.tsx @@ -8,30 +8,40 @@ import Stack from '@mui/material/Stack'; import ListSubheader from '@mui/material/ListSubheader'; -import { ComponentProps } from 'react'; -import { useTranslation } from 'react-i18next'; +import { ComponentProps, useMemo } from 'react'; import { ReaderLayoutSettings } from '@/modules/reader/components/settings/layout/ReaderLayoutSettings.tsx'; import { useDefaultReaderSettingsWithDefaultFlag } from '@/modules/reader/services/ReaderSettingsMetadata.ts'; -import { DEFAULT_READER_PROFILE } from '@/modules/reader/constants/ReaderSettings.constants.tsx'; +import { ReadingMode } from '@/modules/reader/types/Reader.types.ts'; export const ReaderSettingProfileSettings = ({ profile, + title, updateSetting, ...props -}: Pick, 'updateSetting'> & { profile: string }) => { - const { t } = useTranslation(); +}: Pick, 'updateSetting'> & { profile: ReadingMode; title: string }) => { const { settings } = useDefaultReaderSettingsWithDefaultFlag(profile); + const adjustedSettings = useMemo( + () => ({ + ...settings, + readingMode: { + value: profile, + isDefault: true, + }, + }), + [settings, profile], + ); + return ( - {profile === DEFAULT_READER_PROFILE ? t('global.label.standard') : profile} + {title} {}} - settings={settings} + settings={adjustedSettings} updateSetting={(setting, value, commit) => updateSetting(setting, value, commit, true, profile)} /> diff --git a/src/modules/reader/components/settings/layout/profiles/ReaderSettingProfiles.tsx b/src/modules/reader/components/settings/layout/profiles/ReaderSettingProfiles.tsx deleted file mode 100644 index 217d1deb..00000000 --- a/src/modules/reader/components/settings/layout/profiles/ReaderSettingProfiles.tsx +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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 { MutableListSetting } from '@/modules/core/components/settings/MutableListSetting.tsx'; -import { IReaderSettings } from '@/modules/reader/types/Reader.types.ts'; -import { DEFAULT_READER_PROFILE } from '@/modules/reader/constants/ReaderSettings.constants.tsx'; - -export const ReaderSettingProfiles = ({ - profiles, - updateSetting, -}: Pick & { - updateSetting: (profiles: IReaderSettings['profiles'], removedProfiles: string[]) => void; -}) => { - const { t } = useTranslation(); - - return ( - - updateSetting( - [ - ...new Set( - [DEFAULT_READER_PROFILE, ...profileList].filter( - (device) => device !== t('global.label.standard'), - ), - ), - ], - removedProfiles, - ) - } - valueInfos={profiles.map((profile) => [ - profile === DEFAULT_READER_PROFILE ? t('global.label.standard') : profile, - { mutable: false, deletable: profile !== DEFAULT_READER_PROFILE }, - ])} - addItemButtonTitle={t('global.button.create')} - validateItem={(profileToValidate, tmpProfiles) => - profileToValidate.length <= 16 && - !!profileToValidate.match(/^[a-zA-Z0-9\-_]+$/g) && - ![...profiles, ...(tmpProfiles ?? [])] - .map((profile) => profile.toLowerCase()) - .includes(profileToValidate.toLowerCase()) - } - placeholder={t('reader.settings.profiles.placeholder')} - /> - ); -}; diff --git a/src/modules/reader/components/settings/layout/profiles/ReaderSettingReadingModesDefaultProfile.tsx b/src/modules/reader/components/settings/layout/profiles/ReaderSettingReadingModesDefaultProfile.tsx deleted file mode 100644 index c68e1791..00000000 --- a/src/modules/reader/components/settings/layout/profiles/ReaderSettingReadingModesDefaultProfile.tsx +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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 Stack from '@mui/material/Stack'; -import { useTranslation } from 'react-i18next'; -import Typography from '@mui/material/Typography'; -import { - READING_MODE_VALUE_TO_DISPLAY_DATA, - READING_MODE_VALUES, -} from '@/modules/reader/constants/ReaderSettings.constants.tsx'; -import { IReaderSettings } from '@/modules/reader/types/Reader.types.ts'; -import { ButtonSelectInput } from '@/modules/core/components/inputs/ButtonSelectInput.tsx'; -import { createProfileValueToDisplayData } from '@/modules/reader/utils/ReaderSettings.utils.tsx'; - -export const ReaderSettingReadingModesDefaultProfile = ({ - profiles, - readingModesDefaultProfile, - updateSetting, -}: Pick & { - updateSetting: (readingModesDefaultProfile: IReaderSettings['readingModesDefaultProfile']) => void; -}) => { - const { t } = useTranslation(); - - return ( - - Reading mode default profile - {READING_MODE_VALUES.map((readingMode) => ( - - - updateSetting({ - ...readingModesDefaultProfile, - [readingMode]: profile, - }) - } - valueToDisplayData={createProfileValueToDisplayData(profiles)} - /> - - ))} - - ); -}; diff --git a/src/modules/reader/constants/ReaderSettings.constants.tsx b/src/modules/reader/constants/ReaderSettings.constants.tsx index 940c1a51..3cb04111 100644 --- a/src/modules/reader/constants/ReaderSettings.constants.tsx +++ b/src/modules/reader/constants/ReaderSettings.constants.tsx @@ -34,7 +34,7 @@ import { ContinuousHorizontalPageIcon } from '@/assets/icons/svg/ContinuousHoriz import { TranslationKey } from '@/Base.types.ts'; import { TapZoneLayouts } from '@/modules/reader/types/TapZoneLayout.types.ts'; -export const DEFAULT_READER_PROFILE = 'default'; +export const DEFAULT_READER_PROFILE = ReadingMode.SINGLE_PAGE; export const READING_DIRECTION_TO_THEME_DIRECTION: Record = { [ReadingDirection.LTR]: 'ltr', @@ -52,8 +52,6 @@ const GLOBAL_READER_SETTING_OBJECT: Record { key: Setting, value: IReaderSettings[Setting], commit?: boolean, - profile?: string, + profile?: ReadingMode, ) => { ReaderService.updateSetting({ id: -1 }, key, value, commit, true, profile); }; diff --git a/src/modules/reader/screens/Reader.tsx b/src/modules/reader/screens/Reader.tsx index b3fd889d..630aedca 100644 --- a/src/modules/reader/screens/Reader.tsx +++ b/src/modules/reader/screens/Reader.tsx @@ -37,7 +37,6 @@ import { ReaderViewer } from '@/modules/reader/components/viewer/ReaderViewer.ts import { ReaderService } from '@/modules/reader/services/ReaderService.ts'; import { READER_BACKGROUND_TO_COLOR } from '@/modules/reader/constants/ReaderSettings.constants.tsx'; import { createPageData, createPagesData } from '@/modules/reader/utils/ReaderPager.utils.tsx'; -import { getReaderProfile } from '@/modules/reader/utils/ReaderSettings.utils.tsx'; import { ReaderHotkeys } from '@/modules/reader/components/ReaderHotkeys.tsx'; import { ReaderResumeMode, ReaderTransitionPageMode } from '@/modules/reader/types/Reader.types.ts'; import { getInitialReaderPageIndex } from '@/modules/reader/utils/Reader.utils.ts'; @@ -194,13 +193,7 @@ export const Reader = () => { defaultSettings, ); - const profile = getReaderProfile( - settingsWithDefaultProfileFallback.defaultProfile, - settingsWithDefaultProfileFallback.profiles, - settingsWithDefaultProfileFallback.readingModesDefaultProfile, - settingsWithDefaultProfileFallback.readingMode.value, - ); - + const profile = settingsWithDefaultProfileFallback.readingMode.value; const profileSettings = getReaderSettings( 'global', { meta: defaultSettingsMetadata! }, diff --git a/src/modules/reader/services/ReaderService.ts b/src/modules/reader/services/ReaderService.ts index 7ec6c12f..e929a2da 100644 --- a/src/modules/reader/services/ReaderService.ts +++ b/src/modules/reader/services/ReaderService.ts @@ -19,6 +19,7 @@ import { ReaderOverlayMode, ReaderResumeMode, ReadingDirection, + ReadingMode, } from '@/modules/reader/types/Reader.types.ts'; import { useReaderStateMangaContext } from '@/modules/reader/contexts/state/ReaderStateMangaContext.tsx'; import { updateReaderSettings } from '@/modules/reader/services/ReaderSettingsMetadata.ts'; @@ -228,12 +229,12 @@ export class ReaderService { value: IReaderSettings[Setting], commit: boolean = true, isGlobal: boolean = false, - profile?: string, + profile?: ReadingMode, ): void { if (!manga) { return; } - const key = getMetadataKey(setting, profile ? [profile] : undefined); + const key = getMetadataKey(setting, profile !== undefined ? [profile?.toString()] : undefined); const { cache } = requestManager.graphQLClient.client; @@ -294,7 +295,7 @@ export class ReaderService { return; } - const key = getMetadataKey(setting, profile ? [profile] : undefined); + const key = getMetadataKey(setting, profile !== undefined ? [profile] : undefined); const { cache } = requestManager.graphQLClient.client; @@ -315,7 +316,7 @@ export class ReaderService { static useCreateUpdateSetting( manga: MangaIdInfo, - profile?: string, + profile?: ReadingMode, ): ( ...args: OmitFirst>> ) => ReturnType> { @@ -328,12 +329,12 @@ export class ReaderService { static useCreateDeleteSetting( manga: MangaIdInfo, - profile?: string, + profile?: ReadingMode, ): ( ...args: OmitFirst>> ) => ReturnType> { return useCallback( - (setting, isGlobal) => this.deleteSetting(manga, setting, isGlobal, profile), + (setting, isGlobal) => this.deleteSetting(manga, setting, isGlobal, profile?.toString()), [manga, profile], ); } diff --git a/src/modules/reader/services/ReaderSettingsMetadata.ts b/src/modules/reader/services/ReaderSettingsMetadata.ts index 3d72ac94..ba488167 100644 --- a/src/modules/reader/services/ReaderSettingsMetadata.ts +++ b/src/modules/reader/services/ReaderSettingsMetadata.ts @@ -13,7 +13,7 @@ import { requestUpdateServerMetadata, } from '@/modules/metadata/services/MetadataUpdater.ts'; import { MangaType } from '@/lib/graphql/generated/graphql.ts'; -import { IReaderSettings, IReaderSettingsWithDefaultFlag } from '@/modules/reader/types/Reader.types.ts'; +import { IReaderSettings, IReaderSettingsWithDefaultFlag, ReadingMode } from '@/modules/reader/types/Reader.types.ts'; import { convertFromGqlMeta } from '@/modules/metadata/services/MetadataConverter.ts'; import { extractOriginalKey, getMetadataFrom } from '@/modules/metadata/services/MetadataReader.ts'; import { @@ -28,7 +28,6 @@ import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts' import { jsonSaveParse } from '@/lib/HelperFunctions.ts'; import { MangaIdInfo } from '@/modules/manga/Manga.types.ts'; import { - DEFAULT_READER_PROFILE, DEFAULT_READER_SETTINGS, GLOBAL_READER_SETTING_KEYS, } from '@/modules/reader/constants/ReaderSettings.constants.tsx'; @@ -91,8 +90,6 @@ const convertSettingsToMetadata = ( tapZoneInvertMode: JSON.stringify(settings.tapZoneInvertMode), customFilter: JSON.stringify(settings.customFilter), readerWidth: JSON.stringify(settings.readerWidth), - profiles: JSON.stringify(settings.profiles), - readingModesDefaultProfile: JSON.stringify(settings.readingModesDefaultProfile), hotkeys: JSON.stringify(settings.hotkeys), }); @@ -105,53 +102,36 @@ export const DEFAULT_READER_SETTINGS_WITH_DEFAULT_FLAG = convertToSettingsWithDe const convertMetadataToSettings = ( metadata: Partial>, defaultSettings: IReaderSettings, -): IReaderSettings => { - const profiles = - jsonSaveParse((metadata.profiles as string) ?? '') ?? defaultSettings.profiles; - - return { - ...(metadata as unknown as IReaderSettings), - tapZoneInvertMode: - jsonSaveParse((metadata.tapZoneInvertMode as string) ?? '') ?? - defaultSettings.tapZoneInvertMode, - customFilter: - jsonSaveParse((metadata.customFilter as string) ?? '') ?? - defaultSettings.customFilter, - readerWidth: - jsonSaveParse((metadata.readerWidth as string) ?? '') ?? - defaultSettings.readerWidth, - profiles, - readingModesDefaultProfile: Object.fromEntries( - Object.entries( - jsonSaveParse( - (metadata.readingModesDefaultProfile as string) ?? '', - ) ?? defaultSettings.readingModesDefaultProfile, - ).map(([readingMode, profile]) => [ - readingMode, - profiles.includes(profile) ? profile : DEFAULT_READER_PROFILE, - ]), - ) as IReaderSettings['readingModesDefaultProfile'], - hotkeys: { - ...defaultSettings.hotkeys, - ...(jsonSaveParse((metadata.hotkeys as string) ?? '') ?? - defaultSettings.hotkeys), - }, - }; -}; +): IReaderSettings => ({ + ...(metadata as unknown as IReaderSettings), + tapZoneInvertMode: + jsonSaveParse((metadata.tapZoneInvertMode as string) ?? '') ?? + defaultSettings.tapZoneInvertMode, + customFilter: + jsonSaveParse((metadata.customFilter as string) ?? '') ?? + defaultSettings.customFilter, + readerWidth: + jsonSaveParse((metadata.readerWidth as string) ?? '') ?? + defaultSettings.readerWidth, + hotkeys: { + ...defaultSettings.hotkeys, + ...(jsonSaveParse((metadata.hotkeys as string) ?? '') ?? defaultSettings.hotkeys), + }, +}); export const getReaderSettings = ( type: Extract, metadataHolder: (MangaIdInfo & MetadataHolder) | MetadataHolder, defaultSettings: IReaderSettings = DEFAULT_READER_SETTINGS, useEffectFn?: typeof useEffect, - profile: string = DEFAULT_READER_PROFILE, + profile?: ReadingMode, ) => convertMetadataToSettings( getMetadataFrom( type as Parameters[0], metadataHolder as Parameters[1], convertSettingsToMetadata(defaultSettings), - [profile], + profile !== undefined ? [profile.toString()] : undefined, true, useEffectFn, ), @@ -163,21 +143,21 @@ function getReaderSettingsWithDefaultValueFallback( metadataHolder: MetadataHolder, defaultSettings?: IReaderSettings, useEffectFn?: typeof useEffect, - profile?: string, + profile?: ReadingMode, ): IReaderSettingsWithDefaultFlag; function getReaderSettingsWithDefaultValueFallback( type: 'manga', metadataHolder: MangaIdInfo & MetadataHolder, defaultSettings?: IReaderSettings, useEffectFn?: typeof useEffect, - profile?: string, + profile?: ReadingMode, ): IReaderSettingsWithDefaultFlag; function getReaderSettingsWithDefaultValueFallback( type: Extract, metadataHolder: (MangaIdInfo & MetadataHolder) | MetadataHolder, defaultSettings: IReaderSettings = DEFAULT_READER_SETTINGS, useEffectFn?: typeof useEffect, - profile?: string, + profile?: ReadingMode, ): IReaderSettingsWithDefaultFlag { const settings = getReaderSettings(type, metadataHolder, defaultSettings, useEffectFn, profile); return convertToSettingsWithDefaultFlag(type, settings, metadataHolder); @@ -187,7 +167,7 @@ const getSettings = ( metaHolder: MangaIdInfo & GqlMetaHolder, defaultSettings?: IReaderSettings, useEffectFn?: typeof useEffect, - profile?: string, + profile?: ReadingMode, ): IReaderSettingsWithDefaultFlag => getReaderSettingsWithDefaultValueFallback( 'manga', @@ -211,14 +191,14 @@ export const getReaderSettingsFor = ( export const useGetReaderSettingsFor = ( metaHolder: MangaIdInfo & GqlMetaHolder, defaultSettings: IReaderSettings, - profile?: string, + profile?: ReadingMode, ): IReaderSettingsWithDefaultFlag => { const settings = getSettings(metaHolder, defaultSettings, useEffect, profile); return useMemo(() => settings, [metaHolder, defaultSettings, profile]); }; export const useDefaultReaderSettings = ( - profile?: string, + profile?: ReadingMode, ): { metadata?: Metadata; settings: IReaderSettings; @@ -244,7 +224,7 @@ export const useDefaultReaderSettings = ( }; export const useDefaultReaderSettingsWithDefaultFlag = ( - profile?: string, + profile?: ReadingMode, ): { metadata?: Metadata; settings: IReaderSettingsWithDefaultFlag; @@ -274,27 +254,27 @@ export const updateReaderSettings = async => { const isGlobalSetting = isGlobal || GLOBAL_READER_SETTING_KEYS.includes(setting); if (isGlobalSetting) { return requestUpdateServerMetadata( [[setting, convertSettingsToMetadata({ [setting]: value })[setting]]], - profile ? [profile] : undefined, + profile !== undefined ? [profile?.toString()] : undefined, ); } return requestUpdateMangaMetadata( manga, [[setting, convertSettingsToMetadata({ [setting]: value })[setting]]], - profile ? [profile] : undefined, + profile !== undefined ? [profile?.toString()] : undefined, ); }; export const createUpdateReaderSettings = ( manga: Pick & GqlMetaHolder, handleError: (error: any) => void = defaultPromiseErrorHandler('createUpdateReaderSettings'), - profile?: string, + profile?: ReadingMode, ): ((...args: OmitFirst>>) => Promise) => (setting, value, isGlobal) => updateReaderSettings(manga, setting, value, isGlobal, profile).catch(handleError); diff --git a/src/modules/reader/types/Reader.types.ts b/src/modules/reader/types/Reader.types.ts index b1616775..ea3df163 100644 --- a/src/modules/reader/types/Reader.types.ts +++ b/src/modules/reader/types/Reader.types.ts @@ -119,8 +119,6 @@ export interface IReaderSettingsGlobal { shouldShowPageNumber: boolean; isStaticNav: boolean; backgroundColor: ReaderBackgroundColor; - profiles: string[]; - readingModesDefaultProfile: Record; hotkeys: Record; imagePreLoadAmount: number; } @@ -144,7 +142,6 @@ export interface IReaderSettingsManga { value: number; enabled: boolean; }; - defaultProfile: string; } export interface IReaderSettings extends IReaderSettingsGlobal, IReaderSettingsManga {} @@ -206,7 +203,6 @@ export enum ReaderHotkey { CYCLE_SCALE_TYPE, STRETCH_IMAGE, OFFSET_SPREAD_PAGES, - CYCLE_PROFILES, } export interface ReaderPagerProps diff --git a/src/modules/reader/utils/ReaderSettings.utils.tsx b/src/modules/reader/utils/ReaderSettings.utils.tsx index 044859f6..83f216f8 100644 --- a/src/modules/reader/utils/ReaderSettings.utils.tsx +++ b/src/modules/reader/utils/ReaderSettings.utils.tsx @@ -6,50 +6,13 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import ManageAccountsIcon from '@mui/icons-material/ManageAccounts'; -import { - IReaderSettings, - IReaderSettingsWithDefaultFlag, - ReaderPageScaleMode, - ReadingMode, -} from '@/modules/reader/types/Reader.types.ts'; -import { DEFAULT_READER_PROFILE } from '@/modules/reader/constants/ReaderSettings.constants.tsx'; -import { ValueToDisplayData } from '@/modules/core/Core.types.ts'; +import { IReaderSettings, ReaderPageScaleMode, ReadingMode } from '@/modules/reader/types/Reader.types.ts'; export const isOffsetDoubleSpreadPagesEditable = (readingMode: IReaderSettings['readingMode']): boolean => readingMode === ReadingMode.DOUBLE_PAGE; -export const createProfileValueToDisplayData = ( - profiles: string[], - setIcon: boolean = false, -): ValueToDisplayData => - Object.fromEntries( - profiles.map((profile) => [ - profile, - { - isTitleString: profile !== DEFAULT_READER_PROFILE, - title: profile === DEFAULT_READER_PROFILE ? 'global.label.standard' : profile, - icon: setIcon ? : null, - }, - ]), - ) as ValueToDisplayData; - -export const getValidReaderProfile = (profile: string, profiles: string[]): string => - profiles.includes(profile) ? profile : DEFAULT_READER_PROFILE; - export const isReaderWidthEditable = (pageScaleMode: IReaderSettings['pageScaleMode']): boolean => [ReaderPageScaleMode.WIDTH, ReaderPageScaleMode.SCREEN].includes(pageScaleMode); export const isContinuousReadingMode = (readingMode: IReaderSettings['readingMode']): boolean => [ReadingMode.CONTINUOUS_VERTICAL, ReadingMode.CONTINUOUS_HORIZONTAL].includes(readingMode); - -export const getReaderProfile = ( - defaultProfile: IReaderSettingsWithDefaultFlag['defaultProfile'], - profiles: IReaderSettings['profiles'], - readingModesDefaultProfile: IReaderSettings['readingModesDefaultProfile'], - readingMode: IReaderSettings['readingMode'], -): string => - getValidReaderProfile( - defaultProfile.isDefault ? readingModesDefaultProfile[readingMode] : defaultProfile.value, - profiles, - );