Browse Source

feat(mobile): handle backup iCloud asset

Alex Tran 1 year ago
parent
commit
cbf7ef7a2b

+ 3 - 0
mobile/lib/modules/backup/background_service/background.service.dart

@@ -452,9 +452,12 @@ class BackgroundService {
     );
 
     _cancellationToken = CancellationToken();
+    final pmProgressHandler = PMProgressHandler();
+
     final bool ok = await backupService.backupAsset(
       toUpload,
       _cancellationToken!,
+      pmProgressHandler,
       notifyTotalProgress ? _onAssetUploaded : (assetId, deviceId, isDup) {},
       notifySingleProgress ? _onProgress : (sent, total) {},
       notifySingleProgress ? _onSetCurrentBackupAsset : (asset) {},

+ 6 - 0
mobile/lib/modules/backup/providers/backup.provider.dart

@@ -444,9 +444,15 @@ class BackupNotifier extends StateNotifier<BackUpState> {
 
       // Perform Backup
       state = state.copyWith(cancelToken: CancellationToken());
+
+      final pmProgressHandler = PMProgressHandler();
+
+      pmProgressHandler.stream.listen((event) {});
+
       await _backupService.backupAsset(
         assetsWillBeBackup,
         state.cancelToken,
+        pmProgressHandler,
         _onAssetUploaded,
         _onUploadProgress,
         _onSetCurrentBackupAsset,

+ 2 - 0
mobile/lib/modules/backup/providers/manual_upload.provider.dart

@@ -208,10 +208,12 @@ class ManualUploadNotifier extends StateNotifier<ManualUploadState> {
                 state.totalAssetsToUpload == 1;
         state =
             state.copyWith(showDetailedNotification: showDetailedNotification);
+        final pmProgressHandler = PMProgressHandler();
 
         final bool ok = await ref.read(backupServiceProvider).backupAsset(
               allUploadAssets,
               state.cancelToken,
+              pmProgressHandler,
               _onAssetUploaded,
               _onProgress,
               _onSetCurrentBackupAsset,

+ 11 - 3
mobile/lib/modules/backup/services/backup.service.dart

@@ -202,6 +202,7 @@ class BackupService {
   Future<bool> backupAsset(
     Iterable<AssetEntity> assetList,
     http.CancellationToken cancelToken,
+    PMProgressHandler pmProgressHandler,
     Function(String, String, bool) uploadSuccessCb,
     Function(int, int) uploadProgressCb,
     Function(CurrentUploadAsset) setCurrentUploadAssetCb,
@@ -241,10 +242,17 @@ class BackupService {
 
     for (var entity in assetsToUpload) {
       try {
-        if (entity.type == AssetType.video) {
-          file = await entity.originFile;
+        final isAvailableLocally = await entity.isLocallyAvailable();
+
+        // Handle getting files from iCloud
+        if (!isAvailableLocally && Platform.isIOS) {
+          file = await entity.loadFile(progressHandler: pmProgressHandler);
         } else {
-          file = await entity.originFile.timeout(const Duration(seconds: 5));
+          if (entity.type == AssetType.video) {
+            file = await entity.originFile;
+          } else {
+            file = await entity.originFile.timeout(const Duration(seconds: 5));
+          }
         }
 
         if (file != null) {