mirror of https://github.com/Corewala/Buran
Fixed issue with local redirect responses
This commit is contained in:
parent
15cc2d9a31
commit
02e27c7868
|
@ -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://")
|
||||
|
|
|
@ -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{
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue