aboutsummaryrefslogtreecommitdiff
path: root/Hotline/macOS/ServerView.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Hotline/macOS/ServerView.swift')
-rw-r--r--Hotline/macOS/ServerView.swift166
1 files changed, 125 insertions, 41 deletions
diff --git a/Hotline/macOS/ServerView.swift b/Hotline/macOS/ServerView.swift
index d858c6e..da5716f 100644
--- a/Hotline/macOS/ServerView.swift
+++ b/Hotline/macOS/ServerView.swift
@@ -47,9 +47,51 @@ struct ListItemView: View {
.scaledToFit()
.frame(width: 18, height: 18)
Text(title)
-// Spacer()
}
- //.tag(item.tag)
+ }
+}
+
+struct AgreementView: View {
+ @Environment(\.dismiss) var dismiss
+
+ let text: String
+ let disagree: (() -> Void)?
+ let agree: (() -> Void)?
+
+ var body: some View {
+ VStack(spacing: 0) {
+ ScrollView(.vertical) {
+ Text(text)
+ .padding()
+ .font(.system(size: 13))
+ .fontDesign(.monospaced)
+ .textSelection(.enabled)
+ .lineSpacing(3)
+ .frame(maxWidth: .infinity, alignment: .leading)
+ }
+ .frame(maxWidth: .infinity)
+ Divider()
+ HStack(spacing: 8) {
+ Button("Disagree", action: {
+ dismiss()
+ disagree?()
+ })
+ .controlSize(.large)
+ .frame(width: 80)
+ .keyboardShortcut(.cancelAction)
+
+ Button("Agree", action: {
+ dismiss()
+ agree?()
+ })
+ .controlSize(.large)
+ .frame(width: 80)
+ .keyboardShortcut(.defaultAction)
+ }
+ .frame(maxWidth: .infinity)
+ .padding(16)
+ }
+ .frame(width: 500, height: 500)
}
}
@@ -70,45 +112,51 @@ private func connectionStatusToProgress(status: HotlineClientStatus) -> Double {
struct ServerView: View {
@Environment(Hotline.self) private var model: Hotline
- @State private var selectedCategoryId: MenuItem.ID?
@Environment(\.dismiss) var dismiss
- let server: Server
-
+ @State private var agreementShown: Bool = false
@State private var selection: MenuItem? = ServerView.menuItems.first
+
+ let server: Server
+
static var menuItems = [
MenuItem(name: "Chat", image: "bubble", type: .chat),
MenuItem(name: "News", image: "newspaper", type: .news, serverVersion: 150),
MenuItem(name: "Board", image: "note.text", type: .messageBoard),
MenuItem(name: "Files", image: "folder", type: .files),
- MenuItem(name: "Tasks", image: "arrow.up.circle", type: .tasks),
+// MenuItem(name: "Tasks", image: "arrow.up.circle", type: .tasks),
]
-
-
-// @State private var selection: String?
-
var body: some View {
NavigationSplitView {
List(selection: $selection) {
-
- HStack {
- Text(server.name ?? "")
- .fontWeight(.medium)
- .lineLimit(2)
- .font(.title3)
- .multilineTextAlignment(.center)
- .padding()
- }
- .selectionDisabled()
- .frame(maxWidth: .infinity, minHeight: 60)
- .background(VisualEffectView(material: .titlebar, blendingMode: .withinWindow).cornerRadius(16))
-// .background(.white.opacity(0.2))
- .cornerRadius(10)
-// .shadow(color: .black.opacity(0.1), radius: 3, y: 2)
- .tag(MenuItem(name: "title", image: "", type: .banner))
- .padding(.bottom, 16)
+
+// VStack(spacing: 0) {
+// bannerImage
+// .resizable()
+// .aspectRatio(contentMode: .fit)
+// .frame(maxWidth: .infinity, minHeight: 60, alignment: .topLeading)
+// .clipped()
+// }
+// .frame(maxWidth: .infinity)
+// }
+// else {
+// HStack {
+// Text(server.name ?? "")
+// .fontWeight(.medium)
+// .lineLimit(2)
+// .font(.title3)
+// .multilineTextAlignment(.center)
+// .padding()
+// }
+// .selectionDisabled()
+// .frame(maxWidth: .infinity, minHeight: 60)
+// .background(VisualEffectView(material: .titlebar, blendingMode: .withinWindow).cornerRadius(16))
+// .cornerRadius(10)
+// .tag(MenuItem(name: "title", image: "", type: .banner))
+// .padding(.bottom, 16)
+// }
if model.status != .loggedIn {
HStack {
@@ -121,17 +169,19 @@ struct ServerView: View {
}
if model.status == .loggedIn {
- ForEach(ServerView.menuItems) { menuItem in
- if let minServerVersion = menuItem.serverVersion {
- if let v = model.serverVersion, v >= minServerVersion {
+ Section(model.serverTitle) {
+ 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)
+ }
+ }
+ else {
ListItemView(icon: menuItem.image, title: menuItem.name)
.tag(menuItem)
}
}
- else {
- ListItemView(icon: menuItem.image, title: menuItem.name)
- .tag(menuItem)
- }
}
if model.users.count > 0 {
@@ -171,42 +221,76 @@ struct ServerView: View {
switch selection.type {
case .banner:
EmptyView()
- case .progress
- :
+ case .progress:
EmptyView()
case .chat:
ChatView()
+ .navigationTitle(self.model.serverTitle)
+ .navigationSubtitle(self.model.users.count > 0 ? "^[\(self.model.users.count) user](inflect: true) online" : "")
case .news:
NewsView()
+ .navigationTitle(self.model.serverTitle)
+ .navigationSubtitle(self.model.users.count > 0 ? "^[\(self.model.users.count) user](inflect: true) online" : "")
case .messageBoard:
MessageBoardView()
+ .navigationTitle(self.model.serverTitle)
+ .navigationSubtitle(self.model.users.count > 0 ? "^[\(self.model.users.count) user](inflect: true) online" : "")
case .files:
FilesView()
+ .navigationTitle(self.model.serverTitle)
+ .navigationSubtitle(self.model.users.count > 0 ? "^[\(self.model.users.count) user](inflect: true) online" : "")
case .tasks:
EmptyView()
case .user:
if let selectionUserID = selection.userID {
MessageView(userID: selectionUserID)
+ .navigationTitle(self.model.serverTitle)
+ .navigationSubtitle(self.model.users.count > 0 ? "^[\(self.model.users.count) user](inflect: true) online" : "")
}
}
}
}
.navigationTitle("")
.onAppear {
- Task {
- await model.login(server: self.server, login: "", password: "", username: "bolt", iconID: 128)
+ self.model.login(server: self.server, login: "", password: "", username: "bolt", iconID: 128) { success in
+ if !success {
+ print("FAILED LOGIN??")
+ }
+ else {
+ self.model.sendUserInfo(username: "bolt", iconID: 128)
+ print("GETTING USER LIST????!")
+ self.model.getUserList()
+ }
}
}
.onDisappear {
- Task {
- model.disconnect()
- }
+ self.model.disconnect()
}
.onChange(of: model.status) {
if model.status == .disconnected {
dismiss()
}
}
+// .onChange(of: model.agreement) {
+// if model.agreement != nil {
+// agreementShown = true
+// }
+// }
+// .sheet(isPresented: $agreementShown, onDismiss: {
+// if model.status == .disconnected {
+// dismiss()
+// }
+// }, content: {
+// if let text = model.agreement {
+// AgreementView(text: text, disagree: {
+// self.model.disconnect()
+// print("DISAGREE")
+// }, agree: {
+// print("AGREE?")
+// })
+//// .frame(minWidth: 300, maxWidth: 500, minHeight: 300)
+// }
+// })
}
}