import { create } from 'zustand'; import { persist, createJSONStorage, StateStorage } from 'zustand/middleware'; import { LazyStore } from '@tauri-apps/plugin-store'; export const tauriStore = new LazyStore('store.bin'); const tauriStorage: StateStorage = { getItem: async (name: string): Promise => { if (name === 'firelink-engine-settings') { try { const data = await tauriStore.get('engine_settings'); return data || null; } catch (e) { console.error("Failed to load engine settings from DB", e); return null; } } return null; }, setItem: async (name: string, value: string): Promise => { if (name === 'firelink-engine-settings') { try { await tauriStore.set('engine_settings', value); await tauriStore.save(); } catch (e) { console.error("Failed to save engine settings to DB", e); } } }, removeItem: async (_name: string): Promise => { // no-op for now }, }; export interface SettingsState { defaultDownloadPath: string; globalSpeedLimit: number; concurrentDownloads: number; setDefaultDownloadPath: (path: string) => void; setGlobalSpeedLimit: (limit: number) => void; setConcurrentDownloads: (count: number) => void; } export const useSettingsStore = create()( persist( (set) => ({ defaultDownloadPath: '~/Downloads', globalSpeedLimit: 0, concurrentDownloads: 3, setDefaultDownloadPath: (path) => set({ defaultDownloadPath: path }), setGlobalSpeedLimit: (limit) => set({ globalSpeedLimit: limit }), setConcurrentDownloads: (count) => set({ concurrentDownloads: count }), }), { name: 'firelink-engine-settings', storage: createJSONStorage(() => tauriStorage), partialize: (state) => ({ defaultDownloadPath: state.defaultDownloadPath, globalSpeedLimit: state.globalSpeedLimit, concurrentDownloads: state.concurrentDownloads, }), } ) );