mobile download

This commit is contained in:
Macbook
2026-05-28 14:44:19 +09:00
parent e2816b037f
commit 3503ef33f5
152 changed files with 11021 additions and 687 deletions
+75
View File
@@ -0,0 +1,75 @@
/**
* Storage adapter — Capacitor Preferences (native) with localStorage fallback (browser dev).
*/
import { Preferences } from '@capacitor/preferences';
const memoryCache = new Map<string, string>();
let prefsReady = false;
async function ensurePrefs(): Promise<boolean> {
if (prefsReady) return true;
try {
await Preferences.get({ key: '__probe__' });
prefsReady = true;
return true;
} catch {
return false;
}
}
export async function storageGet(key: string): Promise<string | null> {
if (memoryCache.has(key)) return memoryCache.get(key) ?? null;
if (await ensurePrefs()) {
const { value } = await Preferences.get({ key });
if (value != null) {
memoryCache.set(key, value);
return value;
}
}
if (typeof localStorage !== 'undefined') {
return localStorage.getItem(key);
}
return null;
}
export async function storageSet(key: string, value: string): Promise<void> {
memoryCache.set(key, value);
if (await ensurePrefs()) {
await Preferences.set({ key, value });
}
if (typeof localStorage !== 'undefined') {
localStorage.setItem(key, value);
}
}
export async function storageRemove(key: string): Promise<void> {
memoryCache.delete(key);
if (await ensurePrefs()) {
await Preferences.remove({ key });
}
if (typeof localStorage !== 'undefined') {
localStorage.removeItem(key);
}
}
/** Sync read for hot paths (uses memory cache populated at init). */
export function storageGetSync(key: string): string | null {
if (memoryCache.has(key)) return memoryCache.get(key) ?? null;
if (typeof localStorage !== 'undefined') return localStorage.getItem(key);
return null;
}
export function storageSetSync(key: string, value: string): void {
memoryCache.set(key, value);
if (typeof localStorage !== 'undefined') localStorage.setItem(key, value);
void storageSet(key, value);
}
export async function initStorage(): Promise<void> {
const keys = ['gc_device_id', 'gc_user_id', 'gc_username', 'gc_display_name', 'gc_user_role', 'gc_api_base_url'];
if (!(await ensurePrefs())) return;
for (const key of keys) {
const { value } = await Preferences.get({ key });
if (value != null) memoryCache.set(key, value);
}
}