forked from kay/RouterOS
Fix: Picker-Warnungen durch ungültige WAN/LAN-Interface-Vorgaben
wanConfig/lanConfig starteten mit festen Platzhaltern ("ether1"/
"bridge"), die nicht zwangsläufig zu den tatsächlichen Interfaces des
verbundenen Geräts passen -> SwiftUI-Picker meldete ungültige
Selection. prepareDefaults() korrigiert jetzt beide (vorher nur WAN)
anhand eines allgemeinen "ist der Wert überhaupt in der Liste"-Checks
statt nur "ist es noch der Platzhalter", und läuft bereits im init
statt erst bei onAppear, damit der erste Render schon die echten
Werte zeigt.
Aufgefallen beim Live-Test gegen echtes Testgerät (Konsolenwarnung
"the selection ... is invalid and does not have an associated tag").
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HReLXMbmPvtQ23p1iWiJNW
This commit is contained in:
@@ -23,17 +23,36 @@ final class SetupViewModel: ObservableObject {
|
||||
init(connectionService: ConnectionService, backupService: BackupService = BackupService()) {
|
||||
self.connectionService = connectionService
|
||||
self.backupService = backupService
|
||||
prepareDefaults(from: connectionService.interfaces)
|
||||
}
|
||||
|
||||
var plannedCommands: [RouterOSCommand] {
|
||||
wanConfig.buildCommands() + lanConfig.buildCommands()
|
||||
}
|
||||
|
||||
/// Picks a sensible default WAN interface (first Ethernet-like port) once interfaces are known.
|
||||
/// Replaces the placeholder WAN/LAN interface names ("ether1"/"bridge") with real ones
|
||||
/// from the connected device, whenever the current value isn't actually one of its
|
||||
/// interfaces — otherwise the Picker selections don't match any of their tags.
|
||||
func prepareDefaults(from interfaces: [NetworkInterface]) {
|
||||
guard wanConfig.interfaceName.isEmpty || wanConfig.interfaceName == "ether1" else { return }
|
||||
if let firstEthernet = interfaces.first(where: { $0.type.lowercased().contains("ether") }) {
|
||||
wanConfig.interfaceName = firstEthernet.name
|
||||
guard !interfaces.isEmpty else { return }
|
||||
let names = Set(interfaces.map(\.name))
|
||||
|
||||
if !names.contains(wanConfig.interfaceName) {
|
||||
if let firstEthernet = interfaces.first(where: { $0.type.lowercased().contains("ether") }) {
|
||||
wanConfig.interfaceName = firstEthernet.name
|
||||
} else {
|
||||
wanConfig.interfaceName = interfaces[0].name
|
||||
}
|
||||
}
|
||||
|
||||
if !names.contains(lanConfig.interfaceName) {
|
||||
if let bridge = interfaces.first(where: { $0.type.lowercased().contains("bridge") }) {
|
||||
lanConfig.interfaceName = bridge.name
|
||||
} else if let fallback = interfaces.first(where: { $0.name != wanConfig.interfaceName }) {
|
||||
lanConfig.interfaceName = fallback.name
|
||||
} else {
|
||||
lanConfig.interfaceName = interfaces[0].name
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user