From 5be4eca0f72109d820a65fda6e922a098d5c8a7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abel=20Garc=C3=ADa=20de=20Prada?= Date: Thu, 7 Jul 2022 08:18:54 +0200 Subject: [PATCH] Added a new property, so that, we can retrieve the shares within the propfind --- .../common/http/methods/webdav/DavUtils.kt | 3 +- .../methods/webdav/properties/OCShareTypes.kt | 44 ++++++++++++++++++ .../properties/ShareTypeListProperty.kt | 46 +++++++++++++++++++ .../files/ReadRemoteFolderOperation.java | 3 ++ .../lib/resources/files/RemoteFile.java | 43 ++++++++++++++++- 5 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/properties/OCShareTypes.kt create mode 100644 owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/properties/ShareTypeListProperty.kt diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/DavUtils.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/DavUtils.kt index 22e1981f..a48626d3 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/DavUtils.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/DavUtils.kt @@ -26,10 +26,11 @@ package com.owncloud.android.lib.common.http.methods.webdav import at.bitfire.dav4jvm.Property import at.bitfire.dav4jvm.PropertyUtils.getAllPropSet import at.bitfire.dav4jvm.PropertyUtils.getQuotaPropset +import com.owncloud.android.lib.common.http.methods.webdav.properties.OCShareTypes object DavUtils { @JvmStatic val allPropset: Array - get() = getAllPropSet() + get() = getAllPropSet().plus(OCShareTypes.NAME) val quotaPropSet: Array get() = getQuotaPropset() diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/properties/OCShareTypes.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/properties/OCShareTypes.kt new file mode 100644 index 00000000..6111cc17 --- /dev/null +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/properties/OCShareTypes.kt @@ -0,0 +1,44 @@ +/* ownCloud Android Library is available under MIT license + * Copyright (C) 2022 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.common.http.methods.webdav.properties + +import at.bitfire.dav4jvm.Property +import at.bitfire.dav4jvm.XmlUtils +import org.xmlpull.v1.XmlPullParser + +class OCShareTypes : ShareTypeListProperty() { + + class Factory : ShareTypeListProperty.Factory() { + + override fun create(parser: XmlPullParser) = + create(parser, OCShareTypes()) + + override fun getName(): Property.Name = NAME + } + + companion object { + @JvmField + val NAME = Property.Name(XmlUtils.NS_OWNCLOUD, "share-types") + } +} diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/properties/ShareTypeListProperty.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/properties/ShareTypeListProperty.kt new file mode 100644 index 00000000..5dd008f2 --- /dev/null +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/properties/ShareTypeListProperty.kt @@ -0,0 +1,46 @@ +/* ownCloud Android Library is available under MIT license + * Copyright (C) 2022 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.common.http.methods.webdav.properties + +import at.bitfire.dav4jvm.Property +import at.bitfire.dav4jvm.PropertyFactory +import at.bitfire.dav4jvm.XmlUtils +import org.xmlpull.v1.XmlPullParser +import java.util.LinkedList + +abstract class ShareTypeListProperty : Property { + + val shareTypes = LinkedList() + + override fun toString() = "share types =[" + shareTypes.joinToString(", ") + "]" + + abstract class Factory : PropertyFactory { + + fun create(parser: XmlPullParser, list: ShareTypeListProperty): ShareTypeListProperty { + XmlUtils.readTextPropertyList(parser, Property.Name(XmlUtils.NS_OWNCLOUD, "share-type"), list.shareTypes) + return list + } + + } +} diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/ReadRemoteFolderOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/ReadRemoteFolderOperation.java index e10613b3..bf6a0604 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/ReadRemoteFolderOperation.java +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/ReadRemoteFolderOperation.java @@ -24,6 +24,7 @@ package com.owncloud.android.lib.resources.files; +import at.bitfire.dav4jvm.PropertyRegistry; import at.bitfire.dav4jvm.Response; import com.owncloud.android.lib.common.OwnCloudClient; import com.owncloud.android.lib.common.accounts.AccountUtils; @@ -31,6 +32,7 @@ import com.owncloud.android.lib.common.http.HttpConstants; import com.owncloud.android.lib.common.http.methods.webdav.DavConstants; import com.owncloud.android.lib.common.http.methods.webdav.DavUtils; import com.owncloud.android.lib.common.http.methods.webdav.PropfindMethod; +import com.owncloud.android.lib.common.http.methods.webdav.properties.OCShareTypes; import com.owncloud.android.lib.common.network.WebdavUtils; import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; @@ -72,6 +74,7 @@ public class ReadRemoteFolderOperation extends RemoteOperation> result = null; try { + PropertyRegistry.INSTANCE.register(OCShareTypes.Factory.class.newInstance()); PropfindMethod propfindMethod = new PropfindMethod( new URL(client.getUserFilesWebDavUri() + WebdavUtils.encodePath(mRemotePath)), DavConstants.DEPTH_1, diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/RemoteFile.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/RemoteFile.java index 0557f99e..84a48bcd 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/RemoteFile.java +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/RemoteFile.java @@ -40,10 +40,14 @@ import at.bitfire.dav4jvm.property.OCPrivatelink; import at.bitfire.dav4jvm.property.OCSize; import at.bitfire.dav4jvm.property.QuotaAvailableBytes; import at.bitfire.dav4jvm.property.QuotaUsedBytes; +import com.owncloud.android.lib.common.http.methods.webdav.properties.OCShareTypes; +import com.owncloud.android.lib.resources.shares.ShareType; +import timber.log.Timber; import java.io.File; import java.io.Serializable; import java.math.BigDecimal; +import java.util.LinkedList; import java.util.List; /** @@ -85,6 +89,8 @@ public class RemoteFile implements Parcelable, Serializable { private BigDecimal mQuotaUsedBytes; private BigDecimal mQuotaAvailableBytes; private String mPrivateLink; + private boolean mSharedByLink; + private boolean mSharedWithSharee; public RemoteFile() { resetData(); @@ -153,6 +159,23 @@ public class RemoteFile implements Parcelable, Serializable { if (property instanceof OCPrivatelink) { this.setPrivateLink(((OCPrivatelink) property).getLink()); } + if (property instanceof OCShareTypes) { + LinkedList list = ((OCShareTypes) property).getShareTypes(); + for (int i = 0; i < list.size(); i++) { + ShareType shareType = ShareType.Companion.fromValue(Integer.parseInt(list.get(i))); + if (shareType == null) { + Timber.d("Illegal share type value: " + list.get(i)); + continue; + } + if (shareType.equals(ShareType.PUBLIC_LINK)) { + this.setSharedViaLink(true); + } else if (shareType.equals(ShareType.USER) || + shareType.equals(ShareType.FEDERATED) || + shareType.equals(ShareType.GROUP)) { + this.setSharedWithSharee(true); + } + } + } } } @@ -266,6 +289,22 @@ public class RemoteFile implements Parcelable, Serializable { mPrivateLink = privateLink; } + public void setSharedWithSharee(boolean shareWithSharee) { + mSharedWithSharee = shareWithSharee; + } + + public boolean isSharedWithSharee() { + return mSharedWithSharee; + } + + public void setSharedViaLink(boolean sharedViaLink) { + mSharedByLink = sharedViaLink; + } + + public boolean isSharedByLink() { + return mSharedByLink; + } + /** * Used internally. Reset all file properties */ @@ -282,6 +321,8 @@ public class RemoteFile implements Parcelable, Serializable { mQuotaUsedBytes = null; mQuotaAvailableBytes = null; mPrivateLink = null; + mSharedWithSharee = false; + mSharedByLink = false; } public void readFromParcel(Parcel source) { @@ -319,4 +360,4 @@ public class RemoteFile implements Parcelable, Serializable { dest.writeSerializable(mQuotaAvailableBytes); dest.writeString(mPrivateLink); } -} \ No newline at end of file +}