experiments in a post-browser web
10
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix(editor): use extension settings API for vim mode, audit localStorage usage

+78 -14
+38 -7
extensions/editor/home.js
··· 146 146 return; 147 147 } 148 148 149 - // Load vim mode preference from localStorage 149 + // Load vim mode preference from extension settings API, fallback to localStorage cache 150 150 let vimMode = false; 151 151 try { 152 - vimMode = localStorage.getItem(SETTINGS_KEY) === 'true'; 153 - debug && console.log('[editor] Loaded vimMode setting:', vimMode); 152 + if (api?.settings?.getKey) { 153 + const result = await api.settings.getKey('vimMode'); 154 + if (result.success && result.data !== undefined && result.data !== null) { 155 + vimMode = !!result.data; 156 + debug && console.log('[editor] Loaded vimMode from datastore:', vimMode); 157 + } else { 158 + // Fallback to localStorage cache 159 + vimMode = localStorage.getItem(SETTINGS_KEY) === 'true'; 160 + debug && console.log('[editor] Loaded vimMode from localStorage fallback:', vimMode); 161 + } 162 + } else { 163 + vimMode = localStorage.getItem(SETTINGS_KEY) === 'true'; 164 + debug && console.log('[editor] Loaded vimMode from localStorage (no settings API):', vimMode); 165 + } 154 166 } catch (err) { 155 - debug && console.log('[editor] Failed to load settings:', err); 167 + // Last resort fallback to localStorage 168 + try { 169 + vimMode = localStorage.getItem(SETTINGS_KEY) === 'true'; 170 + } catch {} 171 + debug && console.log('[editor] Failed to load settings, used localStorage fallback:', err); 156 172 } 157 173 158 174 // Check URL params for content, file path, or itemId ··· 320 336 }; 321 337 322 338 /** 323 - * Handle vim mode changes - persist to localStorage 339 + * Handle vim mode changes - persist to extension settings API and localStorage cache 324 340 */ 325 341 const handleVimModeChange = (enabled) => { 342 + // Write to localStorage as fast cache for next init 326 343 try { 327 344 localStorage.setItem(SETTINGS_KEY, enabled ? 'true' : 'false'); 328 - console.log('[editor] Saved vimMode setting:', enabled); 329 345 } catch (err) { 330 - console.error('[editor] Failed to save vimMode setting:', err); 346 + debug && console.log('[editor] Failed to cache vimMode to localStorage:', err); 347 + } 348 + 349 + // Write to extension settings API (datastore) as source of truth 350 + if (api?.settings?.setKey) { 351 + api.settings.setKey('vimMode', enabled).then(result => { 352 + if (result.success) { 353 + console.log('[editor] Saved vimMode to datastore:', enabled); 354 + } else { 355 + console.error('[editor] Failed to save vimMode to datastore:', result.error); 356 + } 357 + }).catch(err => { 358 + console.error('[editor] Failed to save vimMode to datastore:', err); 359 + }); 360 + } else { 361 + console.log('[editor] Saved vimMode to localStorage only (no settings API):', enabled); 331 362 } 332 363 }; 333 364
+40 -7
extensions/hud/background.js
··· 18 18 let hudWindowId = null; 19 19 20 20 /** 21 - * Load HUD enabled state from localStorage 21 + * Load HUD enabled state from extension settings API, fallback to localStorage cache 22 22 */ 23 - const loadState = () => { 23 + const loadState = async () => { 24 + if (api?.settings?.getKey) { 25 + try { 26 + const result = await api.settings.getKey('enabled'); 27 + if (result.success && result.data !== undefined && result.data !== null) { 28 + hudEnabled = !!result.data; 29 + console.log('[ext:hud] Loaded state from datastore - enabled:', hudEnabled); 30 + return hudEnabled; 31 + } 32 + } catch (err) { 33 + console.log('[ext:hud] Failed to load from datastore, falling back to localStorage:', err); 34 + } 35 + } 36 + // Fallback to localStorage cache 24 37 const stored = localStorage.getItem(STORAGE_KEY); 25 38 hudEnabled = stored === 'true'; 26 - console.log('[ext:hud] Loaded state - enabled:', hudEnabled); 39 + console.log('[ext:hud] Loaded state from localStorage fallback - enabled:', hudEnabled); 27 40 return hudEnabled; 28 41 }; 29 42 30 43 /** 31 - * Save HUD enabled state to localStorage 44 + * Save HUD enabled state to extension settings API and localStorage cache 32 45 */ 33 46 const saveState = (enabled) => { 34 47 hudEnabled = enabled; 35 - localStorage.setItem(STORAGE_KEY, String(enabled)); 36 - console.log('[ext:hud] Saved state - enabled:', enabled); 48 + 49 + // Write to localStorage as fast cache 50 + try { 51 + localStorage.setItem(STORAGE_KEY, String(enabled)); 52 + } catch (err) { 53 + debug && console.log('[ext:hud] Failed to cache state to localStorage:', err); 54 + } 55 + 56 + // Write to extension settings API (datastore) as source of truth 57 + if (api?.settings?.setKey) { 58 + api.settings.setKey('enabled', enabled).then(result => { 59 + if (result.success) { 60 + console.log('[ext:hud] Saved state to datastore - enabled:', enabled); 61 + } else { 62 + console.error('[ext:hud] Failed to save state to datastore:', result.error); 63 + } 64 + }).catch(err => { 65 + console.error('[ext:hud] Failed to save state to datastore:', err); 66 + }); 67 + } else { 68 + console.log('[ext:hud] Saved state to localStorage only - enabled:', enabled); 69 + } 37 70 }; 38 71 39 72 /** ··· 153 186 console.log('[ext:hud] init'); 154 187 155 188 // Load persisted state 156 - loadState(); 189 + await loadState(); 157 190 158 191 // Register shortcut 159 192 initShortcut();