Skip to content

Commit

Permalink
refactor : datastroe 라이브러리 의존성 제거
Browse files Browse the repository at this point in the history
  • Loading branch information
chws0508 committed Mar 4, 2024
1 parent 090f2fb commit d6b2ac0
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@ import com.emmsale.presentation.common.NetworkUiState
import com.emmsale.presentation.common.livedata.NotNullLiveData
import com.emmsale.presentation.common.livedata.NotNullMutableLiveData
import com.emmsale.presentation.common.livedata.SingleLiveEvent
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onCompletion
import kotlinx.coroutines.flow.onStart

abstract class NetworkViewModel : ViewModel() {

Expand Down Expand Up @@ -54,27 +56,22 @@ abstract class NetworkViewModel : ViewModel() {
onNetworkError: suspend () -> Unit,
onStart: suspend () -> Unit = {},
onFinish: suspend () -> Unit = {},
): Job = viewModelScope.launch {
onStart()
val loadingJob = launch { onLoading() }
) = flow<T> {
when (val result = request()) {
is Success -> onSuccess(result.data)
is Failure -> onFailure(result.code, result.message)
NetworkError -> {
onNetworkError()
if (_networkUiState.value == NetworkUiState.NETWORK_ERROR) {
loadingJob.cancel()
onFinish()
return@launch
}
}

is NetworkError -> onNetworkError()
is Unexpected ->
_networkUiEvent.value = NetworkUiEvent.Unexpected(result.error.toString())
}
loadingJob.cancel()
_networkUiState.value = NetworkUiState.NONE
}.onStart {
onStart()
onLoading()
}.onCompletion {
onFinish()
if (networkUiState.value != NetworkUiState.NETWORK_ERROR) {
_networkUiState.value = NetworkUiState.NONE
}
}

protected fun <T : Any> command(
Expand All @@ -85,15 +82,15 @@ abstract class NetworkViewModel : ViewModel() {
onNetworkError: suspend () -> Unit = { dispatchNetworkErrorEvent() },
onStart: suspend () -> Unit = {},
onFinish: suspend () -> Unit = {},
): Job = requestNetwork(
) = requestNetwork(
request = { command() },
onSuccess = { onSuccess(it) },
onFailure = { code, message -> onFailure(code, message) },
onLoading = { onLoading() },
onNetworkError = { onNetworkError() },
onStart = { onStart() },
onFinish = { onFinish() },
)
).launchIn(viewModelScope)

companion object {
private const val LOADING_DELAY: Long = 1000
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.emmsale.presentation.base

import androidx.lifecycle.viewModelScope
import com.emmsale.data.network.callAdapter.ApiResponse
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onCompletion

abstract class RefreshableViewModel : NetworkViewModel() {

Expand All @@ -23,7 +26,7 @@ abstract class RefreshableViewModel : NetworkViewModel() {
onNetworkError = { onNetworkError() },
onStart = { onStart() },
onFinish = { onFinish() },
)
).launchIn(viewModelScope)

protected fun <T : Any> refreshData(
refresh: suspend () -> ApiResponse<T>,
Expand All @@ -41,7 +44,7 @@ abstract class RefreshableViewModel : NetworkViewModel() {
onNetworkError = { onNetworkError() },
onStart = { onStart() },
onFinish = { onFinish() },
)
).launchIn(viewModelScope)

protected fun <T : Any> commandAndRefresh(
command: suspend () -> ApiResponse<T>,
Expand All @@ -54,14 +57,11 @@ abstract class RefreshableViewModel : NetworkViewModel() {
refresh: suspend () -> Job = { this@RefreshableViewModel.refresh() },
): Job = requestNetwork(
request = { command() },
onSuccess = {
refresh().join()
onSuccess(it)
},
onSuccess = { onSuccess(it) },
onFailure = { code, message -> onFailure(code, message) },
onLoading = { onLoading() },
onNetworkError = { onNetworkError() },
onStart = { onStart() },
onFinish = { onFinish() },
)
).onCompletion { refresh() }.launchIn(viewModelScope)
}

0 comments on commit d6b2ac0

Please sign in to comment.