git.iko.soy/opencode-android
on f9ed438 help sign in
38 lines 1.3 kB history raw
1package soy.iko.opencode.ui.file
3import androidx.lifecycle.ViewModel
4import androidx.lifecycle.viewModelScope
5import soy.iko.opencode.data.model.FileContent
6import soy.iko.opencode.di.AppContainer
7import kotlinx.coroutines.flow.MutableStateFlow
8import kotlinx.coroutines.flow.StateFlow
9import kotlinx.coroutines.flow.asStateFlow
10import kotlinx.coroutines.launch
12data class FileViewState(
13 val loading: Boolean = true,
14 val content: FileContent? = null,
15 val error: String? = null,
18class FileViewModel(
19 private val container: AppContainer,
20 private val path: String,
21) : ViewModel() {
23 private val _state = MutableStateFlow(FileViewState())
24 val state: StateFlow<FileViewState> = _state.asStateFlow()
26 init {
27 val api = container.activeConnection.value?.api
28 if (api == null) {
29 _state.value = FileViewState(loading = false, error = "Not connected")
30 } else {
31 viewModelScope.launch {
32 runCatching { api.readFile(path) }
33 .onSuccess { _state.value = FileViewState(loading = false, content = it) }
34 .onFailure { _state.value = FileViewState(loading = false, error = it.message ?: "Failed to read $path") }
35 }
36 }
37 }