@@ -16,6 +16,7 @@ const { autoUpdater } = electronUpdater
1616
1717const GITHUB_OWNER = 'ThinkInAIXYZ'
1818const GITHUB_REPO = 'deepchat'
19+ const OFFICIAL_DOWNLOAD_URL = 'https://deepchatai.cn/#/download'
1920const UPDATE_CHANNEL_STABLE = 'stable'
2021const UPDATE_CHANNEL_BETA = 'beta'
2122
@@ -66,7 +67,7 @@ const toVersionInfo = (info: UpdateInfo): VersionInfo => {
6667 releaseDate : info . releaseDate || '' ,
6768 releaseNotes : formatReleaseNotes ( info . releaseNotes ) ,
6869 githubUrl : releaseUrl ,
69- downloadUrl : releaseUrl
70+ downloadUrl : OFFICIAL_DOWNLOAD_URL
7071 }
7172}
7273
@@ -120,6 +121,9 @@ export class UpgradePresenter implements IUpgradePresenter {
120121 console . log ( '无可用更新' )
121122 this . _lock = false
122123 this . _status = 'not-available'
124+ this . _error = null
125+ this . _progress = null
126+ this . _versionInfo = null
123127 eventBus . sendToRenderer ( UPDATE_EVENTS . STATUS_CHANGED , SendTarget . ALL_WINDOWS , {
124128 status : this . _status ,
125129 type : this . _lastCheckType
@@ -129,7 +133,10 @@ export class UpgradePresenter implements IUpgradePresenter {
129133 // 有可用更新
130134 autoUpdater . on ( 'update-available' , ( info ) => {
131135 console . log ( '检测到新版本' , info )
136+ this . _lock = false
132137 this . _versionInfo = toVersionInfo ( info )
138+ this . _error = null
139+ this . _progress = null
133140
134141 if ( this . _previousUpdateFailed ) {
135142 console . log ( '上次更新失败,本次不进行自动更新,改为手动更新' )
@@ -148,8 +155,10 @@ export class UpgradePresenter implements IUpgradePresenter {
148155 status : this . _status ,
149156 info : this . _versionInfo
150157 } )
151- // 检测到更新后自动开始下载
152- this . startDownloadUpdate ( )
158+
159+ if ( this . _lastCheckType === 'autoCheck' ) {
160+ this . startDownloadUpdate ( )
161+ }
153162 } )
154163
155164 // 下载进度
@@ -172,23 +181,7 @@ export class UpgradePresenter implements IUpgradePresenter {
172181 // 下载完成
173182 autoUpdater . on ( 'update-downloaded' , ( info ) => {
174183 console . log ( '更新下载完成' , info )
175- this . _lock = false
176- this . _status = 'downloaded'
177-
178- if ( ! this . _versionInfo ) {
179- this . _versionInfo = toVersionInfo ( info )
180- }
181-
182- // 写入更新标记文件
183- this . writeUpdateMarker ( this . _versionInfo ?. version || info . version )
184-
185- // 确保保存完整的更新信息
186- console . log ( '使用已保存的版本信息:' , this . _versionInfo )
187-
188- eventBus . sendToRenderer ( UPDATE_EVENTS . STATUS_CHANGED , SendTarget . ALL_WINDOWS , {
189- status : this . _status ,
190- info : this . _versionInfo // 使用已保存的版本信息
191- } )
184+ this . markUpdateDownloaded ( info )
192185 } )
193186
194187 // 监听应用获得焦点事件
@@ -269,6 +262,28 @@ export class UpgradePresenter implements IUpgradePresenter {
269262 }
270263 }
271264
265+ private markUpdateDownloaded ( info ?: UpdateInfo ) : void {
266+ this . _lock = false
267+ this . _status = 'downloaded'
268+ this . _error = null
269+ this . _progress = null
270+
271+ if ( ! this . _versionInfo && info ) {
272+ this . _versionInfo = toVersionInfo ( info )
273+ }
274+
275+ if ( ! this . _versionInfo ) {
276+ console . warn ( 'Downloaded update is missing version info, skipping renderer broadcast.' )
277+ return
278+ }
279+
280+ this . writeUpdateMarker ( this . _versionInfo . version )
281+ eventBus . sendToRenderer ( UPDATE_EVENTS . STATUS_CHANGED , SendTarget . ALL_WINDOWS , {
282+ status : this . _status ,
283+ info : this . _versionInfo
284+ } )
285+ }
286+
272287 // 处理应用获得焦点事件
273288 private handleAppFocus ( ) : void {
274289 const now = Date . now ( )
@@ -292,7 +307,9 @@ export class UpgradePresenter implements IUpgradePresenter {
292307
293308 try {
294309 this . _status = 'checking'
295- this . _lastCheckType = type
310+ this . _error = null
311+ this . _progress = null
312+ this . _lastCheckType = type ?? 'manualCheck'
296313 eventBus . sendToRenderer ( UPDATE_EVENTS . STATUS_CHANGED , SendTarget . ALL_WINDOWS , {
297314 status : this . _status
298315 } )
@@ -330,15 +347,15 @@ export class UpgradePresenter implements IUpgradePresenter {
330347 }
331348 }
332349
333- async goDownloadUpgrade ( type : 'github' | 'netdisk ' ) : Promise < void > {
334- const fallbackUrl = `https://github.com/${ GITHUB_OWNER } /${ GITHUB_REPO } /releases`
350+ async goDownloadUpgrade ( type : 'github' | 'official ' ) : Promise < void > {
351+ const githubFallbackUrl = `https://github.com/${ GITHUB_OWNER } /${ GITHUB_REPO } /releases`
335352 if ( type === 'github' ) {
336- const url = this . _versionInfo ?. githubUrl || fallbackUrl
353+ const url = this . _versionInfo ?. githubUrl || githubFallbackUrl
337354 if ( url ) {
338355 shell . openExternal ( url )
339356 }
340- } else if ( type === 'netdisk ' ) {
341- const url = this . _versionInfo ?. downloadUrl || fallbackUrl
357+ } else if ( type === 'official ' ) {
358+ const url = this . _versionInfo ?. downloadUrl || OFFICIAL_DOWNLOAD_URL
342359 if ( url ) {
343360 shell . openExternal ( url )
344361 }
@@ -356,7 +373,26 @@ export class UpgradePresenter implements IUpgradePresenter {
356373 status : this . _status ,
357374 info : this . _versionInfo // 使用已保存的版本信息
358375 } )
359- autoUpdater . downloadUpdate ( )
376+ void autoUpdater
377+ . downloadUpdate ( )
378+ . then ( ( ) => {
379+ if ( this . _status !== 'downloaded' ) {
380+ console . log (
381+ 'downloadUpdate resolved before update-downloaded event, applying fallback downloaded status'
382+ )
383+ this . markUpdateDownloaded ( )
384+ }
385+ } )
386+ . catch ( ( error : Error | unknown ) => {
387+ this . _lock = false
388+ this . _status = 'error'
389+ this . _error = error instanceof Error ? error . message : String ( error )
390+ eventBus . sendToRenderer ( UPDATE_EVENTS . STATUS_CHANGED , SendTarget . ALL_WINDOWS , {
391+ status : this . _status ,
392+ error : this . _error ,
393+ info : this . _versionInfo
394+ } )
395+ } )
360396 return true
361397 } catch ( error : Error | unknown ) {
362398 this . _status = 'error'
0 commit comments