diff --git a/lib/services/location_service.dart b/lib/services/location_service.dart index 78c3dcf36..3979c7b57 100644 --- a/lib/services/location_service.dart +++ b/lib/services/location_service.dart @@ -7,6 +7,7 @@ import "package:logging/logging.dart"; import "package:photos/core/constants.dart"; import "package:photos/core/event_bus.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/file/file.dart"; import "package:photos/models/local_entity_data.dart"; @@ -45,6 +46,8 @@ class LocationService { List allFiles, String query, ) async { + final EnteWatch w = EnteWatch("cities_search")..start(); + w.log('start for files ${allFiles.length} and query $query'); final result = await _computer.compute( getCityResults, param: { @@ -53,6 +56,10 @@ class LocationService { "files": allFiles, }, ); + w.log( + 'end for query: $query on ${allFiles.length} files, found ' + '${result.length} cities', + ); return result; } diff --git a/lib/services/search_service.dart b/lib/services/search_service.dart index e57424017..582001399 100644 --- a/lib/services/search_service.dart +++ b/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 = await LocationService.instance.getFilesInCity(allFiles, query); - for (final entry in results.entries) { + final List 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 (!locationTagNames.contains(entry.key.city)) { + if (!locationTagNames.contains(city.city)) { searchResults.add( GenericSearchResult( ResultType.location, - entry.key.city, - entry.value, + city.city, + results[city]!, ), ); }