File size: 3,780 Bytes
de4b571 11fcc5a de4b571 11fcc5a de4b571 11fcc5a de4b571 11fcc5a de4b571 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
import type { RecursivePartial } from "$lib/types/generic";
import type {
PartialSettings,
AllPartialSettingsWithSchema,
CobaltSettingsV3,
CobaltSettingsV4,
CobaltSettingsV5,
CobaltSettingsV6,
} from "$lib/types/settings";
import { getBrowserLanguage } from "$lib/settings/audio-sub-language";
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;
},
[4]: (settings: AllPartialSettingsWithSchema) => {
const out = settings as RecursivePartial<CobaltSettingsV4>;
out.schemaVersion = 4;
if (settings?.processing) {
if ("allowDefaultOverride" in settings.processing) {
delete settings.processing.allowDefaultOverride;
}
if ("seenOverrideWarning" in settings.processing) {
delete settings.processing.seenOverrideWarning;
}
}
return out as AllPartialSettingsWithSchema;
},
[5]: (settings: AllPartialSettingsWithSchema) => {
const out = settings as RecursivePartial<CobaltSettingsV5>;
out.schemaVersion = 5;
if (settings?.save) {
if ("tiktokH265" in settings.save) {
out.save!.allowH265 = settings.save.tiktokH265;
delete settings.save.tiktokH265;
}
if ("twitterGif" in settings.save) {
out.save!.convertGif = settings.save.twitterGif;
delete settings.save.twitterGif;
}
}
if (settings?.privacy) {
if ("alwaysProxy" in settings.privacy) {
out.save ??= {};
out.save.alwaysProxy = settings.privacy.alwaysProxy;
delete settings.privacy.alwaysProxy;
}
}
if (settings?.appearance) {
if ("reduceMotion" in settings.appearance) {
out.accessibility ??= {};
out.accessibility.reduceMotion = settings.appearance.reduceMotion;
delete settings.appearance.reduceMotion;
}
if ("reduceTransparency" in settings.appearance) {
out.accessibility ??= {};
out.accessibility.reduceTransparency = settings.appearance.reduceTransparency;
delete settings.appearance.reduceTransparency;
}
}
return out as AllPartialSettingsWithSchema;
},
[6]: (settings: AllPartialSettingsWithSchema) => {
const out = settings as RecursivePartial<CobaltSettingsV6>;
out.schemaVersion = 6;
if (settings?.save) {
if ("localProcessing" in settings.save) {
out.save!.localProcessing =
settings.save.localProcessing ? "preferred" : "disabled";
}
}
return out as AllPartialSettingsWithSchema;
},
};
export const migrate = (settings: AllPartialSettingsWithSchema): PartialSettings => {
return Object.keys(migrations)
.map(Number)
.filter((version) => version > settings.schemaVersion)
.reduce((settings, migrationVersion) => {
return migrations[migrationVersion](settings);
}, settings as AllPartialSettingsWithSchema) as PartialSettings;
};
|