aboutsummaryrefslogtreecommitdiff
path: root/Hotline/Views/ServerView.swift
diff options
context:
space:
mode:
authorDustin Mierau <dustin@mierau.me>2023-12-05 15:57:27 -0800
committerDustin Mierau <dustin@mierau.me>2023-12-05 15:57:27 -0800
commitb99219f16792be4a06a89f1f32a59f0bf97bba68 (patch)
tree4503d6f8b8c980c073c0e899da014bbffc4f7e94 /Hotline/Views/ServerView.swift
parentb1a176ba3da2c7cf815084f0f8109008fe763809 (diff)
Experimenting with files.
Diffstat (limited to 'Hotline/Views/ServerView.swift')
-rw-r--r--Hotline/Views/ServerView.swift155
1 files changed, 104 insertions, 51 deletions
diff --git a/Hotline/Views/ServerView.swift b/Hotline/Views/ServerView.swift
index 0dafbce..98fd515 100644
--- a/Hotline/Views/ServerView.swift
+++ b/Hotline/Views/ServerView.swift
@@ -4,70 +4,123 @@ struct ServerView: View {
@Environment(HotlineState.self) private var appState
@Environment(HotlineClient.self) private var hotline
@Environment(HotlineTrackerClient.self) private var tracker
-
+
+ let server: HotlineServer
+
+ func connectionStatusTitle(status: HotlineClientStatus) -> String {
+ switch(status) {
+ case .disconnected:
+ return "Disconnected"
+ case .connecting:
+ return "Connecting"
+ case .connected:
+ return "Connected"
+ case .loggingIn:
+ return "Logging In"
+ case .loggedIn:
+ return "Logged In"
+ }
+ }
+
+ func connectionProgress(status: HotlineClientStatus) -> Double {
+ return Double(status.rawValue) / Double(HotlineClientStatus.loggedIn.rawValue)
+ }
+
var body: some View {
@Bindable var config = appState
- TabView {
- NavigationView {
- ChatView()
- .navigationTitle(hotline.server?.name ?? "Hotline")
- .navigationBarTitleDisplayMode(.inline)
- .navigationBarItems(
- leading: Button(action: {
- appState.presentTracker()
- }) {
- Image(systemName: "globe.americas.fill") // Hamburger icon or similar
- .imageScale(.large)
+ NavigationStack {
+ if hotline.connectionStatus != .loggedIn {
+ VStack {
+ Spacer()
+ VStack(alignment: .center) {
+ Text("🌎").font(.largeTitle)
+ Text(server.name!).font(.title3).fontWeight(.medium)
+ Text(server.description!).opacity(0.6).font(.title3)
+ Text(server.address).opacity(0.6).font(.title3)
+ }
+ Spacer()
+ HStack(alignment: .center) {
+ if hotline.connectionStatus == .disconnected {
+ ProgressView(connectionStatusTitle(status: hotline.connectionStatus), value: connectionProgress(status: hotline.connectionStatus))
+ Button("Connect") {
+ hotline.connect(to: server)
+ // config.dismissTracker()
+ }
+ .bold()
+ .padding(EdgeInsets(top: 16, leading: 24, bottom: 16, trailing: 24))
+ .frame(maxWidth: .infinity)
+ .foregroundColor(.black)
+ .background(LinearGradient(gradient: Gradient(colors: [Color(white: 0.95), Color(white: 0.91)]), startPoint: .top, endPoint: .bottom))
+ .overlay(
+ RoundedRectangle(cornerRadius: 10.0).stroke(.black, lineWidth: 3).opacity(0.4)
+ )
+ .cornerRadius(10.0)
}
- )
-// .toolbarBackground(.visible, for: .navigationBar)
-// .toolbarBackground(.red, for: .navigationBar)
- }
- .tabItem {
- Image(systemName: "message")
- }
-
- NavigationView {
- UserListView()
- .navigationTitle("User List")
- .navigationBarTitleDisplayMode(.inline)
- }
- .tabItem {
- Image(systemName: "person.fill")
- }
-
- Text("News")
- .tabItem {
- Image(systemName: "newspaper")
+ else {
+ ProgressView("", value: Double(hotline.connectionStatus.rawValue / HotlineClientStatus.loggedIn.rawValue))
+ }
+ }
}
-
- NavigationView {
- MessageBoardView()
- .navigationTitle("Message Board")
- .navigationBarTitleDisplayMode(.inline)
+ .padding()
}
- .tabItem {
- Image(systemName: "pin")
+ else {
+ TabView {
+ ChatView()
+ .navigationTitle(hotline.server?.name ?? "Hotline")
+ .navigationBarTitleDisplayMode(.inline)
+ .navigationBarItems(
+ leading: Button(action: {
+ appState.presentTracker()
+ }) {
+ Image(systemName: "globe.americas.fill") // Hamburger icon or similar
+ .imageScale(.large)
+ }
+ )
+ // .toolbarBackground(.visible, for: .navigationBar)
+ // .toolbarBackground(.red, for: .navigationBar)
+ .tabItem {
+ Image(systemName: "message")
+ }
+
+ UserListView()
+ .navigationTitle("User List")
+ .navigationBarTitleDisplayMode(.inline)
+ .tabItem {
+ Image(systemName: "person.fill")
+ }
+
+ Text("News")
+ .tabItem {
+ Image(systemName: "newspaper")
+ }
+
+ MessageBoardView()
+ .navigationTitle("Message Board")
+ .navigationBarTitleDisplayMode(.inline)
+ .tabItem {
+ Image(systemName: "pin")
+ }
+
+ FilesView()
+ .navigationTitle("Files")
+ .navigationBarTitleDisplayMode(.inline)
+ .tabItem {
+ Image(systemName: "folder")
+ }
+ }
}
- NavigationView {
- FilesView()
- .navigationTitle("Files")
- .navigationBarTitleDisplayMode(.inline)
- }
- .tabItem {
- Image(systemName: "folder")
- }
+ // .sheet(isPresented: Binding(get: { hotline.connectionStatus != .loggedIn }, set: { _ in })) {
+ // TrackerView()
+ // }
}
-// .sheet(isPresented: Binding(get: { hotline.connectionStatus != .loggedIn }, set: { _ in })) {
-// TrackerView()
-// }
}
}
#Preview {
- ServerView()
+ ServerView(server: HotlineServer(address: "192.168.1.1", port: 5050, users: 5, name: "Ye Olde Server", description: "This is a server"))
.environment(HotlineClient())
.environment(HotlineTrackerClient(tracker: HotlineTracker("hltracker.com")))
+ .environment(HotlineState())
}