From 90cef9fcf665980c9c372201e2702dfaa6045aa9 Mon Sep 17 00:00:00 2001
From: davigonz <dgonzalez@solidgear.es>
Date: Fri, 23 Aug 2019 14:10:38 +0200
Subject: [PATCH] Use remoteId of the just copied file

---
 .../android/lib/common/http/HttpConstants.java    |  1 +
 .../resources/files/CopyRemoteFileOperation.java  | 15 ++++++++-------
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/HttpConstants.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/HttpConstants.java
index 201d3b3a..2cd4df0d 100644
--- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/HttpConstants.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/HttpConstants.java
@@ -50,6 +50,7 @@ public class HttpConstants {
     public static final String CONTENT_TYPE_URLENCODED_UTF8 = "application/x-www-form-urlencoded; charset=utf-8";
     public static final String ACCEPT_ENCODING_HEADER = "Accept-Encoding";
     public static final String ACCEPT_ENCODING_IDENTITY = "identity";
+    public static final String OC_FILE_REMOTE_ID = "OC-FileId";
 
     /***********************************************************************************************************
      ************************************************ STATUS CODES *********************************************
diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/CopyRemoteFileOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/CopyRemoteFileOperation.java
index 9282bd42..79852444 100644
--- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/CopyRemoteFileOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/CopyRemoteFileOperation.java
@@ -47,7 +47,7 @@ import java.util.concurrent.TimeUnit;
  * @author David A. Velasco
  * @author Christian Schabesberger
  */
-public class CopyRemoteFileOperation extends RemoteOperation {
+public class CopyRemoteFileOperation extends RemoteOperation<String> {
 
     private static final String TAG = CopyRemoteFileOperation.class.getSimpleName();
 
@@ -80,8 +80,7 @@ public class CopyRemoteFileOperation extends RemoteOperation {
      * @param client Client object to communicate with the remote ownCloud server.
      */
     @Override
-    protected RemoteOperationResult run(OwnCloudClient client) {
-
+    protected RemoteOperationResult<String> run(OwnCloudClient client) {
         OwnCloudVersion version = client.getOwnCloudVersion();
         boolean versionWithForbiddenChars =
                 (version != null && version.isVersionWithForbiddenCharacters());
@@ -101,9 +100,10 @@ public class CopyRemoteFileOperation extends RemoteOperation {
         }
 
         /// perform remote operation
-        RemoteOperationResult result = null;
+        RemoteOperationResult<String> result;
         try {
-            CopyMethod copyMethod = new CopyMethod(new URL(client.getUserFilesWebDavUri() + WebdavUtils.encodePath(mSrcRemotePath)),
+            CopyMethod copyMethod =
+                    new CopyMethod(new URL(client.getUserFilesWebDavUri() + WebdavUtils.encodePath(mSrcRemotePath)),
                     client.getUserFilesWebDavUri() + WebdavUtils.encodePath(mTargetRemotePath),
                     mOverwrite);
 
@@ -113,16 +113,17 @@ public class CopyRemoteFileOperation extends RemoteOperation {
             final int status = client.executeHttpMethod(copyMethod);
 
             if (status == HttpConstants.HTTP_CREATED || status == HttpConstants.HTTP_NO_CONTENT) {
+                String fileRemoteId = copyMethod.getResponseHeader(HttpConstants.OC_FILE_REMOTE_ID);
                 result = new RemoteOperationResult<>(ResultCode.OK);
+                result.setData(fileRemoteId);
             } else if (status == HttpConstants.HTTP_PRECONDITION_FAILED && !mOverwrite) {
-
                 result = new RemoteOperationResult<>(ResultCode.INVALID_OVERWRITE);
                 client.exhaustResponse(copyMethod.getResponseBodyAsStream());
 
                 /// for other errors that could be explicitly handled, check first:
                 /// http://www.webdav.org/specs/rfc4918.html#rfc.section.9.9.4
-
             } else {
+
                 result = new RemoteOperationResult<>(copyMethod);
                 client.exhaustResponse(copyMethod.getResponseBodyAsStream());
             }