immich/mobile/lib/domain/utils/background_sync.dart
shenlong-tanwen 04e6e5641e misc fixes
2025-04-16 23:39:03 +05:30

38 lines
938 B
Dart

// ignore_for_file: avoid-passing-async-when-sync-expected
import 'dart:async';
import 'package:immich_mobile/providers/infrastructure/sync_stream.provider.dart';
import 'package:immich_mobile/utils/isolate.dart';
import 'package:worker_manager/worker_manager.dart';
class BackgroundSyncManager {
Cancelable<void>? _userSyncTask;
BackgroundSyncManager();
Future<void> cancel() {
final futures = <Future>[];
if (_userSyncTask != null) {
futures.add(_userSyncTask!.future);
}
_userSyncTask?.cancel();
_userSyncTask = null;
return Future.wait(futures);
}
Future<void> syncUsers() {
if (_userSyncTask != null) {
return _userSyncTask!.future;
}
_userSyncTask = runInIsolateGentle(
computation: (ref) => ref.read(syncStreamServiceProvider).syncUsers(),
);
_userSyncTask!.whenComplete(() {
_userSyncTask = null;
});
return _userSyncTask!.future;
}
}