@@ -219,7 +219,7 @@ protected async Task Initialize()
219219 await BucketStorageAdapter . Init ( ) ;
220220 await LoadVersion ( ) ;
221221 await UpdateSchema ( schema ) ;
222- await UpdateHasSynced ( ) ;
222+ await ResolveOfflineSyncStatus ( ) ;
223223 await Database . Execute ( "PRAGMA RECURSIVE_TRIGGERS=TRUE" ) ;
224224 Ready = true ;
225225 Emit ( new PowerSyncDBEvent { Initialized = true } ) ;
@@ -243,70 +243,33 @@ private async Task LoadVersion()
243243 catch ( Exception e )
244244 {
245245 throw new Exception (
246- $ "Unsupported PowerSync extension version. Need >=0.2.0 <1.0.0, got: { sdkVersion } . Details: { e . Message } "
246+ $ "Unsupported PowerSync extension version. Need >=0.4.10 <1.0.0, got: { sdkVersion } . Details: { e . Message } "
247247 ) ;
248248 }
249249
250- // Validate version is >= 0.2.0 and < 1.0.0
251- if ( versionInts [ 0 ] != 0 || versionInts [ 1 ] < 2 || versionInts [ 2 ] < 0 )
250+ // Validate version is >= 0.4.10 and < 1.0.0
251+ if ( versionInts [ 0 ] != 0 || versionInts [ 1 ] < 4 || ( versionInts [ 1 ] == 4 && versionInts [ 2 ] < 10 ) )
252252 {
253- throw new Exception ( $ "Unsupported PowerSync extension version. Need >=0.2.0 <1.0.0, got: { sdkVersion } ") ;
253+ throw new Exception ( $ "Unsupported PowerSync extension version. Need >=0.4.10 <1.0.0, got: { sdkVersion } ") ;
254254 }
255255 }
256256
257- // protected async resolveOfflineSyncStatus() {
258- // const result = await this.database.get<{ r: string }>('SELECT powersync_offline_sync_status() as r');
259- // const parsed = JSON.parse(result.r) as CoreSyncStatus;
260-
261- // const updatedStatus = new SyncStatus({
262- // ...this.currentStatus.toJSON(),
263- // ...coreStatusToJs(parsed)
264- // });
265-
266- // if (!updatedStatus.isEqual(this.currentStatus)) {
267- // this.currentStatus = updatedStatus;
268- // this.iterateListeners((l) => l.statusChanged?.(this.currentStatus));
269- // }
270- // }
271- // TODO DELETE
272- private record LastSyncedResult ( int priority , string ? last_synced_at ) ;
273-
274- protected async Task UpdateHasSynced ( )
257+ private record OfflineSyncStatusResult ( string r ) ;
258+ protected async Task ResolveOfflineSyncStatus ( )
275259 {
276- var results = await Database . GetAll < LastSyncedResult > (
277- "SELECT priority, last_synced_at FROM ps_sync_state ORDER BY priority DESC"
278- ) ;
279-
280- DateTime ? lastCompleteSync = null ;
281- List < DB . Crud . SyncPriorityStatus > priorityStatuses = [ ] ;
260+ var result = await Database . Get < OfflineSyncStatusResult > ( "SELECT powersync_offline_sync_status() as r" ) ;
261+ var parsed = JsonConvert . DeserializeObject < CoreSyncStatus > ( result . r ) ;
282262
283- // TODO: Will be altered/extended when reporting individual sync priority statuses is supported
284- foreach ( var result in results )
285- {
286- var parsedDate = DateTime . Parse ( result . last_synced_at + "Z" ) ;
287-
288- if ( result . priority == FULL_SYNC_PRIORITY )
289- {
290- // This lowest-possible priority represents a complete sync.
291- lastCompleteSync = parsedDate ;
292- }
293- }
263+ var parsedSyncStatus = CoreInstructionHelpers . CoreStatusToSyncStatus ( parsed ! ) ;
264+ var updatedStatus = CurrentStatus . CreateUpdatedStatus ( parsedSyncStatus ) ;
294265
295- var hasSynced = lastCompleteSync != null ;
296- if ( hasSynced != CurrentStatus . HasSynced )
266+ if ( ! updatedStatus . IsEqual ( CurrentStatus ) )
297267 {
298- CurrentStatus = new SyncStatus ( new SyncStatusOptions ( CurrentStatus . Options )
299- {
300- HasSynced = hasSynced ,
301- LastSyncedAt = lastCompleteSync ,
302- } ) ;
303-
268+ CurrentStatus = updatedStatus ;
304269 Emit ( new PowerSyncDBEvent { StatusChanged = CurrentStatus } ) ;
305270 }
306271 }
307272
308-
309-
310273 /// <summary>
311274 /// Replace the schema with a new version. This is for advanced use cases - typically the schema should just be specified once in the constructor.
312275 /// Cannot be used while connected - this should only be called before <see cref="Connect"/>.
0 commit comments