syncGroup method
Implementation
Future<void> syncGroup(String groupID) async {
LOG.printInfo(['TABLE_SYNC', groupID, 'manual sync requested']);
if (_runningGroups.contains(groupID)) {
LOG.printWarn(['TABLE_SYNC', groupID, 'ignored', 'already running']);
return;
}
final startedAt = DateTime.now();
final groupConfig = group(groupID);
_runningGroups.add(groupID);
_emitGroup(
groupID,
state.group(groupID).copyWith(
syncing: true,
hasError: false,
errorMessage: '',
),
);
try {
LOG.printInfo([
'TABLE_SYNC',
groupID,
'started',
'tables=${groupConfig.tables.join(',')}',
]);
await TableSyncService(
serviceID: groupConfig.serviceID ?? config.defaultServiceID,
).syncGroup(groupConfig);
final now = DateTime.now();
await AppPreferences.private
.setString(_lastRunKey(groupID), now.toIso8601String());
await _keepVisible(startedAt);
_emitGroup(
groupID,
state.group(groupID).copyWith(
syncing: false,
hasError: false,
errorMessage: '',
lastRun: now,
),
);
LOG.printInfo(['TABLE_SYNC', groupID, 'finished']);
} catch (error) {
await _keepVisible(startedAt);
LOG.printError(['TABLE_SYNC', groupID, 'error', error.toString()]);
_emitGroup(
groupID,
state.group(groupID).copyWith(
syncing: false,
hasError: true,
errorMessage: error.toString(),
),
);
} finally {
_runningGroups.remove(groupID);
}
}