@@ -414,6 +414,15 @@ export function registerRequestCallbacks(state: BackState, init: () => Promise<v
414414 } ) ;
415415
416416 state . socketServer . register ( BackIn . SYNC_ALL , async ( event , source ) => {
417+ if ( state . updateInProgress ) {
418+ const openDialog = state . socketServer . showMessageBoxBack ( state , event . client ) ;
419+ openDialog ( {
420+ largeMessage : true ,
421+ message : 'Update already in progress.' ,
422+ buttons : [ 'Ok' ]
423+ } ) ;
424+ return false ;
425+ }
417426 if ( ! state . isDev ) {
418427 // Make sure we meet minimum verison requirements
419428 const updatesReady = state . componentStatuses . filter ( c => c . id === 'core-launcher' && c . state === ComponentState . NEEDS_UPDATE ) . length > 0 ;
@@ -424,7 +433,7 @@ export function registerRequestCallbacks(state: BackState, init: () => Promise<v
424433 if ( ! updatesReady ) {
425434 // No software update ready but metadata server requires it
426435 const openDialog = state . socketServer . showMessageBoxBack ( state , event . client ) ;
427- await openDialog ( {
436+ openDialog ( {
428437 largeMessage : true ,
429438 message : state . languageContainer . app . noLauncherUpdateReady ,
430439 buttons : [ state . languageContainer . misc . ok ]
@@ -433,7 +442,7 @@ export function registerRequestCallbacks(state: BackState, init: () => Promise<v
433442 }
434443 // Too old to sync metadata, prompt a software update
435444 const openDialog = state . socketServer . showMessageBoxBack ( state , event . client ) ;
436- const dialogId = await openDialog ( {
445+ const dialogId = openDialog ( {
437446 largeMessage : true ,
438447 message : state . languageContainer . app . softwareUpdateRequired ,
439448 buttons : [ state . languageContainer . misc . yes , state . languageContainer . misc . no ] ,
@@ -450,6 +459,8 @@ export function registerRequestCallbacks(state: BackState, init: () => Promise<v
450459 }
451460 }
452461
462+ state . updateInProgress = true ;
463+
453464 let totalGames = 0 ;
454465 try {
455466 totalGames = await fpDatabase . countGames ( ) ;
@@ -468,31 +479,27 @@ export function registerRequestCallbacks(state: BackState, init: () => Promise<v
468479 } ;
469480 }
470481
471- // Fetch pre-update info to estimate progress bar size
472- const total = await getMetaUpdateInfo ( source , true , totalGames === 0 ) ;
473- const chunks = Math . ceil ( total / 2500 ) ;
474-
475- const openDialog = state . socketServer . showMessageBoxBack ( state , event . client ) ;
476- const dialogId = await openDialog ( {
477- largeMessage : true ,
478- message : `Syncing metadata from ${ source . name } ...` ,
479- buttons : [ ] ,
480- fields : [
481- {
482- type : 'progress' ,
483- name : 'progress' ,
484- message : `${ total } Updates...` ,
485- value : 0
486- }
487- ]
488- } ) ;
482+ const updateToast = ( content : string ) => {
483+ state . socketServer . broadcast ( BackOut . TOAST , 'sync' , content , {
484+ autoClose : false ,
485+ closeButton : false ,
486+ } ) ;
487+ } ;
489488
489+ // Fetch pre-update info to estimate progress bar size
490490 try {
491+ updateToast ( 'Getting Update Info...' ) ;
492+ const totalUpdateGames = await getMetaUpdateInfo ( source , true , totalGames === 0 ) ;
493+ const chunks = Math . ceil ( totalUpdateGames / 2500 ) ;
494+
491495 // Tags and platforms
492496 const newDate = new Date ( ) ;
493497 let lastDate = new Date ( ) ;
498+ updateToast ( 'Updating Platforms...' ) ;
494499 const lastDatePlats = await syncPlatforms ( source ) ;
500+ updateToast ( 'Updating Tags...' ) ;
495501 const lastDateTags = await syncTags ( source ) ;
502+
496503 if ( lastDatePlats > lastDateTags ) {
497504 lastDate = lastDatePlats ;
498505 } else {
@@ -510,11 +517,12 @@ export function registerRequestCallbacks(state: BackState, init: () => Promise<v
510517 console . log ( 'games' ) ;
511518 const dataPacksFolder = path . join ( state . config . flashpointPath , state . preferences . dataPacksFolderPath ) ;
512519 let chunk = 0 ;
520+ updateToast ( 'Updating Games...' ) ;
513521 lastDate = await syncGames ( source , dataPacksFolder , ( ) => {
514522 chunk = chunk + 1 ;
515- const progress = chunk / chunks ;
516- state . socketServer . broadcast ( BackOut . UPDATE_DIALOG_FIELD_VALUE , dialogId , 'progress' , progress * 100 ) ;
523+ updateToast ( `Updating Games... (Batch ${ chunk } of ${ chunks } )` ) ;
517524 } ) ;
525+ updateToast ( 'Updating Game Redirects...' ) ;
518526 await syncRedirects ( source ) ;
519527 if ( sourceIdx !== - 1 ) {
520528 state . preferences . gameMetadataSources [ sourceIdx ] . games . latestUpdateTime = lastDate . toISOString ( ) ;
@@ -525,6 +533,7 @@ export function registerRequestCallbacks(state: BackState, init: () => Promise<v
525533 state . socketServer . broadcast ( BackOut . UPDATE_PREFERENCES_RESPONSE , state . preferences ) ;
526534 }
527535
536+ updateToast ( 'Updating Search Suggestions...' ) ;
528537 // Send out new suggestions and library lists
529538 state . suggestions = {
530539 tags : [ ] ,
@@ -538,9 +547,21 @@ export function registerRequestCallbacks(state: BackState, init: () => Promise<v
538547 const total = await fpDatabase . countGames ( ) ;
539548 const cats = await fpDatabase . findAllTagCategories ( ) ;
540549 state . socketServer . broadcast ( BackOut . POST_SYNC_CHANGES , state . suggestions . library , state . suggestions , state . platformAppPaths , cats , total ) ;
550+ state . socketServer . broadcast ( BackOut . TOAST , 'sync' , 'Update Complete' , {
551+ type : 'success' ,
552+ autoClose : false ,
553+ closeButton : true ,
554+ } ) ;
541555 return true ;
556+ } catch ( err : any ) {
557+ state . socketServer . broadcast ( BackOut . TOAST , 'sync' , `Update Failure - ${ err . message } ` , {
558+ type : 'error' ,
559+ autoClose : false ,
560+ closeButton : true ,
561+ } ) ;
562+ return false ;
542563 } finally {
543- state . socketServer . broadcast ( BackOut . CANCEL_DIALOG , dialogId ) ;
564+ state . updateInProgress = false ;
544565 }
545566 } ) ;
546567
0 commit comments