From 13f21bc09b9748b943ab11419200c3c7cc9b784c Mon Sep 17 00:00:00 2001 From: Corewala Date: Fri, 29 Jul 2022 15:09:26 -0400 Subject: [PATCH] Fixed relative link handling with proxy --- app/src/main/java/corewala/buran/OmniTerm.kt | 1 + app/src/main/java/corewala/buran/OppenURI.kt | 43 ++++++++++---------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/corewala/buran/OmniTerm.kt b/app/src/main/java/corewala/buran/OmniTerm.kt index 4ebf4a2..5202603 100644 --- a/app/src/main/java/corewala/buran/OmniTerm.kt +++ b/app/src/main/java/corewala/buran/OmniTerm.kt @@ -58,6 +58,7 @@ class OmniTerm(private val listener: Listener) { link.startsWith("//") -> uri.set("gemini:$link") link.startsWith("http://") or link.startsWith("https://") -> { uri.set(link) + println("MALD?") } link.contains(":") -> listener.openExternal(link) else -> uri.resolve(link) diff --git a/app/src/main/java/corewala/buran/OppenURI.kt b/app/src/main/java/corewala/buran/OppenURI.kt index 7b163a1..6fc5028 100644 --- a/app/src/main/java/corewala/buran/OppenURI.kt +++ b/app/src/main/java/corewala/buran/OppenURI.kt @@ -1,6 +1,8 @@ package corewala.buran -const val SCHEME = "gemini://" +import corewala.toURI + +const val GEMSCHEME = "gemini://" const val TRAVERSE = "../" const val SOLIDUS = "/" const val DIREND = "/" @@ -15,21 +17,29 @@ class OppenURI constructor(private var ouri: String) { constructor(): this("") var host: String = "" + var scheme: String = "" init { - extractHost() + if(ouri.isNotEmpty()){ + host = ouri.toURI().host + scheme = ouri.toURI().scheme + } } fun set(ouri: String){ this.ouri = ouri - extractHost() + if(ouri.isNotEmpty()){ + host = ouri.toURI().host + scheme = ouri.toURI().scheme + } } fun resolve(reference: String): String{ - if(ouri == "$SCHEME$host") ouri = "$ouri/" + if(ouri == "$GEMSCHEME$host") ouri = "$ouri/" + println(host) when { - reference.startsWith(SCHEME) -> set(reference) - reference.startsWith(SOLIDUS) -> ouri = "$SCHEME$host$reference" + reference.startsWith(GEMSCHEME) -> set(reference) + reference.startsWith(SOLIDUS) -> ouri = "$scheme://$host$reference" reference.startsWith(TRAVERSE) -> { if(!ouri.endsWith(DIREND)) ouri = ouri.removeFile() val traversalCount = reference.split(TRAVERSE).size - 1 @@ -46,16 +56,16 @@ class OppenURI constructor(private var ouri: String) { } fun traverse(): OppenURI{ - val path = ouri.removePrefix("$SCHEME$host") + val path = ouri.removePrefix("$GEMSCHEME$host") val segments = path.split(SOLIDUS).filter { it.isNotEmpty() } - var nouri = "$SCHEME$host" + var nouri = "$GEMSCHEME$host" when (ouri) { "" -> { } - SCHEME -> ouri = "" - "$nouri/" -> ouri = SCHEME + GEMSCHEME -> ouri = "" + "$nouri/" -> ouri = GEMSCHEME else -> { when { segments.isNotEmpty() -> { @@ -74,10 +84,10 @@ class OppenURI constructor(private var ouri: 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 segmentCount = segments.size - var nouri = "$SCHEME$host" + var nouri = "$GEMSCHEME$host" segments.forEachIndexed{ index, segment -> 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) override fun toString(): String = ouri