mirror of
https://github.com/immich-app/immich.git
synced 2024-12-25 10:43:13 +02:00
8708867c1c
* feature(mobile): sync assets, albums & users to local database on device * try to fix tests * move DB sync operations to new SyncService * clear db on user logout * fix reason for endless loading timeline * fix error when deleting album * fix thumbnail of device albums * add a few comments * fix Hive box not open in album service when loading local assets * adjust tests to int IDs * fix bug: show all albums when Recent is selected * update generated api * reworked Recents album isAll handling * guard against wrongly interleaved sync operations * fix: timeline asset ordering (sort asset state by created at) * fix: sort assets in albums by created at
17 lines
537 B
Dart
17 lines
537 B
Dart
import 'dart:async';
|
|
|
|
/// Async mutex to guarantee actions are performed sequentially and do not interleave
|
|
class AsyncMutex {
|
|
Future _running = Future.value(null);
|
|
|
|
/// Execute [operation] exclusively, after any currently running operations.
|
|
/// Returns a [Future] with the result of the [operation].
|
|
Future<T> run<T>(Future<T> Function() operation) {
|
|
final completer = Completer<T>();
|
|
_running.whenComplete(() {
|
|
completer.complete(Future<T>.sync(operation));
|
|
});
|
|
return _running = completer.future;
|
|
}
|
|
}
|