syncNow method
One full pass: collect dirty files, batch them, upload, CAS-mark.
Implementation
Future<void> syncNow(String reason) async {
if (_disposed) return;
if (!_isEnabled()) return;
if (_running) {
_rerun = true;
return;
}
_running = true;
var shouldRerun = false;
try {
final outcome = await _runPass(reason);
if (outcome == _PassOutcome.success) {
successes++;
_backoff = baseBackoff;
if (_rerun) {
_rerun = false;
shouldRerun = true;
}
} else if (outcome == _PassOutcome.transientFailure) {
failures++;
_scheduleRetry();
} else if (outcome == _PassOutcome.permanentFailure) {
permanentFailures++;
}
} catch (e) {
failures++;
debugPrint('[EmbedCache] sync pass threw ($reason): $e');
_scheduleRetry();
} finally {
_running = false;
}
if (shouldRerun && !_disposed) unawaited(syncNow('rerun'));
}