2026-01-04 22:50:34 +05:00
|
|
|
import { writable, get } from "svelte/store"
|
2026-01-04 05:19:47 +05:00
|
|
|
import { invoke } from "@tauri-apps/api/core"
|
2023-06-11 19:18:58 +05:00
|
|
|
|
2026-01-04 22:50:34 +05:00
|
|
|
// ### LISTENING STATE
|
|
|
|
|
// note: defaults to false since GUI doesn't have listening capability
|
|
|
|
|
export const isListening = writable(false)
|
2023-06-11 19:18:58 +05:00
|
|
|
|
2026-01-04 22:50:34 +05:00
|
|
|
// ### ASSISTANT VOICE
|
|
|
|
|
export const assistantVoice = writable("")
|
2023-06-11 19:18:58 +05:00
|
|
|
|
2026-01-04 22:50:34 +05:00
|
|
|
// load voice setting from db
|
|
|
|
|
async function loadVoiceSetting() {
|
|
|
|
|
try {
|
|
|
|
|
const voice = await invoke<string>("db_read", { key: "assistant_voice" })
|
|
|
|
|
assistantVoice.set(voice)
|
|
|
|
|
} catch (err) {
|
|
|
|
|
console.error("failed to load voice setting:", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
loadVoiceSetting()
|
2023-06-11 19:18:58 +05:00
|
|
|
|
2026-01-04 22:50:34 +05:00
|
|
|
// ### APP INFO
|
|
|
|
|
// these are loaded once on startup
|
|
|
|
|
export const appInfo = writable({
|
|
|
|
|
tgOfficialLink: "",
|
|
|
|
|
feedbackLink: "",
|
|
|
|
|
repositoryLink: "",
|
|
|
|
|
logFilePath: ""
|
|
|
|
|
})
|
2023-06-11 19:18:58 +05:00
|
|
|
|
2026-01-04 22:50:34 +05:00
|
|
|
async function loadAppInfo() {
|
|
|
|
|
try {
|
|
|
|
|
const [tg, feedback, repo, logPath] = await Promise.all([
|
|
|
|
|
invoke<string>("get_tg_official_link"),
|
|
|
|
|
invoke<string>("get_feedback_link"),
|
|
|
|
|
invoke<string>("get_repository_link"),
|
|
|
|
|
invoke<string>("get_log_file_path")
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
appInfo.set({
|
|
|
|
|
tgOfficialLink: tg,
|
|
|
|
|
feedbackLink: feedback,
|
|
|
|
|
repositoryLink: repo,
|
|
|
|
|
logFilePath: logPath
|
|
|
|
|
})
|
|
|
|
|
} catch (err) {
|
|
|
|
|
console.error("failed to load app info:", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
loadAppInfo()
|