Explorar o código

fix: resetState preserves all persistent keys automatically

resetState now iterates PERSISTENT_KEYS instead of hardcoding fields,
ensuring tempApiUrl, duckToken etc. are never lost. Simplify auto-run
reset to just set autoRunning flag.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
chendeben hai 4 meses
pai
achega
b935dcb28d
Modificáronse 1 ficheiros con 13 adicións e 33 borrados
  1. 13 33
      background.js

+ 13 - 33
background.js

@@ -140,34 +140,23 @@ async function setPasswordState(password) {
 async function resetState() {
   console.log(LOG_PREFIX, 'Resetting all state');
   // Preserve settings and persistent data across resets
-  const prev = await chrome.storage.session.get([
-    'seenCodes',
-    'seenInbucketMailIds',
-    'accounts',
-    'tabRegistry',
-    'vpsUrl',
-    'customPassword',
-    'mailProvider',
-    'inbucketHost',
-    'inbucketMailbox',
-  ]);
+  const prev = await chrome.storage.session.get(PERSISTENT_KEYS.concat(['tabRegistry']));
 
   // Also check chrome.storage.local in case session was empty (after reload)
   const local = await chrome.storage.local.get(PERSISTENT_KEYS);
 
   await chrome.storage.session.clear();
-  await chrome.storage.session.set({
-    ...DEFAULT_STATE,
-    seenCodes: prev.seenCodes || local.seenCodes || [],
-    seenInbucketMailIds: prev.seenInbucketMailIds || local.seenInbucketMailIds || [],
-    accounts: prev.accounts || local.accounts || [],
-    tabRegistry: prev.tabRegistry || {},
-    vpsUrl: prev.vpsUrl || local.vpsUrl || '',
-    customPassword: prev.customPassword || local.customPassword || '',
-    mailProvider: prev.mailProvider || local.mailProvider || '163',
-    inbucketHost: prev.inbucketHost || local.inbucketHost || '',
-    inbucketMailbox: prev.inbucketMailbox || local.inbucketMailbox || '',
-  });
+
+  // Restore all persistent keys (prefer session value, fallback to local)
+  const restored = { ...DEFAULT_STATE, tabRegistry: prev.tabRegistry || {} };
+  for (const key of PERSISTENT_KEYS) {
+    if (prev[key] !== undefined && prev[key] !== null && prev[key] !== '') {
+      restored[key] = prev[key];
+    } else if (local[key] !== undefined && local[key] !== null && local[key] !== '') {
+      restored[key] = local[key];
+    }
+  }
+  await chrome.storage.session.set(restored);
 }
 
 /**
@@ -946,17 +935,8 @@ async function autoRunLoop(totalRuns) {
 
     // Reset everything at the start of each run (keep VPS/mail settings)
     const prevState = await getState();
-    const keepSettings = {
-      vpsUrl: prevState.vpsUrl,
-      mailProvider: prevState.mailProvider,
-      tempApiUrl: prevState.tempApiUrl,
-      inbucketHost: prevState.inbucketHost,
-      inbucketMailbox: prevState.inbucketMailbox,
-      duckToken: prevState.duckToken,
-      autoRunning: true,
-    };
     await resetState();
-    await setState(keepSettings);
+    await setState({ autoRunning: true });
     // Tell side panel to reset all UI
     chrome.runtime.sendMessage({ type: 'AUTO_RUN_RESET' }).catch(() => {});
     await sleepWithStop(500);