Files
peyawallet/lib/services/sync_scheduler.dart
Codex Bot c18df999c8
build / Build Linux wallet (push) Failing after 1m44s
build / Build Windows wallet (push) Has been cancelled
Add burst sync and 10s auto sync option
2026-04-19 19:35:52 +02:00

54 lines
1.0 KiB
Dart

import 'dart:async';
class SyncScheduler {
SyncScheduler({required Future<void> Function() onSync}) : _onSync = onSync;
final Future<void> Function() _onSync;
Timer? _timer;
bool _enabled = false;
Duration _interval = const Duration(minutes: 1);
bool _running = false;
void configure({required bool enabled, required Duration interval}) {
_enabled = enabled;
_interval = interval;
_restart();
}
void _restart() {
_timer?.cancel();
if (!_enabled) {
return;
}
_timer = Timer.periodic(_interval, (_) => triggerSync());
}
Future<void> triggerSync() async {
if (_running) {
return;
}
_running = true;
try {
await _onSync();
} finally {
_running = false;
}
}
Future<void> burstSync({
int count = 4,
Duration interval = const Duration(seconds: 2),
}) async {
for (var i = 0; i < count; i++) {
await triggerSync();
if (i + 1 < count) {
await Future.delayed(interval);
}
}
}
void dispose() {
_timer?.cancel();
}
}