mirror of
https://github.com/wukko/cobalt.git
synced 2025-05-29 21:10:14 +02:00
web/settings: types for preparation for future migrations
This commit is contained in:
parent
66bac03e30
commit
4e4f7af437
@ -1,15 +1,15 @@
|
|||||||
import { derived, readable, type Updater } from 'svelte/store';
|
import { derived, readable, type Updater } from 'svelte/store';
|
||||||
import { merge } from 'ts-deepmerge';
|
import { merge } from 'ts-deepmerge';
|
||||||
|
|
||||||
import type { RecursivePartial } from '../types/generic';
|
import type {
|
||||||
import type { CobaltSettings } from '../types/settings';
|
CobaltSettings,
|
||||||
|
PartialSettings,
|
||||||
|
AllPartialSettingsWithSchema
|
||||||
|
} from '../types/settings';
|
||||||
|
|
||||||
import { migrateOldSettings } from '../settings/migrate';
|
import { migrateOldSettings } from '../settings/migrate';
|
||||||
import defaultSettings from '../settings/defaults';
|
import defaultSettings from '../settings/defaults';
|
||||||
|
|
||||||
type PartialSettings = RecursivePartial<CobaltSettings>;
|
|
||||||
type PartialSettingsWithSchema = RecursivePartial<CobaltSettings> & { schemaVersion: number };
|
|
||||||
|
|
||||||
const updatePlausiblePreference = (settings: PartialSettings) => {
|
const updatePlausiblePreference = (settings: PartialSettings) => {
|
||||||
if (settings.privacy?.disableAnalytics) {
|
if (settings.privacy?.disableAnalytics) {
|
||||||
localStorage.setItem('plausible_ignore', 'true');
|
localStorage.setItem('plausible_ignore', 'true');
|
||||||
@ -27,18 +27,18 @@ const writeToStorage = (settings: PartialSettings) => {
|
|||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
type Migrator = (s: PartialSettings) => PartialSettings;
|
type Migrator = (s: AllPartialSettingsWithSchema) => AllPartialSettingsWithSchema;
|
||||||
const migrations: Record<number, Migrator> = {
|
const migrations: Record<number, Migrator> = {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const migrate = (settings: PartialSettingsWithSchema) => {
|
const migrate = (settings: AllPartialSettingsWithSchema): PartialSettings => {
|
||||||
return Object.keys(migrations)
|
return Object.keys(migrations)
|
||||||
.map(Number)
|
.map(Number)
|
||||||
.filter(version => version > settings.schemaVersion)
|
.filter(version => version > settings.schemaVersion)
|
||||||
.reduce((settings, migrationVersion) => {
|
.reduce((settings, migrationVersion) => {
|
||||||
return migrations[migrationVersion](settings);
|
return migrations[migrationVersion](settings);
|
||||||
}, settings as PartialSettings);
|
}, settings as AllPartialSettingsWithSchema);
|
||||||
}
|
}
|
||||||
|
|
||||||
const loadFromStorage = () => {
|
const loadFromStorage = () => {
|
||||||
@ -52,7 +52,7 @@ const loadFromStorage = () => {
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsed = JSON.parse(settings) as PartialSettingsWithSchema;
|
const parsed = JSON.parse(settings) as AllPartialSettingsWithSchema;
|
||||||
if (parsed.schemaVersion < defaultSettings.schemaVersion) {
|
if (parsed.schemaVersion < defaultSettings.schemaVersion) {
|
||||||
return migrate(parsed);
|
return migrate(parsed);
|
||||||
}
|
}
|
||||||
|
@ -8,4 +8,4 @@ export type RecursivePartial<Type> = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export type DefaultImport<T> = () => Promise<{ default: T }>;
|
export type DefaultImport<T> = () => Promise<{ default: T }>;
|
||||||
export type Optional<T> = T | undefined;
|
export type Optional<T> = T | undefined;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import languages from '$i18n/languages.json';
|
import languages from '$i18n/languages.json';
|
||||||
|
import type { RecursivePartial } from './generic';
|
||||||
|
|
||||||
export const themeOptions = ["auto", "light", "dark"] as const;
|
export const themeOptions = ["auto", "light", "dark"] as const;
|
||||||
export const audioFormatOptions = ["best", "mp3", "ogg", "wav", "opus"] as const;
|
export const audioFormatOptions = ["best", "mp3", "ogg", "wav", "opus"] as const;
|
||||||
@ -37,12 +38,20 @@ type CobaltSettingsSave = {
|
|||||||
youtubeDubBrowserLang: boolean,
|
youtubeDubBrowserLang: boolean,
|
||||||
};
|
};
|
||||||
|
|
||||||
export type CobaltSettings = {
|
export type CurrentCobaltSettings = {
|
||||||
schemaVersion: number,
|
schemaVersion: 2,
|
||||||
advanced: CobaltSettingsAdvanced,
|
advanced: CobaltSettingsAdvanced,
|
||||||
appearance: CobaltSettingsAppearance,
|
appearance: CobaltSettingsAppearance,
|
||||||
save: CobaltSettingsSave,
|
save: CobaltSettingsSave,
|
||||||
privacy: CobaltSettingsPrivacy
|
privacy: CobaltSettingsPrivacy
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type CobaltSettings = CurrentCobaltSettings;
|
||||||
|
|
||||||
|
export type PartialSettings = RecursivePartial<CobaltSettings>;
|
||||||
|
export type PartialSettingsWithSchema = RecursivePartial<CobaltSettings> & { schemaVersion: number };
|
||||||
|
|
||||||
|
export type AllSchemaVersions = CurrentCobaltSettings;
|
||||||
|
export type AllPartialSettingsWithSchema = RecursivePartial<CobaltSettings> & { schemaVersion: number };
|
||||||
|
|
||||||
export type DownloadModeOption = CobaltSettings['save']['downloadMode'];
|
export type DownloadModeOption = CobaltSettings['save']['downloadMode'];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user