Add Tauri compatibility fallback and switch to localStorage for web environments

- Updated `useApi` to detect Tauri runtime and dynamically import Tauri-specific modules.
- Refactored `useStore` to use `localStorage` fallback when not in Tauri.
- Improved runtime checks with `isTauri` utility to handle platform-specific logic.
This commit is contained in:
2026-02-22 13:40:43 +01:00
parent f1e098d3c7
commit 90793571e2
2 changed files with 37 additions and 12 deletions

View File

@@ -1,4 +1,3 @@
import { fetch } from '@tauri-apps/plugin-http';
import { useStore } from './useStore.ts';
import { useCrypto } from './useCrypto.ts';
@@ -9,6 +8,9 @@ type Settings = {
password: string;
};
const isTauri = () =>
typeof window !== 'undefined' && Boolean((window as typeof window & { __TAURI__?: unknown }).__TAURI__);
async function buildAuthHeader(): Promise<string | undefined> {
const {decrypt} = useCrypto();
const { getValue } = useStore();
@@ -36,7 +38,12 @@ export function useApi() {
...options.headers,
} as Record<string, string>;
const response = await fetch(url, {
const response = isTauri()
? await (await import('@tauri-apps/plugin-http')).fetch(url, {
...options,
headers,
})
: await fetch(url, {
...options,
headers,
});

View File

@@ -1,8 +1,13 @@
import { load, type Store } from '@tauri-apps/plugin-store';
import type { Store } from '@tauri-apps/plugin-store';
let storePromise: Promise<Store> | null = null;
function getStore(): Promise<Store> {
const isTauri = () =>
typeof window !== 'undefined' && Boolean((window as typeof window & { __TAURI__?: unknown }).__TAURI__);
async function getStore(): Promise<Store> {
if (!storePromise) {
const { load } = await import('@tauri-apps/plugin-store');
storePromise = load('store.json', {
autoSave: false,
defaults: {},
@@ -14,15 +19,28 @@ function getStore(): Promise<Store> {
export function useStore() {
const setValue = async <T>(key: string, value: T) => {
console.log('setValue',key,value);
if (isTauri()) {
const store = await getStore();
await store.set(key, value);
await store.save();
return;
}
localStorage.setItem(key, JSON.stringify(value));
};
const getValue = async <T>(key: string) => {
console.log('getValue',key);
if (isTauri()) {
const store = await getStore();
return store.get<T>(key);
}
const rawValue = localStorage.getItem(key);
if (rawValue === null) return null;
try {
return JSON.parse(rawValue) as T;
} catch {
return null;
}
};
return {