Gitnuro/src/main/kotlin/com/jetpackduba/gitnuro/viewmodels/SubmodulesViewModel.kt
2022-10-17 10:32:44 +02:00

51 lines
1.8 KiB
Kotlin

package com.jetpackduba.gitnuro.viewmodels
import com.jetpackduba.gitnuro.git.RefreshType
import com.jetpackduba.gitnuro.git.TabState
import com.jetpackduba.gitnuro.git.submodules.GetSubmodulesUseCase
import com.jetpackduba.gitnuro.git.submodules.InitializeSubmoduleUseCase
import com.jetpackduba.gitnuro.git.submodules.UpdateSubmoduleUseCase
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.submodule.SubmoduleStatus
import javax.inject.Inject
class SubmodulesViewModel @Inject constructor(
private val tabState: TabState,
private val getSubmodulesUseCase: GetSubmodulesUseCase,
private val initializeSubmoduleUseCase: InitializeSubmoduleUseCase,
private val updateSubmoduleUseCase: UpdateSubmoduleUseCase,
private val tabScope: CoroutineScope,
) : ExpandableViewModel() {
private val _submodules = MutableStateFlow<List<Pair<String, SubmoduleStatus>>>(listOf())
val submodules: StateFlow<List<Pair<String, SubmoduleStatus>>>
get() = _submodules
init {
tabScope.launch {
tabState.refreshFlowFiltered(RefreshType.ALL_DATA, RefreshType.SUBMODULES)
{
refresh(tabState.git)
}
}
}
private suspend fun loadSubmodules(git: Git) {
_submodules.value = getSubmodulesUseCase(git).toList()
}
fun initializeSubmodule(path: String) = tabState.safeProcessing(
showError = true,
refreshType = RefreshType.SUBMODULES,
) { git ->
initializeSubmoduleUseCase(git, path)
updateSubmoduleUseCase(git, path)
}
suspend fun refresh(git: Git) {
loadSubmodules(git)
}
}