diff options
| author | Dustin Mierau <dustin@mierau.me> | 2023-12-05 15:57:27 -0800 |
|---|---|---|
| committer | Dustin Mierau <dustin@mierau.me> | 2023-12-05 15:57:27 -0800 |
| commit | b99219f16792be4a06a89f1f32a59f0bf97bba68 (patch) | |
| tree | 4503d6f8b8c980c073c0e899da014bbffc4f7e94 /Hotline/Views/ServerView.swift | |
| parent | b1a176ba3da2c7cf815084f0f8109008fe763809 (diff) | |
Experimenting with files.
Diffstat (limited to 'Hotline/Views/ServerView.swift')
| -rw-r--r-- | Hotline/Views/ServerView.swift | 155 |
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()) } |