From a48febeda56a1c677b6d743f5d2c8b9ef4aa941a Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Mon, 21 Apr 2025 15:37:54 +0200 Subject: [PATCH] Save selected extension languages on the server --- src/modules/browse/Browse.types.ts | 1 + src/modules/extension/screens/Extensions.tsx | 22 ++++++++++++++++--- src/modules/metadata/Metadata.constants.ts | 2 ++ src/modules/settings/Settings.constants.ts | 2 ++ .../services/ServerSettingsMetadata.ts | 4 ++++ 5 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/modules/browse/Browse.types.ts b/src/modules/browse/Browse.types.ts index c42719a7..452bf4a6 100644 --- a/src/modules/browse/Browse.types.ts +++ b/src/modules/browse/Browse.types.ts @@ -8,4 +8,5 @@ export type MetadataBrowseSettings = { hideLibraryEntries: boolean; + extensionLanguages: string[]; }; diff --git a/src/modules/extension/screens/Extensions.tsx b/src/modules/extension/screens/Extensions.tsx index 00f29e6a..ebad528d 100644 --- a/src/modules/extension/screens/Extensions.tsx +++ b/src/modules/extension/screens/Extensions.tsx @@ -18,7 +18,6 @@ import { useTranslation } from 'react-i18next'; import { Link, useLocation, useNavigate } from 'react-router-dom'; import { CustomTooltip } from '@/modules/core/components/CustomTooltip.tsx'; import { requestManager } from '@/lib/requests/RequestManager.ts'; -import { extensionDefaultLangs } from '@/modules/core/utils/Languages.ts'; import { useLocalStorage } from '@/modules/core/hooks/useStorage.tsx'; import { AppbarSearch } from '@/modules/core/components/AppbarSearch.tsx'; import { LoadingPlaceholder } from '@/modules/core/components/placeholder/LoadingPlaceholder.tsx'; @@ -48,6 +47,11 @@ import { AppRoutes } from '@/modules/core/AppRoute.constants.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { useNavBarContext } from '@/modules/navigation-bar/contexts/NavbarContext.tsx'; import { ExtensionOptions } from '@/modules/extension/components/ExtensionOptions'; +import { + createUpdateMetadataServerSettings, + useMetadataServerSettings, +} from '@/modules/settings/services/ServerSettingsMetadata.ts'; +import { MetadataBrowseSettings } from '@/modules/browse/Browse.types.ts'; const LANGUAGE = 0; const EXTENSIONS = 1; @@ -125,7 +129,13 @@ export function Extensions({ tabsMenuHeight }: { tabsMenuHeight: number }) { const [fetchExtensions, { data, loading: areExtensionsLoading, error: extensionsError }] = requestManager.useExtensionListFetch(); - const [shownLangs, setShownLangs] = useLocalStorage('shownExtensionLangs', extensionDefaultLangs()); + const { + settings: { extensionLanguages: shownLangs }, + } = useMetadataServerSettings(); + const updateMetadataServerSettings = createUpdateMetadataServerSettings< + keyof Pick + >((e) => makeToast(t('global.error.label.failed_to_save_changes'), 'error', getErrorMessage(e))); + const [showNsfw] = useLocalStorage('showNsfw', true); const [query] = useQueryParam('query', StringParam); @@ -219,7 +229,13 @@ export function Extensions({ tabsMenuHeight }: { tabsMenuHeight: number }) { - + + updateMetadataServerSettings('extensionLanguages', languages) + } + allLangs={allLangs} + /> , ); diff --git a/src/modules/metadata/Metadata.constants.ts b/src/modules/metadata/Metadata.constants.ts index 81e67ec9..8503d889 100644 --- a/src/modules/metadata/Metadata.constants.ts +++ b/src/modules/metadata/Metadata.constants.ts @@ -85,6 +85,7 @@ const APP_METADATA_OBJECT: Record = { downloaded: undefined, unread: undefined, showChapterNumber: undefined, + extensionLanguages: undefined, }; export const VALID_APP_METADATA_KEYS = Object.keys(APP_METADATA_OBJECT); @@ -134,6 +135,7 @@ export const GLOBAL_METADATA_KEYS: AppMetadataKeys[] = [ // browse 'hideLibraryEntries', + 'extensionLanguages', // history 'hideHistory', diff --git a/src/modules/settings/Settings.constants.ts b/src/modules/settings/Settings.constants.ts index cb428d6e..c9622b30 100644 --- a/src/modules/settings/Settings.constants.ts +++ b/src/modules/settings/Settings.constants.ts @@ -10,6 +10,7 @@ import { DEFAULT_DEVICE } from '@/modules/device/services/Device.ts'; import { DEFAULT_SORT_SETTINGS } from '@/modules/migration/Migration.constants.ts'; import { MetadataServerSettings } from '@/modules/settings/Settings.types.ts'; import { GridLayout } from '@/modules/core/Core.types.ts'; +import { extensionDefaultLangs } from '@/modules/core/utils/Languages.ts'; export const SERVER_SETTINGS_METADATA_DEFAULT: MetadataServerSettings = { // downloads @@ -40,6 +41,7 @@ export const SERVER_SETTINGS_METADATA_DEFAULT: MetadataServerSettings = { // browse hideLibraryEntries: false, + extensionLanguages: extensionDefaultLangs(), // history hideHistory: false, diff --git a/src/modules/settings/services/ServerSettingsMetadata.ts b/src/modules/settings/services/ServerSettingsMetadata.ts index 370136c7..0bab4508 100644 --- a/src/modules/settings/services/ServerSettingsMetadata.ts +++ b/src/modules/settings/services/ServerSettingsMetadata.ts @@ -26,6 +26,7 @@ export const convertSettingsToMetadata = ( devices: JSON.stringify(settings.devices), customThemes: JSON.stringify(settings.customThemes), migrateSortSettings: JSON.stringify(settings.migrateSortSettings), + extensionLanguages: JSON.stringify(settings.extensionLanguages), }); export const convertMetadataToSettings = ( @@ -43,6 +44,9 @@ export const convertMetadataToSettings = ( jsonSaveParse( (metadata.migrateSortSettings as string) ?? '', ) ?? SERVER_SETTINGS_METADATA_DEFAULT.migrateSortSettings, + extensionLanguages: + jsonSaveParse((metadata.extensionLanguages as string) ?? '') ?? + SERVER_SETTINGS_METADATA_DEFAULT.extensionLanguages, }) satisfies MetadataServerSettings; const getMetadataServerSettingsWithDefaultFallback = (