Buran/app/src/main/java/corewala/buran/ui/GemViewModel.kt

53 lines
1.5 KiB
Kotlin

package corewala.buran.ui
import android.net.Uri
import androidx.lifecycle.ViewModel
import corewala.buran.io.gemini.Datasource
import corewala.buran.io.GemState
import corewala.buran.io.database.BuranDatabase
import corewala.buran.io.gemini.GeminiDatasource
import java.net.URI
class GemViewModel: ViewModel() {
private lateinit var gemini: Datasource
private lateinit var db: BuranDatabase
private var onState: (state: GemState) -> Unit = {}
fun initialise(home: String, gemini: Datasource, db: BuranDatabase, onState: (state: GemState) -> Unit){
this.gemini = gemini
this.db = db
this.onState = onState
request(home)
}
fun request(address: String) {
gemini.request(address){ state ->
onState(state)
}
}
fun requestBinaryDownload(uri: URI) {
gemini.request(uri.toString(), true){ state ->
onState(state)
}
}
//todo - same action as above... refactor
fun requestInlineImage(uri: URI, onImageReady: (cacheUri: Uri?) -> Unit){
gemini.request(uri.toString()){ state ->
when (state) {
is GemState.ResponseImage -> onImageReady(state.cacheUri)
else -> onState(state)
}
}
}
//If user changes client cert prefs in Settings this awful hack causes it to refresh state on next request
fun invalidateDatasource() {
if(gemini is GeminiDatasource){
(gemini as GeminiDatasource).invalidate()
}
}
}