mirror of https://git.sr.ht/~oppen/ariane
fix history update
This commit is contained in:
parent
2c0e1018ac
commit
8f0c91f657
|
@ -40,6 +40,7 @@ class GeminiDatasource(private val context: Context): Datasource {
|
||||||
val cached = RuntimeCache.get(uri)
|
val cached = RuntimeCache.get(uri)
|
||||||
when {
|
when {
|
||||||
cached != null -> {
|
cached != null -> {
|
||||||
|
updateHistory(uri)
|
||||||
onUpdate(GemState.ResponseGemtext(uri, cached.first, cached.second))
|
onUpdate(GemState.ResponseGemtext(uri, cached.first, cached.second))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -57,7 +58,10 @@ class GeminiDatasource(private val context: Context): Datasource {
|
||||||
if(parsedUri.isGemini()){
|
if(parsedUri.isGemini()){
|
||||||
val cached = RuntimeCache.get(parsedUri)
|
val cached = RuntimeCache.get(parsedUri)
|
||||||
when {
|
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 -> request(parsedUri.toURI(), forceDownload, onUpdate)
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
@ -100,14 +104,14 @@ class GeminiDatasource(private val context: Context): Datasource {
|
||||||
"TLS_ALL" -> socket.enabledProtocols = socket.supportedProtocols
|
"TLS_ALL" -> socket.enabledProtocols = socket.supportedProtocols
|
||||||
else -> socket.enabledProtocols = arrayOf(protocol)
|
else -> socket.enabledProtocols = arrayOf(protocol)
|
||||||
}
|
}
|
||||||
|
println("Ariane socket handshake with ${uri.host} on port $port")
|
||||||
socket.startHandshake()
|
socket.startHandshake()
|
||||||
}catch (ce: ConnectException){
|
}catch (ce: ConnectException){
|
||||||
println("socket error: $ce")
|
println("Ariane socket error: $ce")
|
||||||
onUpdate(GemState.ResponseError(GeminiResponse.Header(-1, ce.message ?: ce.toString())))
|
onUpdate(GemState.ResponseError(GeminiResponse.Header(-1, ce.message ?: ce.toString())))
|
||||||
return
|
return
|
||||||
}catch (she: SSLHandshakeException){
|
}catch (she: SSLHandshakeException){
|
||||||
println("socket error: $she")
|
println("Ariane socket error: $she")
|
||||||
onUpdate(GemState.ResponseError(GeminiResponse.Header(-2, she.message ?: she.toString())))
|
onUpdate(GemState.ResponseError(GeminiResponse.Header(-2, she.message ?: she.toString())))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -118,7 +122,9 @@ class GeminiDatasource(private val context: Context): Datasource {
|
||||||
val bufferedWriter = BufferedWriter(outputStreamWriter)
|
val bufferedWriter = BufferedWriter(outputStreamWriter)
|
||||||
val outWriter = PrintWriter(bufferedWriter)
|
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()
|
outWriter.flush()
|
||||||
|
|
||||||
if (outWriter.checkError()) {
|
if (outWriter.checkError()) {
|
||||||
|
@ -183,11 +189,18 @@ class GeminiDatasource(private val context: Context): Datasource {
|
||||||
|
|
||||||
RuntimeCache.put(uri, header, processed)
|
RuntimeCache.put(uri, header, processed)
|
||||||
|
|
||||||
if(runtimeHistory.isEmpty() || runtimeHistory.last().toString() != uri.toString()) runtimeHistory.add(uri)
|
updateHistory(uri)
|
||||||
|
|
||||||
onUpdate(GemState.ResponseGemtext(uri, header, processed))
|
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){
|
private fun getString(socket: SSLSocket?, uri: URI, header: GeminiResponse.Header, onUpdate: (state: GemState) -> Unit){
|
||||||
val content = socket?.inputStream?.bufferedReader().use {
|
val content = socket?.inputStream?.bufferedReader().use {
|
||||||
reader -> reader?.readText()
|
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) {
|
override fun goBack(onUpdate: (state: GemState) -> Unit) {
|
||||||
runtimeHistory.removeLast()
|
runtimeHistory.removeLast()
|
||||||
|
|
|
@ -411,6 +411,7 @@ class GemActivity : AppCompatActivity() {
|
||||||
if(model.canGoBack()){
|
if(model.canGoBack()){
|
||||||
model.goBack()
|
model.goBack()
|
||||||
}else{
|
}else{
|
||||||
|
println("Ariane history is empty - exiting")
|
||||||
super.onBackPressed()
|
super.onBackPressed()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue