From 0da5f6fbb750436e182ad0f907b72a08c5c32383 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Wed, 1 Apr 2026 15:22:35 +0200 Subject: [PATCH] fix(conflict-resolve): skip auto upload file path check Signed-off-by: alperozturk96 --- .../client/jobs/BackgroundJobManager.kt | 7 ++++++- .../client/jobs/BackgroundJobManagerImpl.kt | 8 +++++++- .../client/jobs/upload/FileUploadHelper.kt | 17 ++++++++++------- .../client/jobs/upload/FileUploadWorker.kt | 8 +++++--- .../ui/activity/ConflictsResolveActivity.kt | 8 +++++++- 5 files changed, 35 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManager.kt b/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManager.kt index e7111715764d..a859e5808d56 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManager.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManager.kt @@ -131,7 +131,12 @@ interface BackgroundJobManager { fun startNotificationJob(subject: String, signature: String) fun startAccountRemovalJob(accountName: String, remoteWipe: Boolean) - fun startFilesUploadJob(user: User, uploadIds: LongArray, showSameFileAlreadyExistsNotification: Boolean) + fun startFilesUploadJob( + user: User, + uploadIds: LongArray, + showSameFileAlreadyExistsNotification: Boolean, + skipAutoUploadCheck: Boolean = false + ) fun getFileUploads(user: User): LiveData> fun cancelFilesUploadJob(user: User) fun isStartFileUploadJobScheduled(accountName: String): Boolean diff --git a/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManagerImpl.kt b/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManagerImpl.kt index efdd29733fc5..4a28b1715dea 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManagerImpl.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManagerImpl.kt @@ -622,7 +622,12 @@ internal class BackgroundJobManagerImpl( * and cannot be determined directly from the account name or a single function * within the worker. */ - override fun startFilesUploadJob(user: User, uploadIds: LongArray, showSameFileAlreadyExistsNotification: Boolean) { + override fun startFilesUploadJob( + user: User, + uploadIds: LongArray, + showSameFileAlreadyExistsNotification: Boolean, + skipAutoUploadCheck: Boolean + ) { defaultDispatcherScope.launch { val batchSize = FileUploadHelper.MAX_FILE_COUNT val batches = uploadIds.toList().chunked(batchSize) @@ -637,6 +642,7 @@ internal class BackgroundJobManagerImpl( FileUploadWorker.SHOW_SAME_FILE_ALREADY_EXISTS_NOTIFICATION, showSameFileAlreadyExistsNotification ) + .putBoolean(FileUploadWorker.SKIP_AUTO_UPLOAD_CHECK, skipAutoUploadCheck) .putString(FileUploadWorker.ACCOUNT, user.accountName) .putInt(FileUploadWorker.TOTAL_UPLOAD_SIZE, uploadIds.size) diff --git a/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadHelper.kt b/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadHelper.kt index e8c3a173311d..f1947b3287bf 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadHelper.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadHelper.kt @@ -449,16 +449,14 @@ class FileUploadHelper { } } + @JvmOverloads fun uploadUpdatedFile( user: User, - existingFiles: Array?, + existingFiles: Array, behaviour: Int, - nameCollisionPolicy: NameCollisionPolicy + nameCollisionPolicy: NameCollisionPolicy, + skipAutoUploadCheck: Boolean = false ) { - if (existingFiles == null) { - return - } - Log_OC.d(this, "upload updated file") val uploads = existingFiles.map { file -> @@ -496,7 +494,12 @@ class FileUploadHelper { } } val uploadIds: LongArray = uploads.filterNotNull().map { it.uploadId }.toLongArray() - backgroundJobManager.startFilesUploadJob(user, uploadIds, true) + backgroundJobManager.startFilesUploadJob( + user, + uploadIds, + true, + skipAutoUploadCheck + ) } /** diff --git a/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt b/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt index 84363e6f1543..4b4450f21434 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt @@ -80,7 +80,7 @@ class FileUploadWorker( const val CURRENT_BATCH_INDEX = "batch_index" const val TOTAL_UPLOAD_SIZE = "total_upload_size" const val SHOW_SAME_FILE_ALREADY_EXISTS_NOTIFICATION = "show_same_file_already_exists_notification" - + const val SKIP_AUTO_UPLOAD_CHECK = "skip_auto_upload_check" private const val BATCH_SIZE = 100 const val EXTRA_ACCOUNT_NAME = "ACCOUNT_NAME" @@ -234,6 +234,8 @@ class FileUploadWorker( return@withContext Result.failure() } + val skipAutoUploadCheck = inputData.getBoolean(SKIP_AUTO_UPLOAD_CHECK, false) + val user = optionalUser.get() val previouslyUploadedFileSize = currentBatchIndex * FileUploadHelper.MAX_FILE_COUNT val uploads = uploadsStorageManager.getUploadsByIds(uploadIds, accountName) @@ -245,7 +247,7 @@ class FileUploadWorker( for ((index, upload) in uploads.withIndex()) { ensureActive() - if (isBelongToAnySyncedFolder(upload, syncFolderHelper, syncedFolders)) { + if (!skipAutoUploadCheck && isBelongToAnySyncedFolder(upload, syncFolderHelper, syncedFolders)) { Log_OC.d(TAG, "skipping upload, will be handled by AutoUploadWorker: ${upload.localPath}") uploadsStorageManager.uploadDao.deleteByRemotePathAndAccountName( remotePath = upload.remotePath, @@ -445,7 +447,7 @@ class FileUploadWorker( if (accountName != null && remotePath != null) { val key: String = FileUploadHelper.buildRemoteName(accountName, remotePath) val boundListener = FileUploadHelper.mBoundListeners[key] - val filename = currentUploadFileOperation?.fileName ?: "" + val filename = currentUploadFileOperation.fileName ?: "" boundListener?.onTransferProgress( progressRate, diff --git a/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt index 878d2e38039c..e8ed8b5411dc 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt @@ -150,7 +150,13 @@ class ConflictsResolveActivity : private fun handleFile(file: OCFile?, upload: OCUpload?, user: User, policy: NameCollisionPolicy) { upload?.let { uploadHelper.removeFileUpload(it.remotePath, it.accountName) } - uploadHelper.uploadUpdatedFile(user, arrayOf(file), localBehaviour, policy) + uploadHelper.uploadUpdatedFile( + user, + arrayOf(file), + localBehaviour, + policy, + skipAutoUploadCheck = true + ) } private suspend fun keepServer(file: OCFile?, upload: OCUpload?, user: User) {