|
1 | 1 | import 'dart:async'; |
2 | | -import 'dart:convert'; |
3 | 2 |
|
4 | 3 | import 'package:logging/logging.dart'; |
5 | 4 | import 'package:meta/meta.dart'; |
@@ -122,52 +121,40 @@ mixin PowerSyncDatabaseMixin implements SqliteConnection { |
122 | 121 |
|
123 | 122 | Future<void> _updateHasSynced() async { |
124 | 123 | // 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>[]; |
132 | 130 |
|
133 | 131 | DateTime parseDateTime(String sql) { |
134 | 132 | return DateTime.parse('${sql}Z').toLocal(); |
135 | 133 | } |
136 | 134 |
|
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) { |
159 | 140 | 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 | + )); |
161 | 148 | } |
| 149 | + } |
162 | 150 |
|
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); |
171 | 158 | } |
172 | 159 | } |
173 | 160 |
|
|
0 commit comments