import type { HydrusClient } from "./hydrus"; import type { Booru } from "./thirdeye"; import { writable } from "svelte/store"; import { Platform } from "./platform"; // Todo: use GM get/setValue instead? export const localLoad = async (key: string, def: T) => { const ret = await Platform.getValue(key, def); return ret; }; const localSet = (key: string, value: any) => { if (execution_mode == "worker") { return; } if (execution_mode != "userscript") chrome.storage.local.set({ [key]: JSON.stringify(value) }); else localStorage.setItem('__pee__' + key, JSON.stringify(value)); }; export const initial_settings = { loop: true, dh: false, pmeth: 5, xpv: false, xpi: false, hyd: false, notcata: false, ak: '', auto_embed: 0, auto_tags: '', te: false, eye: false, ca: false, pre: false, prev: false, sh: false, ep: false, tm: false, dvc: false, expte: false, mdist: -1, phash: false, hotlink: false, jpeg: false, vercheck: false, cache: undefined as (boolean | undefined), // meaning defaults to false, except on b4k fhost: 0, maxe: 5, conc: 8, ho: false, blacklist: [] as string[], rsources: [] as (Omit & { view: string, disabled?: boolean })[], }; export const settings = writable>(); export const appState = writable({ isCatalog: false, is4chanX: false, akValid: false, herror: '' as string | undefined, client: null as HydrusClient | null, processing: 0, processed: 0, foundPosts: [] as HTMLElement[] }); settings.subscribe(newVal => { if (newVal) localSet('settingsv2', newVal); });