Эх сурвалжийг харах

Rearrange functions and remove necessary complexity

Signed-off-by: Jonas Mayer <jonas.a.mayer@gmx.net>
Jonas Mayer 1 жил өмнө
parent
commit
d335d962f7

+ 73 - 0
app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadHelper.kt

@@ -21,18 +21,26 @@
 
 package com.nextcloud.client.jobs.upload
 
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
 import com.nextcloud.client.account.User
 import com.nextcloud.client.account.UserAccountManager
+import com.nextcloud.client.device.PowerManagementService
 import com.nextcloud.client.jobs.BackgroundJobManager
 import com.nextcloud.client.jobs.upload.FileUploadWorker.Companion.currentUploadFileOperation
+import com.nextcloud.client.network.ConnectivityService
+import com.nextcloud.java.util.Optional
 import com.owncloud.android.MainApp
 import com.owncloud.android.datamodel.OCFile
 import com.owncloud.android.datamodel.UploadsStorageManager
 import com.owncloud.android.datamodel.UploadsStorageManager.UploadStatus
 import com.owncloud.android.db.OCUpload
+import com.owncloud.android.db.UploadResult
 import com.owncloud.android.files.services.NameCollisionPolicy
 import com.owncloud.android.lib.common.network.OnDatatransferProgressListener
 import com.owncloud.android.lib.common.utils.Log_OC
+import java.io.File
 import javax.inject.Inject
 
 @Suppress("TooManyFunctions")
@@ -69,6 +77,44 @@ class FileUploadHelper {
         }
     }
 
+    @Suppress("ComplexCondition")
+    fun retryFailedUploads(
+        uploadsStorageManager: UploadsStorageManager,
+        connectivityService: ConnectivityService,
+        accountManager: UserAccountManager,
+        powerManagementService: PowerManagementService
+    ) {
+        val failedUploads = uploadsStorageManager.failedUploads
+        if (failedUploads == null || failedUploads.isEmpty()) {
+            return
+        }
+
+        val (gotNetwork, _, gotWifi) = connectivityService.connectivity
+        val batteryStatus = powerManagementService.battery
+        val charging = batteryStatus.isCharging || batteryStatus.isFull
+        val isPowerSaving = powerManagementService.isPowerSavingEnabled
+        var uploadUser = Optional.empty<User>()
+        for (failedUpload in failedUploads) {
+            // 1. extract failed upload owner account and cache it between loops (expensive query)
+            if (!uploadUser.isPresent || !uploadUser.get().nameEquals(failedUpload.accountName)) {
+                uploadUser = accountManager.getUser(failedUpload.accountName)
+            }
+            val isDeleted = !File(failedUpload.localPath).exists()
+            if (isDeleted) {
+                // 2A. for deleted files, mark as permanently failed
+                if (failedUpload.lastResult != UploadResult.FILE_NOT_FOUND) {
+                    failedUpload.lastResult = UploadResult.FILE_NOT_FOUND
+                    uploadsStorageManager.updateUpload(failedUpload)
+                }
+            } else if (!isPowerSaving && gotNetwork &&
+                canUploadBeRetried(failedUpload, gotWifi, charging) && !connectivityService.isInternetWalled
+            ) {
+                // 2B. for existing local files, try restarting it if possible
+                retryUpload(failedUpload, uploadUser.get())
+            }
+        }
+    }
+
     @Suppress("LongParameterList")
     fun uploadNewFiles(
         user: User,
@@ -127,6 +173,13 @@ class FileUploadHelper {
         return upload.uploadStatus == UploadStatus.UPLOAD_IN_PROGRESS
     }
 
+    private fun canUploadBeRetried(upload: OCUpload, gotWifi: Boolean, isCharging: Boolean): Boolean {
+        val file = File(upload.localPath)
+        val needsWifi = upload.isUseWifiOnly
+        val needsCharging = upload.isWhileChargingOnly
+        return file.exists() && (!needsWifi || gotWifi) && (!needsCharging || isCharging)
+    }
+
     @Suppress("ReturnCount")
     fun isUploadingNow(upload: OCUpload?): Boolean {
         val currentUploadFileOperation = currentUploadFileOperation
@@ -201,4 +254,24 @@ class FileUploadHelper {
             mBoundListeners.remove(targetKey)
         }
     }
+
+    class UploadNotificationActionReceiver : BroadcastReceiver() {
+        override fun onReceive(context: Context, intent: Intent) {
+            val accountName = intent.getStringExtra(FileUploadWorker.EXTRA_ACCOUNT_NAME)
+            val remotePath = intent.getStringExtra(FileUploadWorker.EXTRA_REMOTE_PATH)
+            val action = intent.action
+
+            if (FileUploadWorker.ACTION_CANCEL_BROADCAST == action) {
+                Log_OC.d(
+                    FileUploadWorker.TAG,
+                    "Cancel broadcast received for file " + remotePath + " at " + System.currentTimeMillis()
+                )
+                if (accountName == null || remotePath == null) {
+                    return
+                }
+
+                instance().cancelFileUpload(remotePath, accountName)
+            }
+        }
+    }
 }

+ 0 - 65
app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt

@@ -91,51 +91,6 @@ class FileUploadWorker(
         const val LOCAL_BEHAVIOUR_FORGET = 2
         const val LOCAL_BEHAVIOUR_DELETE = 3
 
-        @Suppress("ComplexCondition")
-        fun retryFailedUploads(
-            uploadsStorageManager: UploadsStorageManager,
-            connectivityService: ConnectivityService,
-            accountManager: UserAccountManager,
-            powerManagementService: PowerManagementService
-        ) {
-            val failedUploads = uploadsStorageManager.failedUploads
-            if (failedUploads == null || failedUploads.isEmpty()) {
-                return
-            }
-
-            val (gotNetwork, _, gotWifi) = connectivityService.connectivity
-            val batteryStatus = powerManagementService.battery
-            val charging = batteryStatus.isCharging || batteryStatus.isFull
-            val isPowerSaving = powerManagementService.isPowerSavingEnabled
-            var uploadUser = Optional.empty<User>()
-            for (failedUpload in failedUploads) {
-                // 1. extract failed upload owner account and cache it between loops (expensive query)
-                if (!uploadUser.isPresent || !uploadUser.get().nameEquals(failedUpload.accountName)) {
-                    uploadUser = accountManager.getUser(failedUpload.accountName)
-                }
-                val isDeleted = !File(failedUpload.localPath).exists()
-                if (isDeleted) {
-                    // 2A. for deleted files, mark as permanently failed
-                    if (failedUpload.lastResult != UploadResult.FILE_NOT_FOUND) {
-                        failedUpload.lastResult = UploadResult.FILE_NOT_FOUND
-                        uploadsStorageManager.updateUpload(failedUpload)
-                    }
-                } else if (!isPowerSaving && gotNetwork &&
-                    canUploadBeRetried(failedUpload, gotWifi, charging) && !connectivityService.isInternetWalled
-                ) {
-                    // 2B. for existing local files, try restarting it if possible
-                    FileUploadHelper.instance().retryUpload(failedUpload, uploadUser.get())
-                }
-            }
-        }
-
-        private fun canUploadBeRetried(upload: OCUpload, gotWifi: Boolean, isCharging: Boolean): Boolean {
-            val file = File(upload.localPath)
-            val needsWifi = upload.isUseWifiOnly
-            val needsCharging = upload.isWhileChargingOnly
-            return file.exists() && (!needsWifi || gotWifi) && (!needsCharging || isCharging)
-        }
-
         fun getUploadsAddedMessage(): String {
             return FileUploadWorker::class.java.name + UPLOADS_ADDED_MESSAGE
         }
@@ -147,26 +102,6 @@ class FileUploadWorker(
         fun getUploadFinishMessage(): String {
             return FileUploadWorker::class.java.name + UPLOAD_FINISH_MESSAGE
         }
-
-        class UploadNotificationActionReceiver : BroadcastReceiver() {
-            override fun onReceive(context: Context, intent: Intent) {
-                val accountName = intent.getStringExtra(EXTRA_ACCOUNT_NAME)
-                val remotePath = intent.getStringExtra(EXTRA_REMOTE_PATH)
-                val action = intent.action
-
-                if (ACTION_CANCEL_BROADCAST == action) {
-                    Log_OC.d(
-                        TAG,
-                        "Cancel broadcast received for file " + remotePath + " at " + System.currentTimeMillis()
-                    )
-                    if (accountName == null || remotePath == null) {
-                        return
-                    }
-
-                    FileUploadHelper.instance().cancelFileUpload(remotePath, accountName)
-                }
-            }
-        }
     }
 
     private var lastPercent = 0

+ 1 - 1
app/src/main/java/com/nextcloud/client/jobs/upload/FileUploaderIntents.kt

@@ -39,7 +39,7 @@ class FileUploaderIntents(private val context: Context) {
     fun startIntent(operation: UploadFileOperation): PendingIntent {
         val intent = Intent(
             context,
-            FileUploadWorker.Companion.UploadNotificationActionReceiver::class.java
+            FileUploadHelper.UploadNotificationActionReceiver::class.java
         ).apply {
             putExtra(FileUploadWorker.EXTRA_ACCOUNT_NAME, operation.user.accountName)
             putExtra(FileUploadWorker.EXTRA_REMOTE_PATH, operation.remotePath)

+ 4 - 14
app/src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java

@@ -133,7 +133,7 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
                     }
                 }
                 case FINISHED -> uploadsStorageManager.clearSuccessfulUploads();
-                case FAILED -> new Thread(() -> FileUploadWorker.Companion.retryFailedUploads(
+                case FAILED -> new Thread(() -> FileUploadHelper.Companion.instance().retryFailedUploads(
                     uploadsStorageManager,
                     connectivityService,
                     accountManager,
@@ -273,30 +273,20 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
                     // really uploading, so...
                     // ... unbind the old progress bar, if any; ...
                     if (progressListener != null) {
-                        OCUpload ocUpload = progressListener.getUpload();
-
-                        if (ocUpload == null) {
-                            return;
-                        }
-
-                        String targetKey = FileUploadHelper.Companion.buildRemoteName(ocUpload.getAccountName(), ocUpload.getRemotePath());
+                        String targetKey = FileUploadHelper.Companion.buildRemoteName(progressListener.getUpload().getAccountName(), progressListener.getUpload().getRemotePath());
                         uploadHelper.removeUploadTransferProgressListener(progressListener, targetKey);
                     }
                     // ... then, bind the current progress bar to listen for updates
                     progressListener = new ProgressListener(item, itemViewHolder.binding.uploadProgressBar);
                     String targetKey = FileUploadHelper.Companion.buildRemoteName(item.getAccountName(), item.getRemotePath());
                     uploadHelper.addUploadTransferProgressListener(progressListener, targetKey);
+
                 } else {
                     // not really uploading; stop listening progress if view is reused!
                     if (progressListener != null &&
                         progressListener.isWrapping(itemViewHolder.binding.uploadProgressBar)) {
-                        OCUpload ocUpload = progressListener.getUpload();
-
-                        if (ocUpload == null) {
-                            return;
-                        }
 
-                        String targetKey = FileUploadHelper.Companion.buildRemoteName(ocUpload.getAccountName(), ocUpload.getRemotePath());
+                        String targetKey = FileUploadHelper.Companion.buildRemoteName(progressListener.getUpload().getAccountName(), progressListener.getUpload().getRemotePath());
 
                         uploadHelper.removeUploadTransferProgressListener(progressListener, targetKey);
                         progressListener = null;