From 9d3caaa5d54fd9ebdc23c3d3e1fde3cff9a38269 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Tue, 17 Jun 2025 15:45:13 +0530 Subject: [PATCH] Use remoteDB to get files within duration --- mobile/lib/db/files_db.dart | 33 ------------------- mobile/lib/db/remote/db.dart | 2 +- .../lib/db/remote/table/collection_files.dart | 18 ++++++++++ .../lib/services/memories_cache_service.dart | 4 ++- .../services/remote/assets/remote_cache.dart | 21 ++++++++++++ mobile/lib/services/search_service.dart | 14 ++++---- 6 files changed, 50 insertions(+), 42 deletions(-) diff --git a/mobile/lib/db/files_db.dart b/mobile/lib/db/files_db.dart index 863dfb6fb3..f1c8b32ce2 100644 --- a/mobile/lib/db/files_db.dart +++ b/mobile/lib/db/files_db.dart @@ -730,39 +730,6 @@ class FilesDB with SqlDbBase { return files; } - Future> getFilesCreatedWithinDurations( - List> durations, - Set ignoredCollectionIDs, { - int? visibility, - String order = 'ASC', - }) async { - if (durations.isEmpty) { - return []; - } - final db = await instance.sqliteAsyncDB; - String whereClause = durations - .map( - (duration) => - "($columnCreationTime >= ${duration[0]} AND $columnCreationTime < ${duration[1]})", - ) - .join(" OR "); - - whereClause = "( $whereClause )"; - if (visibility != null) { - whereClause += ' AND $columnMMdVisibility = $visibility'; - } - final query = - 'SELECT * FROM $filesTable WHERE $whereClause ORDER BY $columnCreationTime $order'; - final results = await db.getAll( - query, - ); - final files = convertToFiles(results); - return applyDBFilters( - files, - DBFilterOptions(ignoredCollectionIDs: ignoredCollectionIDs), - ); - } - // Files which user added to a collection manually but they are not // uploaded yet or files belonging to a collection which is marked for backup Future> getFilesPendingForUpload() async { diff --git a/mobile/lib/db/remote/db.dart b/mobile/lib/db/remote/db.dart index 02efa730f4..994c7af5fb 100644 --- a/mobile/lib/db/remote/db.dart +++ b/mobile/lib/db/remote/db.dart @@ -30,7 +30,7 @@ class RemoteDB with SqlDbBase { final db = SqliteDatabase(path: path); await migrate(db, RemoteDBMigration.migrationScripts, onForeignKey: true); _sqliteDB = db; - devLog("RemoteDB init complete $path"); + debugPrint("RemoteDB init complete $path"); } SqliteDatabase get sqliteDB => _sqliteDB; diff --git a/mobile/lib/db/remote/table/collection_files.dart b/mobile/lib/db/remote/table/collection_files.dart index c593aeab52..a7e40ec9a8 100644 --- a/mobile/lib/db/remote/table/collection_files.dart +++ b/mobile/lib/db/remote/table/collection_files.dart @@ -106,6 +106,24 @@ extension CollectionFiles on RemoteDB { return null; } + Future> getFilesCreatedWithinDurations( + List> durations, + Set ignoredCollectionIDs, { + String order = 'DESC', + }) async { + final List result = []; + for (final duration in durations) { + final start = duration[0]; + final end = duration[1]; + final rows = await sqliteDB.getAll( + "SELECT * FROM collection_files join files on files.id=collection_files.file_id WHERE files.creation_time BETWEEN ? AND ? AND collection_id NOT IN (${ignoredCollectionIDs.join(",")}) ORDER BY creation_time $order", + [start, end], + ); + result.addAll(rows.map((row) => CollectionFileEntry.fromMap(row))); + } + return result; + } + Future deleteFiles(List fileIDs) async { if (fileIDs.isEmpty) return; final stopwatch = Stopwatch()..start(); diff --git a/mobile/lib/services/memories_cache_service.dart b/mobile/lib/services/memories_cache_service.dart index 37f5eebf03..fc73777abc 100644 --- a/mobile/lib/services/memories_cache_service.dart +++ b/mobile/lib/services/memories_cache_service.dart @@ -20,6 +20,7 @@ import "package:photos/models/memories/people_memory.dart"; import "package:photos/models/memories/smart_memory.dart"; import "package:photos/models/memories/smart_memory_constants.dart"; import "package:photos/service_locator.dart"; +import "package:photos/services/collections_service.dart"; import "package:photos/services/language_service.dart"; import "package:photos/services/machine_learning/face_ml/person/person_service.dart"; import "package:photos/services/notification_service.dart"; @@ -224,7 +225,8 @@ class MemoriesCacheService { } final minimalFiles = await FilesDB.instance.getFilesFromIDs( minimalFileIDs.toList(), - collectionsToIgnore: SearchService.instance.ignoreCollections(), + collectionsToIgnore: + CollectionsService.instance.getHiddenCollectionIds(), ); final minimalFileIdsToFile = {}; for (final file in minimalFiles) { diff --git a/mobile/lib/services/remote/assets/remote_cache.dart b/mobile/lib/services/remote/assets/remote_cache.dart index ce4e7a03a8..021604b361 100644 --- a/mobile/lib/services/remote/assets/remote_cache.dart +++ b/mobile/lib/services/remote/assets/remote_cache.dart @@ -91,4 +91,25 @@ class RemoteCache { } return EnteFile.fromRemoteAsset(asset, cf); } + + Future> getFilesCreatedWithinDurations( + List> durations, + Set ignoredCollectionIDs, { + String order = 'DESC', + }) async { + final collectionFileEntries = await remoteDB.getFilesCreatedWithinDurations( + durations, + ignoredCollectionIDs, + order: order, + ); + final _ = isLoaded ?? await _load(); + final List files = []; + for (final entry in collectionFileEntries) { + final asset = remoteAssets[entry.fileID]; + if (asset != null) { + files.add(EnteFile.fromRemoteAsset(asset, entry)); + } + } + return files; + } } diff --git a/mobile/lib/services/search_service.dart b/mobile/lib/services/search_service.dart index 633ec538ae..8e29b9fc21 100644 --- a/mobile/lib/services/search_service.dart +++ b/mobile/lib/services/search_service.dart @@ -309,7 +309,7 @@ class SearchService { final List searchResults = []; for (var month in _getMatchingMonths(context, query)) { final matchedFiles = - await FilesDB.instance.getFilesCreatedWithinDurations( + await remoteCache.getFilesCreatedWithinDurations( _getDurationsOfMonthInEveryYear(month.monthNumber), ignoreCollections(), order: 'DESC', @@ -340,7 +340,7 @@ class SearchService { final months = getMonthData(context)..shuffle(); for (MonthData month in months) { final matchedFiles = - await FilesDB.instance.getFilesCreatedWithinDurations( + await remoteCache.getFilesCreatedWithinDurations( _getDurationsOfMonthInEveryYear(month.monthNumber), ignoreCollections(), order: 'DESC', @@ -376,7 +376,7 @@ class SearchService { for (var holiday in holidays) { if (holiday.name.toLowerCase().contains(query.toLowerCase())) { final matchedFiles = - await FilesDB.instance.getFilesCreatedWithinDurations( + await remoteCache.getFilesCreatedWithinDurations( _getDurationsForCalendarDateInEveryYear(holiday.day, holiday.month), ignoreCollections(), order: 'DESC', @@ -408,7 +408,7 @@ class SearchService { final holidays = getHolidays(context)..shuffle(); for (var holiday in holidays) { final matchedFiles = - await FilesDB.instance.getFilesCreatedWithinDurations( + await remoteCache.getFilesCreatedWithinDurations( _getDurationsForCalendarDateInEveryYear(holiday.day, holiday.month), ignoreCollections(), order: 'DESC', @@ -1164,7 +1164,7 @@ class SearchService { final int month = potentialDate.item2.monthNumber; final int? year = potentialDate.item3; // nullable final matchedFiles = - await FilesDB.instance.getFilesCreatedWithinDurations( + await remoteCache.getFilesCreatedWithinDurations( _getDurationsForCalendarDateInEveryYear(day, month, year: year), ignoreCollections(), order: 'DESC', @@ -1347,7 +1347,7 @@ class SearchService { endOfDay.microsecondsSinceEpoch, ]; - final matchedFiles = await FilesDB.instance.getFilesCreatedWithinDurations( + final matchedFiles = await remoteCache.getFilesCreatedWithinDurations( [durationOfDay], ignoreCollections(), order: 'DESC', @@ -1564,7 +1564,7 @@ class SearchService { } Future> _getFilesInYear(List durationOfYear) async { - return await FilesDB.instance.getFilesCreatedWithinDurations( + return await remoteCache.getFilesCreatedWithinDurations( [durationOfYear], ignoreCollections(), order: "DESC",