From 4a9a4cec1739007936d434a6a51180158e25078b Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Wed, 24 Jun 2026 02:17:08 +0800
Subject: [PATCH] Fix missing model language switch flow

---
 privatevoice.src/frontend/src/App.svelte |   24 +++++++++++++++++++++---
 1 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/privatevoice.src/frontend/src/App.svelte b/privatevoice.src/frontend/src/App.svelte
index 407dd7e..8406d60 100755
--- a/privatevoice.src/frontend/src/App.svelte
+++ b/privatevoice.src/frontend/src/App.svelte
@@ -16,6 +16,7 @@
   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) => {
@@ -53,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)
@@ -79,6 +83,9 @@
     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)
@@ -112,13 +119,24 @@
     try {
       const current: any = await Call.ByName('voicesnap/services.EngineService.GetCurrentModelStatus')
       if (!current?.installed) {
-        engineStatus.set('need_model')
+        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) {
-          engineStatus.set('need_model')
+          const hasAnyInstalled: any = await Call.ByName('voicesnap/services.EngineService.HasAnyInstalledModel')
+            .catch(() => false)
+          showOnboarding = !hasAnyInstalled
+          if (!hasAnyInstalled) {
+            engineStatus.set('need_model')
+          }
         }
       } catch {}
     }
@@ -130,7 +148,7 @@
 {:else}
   {#if languageReady}
     {#key $localeRevision}
-      {#if $engineStatus === 'need_model'}
+      {#if showOnboarding && $engineStatus === 'need_model'}
         <OnboardingView />
       {:else}
         <SettingsWindow />

--
Gitblit v1.9.3