From ed6e4016886084f5be002fb5b8a6ecbaa481980b Mon Sep 17 00:00:00 2001 From: ashilkn Date: Mon, 30 Jun 2025 11:12:40 +0530 Subject: [PATCH 1/2] bump up auth version to 4.4.1 --- auth/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/auth/pubspec.yaml b/auth/pubspec.yaml index e7ab13d0be..74c48b251a 100644 --- a/auth/pubspec.yaml +++ b/auth/pubspec.yaml @@ -1,7 +1,7 @@ name: ente_auth description: ente two-factor authenticator -version: 4.4.0+440 +version: 4.4.1+441 publish_to: none environment: From 0529c8cf9bdcd513ced64da6f9e63fa9e74d1e3f Mon Sep 17 00:00:00 2001 From: Neeraj Date: Mon, 30 Jun 2025 13:50:09 +0530 Subject: [PATCH 2/2] [mob] Remove old migration code (#6408) ## Description ## Tests --- mobile/lib/db/files_db.dart | 54 ------- .../services/local_file_update_service.dart | 136 +----------------- 2 files changed, 2 insertions(+), 188 deletions(-) diff --git a/mobile/lib/db/files_db.dart b/mobile/lib/db/files_db.dart index 1d46bff519..f8900f8912 100644 --- a/mobile/lib/db/files_db.dart +++ b/mobile/lib/db/files_db.dart @@ -1436,22 +1436,6 @@ class FilesDB with SqlDbBase { return convertToFiles(rows).first; } - Future markForReUploadIfLocationMissing(List localIDs) async { - if (localIDs.isEmpty) { - return; - } - final inParam = localIDs.map((id) => "'$id'").join(','); - final db = await instance.sqliteAsyncDB; - await db.execute( - ''' - UPDATE $filesTable - SET $columnUpdationTime = NULL - WHERE $columnLocalID IN ($inParam) - AND ($columnLatitude IS NULL OR $columnLongitude IS NULL OR $columnLongitude = 0.0 or $columnLongitude = 0.0); - ''', - ); - } - Future doesFileExistInCollection( int uploadedFileID, int collectionID, @@ -1586,25 +1570,6 @@ class FilesDB with SqlDbBase { return files; } - // For givenUserID, get List of unique LocalIDs for files which are - // uploaded by the given user and location is missing - Future> getLocalIDsForFilesWithoutLocation(int ownerID) async { - final db = await instance.sqliteAsyncDB; - final rows = await db.getAll( - ''' - SELECT DISTINCT $columnLocalID FROM $filesTable - WHERE $columnOwnerID = ? AND $columnLocalID IS NOT NULL AND - ($columnLatitude IS NULL OR $columnLongitude IS NULL OR $columnLatitude = 0.0 or $columnLongitude = 0.0) - ''', - [ownerID], - ); - final result = []; - for (final row in rows) { - result.add(row[columnLocalID].toString()); - } - return result; - } - // For a given userID, return unique uploadedFileId for the given userID Future> getUploadIDsWithMissingSize(int userId) async { final db = await instance.sqliteAsyncDB; @@ -1622,25 +1587,6 @@ class FilesDB with SqlDbBase { return result; } - Future> getLocalFilesBackedUpWithoutLocation(int userId) async { - final db = await instance.sqliteAsyncDB; - final rows = await db.getAll( - ''' - SELECT DISTINCT $columnLocalID FROM $filesTable - WHERE $columnOwnerID = ? AND $columnLocalID IS NOT NULL AND - ($columnUploadedFileID IS NOT NULL AND $columnUploadedFileID IS NOT -1) - AND ($columnLatitude IS NULL OR $columnLongitude IS NULL OR - $columnLatitude = 0.0 or $columnLongitude = 0.0) - ''', - [userId], - ); - final result = []; - for (final row in rows) { - result.add(row[columnLocalID] as String); - } - return result; - } - // updateSizeForUploadIDs takes a map of upploadedFileID and fileSize and // update the fileSize for the given uploadedFileID Future updateSizeForUploadIDs( diff --git a/mobile/lib/services/local_file_update_service.dart b/mobile/lib/services/local_file_update_service.dart index bf724f55ac..56ef8514a2 100644 --- a/mobile/lib/services/local_file_update_service.dart +++ b/mobile/lib/services/local_file_update_service.dart @@ -3,12 +3,10 @@ import 'dart:core'; import 'dart:io'; import 'package:logging/logging.dart'; -import "package:photo_manager/photo_manager.dart"; import "package:photos/core/configuration.dart"; import 'package:photos/core/errors.dart'; import 'package:photos/db/file_updation_db.dart'; import 'package:photos/db/files_db.dart'; -import "package:photos/extensions/list.dart"; import 'package:photos/models/file/file.dart'; import 'package:photos/models/file/file_type.dart'; import 'package:photos/utils/file_uploader_util.dart'; @@ -21,10 +19,6 @@ class LocalFileUpdateService { late FileUpdationDB _fileUpdationDB; late SharedPreferences _prefs; late Logger _logger; - final String _androidMissingGPSImportDone = - 'fm_android_missing_gps_import_done'; - final String _androidMissingGPSCheckDone = - 'fm_android_missing_gps_check_done'; final List _oldMigrationKeys = [ 'fm_badCreationTime', @@ -37,6 +31,7 @@ class LocalFileUpdateService { 'fm_import_ios_live_photo_size', 'fm_ios_live_photo_check', 'fm_import_ios_live_photo_check', + 'fm_android_missing_gps_check_done', ]; Completer? _existingMigration; @@ -62,9 +57,6 @@ class LocalFileUpdateService { try { await _markFilesWhichAreActuallyUpdated(); _cleanUpOlderMigration().ignore(); - if (Platform.isAndroid) { - await _androidMissingGPSCheck(); - } } catch (e, s) { _logger.severe('failed to perform migration', e, s); } finally { @@ -90,6 +82,7 @@ class LocalFileUpdateService { 'badLocationCord', 'livePhotoSize', 'livePhotoCheck', + 'androidMissingGPS', ]); for (var element in _oldMigrationKeys) { await _prefs.remove(element); @@ -217,131 +210,6 @@ class LocalFileUpdateService { ); } - //#region Android Missing GPS specific methods ### - - Future _androidMissingGPSCheck() async { - if (_prefs.containsKey(_androidMissingGPSCheckDone)) { - return; - } - await _importAndroidBadGPSCandidate(); - // singleRunLimit indicates number of files to check during single - // invocation of this method. The limit act as a crude way to limit the - // resource consumed by the method - const int singleRunLimit = 500; - final localIDsToProcess = - await _fileUpdationDB.getLocalIDsForPotentialReUpload( - singleRunLimit, - FileUpdationDB.androidMissingGPS, - ); - if (localIDsToProcess.isNotEmpty) { - final chunksOf50 = localIDsToProcess.chunks(50); - for (final chunk in chunksOf50) { - final sTime = DateTime.now().microsecondsSinceEpoch; - final List futures = []; - final chunkOf10 = chunk.chunks(10); - for (final smallChunk in chunkOf10) { - futures.add(_checkForMissingGPS(smallChunk)); - } - await Future.wait(futures); - final eTime = DateTime.now().microsecondsSinceEpoch; - final d = Duration(microseconds: eTime - sTime); - _logger.info( - 'Performed missing GPS Location check for ${chunk.length} files ' - 'completed in ${d.inSeconds.toString()} secs', - ); - } - } else { - _logger.info('Completed android missing GPS check'); - await _prefs.setBool(_androidMissingGPSCheckDone, true); - } - } - - Future _checkForMissingGPS(List localIDs) async { - try { - final List localFiles = - await FilesDB.instance.getLocalFiles(localIDs); - final ownerID = Configuration.instance.getUserID()!; - final Set localIDsWithFile = {}; - final Set reuploadCandidate = {}; - final Set processedIDs = {}; - for (EnteFile file in localFiles) { - if (file.localID == null) continue; - // ignore files that are not uploaded or have different owner - if (!file.isUploaded || file.ownerID! != ownerID) { - processedIDs.add(file.localID!); - } - if (file.hasLocation) { - processedIDs.add(file.localID!); - } - } - for (EnteFile enteFile in localFiles) { - try { - if (enteFile.localID == null || - processedIDs.contains(enteFile.localID!)) { - continue; - } - - final localID = enteFile.localID!; - localIDsWithFile.add(localID); - final AssetEntity? entity = await AssetEntity.fromId(localID); - if (entity == null) { - processedIDs.add(localID); - } else { - final latLng = await entity.latlngAsync(); - if ((latLng.longitude ?? 0) == 0 || (latLng.latitude ?? 0) == 0) { - processedIDs.add(localID); - } else { - reuploadCandidate.add(localID); - processedIDs.add(localID); - } - } - } catch (e, s) { - processedIDs.add(enteFile.localID!); - _logger.severe('lat/long check file ${enteFile.toString()}', e, s); - } - } - for (String id in localIDs) { - // if the file with given localID doesn't exist, consider it as done. - if (!localIDsWithFile.contains(id)) { - processedIDs.add(id); - } - } - await FileUpdationDB.instance.insertMultiple( - reuploadCandidate.toList(), - FileUpdationDB.modificationTimeUpdated, - ); - await FileUpdationDB.instance.deleteByLocalIDs( - processedIDs.toList(), - FileUpdationDB.androidMissingGPS, - ); - } catch (e, s) { - _logger.severe('error while checking missing GPS', e, s); - } - } - - Future _importAndroidBadGPSCandidate() async { - if (_prefs.containsKey(_androidMissingGPSImportDone)) { - return; - } - final sTime = DateTime.now().microsecondsSinceEpoch; - _logger.info('importing files without missing GPS'); - final int ownerID = Configuration.instance.getUserID()!; - final fileLocalIDs = - await FilesDB.instance.getLocalFilesBackedUpWithoutLocation(ownerID); - await _fileUpdationDB.insertMultiple( - fileLocalIDs, - FileUpdationDB.androidMissingGPS, - ); - final eTime = DateTime.now().microsecondsSinceEpoch; - final d = Duration(microseconds: eTime - sTime); - _logger.info( - 'importing completed, total files count ${fileLocalIDs.length} and took ${d.inSeconds.toString()} seconds', - ); - await _prefs.setBool(_androidMissingGPSImportDone, true); - } - - //#endregion Android Missing GPS specific methods ### - Future getUploadData(EnteFile file) async { final mediaUploadData = await getUploadDataFromEnteFile(file); // delete the file from app's internal cache if it was copied to app