2026-03-03 00:41:46 +01:00
|
|
|
import { invoke } from '@tauri-apps/api/core'
|
|
|
|
|
import { isTauri, mockInvoke } from '../mock-tauri'
|
|
|
|
|
import type { VaultOption } from '../components/StatusBar'
|
|
|
|
|
|
|
|
|
|
export interface PersistedVaultList {
|
|
|
|
|
vaults: Array<{ label: string; path: string }>
|
|
|
|
|
active_vault: string | null
|
2026-03-03 02:26:41 +01:00
|
|
|
hidden_defaults: string[]
|
2026-03-03 00:41:46 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function tauriCall<T>(command: string, args: Record<string, unknown>): Promise<T> {
|
|
|
|
|
return isTauri() ? invoke<T>(command, args) : mockInvoke<T>(command, args)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function checkAvailability(v: { label: string; path: string }): Promise<VaultOption> {
|
|
|
|
|
try {
|
|
|
|
|
const exists = await tauriCall<boolean>('check_vault_exists', { path: v.path })
|
|
|
|
|
return { label: v.label, path: v.path, available: exists }
|
2026-05-07 19:52:14 +02:00
|
|
|
} catch (error) {
|
|
|
|
|
void error
|
2026-03-03 00:41:46 +01:00
|
|
|
return { label: v.label, path: v.path, available: false }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-03 02:26:41 +01:00
|
|
|
export async function loadVaultList(): Promise<{ vaults: VaultOption[]; activeVault: string | null; hiddenDefaults: string[] }> {
|
2026-03-03 00:41:46 +01:00
|
|
|
const data = await tauriCall<PersistedVaultList>('load_vault_list', {})
|
|
|
|
|
const persisted = data?.vaults ?? []
|
|
|
|
|
const checked = await Promise.all(persisted.map(checkAvailability))
|
2026-03-03 02:26:41 +01:00
|
|
|
return { vaults: checked, activeVault: data?.active_vault ?? null, hiddenDefaults: data?.hidden_defaults ?? [] }
|
2026-03-03 00:41:46 +01:00
|
|
|
}
|
|
|
|
|
|
2026-04-18 03:10:41 +02:00
|
|
|
export function saveVaultList(vaults: VaultOption[], activeVault: string | null, hiddenDefaults: string[] = []): Promise<void> {
|
2026-03-03 00:41:46 +01:00
|
|
|
const list: PersistedVaultList = {
|
|
|
|
|
vaults: vaults.map(v => ({ label: v.label, path: v.path })),
|
|
|
|
|
active_vault: activeVault,
|
2026-03-03 02:26:41 +01:00
|
|
|
hidden_defaults: hiddenDefaults,
|
2026-03-03 00:41:46 +01:00
|
|
|
}
|
|
|
|
|
return tauriCall('save_vault_list', { list })
|
|
|
|
|
}
|