| .. | .. |
|---|
| 13 | 13 | import '../models/server_config.dart'; |
|---|
| 14 | 14 | import '../providers/providers.dart'; |
|---|
| 15 | 15 | import '../services/audio_service.dart'; |
|---|
| 16 | +import '../services/message_store.dart'; |
|---|
| 16 | 17 | import '../services/websocket_service.dart'; |
|---|
| 17 | 18 | import '../theme/app_theme.dart'; |
|---|
| 18 | 19 | import '../widgets/command_bar.dart'; |
|---|
| .. | .. |
|---|
| 264 | 265 | |
|---|
| 265 | 266 | final activeId = ref.read(activeSessionIdProvider); |
|---|
| 266 | 267 | if (sessionId != null && sessionId != activeId) { |
|---|
| 268 | + // Store message for the other session so it's there when user switches |
|---|
| 269 | + _storeForSession(sessionId, message); |
|---|
| 267 | 270 | _incrementUnread(sessionId); |
|---|
| 268 | 271 | final sessions = ref.read(sessionsProvider); |
|---|
| 269 | 272 | final session = sessions.firstWhere( |
|---|
| .. | .. |
|---|
| 304 | 307 | |
|---|
| 305 | 308 | final activeId = ref.read(activeSessionIdProvider); |
|---|
| 306 | 309 | if (sessionId != null && sessionId != activeId) { |
|---|
| 310 | + _storeForSession(sessionId, message); |
|---|
| 307 | 311 | _incrementUnread(sessionId); |
|---|
| 308 | 312 | final sessions = ref.read(sessionsProvider); |
|---|
| 309 | 313 | final session = sessions.firstWhere( |
|---|
| .. | .. |
|---|
| 366 | 370 | ref.read(messagesProvider.notifier).addMessage(message); |
|---|
| 367 | 371 | ref.read(isTypingProvider.notifier).state = false; |
|---|
| 368 | 372 | _scrollToBottom(); |
|---|
| 373 | + } |
|---|
| 374 | + |
|---|
| 375 | + /// Store a message for a non-active session so it persists when the user switches to it. |
|---|
| 376 | + void _storeForSession(String sessionId, Message message) { |
|---|
| 377 | + MessageStore.loadAll(sessionId).then((existing) { |
|---|
| 378 | + MessageStore.save(sessionId, [...existing, message]); |
|---|
| 379 | + }); |
|---|
| 369 | 380 | } |
|---|
| 370 | 381 | |
|---|
| 371 | 382 | void _incrementUnread(String sessionId) { |
|---|
| .. | .. |
|---|
| 525 | 536 | void _requestScreenshot() { |
|---|
| 526 | 537 | _screenshotForChat = true; |
|---|
| 527 | 538 | _sendCommand('screenshot'); |
|---|
| 539 | + if (mounted) { |
|---|
| 540 | + ScaffoldMessenger.of(context).showSnackBar( |
|---|
| 541 | + const SnackBar( |
|---|
| 542 | + content: Text('Capturing screenshot...'), |
|---|
| 543 | + duration: Duration(seconds: 2), |
|---|
| 544 | + behavior: SnackBarBehavior.floating, |
|---|
| 545 | + ), |
|---|
| 546 | + ); |
|---|
| 547 | + } |
|---|
| 528 | 548 | } |
|---|
| 529 | 549 | |
|---|
| 530 | 550 | void _navigateToTerminal() { |
|---|