Skip to content

Commit e9144fc

Browse files
committed
Pulling lastSyncedAt from sync_state table.
1 parent bf31869 commit e9144fc

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

PowerSync/PowerSync.Common/Client/PowerSyncDatabase.cs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ public interface IPowerSyncDatabase : IEventStream<PowerSyncDBEvent>
8585

8686
public 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

Comments
 (0)