refactor(swift): share discovery status text

This commit is contained in:
Peter Steinberger
2026-02-15 20:40:47 +00:00
parent 778959b3dc
commit 3cd786cc2d
3 changed files with 45 additions and 74 deletions

View File

@@ -136,43 +136,9 @@ final class GatewayDiscoveryModel {
}
private func updateStatusText() {
let states = Array(self.statesByDomain.values)
if states.isEmpty {
self.statusText = self.browsers.isEmpty ? "Idle" : "Setup"
return
}
if let failed = states.first(where: { state in
if case .failed = state { return true }
return false
}) {
if case let .failed(err) = failed {
self.statusText = "Failed: \(err)"
return
}
}
if let waiting = states.first(where: { state in
if case .waiting = state { return true }
return false
}) {
if case let .waiting(err) = waiting {
self.statusText = "Waiting: \(err)"
return
}
}
if states.contains(where: { if case .ready = $0 { true } else { false } }) {
self.statusText = "Searching…"
return
}
if states.contains(where: { if case .setup = $0 { true } else { false } }) {
self.statusText = "Setup"
return
}
self.statusText = "Searching…"
self.statusText = GatewayDiscoveryStatusText.make(
states: Array(self.statesByDomain.values),
hasBrowsers: !self.browsers.isEmpty)
}
private static func prettyState(_ state: NWBrowser.State) -> String {

View File

@@ -329,43 +329,9 @@ public final class GatewayDiscoveryModel {
}
private func updateStatusText() {
let states = Array(self.statesByDomain.values)
if states.isEmpty {
self.statusText = self.browsers.isEmpty ? "Idle" : "Setup"
return
}
if let failed = states.first(where: { state in
if case .failed = state { return true }
return false
}) {
if case let .failed(err) = failed {
self.statusText = "Failed: \(err)"
return
}
}
if let waiting = states.first(where: { state in
if case .waiting = state { return true }
return false
}) {
if case let .waiting(err) = waiting {
self.statusText = "Waiting: \(err)"
return
}
}
if states.contains(where: { if case .ready = $0 { true } else { false } }) {
self.statusText = "Searching…"
return
}
if states.contains(where: { if case .setup = $0 { true } else { false } }) {
self.statusText = "Setup"
return
}
self.statusText = "Searching…"
self.statusText = GatewayDiscoveryStatusText.make(
states: Array(self.statesByDomain.values),
hasBrowsers: !self.browsers.isEmpty)
}
private static func txtDictionary(from result: NWBrowser.Result) -> [String: String] {

View File

@@ -0,0 +1,39 @@
import Foundation
import Network
public enum GatewayDiscoveryStatusText {
public static func make(states: [NWBrowser.State], hasBrowsers: Bool) -> String {
if states.isEmpty {
return hasBrowsers ? "Setup" : "Idle"
}
if let failed = states.first(where: { state in
if case .failed = state { return true }
return false
}) {
if case let .failed(err) = failed {
return "Failed: \(err)"
}
}
if let waiting = states.first(where: { state in
if case .waiting = state { return true }
return false
}) {
if case let .waiting(err) = waiting {
return "Waiting: \(err)"
}
}
if states.contains(where: { if case .ready = $0 { true } else { false } }) {
return "Searching…"
}
if states.contains(where: { if case .setup = $0 { true } else { false } }) {
return "Setup"
}
return "Searching…"
}
}