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

Unverified Commit 444ebdc6 authored by alperozturk's avatar alperozturk
Browse files

Add link live photo

parent 85ed42da
Loading
Loading
Loading
Loading
+18 −3
Original line number Diff line number Diff line
@@ -50,19 +50,34 @@ class ReadFileRemoteOperationIT : AbstractIT() {
    @Test
    fun testLivePhoto() {
        val movieFile = createFile("sample")
        val movieFilePath = "/sampleMovie"
        val movieFilePath = "/sampleMovie.mov"
        assertTrue(
            UploadFileRemoteOperation(movieFile, movieFilePath, "video/mov", RANDOM_MTIME)
                .execute(client).isSuccess
        )

        val livePhoto = createFile("sample")
        val livePhotoPath = "/samplePic"
        val livePhotoPath = "/samplePic.jpg"
        assertTrue(
            UploadFileRemoteOperation(livePhoto, livePhotoPath, "image/jpeg", RANDOM_MTIME)
                .execute(client).isSuccess
        )

        // link them
        assertTrue(
            LinkLivePhotoRemoteOperation(
                livePhotoPath,
                movieFilePath
            ).execute(client).isSuccess
        )

        assertTrue(
            LinkLivePhotoRemoteOperation(
                movieFilePath,
                livePhotoPath
            ).execute(client).isSuccess
        )

        val movieFileResult = ReadFileRemoteOperation(movieFilePath).execute(client)
        assertTrue(movieFileResult.isSuccess)
        val movieRemoteFile = movieFileResult.data[0] as RemoteFile
@@ -71,8 +86,8 @@ class ReadFileRemoteOperationIT : AbstractIT() {
        assertTrue(livePhotoResult.isSuccess)
        val livePhotoRemoteFile = livePhotoResult.data[0] as RemoteFile

        assertEquals(livePhotoRemoteFile.livePhoto, movieRemoteFile.remotePath)
        assertTrue(movieRemoteFile.hidden)
        assertTrue(livePhotoRemoteFile.livePhoto == movieRemoteFile.livePhoto)
    }

    @Test
+83 −0
Original line number Diff line number Diff line
/* Nextcloud Android Library is available under MIT license
 *
 *   @author Tobias Kaminsky
 *   Copyright (C) 2018 Tobias Kaminsky
 *   Copyright (C) 2018 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

import com.owncloud.android.lib.common.OwnCloudClient
import com.owncloud.android.lib.common.network.WebdavEntry
import com.owncloud.android.lib.common.operations.RemoteOperation
import com.owncloud.android.lib.common.operations.RemoteOperationResult
import org.apache.commons.httpclient.HttpStatus
import org.apache.jackrabbit.webdav.client.methods.PropPatchMethod
import org.apache.jackrabbit.webdav.property.DavPropertyNameSet
import org.apache.jackrabbit.webdav.property.DavPropertySet
import org.apache.jackrabbit.webdav.property.DefaultDavProperty
import org.apache.jackrabbit.webdav.xml.Namespace
import java.io.IOException

/**
 * Links live photos
 */
class LinkLivePhotoRemoteOperation(
    private val path: String,
    private val linkedFileName: String
) : RemoteOperation<Void>() {
    @Deprecated("Deprecated in Java")
    override fun run(client: OwnCloudClient): RemoteOperationResult<Void> {
        var result: RemoteOperationResult<Void>
        lateinit var propPatchMethod: PropPatchMethod
        val newProps = DavPropertySet()
        val removeProperties = DavPropertyNameSet()
        val readMarkerProperty =
            DefaultDavProperty(
                "nc:metadata-files-live-photo",
                linkedFileName,
                Namespace.getNamespace(WebdavEntry.NAMESPACE_NC)
            )
        newProps.add(readMarkerProperty)

        val commentsPath = client.getFilesDavUri(path)
        try {
            propPatchMethod = PropPatchMethod(commentsPath, newProps, removeProperties)
            val status = client.executeMethod(propPatchMethod)
            val isSuccess =
                status == HttpStatus.SC_NO_CONTENT || status == HttpStatus.SC_OK || status == HttpStatus.SC_MULTI_STATUS
            result =
                if (isSuccess) {
                    RemoteOperationResult<Void>(true, status, propPatchMethod.responseHeaders)
                } else {
                    client.exhaustResponse(propPatchMethod.responseBodyAsStream)
                    RemoteOperationResult<Void>(false, status, propPatchMethod.responseHeaders)
                }
        } catch (e: IOException) {
            result = RemoteOperationResult<Void>(e)
        } finally {
            propPatchMethod.releaseConnection()
        }
        return result
    }
}