|
@@ -42,10 +42,12 @@ import com.nextcloud.client.documentscan.GeneratePdfFromImagesWork
|
|
|
import com.nextcloud.client.files.downloader.FileDownloadWorker
|
|
|
import com.nextcloud.client.preferences.AppPreferences
|
|
|
import com.owncloud.android.datamodel.OCFile
|
|
|
+import com.owncloud.android.lib.common.operations.OperationCancelledException
|
|
|
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
|
|
|
|
|
|
/**
|
|
@@ -509,20 +511,20 @@ internal class BackgroundJobManagerImpl(
|
|
|
workManager.enqueueUniqueWork(JOB_FILES_UPLOAD + user.accountName, ExistingWorkPolicy.KEEP, request)
|
|
|
}
|
|
|
|
|
|
- override fun startFilesDownloadJob(
|
|
|
+ private fun getOneTimeDownloadRequest(
|
|
|
user: User,
|
|
|
- ocFile: OCFile,
|
|
|
+ file: OCFile,
|
|
|
behaviour: String,
|
|
|
downloadType: DownloadType?,
|
|
|
activityName: String,
|
|
|
packageName: String,
|
|
|
conflictUploadId: Long?
|
|
|
- ) {
|
|
|
+ ): OneTimeWorkRequest {
|
|
|
val gson = Gson()
|
|
|
|
|
|
val data = workDataOf(
|
|
|
FileDownloadWorker.USER_NAME to user.accountName,
|
|
|
- FileDownloadWorker.FILE to gson.toJson(ocFile),
|
|
|
+ FileDownloadWorker.FILE to gson.toJson(file),
|
|
|
FileDownloadWorker.BEHAVIOUR to behaviour,
|
|
|
FileDownloadWorker.DOWNLOAD_TYPE to downloadType.toString(),
|
|
|
FileDownloadWorker.ACTIVITY_NAME to activityName,
|
|
@@ -530,9 +532,69 @@ internal class BackgroundJobManagerImpl(
|
|
|
FileDownloadWorker.CONFLICT_UPLOAD_ID to conflictUploadId
|
|
|
)
|
|
|
|
|
|
- val request = oneTimeRequestBuilder(FileDownloadWorker::class, JOB_FILES_DOWNLOAD, user)
|
|
|
+ return oneTimeRequestBuilder(FileDownloadWorker::class, JOB_FILES_DOWNLOAD, user)
|
|
|
.setInputData(data)
|
|
|
.build()
|
|
|
+ }
|
|
|
+
|
|
|
+ @Throws(OperationCancelledException::class)
|
|
|
+ override fun startFilesDownloadJob(
|
|
|
+ user: User,
|
|
|
+ files: List<OCFile>,
|
|
|
+ behaviour: String,
|
|
|
+ downloadType: DownloadType?,
|
|
|
+ activityName: String,
|
|
|
+ packageName: String,
|
|
|
+ conflictUploadId: Long?,
|
|
|
+ cancelRequest: AtomicBoolean
|
|
|
+ ) {
|
|
|
+ val workRequestList = mutableListOf<OneTimeWorkRequest>()
|
|
|
+
|
|
|
+ for (file in files) {
|
|
|
+ synchronized(cancelRequest) {
|
|
|
+ if (cancelRequest.get()) {
|
|
|
+ throw OperationCancelledException()
|
|
|
+ }
|
|
|
+
|
|
|
+ workRequestList.add(
|
|
|
+ getOneTimeDownloadRequest(
|
|
|
+ user,
|
|
|
+ file,
|
|
|
+ behaviour,
|
|
|
+ downloadType,
|
|
|
+ activityName,
|
|
|
+ packageName,
|
|
|
+ conflictUploadId
|
|
|
+ )
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ val chain = workManager
|
|
|
+ .beginWith(workRequestList.first())
|
|
|
+ .then(workRequestList.subList(1, workRequestList.size))
|
|
|
+
|
|
|
+ chain.enqueue()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun startFileDownloadJob(
|
|
|
+ user: User,
|
|
|
+ ocFile: OCFile,
|
|
|
+ behaviour: String,
|
|
|
+ downloadType: DownloadType?,
|
|
|
+ activityName: String,
|
|
|
+ packageName: String,
|
|
|
+ conflictUploadId: Long?
|
|
|
+ ) {
|
|
|
+ val request = getOneTimeDownloadRequest(
|
|
|
+ user,
|
|
|
+ ocFile,
|
|
|
+ behaviour,
|
|
|
+ downloadType,
|
|
|
+ activityName,
|
|
|
+ packageName,
|
|
|
+ conflictUploadId
|
|
|
+ )
|
|
|
|
|
|
workManager.enqueueUniqueWork(JOB_FILES_DOWNLOAD + user.accountName, ExistingWorkPolicy.REPLACE, request)
|
|
|
}
|