Save selected extension languages on the server

This commit is contained in:
schroda
2025-04-21 15:37:54 +02:00
parent 9dfd9ed5e3
commit a48febeda5
5 changed files with 28 additions and 3 deletions

View File

@@ -8,4 +8,5 @@
export type MetadataBrowseSettings = { export type MetadataBrowseSettings = {
hideLibraryEntries: boolean; hideLibraryEntries: boolean;
extensionLanguages: string[];
}; };

View File

@@ -18,7 +18,6 @@ import { useTranslation } from 'react-i18next';
import { Link, useLocation, useNavigate } from 'react-router-dom'; import { Link, useLocation, useNavigate } from 'react-router-dom';
import { CustomTooltip } from '@/modules/core/components/CustomTooltip.tsx'; import { CustomTooltip } from '@/modules/core/components/CustomTooltip.tsx';
import { requestManager } from '@/lib/requests/RequestManager.ts'; import { requestManager } from '@/lib/requests/RequestManager.ts';
import { extensionDefaultLangs } from '@/modules/core/utils/Languages.ts';
import { useLocalStorage } from '@/modules/core/hooks/useStorage.tsx'; import { useLocalStorage } from '@/modules/core/hooks/useStorage.tsx';
import { AppbarSearch } from '@/modules/core/components/AppbarSearch.tsx'; import { AppbarSearch } from '@/modules/core/components/AppbarSearch.tsx';
import { LoadingPlaceholder } from '@/modules/core/components/placeholder/LoadingPlaceholder.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 { getErrorMessage } from '@/lib/HelperFunctions.ts';
import { useNavBarContext } from '@/modules/navigation-bar/contexts/NavbarContext.tsx'; import { useNavBarContext } from '@/modules/navigation-bar/contexts/NavbarContext.tsx';
import { ExtensionOptions } from '@/modules/extension/components/ExtensionOptions'; 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 LANGUAGE = 0;
const EXTENSIONS = 1; const EXTENSIONS = 1;
@@ -125,7 +129,13 @@ export function Extensions({ tabsMenuHeight }: { tabsMenuHeight: number }) {
const [fetchExtensions, { data, loading: areExtensionsLoading, error: extensionsError }] = const [fetchExtensions, { data, loading: areExtensionsLoading, error: extensionsError }] =
requestManager.useExtensionListFetch(); requestManager.useExtensionListFetch();
const [shownLangs, setShownLangs] = useLocalStorage<string[]>('shownExtensionLangs', extensionDefaultLangs()); const {
settings: { extensionLanguages: shownLangs },
} = useMetadataServerSettings();
const updateMetadataServerSettings = createUpdateMetadataServerSettings<
keyof Pick<MetadataBrowseSettings, 'extensionLanguages'>
>((e) => makeToast(t('global.error.label.failed_to_save_changes'), 'error', getErrorMessage(e)));
const [showNsfw] = useLocalStorage<boolean>('showNsfw', true); const [showNsfw] = useLocalStorage<boolean>('showNsfw', true);
const [query] = useQueryParam('query', StringParam); const [query] = useQueryParam('query', StringParam);
@@ -219,7 +229,13 @@ export function Extensions({ tabsMenuHeight }: { tabsMenuHeight: number }) {
</IconButton> </IconButton>
</CustomTooltip> </CustomTooltip>
<LangSelect shownLangs={shownLangs} setShownLangs={setShownLangs} allLangs={allLangs} /> <LangSelect
shownLangs={shownLangs}
setShownLangs={(languages: string[]) =>
updateMetadataServerSettings('extensionLanguages', languages)
}
allLangs={allLangs}
/>
</>, </>,
); );

View File

@@ -85,6 +85,7 @@ const APP_METADATA_OBJECT: Record<AppMetadataKeys, undefined> = {
downloaded: undefined, downloaded: undefined,
unread: undefined, unread: undefined,
showChapterNumber: undefined, showChapterNumber: undefined,
extensionLanguages: undefined,
}; };
export const VALID_APP_METADATA_KEYS = Object.keys(APP_METADATA_OBJECT); export const VALID_APP_METADATA_KEYS = Object.keys(APP_METADATA_OBJECT);
@@ -134,6 +135,7 @@ export const GLOBAL_METADATA_KEYS: AppMetadataKeys[] = [
// browse // browse
'hideLibraryEntries', 'hideLibraryEntries',
'extensionLanguages',
// history // history
'hideHistory', 'hideHistory',

View File

@@ -10,6 +10,7 @@ import { DEFAULT_DEVICE } from '@/modules/device/services/Device.ts';
import { DEFAULT_SORT_SETTINGS } from '@/modules/migration/Migration.constants.ts'; import { DEFAULT_SORT_SETTINGS } from '@/modules/migration/Migration.constants.ts';
import { MetadataServerSettings } from '@/modules/settings/Settings.types.ts'; import { MetadataServerSettings } from '@/modules/settings/Settings.types.ts';
import { GridLayout } from '@/modules/core/Core.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 = { export const SERVER_SETTINGS_METADATA_DEFAULT: MetadataServerSettings = {
// downloads // downloads
@@ -40,6 +41,7 @@ export const SERVER_SETTINGS_METADATA_DEFAULT: MetadataServerSettings = {
// browse // browse
hideLibraryEntries: false, hideLibraryEntries: false,
extensionLanguages: extensionDefaultLangs(),
// history // history
hideHistory: false, hideHistory: false,

View File

@@ -26,6 +26,7 @@ export const convertSettingsToMetadata = (
devices: JSON.stringify(settings.devices), devices: JSON.stringify(settings.devices),
customThemes: JSON.stringify(settings.customThemes), customThemes: JSON.stringify(settings.customThemes),
migrateSortSettings: JSON.stringify(settings.migrateSortSettings), migrateSortSettings: JSON.stringify(settings.migrateSortSettings),
extensionLanguages: JSON.stringify(settings.extensionLanguages),
}); });
export const convertMetadataToSettings = ( export const convertMetadataToSettings = (
@@ -43,6 +44,9 @@ export const convertMetadataToSettings = (
jsonSaveParse<MetadataMigrationSettings['migrateSortSettings']>( jsonSaveParse<MetadataMigrationSettings['migrateSortSettings']>(
(metadata.migrateSortSettings as string) ?? '', (metadata.migrateSortSettings as string) ?? '',
) ?? SERVER_SETTINGS_METADATA_DEFAULT.migrateSortSettings, ) ?? SERVER_SETTINGS_METADATA_DEFAULT.migrateSortSettings,
extensionLanguages:
jsonSaveParse<string[]>((metadata.extensionLanguages as string) ?? '') ??
SERVER_SETTINGS_METADATA_DEFAULT.extensionLanguages,
}) satisfies MetadataServerSettings; }) satisfies MetadataServerSettings;
const getMetadataServerSettingsWithDefaultFallback = ( const getMetadataServerSettingsWithDefaultFallback = (