69 lines
2.3 KiB
Swift
69 lines
2.3 KiB
Swift
import SwiftUI
|
|
import UIKit
|
|
|
|
struct BridgeDiscoveryDebugLogView: View {
|
|
@Environment(BridgeConnectionController.self) private var bridgeController
|
|
@AppStorage("bridge.discovery.debugLogs") private var debugLogsEnabled: Bool = false
|
|
|
|
var body: some View {
|
|
List {
|
|
if !self.debugLogsEnabled {
|
|
Text("Enable “Discovery Debug Logs” to start collecting events.")
|
|
.foregroundStyle(.secondary)
|
|
}
|
|
|
|
if self.bridgeController.discoveryDebugLog.isEmpty {
|
|
Text("No log entries yet.")
|
|
.foregroundStyle(.secondary)
|
|
} else {
|
|
ForEach(self.bridgeController.discoveryDebugLog) { entry in
|
|
VStack(alignment: .leading, spacing: 2) {
|
|
Text(Self.formatTime(entry.ts))
|
|
.font(.caption)
|
|
.foregroundStyle(.secondary)
|
|
Text(entry.message)
|
|
.font(.callout)
|
|
.textSelection(.enabled)
|
|
}
|
|
.padding(.vertical, 4)
|
|
}
|
|
}
|
|
}
|
|
.navigationTitle("Discovery Logs")
|
|
.toolbar {
|
|
ToolbarItem(placement: .topBarTrailing) {
|
|
Button("Copy") {
|
|
UIPasteboard.general.string = self.formattedLog()
|
|
}
|
|
.disabled(self.bridgeController.discoveryDebugLog.isEmpty)
|
|
}
|
|
}
|
|
}
|
|
|
|
private func formattedLog() -> String {
|
|
self.bridgeController.discoveryDebugLog
|
|
.map { "\(Self.formatISO($0.ts)) \($0.message)" }
|
|
.joined(separator: "\n")
|
|
}
|
|
|
|
private static let timeFormatter: DateFormatter = {
|
|
let formatter = DateFormatter()
|
|
formatter.dateFormat = "HH:mm:ss"
|
|
return formatter
|
|
}()
|
|
|
|
private static let isoFormatter: ISO8601DateFormatter = {
|
|
let formatter = ISO8601DateFormatter()
|
|
formatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
|
|
return formatter
|
|
}()
|
|
|
|
private static func formatTime(_ date: Date) -> String {
|
|
self.timeFormatter.string(from: date)
|
|
}
|
|
|
|
private static func formatISO(_ date: Date) -> String {
|
|
self.isoFormatter.string(from: date)
|
|
}
|
|
}
|