fix: improve message sending logic and handle range download errors in translation service

This commit is contained in:
zjs81 2026-04-02 19:52:43 -07:00
parent 2b826757cb
commit 01ad8471cc
3 changed files with 13 additions and 15 deletions

View file

@ -1162,13 +1162,6 @@ class _ChannelChatScreenState extends State<ChannelChatScreen> {
}
_lastChannelSendAt = now;
// Capture reply state before clearing, then clear input synchronously
// to prevent double-send during async translation.
final replyingTo = _replyingToMessage;
_textController.clear();
_cancelReply();
_textFieldFocusNode.requestFocus();
final connector = context.read<MeshCoreConnector>();
final settings = context.read<AppSettingsService>().settings;
final translationService = context.read<TranslationService>();
@ -1200,8 +1193,8 @@ class _ChannelChatScreenState extends State<ChannelChatScreen> {
}
}
}
if (replyingTo != null) {
messageText = '@[${replyingTo.senderName}] $messageText';
if (_replyingToMessage != null) {
messageText = '@[${_replyingToMessage!.senderName}] $messageText';
}
final maxBytes = maxChannelMessageBytes(connector.selfName);
@ -1212,6 +1205,9 @@ class _ChannelChatScreenState extends State<ChannelChatScreen> {
return;
}
_textController.clear();
_cancelReply();
_textFieldFocusNode.requestFocus();
connector.sendChannelMessage(
widget.channel,
messageText,

View file

@ -642,10 +642,6 @@ class _ChatScreenState extends State<ChatScreen> {
}
_lastTextSendAt = now;
// Clear input synchronously to prevent double-send
_textController.clear();
_textFieldFocusNode.requestFocus();
final settings = context.read<AppSettingsService>().settings;
final translationService = context.read<TranslationService>();
var outgoingText = text;
@ -683,6 +679,8 @@ class _ChatScreenState extends State<ChatScreen> {
return;
}
_textController.clear();
_textFieldFocusNode.requestFocus();
connector.sendMessage(
_resolveContact(connector),
outgoingText,

View file

@ -317,8 +317,12 @@ class TranslationService extends ChangeNotifier {
final request = http.Request('GET', uri);
request.headers['Range'] = 'bytes=$start-$end';
final response = await client.send(request);
if (response.statusCode != 206 && response.statusCode != 200) {
throw StateError('Range download failed: HTTP ${response.statusCode}');
if (response.statusCode != 206) {
await response.stream.drain<void>();
throw StateError(
'Range download failed: HTTP ${response.statusCode}'
'${response.statusCode == 200 ? ' (server ignored Range header)' : ''}',
);
}
final trackedStream = _trackDownloadProgress(response.stream);
await _fileStore.writeModelBytes(