From f849cd76d452d0192f076ebb419bf2a65e173ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abel=20Garci=CC=81a=20de=20Prada?= Date: Tue, 11 May 2021 18:16:19 +0200 Subject: [PATCH] Make overwrite option disabled by default for move operations --- .../common/http/methods/webdav/MoveMethod.kt | 2 +- .../files/MoveRemoteFileOperation.kt | 30 +++++++++++-------- .../chunks/MoveRemoteChunksFileOperation.kt | 2 -- .../resources/files/services/ChunkService.kt | 1 - .../resources/files/services/FileService.kt | 1 - .../services/implementation/OCChunkService.kt | 4 +-- .../services/implementation/OCFileService.kt | 2 -- 7 files changed, 19 insertions(+), 23 deletions(-) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/MoveMethod.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/MoveMethod.kt index bc6d9d3e..8cb4c0e9 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/MoveMethod.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/MoveMethod.kt @@ -36,7 +36,7 @@ import java.net.URL class MoveMethod( url: URL, private val destinationUrl: String, - private val forceOverride: Boolean + private val forceOverride: Boolean = false ) : DavMethod(url) { @Throws(Exception::class) override fun onDavExecute(davResource: DavOCResource): Int { diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/MoveRemoteFileOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/MoveRemoteFileOperation.kt index 373574d1..5741766a 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/MoveRemoteFileOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/MoveRemoteFileOperation.kt @@ -49,7 +49,6 @@ import java.util.concurrent.TimeUnit open class MoveRemoteFileOperation( private val sourceRemotePath: String, private val targetRemotePath: String, - private val forceOverwrite: Boolean ) : RemoteOperation() { /** @@ -76,7 +75,6 @@ open class MoveRemoteFileOperation( val moveMethod = MoveMethod( url = URL(srcWebDavUri.toString() + WebdavUtils.encodePath(sourceRemotePath)), destinationUrl = client.userFilesWebDavUri.toString() + WebdavUtils.encodePath(targetRemotePath), - forceOverride = forceOverwrite ).apply { addRequestHeaders(this) setReadTimeout(MOVE_READ_TIMEOUT, TimeUnit.SECONDS) @@ -85,17 +83,21 @@ open class MoveRemoteFileOperation( val status = client.executeHttpMethod(moveMethod) - if (isSuccess(status)) { - result = RemoteOperationResult(ResultCode.OK) - } else if (status == HttpConstants.HTTP_PRECONDITION_FAILED && !forceOverwrite) { - result = RemoteOperationResult(ResultCode.INVALID_OVERWRITE) - client.exhaustResponse(moveMethod.getResponseBodyAsStream()) + when { + isSuccess(status) -> { + result = RemoteOperationResult(ResultCode.OK) + } + isPreconditionFailed(status) -> { + result = RemoteOperationResult(ResultCode.INVALID_OVERWRITE) + client.exhaustResponse(moveMethod.getResponseBodyAsStream()) - /// for other errors that could be explicitly handled, check first: - /// http://www.webdav.org/specs/rfc4918.html#rfc.section.9.9.4 - } else { - result = RemoteOperationResult(moveMethod) - client.exhaustResponse(moveMethod.getResponseBodyAsStream()) + /// for other errors that could be explicitly handled, check first: + /// http://www.webdav.org/specs/rfc4918.html#rfc.section.9.9.4 + } + else -> { + result = RemoteOperationResult(moveMethod) + client.exhaustResponse(moveMethod.getResponseBodyAsStream()) + } } Timber.i("Move $sourceRemotePath to $targetRemotePath: ${result.logMessage}") @@ -120,7 +122,9 @@ open class MoveRemoteFileOperation( open fun addRequestHeaders(moveMethod: MoveMethod) { } - protected fun isSuccess(status: Int) = status.isOneOf(HttpConstants.HTTP_CREATED, HttpConstants.HTTP_NO_CONTENT) + private fun isSuccess(status: Int) = status.isOneOf(HttpConstants.HTTP_CREATED, HttpConstants.HTTP_NO_CONTENT) + + private fun isPreconditionFailed(status: Int) = status == HttpConstants.HTTP_PRECONDITION_FAILED companion object { private const val MOVE_READ_TIMEOUT = 10L diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/MoveRemoteChunksFileOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/MoveRemoteChunksFileOperation.kt index fc8a0a96..9bdccd17 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/MoveRemoteChunksFileOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/MoveRemoteChunksFileOperation.kt @@ -38,13 +38,11 @@ import com.owncloud.android.lib.resources.files.MoveRemoteFileOperation class MoveRemoteChunksFileOperation( sourceRemotePath: String, targetRemotePath: String, - overwrite: Boolean, private val fileLastModificationTimestamp: String, private val fileLength: Long ) : MoveRemoteFileOperation( sourceRemotePath = sourceRemotePath, targetRemotePath = targetRemotePath, - forceOverwrite = overwrite ) { override fun getSrcWebDavUriForClient(client: OwnCloudClient): Uri = client.uploadsWebDavUri diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/ChunkService.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/ChunkService.kt index 895b3c14..10410b9e 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/ChunkService.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/ChunkService.kt @@ -35,7 +35,6 @@ interface ChunkService : Service { fun moveFile( sourceRemotePath: String, targetRemotePath: String, - overwrite: Boolean, fileLastModificationTimestamp: String, fileLength: Long ): RemoteOperationResult diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/FileService.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/FileService.kt index cc88667c..4df70a17 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/FileService.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/FileService.kt @@ -49,7 +49,6 @@ interface FileService : Service { fun moveFile( sourceRemotePath: String, targetRemotePath: String, - forceOverwrite: Boolean, ): RemoteOperationResult fun refreshFolder( diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/implementation/OCChunkService.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/implementation/OCChunkService.kt index 78068410..cf5d4820 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/implementation/OCChunkService.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/implementation/OCChunkService.kt @@ -38,15 +38,13 @@ class OCChunkService(override val client: OwnCloudClient) : ChunkService { override fun moveFile( sourceRemotePath: String, targetRemotePath: String, - overwrite: Boolean, fileLastModificationTimestamp: String, fileLength: Long ): RemoteOperationResult = MoveRemoteChunksFileOperation( sourceRemotePath = sourceRemotePath, targetRemotePath = targetRemotePath, - overwrite = overwrite, fileLastModificationTimestamp = fileLastModificationTimestamp, - fileLength = fileLength + fileLength = fileLength, ).execute(client) } diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/implementation/OCFileService.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/implementation/OCFileService.kt index 5111f0b1..e85f71a4 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/implementation/OCFileService.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/implementation/OCFileService.kt @@ -72,12 +72,10 @@ class OCFileService(override val client: OwnCloudClient) : FileService { override fun moveFile( sourceRemotePath: String, targetRemotePath: String, - forceOverwrite: Boolean ): RemoteOperationResult = MoveRemoteFileOperation( sourceRemotePath = sourceRemotePath, targetRemotePath = targetRemotePath, - forceOverwrite = forceOverwrite ).execute(client) override fun refreshFolder(remotePath: String): RemoteOperationResult> =