Browse Source

Decouple and clean up FilesSyncWork

Signed-off-by: Jonas Mayer <jonas.a.mayer@gmx.net>
Jonas Mayer 1 năm trước cách đây
mục cha
commit
d91b6528a7

+ 10 - 2
app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManagerImpl.kt

@@ -423,7 +423,11 @@ internal class BackgroundJobManagerImpl(
         )
             .setInputData(arguments)
             .build()
-        workManager.enqueueUniquePeriodicWork(JOB_PERIODIC_FILES_SYNC + "_" + syncedFolderID, ExistingPeriodicWorkPolicy.REPLACE, request)
+        workManager.enqueueUniquePeriodicWork(
+            JOB_PERIODIC_FILES_SYNC + "_" + syncedFolderID,
+            ExistingPeriodicWorkPolicy.REPLACE,
+            request
+        )
     }
 
     override fun startImmediateFilesSyncJob(
@@ -444,7 +448,11 @@ internal class BackgroundJobManagerImpl(
             .setInputData(arguments)
             .build()
 
-        workManager.enqueueUniqueWork(JOB_IMMEDIATE_FILES_SYNC + "_" + syncedFolderID, ExistingWorkPolicy.APPEND, request)
+        workManager.enqueueUniqueWork(
+            JOB_IMMEDIATE_FILES_SYNC + "_" + syncedFolderID,
+            ExistingWorkPolicy.APPEND,
+            request
+        )
     }
 
     override fun scheduleOfflineSync() {

+ 59 - 44
app/src/main/java/com/nextcloud/client/jobs/FilesSyncWork.kt

@@ -64,48 +64,6 @@ class FilesSyncWork(
 
     private lateinit var syncedFolder: SyncedFolder
 
-    @Suppress("ReturnCount")
-    private fun canExitEarly(changedFiles: Array<String>?, syncedFolderID: Long): Boolean {
-        // If we are in power save mode better to postpone scan and upload
-        val overridePowerSaving = inputData.getBoolean(OVERRIDE_POWER_SAVING, false)
-        if ((powerManagementService.isPowerSavingEnabled && !overridePowerSaving)) {
-            return true
-        }
-
-        if (syncedFolderID < 0) {
-            Log_OC.d(TAG, "File-sync kill worker since no valid syncedFolderID provided!")
-            return true
-        }
-
-        // or sync worker already running and no changed files to be processed
-        val alreadyRunning = backgroundJobManager.bothFilesSyncJobsRunning(syncedFolderID)
-        if (alreadyRunning && changedFiles.isNullOrEmpty()) {
-            Log_OC.d(
-                TAG,
-                "File-sync kill worker since another instance of the worker " +
-                    "($syncedFolderID) seems to be running already!"
-            )
-            return true
-        }
-
-        val syncedFolderTmp = syncedFolderProvider.getSyncedFolderByID(syncedFolderID)
-        if (syncedFolderTmp == null || !syncedFolderTmp.isEnabled || !syncedFolderTmp.isExisting) {
-            Log_OC.d(TAG, "File-sync kill worker since syncedFolder ($syncedFolderID) is not enabled!")
-            return true
-        }
-        syncedFolder = syncedFolderTmp
-
-        if (syncedFolder.isChargingOnly &&
-            !powerManagementService.battery.isCharging &&
-            !powerManagementService.battery.isFull
-        ) {
-            Log_OC.d(TAG, "File-sync kill worker since phone is not charging (${syncedFolder.localPath})!")
-            return true
-        }
-
-        return false
-    }
-
     @Suppress("MagicNumber")
     override fun doWork(): Result {
         val syncFolderId = inputData.getLong(SYNCED_FOLDER_ID, -1)
@@ -116,7 +74,11 @@ class FilesSyncWork(
 
         if (canExitEarly(changedFiles, syncFolderId)) {
             val result = Result.success()
-            backgroundJobManager.logEndOfWorker(BackgroundJobManagerImpl.formatClassTag(this::class) + "_" + syncFolderId, result)
+            backgroundJobManager.logEndOfWorker(
+                BackgroundJobManagerImpl.formatClassTag(this::class) +
+                    "_" + syncFolderId,
+                result
+            )
             return result
         }
 
@@ -156,10 +118,63 @@ class FilesSyncWork(
 
         Log_OC.d(TAG, "File-sync worker (${syncedFolder.remotePath}) finished")
         val result = Result.success()
-        backgroundJobManager.logEndOfWorker(BackgroundJobManagerImpl.formatClassTag(this::class) + "_" + syncFolderId, result)
+        backgroundJobManager.logEndOfWorker(
+            BackgroundJobManagerImpl.formatClassTag(this::class) +
+                "_" + syncFolderId,
+            result
+        )
         return result
     }
 
+    private fun setSyncedFolder(syncedFolderID: Long): Boolean {
+        val syncedFolderTmp = syncedFolderProvider.getSyncedFolderByID(syncedFolderID)
+        if (syncedFolderTmp == null || !syncedFolderTmp.isEnabled || !syncedFolderTmp.isExisting) {
+            return false
+        }
+        syncedFolder = syncedFolderTmp
+        return true
+    }
+
+    @Suppress("ReturnCount")
+    private fun canExitEarly(changedFiles: Array<String>?, syncedFolderID: Long): Boolean {
+        // If we are in power save mode better to postpone scan and upload
+        val overridePowerSaving = inputData.getBoolean(OVERRIDE_POWER_SAVING, false)
+        if ((powerManagementService.isPowerSavingEnabled && !overridePowerSaving)) {
+            return true
+        }
+
+        if (syncedFolderID < 0) {
+            Log_OC.d(TAG, "File-sync kill worker since no valid syncedFolderID provided!")
+            return true
+        }
+
+        // or sync worker already running and no changed files to be processed
+        val alreadyRunning = backgroundJobManager.bothFilesSyncJobsRunning(syncedFolderID)
+        if (alreadyRunning && changedFiles.isNullOrEmpty()) {
+            Log_OC.d(
+                TAG,
+                "File-sync kill worker since another instance of the worker " +
+                    "($syncedFolderID) seems to be running already!"
+            )
+            return true
+        }
+
+        if (!setSyncedFolder(syncedFolderID)) {
+            Log_OC.d(TAG, "File-sync kill worker since syncedFolder ($syncedFolderID) is not enabled!")
+            return true
+        }
+
+        if (syncedFolder.isChargingOnly &&
+            !powerManagementService.battery.isCharging &&
+            !powerManagementService.battery.isFull
+        ) {
+            Log_OC.d(TAG, "File-sync kill worker since phone is not charging (${syncedFolder.localPath})!")
+            return true
+        }
+
+        return false
+    }
+
     @Suppress("MagicNumber")
     private fun collectChangedFiles(changedFiles: Array<String>?) {
         if (!changedFiles.isNullOrEmpty()) {