user servers, icons

This commit is contained in:
spaced4ndy
2024-06-28 20:41:13 +04:00
parent 893e28468c
commit 805e7e9bd6
@@ -189,14 +189,18 @@ struct ServersSummaryView: View {
_ header: LocalizedStringKey? = nil,
_ footer: LocalizedStringKey? = nil
) -> some View {
// Sort by known, then connected, then address
let sortedServers = servers.sorted {
$0.connected == $1.connected
? serverAddress($0.smpServer) < serverAddress($1.smpServer)
: $0.connected && !$1.connected
$0.known == $1.known ? (
$0.connected == $1.connected
? serverAddress($0.smpServer) < serverAddress($1.smpServer)
: $0.connected && !$1.connected
) : ($0.known ?? false) && !($1.known ?? false)
}
let reserveIconSpace = sortedServers.contains(where: { $0.known ?? false })
Section {
ForEach(sortedServers) { server in
smpServerView(server, showReconnectButton, statsStartedAt)
smpServerView(server, showReconnectButton, statsStartedAt, reserveIconSpace)
}
} header: {
if let header = header {
@@ -209,7 +213,7 @@ struct ServersSummaryView: View {
}
}
private func smpServerView(_ srvSumm: SMPServerSummary, _ showReconnectButton: Bool, _ statsStartedAt: Date) -> some View {
private func smpServerView(_ srvSumm: SMPServerSummary, _ showReconnectButton: Bool, _ statsStartedAt: Date, _ reserveIconSpace: Bool) -> some View {
NavigationLink(tag: srvSumm.id, selection: $selectedSMPServer) {
SMPServerSummaryView(
summary: srvSumm,
@@ -220,6 +224,19 @@ struct ServersSummaryView: View {
.navigationBarTitleDisplayMode(.large)
} label: {
HStack {
Group {
if srvSumm.known ?? false {
Image(systemName: "server.rack")
.resizable()
.aspectRatio(contentMode: .fit)
.foregroundColor(.secondary)
} else if reserveIconSpace {
Color.clear
}
}
.frame(width: 20, alignment: .center)
.padding(.trailing, 4)
Text(serverAddress(srvSumm.smpServer))
.lineLimit(1)
if srvSumm.connected {
@@ -243,10 +260,16 @@ struct ServersSummaryView: View {
_ header: LocalizedStringKey? = nil,
_ footer: LocalizedStringKey? = nil
) -> some View {
let sortedServers = servers.sorted { serverAddress($0.xftpServer) < serverAddress($1.xftpServer) }
// Sort by known, then address
let sortedServers = servers.sorted {
$0.known == $1.known
? serverAddress($0.xftpServer) < serverAddress($1.xftpServer)
: ($0.known ?? false) && !($1.known ?? false)
}
let reserveIconSpace = sortedServers.contains(where: { $0.known ?? false })
Section {
ForEach(sortedServers) { server in
xftpServerView(server, statsStartedAt)
xftpServerView(server, statsStartedAt, reserveIconSpace)
}
} header: {
if let header = header {
@@ -259,7 +282,7 @@ struct ServersSummaryView: View {
}
}
private func xftpServerView(_ srvSumm: XFTPServerSummary, _ statsStartedAt: Date) -> some View {
private func xftpServerView(_ srvSumm: XFTPServerSummary, _ statsStartedAt: Date, _ reserveIconSpace: Bool) -> some View {
NavigationLink(tag: srvSumm.id, selection: $selectedXFTPServer) {
XFTPServerSummaryView(
summary: srvSumm,
@@ -269,6 +292,19 @@ struct ServersSummaryView: View {
.navigationBarTitleDisplayMode(.large)
} label: {
HStack {
Group {
if srvSumm.known ?? false {
Image(systemName: "server.rack")
.resizable()
.aspectRatio(contentMode: .fit)
.foregroundColor(.secondary)
} else if reserveIconSpace {
Color.clear
}
}
.frame(width: 20, alignment: .center)
.padding(.trailing, 4)
Text(serverAddress(srvSumm.xftpServer))
.lineLimit(1)
if srvSumm.rcvInProgress || srvSumm.sndInProgress || srvSumm.delInProgress {
@@ -410,7 +446,10 @@ struct SMPServerSummaryView: View {
Text("Server address")
} footer: {
if let known = summary.known, known {
Text("Server is configured in **Settings** → **Network & servers**.")
HStack {
Image(systemName: "server.rack").font(.caption)
Text("Server is configured in **Settings** → **Network & servers**.")
}
}
}
@@ -420,9 +459,15 @@ struct SMPServerSummaryView: View {
reconnectButtonSection()
} footer: {
if summary.subs != nil {
Text("Connection status is displayed based on Message subscriptions.")
HStack {
Image(systemName: "dot.radiowaves.up.forward")
Text("Connection status is displayed based on Message subscriptions.")
}
} else if summary.sessions != nil {
Text("Connection status is displayed based on Transport sessions.")
HStack {
Image(systemName: "dot.radiowaves.up.forward")
Text("Connection status is displayed based on Transport sessions.")
}
}
}
}
@@ -593,7 +638,10 @@ struct XFTPServerSummaryView: View {
Text("Server address")
} footer: {
if let known = summary.known, known {
Text("Server is configured in **Settings** → **Network & servers**.")
HStack {
Image(systemName: "server.rack").font(.caption)
Text("Server is configured in **Settings** → **Network & servers**.")
}
}
}