mirror of https://git.sr.ht/~oppen/ariane
59 lines
1.5 KiB
Kotlin
59 lines
1.5 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")
|
||
|
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
|
||
|
}
|
||
|
}
|