1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-07 16:06:08 +00:00

Fix shares parsing

This commit is contained in:
Abel García de Prada 2021-08-27 15:38:49 +02:00
parent 27b18c33a9
commit 45fb12df0e
10 changed files with 54 additions and 60 deletions

View File

@ -70,7 +70,7 @@ class CreateRemoteShareOperation(
private val shareType: ShareType,
private val shareWith: String,
private val permissions: Int
) : RemoteOperation<ShareParserResult>() {
) : RemoteOperation<ShareResponse>() {
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<ShareParserResult> {
var result: RemoteOperationResult<ShareParserResult>
override fun run(client: OwnCloudClient): RemoteOperationResult<ShareResponse> {
var result: RemoteOperationResult<ShareResponse>
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 {

View File

@ -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<Sh
private fun parseResponse(response: String): ShareResponse? {
val moshi = Moshi.Builder().build()
val type: Type = Types.newParameterizedType(CommonOcsResponse::class.java, ShareResponse::class.java)
val adapter: JsonAdapter<CommonOcsResponse<ShareResponse>> = 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<CommonOcsResponse<List<ShareItem>>> = moshi.adapter(commonOcsType)
return adapter.fromJson(response)?.ocs?.data?.let { listOfShareItems ->
ShareResponse(listOfShareItems.map { shareItem ->
shareItem.toRemoteShare()
})
}
}
private fun onResultUnsuccessful(

View File

@ -59,10 +59,10 @@ class GetRemoteSharesForFileOperation(
private val remoteFilePath: String,
private val reshares: Boolean,
private val subfiles: Boolean
) : RemoteOperation<ShareParserResult>() {
) : RemoteOperation<ShareResponse>() {
override fun run(client: OwnCloudClient): RemoteOperationResult<ShareParserResult> {
var result: RemoteOperationResult<ShareParserResult>
override fun run(client: OwnCloudClient): RemoteOperationResult<ShareResponse> {
var result: RemoteOperationResult<ShareResponse>
try {

View File

@ -48,10 +48,10 @@ import java.net.URL
*
* @param remoteShareId Share ID
*/
class RemoveRemoteShareOperation(private val remoteShareId: String) : RemoteOperation<ShareParserResult>() {
class RemoveRemoteShareOperation(private val remoteShareId: String) : RemoteOperation<ShareResponse>() {
override fun run(client: OwnCloudClient): RemoteOperationResult<ShareParserResult> {
var result: RemoteOperationResult<ShareParserResult>
override fun run(client: OwnCloudClient): RemoteOperationResult<ShareResponse> {
var result: RemoteOperationResult<ShareResponse>
try {
val requestUri = client.baseUri

View File

@ -25,4 +25,4 @@
package com.owncloud.android.lib.resources.shares
class ShareParserResult(val shares: List<RemoteShare>)
data class ShareResponse(val shares: List<RemoteShare>)

View File

@ -41,12 +41,12 @@ class ShareToRemoteOperationResultParser(private var shareXmlParser: ShareXMLPar
var ownCloudVersion: OwnCloudVersion? = null
var serverBaseUri: Uri? = null
fun parse(serverResponse: String?): RemoteOperationResult<ShareParserResult> {
fun parse(serverResponse: String?): RemoteOperationResult<ShareResponse> {
if (serverResponse.isNullOrEmpty()) {
return RemoteOperationResult(RemoteOperationResult.ResultCode.WRONG_SERVER_RESPONSE)
}
var result: RemoteOperationResult<ShareParserResult>
var result: RemoteOperationResult<ShareResponse>
val resultData: List<RemoteShare>?
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 {

View File

@ -57,7 +57,7 @@ class UpdateRemoteShareOperation
*/
private val remoteId: String
) : RemoteOperation<ShareParserResult>() {
) : RemoteOperation<ShareResponse>() {
/**
* 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<ShareParserResult> {
var result: RemoteOperationResult<ShareParserResult>
override fun run(client: OwnCloudClient): RemoteOperationResult<ShareResponse> {
var result: RemoteOperationResult<ShareResponse>
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) {

View File

@ -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<ShareItem>
) {
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
)
}

View File

@ -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<ShareParserResult>
): RemoteOperationResult<ShareResponse>
fun insertShare(
remoteFilePath: String,
@ -41,7 +41,7 @@ interface ShareService : Service {
password: String,
expirationDate: Long,
publicUpload: Boolean
): RemoteOperationResult<ShareParserResult>
): RemoteOperationResult<ShareResponse>
fun updateShare(
remoteId: String,
@ -50,7 +50,7 @@ interface ShareService : Service {
expirationDate: Long,
permissions: Int,
publicUpload: Boolean
): RemoteOperationResult<ShareParserResult>
): RemoteOperationResult<ShareResponse>
fun deleteShare(remoteId: String): RemoteOperationResult<ShareParserResult>
fun deleteShare(remoteId: String): RemoteOperationResult<ShareResponse>
}

View File

@ -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<ShareParserResult> = GetRemoteSharesForFileOperation(
): RemoteOperationResult<ShareResponse> = GetRemoteSharesForFileOperation(
remoteFilePath,
reshares,
subfiles
@ -51,7 +51,7 @@ class OCShareService(override val client: OwnCloudClient) :
password: String,
expirationDate: Long,
publicUpload: Boolean
): RemoteOperationResult<ShareParserResult> =
): RemoteOperationResult<ShareResponse> =
CreateRemoteShareOperation(
remoteFilePath,
shareType,
@ -72,7 +72,7 @@ class OCShareService(override val client: OwnCloudClient) :
expirationDate: Long,
permissions: Int,
publicUpload: Boolean
): RemoteOperationResult<ShareParserResult> =
): RemoteOperationResult<ShareResponse> =
UpdateRemoteShareOperation(
remoteId
).apply {
@ -84,7 +84,7 @@ class OCShareService(override val client: OwnCloudClient) :
this.retrieveShareDetails = true
}.execute(client)
override fun deleteShare(remoteId: String): RemoteOperationResult<ShareParserResult> =
override fun deleteShare(remoteId: String): RemoteOperationResult<ShareResponse> =
RemoveRemoteShareOperation(
remoteId
).execute(client)