mirror of
https://github.com/immich-app/immich.git
synced 2024-11-15 18:08:48 -07:00
15c04d3056
* refactor(mobile): DB repository for asset, backup, sync service * review feedback * fix bug found by Alex --------- Co-authored-by: Alex <alex.tran1502@gmail.com>
29 lines
816 B
Dart
29 lines
816 B
Dart
import 'dart:async';
|
|
|
|
import 'package:immich_mobile/interfaces/database.interface.dart';
|
|
import 'package:isar/isar.dart';
|
|
|
|
/// copied from Isar; needed to check if an async transaction is already active
|
|
const Symbol _zoneTxn = #zoneTxn;
|
|
|
|
abstract class DatabaseRepository implements IDatabaseRepository {
|
|
final Isar db;
|
|
DatabaseRepository(this.db);
|
|
|
|
bool get inTxn => Zone.current[_zoneTxn] != null;
|
|
|
|
Future<T> txn<T>(Future<T> Function() callback) =>
|
|
inTxn ? callback() : transaction(callback);
|
|
|
|
@override
|
|
Future<T> transaction<T>(Future<T> Function() callback) =>
|
|
db.writeTxn(callback);
|
|
}
|
|
|
|
extension Asd<T> on QueryBuilder<T, dynamic, dynamic> {
|
|
QueryBuilder<T, T, O> noOp<O>() {
|
|
// ignore: invalid_use_of_protected_member
|
|
return QueryBuilder.apply(this, (query) => query);
|
|
}
|
|
}
|