File tree Expand file tree Collapse file tree
app/src/main/java/com/nextcloud Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -11,7 +11,7 @@ import com.nextcloud.client.database.entity.UploadEntity
1111import com.owncloud.android.db.OCUpload
1212
1313sealed 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()
Original file line number Diff line number Diff line change @@ -24,6 +24,7 @@ import com.nextcloud.client.jobs.upload.FileUploadWorker
2424import com.nextcloud.client.jobs.utils.UploadErrorNotificationManager
2525import com.nextcloud.client.network.ConnectivityService
2626import com.nextcloud.client.preferences.SubFolderRule
27+ import com.nextcloud.utils.extensions.isPermanentFailure
2728import com.nextcloud.utils.extensions.updateStatus
2829import com.owncloud.android.R
2930import 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 {
Original file line number Diff line number Diff line change @@ -9,13 +9,10 @@ package com.nextcloud.utils.extensions
99
1010import com.owncloud.android.MainApp
1111import com.owncloud.android.R
12- import com.owncloud.android.datamodel.OCFile
1312import com.owncloud.android.lib.common.operations.RemoteOperation
1413import com.owncloud.android.lib.common.operations.RemoteOperationResult
1514import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode
16- import com.owncloud.android.lib.resources.files.model.RemoteFile
1715import com.owncloud.android.utils.ErrorMessageAdapter
18- import com.owncloud.android.utils.FileStorageUtils
1916
2017@Suppress(" ReturnCount" )
2118fun 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 )
Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments