aboutsummaryrefslogtreecommitdiff
path: root/Hotline
diff options
context:
space:
mode:
authorDustin Mierau <dustin@mierau.me>2024-05-02 08:52:45 -0700
committerDustin Mierau <dustin@mierau.me>2024-05-02 08:52:45 -0700
commit34795d68125adc8af548380a211f2574024aa359 (patch)
treea908b49a59937d8f16ca08472837d362cd94b98d /Hotline
parentbb1b116e7b00a226404573a36dab6c0f62fc0fd5 (diff)
Move message board up in navigation as it has always seemed higher level to me than news. Message board felt like big server news, vs News was more of users talking in a forum.
Diffstat (limited to 'Hotline')
-rw-r--r--Hotline/macOS/HotlinePanelView.swift12
-rw-r--r--Hotline/macOS/ServerView.swift162
2 files changed, 81 insertions, 93 deletions
diff --git a/Hotline/macOS/HotlinePanelView.swift b/Hotline/macOS/HotlinePanelView.swift
index 36204a7..d136869 100644
--- a/Hotline/macOS/HotlinePanelView.swift
+++ b/Hotline/macOS/HotlinePanelView.swift
@@ -45,10 +45,10 @@ struct HotlinePanelView: View {
.help("Public Chat")
Button {
- ApplicationState.shared.activeServerState?.selection = .news
+ ApplicationState.shared.activeServerState?.selection = .board
}
label: {
- Image(systemName: "newspaper.fill")
+ Image(systemName: "pin.fill")
.resizable()
.scaledToFit()
}
@@ -56,13 +56,13 @@ struct HotlinePanelView: View {
.frame(width: 18, height: 18)
.opacity(ApplicationState.shared.activeServerState == nil ? 0.5 : 1.0)
.disabled(ApplicationState.shared.activeServerState == nil)
- .help("News")
+ .help("Message Board")
Button {
- ApplicationState.shared.activeServerState?.selection = .board
+ ApplicationState.shared.activeServerState?.selection = .news
}
label: {
- Image(systemName: "pin.fill")
+ Image(systemName: "newspaper.fill")
.resizable()
.scaledToFit()
}
@@ -70,7 +70,7 @@ struct HotlinePanelView: View {
.frame(width: 18, height: 18)
.opacity(ApplicationState.shared.activeServerState == nil ? 0.5 : 1.0)
.disabled(ApplicationState.shared.activeServerState == nil)
- .help("Message Board")
+ .help("News")
Button {
ApplicationState.shared.activeServerState?.selection = .files
diff --git a/Hotline/macOS/ServerView.swift b/Hotline/macOS/ServerView.swift
index 1892177..e4524e5 100644
--- a/Hotline/macOS/ServerView.swift
+++ b/Hotline/macOS/ServerView.swift
@@ -29,16 +29,14 @@ struct ServerMenuItem: Identifiable, Hashable {
let type: ServerNavigationType
let name: String
let image: String
- let userID: UInt?
- let serverVersion: UInt?
+ let selectedImage: String
- init(type: ServerNavigationType, name: String, image: String, userID: UInt? = nil, serverVersion: UInt? = nil) {
+ init(type: ServerNavigationType, name: String, image: String, selectedImage: String) {
self.id = UUID()
self.type = type
self.name = name
self.image = image
- self.userID = userID
- self.serverVersion = serverVersion
+ self.selectedImage = selectedImage
}
func hash(into hasher: inout Hasher) {
@@ -130,23 +128,20 @@ struct ServerView: View {
@State private var model: Hotline = Hotline(trackerClient: HotlineTrackerClient(), client: HotlineClient())
@State private var state: ServerState = ServerState(selection: .chat)
-
@State private var agreementShown: Bool = false
-// @State private var selection: ServerMenuItem? = ServerView.menuItems.first
-
@State private var connectAddress: String = ""
@State private var connectLogin: String = ""
@State private var connectPassword: String = ""
@State private var connectNameSheetPresented: Bool = false
@State private var connectName: String = ""
-
+
@Binding var server: Server
static var menuItems: [ServerMenuItem] = [
- ServerMenuItem(type: .chat, name: "Chat", image: "bubble"),
- ServerMenuItem(type: .news, name: "News", image: "newspaper"),
- ServerMenuItem(type: .board, name: "Board", image: "pin"),
- ServerMenuItem(type: .files, name: "Files", image: "folder"),
+ ServerMenuItem(type: .chat, name: "Chat", image: "bubble", selectedImage: "bubble.fill"),
+ ServerMenuItem(type: .board, name: "Board", image: "pin", selectedImage: "pin.fill"),
+ ServerMenuItem(type: .news, name: "News", image: "newspaper", selectedImage: "newspaper.fill"),
+ ServerMenuItem(type: .files, name: "Files", image: "folder", selectedImage: "folder.fill"),
]
enum FocusFields {
@@ -157,6 +152,71 @@ struct ServerView: View {
@FocusState private var focusedField: FocusFields?
+ var body: some View {
+ Group {
+ if model.status == .disconnected {
+ connectForm
+ .navigationTitle("Connect to Server")
+ }
+ else if model.status != .loggedIn {
+ HStack {
+ Image("Hotline")
+ .resizable()
+ .renderingMode(.template)
+ .scaledToFit()
+ .foregroundColor(Color(hex: 0xE10000))
+ .frame(width: 18)
+ .opacity(controlActiveState == .inactive ? 0.5 : 1.0)
+ .padding(.trailing, 4)
+
+ ProgressView(value: connectionStatusToProgress(status: model.status)) {
+ Text(connectionStatusToLabel(status: model.status))
+ }
+ .accentColor(colorScheme == .dark ? .white : .black)
+ }
+ .frame(maxWidth: 300)
+ .padding()
+ .navigationTitle("Connecting to Server")
+ }
+ else {
+ serverView
+ .environment(model)
+ .onChange(of: preferences.userIconID) { sendPreferences() }
+ .onChange(of: preferences.username) { sendPreferences() }
+ .onChange(of: preferences.refusePrivateMessages) { sendPreferences() }
+ .onChange(of: preferences.refusePrivateChat) { sendPreferences() }
+ .onChange(of: preferences.enableAutomaticMessage) { sendPreferences() }
+ .onChange(of: preferences.automaticMessage) { sendPreferences() }
+ .toolbar {
+ ToolbarItem(placement: .navigation) {
+ Image(systemName: "globe.americas.fill")
+ .renderingMode(.template)
+
+ .resizable()
+ .scaledToFit()
+ .frame(width: 18)
+ .opacity(controlActiveState == .inactive ? 0.4 : 1.0)
+ }
+ }
+ }
+ }
+ .onDisappear {
+ model.disconnect()
+ }
+ .task {
+ var address = server.address
+ if server.port != HotlinePorts.DefaultServerPort {
+ address += ":\(server.port)"
+ }
+ connectAddress = server.address
+ connectLogin = server.login
+ connectPassword = server.password
+ connectToServer()
+ }
+ .focusedSceneValue(\.activeHotlineModel, model)
+ .focusedSceneValue(\.activeServerState, state)
+ }
+
var connectForm: some View {
VStack(alignment: .center) {
GroupBox {
@@ -280,16 +340,8 @@ struct ServerView: View {
var navigationList: some View {
List(selection: $state.selection) {
ForEach(ServerView.menuItems) { menuItem in
-// if let minServerVersion = menuItem.serverVersion {
-// if let v = model.serverVersion, v >= minServerVersion {
-// ListItemView(icon: menuItem.image, title: menuItem.name)
-// .tag(menuItem.type)
-// }
-// }
-// else {
- ListItemView(icon: menuItem.image, title: menuItem.name)
- .tag(menuItem.type)
-// }
+ ListItemView(icon: state.selection == menuItem.type ? menuItem.selectedImage : menuItem.image, title: menuItem.name)
+ .tag(menuItem.type)
}
if model.transfers.count > 0 {
@@ -366,70 +418,6 @@ struct ServerView: View {
}
}
- var body: some View {
- Group {
- if model.status == .disconnected {
- connectForm
- .navigationTitle("Connect to Server")
- }
- else if model.status != .loggedIn {
- HStack {
- Image("Hotline")
- .resizable()
- .renderingMode(.template)
- .scaledToFit()
- .foregroundColor(Color(hex: 0xE10000))
- .frame(width: 18)
- .opacity(controlActiveState == .inactive ? 0.5 : 1.0)
- .padding(.trailing, 4)
-
- ProgressView(value: connectionStatusToProgress(status: model.status)) {
- Text(connectionStatusToLabel(status: model.status))
- }
- .accentColor(colorScheme == .dark ? .white : .black)
- }
- .frame(maxWidth: 300)
- .padding()
- .navigationTitle("Connecting to Server")
- }
- else {
- serverView
- .environment(model)
- .onChange(of: preferences.userIconID) { sendPreferences() }
- .onChange(of: preferences.username) { sendPreferences() }
- .onChange(of: preferences.refusePrivateMessages) { sendPreferences() }
- .onChange(of: preferences.refusePrivateChat) { sendPreferences() }
- .onChange(of: preferences.enableAutomaticMessage) { sendPreferences() }
- .onChange(of: preferences.automaticMessage) { sendPreferences() }
- .toolbar {
- ToolbarItem(placement: .navigation) {
- Image(systemName: "globe.americas.fill")
- .renderingMode(.template)
-
- .resizable()
- .scaledToFit()
- .frame(width: 18)
- .opacity(controlActiveState == .inactive ? 0.4 : 1.0)
- }
- }
- }
- }
- .onDisappear {
- model.disconnect()
- }
- .task {
- var address = server.address
- if server.port != HotlinePorts.DefaultServerPort {
- address += ":\(server.port)"
- }
- connectAddress = server.address
- connectLogin = server.login
- connectPassword = server.password
- connectToServer()
- }
- .focusedSceneValue(\.activeHotlineModel, model)
- .focusedSceneValue(\.activeServerState, state)
- }
// MARK: -