mirror of
https://github.com/kean/Pulse.git
synced 2026-05-30 21:07:33 +00:00
84 lines
2.3 KiB
Swift
84 lines
2.3 KiB
Swift
// The MIT License (MIT)
|
||
//
|
||
// Copyright (c) 2020–2023 Alexander Grebenyuk (github.com/kean).
|
||
|
||
import SwiftUI
|
||
import Network
|
||
import Pulse
|
||
|
||
@available(iOS 15, *)
|
||
struct RemoteLoggerSelectedDeviceView: View {
|
||
@ObservedObject var logger: RemoteLogger = .shared
|
||
|
||
let name: String
|
||
let server: RemoteLoggerServerViewModel?
|
||
|
||
var body: some View {
|
||
HStack {
|
||
VStack(alignment: .leading, spacing: 2) {
|
||
Text(name)
|
||
makeStatusView(for: logger.connectionState)
|
||
}
|
||
Spacer()
|
||
if (server?.server.isProtected ?? false) {
|
||
Image(systemName: "lock.fill")
|
||
.foregroundColor(.separator)
|
||
}
|
||
#if !os(watchOS) && !os(tvOS)
|
||
Menu(content: {
|
||
Button("Forget this Device", role: .destructive) {
|
||
logger.forgetServer(named: name)
|
||
}
|
||
}, label: {
|
||
Image(systemName: "ellipsis.circle")
|
||
})
|
||
#if os(macOS)
|
||
.menuStyle(.borderlessButton)
|
||
.fixedSize()
|
||
#endif
|
||
#else
|
||
Button(role: .destructive, action: {
|
||
logger.forgetServer(named: name)
|
||
}, label: {
|
||
Image(systemName: "trash")
|
||
.foregroundStyle(.red)
|
||
}).buttonStyle(.plain)
|
||
#endif
|
||
}
|
||
}
|
||
|
||
private func makeStatusView(for state: RemoteLogger.ConnectionState) -> some View {
|
||
HStack(spacing: 8) {
|
||
Circle()
|
||
.frame(width: circleSize, height: circleSize)
|
||
.foregroundColor(statusColor)
|
||
Text(statusTitle)
|
||
.lineLimit(1)
|
||
.font(.subheadline)
|
||
.foregroundColor(.secondary)
|
||
}
|
||
}
|
||
|
||
private var statusColor: Color {
|
||
switch logger.connectionState {
|
||
case .connected: return Color.green
|
||
case .connecting: return Color.yellow
|
||
case .disconnected: return Color.gray
|
||
}
|
||
}
|
||
|
||
private var statusTitle: String {
|
||
switch logger.connectionState {
|
||
case .connected: return "Connected"
|
||
case .connecting: return "Connecting..."
|
||
case .disconnected: return "Disconnected"
|
||
}
|
||
}
|
||
}
|
||
|
||
#if os(tvOS)
|
||
private let circleSize: CGFloat = 16
|
||
#else
|
||
private let circleSize: CGFloat = 8
|
||
#endif
|