@@ -23,6 +23,7 @@ package com.owncloud.android.presentation.spaces
2323
2424import androidx.lifecycle.ViewModel
2525import androidx.lifecycle.viewModelScope
26+ import com.owncloud.android.domain.BaseUseCaseWithResult
2627import com.owncloud.android.domain.UseCaseResult
2728import com.owncloud.android.domain.capabilities.usecases.GetStoredCapabilitiesUseCase
2829import 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