Skip to content

Commit ec726ea

Browse files
committed
fix(auto-upload): handle upload results
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent 59d2190 commit ec726ea

4 files changed

Lines changed: 40 additions & 24 deletions

File tree

app/src/main/java/com/nextcloud/client/jobs/autoUpload/AutoUploadEntityResult.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import com.nextcloud.client.database.entity.UploadEntity
1111
import com.owncloud.android.db.OCUpload
1212

1313
sealed class AutoUploadEntityResult {
14-
data object SyncConflict : AutoUploadEntityResult()
14+
data object PermanentFailure : AutoUploadEntityResult()
1515
data object CreationError : AutoUploadEntityResult()
1616
data object Uploaded : AutoUploadEntityResult()
1717
data class Success(val data: Pair<UploadEntity, OCUpload>) : AutoUploadEntityResult()

app/src/main/java/com/nextcloud/client/jobs/autoUpload/AutoUploadWorker.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import com.nextcloud.client.jobs.upload.FileUploadWorker
2424
import com.nextcloud.client.jobs.utils.UploadErrorNotificationManager
2525
import com.nextcloud.client.network.ConnectivityService
2626
import com.nextcloud.client.preferences.SubFolderRule
27+
import com.nextcloud.utils.extensions.isPermanentFailure
2728
import com.nextcloud.utils.extensions.updateStatus
2829
import com.owncloud.android.R
2930
import com.owncloud.android.datamodel.ArbitraryDataProviderImpl
@@ -403,9 +404,13 @@ class AutoUploadWorker(
403404
)
404405

405406
val lastUploadResult = uploadEntity?.lastResult?.let { UploadResult.fromValue(it) }
406-
if (lastUploadResult == UploadResult.SYNC_CONFLICT) {
407-
Log_OC.w(TAG, "Conflict already exists, skipping auto-upload: $localPath")
408-
return AutoUploadEntityResult.SyncConflict
407+
if (lastUploadResult?.isPermanentFailure() == true) {
408+
Log_OC.w(
409+
TAG,
410+
"last upload failed with permanent failure, skipping auto-upload: $localPath," +
411+
" failure: ${lastUploadResult.value}"
412+
)
413+
return AutoUploadEntityResult.PermanentFailure
409414
}
410415

411416
val upload = try {

app/src/main/java/com/nextcloud/utils/extensions/RemoteOperationResultExtensions.kt

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,10 @@ package com.nextcloud.utils.extensions
99

1010
import com.owncloud.android.MainApp
1111
import com.owncloud.android.R
12-
import com.owncloud.android.datamodel.OCFile
1312
import com.owncloud.android.lib.common.operations.RemoteOperation
1413
import com.owncloud.android.lib.common.operations.RemoteOperationResult
1514
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode
16-
import com.owncloud.android.lib.resources.files.model.RemoteFile
1715
import com.owncloud.android.utils.ErrorMessageAdapter
18-
import com.owncloud.android.utils.FileStorageUtils
1916

2017
@Suppress("ReturnCount")
2118
fun Pair<RemoteOperationResult<*>?, RemoteOperation<*>?>?.getErrorMessage(): String {
@@ -45,20 +42,3 @@ fun ResultCode.isFileSpecificError(): Boolean {
4542

4643
return !errorCodes.contains(this)
4744
}
48-
49-
@Suppress("Deprecation")
50-
fun RemoteOperationResult<*>?.toOCFile(): List<OCFile>? = if (this?.isSuccess == true) {
51-
data?.toOCFileList()
52-
} else {
53-
null
54-
}
55-
56-
private fun ArrayList<Any>.toOCFileList(): List<OCFile> = this.mapNotNull {
57-
val remoteFile = (it as? RemoteFile)
58-
59-
remoteFile?.let {
60-
remoteFile.toOCFile()
61-
}
62-
}
63-
64-
private fun RemoteFile?.toOCFile(): OCFile = FileStorageUtils.fillOCFile(this)
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Nextcloud - Android Client
3+
*
4+
* SPDX-FileCopyrightText: 2026 Alper Ozturk <alper.ozturk@nextcloud.com>
5+
* SPDX-License-Identifier: AGPL-3.0-or-later
6+
*/
7+
8+
package com.nextcloud.utils.extensions
9+
10+
import com.owncloud.android.db.UploadResult
11+
12+
fun UploadResult.isPermanentFailure(): Boolean = when (this) {
13+
UploadResult.FILE_NOT_FOUND,
14+
UploadResult.FILE_ERROR,
15+
UploadResult.FOLDER_ERROR,
16+
UploadResult.CANNOT_CREATE_FILE,
17+
UploadResult.SYNC_CONFLICT,
18+
UploadResult.LOCAL_STORAGE_NOT_COPIED,
19+
UploadResult.VIRUS_DETECTED,
20+
UploadResult.QUOTA_EXCEEDED,
21+
UploadResult.SAME_FILE_CONFLICT,
22+
UploadResult.PRIVILEGES_ERROR,
23+
UploadResult.CREDENTIAL_ERROR,
24+
UploadResult.UNKNOWN,
25+
26+
// user's choice
27+
UploadResult.CANCELLED -> true
28+
29+
// Everything else may succeed after retry
30+
else -> false
31+
}

0 commit comments

Comments
 (0)