package oppen.ariane.ui import androidx.lifecycle.ViewModel import oppen.ariane.Ariane import oppen.ariane.io.gemini.Datasource import oppen.ariane.io.GemState import oppen.ariane.io.bookmarks.BookmarksDatasource import java.net.URI class GemViewModel: ViewModel() { private lateinit var gemini: Datasource private lateinit var bookmarks: BookmarksDatasource private var onState: (state: GemState) -> Unit = {} private val history = mutableListOf() fun initialise(gemini: Datasource, bookmarks: BookmarksDatasource, onState: (state: GemState) -> Unit){ this.gemini = gemini this.bookmarks = bookmarks this.onState = onState request(URI.create(Ariane.DEFAULT_HOME_CAPSULE))//todo - regression: should check prefs... } fun request(address: String) { request(URI.create(address)) } fun request(uri: URI){ gemini.request(uri){ state -> if(state is GemState.ResponseGemtext) { when { history.isEmpty() -> history.add(uri) !history.takeLast(5).contains(uri) -> { println("Adding $uri to runtime history") history.add(uri) } } } onState(state) } } fun canGoBack(): Boolean = history.size > 1 @ExperimentalStdlibApi fun goBack(){ when { history.size >= 2 -> { logHistory() val previous = history[history.size - 2] history.removeLast() println("Requesting history item: $previous") request(previous) logHistory() } } } private fun logHistory(){ history.forEach { uri -> println("History: $uri") } } }