ente/lib/db/embeddings_db.dart

68 lines
1.9 KiB
Dart
Raw Normal View History

2024-01-04 15:20:18 +00:00
import "dart:io";
2024-01-04 14:55:16 +00:00
import "package:isar/isar.dart";
import 'package:path_provider/path_provider.dart';
2024-01-05 11:21:54 +00:00
import "package:photos/core/event_bus.dart";
import "package:photos/events/embedding_updated_event.dart";
2024-01-04 14:55:16 +00:00
import "package:photos/models/embedding.dart";
class EmbeddingsDB {
late final Isar _isar;
EmbeddingsDB._privateConstructor();
static final EmbeddingsDB instance = EmbeddingsDB._privateConstructor();
Future<void> init() async {
final dir = await getApplicationDocumentsDirectory();
_isar = await Isar.open(
[EmbeddingSchema],
directory: dir.path,
);
2024-01-05 19:42:15 +00:00
await _clearDeprecatedStore(dir);
2024-01-04 14:55:16 +00:00
}
Future<void> clearTable() async {
await _isar.clear();
}
Future<List<Embedding>> getAll(Model model) async {
return _isar.embeddings.filter().modelEqualTo(model).findAll();
}
2024-01-06 13:42:15 +00:00
Future<int> put(Embedding embedding) {
2024-01-04 14:55:16 +00:00
return _isar.writeTxn(() async {
2024-01-06 13:42:15 +00:00
final id = await _isar.embeddings.put(embedding);
2024-01-05 11:21:54 +00:00
Bus.instance.fire(EmbeddingUpdatedEvent());
2024-01-06 13:42:15 +00:00
return id;
2024-01-04 14:55:16 +00:00
});
}
Future<void> putMany(List<Embedding> embeddings) {
return _isar.writeTxn(() async {
await _isar.embeddings.putAll(embeddings);
2024-01-05 11:21:54 +00:00
Bus.instance.fire(EmbeddingUpdatedEvent());
2024-01-04 14:55:16 +00:00
});
}
Future<List<Embedding>> getUnsyncedEmbeddings() async {
return await _isar.embeddings.filter().updationTimeEqualTo(null).findAll();
}
Future<void> deleteAllForModel(Model model) async {
await _isar.writeTxn(() async {
final embeddings =
await _isar.embeddings.filter().modelEqualTo(model).findAll();
await _isar.embeddings.deleteAll(embeddings.map((e) => e.id).toList());
2024-01-05 19:45:49 +00:00
Bus.instance.fire(EmbeddingUpdatedEvent());
2024-01-04 14:55:16 +00:00
});
}
2024-01-04 15:20:18 +00:00
Future<void> _clearDeprecatedStore(Directory dir) async {
final deprecatedStore = Directory(dir.path + "/object-box-store");
if (await deprecatedStore.exists()) {
await deprecatedStore.delete(recursive: true);
}
}
2024-01-04 14:55:16 +00:00
}