MainActivity: use / as empty path in URLs
As per the spec, clients should rewrite empty paths of absolute URLs to "/" instead. Indeed, why the server would return something other than a redirection for "" to "/"?
This commit is contained in:
parent
f6fc5c2f69
commit
bf28d30e4c
|
@ -75,6 +75,16 @@ class MainActivity : AppCompatActivity(), ContentAdapter.ContentAdapterListen {
|
||||||
openUrl(url, base = if (currentUrl.isNotEmpty()) currentUrl else null)
|
openUrl(url, base = if (currentUrl.isNotEmpty()) currentUrl else null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open an URL.
|
||||||
|
*
|
||||||
|
* This function can be called after the user entered an URL in the app bar, clicked on a link,
|
||||||
|
* whatever. To make the user's life a bit easier, this function also makes a few guesses:
|
||||||
|
* - If the URL is not absolute, make it so from a base URL (e.g. the current URL) or assume
|
||||||
|
* the user only typed a hostname without scheme and use a utility function to make it
|
||||||
|
* absolute.
|
||||||
|
* - If it's an absolute Gemini URL with an empty path, use "/" instead as per the spec.
|
||||||
|
*/
|
||||||
private fun openUrl(url: String, base: String? = null, redirections: Int = 0) {
|
private fun openUrl(url: String, base: String? = null, redirections: Int = 0) {
|
||||||
if (redirections >= 5) {
|
if (redirections >= 5) {
|
||||||
alert("Too many redirections.")
|
alert("Too many redirections.")
|
||||||
|
@ -84,6 +94,8 @@ class MainActivity : AppCompatActivity(), ContentAdapter.ContentAdapterListen {
|
||||||
var uri = Uri.parse(url)
|
var uri = Uri.parse(url)
|
||||||
if (!uri.isAbsolute) {
|
if (!uri.isAbsolute) {
|
||||||
uri = if (!base.isNullOrEmpty()) joinUrls(base, url) else toGeminiUri(uri)
|
uri = if (!base.isNullOrEmpty()) joinUrls(base, url) else toGeminiUri(uri)
|
||||||
|
} else if (uri.scheme == "gemini" && uri.path.isNullOrEmpty()) {
|
||||||
|
uri = uri.buildUpon().path("/").build()
|
||||||
}
|
}
|
||||||
|
|
||||||
when (uri.scheme) {
|
when (uri.scheme) {
|
||||||
|
|
|
@ -15,6 +15,7 @@ fun toGeminiUri(uri: Uri): Uri =
|
||||||
Uri.Builder()
|
Uri.Builder()
|
||||||
.scheme("gemini")
|
.scheme("gemini")
|
||||||
.authority(uri.path)
|
.authority(uri.path)
|
||||||
|
.path("/")
|
||||||
.query(uri.query)
|
.query(uri.query)
|
||||||
.fragment(uri.fragment)
|
.fragment(uri.fragment)
|
||||||
.build()
|
.build()
|
||||||
|
|
Reference in a new issue