From ab190f5c91f606561b2dba75be84187eb6a40309 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 15 Jan 2025 09:37:04 +0100 Subject: [PATCH 1/5] Don't Show Failed Upload Message For Same File Signed-off-by: alperozturk --- .../java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt | 3 --- app/src/main/res/values/strings.xml | 1 - 2 files changed, 4 deletions(-) diff --git a/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt b/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt index 6422b0efa71b..b50fcc57853d 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt @@ -22,8 +22,6 @@ import com.nextcloud.client.preferences.AppPreferences import com.nextcloud.model.WorkerState import com.nextcloud.model.WorkerStateLiveData import com.nextcloud.utils.extensions.getPercent -import com.nextcloud.utils.extensions.showToast -import com.owncloud.android.R import com.owncloud.android.datamodel.FileDataStorageManager import com.owncloud.android.datamodel.ThumbnailsCacheManager import com.owncloud.android.datamodel.UploadsStorageManager @@ -284,7 +282,6 @@ class FileUploadWorker( context ) ) { - context.showToast(R.string.file_upload_worker_same_file_already_exists) return } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7fdc1987286d..1bd07eb0fbe8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -172,7 +172,6 @@ Keep file in source folder Delete file from source folder seconds ago - Same file already exists, no conflict detected LIVE No files here No folders here From b3981bdd6df0f74245a7dce9c26acc27a38d0345 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 15 Jan 2025 15:01:50 +0100 Subject: [PATCH 2/5] handleLocalBehaviour Signed-off-by: alperozturk --- .../client/jobs/upload/FileUploadWorker.kt | 1 + .../operations/UploadFileOperation.java | 22 ++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt b/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt index b50fcc57853d..61562f08a26f 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt @@ -282,6 +282,7 @@ class FileUploadWorker( context ) ) { + uploadFileOperation.handleLocalBehaviour() return } diff --git a/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java b/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java index 2ff9e9e1a376..c8d3f804d917 100644 --- a/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java +++ b/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java @@ -845,7 +845,7 @@ private void updateMetadataForV2(DecryptedFolderMetadataFile metadata, Encryptio private void completeE2EUpload(RemoteOperationResult result, E2EFiles e2eFiles, OwnCloudClient client) { if (result.isSuccess()) { - handleSuccessfulUpload(e2eFiles.getTemporalFile(), e2eFiles.getExpectedFile(), e2eFiles.getOriginalFile(), client); + handleLocalBehaviour(e2eFiles.getTemporalFile(), e2eFiles.getExpectedFile(), e2eFiles.getOriginalFile(), client); } else if (result.getCode() == ResultCode.SYNC_CONFLICT) { getStorageManager().saveConflict(mFile, mFile.getEtagInConflict()); } @@ -1098,7 +1098,7 @@ private RemoteOperationResult normalUpload(OwnCloudClient client) { } if (result.isSuccess()) { - handleSuccessfulUpload(temporalFile, expectedFile, originalFile, client); + handleLocalBehaviour(temporalFile, expectedFile, originalFile, client); } else if (result.getCode() == ResultCode.SYNC_CONFLICT) { getStorageManager().saveConflict(mFile, mFile.getEtagInConflict()); } @@ -1197,10 +1197,20 @@ private RemoteOperationResult checkNameCollision(OCFile parentFile, return null; } - private void handleSuccessfulUpload(File temporalFile, - File expectedFile, - File originalFile, - OwnCloudClient client) { + public void handleLocalBehaviour() { + String expectedPath = FileStorageUtils.getDefaultSavePathFor(user.getAccountName(), mFile); + File expectedFile = new File(expectedPath); + File originalFile = new File(mOriginalStoragePath); + String temporalPath = FileStorageUtils.getInternalTemporalPath(user.getAccountName(), mContext) + mFile.getRemotePath(); + File temporalFile = new File(temporalPath); + + handleLocalBehaviour(temporalFile, expectedFile, originalFile, getClient()); + } + + private void handleLocalBehaviour(File temporalFile, + File expectedFile, + File originalFile, + OwnCloudClient client) { switch (mLocalBehaviour) { case FileUploadWorker.LOCAL_BEHAVIOUR_FORGET: default: From d35eb72002eafed4e8da57195b5e56da8b060f9e Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 15 Jan 2025 15:27:04 +0100 Subject: [PATCH 3/5] check variables Signed-off-by: alperozturk --- .../com/owncloud/android/operations/UploadFileOperation.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java b/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java index c8d3f804d917..4ea4aff626c1 100644 --- a/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java +++ b/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java @@ -1198,6 +1198,10 @@ private RemoteOperationResult checkNameCollision(OCFile parentFile, } public void handleLocalBehaviour() { + if (user == null || mFile == null || mContext == null) { + return; + } + String expectedPath = FileStorageUtils.getDefaultSavePathFor(user.getAccountName(), mFile); File expectedFile = new File(expectedPath); File originalFile = new File(mOriginalStoragePath); From 0dd424175acdfb6f8bd062a98201a29452262371 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 15 Jan 2025 15:43:23 +0100 Subject: [PATCH 4/5] add e2e variant Signed-off-by: alperozturk --- .../operations/UploadFileOperation.java | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java b/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java index 4ea4aff626c1..564dc73778f5 100644 --- a/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java +++ b/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java @@ -452,11 +452,13 @@ protected RemoteOperationResult run(OwnCloudClient client) { } } + private E2EFiles e2eFiles; + // region E2E Upload @SuppressLint("AndroidLintUseSparseArrays") // gson cannot handle sparse arrays easily, therefore use hashmap private RemoteOperationResult encryptedUpload(OwnCloudClient client, OCFile parentFile) { RemoteOperationResult result = null; - E2EFiles e2eFiles = new E2EFiles(parentFile, null, new File(mOriginalStoragePath), null, null); + e2eFiles = new E2EFiles(parentFile, null, new File(mOriginalStoragePath), null, null); FileLock fileLock = null; long size; @@ -1199,16 +1201,32 @@ private RemoteOperationResult checkNameCollision(OCFile parentFile, public void handleLocalBehaviour() { if (user == null || mFile == null || mContext == null) { + Log_OC.d(TAG, "handleLocalBehaviour: user, file, or context is null."); return; } - String expectedPath = FileStorageUtils.getDefaultSavePathFor(user.getAccountName(), mFile); - File expectedFile = new File(expectedPath); - File originalFile = new File(mOriginalStoragePath); - String temporalPath = FileStorageUtils.getInternalTemporalPath(user.getAccountName(), mContext) + mFile.getRemotePath(); - File temporalFile = new File(temporalPath); + final var client = getClient(); + if (client == null) { + Log_OC.d(TAG, "handleLocalBehaviour: client is null"); + return; + } + + if (encryptedAncestor) { + if (e2eFiles == null) { + Log_OC.d(TAG, "handleLocalBehaviour: e2eFiles is null"); + return; + } - handleLocalBehaviour(temporalFile, expectedFile, originalFile, getClient()); + handleLocalBehaviour(e2eFiles.getTemporalFile(), e2eFiles.getExpectedFile(), e2eFiles.getOriginalFile(), client); + } else { + String expectedPath = FileStorageUtils.getDefaultSavePathFor(user.getAccountName(), mFile); + File expectedFile = new File(expectedPath); + File originalFile = new File(mOriginalStoragePath); + String temporalPath = FileStorageUtils.getInternalTemporalPath(user.getAccountName(), mContext) + mFile.getRemotePath(); + File temporalFile = new File(temporalPath); + + handleLocalBehaviour(temporalFile, expectedFile, originalFile, client); + } } private void handleLocalBehaviour(File temporalFile, From a2aaa8c29d4ce91bc602a1dcbca28328e1ef9c82 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 15 Jan 2025 15:51:04 +0100 Subject: [PATCH 5/5] e2e not supported for auto upload Signed-off-by: alperozturk --- .../operations/UploadFileOperation.java | 25 ++++++------------- 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java b/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java index 564dc73778f5..36d25cb3fd5f 100644 --- a/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java +++ b/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java @@ -452,13 +452,11 @@ protected RemoteOperationResult run(OwnCloudClient client) { } } - private E2EFiles e2eFiles; - // region E2E Upload @SuppressLint("AndroidLintUseSparseArrays") // gson cannot handle sparse arrays easily, therefore use hashmap private RemoteOperationResult encryptedUpload(OwnCloudClient client, OCFile parentFile) { RemoteOperationResult result = null; - e2eFiles = new E2EFiles(parentFile, null, new File(mOriginalStoragePath), null, null); + E2EFiles e2eFiles = new E2EFiles(parentFile, null, new File(mOriginalStoragePath), null, null); FileLock fileLock = null; long size; @@ -1211,22 +1209,13 @@ public void handleLocalBehaviour() { return; } - if (encryptedAncestor) { - if (e2eFiles == null) { - Log_OC.d(TAG, "handleLocalBehaviour: e2eFiles is null"); - return; - } - - handleLocalBehaviour(e2eFiles.getTemporalFile(), e2eFiles.getExpectedFile(), e2eFiles.getOriginalFile(), client); - } else { - String expectedPath = FileStorageUtils.getDefaultSavePathFor(user.getAccountName(), mFile); - File expectedFile = new File(expectedPath); - File originalFile = new File(mOriginalStoragePath); - String temporalPath = FileStorageUtils.getInternalTemporalPath(user.getAccountName(), mContext) + mFile.getRemotePath(); - File temporalFile = new File(temporalPath); + String expectedPath = FileStorageUtils.getDefaultSavePathFor(user.getAccountName(), mFile); + File expectedFile = new File(expectedPath); + File originalFile = new File(mOriginalStoragePath); + String temporalPath = FileStorageUtils.getInternalTemporalPath(user.getAccountName(), mContext) + mFile.getRemotePath(); + File temporalFile = new File(temporalPath); - handleLocalBehaviour(temporalFile, expectedFile, originalFile, client); - } + handleLocalBehaviour(temporalFile, expectedFile, originalFile, client); } private void handleLocalBehaviour(File temporalFile,