Skip to content

Commit 3315652

Browse files
committed
fix: use shortest fqdn as workspace display name
1 parent 4150758 commit 3315652

File tree

5 files changed

+35
-27
lines changed

5 files changed

+35
-27
lines changed

Coder Desktop/Coder Desktop/Preview Content/PreviewVPN.swift

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,27 @@ import SwiftUI
33

44
@MainActor
55
final class PreviewVPN: Coder_Desktop.VPNService {
6-
@Published var state: Coder_Desktop.VPNServiceState = .disabled
6+
@Published var state: Coder_Desktop.VPNServiceState = .connected
77
@Published var menuState: VPNMenuState = .init(agents: [
8-
UUID(): Agent(id: UUID(), name: "dev", status: .error, copyableDNS: "asdf.coder", wsName: "dogfood2",
8+
UUID(): Agent(id: UUID(), name: "dev", status: .error, fqdns: ["asdf.coder"], wsName: "dogfood2",
99
wsID: UUID()),
10-
UUID(): Agent(id: UUID(), name: "dev", status: .okay, copyableDNS: "asdf.coder",
10+
UUID(): Agent(id: UUID(), name: "dev", status: .okay, fqdns: ["asdf.coder"],
1111
wsName: "testing-a-very-long-name", wsID: UUID()),
12-
UUID(): Agent(id: UUID(), name: "dev", status: .warn, copyableDNS: "asdf.coder", wsName: "opensrc",
12+
UUID(): Agent(id: UUID(), name: "dev", status: .warn, fqdns: ["asdf.coder"], wsName: "opensrc",
1313
wsID: UUID()),
14-
UUID(): Agent(id: UUID(), name: "dev", status: .off, copyableDNS: "asdf.coder", wsName: "gvisor",
14+
UUID(): Agent(id: UUID(), name: "dev", status: .off, fqdns: ["asdf.coder"], wsName: "gvisor",
1515
wsID: UUID()),
16-
UUID(): Agent(id: UUID(), name: "dev", status: .off, copyableDNS: "asdf.coder", wsName: "example",
16+
UUID(): Agent(id: UUID(), name: "dev", status: .off, fqdns: ["asdf.coder"], wsName: "example",
1717
wsID: UUID()),
18-
UUID(): Agent(id: UUID(), name: "dev", status: .error, copyableDNS: "asdf.coder", wsName: "dogfood2",
18+
UUID(): Agent(id: UUID(), name: "dev", status: .error, fqdns: ["asdf.coder"], wsName: "dogfood2",
1919
wsID: UUID()),
20-
UUID(): Agent(id: UUID(), name: "dev", status: .okay, copyableDNS: "asdf.coder",
20+
UUID(): Agent(id: UUID(), name: "dev", status: .okay, fqdns: ["asdf.coder"],
2121
wsName: "testing-a-very-long-name", wsID: UUID()),
22-
UUID(): Agent(id: UUID(), name: "dev", status: .warn, copyableDNS: "asdf.coder", wsName: "opensrc",
22+
UUID(): Agent(id: UUID(), name: "dev", status: .warn, fqdns: ["asdf.coder"], wsName: "opensrc",
2323
wsID: UUID()),
24-
UUID(): Agent(id: UUID(), name: "dev", status: .off, copyableDNS: "asdf.coder", wsName: "gvisor",
24+
UUID(): Agent(id: UUID(), name: "dev", status: .off, fqdns: ["asdf.coder"], wsName: "gvisor",
2525
wsID: UUID()),
26-
UUID(): Agent(id: UUID(), name: "dev", status: .off, copyableDNS: "asdf.coder", wsName: "example",
26+
UUID(): Agent(id: UUID(), name: "dev", status: .off, fqdns: ["asdf.coder"], wsName: "example",
2727
wsID: UUID()),
2828
], workspaces: [:])
2929
let shouldFail: Bool

Coder Desktop/Coder Desktop/VPNMenuState.swift

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ struct Agent: Identifiable, Equatable, Comparable {
66
let id: UUID
77
let name: String
88
let status: AgentStatus
9-
let copyableDNS: String
9+
let fqdns: [String]
1010
let wsName: String
1111
let wsID: UUID
1212

@@ -17,6 +17,11 @@ struct Agent: Identifiable, Equatable, Comparable {
1717
}
1818
return lhs.wsName.localizedCompare(rhs.wsName) == .orderedAscending
1919
}
20+
21+
// Choose the shortest hostname, and remove trailing dot if present
22+
var primaryHost: String? { fqdns.min(by: { $0.count < $1.count })
23+
.map { $0.hasSuffix(".") ? String($0.dropLast()) : $0 }
24+
}
2025
}
2126

2227
enum AgentStatus: Int, Equatable, Comparable {
@@ -67,9 +72,7 @@ struct VPNMenuState {
6772
name: agent.name,
6873
// If last handshake was not within last five minutes, the agent is unhealthy
6974
status: agent.lastHandshake.date > Date.now.addingTimeInterval(-300) ? .okay : .warn,
70-
// Choose the shortest hostname, and remove trailing dot if present
71-
copyableDNS: agent.fqdn.min(by: { $0.count < $1.count })
72-
.map { $0.hasSuffix(".") ? String($0.dropLast()) : $0 } ?? "UNKNOWN",
75+
fqdns: agent.fqdn,
7376
wsName: wsName,
7477
wsID: wsID
7578
)

Coder Desktop/Coder Desktop/Views/VPNMenuItem.swift

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,17 @@ struct MenuItemView: View {
4747
@State private var nameIsSelected: Bool = false
4848
@State private var copyIsSelected: Bool = false
4949

50-
private var fmtWsName: AttributedString {
51-
var formattedName = AttributedString(item.wsName)
50+
private var itemName: AttributedString {
51+
let name = switch item {
52+
case let .agent(agent): agent.primaryHost ?? "\(item.wsName).coder"
53+
case .offlineWorkspace: "\(item.wsName).coder"
54+
}
55+
56+
var formattedName = AttributedString(name)
5257
formattedName.foregroundColor = .primary
53-
var coderPart = AttributedString(".coder")
54-
coderPart.foregroundColor = .gray
55-
formattedName.append(coderPart)
58+
if let range = formattedName.range(of: ".coder") {
59+
formattedName[range].foregroundColor = .gray
60+
}
5661
return formattedName
5762
}
5863

@@ -73,7 +78,7 @@ struct MenuItemView: View {
7378
.fill(item.status.color.opacity(1.0))
7479
.frame(width: 7, height: 7)
7580
}
76-
Text(fmtWsName).lineLimit(1).truncationMode(.tail)
81+
Text(itemName).lineLimit(1).truncationMode(.tail)
7782
Spacer()
7883
}.padding(.horizontal, Theme.Size.trayPadding)
7984
.frame(minHeight: 22)
@@ -84,10 +89,10 @@ struct MenuItemView: View {
8489
.onHover { hovering in nameIsSelected = hovering }
8590
Spacer()
8691
}.buttonStyle(.plain)
87-
if case let .agent(agent) = item {
92+
if case let .agent(agent) = item, let copyableDNS = agent.primaryHost {
8893
Button {
8994
NSPasteboard.general.clearContents()
90-
NSPasteboard.general.setString(agent.copyableDNS, forType: .string)
95+
NSPasteboard.general.setString(copyableDNS, forType: .string)
9196
} label: {
9297
Image(systemName: "doc.on.doc")
9398
.symbolVariant(.fill)

Coder Desktop/Coder DesktopTests/AgentsTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ struct AgentsTests {
2424
id: UUID(),
2525
name: "dev",
2626
status: .okay,
27-
copyableDNS: "a\($0).example.com",
28-
wsName: "a\($0)",
27+
fqdns: ["a\($0).coder"],
28+
wsName: "ws\($0)",
2929
wsID: UUID()
3030
)
3131
return (agent.id, agent)

Coder Desktop/Coder DesktopTests/VPNMenuStateTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ struct VPNMenuStateTests {
2727
#expect(storedAgent.name == "dev")
2828
#expect(storedAgent.wsID == workspaceID)
2929
#expect(storedAgent.wsName == "foo")
30-
#expect(storedAgent.copyableDNS == "foo.coder")
30+
#expect(storedAgent.primaryHost == "foo.coder")
3131
#expect(storedAgent.status == .okay)
3232
}
3333

@@ -123,7 +123,7 @@ struct VPNMenuStateTests {
123123
let storedAgent = try #require(state.agents[newAgentID])
124124
#expect(storedAgent.name == "agent1")
125125
#expect(storedAgent.wsID == workspaceID)
126-
#expect(storedAgent.copyableDNS == "foo.coder")
126+
#expect(storedAgent.primaryHost == "foo.coder")
127127
#expect(storedAgent.status == .okay)
128128
}
129129

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy