@@ -297,6 +297,10 @@ protected async Task StreamingSync(CancellationToken? signal, PowerSyncConnectio
297297 UpdateSyncStatus ( new SyncStatusOptions
298298 {
299299 Connected = false ,
300+ DataFlow = new SyncDataFlowStatus
301+ {
302+ DownloadError = ex
303+ }
300304 } ) ;
301305
302306 // On error, wait a little before retrying
@@ -466,7 +470,13 @@ protected async Task<StreamingSyncIterationResult> StreamingSyncIteration(Cancel
466470 {
467471 Connected = true ,
468472 LastSyncedAt = DateTime . Now ,
469- DataFlow = new SyncDataFlowStatus { Downloading = false }
473+ DataFlow = new SyncDataFlowStatus
474+ {
475+ Downloading = false
476+ }
477+ } , new UpdateSyncStatusOptions
478+ {
479+ ClearDownloadError = true
470480 } ) ;
471481
472482 }
@@ -546,7 +556,9 @@ protected async Task<StreamingSyncIterationResult> StreamingSyncIteration(Cancel
546556 //
547557 await DelayRetry ( ) ;
548558 return new StreamingSyncIterationResult { Retry = true } ;
549- } else if ( remainingSeconds < 30 ) {
559+ }
560+ else if ( remainingSeconds < 30 )
561+ {
550562 logger . LogDebug ( "Token will expire soon; reconnect" ) ;
551563 // Pre-emptively refresh the token
552564 Options . Remote . InvalidateCredentials ( ) ;
@@ -563,8 +575,13 @@ protected async Task<StreamingSyncIterationResult> StreamingSyncIteration(Cancel
563575 UpdateSyncStatus ( new SyncStatusOptions
564576 {
565577 Connected = true ,
566- LastSyncedAt = DateTime . Now
567- } ) ;
578+ LastSyncedAt = DateTime . Now ,
579+ } ,
580+ new UpdateSyncStatusOptions
581+ {
582+ ClearDownloadError = true
583+ }
584+ ) ;
568585 }
569586 else if ( validatedCheckpoint == targetCheckpoint )
570587 {
@@ -590,8 +607,12 @@ protected async Task<StreamingSyncIterationResult> StreamingSyncIteration(Cancel
590607 LastSyncedAt = DateTime . Now ,
591608 DataFlow = new SyncDataFlowStatus
592609 {
593- Downloading = false
610+ Downloading = false ,
594611 }
612+ } ,
613+ new UpdateSyncStatusOptions
614+ {
615+ ClearDownloadError = true
595616 } ) ;
596617 }
597618 }
@@ -661,6 +682,14 @@ await locks.ObtainLock(new LockOptions<Task>
661682
662683 checkedCrudItem = nextCrudItem ;
663684 await Options . UploadCrud ( ) ;
685+ UpdateSyncStatus ( new SyncStatusOptions
686+ {
687+ } ,
688+ new UpdateSyncStatusOptions
689+ {
690+ ClearUploadError = true
691+ } ) ;
692+
664693 }
665694 else
666695 {
@@ -672,7 +701,14 @@ await locks.ObtainLock(new LockOptions<Task>
672701 catch ( Exception ex )
673702 {
674703 checkedCrudItem = null ;
675- UpdateSyncStatus ( new SyncStatusOptions { DataFlow = new SyncDataFlowStatus { Uploading = false } } ) ;
704+ UpdateSyncStatus ( new SyncStatusOptions
705+ {
706+ DataFlow = new SyncDataFlowStatus
707+ {
708+ Uploading = false ,
709+ UploadError = ex
710+ }
711+ } ) ;
676712
677713 await DelayRetry ( ) ;
678714
@@ -706,7 +742,10 @@ public async Task WaitForReady()
706742 await Task . CompletedTask ;
707743 }
708744
709- protected void UpdateSyncStatus ( SyncStatusOptions options )
745+ protected record UpdateSyncStatusOptions (
746+ bool ? ClearDownloadError = null , bool ? ClearUploadError = null
747+ ) ;
748+ protected void UpdateSyncStatus ( SyncStatusOptions options , UpdateSyncStatusOptions ? updateOptions = null )
710749 {
711750 var updatedStatus = new SyncStatus ( new SyncStatusOptions
712751 {
@@ -716,7 +755,9 @@ protected void UpdateSyncStatus(SyncStatusOptions options)
716755 DataFlow = new SyncDataFlowStatus
717756 {
718757 Uploading = options . DataFlow ? . Uploading ?? SyncStatus . DataFlowStatus . Uploading ,
719- Downloading = options . DataFlow ? . Downloading ?? SyncStatus . DataFlowStatus . Downloading
758+ Downloading = options . DataFlow ? . Downloading ?? SyncStatus . DataFlowStatus . Downloading ,
759+ DownloadError = updateOptions ? . ClearDownloadError == true ? null : options . DataFlow ? . DownloadError ?? SyncStatus . DataFlowStatus . DownloadError ,
760+ UploadError = updateOptions ? . ClearUploadError == true ? null : options . DataFlow ? . UploadError ?? SyncStatus . DataFlowStatus . UploadError ,
720761 }
721762 } ) ;
722763
0 commit comments