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 a8c2d68b7b..fba6b72f37 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 @@ -33,6 +33,7 @@ import com.owncloud.android.lib.common.http.methods.nonwebdav.PostMethod import com.owncloud.android.lib.common.operations.RemoteOperation import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.common.utils.Log_OC +import com.owncloud.android.lib.resources.shares.RemoteShare.Companion.INIT_EXPIRATION_DATE_IN_MILLIS import okhttp3.FormBody import java.net.URL import java.text.SimpleDateFormat @@ -75,7 +76,7 @@ class CreateRemoteShareOperation var password: String?, // Password to set for the public link var permissions: Int // Access permissions for the file bound to the share ) : RemoteOperation() { - var getShareDetails: Boolean = false + var getShareDetails: Boolean = false // To retrieve more info about the just created share /** * Name to set for the public link @@ -85,7 +86,7 @@ class CreateRemoteShareOperation /** * Expiration date to set for the public link */ - var expirationDateInMillis: Long = INITIAL_EXPIRATION_DATE_IN_MILLIS + var expirationDateInMillis: Long = INIT_EXPIRATION_DATE_IN_MILLIS init { getShareDetails = false // defaults to false for backwards compatibility @@ -104,7 +105,7 @@ class CreateRemoteShareOperation formBodyBuilder.add(PARAM_NAME, name) } - if (expirationDateInMillis > INITIAL_EXPIRATION_DATE_IN_MILLIS) { + if (expirationDateInMillis > INIT_EXPIRATION_DATE_IN_MILLIS) { val dateFormat = SimpleDateFormat(FORMAT_EXPIRATION_DATE, Locale.getDefault()) val expirationDate = Calendar.getInstance() expirationDate.timeInMillis = expirationDateInMillis @@ -116,7 +117,7 @@ class CreateRemoteShareOperation formBodyBuilder.add(PARAM_PUBLIC_UPLOAD, publicUpload.toString()) } if (!password.isNullOrEmpty()) { - formBodyBuilder.add(PARAM_PASSWORD, password!!) + formBodyBuilder.add(PARAM_PASSWORD, password) } if (RemoteShare.DEFAULT_PERMISSION != permissions) { formBodyBuilder.add(PARAM_PERMISSIONS, Integer.toString(permissions)) @@ -168,24 +169,19 @@ class CreateRemoteShareOperation return result } - private fun isSuccess(status: Int): Boolean { - return status == HttpConstants.HTTP_OK - } + private fun isSuccess(status: Int): Boolean = status == HttpConstants.HTTP_OK companion object { - private val TAG = CreateRemoteShareOperation::class.java.simpleName - private val PARAM_NAME = "name" - private val PARAM_PASSWORD = "password" - private val PARAM_EXPIRATION_DATE = "expireDate" - private val PARAM_PUBLIC_UPLOAD = "publicUpload" - private val PARAM_PATH = "path" - private val PARAM_SHARE_TYPE = "shareType" - private val PARAM_SHARE_WITH = "shareWith" - private val PARAM_PERMISSIONS = "permissions" - private val FORMAT_EXPIRATION_DATE = "yyyy-MM-dd" - - const val INITIAL_EXPIRATION_DATE_IN_MILLIS : Long = 0 + private const val PARAM_NAME = "name" + private const val PARAM_PASSWORD = "password" + private const val PARAM_EXPIRATION_DATE = "expireDate" + private const val PARAM_PUBLIC_UPLOAD = "publicUpload" + private const val PARAM_PATH = "path" + private const val PARAM_SHARE_TYPE = "shareType" + private const val PARAM_SHARE_WITH = "shareWith" + private const val PARAM_PERMISSIONS = "permissions" + private const val FORMAT_EXPIRATION_DATE = "yyyy-MM-dd" } } \ No newline at end of file diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.java deleted file mode 100644 index e788cb25cb..0000000000 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.java +++ /dev/null @@ -1,124 +0,0 @@ -/* ownCloud Android Library is available under MIT license - * @author masensio - * @author David A. Velasco - * @author David González Verdugo - * Copyright (C) 2019 ownCloud GmbH. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - */ - -package com.owncloud.android.lib.resources.shares; - -import android.net.Uri; - -import com.owncloud.android.lib.common.OwnCloudClient; -import com.owncloud.android.lib.common.http.HttpConstants; -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.common.utils.Log_OC; - -import java.net.URL; - -/** - * Provide a list shares for a specific file. - * The input is the full path of the desired file. - * The output is a list of everyone who has the file shared with them. - * - * @author masensio - * @author David A. Velasco - * @author David González Verdugo - */ -public class GetRemoteSharesForFileOperation extends RemoteOperation { - - private static final String TAG = GetRemoteSharesForFileOperation.class.getSimpleName(); - - private static final String PARAM_PATH = "path"; - private static final String PARAM_RESHARES = "reshares"; - private static final String PARAM_SUBFILES = "subfiles"; - - private String mRemoteFilePath; - private boolean mReshares; - private boolean mSubfiles; - - /** - * Constructor - * - * @param remoteFilePath Path to file or folder - * @param reshares If set to false (default), only shares owned by the current user are - * returned. - * If set to true, shares owned by any user from the given file are returned. - * @param subfiles If set to false (default), lists only the folder being shared - * If set to true, all shared files within the folder are returned. - */ - public GetRemoteSharesForFileOperation(String remoteFilePath, boolean reshares, - boolean subfiles) { - mRemoteFilePath = remoteFilePath; - mReshares = reshares; - mSubfiles = subfiles; - } - - @Override - protected RemoteOperationResult run(OwnCloudClient client) { - RemoteOperationResult result; - - try { - - Uri requestUri = client.getBaseUri(); - Uri.Builder uriBuilder = requestUri.buildUpon(); - uriBuilder.appendEncodedPath(ShareUtils.SHARING_API_PATH); - uriBuilder.appendQueryParameter(PARAM_PATH, mRemoteFilePath); - uriBuilder.appendQueryParameter(PARAM_RESHARES, String.valueOf(mReshares)); - uriBuilder.appendQueryParameter(PARAM_SUBFILES, String.valueOf(mSubfiles)); - - GetMethod getMethod = new GetMethod(new URL(uriBuilder.build().toString())); - - getMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE); - - int status = client.executeHttpMethod(getMethod); - - if (isSuccess(status)) { - // Parse xml response and obtain the list of shares - ShareToRemoteOperationResultParser parser = new ShareToRemoteOperationResultParser( - new ShareXMLParser() - ); - parser.setOwnCloudVersion(client.getOwnCloudVersion()); - parser.setServerBaseUri(client.getBaseUri()); - result = parser.parse(getMethod.getResponseBodyAsString()); - - if (result.isSuccess()) { - Log_OC.d(TAG, "Got " + result.getData().getShares().size() + " shares"); - } - } else { - result = new RemoteOperationResult<>(getMethod); - } - } catch (Exception e) { - result = new RemoteOperationResult<>(e); - Log_OC.e(TAG, "Exception while getting shares", e); - } - - return result; - } - - private boolean isSuccess(int status) { - return (status == HttpConstants.HTTP_OK); - } -} \ No newline at end of file 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 new file mode 100644 index 0000000000..321f170b2a --- /dev/null +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.kt @@ -0,0 +1,115 @@ +/* ownCloud Android Library is available under MIT license + * @author masensio + * @author David A. Velasco + * @author David González Verdugo + * Copyright (C) 2019 ownCloud GmbH. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +package com.owncloud.android.lib.resources.shares + +import com.owncloud.android.lib.common.OwnCloudClient +import com.owncloud.android.lib.common.http.HttpConstants +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.common.utils.Log_OC +import java.net.URL + +/** + * Provide a list shares for a specific file. + * The input is the full path of the desired file. + * The output is a list of everyone who has the file shared with them. + * + * @author masensio + * @author David A. Velasco + * @author David González Verdugo + */ + +/** + * Constructor + * + * @param remoteFilePath Path to file or folder + * @param reshares If set to false (default), only shares owned by the current user are + * returned. + * If set to true, shares owned by any user from the given file are returned. + * @param subfiles If set to false (default), lists only the folder being shared + * If set to true, all shared files within the folder are returned. + */ +class GetRemoteSharesForFileOperation( + private val remoteFilePath: String, + private val reshares: Boolean, + private val subfiles: Boolean +) : RemoteOperation() { + + override fun run(client: OwnCloudClient): RemoteOperationResult { + var result: RemoteOperationResult + + try { + + val requestUri = client.baseUri + val uriBuilder = requestUri.buildUpon() + uriBuilder.appendEncodedPath(ShareUtils.SHARING_API_PATH) + uriBuilder.appendQueryParameter(PARAM_PATH, remoteFilePath) + uriBuilder.appendQueryParameter(PARAM_RESHARES, reshares.toString()) + uriBuilder.appendQueryParameter(PARAM_SUBFILES, subfiles.toString()) + + val getMethod = GetMethod(URL(uriBuilder.build().toString())) + + getMethod.addRequestHeader(RemoteOperation.OCS_API_HEADER, RemoteOperation.OCS_API_HEADER_VALUE) + + val status = client.executeHttpMethod(getMethod) + + if (isSuccess(status)) { + // Parse xml response and obtain the list of shares + val parser = ShareToRemoteOperationResultParser( + ShareXMLParser() + ) + parser.ownCloudVersion = client.ownCloudVersion + parser.serverBaseUri = client.baseUri + result = parser.parse(getMethod.responseBodyAsString) + + if (result.isSuccess) { + Log_OC.d(TAG, "Got " + result.data.shares.size + " shares") + } + } else { + result = RemoteOperationResult(getMethod) + } + } catch (e: Exception) { + result = RemoteOperationResult(e) + Log_OC.e(TAG, "Exception while getting shares", e) + } + + return result + } + + private fun isSuccess(status: Int): Boolean = status == HttpConstants.HTTP_OK + + companion object { + + private val TAG = GetRemoteSharesForFileOperation::class.java.simpleName + + private const val PARAM_PATH = "path" + private const val PARAM_RESHARES = "reshares" + private const val PARAM_SUBFILES = "subfiles" + } +} \ No newline at end of file diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoteShare.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoteShare.kt index f2bfcb0b9d..58d27806c0 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoteShare.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoteShare.kt @@ -48,13 +48,12 @@ class RemoteShare : Parcelable, Serializable { var fileSource: Long = 0 var itemSource: Long = 0 var shareType: ShareType? = null - var permissions: Int = 0 - var sharedDate: Long = 0 - var expirationDate: Long = 0 + var permissions: Int = INIT_PERMISSION + var sharedDate: Long = INIT_SHARED_DATE + var expirationDate: Long = INIT_EXPIRATION_DATE_IN_MILLIS var isFolder: Boolean = false var userId: Long = 0 var remoteId: Long = 0 - private set val isPasswordProtected: Boolean get() = ShareType.PUBLIC_LINK == shareType && shareWith.isNotEmpty() @@ -65,7 +64,7 @@ class RemoteShare : Parcelable, Serializable { constructor(path: String?) { resetData() - if (path == null || path.isEmpty() || !path.startsWith(FileUtils.PATH_SEPARATOR)) { + if (path.isNullOrEmpty() || !path.startsWith(FileUtils.PATH_SEPARATOR)) { Log_OC.e(TAG, "Trying to create a RemoteShare with a non valid path") throw IllegalArgumentException("Trying to create a RemoteShare with a non valid path: " + path!!) } @@ -87,18 +86,14 @@ class RemoteShare : Parcelable, Serializable { itemSource = 0 shareType = ShareType.NO_SHARED permissions = DEFAULT_PERMISSION - sharedDate = 0 - expirationDate = 0 + sharedDate = INIT_SHARED_DATE + expirationDate = INIT_EXPIRATION_DATE_IN_MILLIS sharedWithAdditionalInfo = "" isFolder = false userId = -1 remoteId = -1 } - fun setIdRemoteShared(remoteId: Long) { - this.remoteId = remoteId - } - /** * Reconstruct from parcel * @@ -131,9 +126,7 @@ class RemoteShare : Parcelable, Serializable { remoteId = source.readLong() } - override fun describeContents(): Int { - return this.hashCode() - } + override fun describeContents(): Int = this.hashCode() override fun writeToParcel(dest: Parcel, flags: Int) { dest.writeString(shareWith) @@ -145,7 +138,7 @@ class RemoteShare : Parcelable, Serializable { dest.writeString(shareLink) dest.writeLong(fileSource) dest.writeLong(itemSource) - dest.writeString(if (shareType == null) "" else shareType!!.name) + dest.writeString(shareType?.name ?: "") dest.writeInt(permissions) dest.writeLong(sharedDate) dest.writeLong(expirationDate) @@ -163,29 +156,34 @@ class RemoteShare : Parcelable, Serializable { private val TAG = RemoteShare::class.java.simpleName - val DEFAULT_PERMISSION = -1 - val READ_PERMISSION_FLAG = 1 - val UPDATE_PERMISSION_FLAG = 2 - val CREATE_PERMISSION_FLAG = 4 - val DELETE_PERMISSION_FLAG = 8 - val SHARE_PERMISSION_FLAG = 16 - val MAXIMUM_PERMISSIONS_FOR_FILE = READ_PERMISSION_FLAG + + const val INIT_PERMISSION = 0 + const val DEFAULT_PERMISSION = -1 + const val READ_PERMISSION_FLAG = 1 + const val UPDATE_PERMISSION_FLAG = 2 + const val CREATE_PERMISSION_FLAG = 4 + const val DELETE_PERMISSION_FLAG = 8 + const val SHARE_PERMISSION_FLAG = 16 + const val MAXIMUM_PERMISSIONS_FOR_FILE = READ_PERMISSION_FLAG + UPDATE_PERMISSION_FLAG + SHARE_PERMISSION_FLAG - val MAXIMUM_PERMISSIONS_FOR_FOLDER = MAXIMUM_PERMISSIONS_FOR_FILE + + const val MAXIMUM_PERMISSIONS_FOR_FOLDER = MAXIMUM_PERMISSIONS_FOR_FILE + CREATE_PERMISSION_FLAG + DELETE_PERMISSION_FLAG - val FEDERATED_PERMISSIONS_FOR_FILE_UP_TO_OC9 = READ_PERMISSION_FLAG + UPDATE_PERMISSION_FLAG - val FEDERATED_PERMISSIONS_FOR_FILE_AFTER_OC9 = READ_PERMISSION_FLAG + + const val FEDERATED_PERMISSIONS_FOR_FILE_UP_TO_OC9 = READ_PERMISSION_FLAG + UPDATE_PERMISSION_FLAG + const val FEDERATED_PERMISSIONS_FOR_FILE_AFTER_OC9 = READ_PERMISSION_FLAG + UPDATE_PERMISSION_FLAG + SHARE_PERMISSION_FLAG - val FEDERATED_PERMISSIONS_FOR_FOLDER_UP_TO_OC9 = READ_PERMISSION_FLAG + + const val FEDERATED_PERMISSIONS_FOR_FOLDER_UP_TO_OC9 = READ_PERMISSION_FLAG + UPDATE_PERMISSION_FLAG + CREATE_PERMISSION_FLAG + DELETE_PERMISSION_FLAG - val FEDERATED_PERMISSIONS_FOR_FOLDER_AFTER_OC9 = + const val FEDERATED_PERMISSIONS_FOR_FOLDER_AFTER_OC9 = FEDERATED_PERMISSIONS_FOR_FOLDER_UP_TO_OC9 + SHARE_PERMISSION_FLAG + + const val INIT_EXPIRATION_DATE_IN_MILLIS : Long = 0 + const val INIT_SHARED_DATE : Long = 0 + /** * Parcelable Methods */ 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 bf37ae80c0..33ef20cbe0 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 @@ -43,13 +43,12 @@ import java.net.URL * @author David González Verdugo */ -class RemoveRemoteShareOperation /** * Constructor * * @param remoteShareId Share ID */ - (private val mRemoteShareId: Long) : RemoteOperation() { +class RemoveRemoteShareOperation(private val remoteShareId: Long) : RemoteOperation() { override fun run(client: OwnCloudClient): RemoteOperationResult { var result: RemoteOperationResult @@ -58,7 +57,7 @@ class RemoveRemoteShareOperation val requestUri = client.baseUri val uriBuilder = requestUri.buildUpon() uriBuilder.appendEncodedPath(ShareUtils.SHARING_API_PATH) - uriBuilder.appendEncodedPath(mRemoteShareId.toString()) + uriBuilder.appendEncodedPath(remoteShareId.toString()) val deleteMethod = DeleteMethod( URL(uriBuilder.build().toString()) @@ -76,7 +75,7 @@ class RemoveRemoteShareOperation ) result = parser.parse(deleteMethod.responseBodyAsString) - Log_OC.d(TAG, "Unshare " + mRemoteShareId + ": " + result.logMessage) + Log_OC.d(TAG, "Unshare " + remoteShareId + ": " + result.logMessage) } else { result = RemoteOperationResult(deleteMethod) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/SharePermissionsBuilder.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/SharePermissionsBuilder.kt index 18be72d732..2f503ac1de 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/SharePermissionsBuilder.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/SharePermissionsBuilder.kt @@ -32,7 +32,7 @@ package com.owncloud.android.lib.resources.shares class SharePermissionsBuilder { /** Set of permissions */ - private var mPermissions = RemoteShare.READ_PERMISSION_FLAG // READ is minimum permission + private var permissions = RemoteShare.READ_PERMISSION_FLAG // READ is minimum permission /** * Sets or clears permission to reshare a file or folder. @@ -87,10 +87,10 @@ class SharePermissionsBuilder { private fun updatePermission(permissionsFlag: Int, enable: Boolean) { if (enable) { // add permission - mPermissions = mPermissions or permissionsFlag + permissions = permissions or permissionsFlag } else { // delete permission - mPermissions = mPermissions and permissionsFlag.inv() + permissions = permissions and permissionsFlag.inv() } } @@ -99,7 +99,5 @@ class SharePermissionsBuilder { * * @return An int value representing the accumulated set of permissions. */ - fun build(): Int { - return mPermissions - } + fun build(): Int = permissions } 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 abb416a284..06e8d50607 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 @@ -47,7 +47,7 @@ class ShareToRemoteOperationResultParser(private var shareXmlParser: ShareXMLPar } var result: RemoteOperationResult - val resultData = ArrayList() + var resultData: List? try { // Parse xml response and obtain the list of shares @@ -61,25 +61,25 @@ class ShareToRemoteOperationResultParser(private var shareXmlParser: ShareXMLPar if (shareXmlParser?.isSuccess!!) { if (!shares.isNullOrEmpty() || !oneOrMoreSharesRequired) { result = RemoteOperationResult(RemoteOperationResult.ResultCode.OK) - if (shares != null) { - for (share in shares) { - resultData.add(share) - // build the share link if not in the response - // (needed for OC servers < 9.0.0, see ShareXMLParser.java#line256) - if (share.shareType == ShareType.PUBLIC_LINK - && share.shareLink.isEmpty() - && share.token.isNotEmpty() - ) { - if (serverBaseUri != null) { - val sharingLinkPath = ShareUtils.getSharingLinkPath(ownCloudVersion) - share.shareLink = serverBaseUri.toString() + sharingLinkPath + share.token - } else { - Log_OC.e(TAG, "Couldn't build link for public share :(") - } - } + + resultData = shares?.map { share -> + if (share.shareType != ShareType.PUBLIC_LINK || + share.shareLink.isNotEmpty() || + share.token.isEmpty()) { + return@map share + } + + if (serverBaseUri != null) { + val sharingLinkPath = ShareUtils.getSharingLinkPath(ownCloudVersion) + share.shareLink = serverBaseUri.toString() + sharingLinkPath + share.token + } else { + Log_OC.e(TAG, "Couldn't build link for public share :(") } + + share } - result.setData(ShareParserResult(resultData, "")) + + result.setData(ShareParserResult(ArrayList(resultData), "")) } else { result = RemoteOperationResult(RemoteOperationResult.ResultCode.WRONG_SERVER_RESPONSE) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareXMLParser.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareXMLParser.kt index 2dc311443c..b9f7cc763f 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareXMLParser.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareXMLParser.kt @@ -179,7 +179,7 @@ class ShareXMLParser { } else if (name.equals(NODE_ID, ignoreCase = true)) {// Parse Create XML Response share = RemoteShare() val value = readNode(parser, NODE_ID) - share.setIdRemoteShared(Integer.parseInt(value).toLong()) + share.remoteId = Integer.parseInt(value).toLong() } else if (name.equals(NODE_URL, ignoreCase = true)) { // NOTE: this field is received in all the public shares from OC 9.0.0 @@ -235,7 +235,7 @@ class ShareXMLParser { readElement(parser, shares) } else if (name.equals(NODE_ID, ignoreCase = true)) { - share.setIdRemoteShared(Integer.parseInt(readNode(parser, NODE_ID)).toLong()) + share.remoteId = Integer.parseInt(readNode(parser, NODE_ID)).toLong() } else if (name.equals(NODE_ITEM_TYPE, ignoreCase = true)) { share.isFolder = readNode(parser, NODE_ITEM_TYPE).equals(TYPE_FOLDER, ignoreCase = true) 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 2b6422abe7..24f283c238 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 @@ -31,6 +31,7 @@ import com.owncloud.android.lib.common.http.methods.nonwebdav.PutMethod import com.owncloud.android.lib.common.operations.RemoteOperation import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.common.utils.Log_OC +import com.owncloud.android.lib.resources.shares.RemoteShare.Companion.INIT_PERMISSION import okhttp3.FormBody import java.net.URL import java.text.SimpleDateFormat @@ -53,84 +54,34 @@ class UpdateRemoteShareOperation * * @param remoteId Identifier of the share to update. */ - ( - /** - * Identifier of the share to update - */ - private val remoteId: Long -) : RemoteOperation() { - - /** - * Password to set for the public link - */ - private var password: String? = null - - /** - * Expiration date to set for the public link - */ - private var expirationDateInMillis: Long = 0 - - /** - * Access permissions for the file bound to the share - */ - private var permissions: Int = 0 - - /** - * Upload permissions for the public link (only folders) - */ - private var publicUpload: Boolean? = null - private var name: String? = null - - init { - password = null // no update - expirationDateInMillis = 0 // no update - publicUpload = null - permissions = RemoteShare.DEFAULT_PERMISSION - } - - /** - * Set name to update in Share resource. Ignored by servers previous to version 10.0.0 - * - * @param name Name to set to the target share. - * Empty string clears the current name. - * Null results in no update applied to the name. - */ - fun setName(name: String) { - this.name = name - } + (private val remoteId: Long) : RemoteOperation() { /** - * Set password to update in Share resource. + * Password to update in Share resource. * * @param password Password to set to the target share. * Empty string clears the current password. * Null results in no update applied to the password. */ - fun setPassword(password: String) { - this.password = password - } + var password: String? = null /** - * Set expiration date to update in Share resource. + * Expiration date to update in Share resource. * * @param expirationDateInMillis Expiration date to set to the target share. * A negative value clears the current expiration date. * Zero value (start-of-epoch) results in no update done on * the expiration date. */ - fun setExpirationDate(expirationDateInMillis: Long) { - this.expirationDateInMillis = expirationDateInMillis - } + var expirationDateInMillis: Long = INITIAL_EXPIRATION_DATE_IN_MILLIS /** - * Set permissions to update in Share resource. + * Permissions to update in Share resource. * * @param permissions Permissions to set to the target share. * Values <= 0 result in no update applied to the permissions. */ - fun setPermissions(permissions: Int) { - this.permissions = permissions - } + var permissions: Int = INIT_PERMISSION /** * Enable upload permissions to update in Share resource. @@ -138,8 +89,21 @@ class UpdateRemoteShareOperation * @param publicUpload Upload permission to set to the target share. * Null results in no update applied to the upload permission. */ - fun setPublicUpload(publicUpload: Boolean?) { - this.publicUpload = publicUpload + var publicUpload: Boolean? = null + /** + * Name to update in Share resource. Ignored by servers previous to version 10.0.0 + * + * @param name Name to set to the target share. + * Empty string clears the current name. + * Null results in no update applied to the name. + */ + var name: String? = null + + init { + password = null // no update + expirationDateInMillis = INITIAL_EXPIRATION_DATE_IN_MILLIS // no update + publicUpload = null + permissions = RemoteShare.DEFAULT_PERMISSION } override fun run(client: OwnCloudClient): RemoteOperationResult { @@ -153,11 +117,11 @@ class UpdateRemoteShareOperation formBodyBuilder.add(PARAM_NAME, name!!) } - if (expirationDateInMillis < 0) { + if (expirationDateInMillis < INITIAL_EXPIRATION_DATE_IN_MILLIS) { // clear expiration date formBodyBuilder.add(PARAM_EXPIRATION_DATE, "") - } else if (expirationDateInMillis > 0) { + } else if (expirationDateInMillis > INITIAL_EXPIRATION_DATE_IN_MILLIS) { // set expiration date val dateFormat = SimpleDateFormat(FORMAT_EXPIRATION_DATE, Locale.getDefault()) val expirationDate = Calendar.getInstance() @@ -172,7 +136,7 @@ class UpdateRemoteShareOperation // IMPORTANT: permissions parameter needs to be updated after mPublicUpload parameter, // otherwise they would be set always as 1 (READ) in the server when mPublicUpload was updated - if (permissions > 0) { + if (permissions > INIT_PERMISSION) { // set permissions formBodyBuilder.add(PARAM_PERMISSIONS, permissions.toString()) } @@ -212,21 +176,21 @@ class UpdateRemoteShareOperation return result } - private fun isSuccess(status: Int): Boolean { - return status == HttpConstants.HTTP_OK - } + private fun isSuccess(status: Int): Boolean = status == HttpConstants.HTTP_OK companion object { private val TAG = GetRemoteShareOperation::class.java.simpleName - private val PARAM_NAME = "name" - private val PARAM_PASSWORD = "password" - private val PARAM_EXPIRATION_DATE = "expireDate" - private val PARAM_PERMISSIONS = "permissions" - private val PARAM_PUBLIC_UPLOAD = "publicUpload" - private val FORMAT_EXPIRATION_DATE = "yyyy-MM-dd" - private val ENTITY_CONTENT_TYPE = "application/x-www-form-urlencoded" - private val ENTITY_CHARSET = "UTF-8" + private const val PARAM_NAME = "name" + private const val PARAM_PASSWORD = "password" + private const val PARAM_EXPIRATION_DATE = "expireDate" + private const val PARAM_PERMISSIONS = "permissions" + private const val PARAM_PUBLIC_UPLOAD = "publicUpload" + private const val FORMAT_EXPIRATION_DATE = "yyyy-MM-dd" + private const val ENTITY_CONTENT_TYPE = "application/x-www-form-urlencoded" + private const val ENTITY_CHARSET = "UTF-8" + + private const val INITIAL_EXPIRATION_DATE_IN_MILLIS : Long = 0 } } \ No newline at end of file