mirror of
				https://github.com/owncloud/android-library.git
				synced 2025-10-31 10:27:45 +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