From 1534f87f78f6c1c7ccd6100c2412c237ef919b6f Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Fri, 11 Aug 2023 14:57:11 +0200 Subject: [PATCH] Add support for metadata: size (width/height) and geolocation Signed-off-by: tobiasKaminsky --- library/src/androidTest/assets/gps.jpg | Bin 0 -> 57023 bytes .../java/com/owncloud/android/AbstractIT.java | 4 +-- .../files/ReadFileRemoteOperationIT.kt | 23 ++++++++++++++ .../android/lib/common/network/WebdavEntry.kt | 19 +++++++++++ .../lib/common/network/WebdavUtils.java | 4 +++ .../lib/resources/files/model/GeoLocation.kt | 30 ++++++++++++++++++ .../resources/files/model/ImageDimension.kt | 30 ++++++++++++++++++ .../lib/resources/files/model/RemoteFile.kt | 4 +++ 8 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 library/src/androidTest/assets/gps.jpg create mode 100644 library/src/main/java/com/owncloud/android/lib/resources/files/model/GeoLocation.kt create mode 100644 library/src/main/java/com/owncloud/android/lib/resources/files/model/ImageDimension.kt diff --git a/library/src/androidTest/assets/gps.jpg b/library/src/androidTest/assets/gps.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4e55827b507292d178f5da09707af5e763911666 GIT binary patch literal 57023 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 Z;0tSm{?!ZqBT$6IUZ1<<5QHwO|JfJ~h*bap literal 0 HcmV?d00001 diff --git a/library/src/androidTest/java/com/owncloud/android/AbstractIT.java b/library/src/androidTest/java/com/owncloud/android/AbstractIT.java index 83a4869d91..f8c2d6141b 100644 --- a/library/src/androidTest/java/com/owncloud/android/AbstractIT.java +++ b/library/src/androidTest/java/com/owncloud/android/AbstractIT.java @@ -279,8 +279,8 @@ public static File extractAsset(String fileName, Context context) throws IOExcep @After public void after() { - removeOnClient(client); - removeOnClient(client2); +// removeOnClient(client); +// removeOnClient(client2); } private void removeOnClient(OwnCloudClient client) { diff --git a/library/src/androidTest/java/com/owncloud/android/lib/resources/files/ReadFileRemoteOperationIT.kt b/library/src/androidTest/java/com/owncloud/android/lib/resources/files/ReadFileRemoteOperationIT.kt index 72343c1f06..e952324977 100644 --- a/library/src/androidTest/java/com/owncloud/android/lib/resources/files/ReadFileRemoteOperationIT.kt +++ b/library/src/androidTest/java/com/owncloud/android/lib/resources/files/ReadFileRemoteOperationIT.kt @@ -23,6 +23,8 @@ package com.owncloud.android.lib.resources.files import com.owncloud.android.AbstractIT import com.owncloud.android.lib.common.OwnCloudClientManagerFactory import com.owncloud.android.lib.resources.e2ee.ToggleEncryptionRemoteOperation +import com.owncloud.android.lib.resources.files.model.GeoLocation +import com.owncloud.android.lib.resources.files.model.ImageDimension import com.owncloud.android.lib.resources.files.model.RemoteFile import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse @@ -58,6 +60,27 @@ class ReadFileRemoteOperationIT : AbstractIT() { assertEquals(remotePath, (result.data[0] as RemoteFile).remotePath) } + @Test + fun testMetadata() { + val filePath = getFile("gps.jpg").absolutePath + val remotePath = "/gps.jpg" + + assertTrue( + UploadFileRemoteOperation(filePath, remotePath, "image/jpg", RANDOM_MTIME) + .execute(client).isSuccess + ) + + val result = ReadFileRemoteOperation(remotePath).execute(client) + + assertTrue(result.isSuccess) + val remoteFile = result.data[0] as RemoteFile + + @Suppress("Detekt.MagicNumber") + assertEquals(ImageDimension(451f, 529f), remoteFile.imageDimension) + @Suppress("Detekt.MagicNumber") + assertEquals(GeoLocation(49.99679166666667, 8.67198611111111), remoteFile.geoLocation) + } + @Test fun readEncryptedState() { val remotePath = "/testEncryptedFolder/" diff --git a/library/src/main/java/com/owncloud/android/lib/common/network/WebdavEntry.kt b/library/src/main/java/com/owncloud/android/lib/common/network/WebdavEntry.kt index e4f430e21e..b6dcaa38bc 100644 --- a/library/src/main/java/com/owncloud/android/lib/common/network/WebdavEntry.kt +++ b/library/src/main/java/com/owncloud/android/lib/common/network/WebdavEntry.kt @@ -24,9 +24,12 @@ package com.owncloud.android.lib.common.network import android.net.Uri +import com.google.gson.Gson import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.lib.resources.files.model.FileLockType import com.owncloud.android.lib.resources.files.model.FileLockType.Companion.fromValue +import com.owncloud.android.lib.resources.files.model.GeoLocation +import com.owncloud.android.lib.resources.files.model.ImageDimension import com.owncloud.android.lib.resources.shares.ShareType import com.owncloud.android.lib.resources.shares.ShareeUser import org.apache.jackrabbit.webdav.MultiStatusResponse @@ -96,6 +99,8 @@ class WebdavEntry constructor(ms: MultiStatusResponse, splitElement: String) { var lockToken: String? = null private set var tags = arrayOfNulls(0) + var imageDimension: ImageDimension? = null + var geoLocation: GeoLocation? = null enum class MountType { INTERNAL, EXTERNAL, GROUP @@ -395,6 +400,18 @@ class WebdavEntry constructor(ms: MultiStatusResponse, splitElement: String) { } } + // NC metadata size property + prop = propSet[EXTENDED_PROPERTY_METADATA_SIZE, ncNamespace] + if (prop != null && prop.value != null) { + imageDimension = Gson().fromJson(prop.value.toString(), ImageDimension::class.java) + } + + // NC metadata gps property + prop = propSet[EXTENDED_PROPERTY_METADATA_GPS, ncNamespace] + if (prop != null && prop.value != null) { + geoLocation = Gson().fromJson(prop.value.toString(), GeoLocation::class.java) + } + parseLockProperties(ncNamespace, propSet) } else { Log_OC.e("WebdavEntry", "General error, no status for webdav response") @@ -542,6 +559,8 @@ class WebdavEntry constructor(ms: MultiStatusResponse, splitElement: String) { const val EXTENDED_PROPERTY_LOCK_TIMEOUT = "lock-timeout" const val EXTENDED_PROPERTY_LOCK_TOKEN = "lock-token" const val EXTENDED_PROPERTY_SYSTEM_TAGS = "system-tags" + const val EXTENDED_PROPERTY_METADATA_SIZE = "file-metadata-size" + const val EXTENDED_PROPERTY_METADATA_GPS = "file-metadata-gps" const val TRASHBIN_FILENAME = "trashbin-filename" const val TRASHBIN_ORIGINAL_LOCATION = "trashbin-original-location" const val TRASHBIN_DELETION_TIME = "trashbin-deletion-time" diff --git a/library/src/main/java/com/owncloud/android/lib/common/network/WebdavUtils.java b/library/src/main/java/com/owncloud/android/lib/common/network/WebdavUtils.java index cf09111166..1aa6b9f796 100644 --- a/library/src/main/java/com/owncloud/android/lib/common/network/WebdavUtils.java +++ b/library/src/main/java/com/owncloud/android/lib/common/network/WebdavUtils.java @@ -126,6 +126,8 @@ public static DavPropertyNameSet getAllPropSet() { propSet.add(WebdavEntry.EXTENDED_PROPERTY_LOCK_TIMEOUT, ncNamespace); propSet.add(WebdavEntry.EXTENDED_PROPERTY_LOCK_TOKEN, ncNamespace); propSet.add(WebdavEntry.EXTENDED_PROPERTY_SYSTEM_TAGS, ncNamespace); + propSet.add(WebdavEntry.EXTENDED_PROPERTY_METADATA_SIZE, ncNamespace); + propSet.add(WebdavEntry.EXTENDED_PROPERTY_METADATA_GPS, ncNamespace); return propSet; } @@ -165,6 +167,8 @@ public static DavPropertyNameSet getFilePropSet() { propSet.add(WebdavEntry.EXTENDED_PROPERTY_LOCK_TOKEN, ncNamespace); propSet.add(WebdavEntry.EXTENDED_PROPERTY_IS_ENCRYPTED, ncNamespace); propSet.add(WebdavEntry.EXTENDED_PROPERTY_SYSTEM_TAGS, ncNamespace); + propSet.add(WebdavEntry.EXTENDED_PROPERTY_METADATA_SIZE, ncNamespace); + propSet.add(WebdavEntry.EXTENDED_PROPERTY_METADATA_GPS, ncNamespace); return propSet; } diff --git a/library/src/main/java/com/owncloud/android/lib/resources/files/model/GeoLocation.kt b/library/src/main/java/com/owncloud/android/lib/resources/files/model/GeoLocation.kt new file mode 100644 index 0000000000..c8af996376 --- /dev/null +++ b/library/src/main/java/com/owncloud/android/lib/resources/files/model/GeoLocation.kt @@ -0,0 +1,30 @@ +/* Nextcloud Android Library is available under MIT license + * + * @author Tobias Kaminsky + * Copyright (C) 2023 Tobias Kaminsky + * Copyright (C) 2023 Nextcloud 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.files.model + +data class GeoLocation(var latitude: Double = -1.0, var longitude: Double = -1.0) diff --git a/library/src/main/java/com/owncloud/android/lib/resources/files/model/ImageDimension.kt b/library/src/main/java/com/owncloud/android/lib/resources/files/model/ImageDimension.kt new file mode 100644 index 0000000000..e3fa7ab520 --- /dev/null +++ b/library/src/main/java/com/owncloud/android/lib/resources/files/model/ImageDimension.kt @@ -0,0 +1,30 @@ +/* Nextcloud Android Library is available under MIT license + * + * @author Tobias Kaminsky + * Copyright (C) 2023 Tobias Kaminsky + * Copyright (C) 2023 Nextcloud 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.files.model + +data class ImageDimension(var width: Float = -1f, var height: Float = -1f) diff --git a/library/src/main/java/com/owncloud/android/lib/resources/files/model/RemoteFile.kt b/library/src/main/java/com/owncloud/android/lib/resources/files/model/RemoteFile.kt index 8a52a1d551..12d460333d 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/files/model/RemoteFile.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/files/model/RemoteFile.kt @@ -68,6 +68,8 @@ class RemoteFile : Parcelable, Serializable { var lockTimeout: Long = 0 var lockToken: String? = null var tags: Array? = null + var imageDimension: ImageDimension? = null + var geoLocation: GeoLocation? = null constructor() { resetData() @@ -119,6 +121,8 @@ class RemoteFile : Parcelable, Serializable { lockTimeout = we.lockTimeout lockToken = we.lockToken tags = we.tags + imageDimension = we.imageDimension + geoLocation = we.geoLocation } /**