aboutsummaryrefslogtreecommitdiff
path: root/Hotline/macOS/TrackerView.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Hotline/macOS/TrackerView.swift')
-rw-r--r--Hotline/macOS/TrackerView.swift34
1 files changed, 31 insertions, 3 deletions
diff --git a/Hotline/macOS/TrackerView.swift b/Hotline/macOS/TrackerView.swift
index 2c9c839..268cd3e 100644
--- a/Hotline/macOS/TrackerView.swift
+++ b/Hotline/macOS/TrackerView.swift
@@ -9,6 +9,7 @@ struct TrackerBookmark {
let type: TrackerBookmarkType
let name: String
let address: String
+ let port: Int = HotlinePorts.DefaultServerPort
}
@Observable
@@ -22,6 +23,27 @@ class TrackerItem: Identifiable, Hashable {
var expanded: Bool = false
var loading: Bool = false
+ var displayAddress: String? {
+ if let s = server {
+ if s.port == HotlinePorts.DefaultServerPort {
+ return s.address
+ }
+ else {
+ return "\(s.address):\(s.port)"
+ }
+ }
+ else if let b = bookmark {
+ if b.port == HotlinePorts.DefaultServerPort {
+ return b.address
+ }
+ else {
+ return "\(b.address):\(b.port)"
+ }
+ }
+
+ return nil
+ }
+
init(bookmark: TrackerBookmark) {
self.bookmark = bookmark
self.server = nil
@@ -46,6 +68,7 @@ class TrackerItem: Identifiable, Hashable {
hasher.combine(self.id)
}
+
@MainActor
func loadServers() async {
guard
@@ -283,10 +306,10 @@ struct TrackerView: View {
.alternatingRowBackgrounds(.enabled)
.contextMenu(forSelectionType: TrackerItem.self) { items in
if let item = items.first {
- if let server = item.server {
+ if let address = item.displayAddress {
Button {
NSPasteboard.general.clearContents()
- NSPasteboard.general.setString(server.address, forType: .string)
+ NSPasteboard.general.setString(address, forType: .string)
} label: {
Label("Copy Server Address", systemImage: "doc.on.doc")
}
@@ -371,7 +394,7 @@ struct TrackerView: View {
.help("Connect to Server...")
}
}
- .onAppear {
+ .task {
// Add initial items to tracker list.
var items: [TrackerItem] = []
for bookmark in self.bookmarks {
@@ -379,6 +402,11 @@ struct TrackerView: View {
}
self.servers = items
}
+ .onOpenURL(perform: { url in
+ if let s = Server(url: url) {
+ openWindow(id: "server", value: s)
+ }
+ })
}
}