syncGroup method

Future<void> syncGroup(
  1. String groupID
)

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);
  }
}