Skip to content

Commit 5695ca2

Browse files
committed
refactor: create generic function to execute use cases and emit their results to a flow
1 parent 2c60199 commit 5695ca2

File tree

1 file changed

+36
-31
lines changed

1 file changed

+36
-31
lines changed

owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/SpacesListViewModel.kt

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ package com.owncloud.android.presentation.spaces
2323

2424
import androidx.lifecycle.ViewModel
2525
import androidx.lifecycle.viewModelScope
26+
import com.owncloud.android.domain.BaseUseCaseWithResult
2627
import com.owncloud.android.domain.UseCaseResult
2728
import com.owncloud.android.domain.capabilities.usecases.GetStoredCapabilitiesUseCase
2829
import com.owncloud.android.domain.files.model.OCFile
@@ -171,23 +172,19 @@ class SpacesListViewModel(
171172
)
172173

173174
fun createSpace(spaceName: String, spaceSubtitle: String, spaceQuota: Long) {
174-
viewModelScope.launch(coroutinesDispatcherProvider.io) {
175-
when (val result = createSpaceUseCase(CreateSpaceUseCase.Params(accountName, spaceName, spaceSubtitle, spaceQuota))) {
176-
is UseCaseResult.Success -> _createSpaceFlow.emit(Event(UIResult.Success(result.getDataOrNull())))
177-
is UseCaseResult.Error -> _createSpaceFlow.emit(Event(UIResult.Error(error = result.getThrowableOrNull())))
178-
}
179-
refreshSpacesFromServerAsyncUseCase(RefreshSpacesFromServerAsyncUseCase.Params(accountName))
180-
}
175+
runSpaceOperation(
176+
flow = _createSpaceFlow,
177+
useCase = createSpaceUseCase,
178+
useCaseParams = CreateSpaceUseCase.Params(accountName, spaceName, spaceSubtitle, spaceQuota)
179+
)
181180
}
182181

183182
fun editSpace(spaceId: String, spaceName: String, spaceSubtitle: String, spaceQuota: Long?) {
184-
viewModelScope.launch(coroutinesDispatcherProvider.io) {
185-
when (val result = editSpaceUseCase(EditSpaceUseCase.Params(accountName, spaceId, spaceName, spaceSubtitle, spaceQuota))) {
186-
is UseCaseResult.Success -> _editSpaceFlow.emit(Event(UIResult.Success(result.getDataOrNull())))
187-
is UseCaseResult.Error -> _editSpaceFlow.emit(Event(UIResult.Error(error = result.getThrowableOrNull())))
188-
}
189-
refreshSpacesFromServerAsyncUseCase(RefreshSpacesFromServerAsyncUseCase.Params(accountName))
190-
}
183+
runSpaceOperation(
184+
flow = _editSpaceFlow,
185+
useCase = editSpaceUseCase,
186+
useCaseParams = EditSpaceUseCase.Params(accountName, spaceId, spaceName, spaceSubtitle, spaceQuota)
187+
)
191188
}
192189

193190
fun filterMenuOptions(space: OCSpace, userPermissions: Set<UserPermissions>) {
@@ -204,30 +201,38 @@ class SpacesListViewModel(
204201
}
205202

206203
fun disableSpace(spaceId: String){
207-
viewModelScope.launch(coroutinesDispatcherProvider.io) {
208-
when (val result = disableSpaceUseCase(DisableSpaceUseCase.Params(accountName, spaceId, false))) {
209-
is UseCaseResult.Success -> _disableSpaceFlow.emit(Event(UIResult.Success(result.getDataOrNull())))
210-
is UseCaseResult.Error -> _disableSpaceFlow.emit(Event(UIResult.Error(error = result.getThrowableOrNull())))
211-
}
212-
refreshSpacesFromServerAsyncUseCase(RefreshSpacesFromServerAsyncUseCase.Params(accountName))
213-
}
204+
runSpaceOperation(
205+
flow = _disableSpaceFlow,
206+
useCase = disableSpaceUseCase,
207+
useCaseParams = DisableSpaceUseCase.Params(accountName, spaceId, false)
208+
)
214209
}
215210

216211
fun enableSpace(spaceId: String){
217-
viewModelScope.launch(coroutinesDispatcherProvider.io) {
218-
when (val result = enableSpaceUseCase(EnableSpaceUseCase.Params(accountName, spaceId))) {
219-
is UseCaseResult.Success -> _enableSpaceFlow.emit(Event(UIResult.Success(result.getDataOrNull())))
220-
is UseCaseResult.Error -> _enableSpaceFlow.emit(Event(UIResult.Error(error = result.getThrowableOrNull())))
221-
}
222-
refreshSpacesFromServerAsyncUseCase(RefreshSpacesFromServerAsyncUseCase.Params(accountName))
223-
}
212+
runSpaceOperation(
213+
flow = _enableSpaceFlow,
214+
useCase = enableSpaceUseCase,
215+
useCaseParams = EnableSpaceUseCase.Params(accountName,spaceId)
216+
)
224217
}
225218

226219
fun deleteSpace(spaceId: String){
220+
runSpaceOperation(
221+
flow = _deleteSpaceFlow,
222+
useCase = disableSpaceUseCase,
223+
useCaseParams = DisableSpaceUseCase.Params(accountName,spaceId,true)
224+
)
225+
}
226+
227+
private fun <Params> runSpaceOperation(
228+
flow: MutableSharedFlow<Event<UIResult<Unit>>?>,
229+
useCase: BaseUseCaseWithResult<Unit, Params>,
230+
useCaseParams: Params,
231+
) {
227232
viewModelScope.launch(coroutinesDispatcherProvider.io) {
228-
when (val result = disableSpaceUseCase(DisableSpaceUseCase.Params(accountName, spaceId, true))) {
229-
is UseCaseResult.Success -> _deleteSpaceFlow.emit(Event(UIResult.Success(result.getDataOrNull())))
230-
is UseCaseResult.Error -> _deleteSpaceFlow.emit(Event(UIResult.Error(error = result.getThrowableOrNull())))
233+
when (val result = useCase(useCaseParams)) {
234+
is UseCaseResult.Success -> flow.emit(Event(UIResult.Success(result.getDataOrNull())))
235+
is UseCaseResult.Error -> flow.emit(Event(UIResult.Error(error = result.getThrowableOrNull())))
231236
}
232237
refreshSpacesFromServerAsyncUseCase(RefreshSpacesFromServerAsyncUseCase.Params(accountName))
233238
}

0 commit comments

Comments
 (0)