From 1d79dcb975ae6f606a783a3d0287d8dc473e1cc8 Mon Sep 17 00:00:00 2001
From: Matthias Nott <mnott@mnsoft.org>
Date: Fri, 10 Jul 2026 07:13:05 +0200
Subject: [PATCH] feat: session launcher (all-project search + switch-topic) and persistent last-host fast reconnect

---
 lib/providers/providers.dart |   34 ++++++++++++++++++++++------------
 1 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/lib/providers/providers.dart b/lib/providers/providers.dart
index ebfbb50..b5a35e2 100644
--- a/lib/providers/providers.dart
+++ b/lib/providers/providers.dart
@@ -6,6 +6,7 @@
 import 'package:flutter_secure_storage/flutter_secure_storage.dart';
 
 import '../models/message.dart';
+import '../models/project.dart';
 import '../models/server_config.dart';
 import '../models/session.dart';
 import '../services/message_store.dart';
@@ -25,8 +26,8 @@
 
 final serverConfigProvider =
     StateNotifierProvider<ServerConfigNotifier, ServerConfig?>((ref) {
-  return ServerConfigNotifier();
-});
+      return ServerConfigNotifier();
+    });
 
 class ServerConfigNotifier extends StateNotifier<ServerConfig?> {
   ServerConfigNotifier() : super(null) {
@@ -60,8 +61,9 @@
 
 // --- Connection Status ---
 
-final wsStatusProvider =
-    StateProvider<ConnectionStatus>((ref) => ConnectionStatus.disconnected);
+final wsStatusProvider = StateProvider<ConnectionStatus>(
+  (ref) => ConnectionStatus.disconnected,
+);
 
 final connectionDetailProvider = StateProvider<String>((ref) => '');
 final connectedViaProvider = StateProvider<String>((ref) => '');
@@ -83,12 +85,17 @@
   }
 });
 
+// --- Projects (PAI project launcher) ---
+
+final projectsProvider = StateProvider<List<Project>>((ref) => []);
+
 // --- Messages ---
 
-final messagesProvider =
-    StateNotifierProvider<MessagesNotifier, List<Message>>((ref) {
-  return MessagesNotifier(ref);
-});
+final messagesProvider = StateNotifierProvider<MessagesNotifier, List<Message>>(
+  (ref) {
+    return MessagesNotifier(ref);
+  },
+);
 
 class MessagesNotifier extends StateNotifier<List<Message>> {
   MessagesNotifier(this.ref) : super([]);
@@ -103,7 +110,9 @@
   void switchSession(String sessionId) {
     if (_currentSessionId == sessionId) {
       TraceService.instance.addTrace(
-          'switchSession SKIP', 'already on ${sessionId.substring(0, 8)}');
+        'switchSession SKIP',
+        'already on ${sessionId.substring(0, 8)}',
+      );
       return;
     }
     TraceService.instance.addTrace(
@@ -173,8 +182,7 @@
 
 // --- Unread Counts ---
 
-final unreadCountsProvider =
-    StateProvider<Map<String, int>>((ref) => {});
+final unreadCountsProvider = StateProvider<Map<String, int>>((ref) => {});
 
 // --- Input Mode ---
 
@@ -187,7 +195,9 @@
 // Holds the bridge between NavigateScreen and ChatScreen's MQTT service.
 // ChatScreen sets this when MQTT is initialized; NavigateScreen reads it.
 // Using a Riverpod provider eliminates the stale static reference risk.
-final navigateNotifierProvider = StateProvider<NavigateNotifier?>((ref) => null);
+final navigateNotifierProvider = StateProvider<NavigateNotifier?>(
+  (ref) => null,
+);
 
 // --- Pro / Purchase Status ---
 

--
Gitblit v1.3.1