@@ -85,6 +85,7 @@ public interface IPowerSyncDatabase : IEventStream<PowerSyncDBEvent>
8585
8686public class PowerSyncDatabase : EventStream < PowerSyncDBEvent > , IPowerSyncDatabase
8787{
88+ private static readonly int FULL_SYNC_PRIORITY = 2147483647 ;
8889
8990 public IDBAdapter Database ;
9091 private Schema schema ;
@@ -231,21 +232,34 @@ private async Task LoadVersion()
231232 }
232233 }
233234
234- private record LastSyncedResult ( string ? synced_at ) ;
235+ private record LastSyncedResult ( int ? priority , string ? last_synced_at ) ;
235236
236237 protected async Task UpdateHasSynced ( )
237238 {
238- var result = await Database . Get < LastSyncedResult > ( "SELECT powersync_last_synced_at() as synced_at" ) ;
239+ var results = await Database . GetAll < LastSyncedResult > (
240+ "SELECT priority, last_synced_at FROM ps_sync_state ORDER BY priority DESC"
241+ ) ;
239242
240- var hasSynced = result . synced_at != null ;
241- DateTime ? syncedAt = result . synced_at != null ? DateTime . Parse ( result . synced_at + "Z" ) : null ;
243+ DateTime ? lastCompleteSync = null ;
242244
245+ foreach ( var result in results )
246+ {
247+ var parsedDate = DateTime . Parse ( result . last_synced_at + "Z" ) ;
248+
249+ if ( result . priority == FULL_SYNC_PRIORITY )
250+ {
251+ // This lowest-possible priority represents a complete sync.
252+ lastCompleteSync = parsedDate ;
253+ }
254+ }
255+
256+ var hasSynced = lastCompleteSync != null ;
243257 if ( hasSynced != CurrentStatus . HasSynced )
244258 {
245259 CurrentStatus = new SyncStatus ( new SyncStatusOptions ( CurrentStatus . Options )
246260 {
247261 HasSynced = hasSynced ,
248- LastSyncedAt = syncedAt
262+ LastSyncedAt = lastCompleteSync ,
249263 } ) ;
250264
251265 Emit ( new PowerSyncDBEvent { StatusChanged = CurrentStatus } ) ;
0 commit comments