| import { saveSettingsDebounced } from '../../script.js'; |
|
|
| const MIGRATED_MARKER = '__migrated'; |
| const MIGRATABLE_KEYS = [ |
| /^AlertRegex_/, |
| /^AlertWI_/, |
| /^Assets_SkipConfirm_/, |
| /^Characters_PerPage$/, |
| /^DataBank_sortField$/, |
| /^DataBank_sortOrder$/, |
| /^extension_update_nag$/, |
| /^extensions_sortByName$/, |
| /^FeatherlessModels_PerPage$/, |
| /^GroupMembers_PerPage$/, |
| /^GroupCandidates_PerPage$/, |
| /^LNavLockOn$/, |
| /^LNavOpened$/, |
| /^mediaWarningShown:/, |
| /^NavLockOn$/, |
| /^NavOpened$/, |
| /^Personas_PerPage$/, |
| /^Personas_GridView$/, |
| /^Proxy_SkipConfirm_/, |
| /^qr--executeShortcut$/, |
| /^qr--syntax$/, |
| /^qr--tabSize$/, |
| /^qr--wrap$/, |
| /^RegenerateWithCtrlEnter$/, |
| /^SelectedNavTab$/, |
| /^sendAsNamelessWarningShown$/, |
| /^StoryStringValidationCache$/, |
| /^WINavOpened$/, |
| /^WI_PerPage$/, |
| /^world_info_sort_order$/, |
| ]; |
|
|
| |
| |
| |
| class AccountStorage { |
| |
| |
| |
| #state = {}; |
|
|
| |
| |
| |
| #ready = false; |
|
|
| #migrateLocalStorage() { |
| const localStorageKeys = []; |
| for (let i = 0; i < globalThis.localStorage.length; i++) { |
| localStorageKeys.push(globalThis.localStorage.key(i)); |
| } |
| for (const key of localStorageKeys) { |
| if (MIGRATABLE_KEYS.some(k => k.test(key))) { |
| const value = globalThis.localStorage.getItem(key); |
| this.#state[key] = value; |
| globalThis.localStorage.removeItem(key); |
| } |
| } |
| } |
|
|
| |
| |
| |
| |
| init(state) { |
| if (state && typeof state === 'object') { |
| this.#state = Object.assign(this.#state, state); |
| } |
|
|
| if (!Object.hasOwn(this.#state, MIGRATED_MARKER)) { |
| this.#migrateLocalStorage(); |
| this.#state[MIGRATED_MARKER] = '1'; |
| saveSettingsDebounced(); |
| } |
|
|
| this.#ready = true; |
| } |
|
|
| |
| |
| |
| |
| |
| getItem(key) { |
| if (!this.#ready) { |
| console.warn(`AccountStorage not ready (trying to read from ${key})`); |
| } |
|
|
| return Object.hasOwn(this.#state, key) ? String(this.#state[key]) : null; |
| } |
|
|
| |
| |
| |
| |
| |
| setItem(key, value) { |
| if (!this.#ready) { |
| console.warn(`AccountStorage not ready (trying to write to ${key})`); |
| } |
|
|
| this.#state[key] = String(value); |
| saveSettingsDebounced(); |
| } |
|
|
| |
| |
| |
| |
| removeItem(key) { |
| if (!this.#ready) { |
| console.warn(`AccountStorage not ready (trying to remove ${key})`); |
| } |
|
|
| if (!Object.hasOwn(this.#state, key)) { |
| return; |
| } |
|
|
| delete this.#state[key]; |
| saveSettingsDebounced(); |
| } |
|
|
| |
| |
| |
| |
| getState() { |
| return structuredClone(this.#state); |
| } |
| } |
|
|
| |
| |
| |
| export const accountStorage = new AccountStorage(); |
|
|