Переглянути джерело

Overload downloadFile functions

Signed-off-by: alperozturk <alper_ozturk@proton.me>
alperozturk 1 рік тому
батько
коміт
f0a845fc3a

+ 23 - 6
app/src/main/java/com/nextcloud/client/files/downloader/FilesDownloadWorker.kt

@@ -41,6 +41,10 @@ import androidx.core.app.NotificationCompat
 import androidx.localbroadcastmanager.content.LocalBroadcastManager
 import androidx.work.Worker
 import androidx.work.WorkerParameters
+import com.google.gson.Gson
+import com.google.gson.JsonElement
+import com.google.gson.JsonSerializationContext
+import com.google.gson.JsonSerializer
 import com.nextcloud.client.account.User
 import com.nextcloud.client.account.UserAccountManager
 import com.nextcloud.java.util.Optional
@@ -86,6 +90,8 @@ class FilesDownloadWorker(
 
     companion object {
         private val TAG = FilesDownloadWorker::class.java.simpleName
+
+        var user: User? = null
         const val USER = "USER"
         const val FILE = "FILE"
         const val BEHAVIOUR = "BEHAVIOUR"
@@ -122,13 +128,22 @@ class FilesDownloadWorker(
     private var startedDownload = false
     private var storageManager: FileDataStorageManager? = null
     private var downloadClient: OwnCloudClient? = null
+    private val gson = Gson()
 
     override fun doWork(): Result {
         return try {
-            conflictUploadId = inputData.keyValueMap[CONFLICT_UPLOAD_ID] as Long
-            val user = inputData.keyValueMap[USER] as User
-            val file = inputData.keyValueMap[FILE] as OCFile
-            val downloadType = inputData.keyValueMap[DOWNLOAD_TYPE] as DownloadType
+            conflictUploadId = inputData.keyValueMap[CONFLICT_UPLOAD_ID] as Long?
+            val file = gson.fromJson(inputData.keyValueMap[FILE] as String, OCFile::class.java)
+            val downloadTypeAsString = inputData.keyValueMap[DOWNLOAD_TYPE] as String?
+            val downloadType = if (downloadTypeAsString != null) {
+                if (downloadTypeAsString == DownloadType.DOWNLOAD.toString()) {
+                    DownloadType.DOWNLOAD
+                } else {
+                    DownloadType.EXPORT
+                }
+            } else {
+                null
+            }
             val behaviour = inputData.keyValueMap[BEHAVIOUR] as String
             val activityName = inputData.keyValueMap[ACTIVITY_NAME] as String
             val packageName = inputData.keyValueMap[PACKAGE_NAME] as String
@@ -137,10 +152,12 @@ class FilesDownloadWorker(
 
             showDownloadingFilesNotification()
             addAccountUpdateListener()
-            requestDownloads(user, file, behaviour, downloadType, activityName, packageName)
+            requestDownloads(user!!, file, behaviour, downloadType, activityName, packageName)
 
+            Log_OC.e(TAG, "FilesDownloadWorker successfully completed")
             Result.success()
         } catch (t: Throwable) {
+            Log_OC.e(TAG, "Error caught at FilesDownloadWorker(): " + t.localizedMessage)
             Result.failure()
         }
     }
@@ -149,7 +166,7 @@ class FilesDownloadWorker(
         user: User,
         file: OCFile,
         behaviour: String,
-        downloadType: DownloadType,
+        downloadType: DownloadType?,
         activityName: String,
         packageName: String,
     ) {

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

@@ -34,6 +34,7 @@ import androidx.work.PeriodicWorkRequest
 import androidx.work.WorkInfo
 import androidx.work.WorkManager
 import androidx.work.workDataOf
+import com.google.gson.Gson
 import com.nextcloud.client.account.User
 import com.nextcloud.client.core.Clock
 import com.nextcloud.client.di.Injectable
@@ -517,16 +518,21 @@ internal class BackgroundJobManagerImpl(
         packageName: String,
         conflictUploadId: Long?
     ) {
+        val gson = Gson()
+
+        // FIXME user interface cant serialize and deserialize
         val data = workDataOf(
-            FilesDownloadWorker.USER to user,
-            FilesDownloadWorker.FILE to ocFile,
+            //FilesDownloadWorker.USER to gson.toJson(user),
+            FilesDownloadWorker.FILE to gson.toJson(ocFile),
             FilesDownloadWorker.BEHAVIOUR to behaviour,
-            FilesDownloadWorker.DOWNLOAD_TYPE to downloadType,
+            FilesDownloadWorker.DOWNLOAD_TYPE to downloadType.toString(),
             FilesDownloadWorker.ACTIVITY_NAME to activityName,
             FilesDownloadWorker.PACKAGE_NAME to packageName,
             FilesDownloadWorker.CONFLICT_UPLOAD_ID to conflictUploadId,
         )
 
+        FilesDownloadWorker.user = user
+
         val request = oneTimeRequestBuilder(FilesDownloadWorker::class, JOB_FILES_DOWNLOAD, user)
             .setInputData(data)
             .build()

+ 7 - 3
app/src/main/java/com/owncloud/android/operations/DownloadType.kt

@@ -22,7 +22,11 @@
 
 package com.owncloud.android.operations
 
-enum class DownloadType {
-    DOWNLOAD,
-    EXPORT
+enum class DownloadType(var type: String) {
+    DOWNLOAD("DOWNLOAD"),
+    EXPORT("EXPORT");
+
+    override fun toString(): String {
+        return type
+    }
 }