forked from kay/RouterOS
Neuer Tab: eine Tabelle pro physischem Ethernet/WLAN-Port mit den dort gefundenen Geräten (Name, IP, MAC, Fest/Dynamisch/Kein-DHCP), gebaut aus DHCP-Leases + ARP + Bridge-Host-Tabelle. Rechtsklick auf ein dynamisches Gerät -> "Feste IP zuweisen" (RouterOS' "Make Static", per /ip dhcp-server lease make-static), mit Bestätigungsdialog und Session-Backup vor dem ersten Schreibvorgang (geteilter Mechanismus mit dem Experte-Tab). Vier reale Bugs live gefunden und gefixt (siehe HANDOFF.md Bug 14-17): - "print terse" gibt das "dynamic"-Feld von /ip dhcp-server lease nie aus, in keinem Zustand -> Status kommt jetzt über RouterOS' find/get gegen die interne Eigenschaft, nicht aus gelesenen Feldern. - fetchMenuItems' .id-Positionsüberlagerung ordnete für dieses Menü die falsche .id der falschen Zeile zu -> Erkennung und make-static-Ziel laufen jetzt über die MAC-Adresse statt .id. - Ein SwiftUI-.confirmationDialog löschte sein eigenes Ziel-Objekt vor der Ausführung der bestätigten Aktion (Setter feuert bei jedem Knopfdruck, nicht nur Abbrechen) -> Dialog-Sichtbarkeit und Nutzlast entkoppelt, wie in BackupListView. - Die eigene Verifikations-Abfrage (get [find ...] feld als ein kombinierter Befehl) war selbst eine nie verifizierte Annahme und lieferte falsche Negative -> ersetzt durch :foreach aus zwei einzeln bestätigten Bausteinen (find, get <id> feld). RouterOSCommand bekommt einen neuen .action-Operationstyp für RouterOS-"Menü-spezifische Befehle" jenseits von add/set/remove (aktuell nur make-static). HANDOFF.md/CHATLOG.md mit allen vier Bugs, neuen Milestones M11/M12 und offenen Punkten aktualisiert. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CTgRxJTzaQwaRkngbaE1GJ
26 lines
1.1 KiB
Swift
26 lines
1.1 KiB
Swift
import SwiftUI
|
|
|
|
@main
|
|
struct RouterOSAssistantApp: App {
|
|
@StateObject private var connectionService = ConnectionService()
|
|
|
|
var body: some Scene {
|
|
WindowGroup {
|
|
TabView {
|
|
ConnectView(connectionService: connectionService)
|
|
.tabItem { Label("Verbinden", systemImage: "network") }
|
|
SetupView(connectionService: connectionService)
|
|
.tabItem { Label("Einrichten", systemImage: "checklist") }
|
|
OverviewView(connectionService: connectionService)
|
|
.tabItem { Label("Übersicht", systemImage: "point.3.connected.trianglepath.dotted") }
|
|
DevicesView(connectionService: connectionService)
|
|
.tabItem { Label("Geräte", systemImage: "laptopcomputer.and.iphone") }
|
|
ExpertView(connectionService: connectionService)
|
|
.tabItem { Label("Experte", systemImage: "wrench.and.screwdriver") }
|
|
BackupListView(connectionService: connectionService)
|
|
.tabItem { Label("Sicherungen", systemImage: "clock.arrow.circlepath") }
|
|
}
|
|
}
|
|
}
|
|
}
|