mirror of
https://github.com/Corewala/Buran
synced 2025-03-11 14:46:43 +00:00
Fixed relative link handling with proxy
This commit is contained in:
parent
79a3564569
commit
13f21bc09b
2 changed files with 23 additions and 21 deletions
|
@ -58,6 +58,7 @@ class OmniTerm(private val listener: Listener) {
|
||||||
link.startsWith("//") -> uri.set("gemini:$link")
|
link.startsWith("//") -> uri.set("gemini:$link")
|
||||||
link.startsWith("http://") or link.startsWith("https://") -> {
|
link.startsWith("http://") or link.startsWith("https://") -> {
|
||||||
uri.set(link)
|
uri.set(link)
|
||||||
|
println("MALD?")
|
||||||
}
|
}
|
||||||
link.contains(":") -> listener.openExternal(link)
|
link.contains(":") -> listener.openExternal(link)
|
||||||
else -> uri.resolve(link)
|
else -> uri.resolve(link)
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package corewala.buran
|
package corewala.buran
|
||||||
|
|
||||||
const val SCHEME = "gemini://"
|
import corewala.toURI
|
||||||
|
|
||||||
|
const val GEMSCHEME = "gemini://"
|
||||||
const val TRAVERSE = "../"
|
const val TRAVERSE = "../"
|
||||||
const val SOLIDUS = "/"
|
const val SOLIDUS = "/"
|
||||||
const val DIREND = "/"
|
const val DIREND = "/"
|
||||||
|
@ -15,21 +17,29 @@ class OppenURI constructor(private var ouri: String) {
|
||||||
constructor(): this("")
|
constructor(): this("")
|
||||||
|
|
||||||
var host: String = ""
|
var host: String = ""
|
||||||
|
var scheme: String = ""
|
||||||
|
|
||||||
init {
|
init {
|
||||||
extractHost()
|
if(ouri.isNotEmpty()){
|
||||||
|
host = ouri.toURI().host
|
||||||
|
scheme = ouri.toURI().scheme
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun set(ouri: String){
|
fun set(ouri: String){
|
||||||
this.ouri = ouri
|
this.ouri = ouri
|
||||||
extractHost()
|
if(ouri.isNotEmpty()){
|
||||||
|
host = ouri.toURI().host
|
||||||
|
scheme = ouri.toURI().scheme
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun resolve(reference: String): String{
|
fun resolve(reference: String): String{
|
||||||
if(ouri == "$SCHEME$host") ouri = "$ouri/"
|
if(ouri == "$GEMSCHEME$host") ouri = "$ouri/"
|
||||||
|
println(host)
|
||||||
when {
|
when {
|
||||||
reference.startsWith(SCHEME) -> set(reference)
|
reference.startsWith(GEMSCHEME) -> set(reference)
|
||||||
reference.startsWith(SOLIDUS) -> ouri = "$SCHEME$host$reference"
|
reference.startsWith(SOLIDUS) -> ouri = "$scheme://$host$reference"
|
||||||
reference.startsWith(TRAVERSE) -> {
|
reference.startsWith(TRAVERSE) -> {
|
||||||
if(!ouri.endsWith(DIREND)) ouri = ouri.removeFile()
|
if(!ouri.endsWith(DIREND)) ouri = ouri.removeFile()
|
||||||
val traversalCount = reference.split(TRAVERSE).size - 1
|
val traversalCount = reference.split(TRAVERSE).size - 1
|
||||||
|
@ -46,16 +56,16 @@ class OppenURI constructor(private var ouri: String) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun traverse(): OppenURI{
|
fun traverse(): OppenURI{
|
||||||
val path = ouri.removePrefix("$SCHEME$host")
|
val path = ouri.removePrefix("$GEMSCHEME$host")
|
||||||
val segments = path.split(SOLIDUS).filter { it.isNotEmpty() }
|
val segments = path.split(SOLIDUS).filter { it.isNotEmpty() }
|
||||||
|
|
||||||
var nouri = "$SCHEME$host"
|
var nouri = "$GEMSCHEME$host"
|
||||||
|
|
||||||
when (ouri) {
|
when (ouri) {
|
||||||
"" -> {
|
"" -> {
|
||||||
}
|
}
|
||||||
SCHEME -> ouri = ""
|
GEMSCHEME -> ouri = ""
|
||||||
"$nouri/" -> ouri = SCHEME
|
"$nouri/" -> ouri = GEMSCHEME
|
||||||
else -> {
|
else -> {
|
||||||
when {
|
when {
|
||||||
segments.isNotEmpty() -> {
|
segments.isNotEmpty() -> {
|
||||||
|
@ -74,10 +84,10 @@ class OppenURI constructor(private var ouri: String) {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun traverse(count: Int): String{
|
private fun traverse(count: Int): String{
|
||||||
val path = ouri.removePrefix("$SCHEME$host")
|
val path = ouri.removePrefix("$GEMSCHEME$host")
|
||||||
val segments = path.split(SOLIDUS).filter { it.isNotEmpty() }
|
val segments = path.split(SOLIDUS).filter { it.isNotEmpty() }
|
||||||
val segmentCount = segments.size
|
val segmentCount = segments.size
|
||||||
var nouri = "$SCHEME$host"
|
var nouri = "$GEMSCHEME$host"
|
||||||
|
|
||||||
segments.forEachIndexed{ index, segment ->
|
segments.forEachIndexed{ index, segment ->
|
||||||
if(index < segmentCount - count){
|
if(index < segmentCount - count){
|
||||||
|
@ -89,15 +99,6 @@ class OppenURI constructor(private var ouri: String) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun extractHost(){
|
|
||||||
if(ouri.isEmpty()) return
|
|
||||||
val urn = ouri.removePrefix(SCHEME)
|
|
||||||
host = when {
|
|
||||||
urn.contains(SOLIDUS) -> urn.substring(0, urn.indexOf(SOLIDUS))
|
|
||||||
else -> urn
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun copy(): OppenURI = OppenURI(ouri)
|
fun copy(): OppenURI = OppenURI(ouri)
|
||||||
|
|
||||||
override fun toString(): String = ouri
|
override fun toString(): String = ouri
|
||||||
|
|
Loading…
Add table
Reference in a new issue