Skip to content

Commit 97db1fc

Browse files
committed
Fix initial hasSynced state
1 parent 0da750c commit 97db1fc

File tree

1 file changed

+26
-39
lines changed

1 file changed

+26
-39
lines changed

packages/powersync_core/lib/src/database/powersync_db_mixin.dart

Lines changed: 26 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import 'dart:async';
2-
import 'dart:convert';
32

43
import 'package:logging/logging.dart';
54
import 'package:meta/meta.dart';
@@ -122,52 +121,40 @@ mixin PowerSyncDatabaseMixin implements SqliteConnection {
122121

123122
Future<void> _updateHasSynced() async {
124123
// Query the database to see if any data has been synced.
125-
final result = await database.get('''
126-
SELECT json_group_array(
127-
json_object('prio', priority, 'last_sync', last_synced_at)
128-
) AS r FROM ps_sync_state ORDER BY priority
129-
''');
130-
final value = result['r'] as String?;
131-
final hasData = value != null;
124+
final result = await database.getAll(
125+
'SELECT priority, last_synced_at FROM ps_sync_state ORDER BY priority;',
126+
);
127+
var hasSynced = false;
128+
DateTime? lastCompleteSync;
129+
final priorityStatus = <SyncPriorityStatus>[];
132130

133131
DateTime parseDateTime(String sql) {
134132
return DateTime.parse('${sql}Z').toLocal();
135133
}
136134

137-
if (hasData) {
138-
DateTime? lastCompleteSync;
139-
final priorityStatus = <SyncPriorityStatus>[];
140-
var hasSynced = false;
141-
142-
if (value.startsWith('[')) {
143-
for (final entry in jsonDecode(value) as List) {
144-
final priority = entry['prio'] as int;
145-
final lastSyncedAt = parseDateTime(entry['last_sync'] as String);
146-
147-
if (priority == -1) {
148-
hasSynced = true;
149-
lastCompleteSync = lastSyncedAt;
150-
} else {
151-
priorityStatus.add((
152-
hasSynced: true,
153-
lastSyncedAt: lastSyncedAt,
154-
priority: BucketPriority(priority)
155-
));
156-
}
157-
}
158-
} else {
135+
for (final row in result) {
136+
final priority = row.columnAt(0) as int;
137+
final lastSyncedAt = parseDateTime(row.columnAt(1) as String);
138+
139+
if (priority == -1) {
159140
hasSynced = true;
160-
lastCompleteSync = parseDateTime(value);
141+
lastCompleteSync = lastSyncedAt;
142+
} else {
143+
priorityStatus.add((
144+
hasSynced: true,
145+
lastSyncedAt: lastSyncedAt,
146+
priority: BucketPriority(priority)
147+
));
161148
}
149+
}
162150

163-
if (hasSynced != currentStatus.hasSynced) {
164-
final status = SyncStatus(
165-
hasSynced: hasSynced,
166-
lastSyncedAt: lastCompleteSync,
167-
statusInPriority: priorityStatus,
168-
);
169-
setStatus(status);
170-
}
151+
if (hasSynced != currentStatus.hasSynced) {
152+
final status = SyncStatus(
153+
hasSynced: hasSynced,
154+
lastSyncedAt: lastCompleteSync,
155+
statusInPriority: priorityStatus,
156+
);
157+
setStatus(status);
171158
}
172159
}
173160

0 commit comments

Comments
 (0)