Fixed issue with local redirect responses

This commit is contained in:
Corewala 2022-05-15 12:26:06 -04:00
parent 15cc2d9a31
commit 02e27c7868
4 changed files with 18 additions and 13 deletions

View File

@ -35,6 +35,9 @@ class OmniTerm(private val listener: Listener) {
listener.request("$searchbase$encoded")
}
fun resolve(link: String): String{
return uri.resolve(link)
}
fun navigation(link: String) {
navigation(link, true)
@ -51,9 +54,7 @@ class OmniTerm(private val listener: Listener) {
private fun navigation(link: String, invokeListener: Boolean) {
when {
link.startsWith(GEM_SCHEME) -> uri.set(link)
link.startsWith("//") -> uri.set("gemini:$link")
link.contains(":") -> listener.openExternal(link)
else -> uri.resolve(link)
else -> listener.openExternal(link)
}
val address = uri.toString().replace("//", "/").replace("gemini:/", "gemini://")

View File

@ -25,9 +25,9 @@ class OppenURI constructor(private var ouri: String) {
extractHost()
}
fun resolve(reference: String) {
fun resolve(reference: String): String{
if(ouri == "$SCHEME$host") ouri = "$ouri/"
return when {
when {
reference.startsWith(SCHEME) -> set(reference)
reference.startsWith(SOLIDUS) -> ouri = "$SCHEME$host$reference"
reference.startsWith(TRAVERSE) -> {
@ -42,6 +42,7 @@ class OppenURI constructor(private var ouri: String) {
}
}
}
return ouri
}
fun traverse(): OppenURI{

View File

@ -6,6 +6,7 @@ import androidx.preference.PreferenceManager
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import corewala.buran.Buran
import corewala.buran.OppenURI
import corewala.buran.io.GemState
import corewala.buran.io.database.history.BuranHistory
import corewala.buran.io.keymanager.BuranKeyManager
@ -121,7 +122,7 @@ class GeminiDatasource(private val context: Context, val history: BuranHistory):
when {
header.code == GeminiResponse.INPUT -> onUpdate(GemState.ResponseInput(uri, header))
header.code == GeminiResponse.REDIRECT -> request(URI.create(header.meta).toString(), false, false, onUpdate)
header.code == GeminiResponse.REDIRECT -> request(resolve(uri.host, header.meta), false, false, onUpdate)
header.code == GeminiResponse.CLIENT_CERTIFICATE_REQUIRED -> onUpdate(GemState.ClientCertRequired(uri, header))
header.code != GeminiResponse.SUCCESS -> onUpdate(GemState.ResponseError(header))
header.meta.startsWith("text/gemini") -> getGemtext(bufferedReader, uri, header, onUpdate)
@ -217,6 +218,12 @@ class GeminiDatasource(private val context: Context, val history: BuranHistory):
}
}
private fun resolve(host: String, address: String): String{
val ouri = OppenURI()
ouri.set(host)
return ouri.resolve(address)
}
override fun canGoBack(): Boolean = runtimeHistory.isEmpty() || runtimeHistory.size > 1
override fun goBack(onUpdate: (state: GemState) -> Unit) {

View File

@ -85,13 +85,9 @@ class GemActivity : AppCompatActivity() {
lateinit var adapter: AbstractGemtextAdapter
private val onLink: (link: URI, longTap: Boolean, adapterPosition: Int) -> Unit = { uri, longTap, position: Int ->
val globalURI = omniTerm.resolve(uri.toString())
if(longTap){
var globalURI: String
if(!uri.toString().contains("//") and !uri.toString().contains(":")){
globalURI = (omniTerm.getCurrent() + uri.toString()).replace("//", "/").replace("gemini:/", "gemini://")
} else {
globalURI = uri.toString()
}
Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, globalURI)
@ -105,7 +101,7 @@ class GemActivity : AppCompatActivity() {
binding.addressEdit.hint = getString(R.string.main_input_hint)
inSearch = false
}
omniTerm.navigation(uri.toString())
omniTerm.navigation(globalURI)
}else{
Snackbar.make(binding.root, getString(R.string.no_internet), Snackbar.LENGTH_LONG).show()
}