From ff79b0c15a045a1b3219dc179f684bf29b119a1c Mon Sep 17 00:00:00 2001
From: Matthias Nott <mnott@mnsoft.org>
Date: Sun, 22 Mar 2026 20:09:25 +0100
Subject: [PATCH] fix: play/pause toggle, recording captures session at start

---
 lib/screens/chat_screen.dart |   16 ++++++++++++++--
 1 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/lib/screens/chat_screen.dart b/lib/screens/chat_screen.dart
index 3137ff4..a1f82f8 100644
--- a/lib/screens/chat_screen.dart
+++ b/lib/screens/chat_screen.dart
@@ -480,14 +480,21 @@
     _scrollToBottom();
   }
 
+  String? _recordingSessionId; // Capture session at recording start
+
   Future<void> _startRecording() async {
+    _recordingSessionId = ref.read(activeSessionIdProvider);
     final path = await AudioService.startRecording();
     if (path != null) {
       setState(() => _isRecording = true);
+    } else {
+      _recordingSessionId = null;
     }
   }
 
   Future<void> _stopRecording() async {
+    final targetSession = _recordingSessionId;
+    _recordingSessionId = null;
     final path = await AudioService.stopRecording();
     setState(() => _isRecording = false);
 
@@ -512,7 +519,7 @@
       'audioBase64': b64,
       'content': '',
       'messageId': message.id,
-      'sessionId': ref.read(activeSessionIdProvider),
+      'sessionId': targetSession,
     });
 
     _scrollToBottom();
@@ -551,12 +558,17 @@
     if (message.audioUri == null) return;
 
     // Toggle: if this message is already playing, stop it
-    if (_playingMessageId == message.id && AudioService.isPlaying) {
+    if (_playingMessageId == message.id) {
       AudioService.stopPlayback();
       setState(() => _playingMessageId = null);
       return;
     }
 
+    // Stop any current playback first
+    if (_playingMessageId != null) {
+      AudioService.stopPlayback();
+    }
+
     setState(() => _playingMessageId = message.id);
 
     if (message.audioUri!.startsWith('/')) {

--
Gitblit v1.3.1