Skip to content

Commit 837067b

Browse files
committed
fix: observing worker states
Signed-off-by: alperozturk <[email protected]>
1 parent a9b5dc8 commit 837067b

File tree

16 files changed

+124
-109
lines changed

16 files changed

+124
-109
lines changed

app/src/main/java/com/nextcloud/client/database/dao/FileDao.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ interface FileDao {
9393
ORDER BY ${ProviderTableMeta.FILE_DEFAULT_SORT_ORDER}
9494
"""
9595
)
96-
fun getSubfiles(
96+
suspend fun getSubfiles(
9797
parentId: Long,
9898
accountName: String,
9999
dirType: String = MimeType.DIRECTORY,

app/src/main/java/com/nextcloud/client/jobs/download/FileDownloadWorker.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import androidx.work.WorkerParameters
2222
import com.nextcloud.client.account.User
2323
import com.nextcloud.client.account.UserAccountManager
2424
import com.nextcloud.model.WorkerState
25-
import com.nextcloud.model.WorkerStateLiveData
25+
import com.nextcloud.model.WorkerStateObserver
2626
import com.nextcloud.utils.ForegroundServiceHelper
2727
import com.nextcloud.utils.extensions.getPercent
2828
import com.owncloud.android.R
@@ -152,11 +152,11 @@ class FileDownloadWorker(
152152
)
153153

154154
private fun setWorkerState(user: User?) {
155-
WorkerStateLiveData.instance().setWorkState(WorkerState.DownloadStarted(user, currentDownload))
155+
WorkerStateObserver.send(WorkerState.FileDownloadStarted(user, currentDownload))
156156
}
157157

158158
private fun setIdleWorkerState() {
159-
WorkerStateLiveData.instance().setWorkState(WorkerState.DownloadFinished(getCurrentFile()))
159+
WorkerStateObserver.send(WorkerState.FileDownloadCompleted(getCurrentFile()))
160160
}
161161

162162
private fun removePendingDownload(accountName: String?) {

app/src/main/java/com/nextcloud/client/jobs/folderDownload/FolderDownloadWorker.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import androidx.work.CoroutineWorker
1212
import androidx.work.WorkerParameters
1313
import com.nextcloud.client.account.UserAccountManager
1414
import com.nextcloud.client.jobs.download.FileDownloadHelper
15+
import com.nextcloud.model.WorkerState
16+
import com.nextcloud.model.WorkerStateObserver
1517
import com.owncloud.android.datamodel.FileDataStorageManager
1618
import com.owncloud.android.datamodel.OCFile
1719
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory
@@ -132,6 +134,7 @@ class FolderDownloadWorker(
132134
Log_OC.d(TAG, "❌ failed reason: $e")
133135
Result.failure()
134136
} finally {
137+
WorkerStateObserver.send(WorkerState.FolderDownloadCompleted(folder))
135138
pendingDownloads.remove(folder.fileId)
136139
notificationManager?.dismiss()
137140
}

app/src/main/java/com/nextcloud/client/jobs/offlineOperations/OfflineOperationsWorker.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import com.nextcloud.client.network.ClientFactoryImpl
1717
import com.nextcloud.client.network.ConnectivityService
1818
import com.nextcloud.model.OfflineOperationType
1919
import com.nextcloud.model.WorkerState
20-
import com.nextcloud.model.WorkerStateLiveData
20+
import com.nextcloud.model.WorkerStateObserver
2121
import com.owncloud.android.datamodel.FileDataStorageManager
2222
import com.owncloud.android.datamodel.OCFile
2323
import com.owncloud.android.lib.common.OwnCloudClient
@@ -85,7 +85,7 @@ class OfflineOperationsWorker(
8585
processOperations(operations, client)
8686

8787
// finish
88-
WorkerStateLiveData.instance().setWorkState(WorkerState.OfflineOperationsCompleted)
88+
WorkerStateObserver.send(WorkerState.OfflineOperationsCompleted)
8989
Log_OC.d(TAG, "🏁 Worker finished with result")
9090
return@withContext Result.success()
9191
} catch (e: Exception) {

app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import com.nextcloud.client.jobs.BackgroundJobManagerImpl
2222
import com.nextcloud.client.network.ConnectivityService
2323
import com.nextcloud.client.preferences.AppPreferences
2424
import com.nextcloud.model.WorkerState
25-
import com.nextcloud.model.WorkerStateLiveData
25+
import com.nextcloud.model.WorkerStateObserver
2626
import com.nextcloud.utils.ForegroundServiceHelper
2727
import com.nextcloud.utils.extensions.getPercent
2828
import com.nextcloud.utils.extensions.updateStatus
@@ -180,11 +180,11 @@ class FileUploadWorker(
180180
}
181181

182182
private fun setWorkerState(user: User?) {
183-
WorkerStateLiveData.instance().setWorkState(WorkerState.UploadStarted(user))
183+
WorkerStateObserver.send(WorkerState.FileUploadStarted(user))
184184
}
185185

186186
private fun setIdleWorkerState() {
187-
WorkerStateLiveData.instance().setWorkState(WorkerState.UploadFinished(currentUploadFileOperation?.file))
187+
WorkerStateObserver.send(WorkerState.FileUploadCompleted(currentUploadFileOperation?.file))
188188
}
189189

190190
@Suppress("ReturnCount", "LongMethod")

app/src/main/java/com/nextcloud/model/WorkerState.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,13 @@ import com.owncloud.android.datamodel.OCFile
1212
import com.owncloud.android.operations.DownloadFileOperation
1313

1414
sealed class WorkerState {
15-
data class DownloadFinished(var currentFile: OCFile?) : WorkerState()
16-
data class DownloadStarted(var user: User?, var currentDownload: DownloadFileOperation?) : WorkerState()
17-
data class UploadFinished(var currentFile: OCFile?) : WorkerState()
18-
data class UploadStarted(var user: User?) : WorkerState()
15+
data class FolderDownloadCompleted(var folder: OCFile) : WorkerState()
16+
17+
data class FileDownloadStarted(var user: User?, var currentDownload: DownloadFileOperation?) : WorkerState()
18+
data class FileDownloadCompleted(var currentFile: OCFile?) : WorkerState()
19+
20+
data class FileUploadStarted(var user: User?) : WorkerState()
21+
data class FileUploadCompleted(var currentFile: OCFile?) : WorkerState()
22+
1923
data object OfflineOperationsCompleted : WorkerState()
2024
}

app/src/main/java/com/nextcloud/model/WorkerStateLiveData.kt

Lines changed: 0 additions & 25 deletions
This file was deleted.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
* Nextcloud - Android Client
3+
*
4+
* SPDX-FileCopyrightText: 2023 Alper Ozturk <[email protected]>
5+
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH
6+
* SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
7+
*/
8+
package com.nextcloud.model
9+
10+
import kotlinx.coroutines.flow.MutableSharedFlow
11+
import kotlinx.coroutines.flow.asSharedFlow
12+
13+
object WorkerStateObserver {
14+
private const val BUFFER_CAPACITY = 25
15+
16+
private val _events = MutableSharedFlow<WorkerState>(extraBufferCapacity = BUFFER_CAPACITY)
17+
val events = _events.asSharedFlow()
18+
19+
fun send(state: WorkerState) {
20+
_events.tryEmit(state)
21+
}
22+
}

app/src/main/java/com/nextcloud/utils/extensions/ActivityExtensions.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,15 @@ package com.nextcloud.utils.extensions
99

1010
import android.app.Activity
1111
import android.content.Intent
12+
import androidx.activity.ComponentActivity
1213
import androidx.appcompat.app.AppCompatActivity
1314
import androidx.fragment.app.Fragment
15+
import androidx.lifecycle.Lifecycle
16+
import androidx.lifecycle.lifecycleScope
17+
import androidx.lifecycle.repeatOnLifecycle
18+
import com.nextcloud.model.WorkerState
19+
import com.nextcloud.model.WorkerStateObserver
20+
import kotlinx.coroutines.launch
1421

1522
fun AppCompatActivity.isDialogFragmentReady(fragment: Fragment): Boolean = isActive() && !fragment.isStateSaved
1623

@@ -29,3 +36,13 @@ fun Activity.showShareIntent(text: String?) {
2936
val shareIntent = Intent.createChooser(sendIntent, null)
3037
startActivity(shareIntent)
3138
}
39+
40+
fun ComponentActivity.observeWorker(onCollect: (WorkerState?) -> Unit) {
41+
lifecycleScope.launch {
42+
repeatOnLifecycle(Lifecycle.State.STARTED) {
43+
WorkerStateObserver.events.collect {
44+
onCollect(it)
45+
}
46+
}
47+
}
48+
}

app/src/main/java/com/nextcloud/utils/extensions/FileDataStorageManagerExtensions.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ fun FileDataStorageManager.getDecryptedPath(file: OCFile): String {
3131
.joinToString(OCFile.PATH_SEPARATOR)
3232
}
3333

34-
fun FileDataStorageManager.getSubfiles(id: Long, accountName: String): List<OCFile> =
34+
suspend fun FileDataStorageManager.getSubfiles(id: Long, accountName: String): List<OCFile> =
3535
fileDao.getSubfiles(id, accountName).map {
3636
createFileInstance(it)
3737
}

0 commit comments

Comments
 (0)