iOS: copy + clean bridge address

This commit is contained in:
Peter Steinberger
2025-12-13 23:29:32 +00:00
parent d96bc38bea
commit 7a6334d920
2 changed files with 33 additions and 3 deletions

View File

@@ -27,12 +27,32 @@ actor BridgeSession {
private static func prettyRemoteEndpoint(_ endpoint: NWEndpoint) -> String? {
switch endpoint {
case let .hostPort(host, port):
"\(host):\(port)".replacingOccurrences(of: "::ffff:", with: "")
let hostString = Self.prettyHostString(host)
if hostString.contains(":") {
return "[\(hostString)]:\(port)"
}
return "\(hostString):\(port)"
default:
String(describing: endpoint)
return String(describing: endpoint)
}
}
private static func prettyHostString(_ host: NWEndpoint.Host) -> String {
var hostString = String(describing: host)
hostString = hostString.replacingOccurrences(of: "::ffff:", with: "")
guard let percentIndex = hostString.firstIndex(of: "%") else { return hostString }
let prefix = hostString[..<percentIndex]
let allowed = CharacterSet(charactersIn: "0123456789abcdefABCDEF:.")
let isIPAddressPrefix = prefix.unicodeScalars.allSatisfy { allowed.contains($0) }
if isIPAddressPrefix {
return String(prefix)
}
return hostString
}
func connect(
endpoint: NWEndpoint,
hello: BridgeHello,

View File

@@ -1,5 +1,6 @@
import ClawdisKit
import SwiftUI
import UIKit
@MainActor
private final class ConnectStatusStore: ObservableObject {
@@ -43,7 +44,16 @@ struct SettingsTab: View {
if let serverName = self.appModel.bridgeServerName {
LabeledContent("Server", value: serverName)
if let addr = self.appModel.bridgeRemoteAddress {
LabeledContent("Address", value: addr)
LabeledContent("Address") {
Text(addr)
}
.contextMenu {
Button {
UIPasteboard.general.string = addr
} label: {
Label("Copy", systemImage: "doc.on.doc")
}
}
}
Button("Disconnect", role: .destructive) {