diff --git a/submodules/BrowserUI/Sources/BrowserAddressListItemComponent.swift b/submodules/BrowserUI/Sources/BrowserAddressListItemComponent.swift index 5ffe9b5e58..97079f1686 100644 --- a/submodules/BrowserUI/Sources/BrowserAddressListItemComponent.swift +++ b/submodules/BrowserUI/Sources/BrowserAddressListItemComponent.swift @@ -10,6 +10,7 @@ import TelegramPresentationData import PhotoResources import AccountContext import ContextUI +import UrlEscaping private let iconFont = Font.with(size: 30.0, design: .round, weight: .bold) private let iconTextBackgroundImage = generateStretchableFilledCircleImage(radius: 6.0, color: UIColor(rgb: 0xFF9500)) @@ -170,7 +171,24 @@ final class BrowserAddressListItemComponent: Component { if case let .Loaded(content) = component.webPage.content { title = content.title ?? content.url - subtitle = content.url + + var address = content.url + if let components = URLComponents(string: address) { + if #available(iOS 16.0, *), let encodedHost = components.encodedHost { + if let decodedHost = components.host, encodedHost != decodedHost { + address = address.replacingOccurrences(of: encodedHost, with: decodedHost) + } + } else if let encodedHost = components.host { + if let decodedHost = components.host?.idnaDecoded, encodedHost != decodedHost { + address = address.replacingOccurrences(of: encodedHost, with: decodedHost) + } + } + } + address = address.replacingOccurrences(of: "https://www.", with: "") + address = address.replacingOccurrences(of: "https://", with: "") + address = address.trimmingCharacters(in: CharacterSet(charactersIn: "/")) + subtitle = address + parsedUrl = URL(string: content.url) if let image = content.image { diff --git a/submodules/ListMessageItem/Sources/ListMessageSnippetItemNode.swift b/submodules/ListMessageItem/Sources/ListMessageSnippetItemNode.swift index 4bbb6d07fa..d0308f9d5d 100644 --- a/submodules/ListMessageItem/Sources/ListMessageSnippetItemNode.swift +++ b/submodules/ListMessageItem/Sources/ListMessageSnippetItemNode.swift @@ -16,6 +16,7 @@ import UrlWhitelist import AccountContext import TelegramStringFormatting import WallpaperResources +import UrlEscaping private let iconFont = Font.with(size: 30.0, design: .round, weight: .bold) @@ -333,7 +334,21 @@ public final class ListMessageSnippetItemNode: ListMessageNode { mutableDescriptionText.append(NSAttributedString(string: text + "\n", font: descriptionFont, textColor: item.presentationData.theme.theme.list.itemSecondaryTextColor)) } - let plainUrlString = NSAttributedString(string: content.url.replacingOccurrences(of: "https://", with: ""), font: descriptionFont, textColor: item.presentationData.theme.theme.list.itemAccentColor) + var address = content.url + if let components = URLComponents(string: address) { + if #available(iOS 16.0, *), let encodedHost = components.encodedHost { + if let decodedHost = components.host, encodedHost != decodedHost { + address = address.replacingOccurrences(of: encodedHost, with: decodedHost) + } + } else if let encodedHost = components.host { + if let decodedHost = components.host?.idnaDecoded, encodedHost != decodedHost { + address = address.replacingOccurrences(of: encodedHost, with: decodedHost) + } + } + } + address = address.trimmingCharacters(in: CharacterSet(charactersIn: "/")) + + let plainUrlString = NSAttributedString(string: address.replacingOccurrences(of: "https://", with: ""), font: descriptionFont, textColor: item.presentationData.theme.theme.list.itemAccentColor) let urlString = NSMutableAttributedString() urlString.append(plainUrlString) urlString.addAttribute(NSAttributedString.Key(rawValue: TelegramTextAttributes.URL), value: content.url, range: NSMakeRange(0, urlString.length)) @@ -432,6 +447,21 @@ public final class ListMessageSnippetItemNode: ListMessageNode { mutableDescriptionText.append(NSAttributedString(string: messageText + "\n", font: descriptionFont, textColor: item.presentationData.theme.theme.list.itemSecondaryTextColor)) } + var address = urlString + if let components = URLComponents(string: address) { + if #available(iOS 16.0, *), let encodedHost = components.encodedHost { + if let decodedHost = components.host, encodedHost != decodedHost { + address = address.replacingOccurrences(of: encodedHost, with: decodedHost) + } + } else if let encodedHost = components.host { + if let decodedHost = components.host?.idnaDecoded, encodedHost != decodedHost { + address = address.replacingOccurrences(of: encodedHost, with: decodedHost) + } + } + } + address = address.trimmingCharacters(in: CharacterSet(charactersIn: "/")) + urlString = address + let urlAttributedString = NSMutableAttributedString() urlAttributedString.append(NSAttributedString(string: urlString.replacingOccurrences(of: "https://", with: ""), font: descriptionFont, textColor: item.presentationData.theme.theme.list.itemAccentColor)) if item.presentationData.theme.theme.list.itemAccentColor.isEqual(item.presentationData.theme.theme.list.itemPrimaryTextColor) { @@ -487,6 +517,21 @@ public final class ListMessageSnippetItemNode: ListMessageNode { mutableDescriptionText.append(NSAttributedString(string: messageText + "\n", font: descriptionFont, textColor: item.presentationData.theme.theme.list.itemSecondaryTextColor)) } + var address = urlString + if let components = URLComponents(string: address) { + if #available(iOS 16.0, *), let encodedHost = components.encodedHost { + if let decodedHost = components.host, encodedHost != decodedHost { + address = address.replacingOccurrences(of: encodedHost, with: decodedHost) + } + } else if let encodedHost = components.host { + if let decodedHost = components.host?.idnaDecoded, encodedHost != decodedHost { + address = address.replacingOccurrences(of: encodedHost, with: decodedHost) + } + } + } + address = address.trimmingCharacters(in: CharacterSet(charactersIn: "/")) + urlString = address + let urlAttributedString = NSMutableAttributedString() urlAttributedString.append(NSAttributedString(string: urlString.replacingOccurrences(of: "https://", with: ""), font: descriptionFont, textColor: item.presentationData.theme.theme.list.itemAccentColor)) if item.presentationData.theme.theme.list.itemAccentColor.isEqual(item.presentationData.theme.theme.list.itemPrimaryTextColor) { diff --git a/submodules/BrowserUI/Sources/Punycode.swift b/submodules/UrlEscaping/Sources/Punycode.swift similarity index 100% rename from submodules/BrowserUI/Sources/Punycode.swift rename to submodules/UrlEscaping/Sources/Punycode.swift