From 4a743be322daae0ff8d68911c3815121395ed53c Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Wed, 23 Jul 2025 16:41:55 +0530 Subject: [PATCH] [mob]Handle duplicate fileID during addOrCopy --- .../lib/services/collections_service.dart | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/mobile/apps/photos/lib/services/collections_service.dart b/mobile/apps/photos/lib/services/collections_service.dart index a8c1986f1b..86ed68924b 100644 --- a/mobile/apps/photos/lib/services/collections_service.dart +++ b/mobile/apps/photos/lib/services/collections_service.dart @@ -1648,17 +1648,27 @@ class CollectionsService { ); final List filesToCopy = []; final List filesToAdd = []; + final Set seenForAdd = {}; + final Set seenForCopy = {}; + for (final EnteFile file in othersFile) { - if (hashToUserFile.containsKey(file.hash ?? '')) { - final userFile = hashToUserFile[file.hash]!; - if (userFile.fileType == file.fileType) { - filesToAdd.add(userFile); - } else { - filesToCopy.add(file); - } - } else { - filesToCopy.add(file); + final userFile = hashToUserFile[file.hash ?? '']; + final bool shouldAdd = + userFile != null && userFile.fileType == file.fileType; + final targetList = shouldAdd ? filesToAdd : filesToCopy; + final seenSet = shouldAdd ? seenForAdd : seenForCopy; + final fileToProcess = shouldAdd ? userFile : file; + final uploadID = fileToProcess.uploadedFileID; + + if (seenSet.contains(uploadID)) { + final action = shouldAdd ? "adding" : "copying"; + _logger.warning( + "skip $action file $uploadID as it is already ${action}ed", + ); + continue; } + targetList.add(fileToProcess); + seenSet.add(uploadID!); } return (filesToAdd, filesToCopy); }