package oppen.ariane.ui import android.net.Uri import androidx.lifecycle.ViewModel import oppen.ariane.io.gemini.Datasource import oppen.ariane.io.GemState import oppen.ariane.io.database.ArianeDatabase import oppen.ariane.io.database.bookmarks.BookmarksDatasource import java.net.URI class GemViewModel: ViewModel() { private lateinit var gemini: Datasource private lateinit var db: ArianeDatabase private var onState: (state: GemState) -> Unit = {} fun initialise(home: String, gemini: Datasource, db: ArianeDatabase, onState: (state: GemState) -> Unit){ this.gemini = gemini this.db = db this.onState = onState request(home) } fun request(address: String) { request(URI.create(address)) } fun request(uri: URI){ gemini.request(uri){ state -> onState(state) } } fun requestBinaryDownload(uri: URI) { gemini.request(uri, true){ state -> onState(state) } } //todo - same action as above... refactor fun requestInlineImage(uri: URI, onImageReady: (cacheUri: Uri?) -> Unit){ gemini.request(uri){ state -> when (state) { is GemState.ResponseImage -> onImageReady(state.cacheUri) else -> onState(state) } } } fun canGoBack(): Boolean = gemini.canGoBack() fun goBack(onGoBack: (state: GemState) -> Unit) = gemini.goBack(onGoBack) }