Pārlūkot izejas kodu

OfflineSyncWork: minor refactor to make more readable

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
Álvaro Brey 2 gadi atpakaļ
vecāks
revīzija
a62373efb4

+ 42 - 31
app/src/main/java/com/nextcloud/client/jobs/OfflineSyncWork.kt

@@ -67,7 +67,6 @@ class OfflineSyncWork constructor(
         return Result.success()
     }
 
-    @Suppress("ReturnCount", "ComplexMethod") // legacy code
     private fun recursive(folder: File, storageManager: FileDataStorageManager, user: User) {
         val downloadFolder = FileStorageUtils.getSavePath(user.accountName)
         val folderName = folder.absolutePath.replaceFirst(downloadFolder.toRegex(), "") + OCFile.PATH_SEPARATOR
@@ -76,35 +75,9 @@ class OfflineSyncWork constructor(
         if (folder.listFiles() == null) {
             return
         }
-        val ocFolder = storageManager.getFileByPath(folderName)
-        Log_OC.d(TAG, folderName + ": currentEtag: " + ocFolder.etag)
-        // check for etag change, if false, skip
-        val checkEtagOperation = CheckEtagRemoteOperation(
-            ocFolder.remotePath,
-            ocFolder.etagOnServer
-        )
-        val result = checkEtagOperation.execute(user, context)
-        when (result.code) {
-            ResultCode.ETAG_UNCHANGED -> {
-                Log_OC.d(TAG, "$folderName: eTag unchanged")
-                return
-            }
-            ResultCode.FILE_NOT_FOUND -> {
-                val removalResult = storageManager.removeFolder(ocFolder, true, true)
-                if (!removalResult) {
-                    Log_OC.e(TAG, "removal of " + ocFolder.storagePath + " failed: file not found")
-                }
-                return
-            }
-            ResultCode.ETAG_CHANGED -> Log_OC.d(TAG, "$folderName: eTag changed")
-            else -> {
-                if (connectivityService.isInternetWalled) {
-                    Log_OC.d(TAG, "No connectivity, skipping sync")
-                    return
-                }
-                Log_OC.d(TAG, "$folderName: eTag changed")
-            }
-        }
+
+        val updatedEtag = checkEtagChanged(folderName, storageManager, user) ?: return
+
         // iterate over downloaded files
         val files = folder.listFiles { obj: File -> obj.isFile }
         if (files != null) {
@@ -130,11 +103,49 @@ class OfflineSyncWork constructor(
         // update eTag
         @Suppress("TooGenericExceptionCaught") // legacy code
         try {
-            val updatedEtag = result.data[0] as String
+            val ocFolder = storageManager.getFileByPath(folderName)
             ocFolder.etagOnServer = updatedEtag
             storageManager.saveFile(ocFolder)
         } catch (e: Exception) {
             Log_OC.e(TAG, "Failed to update etag on " + folder.absolutePath, e)
         }
     }
+
+    /**
+     * @return new etag if changed, `null` otherwise
+     */
+    private fun checkEtagChanged(folderName: String, storageManager: FileDataStorageManager, user: User): String? {
+        val ocFolder = storageManager.getFileByPath(folderName)
+        Log_OC.d(TAG, folderName + ": currentEtag: " + ocFolder.etag)
+        // check for etag change, if false, skip
+        val checkEtagOperation = CheckEtagRemoteOperation(
+            ocFolder.remotePath,
+            ocFolder.etagOnServer
+        )
+        val result = checkEtagOperation.execute(user, context)
+        return when (result.code) {
+            ResultCode.ETAG_UNCHANGED -> {
+                Log_OC.d(TAG, "$folderName: eTag unchanged")
+                null
+            }
+            ResultCode.FILE_NOT_FOUND -> {
+                val removalResult = storageManager.removeFolder(ocFolder, true, true)
+                if (!removalResult) {
+                    Log_OC.e(TAG, "removal of " + ocFolder.storagePath + " failed: file not found")
+                }
+                null
+            }
+            ResultCode.ETAG_CHANGED -> {
+                Log_OC.d(TAG, "$folderName: eTag changed")
+                result.data[0] as String
+            }
+            else -> if (connectivityService.isInternetWalled) {
+                Log_OC.d(TAG, "No connectivity, skipping sync")
+                null
+            } else {
+                Log_OC.d(TAG, "$folderName: eTag changed")
+                result.data[0] as String
+            }
+        }
+    }
 }