diff --git a/app/src/main/java/com/nextcloud/client/jobs/autoUpload/AutoUploadWorker.kt b/app/src/main/java/com/nextcloud/client/jobs/autoUpload/AutoUploadWorker.kt index 2c54909872ae..af43a1977be9 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/autoUpload/AutoUploadWorker.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/autoUpload/AutoUploadWorker.kt @@ -36,6 +36,7 @@ import com.owncloud.android.datamodel.SyncedFolder import com.owncloud.android.datamodel.SyncedFolderProvider import com.owncloud.android.datamodel.UploadsStorageManager import com.owncloud.android.db.OCUpload +import com.owncloud.android.db.UploadResult import com.owncloud.android.lib.common.OwnCloudAccount import com.owncloud.android.lib.common.OwnCloudClientManagerFactory import com.owncloud.android.lib.common.utils.Log_OC @@ -320,7 +321,14 @@ class AutoUploadWorker( ) try { - var (uploadEntity, upload) = createEntityAndUpload(user, localPath, remotePath) + val result = createEntityAndUpload(user, localPath, remotePath) + if (result == null) { + repository.markFileAsHandled(localPath, syncedFolder) + Log_OC.d(TAG, "Marked file as handled due to existing conflict: $localPath") + continue + } + + var (uploadEntity, upload) = result // if local file deleted, upload process cannot be started or retriable thus needs to be removed if (path.isEmpty() || !file.exists()) { @@ -349,7 +357,7 @@ class AutoUploadWorker( ) if (result.isSuccess) { - repository.markFileAsUploaded(localPath, syncedFolder) + repository.markFileAsHandled(localPath, syncedFolder) Log_OC.d(TAG, "✅ upload completed: $localPath") } else { Log_OC.e( @@ -393,7 +401,11 @@ class AutoUploadWorker( uploadsStorageManager.removeUpload(upload) } - private fun createEntityAndUpload(user: User, localPath: String, remotePath: String): Pair { + private fun createEntityAndUpload( + user: User, + localPath: String, + remotePath: String + ): Pair? { val (needsCharging, needsWifi, uploadAction) = getUploadSettings(syncedFolder) Log_OC.d(TAG, "creating oc upload for ${user.accountName}") @@ -404,6 +416,12 @@ class AutoUploadWorker( accountName = user.accountName ) + val lastUploadResult = uploadEntity?.lastResult?.let { UploadResult.fromValue(it) } + if (lastUploadResult == UploadResult.SYNC_CONFLICT) { + Log_OC.w(TAG, "Conflict already exists, skipping auto-upload: $localPath") + return null + } + val upload = ( uploadEntity?.toOCUpload(null) ?: OCUpload( localPath, diff --git a/app/src/main/java/com/nextcloud/client/jobs/autoUpload/FileSystemRepository.kt b/app/src/main/java/com/nextcloud/client/jobs/autoUpload/FileSystemRepository.kt index b322b1bc7fc4..9ff924c6aadf 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/autoUpload/FileSystemRepository.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/autoUpload/FileSystemRepository.kt @@ -63,7 +63,7 @@ class FileSystemRepository(private val dao: FileSystemDao, private val context: return filtered } - suspend fun markFileAsUploaded(localPath: String, syncedFolder: SyncedFolder) { + suspend fun markFileAsHandled(localPath: String, syncedFolder: SyncedFolder) { val syncedFolderIdStr = syncedFolder.id.toString() try {