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 } }