From ddbd0b7ac03c8e97d8ba54708d61e8c0c96ad160 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Wed, 01 Jul 2026 23:28:45 +0800
Subject: [PATCH] Stop tracking local release artifacts
---
privatevoice.src/frontend/src/App.svelte | 75 +++++++++++++++++++++++++++++++++----
1 files changed, 66 insertions(+), 9 deletions(-)
diff --git a/privatevoice.src/frontend/src/App.svelte b/privatevoice.src/frontend/src/App.svelte
index 31f69cd..8406d60 100755
--- a/privatevoice.src/frontend/src/App.svelte
+++ b/privatevoice.src/frontend/src/App.svelte
@@ -9,11 +9,22 @@
import { indicatorVisible, indicatorStatus, indicatorVolume, hotkeyName } from './lib/stores/indicator'
import { updateAvailable, type UpdateInfo } from './lib/stores/update'
import { deviceName, engineHardwareInfo } from './lib/stores/app'
+ import { setLocale, localeRevision } from './lib/i18n'
+ import { languageMode, languageID, effectiveLanguageID, uiLocale } from './lib/stores/config'
+ import type { UILocale } from './lib/stores/config'
let isIndicatorRoute = $state(window.location.hash === '#/indicator')
let showUpdateDialog = $state(false)
+ let languageReady = $state(false)
+ let showOnboarding = $state(false)
onMount(() => {
+ Call.ByName('voicesnap/services.ConfigService.GetLanguageSettings').then((settings: any) => {
+ applyLanguageSettings(settings)
+ }).catch(() => {
+ languageReady = true
+ })
+
Events.On('indicator:show', (ev: any) => {
indicatorVisible.set(true)
if (ev?.data?.status) {
@@ -43,6 +54,9 @@
const data = ev?.data
if (data?.status) {
engineStatus.set(data.status as any)
+ if (data.status === 'ready') {
+ showOnboarding = false
+ }
}
if (data?.hardwareInfo) {
engineHardwareInfo.set(data.hardwareInfo)
@@ -69,17 +83,16 @@
Call.ByName('voicesnap/services.EngineService.GetStatus').then((data: any) => {
if (data?.status) {
engineStatus.set(data.status as any)
+ if (data.status === 'ready') {
+ showOnboarding = false
+ }
}
if (data?.hardwareInfo) {
engineHardwareInfo.set(data.hardwareInfo)
}
})
- Call.ByName('voicesnap/services.EngineService.ModelExists').then((exists: any) => {
- if (!exists) {
- engineStatus.set('need_model')
- }
- })
+ refreshCurrentModelAvailability()
// Load actual hotkey name from backend (store default is generic "Ctrl")
Call.ByName('voicesnap/services.HotkeyService.GetHotkeyName').then((name: any) => {
@@ -88,15 +101,59 @@
}
})
})
+
+ function applyLanguageSettings(settings: any) {
+ const mode = settings?.languageMode === 'manual' ? 'manual' : 'auto'
+ const configured = typeof settings?.languageID === 'string' && settings.languageID ? settings.languageID : 'zh-CN'
+ const effective = typeof settings?.effectiveLanguageID === 'string' && settings.effectiveLanguageID ? settings.effectiveLanguageID : configured
+ const locale = typeof settings?.uiLocale === 'string' && settings.uiLocale ? settings.uiLocale : 'en'
+ languageMode.set(mode)
+ languageID.set(configured)
+ effectiveLanguageID.set(effective)
+ uiLocale.set(locale as UILocale)
+ setLocale(locale)
+ languageReady = true
+ }
+
+ async function refreshCurrentModelAvailability() {
+ try {
+ const current: any = await Call.ByName('voicesnap/services.EngineService.GetCurrentModelStatus')
+ if (!current?.installed) {
+ const hasAnyInstalled: any = await Call.ByName('voicesnap/services.EngineService.HasAnyInstalledModel')
+ showOnboarding = !hasAnyInstalled
+ if (!hasAnyInstalled) {
+ engineStatus.set('need_model')
+ }
+ } else {
+ showOnboarding = false
+ }
+ } catch {
+ try {
+ const exists: any = await Call.ByName('voicesnap/services.EngineService.ModelExists')
+ if (!exists) {
+ const hasAnyInstalled: any = await Call.ByName('voicesnap/services.EngineService.HasAnyInstalledModel')
+ .catch(() => false)
+ showOnboarding = !hasAnyInstalled
+ if (!hasAnyInstalled) {
+ engineStatus.set('need_model')
+ }
+ }
+ } catch {}
+ }
+ }
</script>
{#if isIndicatorRoute}
<FloatingIndicator />
{:else}
- {#if $engineStatus === 'need_model'}
- <OnboardingView />
- {:else}
- <SettingsWindow />
+ {#if languageReady}
+ {#key $localeRevision}
+ {#if showOnboarding && $engineStatus === 'need_model'}
+ <OnboardingView />
+ {:else}
+ <SettingsWindow />
+ {/if}
+ {/key}
{/if}
{#if showUpdateDialog && $updateAvailable}
--
Gitblit v1.9.3