diff --git a/Kit/helpers.swift b/Kit/helpers.swift index af3a6de1..473a91ae 100644 --- a/Kit/helpers.swift +++ b/Kit/helpers.swift @@ -1848,3 +1848,10 @@ public func isWidgetActive(_ defaults: UserDefaults?, _ widgets: [String]) -> Bo } return false } + +public func countryFlag(_ code: String) -> String? { + let uppercased = code.uppercased() + guard uppercased.count == 2 else { return nil } + let scalars = uppercased.unicodeScalars.compactMap { UnicodeScalar(127397 + $0.value) } + return scalars.count == 2 ? String(String.UnicodeScalarView(scalars)) : nil +} diff --git a/Modules/Net/main.swift b/Modules/Net/main.swift index 60be30f5..bb1a47d0 100644 --- a/Modules/Net/main.swift +++ b/Modules/Net/main.swift @@ -275,6 +275,8 @@ public class Network: Module { case "private": replacement = value.laddr.v4 ?? value.laddr.v6 ?? "-" case "privateV4": replacement = value.laddr.v4 ?? "-" case "privateV6": replacement = value.laddr.v6 ?? "-" + case "countryCode": replacement = value.raddr.countryCode ?? "-" + case "flag": replacement = value.raddr.countryCode != nil ? countryFlag(value.raddr.countryCode!) : "-" default: return } case "$interface": diff --git a/Modules/Net/popup.swift b/Modules/Net/popup.swift index 4815c943..d9007fa8 100644 --- a/Modules/Net/popup.swift +++ b/Modules/Net/popup.swift @@ -525,7 +525,12 @@ internal class Popup: PopupWrapper { } var ip = addr if let cc = value.raddr.countryCode, !cc.isEmpty { - ip += " (\(cc))" + if let flag = countryFlag(cc) { + ip += " \(flag)" + } else { + ip += " (\(cc))" + } + self.publicIPv4Field?.toolTip = cc } if self.publicIPv4Field?.stringValue != ip { self.publicIPv4Field?.stringValue = ip @@ -545,7 +550,12 @@ internal class Popup: PopupWrapper { } var ip = addr if let cc = value.raddr.countryCode { - ip += " (\(cc))" + if let flag = countryFlag(cc) { + ip += " \(flag)" + } else { + ip += " (\(cc))" + } + self.publicIPv6Field?.toolTip = cc } if self.publicIPv6Field?.stringValue != ip { self.publicIPv6Field?.stringValue = ip diff --git a/Modules/Net/settings.swift b/Modules/Net/settings.swift index 05c4b35b..15e4bc12 100644 --- a/Modules/Net/settings.swift +++ b/Modules/Net/settings.swift @@ -29,6 +29,8 @@ You can use a combination of any of the variables. There is only one limitation: