Browse Source

Subscribe to DB updates only when app is in foreground

vishnukvmd 1 year ago
parent
commit
f24faa0404
2 changed files with 14 additions and 10 deletions
  1. 3 1
      lib/main.dart
  2. 11 9
      lib/services/semantic_search/semantic_search_service.dart

+ 3 - 1
lib/main.dart

@@ -193,7 +193,9 @@ Future<void> _init(bool isBackground, {String via = ''}) async {
     });
     });
   }
   }
   unawaited(FeatureFlagService.instance.init());
   unawaited(FeatureFlagService.instance.init());
-  unawaited(SemanticSearchService.instance.init());
+  unawaited(
+    SemanticSearchService.instance.init(isAppInForeground: !isBackground),
+  );
   // Can not including existing tf/ml binaries as they are not being built
   // Can not including existing tf/ml binaries as they are not being built
   // from source.
   // from source.
   // See https://gitlab.com/fdroid/fdroiddata/-/merge_requests/12671#note_1294346819
   // See https://gitlab.com/fdroid/fdroiddata/-/merge_requests/12671#note_1294346819

+ 11 - 9
lib/services/semantic_search/semantic_search_service.dart

@@ -48,7 +48,7 @@ class SemanticSearchService {
 
 
   get hasInitialized => _hasInitialized;
   get hasInitialized => _hasInitialized;
 
 
-  Future<void> init() async {
+  Future<void> init({bool isAppInForeground = true}) async {
     if (!LocalSettings.instance.hasEnabledMagicSearch()) {
     if (!LocalSettings.instance.hasEnabledMagicSearch()) {
       return;
       return;
     }
     }
@@ -59,7 +59,7 @@ class SemanticSearchService {
     _hasInitialized = true;
     _hasInitialized = true;
     await EmbeddingsDB.instance.init();
     await EmbeddingsDB.instance.init();
     await EmbeddingStore.instance.init();
     await EmbeddingStore.instance.init();
-    await _setupCachedEmbeddings();
+    await _setupCachedEmbeddings(isAppInForeground);
     Bus.instance.on<DiffSyncCompleteEvent>().listen((event) {
     Bus.instance.on<DiffSyncCompleteEvent>().listen((event) {
       // Diff sync is complete, we can now pull embeddings from remote
       // Diff sync is complete, we can now pull embeddings from remote
       unawaited(sync());
       unawaited(sync());
@@ -137,7 +137,7 @@ class SemanticSearchService {
     _logger.info("Indexes cleared for $kCurrentModel");
     _logger.info("Indexes cleared for $kCurrentModel");
   }
   }
 
 
-  Future<void> _setupCachedEmbeddings() async {
+  Future<void> _setupCachedEmbeddings(bool shouldListenForUpdates) async {
     _logger.info("Setting up cached embeddings");
     _logger.info("Setting up cached embeddings");
     final startTime = DateTime.now();
     final startTime = DateTime.now();
     final cachedEmbeddings = await EmbeddingsDB.instance.getAll(kCurrentModel);
     final cachedEmbeddings = await EmbeddingsDB.instance.getAll(kCurrentModel);
@@ -147,12 +147,14 @@ class SemanticSearchService {
     );
     );
     _cachedEmbeddings.addAll(cachedEmbeddings);
     _cachedEmbeddings.addAll(cachedEmbeddings);
     _logger.info("Cached embeddings: " + _cachedEmbeddings.length.toString());
     _logger.info("Cached embeddings: " + _cachedEmbeddings.length.toString());
-    EmbeddingsDB.instance.getStream(kCurrentModel).listen((embeddings) {
-      _logger.info("Updated embeddings: " + embeddings.length.toString());
-      _cachedEmbeddings.clear();
-      _cachedEmbeddings.addAll(embeddings);
-      Bus.instance.fire(EmbeddingUpdatedEvent());
-    });
+    if (shouldListenForUpdates) {
+      EmbeddingsDB.instance.getStream(kCurrentModel).listen((embeddings) {
+        _logger.info("Updated embeddings: " + embeddings.length.toString());
+        _cachedEmbeddings.clear();
+        _cachedEmbeddings.addAll(embeddings);
+        Bus.instance.fire(EmbeddingUpdatedEvent());
+      });
+    }
   }
   }
 
 
   Future<void> _backFill() async {
   Future<void> _backFill() async {