Loading .drone.yml +6 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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: Loading Loading @@ -208,6 +213,6 @@ trigger: - pull_request --- kind: signature hmac: 6e5294dd68e3c1b79e0b06e6a3e31e3c3f4599d2839fb7d98f87f1381b263a9f hmac: 6d69c7c3739747691580d04a781eb67cf95d2f33f8149d5ebd2cbcc30611b4f0 ... library/src/androidTest/java/com/owncloud/android/lib/resources/files/ReadFileRemoteOperationIT.kt +14 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading library/src/main/java/com/nextcloud/extensions/GsonExtensions.kt 0 → 100644 +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 } } library/src/main/java/com/owncloud/android/lib/common/network/WebdavEntry.kt +50 −8 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading Loading @@ -282,9 +285,11 @@ class WebdavEntry constructor(ms: MultiStatusResponse, splitElement: String) { "external" -> { MountType.EXTERNAL } "group" -> { MountType.GROUP } else -> { MountType.INTERNAL } Loading Loading @@ -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) Loading Loading @@ -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" Loading library/src/main/java/com/owncloud/android/lib/common/network/WebdavUtils.java +4 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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 Loading
.drone.yml +6 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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: Loading Loading @@ -208,6 +213,6 @@ trigger: - pull_request --- kind: signature hmac: 6e5294dd68e3c1b79e0b06e6a3e31e3c3f4599d2839fb7d98f87f1381b263a9f hmac: 6d69c7c3739747691580d04a781eb67cf95d2f33f8149d5ebd2cbcc30611b4f0 ...
library/src/androidTest/java/com/owncloud/android/lib/resources/files/ReadFileRemoteOperationIT.kt +14 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading
library/src/main/java/com/nextcloud/extensions/GsonExtensions.kt 0 → 100644 +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 } }
library/src/main/java/com/owncloud/android/lib/common/network/WebdavEntry.kt +50 −8 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading Loading @@ -282,9 +285,11 @@ class WebdavEntry constructor(ms: MultiStatusResponse, splitElement: String) { "external" -> { MountType.EXTERNAL } "group" -> { MountType.GROUP } else -> { MountType.INTERNAL } Loading Loading @@ -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) Loading Loading @@ -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" Loading
library/src/main/java/com/owncloud/android/lib/common/network/WebdavUtils.java +4 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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