From 1edb79b0ed9fe55d41d25d3e2602267251a50aeb Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 10 Dec 2025 15:26:28 +0100 Subject: [PATCH] fix: upload completion listener Signed-off-by: alperozturk --- .../client/jobs/upload/FileUploadWorker.kt | 24 +++++++------------ .../java/com/nextcloud/model/WorkerState.kt | 2 +- .../ui/activity/FileDisplayActivity.kt | 5 ++-- .../android/ui/adapter/OCFileListAdapter.java | 20 ---------------- 4 files changed, 12 insertions(+), 39 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 275dce4b470c..5d74853d2896 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 @@ -142,15 +142,17 @@ class FileUploadWorker( val result = uploadFiles() backgroundJobManager.logEndOfWorker(workerName, result) - notificationManager.dismissNotification() - if (result == Result.success()) { - setIdleWorkerState() - } result } catch (t: Throwable) { - Log_OC.e(TAG, "Error caught at FileUploadWorker $t") - cleanup() + Log_OC.e(TAG, "exception $t") + currentUploadFileOperation?.cancel(null) Result.failure() + } finally { + // Ensure all database operations are complete before signaling completion + uploadsStorageManager.notifyObserversNow() + + notificationManager.dismissNotification() + setIdleWorkerState() } private suspend fun trySetForeground() { @@ -198,20 +200,12 @@ class FileUploadWorker( .setSilent(true) .build() - private fun cleanup() { - Log_OC.e(TAG, "FileUploadWorker stopped") - - setIdleWorkerState() - currentUploadFileOperation?.cancel(null) - notificationManager.dismissNotification() - } - private fun setWorkerState(user: User?) { WorkerStateObserver.send(WorkerState.FileUploadStarted(user)) } private fun setIdleWorkerState() { - WorkerStateObserver.send(WorkerState.FileUploadCompleted(currentUploadFileOperation?.file)) + WorkerStateObserver.send(WorkerState.FileUploadCompleted) } @Suppress("ReturnCount", "LongMethod", "DEPRECATION") diff --git a/app/src/main/java/com/nextcloud/model/WorkerState.kt b/app/src/main/java/com/nextcloud/model/WorkerState.kt index 7ed07584ac2d..84afa9771c11 100644 --- a/app/src/main/java/com/nextcloud/model/WorkerState.kt +++ b/app/src/main/java/com/nextcloud/model/WorkerState.kt @@ -18,7 +18,7 @@ sealed class WorkerState { data class FileDownloadCompleted(var currentFile: OCFile?) : WorkerState() data class FileUploadStarted(var user: User?) : WorkerState() - data class FileUploadCompleted(var currentFile: OCFile?) : WorkerState() + object FileUploadCompleted : WorkerState() data object OfflineOperationsCompleted : WorkerState() } diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt index b0b1807c3f5a..e8f070de0e50 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt @@ -1917,9 +1917,8 @@ class FileDisplayActivity : } is FileUploadCompleted -> { - state.currentFile?.let { - ocFileListFragment?.adapter?.insertFile(it) - } + Log_OC.d(TAG, "one or more files are uploaded") + listOfFilesFragment?.listDirectory(currentDir, MainApp.isOnlyOnDevice(), false) } is OfflineOperationsCompleted -> { diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java index 08f690ccbe93..e39d39d02bbf 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java +++ b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java @@ -1044,24 +1044,4 @@ public void cleanup() { ocFileListDelegate.cleanup(); helper.cleanup(); } - - public void insertFile(@NonNull OCFile file) { - mFiles.add(file); - mFilesAll.add(file); - - // Re-sort to maintain order - if (sortOrder != null) { - boolean foldersBeforeFiles = preferences.isSortFoldersBeforeFiles(); - boolean favoritesFirst = preferences.isSortFavoritesFirst(); - mFiles = sortOrder.sortCloudFiles(mFiles, foldersBeforeFiles, favoritesFirst); - } - - // Find actual position and notify - int position = mFiles.indexOf(file); - if (shouldShowHeader()) { - position++; - } - - notifyItemInserted(position); - } }