syncNow method

Future<void> syncNow()

Implementation

Future<void> syncNow() async {
  if (_isSyncing || !_connectivityMonitor.isOnline) return;

  _isSyncing = true;
  _updateStatus(SyncStatus.syncing);

  try {
    final requests = await _queue.getPendingRequests();

    if (requests.isEmpty) {
      _updateStatus(_connectivityMonitor.isOnline ? SyncStatus.idle : SyncStatus.offline);
      _isSyncing = false;
      return;
    }

    for (var request in requests) {
      bool success = await _processRequest(request);

      if (success) {
        await _queue.remove(request.id);
      } else {
        // Keep request in queue for future retries
      }
    }

    final remaining = await _queue.getPendingRequests();
    if (remaining.isEmpty) {
      _updateStatus(SyncStatus.success);
      // eventually go back to idle
      Future.delayed(const Duration(seconds: 3), () {
        if (_currentStatus == SyncStatus.success) {
          _updateStatus(SyncStatus.idle);
        }
      });
    } else {
      _updateStatus(SyncStatus.failed);
    }
  } catch (e) {
    _updateStatus(SyncStatus.failed);
  } finally {
    _isSyncing = false;
  }
}