Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ interface FileDao {
ORDER BY ${ProviderTableMeta.FILE_DEFAULT_SORT_ORDER}
"""
)
fun getSubfiles(
suspend fun getSubfiles(
parentId: Long,
accountName: String,
dirType: String = MimeType.DIRECTORY,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import androidx.work.WorkerParameters
import com.nextcloud.client.account.User
import com.nextcloud.client.account.UserAccountManager
import com.nextcloud.model.WorkerState
import com.nextcloud.model.WorkerStateLiveData
import com.nextcloud.model.WorkerStateObserver
import com.nextcloud.utils.ForegroundServiceHelper
import com.nextcloud.utils.extensions.getPercent
import com.owncloud.android.R
Expand Down Expand Up @@ -152,11 +152,11 @@ class FileDownloadWorker(
)

private fun setWorkerState(user: User?) {
WorkerStateLiveData.instance().setWorkState(WorkerState.DownloadStarted(user, currentDownload))
WorkerStateObserver.send(WorkerState.FileDownloadStarted(user, currentDownload))
}

private fun setIdleWorkerState() {
WorkerStateLiveData.instance().setWorkState(WorkerState.DownloadFinished(getCurrentFile()))
WorkerStateObserver.send(WorkerState.FileDownloadCompleted(getCurrentFile()))
}

private fun removePendingDownload(accountName: String?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import androidx.work.CoroutineWorker
import androidx.work.WorkerParameters
import com.nextcloud.client.account.UserAccountManager
import com.nextcloud.client.jobs.download.FileDownloadHelper
import com.nextcloud.model.WorkerState
import com.nextcloud.model.WorkerStateObserver
import com.owncloud.android.datamodel.FileDataStorageManager
import com.owncloud.android.datamodel.OCFile
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory
Expand Down Expand Up @@ -132,6 +134,7 @@ class FolderDownloadWorker(
Log_OC.d(TAG, "❌ failed reason: $e")
Result.failure()
} finally {
WorkerStateObserver.send(WorkerState.FolderDownloadCompleted(folder))
pendingDownloads.remove(folder.fileId)
notificationManager?.dismiss()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import com.nextcloud.client.network.ClientFactoryImpl
import com.nextcloud.client.network.ConnectivityService
import com.nextcloud.model.OfflineOperationType
import com.nextcloud.model.WorkerState
import com.nextcloud.model.WorkerStateLiveData
import com.nextcloud.model.WorkerStateObserver
import com.owncloud.android.datamodel.FileDataStorageManager
import com.owncloud.android.datamodel.OCFile
import com.owncloud.android.lib.common.OwnCloudClient
Expand Down Expand Up @@ -85,7 +85,7 @@ class OfflineOperationsWorker(
processOperations(operations, client)

// finish
WorkerStateLiveData.instance().setWorkState(WorkerState.OfflineOperationsCompleted)
WorkerStateObserver.send(WorkerState.OfflineOperationsCompleted)
Log_OC.d(TAG, "🏁 Worker finished with result")
return@withContext Result.success()
} catch (e: Exception) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import com.nextcloud.client.jobs.BackgroundJobManagerImpl
import com.nextcloud.client.network.ConnectivityService
import com.nextcloud.client.preferences.AppPreferences
import com.nextcloud.model.WorkerState
import com.nextcloud.model.WorkerStateLiveData
import com.nextcloud.model.WorkerStateObserver
import com.nextcloud.utils.ForegroundServiceHelper
import com.nextcloud.utils.extensions.getPercent
import com.nextcloud.utils.extensions.updateStatus
Expand Down Expand Up @@ -180,11 +180,11 @@ class FileUploadWorker(
}

private fun setWorkerState(user: User?) {
WorkerStateLiveData.instance().setWorkState(WorkerState.UploadStarted(user))
WorkerStateObserver.send(WorkerState.FileUploadStarted(user))
}

private fun setIdleWorkerState() {
WorkerStateLiveData.instance().setWorkState(WorkerState.UploadFinished(currentUploadFileOperation?.file))
WorkerStateObserver.send(WorkerState.FileUploadCompleted(currentUploadFileOperation?.file))
}

@Suppress("ReturnCount", "LongMethod")
Expand Down
12 changes: 8 additions & 4 deletions app/src/main/java/com/nextcloud/model/WorkerState.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,13 @@ import com.owncloud.android.datamodel.OCFile
import com.owncloud.android.operations.DownloadFileOperation

sealed class WorkerState {
data class DownloadFinished(var currentFile: OCFile?) : WorkerState()
data class DownloadStarted(var user: User?, var currentDownload: DownloadFileOperation?) : WorkerState()
data class UploadFinished(var currentFile: OCFile?) : WorkerState()
data class UploadStarted(var user: User?) : WorkerState()
data class FolderDownloadCompleted(var folder: OCFile) : WorkerState()

data class FileDownloadStarted(var user: User?, var currentDownload: DownloadFileOperation?) : WorkerState()
data class FileDownloadCompleted(var currentFile: OCFile?) : WorkerState()

data class FileUploadStarted(var user: User?) : WorkerState()
data class FileUploadCompleted(var currentFile: OCFile?) : WorkerState()

data object OfflineOperationsCompleted : WorkerState()
}
25 changes: 0 additions & 25 deletions app/src/main/java/com/nextcloud/model/WorkerStateLiveData.kt

This file was deleted.

22 changes: 22 additions & 0 deletions app/src/main/java/com/nextcloud/model/WorkerStateObserver.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/*
* Nextcloud - Android Client
*
* SPDX-FileCopyrightText: 2023 Alper Ozturk <[email protected]>
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH
* SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
*/
package com.nextcloud.model

import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.asSharedFlow

object WorkerStateObserver {
private const val BUFFER_CAPACITY = 25

private val _events = MutableSharedFlow<WorkerState>(extraBufferCapacity = BUFFER_CAPACITY)
val events = _events.asSharedFlow()

fun send(state: WorkerState) {
_events.tryEmit(state)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,15 @@ package com.nextcloud.utils.extensions

import android.app.Activity
import android.content.Intent
import androidx.activity.ComponentActivity
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.nextcloud.model.WorkerState
import com.nextcloud.model.WorkerStateObserver
import kotlinx.coroutines.launch

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

Expand All @@ -29,3 +36,13 @@ fun Activity.showShareIntent(text: String?) {
val shareIntent = Intent.createChooser(sendIntent, null)
startActivity(shareIntent)
}

fun ComponentActivity.observeWorker(onCollect: (WorkerState?) -> Unit) {
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
WorkerStateObserver.events.collect {
onCollect(it)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ fun FileDataStorageManager.getDecryptedPath(file: OCFile): String {
.joinToString(OCFile.PATH_SEPARATOR)
}

fun FileDataStorageManager.getSubfiles(id: Long, accountName: String): List<OCFile> =
suspend fun FileDataStorageManager.getSubfiles(id: Long, accountName: String): List<OCFile> =
fileDao.getSubfiles(id, accountName).map {
createFileInstance(it)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ import androidx.appcompat.widget.SearchView
import androidx.core.view.MenuItemCompat
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.lifecycleScope
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.google.android.material.appbar.AppBarLayout
Expand Down Expand Up @@ -74,16 +73,16 @@ import com.nextcloud.client.utils.IntentUtil
import com.nextcloud.model.ToolbarItem
import com.nextcloud.model.ToolbarStyle
import com.nextcloud.model.WorkerState
import com.nextcloud.model.WorkerState.DownloadFinished
import com.nextcloud.model.WorkerState.DownloadStarted
import com.nextcloud.model.WorkerState.FileDownloadCompleted
import com.nextcloud.model.WorkerState.FileDownloadStarted
import com.nextcloud.model.WorkerState.OfflineOperationsCompleted
import com.nextcloud.model.WorkerState.UploadFinished
import com.nextcloud.model.WorkerStateLiveData
import com.nextcloud.model.WorkerState.FileUploadCompleted
import com.nextcloud.utils.extensions.getParcelableArgument
import com.nextcloud.utils.extensions.isActive
import com.nextcloud.utils.extensions.lastFragment
import com.nextcloud.utils.extensions.logFileSize
import com.nextcloud.utils.extensions.navigateToAllFiles
import com.nextcloud.utils.extensions.observeWorker
import com.nextcloud.utils.fileNameValidator.FileNameValidator.checkFolderPath
import com.nextcloud.utils.view.FastScrollUtils
import com.owncloud.android.MainApp
Expand Down Expand Up @@ -1870,36 +1869,36 @@ class FileDisplayActivity :
override fun isDrawerIndicatorAvailable(): Boolean = isRoot(getCurrentDir())

private fun observeWorkerState() {
WorkerStateLiveData.Companion.instance().observe(
this,
Observer { state: WorkerState? ->
when (state) {
is DownloadStarted -> {
Log_OC.d(TAG, "Download worker started")
handleDownloadWorkerState()
}
observeWorker { state ->
when (state) {
is FileDownloadStarted -> {
Log_OC.d(TAG, "Download worker started")
handleDownloadWorkerState()
}

is DownloadFinished -> {
fileDownloadProgressListener = null
previewFile(state)
}
is FileDownloadCompleted -> {
fileDownloadProgressListener = null
previewFile(state)
}

is UploadFinished -> {
refreshList()
}
is FileUploadCompleted -> {
refreshList()
}

is OfflineOperationsCompleted -> {
refreshCurrentDirectory()
}
is OfflineOperationsCompleted -> {
refreshCurrentDirectory()
}

else -> {
}
is WorkerState.FolderDownloadCompleted -> {
ocFileListFragment?.adapter?.notifyItemChanged(state.folder)
}

else -> Unit
}
)
}
}

private fun previewFile(finishedState: DownloadFinished) {
private fun previewFile(finishedState: FileDownloadCompleted) {
if (fileIDForImmediatePreview == -1L) {
return
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ import com.nextcloud.client.account.UserAccountManager
import com.nextcloud.client.jobs.download.FileDownloadHelper
import com.nextcloud.client.onboarding.FirstRunActivity
import com.nextcloud.model.WorkerState
import com.nextcloud.model.WorkerState.DownloadStarted
import com.nextcloud.model.WorkerStateLiveData
import com.nextcloud.model.WorkerState.FileDownloadStarted
import com.nextcloud.utils.extensions.getParcelableArgument
import com.nextcloud.utils.extensions.observeWorker
import com.nextcloud.utils.mdm.MDMConfig.multiAccountSupport
import com.owncloud.android.MainApp
import com.owncloud.android.R
Expand Down Expand Up @@ -454,10 +454,8 @@ class ManageAccountsActivity :
}

private fun observeWorkerState() {
WorkerStateLiveData.instance().observe(
this
) { state: WorkerState? ->
if (state is DownloadStarted) {
observeWorker { state: WorkerState? ->
if (state is FileDownloadStarted) {
Log_OC.d(TAG, "Download worker started")
workerAccountName = state.user?.accountName
workerCurrentDownload = state.currentDownload
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
import com.nextcloud.client.jobs.upload.FileUploadWorker;
import com.nextcloud.client.utils.Throttler;
import com.nextcloud.model.WorkerState;
import com.nextcloud.model.WorkerStateLiveData;
import com.nextcloud.utils.extensions.ActivityExtensionsKt;
import com.owncloud.android.R;
import com.owncloud.android.databinding.UploadListLayoutBinding;
import com.owncloud.android.datamodel.OCFile;
Expand All @@ -50,6 +50,7 @@
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import kotlin.Unit;

/**
* Activity listing pending, active, and completed uploads. User can delete completed uploads from view. Content of this
Expand Down Expand Up @@ -130,11 +131,12 @@ protected void onCreate(Bundle savedInstanceState) {
}

private void observeWorkerState() {
WorkerStateLiveData.Companion.instance().observe(this, state -> {
if (state instanceof WorkerState.UploadStarted) {
ActivityExtensionsKt.observeWorker(this, state -> {
if (state instanceof WorkerState.FileUploadStarted) {
Log_OC.d(TAG, "Upload worker started");
handleUploadWorkerState();
}
return Unit.INSTANCE;
});
}

Expand Down
Loading
Loading