Skip to content

Commit 660fb8a

Browse files
committed
add upload finish event for auto upload worker
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent d666764 commit 660fb8a

2 files changed

Lines changed: 25 additions & 4 deletions

File tree

app/src/main/java/com/nextcloud/client/jobs/BackgroundJobFactory.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ import com.nextcloud.client.integrations.deck.DeckApi
2525
import com.nextcloud.client.jobs.autoUpload.AutoUploadWorker
2626
import com.nextcloud.client.jobs.autoUpload.FileSystemRepository
2727
import com.nextcloud.client.jobs.download.FileDownloadWorker
28+
import com.nextcloud.client.jobs.folderDownload.FolderDownloadWorker
2829
import com.nextcloud.client.jobs.metadata.MetadataWorker
2930
import com.nextcloud.client.jobs.offlineOperations.OfflineOperationsWorker
30-
import com.nextcloud.client.jobs.folderDownload.FolderDownloadWorker
3131
import com.nextcloud.client.jobs.upload.FileUploadWorker
3232
import com.nextcloud.client.logger.Logger
3333
import com.nextcloud.client.network.ConnectivityService
@@ -180,7 +180,8 @@ class BackgroundJobFactory @Inject constructor(
180180
syncedFolderProvider = syncedFolderProvider,
181181
backgroundJobManager = backgroundJobManager.get(),
182182
repository = FileSystemRepository(dao = database.fileSystemDao(), context),
183-
viewThemeUtils = viewThemeUtils.get()
183+
viewThemeUtils = viewThemeUtils.get(),
184+
localBroadcastManager = localBroadcastManager.get()
184185
)
185186

186187
private fun createOfflineSyncWork(context: Context, params: WorkerParameters): OfflineSyncWork = OfflineSyncWork(

app/src/main/java/com/nextcloud/client/jobs/autoUpload/AutoUploadWorker.kt

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import android.app.Notification
1111
import android.content.Context
1212
import android.content.res.Resources
1313
import androidx.exifinterface.media.ExifInterface
14+
import androidx.localbroadcastmanager.content.LocalBroadcastManager
1415
import androidx.work.CoroutineWorker
1516
import androidx.work.ForegroundInfo
1617
import androidx.work.WorkerParameters
@@ -21,6 +22,7 @@ import com.nextcloud.client.database.entity.toOCUpload
2122
import com.nextcloud.client.database.entity.toUploadEntity
2223
import com.nextcloud.client.device.PowerManagementService
2324
import com.nextcloud.client.jobs.BackgroundJobManager
25+
import com.nextcloud.client.jobs.upload.FileUploadBroadcastManager
2426
import com.nextcloud.client.jobs.upload.FileUploadWorker
2527
import com.nextcloud.client.jobs.utils.UploadErrorNotificationManager
2628
import com.nextcloud.client.network.ConnectivityService
@@ -37,6 +39,7 @@ import com.owncloud.android.db.OCUpload
3739
import com.owncloud.android.db.UploadResult
3840
import com.owncloud.android.lib.common.OwnCloudAccount
3941
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory
42+
import com.owncloud.android.lib.common.operations.RemoteOperationResult
4043
import com.owncloud.android.lib.common.utils.Log_OC
4144
import com.owncloud.android.operations.UploadFileOperation
4245
import com.owncloud.android.ui.activity.SettingsActivity
@@ -62,7 +65,8 @@ class AutoUploadWorker(
6265
private val syncedFolderProvider: SyncedFolderProvider,
6366
private val backgroundJobManager: BackgroundJobManager,
6467
private val repository: FileSystemRepository,
65-
val viewThemeUtils: ViewThemeUtils
68+
val viewThemeUtils: ViewThemeUtils,
69+
private val localBroadcastManager: LocalBroadcastManager
6670
) : CoroutineWorker(context, params) {
6771

6872
companion object {
@@ -74,6 +78,7 @@ class AutoUploadWorker(
7478
}
7579

7680
private val helper = AutoUploadHelper()
81+
private val fileUploadBroadcastManager = FileUploadBroadcastManager(localBroadcastManager)
7782
private lateinit var syncedFolder: SyncedFolder
7883
private val notificationManager = AutoUploadNotificationManager(context, viewThemeUtils, NOTIFICATION_ID)
7984

@@ -281,6 +286,7 @@ class AutoUploadWorker(
281286
updateNotification()
282287

283288
var lastId = 0
289+
284290
while (true) {
285291
val filePathsWithIds = repository.getFilePathsWithIds(syncedFolder, lastId)
286292

@@ -290,7 +296,7 @@ class AutoUploadWorker(
290296
}
291297
Log_OC.d(TAG, "Processing batch: lastId=$lastId, count=${filePathsWithIds.size}")
292298

293-
filePathsWithIds.forEach { (path, id) ->
299+
filePathsWithIds.forEachIndexed { batchIndex, (path, id) ->
294300
val file = File(path)
295301
val localPath = file.absolutePath
296302
val remotePath = getRemotePath(
@@ -347,6 +353,11 @@ class AutoUploadWorker(
347353
"❌ upload failed $localPath (${upload.accountName}): ${result.logMessage}"
348354
)
349355
}
356+
357+
val isLastInBatch = (batchIndex == filePathsWithIds.size - 1)
358+
if (isLastInBatch) {
359+
sendUploadFinishEvent(operation, result)
360+
}
350361
} catch (e: Exception) {
351362
uploadsStorageManager.updateStatus(
352363
uploadEntity,
@@ -515,4 +526,13 @@ class AutoUploadWorker(
515526
}
516527
return lastModificationTime
517528
}
529+
530+
private fun sendUploadFinishEvent(operation: UploadFileOperation, result: RemoteOperationResult<*>) {
531+
fileUploadBroadcastManager.sendFinished(
532+
operation,
533+
result,
534+
operation.oldFile?.storagePath,
535+
context
536+
)
537+
}
518538
}

0 commit comments

Comments
 (0)