Browse Source

Merge pull request #7308 from hochwasser/patch-1

Get last modified time from SAF files put it on the uploaded file
Andy Scherzinger 4 years ago
parent
commit
8101dacecb

+ 27 - 0
src/main/java/com/owncloud/android/ui/asynctasks/CopyAndUploadContentUrisTask.java

@@ -24,8 +24,10 @@ package com.owncloud.android.ui.asynctasks;
 import android.accounts.Account;
 import android.content.ContentResolver;
 import android.content.Context;
+import android.database.Cursor;
 import android.net.Uri;
 import android.os.AsyncTask;
+import android.provider.DocumentsContract;
 import android.widget.Toast;
 
 import com.owncloud.android.R;
@@ -143,6 +145,19 @@ public class CopyAndUploadContentUrisTask extends AsyncTask<Object, Void, Result
                 currentUri = uris[i];
                 currentRemotePath = remotePaths[i];
 
+                long lastModified = 0;
+                try (Cursor cursor = leakedContentResolver.query(currentUri,
+                                                                 null,
+                                                                 null,
+                                                                 null,
+                                                                 null)) {
+                    if (cursor != null && cursor.moveToFirst()) {
+                        lastModified = cursor.getLong(
+                            cursor.getColumnIndexOrThrow(
+                                DocumentsContract.Document.COLUMN_LAST_MODIFIED));
+                    }
+                }
+
                 fullTempPath = FileStorageUtils.getTemporalPath(account.name) + currentRemotePath;
                 inputStream = leakedContentResolver.openInputStream(currentUri);
                 File cacheFile = new File(fullTempPath);
@@ -158,6 +173,18 @@ public class CopyAndUploadContentUrisTask extends AsyncTask<Object, Void, Result
                 while ((count = inputStream.read(buffer)) > 0) {
                     outputStream.write(buffer, 0, count);
                 }
+ 
+                if (lastModified != 0) {
+                    try {
+                        if (!cacheFile.setLastModified(lastModified)) {
+                            Log_OC.w(TAG, "Could not change mtime of cacheFile");
+                        }
+                    } catch (SecurityException e) {
+                        Log_OC.e(TAG, "Not enough permissions to change mtime of cacheFile", e);
+                    } catch (IllegalArgumentException e) {
+                        Log_OC.e(TAG, "Could not change mtime of cacheFile, mtime is negativ: "+lastModified, e);
+                    }
+                }
 
                 requestUpload(
                     account,