From dd76317bb01d484fa688b473d594e369c54a06dd Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Thu, 7 Aug 2025 15:45:55 +0530 Subject: [PATCH] Clean up EnteFile --- mobile/apps/photos/lib/db/files_db.dart | 1 - mobile/apps/photos/lib/models/file/file.dart | 15 +++++---------- .../lib/module/upload/service/file_uploader.dart | 6 +++--- .../photos/lib/module/upload/service/media.dart | 2 +- .../module/upload/service/pre_upload_check.dart | 2 +- .../ui/viewer/file/video_widget_media_kit.dart | 2 +- .../lib/ui/viewer/file/video_widget_native.dart | 2 +- .../photos/lib/ui/viewer/file/zoomable_image.dart | 7 +++++-- .../preview_properties_item_widget.dart | 2 +- .../apps/photos/lib/utils/delete_file_util.dart | 8 ++++---- mobile/apps/photos/lib/utils/file_util.dart | 2 +- mobile/apps/photos/lib/utils/thumbnail_util.dart | 2 +- 12 files changed, 24 insertions(+), 27 deletions(-) diff --git a/mobile/apps/photos/lib/db/files_db.dart b/mobile/apps/photos/lib/db/files_db.dart index 170c64c3c0..7e8e65cfa8 100644 --- a/mobile/apps/photos/lib/db/files_db.dart +++ b/mobile/apps/photos/lib/db/files_db.dart @@ -588,7 +588,6 @@ class FilesDB with SqlDbBase { EnteFile _getFileFromRow(Map row) { final file = EnteFile(); file.generatedID = row[columnGeneratedID]; - file.localID = row[columnLocalID]; // file.uploadedFileID = // row[columnUploadedFileID] == -1 ? null : row[columnUploadedFileID]; file.ownerID = row[columnOwnerID]; diff --git a/mobile/apps/photos/lib/models/file/file.dart b/mobile/apps/photos/lib/models/file/file.dart index 9c5d3e06d9..bcc825da8e 100644 --- a/mobile/apps/photos/lib/models/file/file.dart +++ b/mobile/apps/photos/lib/models/file/file.dart @@ -3,7 +3,6 @@ import "dart:core"; import 'package:flutter/foundation.dart'; import 'package:logging/logging.dart'; import 'package:photo_manager/photo_manager.dart'; -import 'package:photos/core/constants.dart'; import "package:photos/models/api/diff/trash_time.dart"; import 'package:photos/models/file/file_type.dart'; import "package:photos/models/file/remote/asset.dart"; @@ -25,8 +24,6 @@ class EnteFile { int? generatedID; int? ownerID; - String? localID; - String? deviceFolder; int? creationTime; int? modificationTime; @@ -34,14 +31,11 @@ class EnteFile { late Location? location; late FileType fileType; - // String? hash; - EnteFile(); static Future fromAsset(String pathName, AssetEntity lAsset) async { final EnteFile file = EnteFile(); file.lAsset = lAsset; - file.localID = lAsset.id; file.deviceFolder = pathName; file.location = Location(latitude: lAsset.latitude, longitude: lAsset.longitude); @@ -54,7 +48,6 @@ class EnteFile { static EnteFile fromAssetSync(AssetEntity asset) { final EnteFile file = EnteFile(); file.lAsset = asset; - file.localID = asset.id; file.deviceFolder = asset.relativePath; file.location = Location(latitude: asset.latitude, longitude: asset.longitude); @@ -82,6 +75,8 @@ class EnteFile { return file; } + String? get localID => lAsset?.id ?? sharedAsset?.id; + int get remoteID { if (rAsset != null) { return rAsset!.id; @@ -159,8 +154,9 @@ class EnteFile { return rAsset != null; } - bool get isSharedMediaToAppSandbox { - return localID != null && localID!.startsWith(sharedMediaIdentifier); + // returns true if the file is only available in the app's sandbox + bool get isInAppMedia { + return sharedAsset != null; } bool get hasLocation { @@ -223,7 +219,6 @@ class EnteFile { ..cf = cf ..generatedID = generatedID ?? this.generatedID ..ownerID = ownerID ?? this.ownerID - ..localID = localID ?? this.localID ..deviceFolder = deviceFolder ?? this.deviceFolder ..creationTime = creationTime ?? this.creationTime ..modificationTime = modificationTime ?? this.modificationTime diff --git a/mobile/apps/photos/lib/module/upload/service/file_uploader.dart b/mobile/apps/photos/lib/module/upload/service/file_uploader.dart index d50f0538d5..ca9381034c 100644 --- a/mobile/apps/photos/lib/module/upload/service/file_uploader.dart +++ b/mobile/apps/photos/lib/module/upload/service/file_uploader.dart @@ -755,7 +755,7 @@ class FileUploader { ); if (uploadMedia.isDeleted) { _logger.info("File found to be deleted"); - remoteFile.localID = null; + remoteFile.lAsset = null; } // await FilesDB.instance.update(remoteFile); } @@ -833,7 +833,7 @@ class FileUploader { // Shared Media should only be cleared when the upload // succeeds. if ((Platform.isIOS && (uploadCompleted || uploadHardFailure)) || - (uploadCompleted && file.isSharedMediaToAppSandbox)) { + (uploadCompleted && file.isInAppMedia)) { await uploadMedia.delete(); } } @@ -857,7 +857,7 @@ class FileUploader { final bool canIgnoreFile = file.localID != null && file.deviceFolder != null && file.title != null && - !file.isSharedMediaToAppSandbox; + !file.isInAppMedia; // If the file is not uploaded yet and either it can not be ignored or the // err is related to live photo media, delete the local entry final bool deleteEntry = diff --git a/mobile/apps/photos/lib/module/upload/service/media.dart b/mobile/apps/photos/lib/module/upload/service/media.dart index c4df6ebb4f..2bb9dcff07 100644 --- a/mobile/apps/photos/lib/module/upload/service/media.dart +++ b/mobile/apps/photos/lib/module/upload/service/media.dart @@ -20,7 +20,7 @@ Logger _logger = Logger("UploadMediaService"); const kMaximumThumbnailCompressionAttempts = 2; Future getUploadMedia(EnteFile file) async { - if (file.isSharedMediaToAppSandbox) { + if (file.isInAppMedia) { return _getUploadMediaFromSharedAsset(file); } return _getUploadMediaFromAsset(file); diff --git a/mobile/apps/photos/lib/module/upload/service/pre_upload_check.dart b/mobile/apps/photos/lib/module/upload/service/pre_upload_check.dart index 8b50ffb43b..0c60eb3f7d 100644 --- a/mobile/apps/photos/lib/module/upload/service/pre_upload_check.dart +++ b/mobile/apps/photos/lib/module/upload/service/pre_upload_check.dart @@ -57,7 +57,7 @@ class PreUploadCheck { ); } final int userID = Configuration.instance.getUserID()!; - final bool isSandBoxFile = fileToUpload.isSharedMediaToAppSandbox; + final bool isSandBoxFile = fileToUpload.isInAppMedia; final remoteIDs = await remoteDB.idsWithSameHashAndType( uploadMedia.hash, userID, diff --git a/mobile/apps/photos/lib/ui/viewer/file/video_widget_media_kit.dart b/mobile/apps/photos/lib/ui/viewer/file/video_widget_media_kit.dart index f186a35b49..fb45f2d7b0 100644 --- a/mobile/apps/photos/lib/ui/viewer/file/video_widget_media_kit.dart +++ b/mobile/apps/photos/lib/ui/viewer/file/video_widget_media_kit.dart @@ -138,7 +138,7 @@ class _VideoWidgetMediaKitState extends State if (widget.file.isRemoteFile) { _loadNetworkVideo(); _setFileSizeIfNull(); - } else if (widget.file.isSharedMediaToAppSandbox) { + } else if (widget.file.isInAppMedia) { final localFile = File(SharedAssetService.getPath(widget.file.localID!)); if (localFile.existsSync()) { _setVideoController(localFile.path); diff --git a/mobile/apps/photos/lib/ui/viewer/file/video_widget_native.dart b/mobile/apps/photos/lib/ui/viewer/file/video_widget_native.dart index 8c79c38874..f4f180f4cc 100644 --- a/mobile/apps/photos/lib/ui/viewer/file/video_widget_native.dart +++ b/mobile/apps/photos/lib/ui/viewer/file/video_widget_native.dart @@ -177,7 +177,7 @@ class _VideoWidgetNativeState extends State if (widget.file.isRemoteFile) { _loadNetworkVideo(update); _setFileSizeIfNull(); - } else if (widget.file.isSharedMediaToAppSandbox) { + } else if (widget.file.isInAppMedia) { final localFile = File(SharedAssetService.getPath(widget.file.localID!)); if (localFile.existsSync()) { _setFilePathForNativePlayer(localFile.path, update); diff --git a/mobile/apps/photos/lib/ui/viewer/file/zoomable_image.dart b/mobile/apps/photos/lib/ui/viewer/file/zoomable_image.dart index 55a12d61ec..ee49b67238 100644 --- a/mobile/apps/photos/lib/ui/viewer/file/zoomable_image.dart +++ b/mobile/apps/photos/lib/ui/viewer/file/zoomable_image.dart @@ -9,6 +9,7 @@ import 'package:logging/logging.dart'; import 'package:photo_view/photo_view.dart'; import 'package:photos/core/constants.dart'; import 'package:photos/core/event_bus.dart'; +import "package:photos/db/remote/table/mapping_table.dart"; import "package:photos/events/file_caption_updated_event.dart"; import "package:photos/events/files_updated_event.dart"; import 'package:photos/events/local_photos_updated_event.dart'; @@ -16,6 +17,7 @@ import "package:photos/events/reset_zoom_of_photo_view_event.dart"; import "package:photos/image/in_memory_image_cache.dart"; import "package:photos/models/file/extensions/file_props.dart"; import 'package:photos/models/file/file.dart'; +import "package:photos/service_locator.dart"; import "package:photos/states/detail_page_state.dart"; import "package:photos/theme/colors.dart"; import "package:photos/theme/ente_theme.dart"; @@ -347,8 +349,9 @@ class _ZoomableImageState extends State { ); } else { _logger.info("File was deleted " + _photo.toString()); - if (_photo.isUploaded) { - _photo.localID = null; + if (_photo.isUploaded && _photo.lAsset != null) { + remoteDB.deleteMappingsForLocalIDs({_photo.lAsset!.id}).ignore(); + _photo.lAsset = null; // FilesDB.instance.update(_photo); _loadNetworkImage(); } else { diff --git a/mobile/apps/photos/lib/ui/viewer/file_details/preview_properties_item_widget.dart b/mobile/apps/photos/lib/ui/viewer/file_details/preview_properties_item_widget.dart index 5149beba0d..b4f7ab4a2d 100644 --- a/mobile/apps/photos/lib/ui/viewer/file_details/preview_properties_item_widget.dart +++ b/mobile/apps/photos/lib/ui/viewer/file_details/preview_properties_item_widget.dart @@ -70,7 +70,7 @@ class _PreviewPropertiesItemWidgetState } if ((widget.file.fileType == FileType.video) && - (widget.file.localID != null || widget.file.durationInSec != 0) && + (widget.file.lAsset != null || widget.file.durationInSec != 0) && data.size != null) { // show bitrate, i.e. size * 8 / duration formatted final result = FFProbeProps.formatBitrate( diff --git a/mobile/apps/photos/lib/utils/delete_file_util.dart b/mobile/apps/photos/lib/utils/delete_file_util.dart index a1fae47a1e..07a55799b3 100644 --- a/mobile/apps/photos/lib/utils/delete_file_util.dart +++ b/mobile/apps/photos/lib/utils/delete_file_util.dart @@ -51,7 +51,7 @@ Future deleteFilesFromEverywhere( if (!(await _localFileExist(file))) { _logger.warning("Already deleted " + file.toString()); alreadyDeletedIDs.add(file.localID!); - } else if (file.isSharedMediaToAppSandbox) { + } else if (file.isInAppMedia) { sharedAssetIDs.add(file.localID!); } else { localAssetIDs.add(file.localID!); @@ -206,7 +206,7 @@ Future deleteFilesOnDeviceOnly( if (!(await _localFileExist(file))) { _logger.warning("Already deleted " + file.toString()); alreadyDeletedIDs.add(file.localID!); - } else if (file.isSharedMediaToAppSandbox) { + } else if (file.isInAppMedia) { localSharedMediaIDs.add(file.localID!); } else { localAssetIDs.add(file.localID!); @@ -240,7 +240,7 @@ Future deleteFilesOnDeviceOnly( if (hasLocalOnlyFiles && localOnlyIDs.contains(file.localID)) { await FilesDB.instance.deleteLocalFile(file); } else { - file.localID = null; + file.lAsset = null; throw Exception("pending rewrite change"); // await FilesDB.instance.update(file); } @@ -675,7 +675,7 @@ Future _recursivelyReduceBatchSizeAndRetryDeletion({ } Future _localFileExist(EnteFile file) async { - if (file.isSharedMediaToAppSandbox) { + if (file.isInAppMedia) { final localFile = await SharedAssetService.getFile(file.localID!); return localFile != null; } else { diff --git a/mobile/apps/photos/lib/utils/file_util.dart b/mobile/apps/photos/lib/utils/file_util.dart index 7c6415ddbe..a8ad329331 100644 --- a/mobile/apps/photos/lib/utils/file_util.dart +++ b/mobile/apps/photos/lib/utils/file_util.dart @@ -70,7 +70,7 @@ Future _getLocalDiskFile( bool liveVideo = false, bool isOrigin = false, }) { - if (file.isSharedMediaToAppSandbox) { + if (file.isInAppMedia) { return SharedAssetService.getFile(file.localID!); } else if (file.fileType == FileType.livePhoto && liveVideo) { return Motionphoto.getLivePhotoFile(file.localID!); diff --git a/mobile/apps/photos/lib/utils/thumbnail_util.dart b/mobile/apps/photos/lib/utils/thumbnail_util.dart index 95fba728b1..255cb9059d 100644 --- a/mobile/apps/photos/lib/utils/thumbnail_util.dart +++ b/mobile/apps/photos/lib/utils/thumbnail_util.dart @@ -103,7 +103,7 @@ Future getThumbnailFromLocal( if (lruCachedThumbnail != null) { return lruCachedThumbnail; } - if (file.isSharedMediaToAppSandbox) { + if (file.isInAppMedia) { //todo:neeraj support specifying size/quality return SharedAssetService.getThumbnail( file.localID!,