From e5fc25c3ae914db00122915080148d1130e84b57 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Abel=20Garci=CC=81a=20de=20Prada?= <agdeprada@izertis.com>
Date: Tue, 25 May 2021 08:56:42 +0200
Subject: [PATCH] Add copy operation to the file service

---
 .../lib/resources/files/CopyRemoteFileOperation.kt     |  6 +++---
 .../lib/resources/files/services/FileService.kt        |  5 +++++
 .../files/services/implementation/OCFileService.kt     | 10 ++++++++++
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/CopyRemoteFileOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/CopyRemoteFileOperation.kt
index c1b77f11..ce47a4fd 100644
--- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/CopyRemoteFileOperation.kt
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/CopyRemoteFileOperation.kt
@@ -51,13 +51,13 @@ import java.util.concurrent.TimeUnit
 class CopyRemoteFileOperation(
     private val srcRemotePath: String,
     private val targetRemotePath: String,
-) : RemoteOperation<String?>() {
+) : RemoteOperation<String>() {
     /**
      * Performs the rename operation.
      *
      * @param client Client object to communicate with the remote ownCloud server.
      */
-    override fun run(client: OwnCloudClient): RemoteOperationResult<String?> {
+    override fun run(client: OwnCloudClient): RemoteOperationResult<String> {
         if (targetRemotePath == srcRemotePath) {
             // nothing to do!
             return RemoteOperationResult(ResultCode.OK)
@@ -67,7 +67,7 @@ class CopyRemoteFileOperation(
         }
 
         /// perform remote operation
-        var result: RemoteOperationResult<String?>
+        var result: RemoteOperationResult<String>
         try {
             val copyMethod = CopyMethod(
                 URL(client.userFilesWebDavUri.toString() + WebdavUtils.encodePath(srcRemotePath)),
diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/FileService.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/FileService.kt
index 9215955c..8b03f4b9 100644
--- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/FileService.kt
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/FileService.kt
@@ -35,6 +35,11 @@ interface FileService : Service {
         isUserLogged: Boolean
     ): RemoteOperationResult<Boolean>
 
+    fun copyFile(
+        sourceRemotePath: String,
+        targetRemotePath: String,
+    ): RemoteOperationResult<String>
+
     fun createFolder(
         remotePath: String,
         createFullPath: Boolean,
diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/implementation/OCFileService.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/implementation/OCFileService.kt
index 6995d91f..37d258a0 100644
--- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/implementation/OCFileService.kt
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/services/implementation/OCFileService.kt
@@ -26,6 +26,7 @@ package com.owncloud.android.lib.resources.files.services.implementation
 import com.owncloud.android.lib.common.OwnCloudClient
 import com.owncloud.android.lib.common.operations.RemoteOperationResult
 import com.owncloud.android.lib.resources.files.CheckPathExistenceRemoteOperation
+import com.owncloud.android.lib.resources.files.CopyRemoteFileOperation
 import com.owncloud.android.lib.resources.files.CreateRemoteFolderOperation
 import com.owncloud.android.lib.resources.files.DownloadRemoteFileOperation
 import com.owncloud.android.lib.resources.files.GetUrlToOpenInWebRemoteOperation
@@ -50,6 +51,15 @@ class OCFileService(override val client: OwnCloudClient) : FileService {
     override fun getUrlToOpenInWeb(openWebEndpoint: String, fileId: String): RemoteOperationResult<String> =
         GetUrlToOpenInWebRemoteOperation(openWithWebEndpoint = openWebEndpoint, fileId = fileId).execute(client)
 
+    override fun copyFile(
+        sourceRemotePath: String,
+        targetRemotePath: String
+    ): RemoteOperationResult<String> =
+        CopyRemoteFileOperation(
+            srcRemotePath = sourceRemotePath,
+            targetRemotePath = targetRemotePath
+        ).execute(client)
+
     override fun createFolder(
         remotePath: String,
         createFullPath: Boolean,