Skip to content

Commit 740337e

Browse files
committed
separate between permanent failed uploads and retryable uploads
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent 04a79a3 commit 740337e

1 file changed

Lines changed: 23 additions & 5 deletions

File tree

‎app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt‎

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import com.owncloud.android.datamodel.SyncedFolder
3434
import com.owncloud.android.datamodel.SyncedFolderProvider
3535
import com.owncloud.android.datamodel.ThumbnailsCacheManager
3636
import com.owncloud.android.datamodel.UploadsStorageManager
37+
import com.owncloud.android.datamodel.UploadsStorageManager.UploadStatus
3738
import com.owncloud.android.db.OCUpload
3839
import com.owncloud.android.db.UploadResult
3940
import com.owncloud.android.lib.common.OwnCloudAccount
@@ -261,11 +262,17 @@ class FileUploadWorker(
261262
val client = OwnCloudClientManagerFactory.getDefaultSingleton().getClientFor(ocAccount, context)
262263
val syncFolderHelper = SyncFolderHelper(context)
263264
val syncedFolders = syncedFolderProvider.syncedFolders
264-
var uploadFilesResult = UploadFilesResult.Success
265+
var hasRetryableFailure = false
266+
var hasNonRetryableFailure = false
265267

266268
for ((index, upload) in uploads.withIndex()) {
267269
ensureActive()
268270

271+
if (skip(upload)) {
272+
Log_OC.d(TAG, "skipping already settled upload: ${upload.remotePath}, ${upload.lastResult}")
273+
continue
274+
}
275+
269276
delay(retryPolicy.getDelay().milliseconds)
270277

271278
if (!skipAutoUploadCheck && isBelongToAnySyncedFolder(upload, syncFolderHelper, syncedFolders)) {
@@ -320,10 +327,9 @@ class FileUploadWorker(
320327
if (!result.isSuccess) {
321328
Log_OC.e(TAG, "upload failed for ${upload.remotePath}: ${result.code}")
322329
if (uploadResult.isNonRetryable()) {
323-
uploadFilesResult = UploadFilesResult.Error
324-
} else if (uploadFilesResult != UploadFilesResult.Error) {
325-
// only set retry if any other not failed before
326-
uploadFilesResult = UploadFilesResult.Retry
330+
hasNonRetryableFailure = true
331+
} else {
332+
hasRetryableFailure = true
327333
}
328334
}
329335

@@ -335,9 +341,21 @@ class FileUploadWorker(
335341
}
336342
}
337343

344+
val uploadFilesResult = when {
345+
hasRetryableFailure -> UploadFilesResult.Retry
346+
hasNonRetryableFailure -> UploadFilesResult.Error
347+
else -> UploadFilesResult.Success
348+
}
349+
338350
return@withContext uploadFilesResult.toWorkerResult()
339351
}
340352

353+
private fun skip(upload: OCUpload): Boolean = when (upload.uploadStatus) {
354+
UploadStatus.UPLOAD_SUCCEEDED -> true
355+
UploadStatus.UPLOAD_FAILED -> upload.lastResult.isNonRetryable()
356+
else -> false
357+
}
358+
341359
@Suppress("ReturnCount")
342360
suspend fun isBelongToAnySyncedFolder(
343361
upload: OCUpload,

0 commit comments

Comments
 (0)