mirror of
https://github.com/dz0ny/meshcore-sar.git
synced 2026-08-11 16:30:28 +00:00
Fix channel deletion state
This commit is contained in:
@@ -836,6 +836,9 @@ class AppProvider with ChangeNotifier {
|
|||||||
' 🗑️ Channel $channelIdx deleted - removing from providers',
|
' 🗑️ Channel $channelIdx deleted - removing from providers',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
messagesProvider.clearChannelMessages(channelIdx);
|
||||||
|
debugPrint(' ✅ Cleared channel messages');
|
||||||
|
|
||||||
// Remove from ChannelsProvider
|
// Remove from ChannelsProvider
|
||||||
channelsProvider.removeChannel(channelIdx);
|
channelsProvider.removeChannel(channelIdx);
|
||||||
debugPrint(' ✅ Removed from ChannelsProvider');
|
debugPrint(' ✅ Removed from ChannelsProvider');
|
||||||
|
|||||||
@@ -1115,6 +1115,10 @@ class ConnectionProvider with ChangeNotifier {
|
|||||||
'✅ [Provider] Channel deleted successfully from slot $channelIdx',
|
'✅ [Provider] Channel deleted successfully from slot $channelIdx',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Soft-reset local UI state immediately, matching meshcore-open's
|
||||||
|
// behavior, then reconcile with an on-device refresh below.
|
||||||
|
onChannelInfoReceived?.call(channelIdx, '', Uint8List(16), null);
|
||||||
|
|
||||||
// Small delay to allow the response to propagate
|
// Small delay to allow the response to propagate
|
||||||
await Future.delayed(const Duration(milliseconds: 100));
|
await Future.delayed(const Duration(milliseconds: 100));
|
||||||
|
|
||||||
|
|||||||
@@ -916,6 +916,50 @@ class MessagesProvider with ChangeNotifier {
|
|||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Remove all messages associated with a specific channel.
|
||||||
|
void clearChannelMessages(int channelIdx) {
|
||||||
|
final messageIdsToRemove = _messages
|
||||||
|
.where((message) => message.isChannelMessage && message.channelIdx == channelIdx)
|
||||||
|
.map((message) => message.id)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
if (messageIdsToRemove.isEmpty) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_messages.removeWhere(
|
||||||
|
(message) => message.isChannelMessage && message.channelIdx == channelIdx,
|
||||||
|
);
|
||||||
|
|
||||||
|
for (final messageId in messageIdsToRemove) {
|
||||||
|
_timeoutTimers[messageId]?.cancel();
|
||||||
|
_timeoutTimers.remove(messageId);
|
||||||
|
_messageContactMap.remove(messageId);
|
||||||
|
_groupedMessageMapping.remove(messageId);
|
||||||
|
_messageContactLocations.remove(messageId);
|
||||||
|
_messageReceptionDetails.remove(messageId);
|
||||||
|
_messageTransferDetails.remove(messageId);
|
||||||
|
_messageRouteMetadata.remove(messageId);
|
||||||
|
}
|
||||||
|
|
||||||
|
_pendingSentMessages.removeWhere(
|
||||||
|
(_, message) => message.isChannelMessage && message.channelIdx == channelIdx,
|
||||||
|
);
|
||||||
|
_messageAckHistory.removeWhere(
|
||||||
|
(messageId, _) => messageIdsToRemove.contains(messageId),
|
||||||
|
);
|
||||||
|
_ackHistoryLookup.removeWhere(
|
||||||
|
(_, value) => messageIdsToRemove.contains(value.$1),
|
||||||
|
);
|
||||||
|
|
||||||
|
debugPrint(
|
||||||
|
'🗑️ [MessagesProvider] Cleared ${messageIdsToRemove.length} message(s) for channel $channelIdx',
|
||||||
|
);
|
||||||
|
|
||||||
|
_persistMessages();
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
/// Get recent messages (last N messages)
|
/// Get recent messages (last N messages)
|
||||||
List<Message> getRecentMessages({int count = 50}) {
|
List<Message> getRecentMessages({int count = 50}) {
|
||||||
final sorted = List<Message>.from(_messages)
|
final sorted = List<Message>.from(_messages)
|
||||||
|
|||||||
Reference in New Issue
Block a user