Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 8a78f8e7 authored by Tobias Kaminsky's avatar Tobias Kaminsky Committed by GitHub
Browse files

Merge pull request #1242 from nextcloud/feature/update-old-metadata-api

Update Old Metadata API
parents 2fbd1292 5e5271ed
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ steps:
    - ./scripts/wait_for_server.sh server-master
    - scripts/deleteOutdatedComments.sh "master" "Unit" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
    - scripts/deleteOutdatedComments.sh "master" "IT" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
    - adb logcat -c
    - adb logcat > logcat.txt &
    - ./gradlew jacocoTestDebugUnitTestReport || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "master" "Unit" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
    - ./gradlew installDebugAndroidTest
    - ./gradlew createDebugCoverageReport || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "master" "IT" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
@@ -94,6 +96,9 @@ services:
      - su www-data -c "git clone https://github.com/nextcloud/notifications.git /var/www/html/apps/notifications/"
      - su www-data -c "php /var/www/html/occ app:enable -f notifications"
      - su www-data -c "php /var/www/html/occ notification:generate test -d test"
      - su www-data -c "git clone https://github.com/nextcloud/photos.git /var/www/html/apps/photos/"
      - su www-data -c "cd /var/www/html/apps/photos; composer install"
      - su www-data -c "php /var/www/html/occ app:enable -f photos"
      - /usr/local/bin/run.sh

trigger:
@@ -208,6 +213,6 @@ trigger:
    - pull_request
---
kind: signature
hmac: 6e5294dd68e3c1b79e0b06e6a3e31e3c3f4599d2839fb7d98f87f1381b263a9f
hmac: 6d69c7c3739747691580d04a781eb67cf95d2f33f8149d5ebd2cbcc30611b4f0

...
+14 −2
Original line number Diff line number Diff line
@@ -26,7 +26,9 @@ 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 com.owncloud.android.lib.resources.status.GetCapabilitiesRemoteOperation
import com.owncloud.android.lib.resources.status.NextcloudVersion
import com.owncloud.android.lib.resources.status.OCCapability
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
@@ -81,8 +83,18 @@ class ReadFileRemoteOperationIT : AbstractIT() {

        testOnlyOnServer(NextcloudVersion.nextcloud_27)

        val ocCapability =
            GetCapabilitiesRemoteOperation()
                .execute(nextcloudClient)
                .singleData as OCCapability

        if (ocCapability.version.majorVersionNumber == NextcloudVersion.nextcloud_27.majorVersionNumber) {
            @Suppress("Detekt.MagicNumber")
            assertEquals(GeoLocation(49.99679166666667, 8.67198611111111), remoteFile.geoLocation)
        } else {
            @Suppress("Detekt.MagicNumber")
            assertEquals(GeoLocation(49.996791666667, 8.6719861111111), remoteFile.geoLocation)
        }
    }

    @Test
+12 −0
Original line number Diff line number Diff line
package com.nextcloud.extensions

import com.google.gson.Gson
import org.apache.jackrabbit.webdav.property.DavProperty

inline fun <reified T> Gson.fromDavProperty(davProperty: DavProperty<*>?): T? {
    return if (davProperty != null && davProperty.value != null) {
        fromJson(davProperty.value.toString(), T::class.java)
    } else {
        null
    }
}
+50 −8
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ package com.owncloud.android.lib.common.network

import android.net.Uri
import com.google.gson.Gson
import com.nextcloud.extensions.fromDavProperty
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
@@ -102,6 +103,8 @@ class WebdavEntry constructor(ms: MultiStatusResponse, splitElement: String) {
    var imageDimension: ImageDimension? = null
    var geoLocation: GeoLocation? = null

    private val gson = Gson()

    enum class MountType {
        INTERNAL,
        EXTERNAL,
@@ -282,9 +285,11 @@ class WebdavEntry constructor(ms: MultiStatusResponse, splitElement: String) {
                        "external" -> {
                            MountType.EXTERNAL
                        }

                        "group" -> {
                            MountType.GROUP
                        }

                        else -> {
                            MountType.INTERNAL
                        }
@@ -413,15 +418,47 @@ class WebdavEntry constructor(ms: MultiStatusResponse, splitElement: String) {
            }

            // NC metadata size property <nc:file-metadata-size>
            prop = propSet[EXTENDED_PROPERTY_METADATA_PHOTOS_SIZE, ncNamespace]
            imageDimension =
                if (prop == null) {
                    prop = propSet[EXTENDED_PROPERTY_METADATA_SIZE, ncNamespace]
            if (prop != null && prop.value != null) {
                imageDimension = Gson().fromJson(prop.value.toString(), ImageDimension::class.java)
                    gson.fromDavProperty<ImageDimension>(prop)
                } else {
                    val xmlData = prop.value as ArrayList<*>
                    var width = 0f
                    var height = 0f
                    xmlData.forEach {
                        val element = it as Element
                        if (element.tagName == "width") {
                            width = element.firstChild.textContent.toFloat()
                        } else if (element.tagName == "height") {
                            height = element.firstChild.textContent.toFloat()
                        }
                    }

                    ImageDimension(width, height)
                }

            // NC metadata gps property <nc:file-metadata-gps>
            prop = propSet[EXTENDED_PROPERTY_METADATA_PHOTOS_GPS, ncNamespace]
            geoLocation =
                if (prop == null) {
                    prop = propSet[EXTENDED_PROPERTY_METADATA_GPS, ncNamespace]
            if (prop != null && prop.value != null) {
                geoLocation = Gson().fromJson(prop.value.toString(), GeoLocation::class.java)
                    gson.fromDavProperty<GeoLocation>(prop)
                } else {
                    val xmlData = prop.value as ArrayList<*>
                    var latitude = 0.0
                    var longitude = 0.0
                    xmlData.forEach {
                        val element = it as Element
                        if (element.tagName == "latitude") {
                            latitude = element.firstChild.textContent.toDouble()
                        } else if (element.tagName == "longitude") {
                            longitude = element.firstChild.textContent.toDouble()
                        }
                    }

                    GeoLocation(latitude, longitude)
                }

            parseLockProperties(ncNamespace, propSet)
@@ -577,8 +614,13 @@ 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"

        // v27
        const val EXTENDED_PROPERTY_METADATA_SIZE = "file-metadata-size"
        const val EXTENDED_PROPERTY_METADATA_GPS = "file-metadata-gps"

        const val EXTENDED_PROPERTY_METADATA_PHOTOS_SIZE = "metadata-photos-size"
        const val EXTENDED_PROPERTY_METADATA_PHOTOS_GPS = "metadata-photos-gps"
        const val TRASHBIN_FILENAME = "trashbin-filename"
        const val TRASHBIN_ORIGINAL_LOCATION = "trashbin-original-location"
        const val TRASHBIN_DELETION_TIME = "trashbin-deletion-time"
+4 −0
Original line number Diff line number Diff line
@@ -128,6 +128,8 @@ public class WebdavUtils {
        propSet.add(WebdavEntry.EXTENDED_PROPERTY_SYSTEM_TAGS, ncNamespace);
        propSet.add(WebdavEntry.EXTENDED_PROPERTY_METADATA_SIZE, ncNamespace);
        propSet.add(WebdavEntry.EXTENDED_PROPERTY_METADATA_GPS, ncNamespace);
        propSet.add(WebdavEntry.EXTENDED_PROPERTY_METADATA_PHOTOS_SIZE, ncNamespace);
        propSet.add(WebdavEntry.EXTENDED_PROPERTY_METADATA_PHOTOS_GPS, ncNamespace);

        return propSet;
    }
@@ -169,6 +171,8 @@ public class WebdavUtils {
        propSet.add(WebdavEntry.EXTENDED_PROPERTY_SYSTEM_TAGS, ncNamespace);
        propSet.add(WebdavEntry.EXTENDED_PROPERTY_METADATA_SIZE, ncNamespace);
        propSet.add(WebdavEntry.EXTENDED_PROPERTY_METADATA_GPS, ncNamespace);
        propSet.add(WebdavEntry.EXTENDED_PROPERTY_METADATA_PHOTOS_SIZE, ncNamespace);
        propSet.add(WebdavEntry.EXTENDED_PROPERTY_METADATA_PHOTOS_GPS, ncNamespace);

        return propSet;
    }
Loading