From e928399066c53df3815208bca992d50398066003 Mon Sep 17 00:00:00 2001 From: SethBurkart123 Date: Mon, 31 Mar 2025 18:27:53 +1100 Subject: [PATCH] feat: add auto migration --- src/background.ts | 49 ++++++++++++++++++++++++++--- src/interface/index.ts | 2 +- src/interface/pages/settings.svelte | 1 + src/types/storage.ts | 11 ++++--- 4 files changed, 54 insertions(+), 9 deletions(-) diff --git a/src/background.ts b/src/background.ts index 4360540b..5d42e6cb 100644 --- a/src/background.ts +++ b/src/background.ts @@ -14,7 +14,7 @@ function reloadSeqtaPages() { result.then(open, console.error) } -// Main message listener +// @ts-ignore browser.runtime.onMessage.addListener((request: any, _: any, sendResponse: (response?: any) => void) => { switch (request.type) { @@ -38,7 +38,7 @@ browser.runtime.onMessage.addListener((request: any, _: any, sendResponse: (resp sendResponse(response); }); }); - return true; // Keep message channel open for async response + return true; case 'githubTab': browser.tabs.create({ url: 'github.com/BetterSEQTA/BetterSEQTA-Plus' }); @@ -56,7 +56,7 @@ browser.runtime.onMessage.addListener((request: any, _: any, sendResponse: (resp console.log('Unknown request type'); } - return true; + return false; }); const DefaultValues: SettingsState = { @@ -154,11 +154,52 @@ function SetStorageValue(object: any) { } } +async function migrateLegacySettings() { + const storage = await browser.storage.local.get(null) as unknown as SettingsState; + + // Animated Background Migration + if ('animatedbk' in storage || 'bksliderinput' in storage) { + const animatedSettings = { + enabled: storage.animatedbk ?? true, + speed: storage.bksliderinput ? parseFloat(storage.bksliderinput) / 100 * 2 : 1 + }; + await browser.storage.local.set({ 'plugin.animated-background.settings': animatedSettings }); + } + + // Assessments Average Migration + if ('assessmentsAverage' in storage || 'lettergrade' in storage) { + const assessmentsSettings = { + enabled: storage.assessmentsAverage ?? true, + lettergrade: storage.lettergrade ?? false + }; + await browser.storage.local.set({ 'plugin.assessments-average.settings': assessmentsSettings }); + } + + if ('selectedTheme' in storage) { + const themesSettings = { enabled: true }; + await browser.storage.local.set({ 'plugin.themes.settings': themesSettings }); + } + if (storage.notificationCollector !== false) { + await browser.storage.local.set({ 'plugin.notificationCollector.settings': { enabled: true } }); + } else { + await browser.storage.local.set({ 'plugin.notificationCollector.settings': { enabled: false } }); + } + + const keysToRemove = [ + 'animatedbk', + 'bksliderinput', + 'assessmentsAverage', + 'lettergrade' + ]; + await browser.storage.local.remove(keysToRemove); +} + browser.runtime.onInstalled.addListener(function (event) { browser.storage.local.remove(['justupdated']); browser.storage.local.remove(['data']); - if ( event.reason == 'install', event.reason == 'update' ) { + if ( event.reason == 'install' || event.reason == 'update' ) { browser.storage.local.set({ justupdated: true }); + migrateLegacySettings(); } }); diff --git a/src/interface/index.ts b/src/interface/index.ts index e044d2dd..faec02db 100644 --- a/src/interface/index.ts +++ b/src/interface/index.ts @@ -26,4 +26,4 @@ if (!mountPoint) { } InjectCustomIcons() -renderSvelte(Settings, mountPoint) \ No newline at end of file +renderSvelte(Settings, mountPoint, { standalone: true }) \ No newline at end of file diff --git a/src/interface/pages/settings.svelte b/src/interface/pages/settings.svelte index 7094039e..d8391a24 100644 --- a/src/interface/pages/settings.svelte +++ b/src/interface/pages/settings.svelte @@ -59,6 +59,7 @@ if (!standalone) return; initializeSettingsState(); + console.log('settingsState', $settingsState); StandaloneStore.setStandalone(true); }); diff --git a/src/types/storage.ts b/src/types/storage.ts index fd3a7ffb..4195f00c 100644 --- a/src/types/storage.ts +++ b/src/types/storage.ts @@ -1,8 +1,6 @@ export interface SettingsState { DarkMode: boolean; selectedTheme: string; - animatedbk: boolean; - bksliderinput: string; customshortcuts: CustomShortcut[]; defaultmenuorder: any[]; lessonalert: boolean; @@ -37,9 +35,14 @@ export interface SettingsState { defaultPage: string; devMode?: boolean; originalDarkMode?: boolean; - assessmentsAverage?: boolean; - lettergrade: boolean; newsSource?: string; + + // depreciated keys + animatedbk: boolean; + bksliderinput: string; + lettergrade: boolean; + assessmentsAverage?: boolean; + notificationCollector?: boolean; } interface ToggleItem {