From 1f5e5967edb4146b10f077dd7d38e73385b2ebfd Mon Sep 17 00:00:00 2001
From: Matthias Nott <mnott@mnsoft.org>
Date: Wed, 01 Apr 2026 18:29:13 +0200
Subject: [PATCH] feat: show connection method (Local/VPN/Remote/Discovered) in app bar and settings

---
 lib/services/mqtt_service.dart |   21 +++++++++++++++++++--
 1 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/lib/services/mqtt_service.dart b/lib/services/mqtt_service.dart
index a872fd7..e50adcf 100644
--- a/lib/services/mqtt_service.dart
+++ b/lib/services/mqtt_service.dart
@@ -60,6 +60,8 @@
   // Callbacks
   void Function(ConnectionStatus status)? onStatusChanged;
   void Function(String detail)? onStatusDetail; // "Probing local...", "Scanning network..."
+  String? connectedHost; // The host we're currently connected to
+  String? connectedVia; // "Local", "VPN", "Remote", "Bonjour", "Scan"
   void Function(Map<String, dynamic> message)? onMessage;
   void Function()? onOpen;
   void Function()? onClose;
@@ -158,12 +160,27 @@
     }
 
     if (winner != null && !_intentionalClose) {
-      _mqttLog('MQTT: winner: $winner, connecting...');
-      onStatusDetail?.call('Connecting to $winner...');
+      // Determine connection method label
+      if (winner == config.localHost) {
+        connectedVia = 'Local';
+      } else if (winner == config.vpnHost) {
+        connectedVia = 'VPN';
+      } else if (winner == config.host) {
+        connectedVia = 'Remote';
+      } else if (winner == _lastDiscoveredHost) {
+        connectedVia = 'Discovered';
+      } else {
+        connectedVia = winner;
+      }
+      connectedHost = winner;
+      _mqttLog('MQTT: winner: $winner ($connectedVia), connecting...');
+      onStatusDetail?.call('Connecting via $connectedVia...');
       try {
         if (await _tryConnect(winner, clientId, timeout: 5000)) return;
       } catch (e) {
         _mqttLog('MQTT: connect to $winner failed: $e');
+        connectedHost = null;
+        connectedVia = null;
       }
     }
 

--
Gitblit v1.3.1