fix history update

This commit is contained in:
Jonathan Fisher 2020-11-13 20:51:20 +00:00
parent 2c0e1018ac
commit 8f0c91f657
2 changed files with 21 additions and 7 deletions

View File

@ -40,6 +40,7 @@ class GeminiDatasource(private val context: Context): Datasource {
val cached = RuntimeCache.get(uri)
when {
cached != null -> {
updateHistory(uri)
onUpdate(GemState.ResponseGemtext(uri, cached.first, cached.second))
return
}
@ -57,7 +58,10 @@ class GeminiDatasource(private val context: Context): Datasource {
if(parsedUri.isGemini()){
val cached = RuntimeCache.get(parsedUri)
when {
cached != null -> onUpdate(GemState.ResponseGemtext(parsedUri.toURI(), cached.first, cached.second))
cached != null -> {
updateHistory(uri)
onUpdate(GemState.ResponseGemtext(parsedUri.toURI(), cached.first, cached.second))
}
else -> request(parsedUri.toURI(), forceDownload, onUpdate)
}
}else{
@ -100,14 +104,14 @@ class GeminiDatasource(private val context: Context): Datasource {
"TLS_ALL" -> socket.enabledProtocols = socket.supportedProtocols
else -> socket.enabledProtocols = arrayOf(protocol)
}
println("Ariane socket handshake with ${uri.host} on port $port")
socket.startHandshake()
}catch (ce: ConnectException){
println("socket error: $ce")
println("Ariane socket error: $ce")
onUpdate(GemState.ResponseError(GeminiResponse.Header(-1, ce.message ?: ce.toString())))
return
}catch (she: SSLHandshakeException){
println("socket error: $she")
println("Ariane socket error: $she")
onUpdate(GemState.ResponseError(GeminiResponse.Header(-2, she.message ?: she.toString())))
return
}
@ -118,7 +122,9 @@ class GeminiDatasource(private val context: Context): Datasource {
val bufferedWriter = BufferedWriter(outputStreamWriter)
val outWriter = PrintWriter(bufferedWriter)
outWriter.print(uri.toString() + "\r\n")
val requestEntity = uri.toString() + "\r\n"
println("Ariane socket requesting $requestEntity")
outWriter.print(requestEntity)
outWriter.flush()
if (outWriter.checkError()) {
@ -183,11 +189,18 @@ class GeminiDatasource(private val context: Context): Datasource {
RuntimeCache.put(uri, header, processed)
if(runtimeHistory.isEmpty() || runtimeHistory.last().toString() != uri.toString()) runtimeHistory.add(uri)
updateHistory(uri)
onUpdate(GemState.ResponseGemtext(uri, header, processed))
}
private fun updateHistory(uri: URI) {
if (runtimeHistory.isEmpty() || runtimeHistory.last().toString() != uri.toString()) {
runtimeHistory.add(uri)
println("Ariane added $uri to runtime history (size ${runtimeHistory.size})")
}
}
private fun getString(socket: SSLSocket?, uri: URI, header: GeminiResponse.Header, onUpdate: (state: GemState) -> Unit){
val content = socket?.inputStream?.bufferedReader().use {
reader -> reader?.readText()
@ -235,7 +248,7 @@ class GeminiDatasource(private val context: Context): Datasource {
}
}
override fun canGoBack(): Boolean = runtimeHistory.size > 1
override fun canGoBack(): Boolean = runtimeHistory.isEmpty() || runtimeHistory.size > 1
override fun goBack(onUpdate: (state: GemState) -> Unit) {
runtimeHistory.removeLast()

View File

@ -411,6 +411,7 @@ class GemActivity : AppCompatActivity() {
if(model.canGoBack()){
model.goBack()
}else{
println("Ariane history is empty - exiting")
super.onBackPressed()
}
}