diff --git a/mobile/lib/modules/backup/background_service/background.service.dart b/mobile/lib/modules/backup/background_service/background.service.dart index 0d0501c302..1deddddcdd 100644 --- a/mobile/lib/modules/backup/background_service/background.service.dart +++ b/mobile/lib/modules/backup/background_service/background.service.dart @@ -459,6 +459,7 @@ class BackgroundService { notifySingleProgress ? _onProgress : (sent, total) {}, notifySingleProgress ? _onSetCurrentBackupAsset : (asset) {}, _onBackupError, + sortAssets: true, ); if (!ok && !_cancellationToken!.isCancelled) { _showErrorNotification( diff --git a/mobile/lib/modules/backup/services/backup.service.dart b/mobile/lib/modules/backup/services/backup.service.dart index 76da214a4d..fe08c9fdef 100644 --- a/mobile/lib/modules/backup/services/backup.service.dart +++ b/mobile/lib/modules/backup/services/backup.service.dart @@ -202,8 +202,9 @@ class BackupService { Function(String, String, bool) uploadSuccessCb, Function(int, int) uploadProgressCb, Function(CurrentUploadAsset) setCurrentUploadAssetCb, - Function(ErrorUploadAsset) errorCb, - ) async { + Function(ErrorUploadAsset) errorCb, { + bool sortAssets = false, + }) async { if (Platform.isAndroid && !(await Permission.accessMediaLocation.status).isGranted) { // double check that permission is granted here, to guard against @@ -221,7 +222,19 @@ class BackupService { // DON'T KNOW WHY BUT THIS HELPS BACKGROUND BACKUP TO WORK ON IOS await PhotoManager.requestPermissionExtend(); - for (var entity in assetList) { + List assetsToUpload = sortAssets + // Upload images before video assets + // these are further sorted by using their creation date + ? assetList.sorted( + (a, b) { + final cmp = a.typeInt - b.typeInt; + if (cmp != 0) return cmp; + return a.createDateTime.compareTo(b.createDateTime); + }, + ) + : assetList.toList(); + + for (var entity in assetsToUpload) { try { if (entity.type == AssetType.video) { file = await entity.originFile;