浏览代码

Fix isDownloadingFolder

Signed-off-by: alperozturk <alper_ozturk@proton.me>
alperozturk 1 年之前
父节点
当前提交
a180dcd5b3

+ 11 - 7
app/src/main/java/com/nextcloud/client/files/downloader/FileDownloadHelper.kt

@@ -22,6 +22,7 @@
 package com.nextcloud.client.files.downloader
 
 import com.nextcloud.client.account.User
+import com.nextcloud.client.files.downloader.FileDownloadWorker.Companion.folderDownloadStatusPair
 import com.nextcloud.client.jobs.BackgroundJobManager
 import com.owncloud.android.MainApp
 import com.owncloud.android.datamodel.FileDataStorageManager
@@ -29,10 +30,8 @@ import com.owncloud.android.datamodel.OCFile
 import com.owncloud.android.datamodel.UploadsStorageManager
 import com.owncloud.android.operations.DownloadFileOperation
 import com.owncloud.android.operations.DownloadType
-import com.owncloud.android.operations.SynchronizeFolderOperation
 import com.owncloud.android.utils.MimeTypeUtil
 import java.io.File
-import java.util.concurrent.atomic.AtomicBoolean
 import javax.inject.Inject
 
 class FileDownloadHelper {
@@ -62,14 +61,18 @@ class FileDownloadHelper {
             return false
         }
 
-        return backgroundJobManager.isStartFileDownloadJobScheduled(
-            user,
-            file
-        )
+        return if (file.isFolder) {
+            isFolderDownloading(file)
+        } else {
+            backgroundJobManager.isStartFileDownloadJobScheduled(
+                user,
+                file
+            )
+        }
     }
 
     private fun isFolderDownloading(folder: OCFile): Boolean {
-        for ((id, status) in SynchronizeFolderOperation.folderDownloadStatusPair) {
+        for ((id, status) in folderDownloadStatusPair) {
             return id == folder.fileId && status
         }
 
@@ -132,6 +135,7 @@ class FileDownloadHelper {
     }
 
     fun downloadFolder(folder: OCFile, user: User, files: List<OCFile>) {
+        folderDownloadStatusPair[folder.fileId] = true
         backgroundJobManager.startFolderDownloadJob(folder, user, files)
     }
 

+ 9 - 3
app/src/main/java/com/nextcloud/client/files/downloader/FileDownloadWorker.kt

@@ -46,7 +46,6 @@ import com.owncloud.android.lib.common.OwnCloudAccount
 import com.owncloud.android.lib.common.OwnCloudClient
 import com.owncloud.android.lib.common.OwnCloudClientManagerFactory
 import com.owncloud.android.lib.common.network.OnDatatransferProgressListener
-import com.owncloud.android.lib.common.operations.OperationCancelledException
 import com.owncloud.android.lib.common.operations.RemoteOperationResult
 import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode
 import com.owncloud.android.lib.common.utils.Log_OC
@@ -55,11 +54,10 @@ import com.owncloud.android.operations.DownloadType
 import com.owncloud.android.utils.theme.ViewThemeUtils
 import java.util.AbstractList
 import java.util.Vector
-import java.util.concurrent.atomic.AtomicBoolean
 
 @Suppress("LongParameterList")
 class FileDownloadWorker(
-    private val viewThemeUtils: ViewThemeUtils,
+    viewThemeUtils: ViewThemeUtils,
     private val accountManager: UserAccountManager,
     private val uploadsStorageManager: UploadsStorageManager,
     private var localBroadcastManager: LocalBroadcastManager,
@@ -70,6 +68,9 @@ class FileDownloadWorker(
     companion object {
         private val TAG = FileDownloadWorker::class.java.simpleName
 
+        var folderDownloadStatusPair = HashMap<Long, Boolean>()
+
+        const val FOLDER_ID = "FOLDER_ID"
         const val USER_NAME = "USER"
         const val FILE = "FILE"
         const val FILES = "FILES"
@@ -214,6 +215,11 @@ class FileDownloadWorker(
     }
 
     private fun setIdleWorkerState() {
+        val folderId = inputData.keyValueMap[FOLDER_ID] as Long?
+        folderId?.let {
+            folderDownloadStatusPair.remove(folderId)
+        }
+
         WorkerStateLiveData.instance().setWorkState(WorkerState.Idle)
     }
 

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

@@ -47,7 +47,6 @@ import com.owncloud.android.operations.DownloadType
 import java.util.Date
 import java.util.UUID
 import java.util.concurrent.TimeUnit
-import java.util.concurrent.atomic.AtomicBoolean
 import kotlin.reflect.KClass
 
 /**
@@ -523,6 +522,7 @@ internal class BackgroundJobManagerImpl(
     override fun startFolderDownloadJob(folder: OCFile, user: User, files: List<OCFile>) {
         val data = workDataOf(
             FileDownloadWorker.USER_NAME to user.accountName,
+            FileDownloadWorker.FOLDER_ID to folder.fileId,
             FileDownloadWorker.FILES to gson.toJson(files),
             FileDownloadWorker.DOWNLOAD_TYPE to DownloadType.DOWNLOAD.toString(),
         )

+ 0 - 2
app/src/main/java/com/owncloud/android/operations/SynchronizeFolderOperation.java

@@ -44,7 +44,6 @@ import com.owncloud.android.utils.MimeTypeUtil;
 
 import java.io.File;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Vector;
@@ -444,7 +443,6 @@ public class SynchronizeFolderOperation extends SyncOperation {
         startContentSynchronizations(mFilesToSyncContents);
     }
 
-    public static HashMap<Long, Boolean> folderDownloadStatusPair = new HashMap<>();
 
     private void startDirectDownloads() {
         FileDownloadHelper.Companion.instance().downloadFolder(mLocalFolder,