package oppen.tva.ui import androidx.lifecycle.ViewModel import oppen.tva.io.Datasource import oppen.tva.io.TvaState import oppen.tva.io.history.CacheInterface import oppen.tva.io.history.Tab import java.net.URI class TvaViewModel: ViewModel() { private val gemini = Datasource.factory() private var onState: (state: TvaState) -> Unit = {} private var activeTab = 0 private lateinit var cache: CacheInterface private var tabs = mutableListOf() fun initialise(cache: CacheInterface, onState: (state: TvaState) -> Unit){ this.cache = cache this.onState = onState cache.getTabs { tabs, activeIndex -> this.tabs.addAll(tabs) if(tabs.isEmpty()){ this.tabs.add(Tab(0)) activeTab = 0 request(URI.create("gemini://gemini.circumlunar.space/")) }else{ activeTab = activeIndex request(tabs[activeTab].history.last()) } } } fun request(address: String) { request(URI.create(address)) } fun request(uri: URI){ gemini.request(uri){ state -> when(state){ is TvaState.Requesting -> {} is TvaState.AppQuery -> {} is TvaState.NotGeminiRequest -> {} is TvaState.GeminiResponse -> renderGemini(state) TvaState.GeminiPrintWriterError -> {} } } } private fun renderGemini(state: TvaState.GeminiResponse) { if(tabs[activeTab].history.isEmpty() || tabs[activeTab].history.last() != state.uri){ tabs[activeTab].add(state.uri) cache.update(tabs, activeTab) } onState(state) } }