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 shareType: ShareType,
private val shareWith: String, private val shareWith: String,
private val permissions: Int private val permissions: Int
) : RemoteOperation<ShareParserResult>() { ) : RemoteOperation<ShareResponse>() {
var name = "" // Name to set for the public link var name = "" // Name to set for the public link
var password: String = "" // Password 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 var retrieveShareDetails = false // To retrieve more info about the just created share
override fun run(client: OwnCloudClient): RemoteOperationResult<ShareParserResult> { override fun run(client: OwnCloudClient): RemoteOperationResult<ShareResponse> {
var result: RemoteOperationResult<ShareParserResult> var result: RemoteOperationResult<ShareResponse>
try { try {
val formBodyBuilder = FormBody.Builder() val formBodyBuilder = FormBody.Builder()
@ -142,7 +142,7 @@ class CreateRemoteShareOperation(
val remoteOperationResult = getShares.execute(client) val remoteOperationResult = getShares.execute(client)
result = RemoteOperationResult(remoteOperationResult) result = RemoteOperationResult(remoteOperationResult)
result.data = ShareParserResult(remoteOperationResult.data.toRemoteShare()) result.data = remoteOperationResult.data
} }
} else { } 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.RemoteOperation
import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.common.operations.RemoteOperationResult
import com.owncloud.android.lib.resources.CommonOcsResponse 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.JsonAdapter
import com.squareup.moshi.Moshi import com.squareup.moshi.Moshi
import com.squareup.moshi.Types import com.squareup.moshi.Types
@ -49,9 +49,14 @@ class GetRemoteShareOperation(private val remoteId: String) : RemoteOperation<Sh
private fun parseResponse(response: String): ShareResponse? { private fun parseResponse(response: String): ShareResponse? {
val moshi = Moshi.Builder().build() val moshi = Moshi.Builder().build()
val type: Type = Types.newParameterizedType(CommonOcsResponse::class.java, ShareResponse::class.java) val listOfShareItemType: Type = Types.newParameterizedType(List::class.java, ShareItem::class.java)
val adapter: JsonAdapter<CommonOcsResponse<ShareResponse>> = moshi.adapter(type) val commonOcsType: Type = Types.newParameterizedType(CommonOcsResponse::class.java, listOfShareItemType)
return adapter.fromJson(response)!!.ocs.data 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( private fun onResultUnsuccessful(

View File

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

View File

@ -48,10 +48,10 @@ import java.net.URL
* *
* @param remoteShareId Share ID * @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> { override fun run(client: OwnCloudClient): RemoteOperationResult<ShareResponse> {
var result: RemoteOperationResult<ShareParserResult> var result: RemoteOperationResult<ShareResponse>
try { try {
val requestUri = client.baseUri val requestUri = client.baseUri

View File

@ -25,4 +25,4 @@
package com.owncloud.android.lib.resources.shares 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 ownCloudVersion: OwnCloudVersion? = null
var serverBaseUri: Uri? = null var serverBaseUri: Uri? = null
fun parse(serverResponse: String?): RemoteOperationResult<ShareParserResult> { fun parse(serverResponse: String?): RemoteOperationResult<ShareResponse> {
if (serverResponse.isNullOrEmpty()) { if (serverResponse.isNullOrEmpty()) {
return RemoteOperationResult(RemoteOperationResult.ResultCode.WRONG_SERVER_RESPONSE) return RemoteOperationResult(RemoteOperationResult.ResultCode.WRONG_SERVER_RESPONSE)
} }
var result: RemoteOperationResult<ShareParserResult> var result: RemoteOperationResult<ShareResponse>
val resultData: List<RemoteShare>? val resultData: List<RemoteShare>?
try { try {
@ -82,7 +82,7 @@ class ShareToRemoteOperationResultParser(private var shareXmlParser: ShareXMLPar
} }
if (resultData != null) { if (resultData != null) {
result.setData(ShareParserResult(ArrayList(resultData.toMutableList()))) result.setData(ShareResponse(ArrayList(resultData.toMutableList())))
} }
} else { } else {

View File

@ -57,7 +57,7 @@ class UpdateRemoteShareOperation
*/ */
private val remoteId: String private val remoteId: String
) : RemoteOperation<ShareParserResult>() { ) : RemoteOperation<ShareResponse>() {
/** /**
* Name to update in Share resource. Ignored by servers previous to version 10.0.0 * 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 var retrieveShareDetails = false // To retrieve more info about the just updated share
override fun run(client: OwnCloudClient): RemoteOperationResult<ShareParserResult> { override fun run(client: OwnCloudClient): RemoteOperationResult<ShareResponse> {
var result: RemoteOperationResult<ShareParserResult> var result: RemoteOperationResult<ShareResponse>
try { try {
val formBodyBuilder = FormBody.Builder() val formBodyBuilder = FormBody.Builder()
@ -169,10 +169,7 @@ class UpdateRemoteShareOperation
val getShares = GetRemoteShareOperation( val getShares = GetRemoteShareOperation(
emptyShare.id emptyShare.id
) )
val remoteOperationResult = getShares.execute(client) result = getShares.execute(client)
result = RemoteOperationResult(remoteOperationResult)
result.data = ShareParserResult(remoteOperationResult.data.toRemoteShare())
} }
} catch (e: Exception) { } catch (e: Exception) {

View File

@ -31,30 +31,6 @@ import com.owncloud.android.lib.resources.shares.ShareType
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
import java.io.File 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) @JsonClass(generateAdapter = true)
data class ShareItem( data class ShareItem(
val id: String? = null, val id: String? = null,
@ -69,4 +45,20 @@ data class ShareItem(
val permissions: Int? = null, val permissions: Int? = null,
val sharedDate: Long? = null, val sharedDate: Long? = null,
val expirationDate: 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.common.operations.RemoteOperationResult
import com.owncloud.android.lib.resources.Service 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 import com.owncloud.android.lib.resources.shares.ShareType
interface ShareService : Service { interface ShareService : Service {
@ -30,7 +30,7 @@ interface ShareService : Service {
remoteFilePath: String, remoteFilePath: String,
reshares: Boolean, reshares: Boolean,
subfiles: Boolean subfiles: Boolean
): RemoteOperationResult<ShareParserResult> ): RemoteOperationResult<ShareResponse>
fun insertShare( fun insertShare(
remoteFilePath: String, remoteFilePath: String,
@ -41,7 +41,7 @@ interface ShareService : Service {
password: String, password: String,
expirationDate: Long, expirationDate: Long,
publicUpload: Boolean publicUpload: Boolean
): RemoteOperationResult<ShareParserResult> ): RemoteOperationResult<ShareResponse>
fun updateShare( fun updateShare(
remoteId: String, remoteId: String,
@ -50,7 +50,7 @@ interface ShareService : Service {
expirationDate: Long, expirationDate: Long,
permissions: Int, permissions: Int,
publicUpload: Boolean 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.CreateRemoteShareOperation
import com.owncloud.android.lib.resources.shares.GetRemoteSharesForFileOperation import com.owncloud.android.lib.resources.shares.GetRemoteSharesForFileOperation
import com.owncloud.android.lib.resources.shares.RemoveRemoteShareOperation 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.ShareType
import com.owncloud.android.lib.resources.shares.UpdateRemoteShareOperation import com.owncloud.android.lib.resources.shares.UpdateRemoteShareOperation
import com.owncloud.android.lib.resources.shares.services.ShareService import com.owncloud.android.lib.resources.shares.services.ShareService
@ -36,7 +36,7 @@ class OCShareService(override val client: OwnCloudClient) :
remoteFilePath: String, remoteFilePath: String,
reshares: Boolean, reshares: Boolean,
subfiles: Boolean subfiles: Boolean
): RemoteOperationResult<ShareParserResult> = GetRemoteSharesForFileOperation( ): RemoteOperationResult<ShareResponse> = GetRemoteSharesForFileOperation(
remoteFilePath, remoteFilePath,
reshares, reshares,
subfiles subfiles
@ -51,7 +51,7 @@ class OCShareService(override val client: OwnCloudClient) :
password: String, password: String,
expirationDate: Long, expirationDate: Long,
publicUpload: Boolean publicUpload: Boolean
): RemoteOperationResult<ShareParserResult> = ): RemoteOperationResult<ShareResponse> =
CreateRemoteShareOperation( CreateRemoteShareOperation(
remoteFilePath, remoteFilePath,
shareType, shareType,
@ -72,7 +72,7 @@ class OCShareService(override val client: OwnCloudClient) :
expirationDate: Long, expirationDate: Long,
permissions: Int, permissions: Int,
publicUpload: Boolean publicUpload: Boolean
): RemoteOperationResult<ShareParserResult> = ): RemoteOperationResult<ShareResponse> =
UpdateRemoteShareOperation( UpdateRemoteShareOperation(
remoteId remoteId
).apply { ).apply {
@ -84,7 +84,7 @@ class OCShareService(override val client: OwnCloudClient) :
this.retrieveShareDetails = true this.retrieveShareDetails = true
}.execute(client) }.execute(client)
override fun deleteShare(remoteId: String): RemoteOperationResult<ShareParserResult> = override fun deleteShare(remoteId: String): RemoteOperationResult<ShareResponse> =
RemoveRemoteShareOperation( RemoveRemoteShareOperation(
remoteId remoteId
).execute(client) ).execute(client)