diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index 2937a2c9..7b0b41ab 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -1,3 +1,8 @@ +## Upcomming + +🐞 Fixed +- Fixed initializing last synced date. + ## 5.1.0 ✅ Added diff --git a/packages/stream_chat/lib/src/client/client.dart b/packages/stream_chat/lib/src/client/client.dart index a9569c20..4f2dbda3 100644 --- a/packages/stream_chat/lib/src/client/client.dart +++ b/packages/stream_chat/lib/src/client/client.dart @@ -453,6 +453,15 @@ class StreamChatClient { if (persistenceEnabled) { await sync(cids: cids, lastSyncAt: _lastSyncedAt); } + } else { + // channels are empty, assuming it's a fresh start + // and making sure `lastSyncAt` is initialized + if (persistenceEnabled) { + final lastSyncAt = await _chatPersistenceClient?.getLastSyncAt(); + if (lastSyncAt == null) { + await _chatPersistenceClient?.updateLastSyncAt(DateTime.now()); + } + } } handleEvent(Event( type: EventType.connectionRecovered, diff --git a/packages/stream_chat/test/src/client/client_test.dart b/packages/stream_chat/test/src/client/client_test.dart index bc6ff843..7a605557 100644 --- a/packages/stream_chat/test/src/client/client_test.dart +++ b/packages/stream_chat/test/src/client/client_test.dart @@ -516,6 +516,9 @@ void main() { }); setUp(() async { + when(() => persistence.updateLastSyncAt(any())) + .thenAnswer((_) => Future.value()); + when(persistence.getLastSyncAt).thenAnswer((_) async => null); client = StreamChatClient(apiKey, chatApi: api, ws: ws) ..chatPersistenceClient = persistence; await client.connectUser(user, token); @@ -532,9 +535,12 @@ void main() { test( '''should update persistence connectionInfo and lastSync when sync succeeds''', () async { + // persistence.updateLastSyncAt might be called + // when connecting the user. + // Resetting the logs so we start counting invocations correctly. + reset(persistence); const cids = ['test-cid-1', 'test-cid-2', 'test-cid-3']; final lastSyncAt = DateTime.now(); - when(() => api.general.sync(cids, lastSyncAt)) .thenAnswer((_) async => SyncResponse() ..events = [ @@ -567,6 +573,10 @@ void main() { test( 'should work fine if persistence contains sync params', () async { + // persistence.updateLastSyncAt might be called + // when connecting the user. + // Resetting the logs so we start counting invocations correctly. + reset(persistence); const cids = ['test-cid-1', 'test-cid-2', 'test-cid-3']; final lastSyncAt = DateTime.now();