mirror of
https://github.com/owncloud/android-library.git
synced 2025-06-07 16:06:08 +00:00
Showing decision dialog when moving file conflict.
Solving errors when copying, replace and keep both.
This commit is contained in:
parent
d81ca97f14
commit
5b64876e2c
@ -36,7 +36,7 @@ import java.net.URL
|
|||||||
class CopyMethod(
|
class CopyMethod(
|
||||||
val url: URL,
|
val url: URL,
|
||||||
private val destinationUrl: String,
|
private val destinationUrl: String,
|
||||||
private val forceOverride: Boolean = false
|
val forceOverride: Boolean = false
|
||||||
) : DavMethod(url) {
|
) : DavMethod(url) {
|
||||||
@Throws(Exception::class)
|
@Throws(Exception::class)
|
||||||
public override fun onDavExecute(davResource: DavOCResource): Int {
|
public override fun onDavExecute(davResource: DavOCResource): Int {
|
||||||
|
@ -36,7 +36,7 @@ import java.net.URL
|
|||||||
class MoveMethod(
|
class MoveMethod(
|
||||||
url: URL,
|
url: URL,
|
||||||
private val destinationUrl: String,
|
private val destinationUrl: String,
|
||||||
private val forceOverride: Boolean = false
|
val forceOverride: Boolean = false
|
||||||
) : DavMethod(url) {
|
) : DavMethod(url) {
|
||||||
@Throws(Exception::class)
|
@Throws(Exception::class)
|
||||||
override fun onDavExecute(davResource: DavOCResource): Int {
|
override fun onDavExecute(davResource: DavOCResource): Int {
|
||||||
|
@ -79,6 +79,7 @@ class CopyRemoteFileOperation(
|
|||||||
destinationUrl = (targetSpaceWebDavUrl ?: client.userFilesWebDavUri.toString()) + WebdavUtils.encodePath(targetRemotePath),
|
destinationUrl = (targetSpaceWebDavUrl ?: client.userFilesWebDavUri.toString()) + WebdavUtils.encodePath(targetRemotePath),
|
||||||
forceOverride = forceOverride,
|
forceOverride = forceOverride,
|
||||||
).apply {
|
).apply {
|
||||||
|
addRequestHeaders(this)
|
||||||
setReadTimeout(COPY_READ_TIMEOUT, TimeUnit.SECONDS)
|
setReadTimeout(COPY_READ_TIMEOUT, TimeUnit.SECONDS)
|
||||||
setConnectionTimeout(COPY_CONNECTION_TIMEOUT, TimeUnit.SECONDS)
|
setConnectionTimeout(COPY_CONNECTION_TIMEOUT, TimeUnit.SECONDS)
|
||||||
}
|
}
|
||||||
@ -111,6 +112,13 @@ class CopyRemoteFileOperation(
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun addRequestHeaders(copyMethod: CopyMethod) {
|
||||||
|
//Adding this because the library has an error whit override
|
||||||
|
if (copyMethod.forceOverride) {
|
||||||
|
copyMethod.setRequestHeader(OVERWRITE, TRUE)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private 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
|
private fun isPreconditionFailed(status: Int) = status == HttpConstants.HTTP_PRECONDITION_FAILED
|
||||||
@ -118,5 +126,7 @@ class CopyRemoteFileOperation(
|
|||||||
companion object {
|
companion object {
|
||||||
private const val COPY_READ_TIMEOUT = 10L
|
private const val COPY_READ_TIMEOUT = 10L
|
||||||
private const val COPY_CONNECTION_TIMEOUT = 6L
|
private const val COPY_CONNECTION_TIMEOUT = 6L
|
||||||
|
private const val OVERWRITE = "overwrite"
|
||||||
|
private const val TRUE = "T"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@ import java.util.concurrent.TimeUnit
|
|||||||
* @author David González Verdugo
|
* @author David González Verdugo
|
||||||
* @author Abel García de Prada
|
* @author Abel García de Prada
|
||||||
* @author Juan Carlos Garrote Gascón
|
* @author Juan Carlos Garrote Gascón
|
||||||
|
* @author Manuel Plazas Palacio
|
||||||
*
|
*
|
||||||
* @param sourceRemotePath Remote path of the file/folder to copy.
|
* @param sourceRemotePath Remote path of the file/folder to copy.
|
||||||
* @param targetRemotePath Remote path desired for the file/folder to copy it.
|
* @param targetRemotePath Remote path desired for the file/folder to copy it.
|
||||||
@ -54,6 +55,7 @@ open class MoveRemoteFileOperation(
|
|||||||
private val sourceRemotePath: String,
|
private val sourceRemotePath: String,
|
||||||
private val targetRemotePath: String,
|
private val targetRemotePath: String,
|
||||||
private val spaceWebDavUrl: String? = null,
|
private val spaceWebDavUrl: String? = null,
|
||||||
|
private val forceOverride: Boolean = false,
|
||||||
) : RemoteOperation<Unit>() {
|
) : RemoteOperation<Unit>() {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -80,6 +82,7 @@ open class MoveRemoteFileOperation(
|
|||||||
val moveMethod = MoveMethod(
|
val moveMethod = MoveMethod(
|
||||||
url = URL((spaceWebDavUrl ?: srcWebDavUri.toString()) + WebdavUtils.encodePath(sourceRemotePath)),
|
url = URL((spaceWebDavUrl ?: srcWebDavUri.toString()) + WebdavUtils.encodePath(sourceRemotePath)),
|
||||||
destinationUrl = (spaceWebDavUrl ?: client.userFilesWebDavUri.toString()) + WebdavUtils.encodePath(targetRemotePath),
|
destinationUrl = (spaceWebDavUrl ?: client.userFilesWebDavUri.toString()) + WebdavUtils.encodePath(targetRemotePath),
|
||||||
|
forceOverride = forceOverride,
|
||||||
).apply {
|
).apply {
|
||||||
addRequestHeaders(this)
|
addRequestHeaders(this)
|
||||||
setReadTimeout(MOVE_READ_TIMEOUT, TimeUnit.SECONDS)
|
setReadTimeout(MOVE_READ_TIMEOUT, TimeUnit.SECONDS)
|
||||||
@ -92,6 +95,7 @@ open class MoveRemoteFileOperation(
|
|||||||
isSuccess(status) -> {
|
isSuccess(status) -> {
|
||||||
result = RemoteOperationResult<Unit>(ResultCode.OK)
|
result = RemoteOperationResult<Unit>(ResultCode.OK)
|
||||||
}
|
}
|
||||||
|
|
||||||
isPreconditionFailed(status) -> {
|
isPreconditionFailed(status) -> {
|
||||||
result = RemoteOperationResult<Unit>(ResultCode.INVALID_OVERWRITE)
|
result = RemoteOperationResult<Unit>(ResultCode.INVALID_OVERWRITE)
|
||||||
client.exhaustResponse(moveMethod.getResponseBodyAsStream())
|
client.exhaustResponse(moveMethod.getResponseBodyAsStream())
|
||||||
@ -99,6 +103,7 @@ open class MoveRemoteFileOperation(
|
|||||||
/// for other errors that could be explicitly handled, check first:
|
/// for other errors that could be explicitly handled, check first:
|
||||||
/// http://www.webdav.org/specs/rfc4918.html#rfc.section.9.9.4
|
/// http://www.webdav.org/specs/rfc4918.html#rfc.section.9.9.4
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
result = RemoteOperationResult<Unit>(moveMethod)
|
result = RemoteOperationResult<Unit>(moveMethod)
|
||||||
client.exhaustResponse(moveMethod.getResponseBodyAsStream())
|
client.exhaustResponse(moveMethod.getResponseBodyAsStream())
|
||||||
@ -125,6 +130,10 @@ open class MoveRemoteFileOperation(
|
|||||||
* In case new headers are needed, override this method
|
* In case new headers are needed, override this method
|
||||||
*/
|
*/
|
||||||
open fun addRequestHeaders(moveMethod: MoveMethod) {
|
open fun addRequestHeaders(moveMethod: MoveMethod) {
|
||||||
|
//Adding this because the library has an error whit override
|
||||||
|
if (moveMethod.forceOverride) {
|
||||||
|
moveMethod.setRequestHeader(OVERWRITE, TRUE)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private 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)
|
||||||
@ -134,5 +143,7 @@ open class MoveRemoteFileOperation(
|
|||||||
companion object {
|
companion object {
|
||||||
private const val MOVE_READ_TIMEOUT = 10L
|
private const val MOVE_READ_TIMEOUT = 10L
|
||||||
private const val MOVE_CONNECTION_TIMEOUT = 6L
|
private const val MOVE_CONNECTION_TIMEOUT = 6L
|
||||||
|
private const val OVERWRITE = "overwrite"
|
||||||
|
private const val TRUE = "T"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -58,6 +58,7 @@ interface FileService : Service {
|
|||||||
sourceRemotePath: String,
|
sourceRemotePath: String,
|
||||||
targetRemotePath: String,
|
targetRemotePath: String,
|
||||||
spaceWebDavUrl: String?,
|
spaceWebDavUrl: String?,
|
||||||
|
replace: Boolean,
|
||||||
): RemoteOperationResult<Unit>
|
): RemoteOperationResult<Unit>
|
||||||
|
|
||||||
fun readFile(
|
fun readFile(
|
||||||
|
@ -90,11 +90,13 @@ class OCFileService(override val client: OwnCloudClient) : FileService {
|
|||||||
sourceRemotePath: String,
|
sourceRemotePath: String,
|
||||||
targetRemotePath: String,
|
targetRemotePath: String,
|
||||||
spaceWebDavUrl: String?,
|
spaceWebDavUrl: String?,
|
||||||
|
replace: Boolean,
|
||||||
): RemoteOperationResult<Unit> =
|
): RemoteOperationResult<Unit> =
|
||||||
MoveRemoteFileOperation(
|
MoveRemoteFileOperation(
|
||||||
sourceRemotePath = sourceRemotePath,
|
sourceRemotePath = sourceRemotePath,
|
||||||
targetRemotePath = targetRemotePath,
|
targetRemotePath = targetRemotePath,
|
||||||
spaceWebDavUrl = spaceWebDavUrl,
|
spaceWebDavUrl = spaceWebDavUrl,
|
||||||
|
forceOverride = replace,
|
||||||
).execute(client)
|
).execute(client)
|
||||||
|
|
||||||
override fun readFile(
|
override fun readFile(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user