浏览代码

Support for surfacing all matching cities (#1718)

Neeraj Gupta 1 年之前
父节点
当前提交
6085aff3e9
共有 2 个文件被更改,包括 19 次插入5 次删除
  1. 7 0
      lib/services/location_service.dart
  2. 12 5
      lib/services/search_service.dart

+ 7 - 0
lib/services/location_service.dart

@@ -7,6 +7,7 @@ import "package:logging/logging.dart";
 import "package:photos/core/constants.dart";
 import "package:photos/core/constants.dart";
 import "package:photos/core/event_bus.dart";
 import "package:photos/core/event_bus.dart";
 import "package:photos/events/location_tag_updated_event.dart";
 import "package:photos/events/location_tag_updated_event.dart";
+import "package:photos/extensions/stop_watch.dart";
 import "package:photos/models/api/entity/type.dart";
 import "package:photos/models/api/entity/type.dart";
 import "package:photos/models/file/file.dart";
 import "package:photos/models/file/file.dart";
 import "package:photos/models/local_entity_data.dart";
 import "package:photos/models/local_entity_data.dart";
@@ -45,6 +46,8 @@ class LocationService {
     List<EnteFile> allFiles,
     List<EnteFile> allFiles,
     String query,
     String query,
   ) async {
   ) async {
+    final EnteWatch w = EnteWatch("cities_search")..start();
+    w.log('start for files ${allFiles.length} and query $query');
     final result = await _computer.compute(
     final result = await _computer.compute(
       getCityResults,
       getCityResults,
       param: {
       param: {
@@ -53,6 +56,10 @@ class LocationService {
         "files": allFiles,
         "files": allFiles,
       },
       },
     );
     );
+    w.log(
+      'end for query: $query  on ${allFiles.length} files, found '
+      '${result.length} cities',
+    );
     return result;
     return result;
   }
   }
 
 

+ 12 - 5
lib/services/search_service.dart

@@ -676,17 +676,24 @@ class SearchService {
         );
         );
       }
       }
     }
     }
-
+    //todo: remove this later, this hack is for interval+external evaluation
+    // for suggestions
+    final allCitiesSearch = query == '__city';
+    if (allCitiesSearch) {
+      query = '';
+    }
     final results =
     final results =
         await LocationService.instance.getFilesInCity(allFiles, query);
         await LocationService.instance.getFilesInCity(allFiles, query);
-    for (final entry in results.entries) {
+    final List<City> sortedByResultCount = results.keys.toList()
+      ..sort((a, b) => results[b]!.length.compareTo(results[a]!.length));
+    for (final city in sortedByResultCount) {
       // If the location tag already exists for a city, don't add it again
       // If the location tag already exists for a city, don't add it again
-      if (!locationTagNames.contains(entry.key.city)) {
+      if (!locationTagNames.contains(city.city)) {
         searchResults.add(
         searchResults.add(
           GenericSearchResult(
           GenericSearchResult(
             ResultType.location,
             ResultType.location,
-            entry.key.city,
-            entry.value,
+            city.city,
+            results[city]!,
           ),
           ),
         );
         );
       }
       }