mirror of https://git.sr.ht/~oppen/ariane
70 lines
1.8 KiB
Kotlin
70 lines
1.8 KiB
Kotlin
package oppen.ariane.io.gemini
|
|
|
|
import android.net.Uri
|
|
import java.net.URI
|
|
|
|
class AddressBuilder {
|
|
|
|
private var uri: Uri = Uri.EMPTY
|
|
|
|
fun set(uri: Uri){
|
|
this.uri = uri
|
|
}
|
|
|
|
fun request(link: URI): AddressBuilder {
|
|
return request(link.toString())
|
|
}
|
|
|
|
fun request(link: String): AddressBuilder {
|
|
val linkUri = Uri.parse(link)
|
|
when {
|
|
linkUri.isAbsolute -> {
|
|
uri = linkUri
|
|
}
|
|
linkUri.toString().startsWith("//") -> {
|
|
uri = Uri.parse("gemini:$link")
|
|
}
|
|
linkUri.toString().startsWith("/") -> {
|
|
val pathLink = "${uri.scheme}://${uri.host}$linkUri"
|
|
uri = when {
|
|
pathLink.endsWith("/") -> Uri.parse("${pathLink}index.gmi")
|
|
else -> Uri.parse(pathLink)
|
|
}
|
|
}
|
|
else -> {
|
|
val currentAddress = uri.toString()
|
|
|
|
val directoryPath = when {
|
|
currentAddress.lastIndexOf("/") > 8 -> {
|
|
currentAddress.substring(0, currentAddress.lastIndexOf("/")+1)
|
|
}
|
|
else -> {
|
|
"${uri.scheme}://${uri.host}/"
|
|
}
|
|
}
|
|
|
|
var cleanedLink = when {
|
|
link.startsWith("./") -> {
|
|
link.substring(2)
|
|
}
|
|
link.startsWith("/") -> {
|
|
link.substring(1)
|
|
}
|
|
else -> {
|
|
link
|
|
}
|
|
}
|
|
|
|
if(link.endsWith("/")) cleanedLink += "index.gmi"
|
|
|
|
uri = Uri.parse("$directoryPath$cleanedLink")
|
|
}
|
|
}
|
|
|
|
return this
|
|
}
|
|
|
|
fun uri(): Uri{
|
|
return uri
|
|
}
|
|
} |