@@ -11,6 +11,7 @@ import android.app.Notification
1111import android.content.Context
1212import android.content.res.Resources
1313import androidx.exifinterface.media.ExifInterface
14+ import androidx.localbroadcastmanager.content.LocalBroadcastManager
1415import androidx.work.CoroutineWorker
1516import androidx.work.ForegroundInfo
1617import androidx.work.WorkerParameters
@@ -21,6 +22,7 @@ import com.nextcloud.client.database.entity.toOCUpload
2122import com.nextcloud.client.database.entity.toUploadEntity
2223import com.nextcloud.client.device.PowerManagementService
2324import com.nextcloud.client.jobs.BackgroundJobManager
25+ import com.nextcloud.client.jobs.upload.FileUploadBroadcastManager
2426import com.nextcloud.client.jobs.upload.FileUploadWorker
2527import com.nextcloud.client.jobs.utils.UploadErrorNotificationManager
2628import com.nextcloud.client.network.ConnectivityService
@@ -37,6 +39,7 @@ import com.owncloud.android.db.OCUpload
3739import com.owncloud.android.db.UploadResult
3840import com.owncloud.android.lib.common.OwnCloudAccount
3941import com.owncloud.android.lib.common.OwnCloudClientManagerFactory
42+ import com.owncloud.android.lib.common.operations.RemoteOperationResult
4043import com.owncloud.android.lib.common.utils.Log_OC
4144import com.owncloud.android.operations.UploadFileOperation
4245import 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