web/settings: add version 3 of setting schema

This commit is contained in:
jj
2024-10-30 12:12:51 +00:00
parent ec10019bfa
commit cafe05d5fb
4 changed files with 33 additions and 7 deletions

View File

@@ -4,11 +4,13 @@ import { merge } from 'ts-deepmerge';
import type {
PartialSettings,
AllPartialSettingsWithSchema,
CobaltSettings
CobaltSettings,
CobaltSettingsV3
} from '../types/settings';
import { getBrowserLanguage } from '$lib/settings/youtube-lang';
import { migrateOldSettings } from '../settings/migrate';
import defaultSettings from '../settings/defaults';
import type { RecursivePartial } from '$lib/types/generic';
const updatePlausiblePreference = (settings: PartialSettings) => {
if (settings.privacy?.disableAnalytics) {
@@ -29,7 +31,20 @@ const writeToStorage = (settings: PartialSettings) => {
type Migrator = (s: AllPartialSettingsWithSchema) => AllPartialSettingsWithSchema;
const migrations: Record<number, Migrator> = {
[3]: (settings: AllPartialSettingsWithSchema) => {
const out = settings as RecursivePartial<CobaltSettingsV3>;
out.schemaVersion = 3;
if (settings?.save && 'youtubeDubBrowserLang' in settings.save) {
if (settings.save.youtubeDubBrowserLang) {
out.save!.youtubeDubLang = getBrowserLanguage();
}
delete settings.save.youtubeDubBrowserLang;
}
return out as AllPartialSettingsWithSchema;
}
}
const migrate = (settings: AllPartialSettingsWithSchema): PartialSettings => {
@@ -65,7 +80,7 @@ export const loadFromString = (settings: string): PartialSettings => {
return migrate(parsed);
}
return parsed;
return parsed as PartialSettings;
}
let update: (_: Updater<PartialSettings>) => void;
@@ -106,4 +121,4 @@ export function resetSettings() {
export default derived(
storedSettings,
$settings => mergeWithDefaults($settings)
);
);