Files
tolaria/src/utils/vaultListStore.ts

85 lines
2.5 KiB
TypeScript
Raw Normal View History

import { invoke } from '@tauri-apps/api/core'
import { isTauri, mockInvoke } from '../mock-tauri'
import type { VaultOption } from '../components/StatusBar'
export interface PersistedVaultList {
2026-05-08 00:45:21 +02:00
vaults: Array<{
label: string
path: string
alias?: string | null
2026-05-11 16:37:06 +02:00
shortLabel?: string | null
2026-05-08 00:45:21 +02:00
color?: string | null
icon?: string | null
mounted?: boolean | null
}>
active_vault: string | null
2026-05-08 00:45:21 +02:00
default_workspace_path?: string | null
hidden_defaults: string[]
}
2026-05-08 00:45:21 +02:00
function persistedVaultOption(v: PersistedVaultList['vaults'][number]): VaultOption {
return {
label: v.label,
path: v.path,
alias: v.alias ?? undefined,
2026-05-11 16:37:06 +02:00
...(v.shortLabel ? { shortLabel: v.shortLabel } : {}),
2026-05-08 00:45:21 +02:00
color: v.color ?? null,
icon: v.icon ?? null,
mounted: v.mounted !== false,
}
}
function tauriCall<T>(command: string, args: Record<string, unknown>): Promise<T> {
return isTauri() ? invoke<T>(command, args) : mockInvoke<T>(command, args)
}
2026-05-08 00:45:21 +02:00
async function checkAvailability(v: PersistedVaultList['vaults'][number]): Promise<VaultOption> {
try {
const exists = await tauriCall<boolean>('check_vault_exists', { path: v.path })
2026-05-08 00:45:21 +02:00
return { ...persistedVaultOption(v), available: exists }
} catch (error) {
void error
2026-05-08 00:45:21 +02:00
return { ...persistedVaultOption(v), available: false }
}
}
2026-05-08 00:45:21 +02:00
export async function loadVaultList(): Promise<{
vaults: VaultOption[]
activeVault: string | null
defaultWorkspacePath: string | null
hiddenDefaults: string[]
}> {
const data = await tauriCall<PersistedVaultList>('load_vault_list', {})
const persisted = data?.vaults ?? []
const checked = await Promise.all(persisted.map(checkAvailability))
2026-05-08 00:45:21 +02:00
return {
vaults: checked,
activeVault: data?.active_vault ?? null,
defaultWorkspacePath: data?.default_workspace_path ?? data?.active_vault ?? null,
hiddenDefaults: data?.hidden_defaults ?? [],
}
}
2026-05-08 00:45:21 +02:00
export function saveVaultList(
vaults: VaultOption[],
activeVault: string | null,
hiddenDefaults: string[] = [],
defaultWorkspacePath: string | null = activeVault,
): Promise<void> {
const list: PersistedVaultList = {
2026-05-08 00:45:21 +02:00
vaults: vaults.map(v => ({
label: v.label,
path: v.path,
alias: v.alias ?? null,
2026-05-11 16:37:06 +02:00
...(v.shortLabel ? { shortLabel: v.shortLabel } : {}),
2026-05-08 00:45:21 +02:00
color: v.color ?? null,
icon: v.icon ?? null,
mounted: v.mounted !== false,
})),
active_vault: activeVault,
2026-05-08 00:45:21 +02:00
default_workspace_path: defaultWorkspacePath,
hidden_defaults: hiddenDefaults,
}
return tauriCall('save_vault_list', { list })
}