fints4k/ui/BankingiOSApp/BankingiOSApp/BankIconFinder/UrlUtil.swift

57 lines
1.8 KiB
Swift

import SwiftUI
class UrlUtil {
func makeLinkAbsolute(url: String, siteUrl: String) -> String {
var absoluteUrl = url
if(url.starts(with: "//")) {
if(siteUrl.starts(with: "https:")) {
absoluteUrl = "https:" + url
}
else {
absoluteUrl = "http:" + url
}
}
else if(url.starts(with: "/")) {
if let url = tryToMakeUrlAbsolute(relativeUrl: url, siteUrl: siteUrl) {
absoluteUrl = url
}
}
else if(url.starts(with: "http") == false) {
if let url = tryToMakeUrlAbsolute(relativeUrl: url, siteUrl: siteUrl) {
absoluteUrl = url
}
}
return absoluteUrl
}
func tryToMakeUrlAbsolute(relativeUrl: String, siteUrl: String) -> String? {
if let relativeUri = URL.encoded(relativeUrl) {
// TODO: how to do this check in Swift?
// if(relativeUri.isAbsolute && relativeUri.scheme.starts(with: "http") == false) {
// return relativeUrl // it's an absolute uri but just doesn't start with http, e.g. mailto: for file:
// }
}
if let uri = URL.encoded(siteUrl) {
return uri.appendingPathComponent(relativeUrl).absoluteString // i think this always works in Swift
}
if let uri = URL.encoded(siteUrl) {
let port = (uri.port ?? 0) > 0 ? ":" + String(uri.port!) : ""
let separator = relativeUrl.starts(with: "/") ? "" : "/"
let manuallyCreatedUriString = "\(uri.scheme)://\(uri.host)\(port)\(separator)\(relativeUrl)"
return URL.encoded(manuallyCreatedUriString)?.absoluteString
}
return nil
}
}