| | |
| | | let detailText = $state('') |
| | | let progress = $state(0) |
| | | let failed = $state(false) |
| | | let downloadActive = $state(false) |
| | | |
| | | onMount(() => { |
| | | Events.On('model:download-progress', (ev: any) => { |
| | | const data = ev?.data |
| | | if (data?.percent != null) { |
| | | downloadActive = true |
| | | failed = false |
| | | statusText = t('onboarding.syncModel') |
| | | progress = data.percent |
| | | const downloadedMB = Math.floor((data.downloaded || 0) / 1024 / 1024) |
| | | const totalMB = Math.floor((data.total || 0) / 1024 / 1024) |
| | |
| | | Events.On('engine:status', (ev: any) => { |
| | | const data = ev?.data |
| | | if (data?.status === 'ready') { |
| | | downloadActive = false |
| | | failed = false |
| | | statusText = t('onboarding.complete') |
| | | progress = 100 |
| | | } else if (data?.status === 'need_model') { |
| | | const error = typeof data?.error === 'string' ? data.error.trim() : '' |
| | | if (error && !downloadActive) { |
| | | statusText = t('onboarding.failed') |
| | | detailText = data?.error || '' |
| | | detailText = error |
| | | failed = true |
| | | } |
| | | } else if (data?.status === 'error') { |
| | | downloadActive = false |
| | | statusText = t('onboarding.failed') |
| | | detailText = data?.error || '' |
| | | failed = true |
| | |
| | | |
| | | async function triggerDownload() { |
| | | try { |
| | | downloadActive = true |
| | | failed = false |
| | | statusText = t('onboarding.syncModel') |
| | | detailText = '' |
| | | await Call.ByName('voicesnap/services.EngineService.DownloadCurrentModel') |
| | | downloadActive = false |
| | | statusText = t('onboarding.optimizing') |
| | | detailText = t('onboarding.extracting') |
| | | } catch (err: any) { |
| | | downloadActive = false |
| | | statusText = t('onboarding.failed') |
| | | detailText = err?.message || String(err) |
| | | failed = true |