@@ -28,10 +28,10 @@ import androidx.lifecycle.viewModelScope
28
28
import androidx.work.WorkInfo
29
29
import com.owncloud.android.domain.files.model.OCFile
30
30
import com.owncloud.android.domain.spaces.model.OCSpace
31
- import com.owncloud.android.domain.spaces.usecases.GetSpacesFromEveryAccountUseCase
31
+ import com.owncloud.android.domain.spaces.usecases.GetSpacesFromEveryAccountUseCaseAsStream
32
32
import com.owncloud.android.domain.transfers.model.OCTransfer
33
33
import com.owncloud.android.domain.transfers.usecases.ClearSuccessfulTransfersUseCase
34
- import com.owncloud.android.domain.transfers.usecases.GetAllTransfersAsLiveDataUseCase
34
+ import com.owncloud.android.domain.transfers.usecases.GetAllTransfersAsStreamUseCase
35
35
import com.owncloud.android.providers.CoroutinesDispatcherProvider
36
36
import com.owncloud.android.providers.WorkManagerProvider
37
37
import com.owncloud.android.usecases.transfers.downloads.CancelDownloadForFileUseCase
@@ -46,9 +46,10 @@ import com.owncloud.android.usecases.transfers.uploads.RetryUploadFromContentUri
46
46
import com.owncloud.android.usecases.transfers.uploads.RetryUploadFromSystemUseCase
47
47
import com.owncloud.android.usecases.transfers.uploads.UploadFilesFromContentUriUseCase
48
48
import com.owncloud.android.usecases.transfers.uploads.UploadFilesFromSystemUseCase
49
- import kotlinx.coroutines.flow.MutableStateFlow
49
+ import kotlinx.coroutines.flow.SharingStarted
50
50
import kotlinx.coroutines.flow.StateFlow
51
- import kotlinx.coroutines.flow.update
51
+ import kotlinx.coroutines.flow.combine
52
+ import kotlinx.coroutines.flow.stateIn
52
53
import kotlinx.coroutines.launch
53
54
54
55
class TransfersViewModel (
@@ -61,43 +62,39 @@ class TransfersViewModel(
61
62
private val clearFailedTransfersUseCase : ClearFailedTransfersUseCase ,
62
63
private val retryFailedUploadsUseCase : RetryFailedUploadsUseCase ,
63
64
private val clearSuccessfulTransfersUseCase : ClearSuccessfulTransfersUseCase ,
64
- getAllTransfersAsLiveDataUseCase : GetAllTransfersAsLiveDataUseCase ,
65
+ getAllTransfersAsStreamUseCase : GetAllTransfersAsStreamUseCase ,
65
66
private val cancelDownloadForFileUseCase : CancelDownloadForFileUseCase ,
66
67
private val cancelUploadForFileUseCase : CancelUploadForFileUseCase ,
67
68
private val cancelUploadsRecursivelyUseCase : CancelUploadsRecursivelyUseCase ,
68
69
private val cancelDownloadsRecursivelyUseCase : CancelDownloadsRecursivelyUseCase ,
69
- private val getSpacesFromEveryAccountUseCase : GetSpacesFromEveryAccountUseCase ,
70
+ getSpacesFromEveryAccountUseCaseAsStream : GetSpacesFromEveryAccountUseCaseAsStream ,
70
71
private val coroutinesDispatcherProvider : CoroutinesDispatcherProvider ,
71
72
workManagerProvider : WorkManagerProvider ,
72
73
) : ViewModel() {
73
-
74
- private val _transfersListLiveData = MediatorLiveData <List <OCTransfer >>()
75
- val transfersListLiveData: LiveData <List <OCTransfer >>
76
- get() = _transfersListLiveData
77
-
78
74
private val _workInfosListLiveData = MediatorLiveData <List <WorkInfo >>()
79
75
val workInfosListLiveData: LiveData <List <WorkInfo >>
80
76
get() = _workInfosListLiveData
81
77
82
- private var transfersLiveData = getAllTransfersAsLiveDataUseCase.execute(Unit )
78
+ val transfersWithSpaceStateFlow: StateFlow <List <Pair <OCTransfer , OCSpace ?>>> = combine(
79
+ getAllTransfersAsStreamUseCase.execute(Unit ),
80
+ getSpacesFromEveryAccountUseCaseAsStream.execute(Unit )
81
+ ) { transfers: List <OCTransfer >, spaces: List <OCSpace > ->
82
+ transfers.map { transfer ->
83
+ val spaceForTransfer = spaces.firstOrNull { space -> transfer.spaceId == space.id && transfer.accountName == space.accountName }
84
+ Pair (transfer, spaceForTransfer)
85
+ }
86
+ }.stateIn(
87
+ scope = viewModelScope,
88
+ started = SharingStarted .WhileSubscribed (5_000 ),
89
+ initialValue = emptyList()
90
+ )
83
91
84
92
private var workInfosLiveData = workManagerProvider.getRunningUploadsWorkInfosLiveData()
85
93
86
- private val _spaces : MutableStateFlow <List <OCSpace >> = MutableStateFlow (emptyList())
87
- val spaces: StateFlow <List <OCSpace >>
88
- get() = _spaces
89
-
90
94
init {
91
- _transfersListLiveData .addSource(transfersLiveData) { transfers ->
92
- _transfersListLiveData .postValue(transfers)
93
- }
94
95
_workInfosListLiveData .addSource(workInfosLiveData) { workInfos ->
95
96
_workInfosListLiveData .postValue(workInfos)
96
97
}
97
- viewModelScope.launch(coroutinesDispatcherProvider.io) {
98
- val spacesList = getSpacesFromEveryAccountUseCase.execute(Unit )
99
- _spaces .update { spacesList }
100
- }
101
98
}
102
99
103
100
fun uploadFilesFromContentUri (
0 commit comments