diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.kt index 29379646..1db73eae 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.kt @@ -70,7 +70,7 @@ class CreateRemoteShareOperation( private val shareType: ShareType, private val shareWith: String, private val permissions: Int -) : RemoteOperation() { +) : RemoteOperation() { var name = "" // Name to set for the public link var password: String = "" // Password to set for the public link @@ -81,8 +81,8 @@ class CreateRemoteShareOperation( var retrieveShareDetails = false // To retrieve more info about the just created share - override fun run(client: OwnCloudClient): RemoteOperationResult { - var result: RemoteOperationResult + override fun run(client: OwnCloudClient): RemoteOperationResult { + var result: RemoteOperationResult try { val formBodyBuilder = FormBody.Builder() @@ -142,7 +142,7 @@ class CreateRemoteShareOperation( val remoteOperationResult = getShares.execute(client) result = RemoteOperationResult(remoteOperationResult) - result.data = ShareParserResult(remoteOperationResult.data.toRemoteShare()) + result.data = remoteOperationResult.data } } else { diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.kt index 9bf4d1d8..9e0cfd71 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.kt @@ -30,7 +30,7 @@ import com.owncloud.android.lib.common.http.methods.nonwebdav.GetMethod import com.owncloud.android.lib.common.operations.RemoteOperation import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.resources.CommonOcsResponse -import com.owncloud.android.lib.resources.shares.responses.ShareResponse +import com.owncloud.android.lib.resources.shares.responses.ShareItem import com.squareup.moshi.JsonAdapter import com.squareup.moshi.Moshi import com.squareup.moshi.Types @@ -49,9 +49,14 @@ class GetRemoteShareOperation(private val remoteId: String) : RemoteOperation> = moshi.adapter(type) - return adapter.fromJson(response)!!.ocs.data + val listOfShareItemType: Type = Types.newParameterizedType(List::class.java, ShareItem::class.java) + val commonOcsType: Type = Types.newParameterizedType(CommonOcsResponse::class.java, listOfShareItemType) + val adapter: JsonAdapter>> = moshi.adapter(commonOcsType) + return adapter.fromJson(response)?.ocs?.data?.let { listOfShareItems -> + ShareResponse(listOfShareItems.map { shareItem -> + shareItem.toRemoteShare() + }) + } } private fun onResultUnsuccessful( diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.kt index ea1d7e2a..6a866e51 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.kt @@ -59,10 +59,10 @@ class GetRemoteSharesForFileOperation( private val remoteFilePath: String, private val reshares: Boolean, private val subfiles: Boolean -) : RemoteOperation() { +) : RemoteOperation() { - override fun run(client: OwnCloudClient): RemoteOperationResult { - var result: RemoteOperationResult + override fun run(client: OwnCloudClient): RemoteOperationResult { + var result: RemoteOperationResult try { diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoveRemoteShareOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoveRemoteShareOperation.kt index a7d18e5d..a9ff69c6 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoveRemoteShareOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoveRemoteShareOperation.kt @@ -48,10 +48,10 @@ import java.net.URL * * @param remoteShareId Share ID */ -class RemoveRemoteShareOperation(private val remoteShareId: String) : RemoteOperation() { +class RemoveRemoteShareOperation(private val remoteShareId: String) : RemoteOperation() { - override fun run(client: OwnCloudClient): RemoteOperationResult { - var result: RemoteOperationResult + override fun run(client: OwnCloudClient): RemoteOperationResult { + var result: RemoteOperationResult try { val requestUri = client.baseUri diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareParserResult.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareResponse.kt similarity index 95% rename from owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareParserResult.kt rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareResponse.kt index dd5f19df..0421064c 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareParserResult.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareResponse.kt @@ -25,4 +25,4 @@ package com.owncloud.android.lib.resources.shares -class ShareParserResult(val shares: List) +data class ShareResponse(val shares: List) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareToRemoteOperationResultParser.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareToRemoteOperationResultParser.kt index 6e55fd51..389ded4e 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareToRemoteOperationResultParser.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareToRemoteOperationResultParser.kt @@ -41,12 +41,12 @@ class ShareToRemoteOperationResultParser(private var shareXmlParser: ShareXMLPar var ownCloudVersion: OwnCloudVersion? = null var serverBaseUri: Uri? = null - fun parse(serverResponse: String?): RemoteOperationResult { + fun parse(serverResponse: String?): RemoteOperationResult { if (serverResponse.isNullOrEmpty()) { return RemoteOperationResult(RemoteOperationResult.ResultCode.WRONG_SERVER_RESPONSE) } - var result: RemoteOperationResult + var result: RemoteOperationResult val resultData: List? try { @@ -82,7 +82,7 @@ class ShareToRemoteOperationResultParser(private var shareXmlParser: ShareXMLPar } if (resultData != null) { - result.setData(ShareParserResult(ArrayList(resultData.toMutableList()))) + result.setData(ShareResponse(ArrayList(resultData.toMutableList()))) } } else { diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.kt index c1173d66..0ddb69a1 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.kt @@ -57,7 +57,7 @@ class UpdateRemoteShareOperation */ private val remoteId: String -) : RemoteOperation() { +) : RemoteOperation() { /** * Name to update in Share resource. Ignored by servers previous to version 10.0.0 * @@ -99,8 +99,8 @@ class UpdateRemoteShareOperation var retrieveShareDetails = false // To retrieve more info about the just updated share - override fun run(client: OwnCloudClient): RemoteOperationResult { - var result: RemoteOperationResult + override fun run(client: OwnCloudClient): RemoteOperationResult { + var result: RemoteOperationResult try { val formBodyBuilder = FormBody.Builder() @@ -169,10 +169,7 @@ class UpdateRemoteShareOperation val getShares = GetRemoteShareOperation( emptyShare.id ) - val remoteOperationResult = getShares.execute(client) - - result = RemoteOperationResult(remoteOperationResult) - result.data = ShareParserResult(remoteOperationResult.data.toRemoteShare()) + result = getShares.execute(client) } } catch (e: Exception) { diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareResponse.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareItem.kt similarity index 62% rename from owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareResponse.kt rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareItem.kt index 6c472670..9f1ad0c9 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareResponse.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareItem.kt @@ -31,30 +31,6 @@ import com.owncloud.android.lib.resources.shares.ShareType import com.squareup.moshi.JsonClass import java.io.File - -@JsonClass(generateAdapter = true) -data class ShareResponse( - val shares: List -) { - fun toRemoteShare() = this.shares.map { shareItem -> - RemoteShare( - id = shareItem.id ?: "0", - shareWith = shareItem.shareWith.orEmpty(), - path = shareItem.path.orEmpty(), - token = shareItem.token.orEmpty(), - sharedWithDisplayName = shareItem.sharedWithDisplayName.orEmpty(), - sharedWithAdditionalInfo = shareItem.sharedWithAdditionalInfo.orEmpty(), - name = shareItem.name.orEmpty(), - shareLink = shareItem.shareLink.orEmpty(), - shareType = ShareType.values().firstOrNull { it.value == shareItem.shareType } ?: ShareType.UNKNOWN, - permissions = shareItem.permissions ?: DEFAULT_PERMISSION, - sharedDate = shareItem.sharedDate ?: INIT_SHARED_DATE, - expirationDate = shareItem.expirationDate ?: INIT_EXPIRATION_DATE_IN_MILLIS, - isFolder = shareItem.path?.endsWith(File.separator) ?: false - ) - } -} - @JsonClass(generateAdapter = true) data class ShareItem( val id: String? = null, @@ -69,4 +45,20 @@ data class ShareItem( val permissions: Int? = null, val sharedDate: Long? = null, val expirationDate: Long? = null, -) +) { + fun toRemoteShare() = RemoteShare( + id = id ?: "0", + shareWith = shareWith.orEmpty(), + path = path.orEmpty(), + token = token.orEmpty(), + sharedWithDisplayName = sharedWithDisplayName.orEmpty(), + sharedWithAdditionalInfo = sharedWithAdditionalInfo.orEmpty(), + name = name.orEmpty(), + shareLink = shareLink.orEmpty(), + shareType = ShareType.values().firstOrNull { it.value == shareType } ?: ShareType.UNKNOWN, + permissions = permissions ?: DEFAULT_PERMISSION, + sharedDate = sharedDate ?: INIT_SHARED_DATE, + expirationDate = expirationDate ?: INIT_EXPIRATION_DATE_IN_MILLIS, + isFolder = path?.endsWith(File.separator) ?: false + ) +} diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/ShareService.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/ShareService.kt index caca3cd8..728217bb 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/ShareService.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/ShareService.kt @@ -22,7 +22,7 @@ package com.owncloud.android.lib.resources.shares.services import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.resources.Service -import com.owncloud.android.lib.resources.shares.ShareParserResult +import com.owncloud.android.lib.resources.shares.ShareResponse import com.owncloud.android.lib.resources.shares.ShareType interface ShareService : Service { @@ -30,7 +30,7 @@ interface ShareService : Service { remoteFilePath: String, reshares: Boolean, subfiles: Boolean - ): RemoteOperationResult + ): RemoteOperationResult fun insertShare( remoteFilePath: String, @@ -41,7 +41,7 @@ interface ShareService : Service { password: String, expirationDate: Long, publicUpload: Boolean - ): RemoteOperationResult + ): RemoteOperationResult fun updateShare( remoteId: String, @@ -50,7 +50,7 @@ interface ShareService : Service { expirationDate: Long, permissions: Int, publicUpload: Boolean - ): RemoteOperationResult + ): RemoteOperationResult - fun deleteShare(remoteId: String): RemoteOperationResult + fun deleteShare(remoteId: String): RemoteOperationResult } diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/implementation/OCShareService.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/implementation/OCShareService.kt index 109c2204..0d9f36b1 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/implementation/OCShareService.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/implementation/OCShareService.kt @@ -25,7 +25,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.resources.shares.CreateRemoteShareOperation import com.owncloud.android.lib.resources.shares.GetRemoteSharesForFileOperation import com.owncloud.android.lib.resources.shares.RemoveRemoteShareOperation -import com.owncloud.android.lib.resources.shares.ShareParserResult +import com.owncloud.android.lib.resources.shares.ShareResponse import com.owncloud.android.lib.resources.shares.ShareType import com.owncloud.android.lib.resources.shares.UpdateRemoteShareOperation import com.owncloud.android.lib.resources.shares.services.ShareService @@ -36,7 +36,7 @@ class OCShareService(override val client: OwnCloudClient) : remoteFilePath: String, reshares: Boolean, subfiles: Boolean - ): RemoteOperationResult = GetRemoteSharesForFileOperation( + ): RemoteOperationResult = GetRemoteSharesForFileOperation( remoteFilePath, reshares, subfiles @@ -51,7 +51,7 @@ class OCShareService(override val client: OwnCloudClient) : password: String, expirationDate: Long, publicUpload: Boolean - ): RemoteOperationResult = + ): RemoteOperationResult = CreateRemoteShareOperation( remoteFilePath, shareType, @@ -72,7 +72,7 @@ class OCShareService(override val client: OwnCloudClient) : expirationDate: Long, permissions: Int, publicUpload: Boolean - ): RemoteOperationResult = + ): RemoteOperationResult = UpdateRemoteShareOperation( remoteId ).apply { @@ -84,7 +84,7 @@ class OCShareService(override val client: OwnCloudClient) : this.retrieveShareDetails = true }.execute(client) - override fun deleteShare(remoteId: String): RemoteOperationResult = + override fun deleteShare(remoteId: String): RemoteOperationResult = RemoveRemoteShareOperation( remoteId ).execute(client)