mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-05-05 12:02:06 -04:00
feat(tailscale): add Tailscale control center widget (#1875)
* feat(tailscale): add Tailscale control center widget Full-stack Tailscale integration for DMS control center: Backend (Go): - Event-driven manager via WatchIPNBus (no polling) - Reconnects with exponential backoff when tailscaled unavailable - Typed conversion from ipnstate.Status to QML-friendly IPC types - Testable via tailscaleClient interface with mock watcher - Manager cleanup in cleanupManagers() - 19 unit tests Frontend (QML): - TailscaleService with WebSocket subscription - TailscaleWidget with peer list, filter chips, search - Copy-to-clipboard for IPs and DNS names - Daemon lifecycle handling (offline/stopped states) Dependencies: - Add tailscale.com v1.96.1 (official local API client) - Bump Go to 1.26.1 (required by tailscale.com) * cleanups --------- Co-authored-by: bbedward <bbedward@gmail.com>
This commit is contained in:
@@ -22,6 +22,7 @@ Item {
|
||||
case section === "wifi":
|
||||
case section === "bluetooth":
|
||||
case section === "builtin_vpn":
|
||||
case section === "builtin_tailscale":
|
||||
return Math.min(350, maxAvailableHeight);
|
||||
case section.startsWith("brightnessSlider_"):
|
||||
return Math.min(400, maxAvailableHeight);
|
||||
@@ -128,6 +129,12 @@ Item {
|
||||
}
|
||||
builtinInstance = widgetModel.cupsBuiltinInstance;
|
||||
}
|
||||
if (builtinId === "builtin_tailscale") {
|
||||
if (widgetModel?.tailscaleLoader) {
|
||||
widgetModel.tailscaleLoader.active = true;
|
||||
}
|
||||
builtinInstance = widgetModel.tailscaleBuiltinInstance;
|
||||
}
|
||||
|
||||
if (!builtinInstance || !builtinInstance.ccDetailContent) {
|
||||
return;
|
||||
|
||||
@@ -918,6 +918,12 @@ Column {
|
||||
}
|
||||
builtinInstance = Qt.binding(() => root.model?.cupsBuiltinInstance);
|
||||
}
|
||||
if (id === "builtin_tailscale") {
|
||||
if (root.model?.tailscaleLoader) {
|
||||
root.model.tailscaleLoader.active = true;
|
||||
}
|
||||
builtinInstance = Qt.binding(() => root.model?.tailscaleBuiltinInstance);
|
||||
}
|
||||
}
|
||||
|
||||
sourceComponent: {
|
||||
|
||||
Reference in New Issue
Block a user