From 74898214349a830e9d1de5cf28328ff5dd024cdc Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Wed, 30 Apr 2025 15:50:31 +0530 Subject: [PATCH] Refactor --- mobile/lib/db/files_db.dart | 13 +++---------- mobile/lib/db/remote/table/collection_files.dart | 12 ++++++++++++ mobile/lib/services/sync/trash_sync_service.dart | 3 +++ mobile/lib/utils/delete_file_util.dart | 10 +++------- 4 files changed, 21 insertions(+), 17 deletions(-) diff --git a/mobile/lib/db/files_db.dart b/mobile/lib/db/files_db.dart index 17ca03b898..337c09c5c5 100644 --- a/mobile/lib/db/files_db.dart +++ b/mobile/lib/db/files_db.dart @@ -825,6 +825,7 @@ class FilesDB with SqlDbBase { return files; } + // todo:rewrite (upload related) Future> getUploadedFileIDsToBeUpdated(int ownerID) async { final db = await instance.sqliteAsyncDB; final rows = await db.getAll( @@ -841,6 +842,7 @@ class FilesDB with SqlDbBase { return uploadedFileIDs; } + // todo:rewrite (upload related) Future> getFilesInAllCollection( int uploadedFileID, int userID, @@ -1102,15 +1104,6 @@ class FilesDB with SqlDbBase { ); } - Future deleteMultipleUploadedFiles(List uploadedFileIDs) async { - final db = await instance.sqliteAsyncDB; - final inParam = uploadedFileIDs.join(','); - - await db.execute( - 'DELETE FROM $filesTable WHERE $columnUploadedFileID IN ($inParam)', - ); - } - // todo: neeraj (rw, upload flow) Future deleteMultipleByGeneratedIDs(List generatedIDs) async { if (generatedIDs.isEmpty) { @@ -1145,7 +1138,7 @@ class FilesDB with SqlDbBase { } } - Future deleteLocalFiles(List localIDs) async { + Future markLocalIDAsNull(List localIDs) async { final inParam = localIDs.map((id) => "'$id'").join(','); final db = await instance.sqliteAsyncDB; await db.execute( diff --git a/mobile/lib/db/remote/table/collection_files.dart b/mobile/lib/db/remote/table/collection_files.dart index 69022bb28d..90cf3f639a 100644 --- a/mobile/lib/db/remote/table/collection_files.dart +++ b/mobile/lib/db/remote/table/collection_files.dart @@ -1,3 +1,4 @@ +import "package:flutter/foundation.dart"; import "package:photos/db/remote/db.dart"; import "package:photos/db/remote/schema.dart"; import "package:photos/extensions/stop_watch.dart"; @@ -105,6 +106,17 @@ extension CollectionFiles on RemoteDB { return null; } + Future deleteFiles(List fileIDs) async { + if (fileIDs.isEmpty) return; + final stopwatch = Stopwatch()..start(); + await sqliteDB.execute( + "DELETE FROM collection_files WHERE file_id IN (${fileIDs.join(",")})", + ); + debugPrint( + '$runtimeType deleteFiles complete in ${stopwatch.elapsed.inMilliseconds}ms for ${fileIDs.length}', + ); + } + Future> getCollectionIDToMaxCreationTime() async { final enteWatch = EnteWatch("getCollectionIDToMaxCreationTime")..start(); final rows = await sqliteDB.getAll( diff --git a/mobile/lib/services/sync/trash_sync_service.dart b/mobile/lib/services/sync/trash_sync_service.dart index 53c94f16c7..026a16e197 100644 --- a/mobile/lib/services/sync/trash_sync_service.dart +++ b/mobile/lib/services/sync/trash_sync_service.dart @@ -7,6 +7,7 @@ import "package:ente_crypto/ente_crypto.dart"; import 'package:logging/logging.dart'; import 'package:photos/core/constants.dart'; import 'package:photos/core/event_bus.dart'; +import "package:photos/db/remote/table/collection_files.dart"; import 'package:photos/db/trash_db.dart'; import 'package:photos/events/collection_updated_event.dart'; import 'package:photos/events/force_reload_trash_page_event.dart'; @@ -17,6 +18,7 @@ import 'package:photos/models/file/file.dart'; import 'package:photos/models/file/trash_file.dart'; import 'package:photos/models/ignored_file.dart'; import "package:photos/models/metadata/file_magic.dart"; +import "package:photos/service_locator.dart"; import 'package:photos/services/ignored_files_service.dart'; import "package:photos/utils/file_key.dart"; import 'package:shared_preferences/shared_preferences.dart'; @@ -123,6 +125,7 @@ class TrashSyncService { } await _trashFiles(requestData); } + await remoteDB.deleteFiles(includedFileIDs.toList()); } Future getTrashFilesDiff(int sinceTime) async { diff --git a/mobile/lib/utils/delete_file_util.dart b/mobile/lib/utils/delete_file_util.dart index 5f32566753..05376123b7 100644 --- a/mobile/lib/utils/delete_file_util.dart +++ b/mobile/lib/utils/delete_file_util.dart @@ -99,10 +99,7 @@ Future deleteFilesFromEverywhere( } if (uploadedFilesToBeTrashed.isNotEmpty) { try { - final fileIDs = - uploadedFilesToBeTrashed.map((item) => item.fileID).toList(); await trashSyncService.trashFilesOnServer(uploadedFilesToBeTrashed); - await FilesDB.instance.deleteMultipleUploadedFiles(fileIDs); } catch (e) { _logger.severe(e); await showGenericErrorDialog(context: context, error: e); @@ -164,7 +161,6 @@ Future deleteFilesFromRemoteOnly( } try { await trashSyncService.trashFilesOnServer(trashRequests); - await FilesDB.instance.deleteMultipleUploadedFiles(uploadedFileIDs); } catch (e, s) { _logger.severe("Failed to delete files from remote", e, s); await showGenericErrorDialog(context: context, error: e); @@ -367,7 +363,7 @@ Future deleteLocalFiles( if (deletedIDs.isNotEmpty) { final deletedFiles = await FilesDB.instance.getLocalFiles(deletedIDs); - await FilesDB.instance.deleteLocalFiles(deletedIDs); + await FilesDB.instance.markLocalIDAsNull(deletedIDs); _logger.info(deletedFiles.length.toString() + " files deleted locally"); Bus.instance.fire( LocalPhotosUpdatedEvent(deletedFiles, source: "deleteLocal"), @@ -445,7 +441,7 @@ Future deleteLocalFilesAfterRemovingAlreadyDeletedIDs( if (deletedIDs.isNotEmpty) { final deletedFiles = await FilesDB.instance.getLocalFiles(deletedIDs); - await FilesDB.instance.deleteLocalFiles(deletedIDs); + await FilesDB.instance.markLocalIDAsNull(deletedIDs); _logger.info(deletedFiles.length.toString() + " files deleted locally"); Bus.instance.fire( LocalPhotosUpdatedEvent(deletedFiles, source: "deleteLocal"), @@ -520,7 +516,7 @@ Future retryFreeUpSpaceAfterRemovingAssetsNonExistingInDisk( if (deletedIDs.isNotEmpty) { final deletedFiles = await FilesDB.instance.getLocalFiles(deletedIDs); - await FilesDB.instance.deleteLocalFiles(deletedIDs); + await FilesDB.instance.markLocalIDAsNull(deletedIDs); _logger.info(deletedFiles.length.toString() + " files deleted locally"); Bus.instance.fire( LocalPhotosUpdatedEvent(deletedFiles, source: "deleteLocal"),