2020-08-15 14:52:27 +00:00
|
|
|
package oppen.tva.ui
|
|
|
|
|
|
|
|
import androidx.lifecycle.ViewModel
|
2020-09-10 16:33:10 +00:00
|
|
|
import oppen.tva.Gem
|
2020-08-21 15:12:00 +00:00
|
|
|
import oppen.tva.io.gemini.Datasource
|
2020-09-09 18:29:23 +00:00
|
|
|
import oppen.tva.io.GemState
|
2020-09-07 21:15:18 +00:00
|
|
|
import oppen.tva.io.bookmarks.BookmarksDatasource
|
2020-08-15 14:52:27 +00:00
|
|
|
import java.net.URI
|
|
|
|
|
2020-09-10 16:33:10 +00:00
|
|
|
class GemViewModel: ViewModel() {
|
2020-08-15 14:52:27 +00:00
|
|
|
|
2020-08-21 15:12:00 +00:00
|
|
|
private lateinit var gemini: Datasource
|
2020-09-07 21:15:18 +00:00
|
|
|
private lateinit var bookmarks: BookmarksDatasource
|
2020-09-09 18:29:23 +00:00
|
|
|
private var onState: (state: GemState) -> Unit = {}
|
2020-09-01 08:43:52 +00:00
|
|
|
|
2020-09-03 19:45:43 +00:00
|
|
|
private val history = mutableListOf<URI>()
|
2020-09-01 08:43:52 +00:00
|
|
|
|
2020-09-09 18:29:23 +00:00
|
|
|
fun initialise(gemini: Datasource, bookmarks: BookmarksDatasource, onState: (state: GemState) -> Unit){
|
2020-08-21 15:12:00 +00:00
|
|
|
this.gemini = gemini
|
2020-09-07 21:15:18 +00:00
|
|
|
this.bookmarks = bookmarks
|
2020-08-15 14:52:27 +00:00
|
|
|
this.onState = onState
|
|
|
|
|
2020-09-10 16:33:10 +00:00
|
|
|
request(URI.create(Gem.DEFAULT_HOME_CAPSULE))//todo - regression: should check prefs...
|
2020-09-09 18:29:23 +00:00
|
|
|
onState(GemState.TabChange(1))
|
2020-08-17 20:25:39 +00:00
|
|
|
}
|
|
|
|
|
2020-08-15 14:52:27 +00:00
|
|
|
fun request(address: String) {
|
|
|
|
request(URI.create(address))
|
|
|
|
}
|
|
|
|
|
|
|
|
fun request(uri: URI){
|
|
|
|
gemini.request(uri){ state ->
|
2020-09-03 19:45:43 +00:00
|
|
|
if(history.isEmpty()){
|
|
|
|
history.add(uri)
|
|
|
|
}else if(history.last().toString() != uri.toString()) {
|
|
|
|
history.add(uri)
|
|
|
|
}
|
2020-09-01 08:43:52 +00:00
|
|
|
onState(state)
|
2020-08-15 14:52:27 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-09-01 08:43:52 +00:00
|
|
|
fun canGoBack(): Boolean = history.size > 1
|
2020-08-15 20:20:15 +00:00
|
|
|
|
|
|
|
@ExperimentalStdlibApi
|
|
|
|
fun goBack(){
|
2020-09-01 08:43:52 +00:00
|
|
|
when {
|
|
|
|
history.size >= 2 -> {
|
2020-09-03 19:45:43 +00:00
|
|
|
logHistory()
|
2020-09-01 08:43:52 +00:00
|
|
|
val previous = history[history.size - 2]
|
|
|
|
history.removeLast()
|
2020-09-03 19:45:43 +00:00
|
|
|
|
|
|
|
println("Requesting history item: $previous")
|
2020-09-01 08:43:52 +00:00
|
|
|
request(previous)
|
2020-09-03 19:45:43 +00:00
|
|
|
logHistory()
|
2020-08-17 20:25:39 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-09-03 19:45:43 +00:00
|
|
|
|
|
|
|
private fun logHistory(){
|
|
|
|
history.forEach { uri ->
|
|
|
|
println("History: $uri")
|
|
|
|
}
|
|
|
|
}
|
2020-08-15 14:52:27 +00:00
|
|
|
}
|