mirror of
https://github.com/meshtastic/firmware.git
synced 2025-10-28 07:13:25 +00:00
Dismiss feature fixed
This commit is contained in:
parent
3e4f654f58
commit
e3553c4eb3
@ -254,6 +254,54 @@ void MessageStore::dismissOldestMessage()
|
||||
saveToFlash();
|
||||
}
|
||||
|
||||
// Dismiss oldest message in a specific channel
|
||||
void MessageStore::dismissOldestMessageInChannel(uint8_t channel)
|
||||
{
|
||||
auto it = std::find_if(liveMessages.begin(), liveMessages.end(), [channel](const StoredMessage &m) {
|
||||
return m.type == MessageType::BROADCAST && m.channelIndex == channel;
|
||||
});
|
||||
if (it != liveMessages.end()) {
|
||||
liveMessages.erase(it);
|
||||
}
|
||||
|
||||
auto it2 = std::find_if(messages.begin(), messages.end(), [channel](const StoredMessage &m) {
|
||||
return m.type == MessageType::BROADCAST && m.channelIndex == channel;
|
||||
});
|
||||
if (it2 != messages.end()) {
|
||||
messages.erase(it2);
|
||||
}
|
||||
|
||||
saveToFlash();
|
||||
}
|
||||
|
||||
// Dismiss oldest message in a direct conversation with a peer
|
||||
void MessageStore::dismissOldestMessageWithPeer(uint32_t peer)
|
||||
{
|
||||
auto it = std::find_if(liveMessages.begin(), liveMessages.end(), [peer](const StoredMessage &m) {
|
||||
if (m.type == MessageType::DM_TO_US) {
|
||||
uint32_t other = (m.sender == nodeDB->getNodeNum()) ? m.dest : m.sender;
|
||||
return other == peer;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
if (it != liveMessages.end()) {
|
||||
liveMessages.erase(it);
|
||||
}
|
||||
|
||||
auto it2 = std::find_if(messages.begin(), messages.end(), [peer](const StoredMessage &m) {
|
||||
if (m.type == MessageType::DM_TO_US) {
|
||||
uint32_t other = (m.sender == nodeDB->getNodeNum()) ? m.dest : m.sender;
|
||||
return other == peer;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
if (it2 != messages.end()) {
|
||||
messages.erase(it2);
|
||||
}
|
||||
|
||||
saveToFlash();
|
||||
}
|
||||
|
||||
// Dismiss newest message (RAM + persisted queue)
|
||||
void MessageStore::dismissNewestMessage()
|
||||
{
|
||||
|
||||
@ -72,6 +72,10 @@ class MessageStore
|
||||
void dismissOldestMessage();
|
||||
void dismissNewestMessage();
|
||||
|
||||
// New targeted dismiss helpers
|
||||
void dismissOldestMessageInChannel(uint8_t channel);
|
||||
void dismissOldestMessageWithPeer(uint32_t peer);
|
||||
|
||||
// Unified accessor (for UI code, defaults to RAM buffer)
|
||||
const std::deque<StoredMessage> &getMessages() const { return liveMessages; }
|
||||
|
||||
|
||||
@ -405,14 +405,21 @@ void menuHandler::messageResponseMenu()
|
||||
static int optionsEnumArray[enumEnd];
|
||||
int options = 0;
|
||||
|
||||
auto mode = graphics::MessageRenderer::getThreadMode();
|
||||
int ch = graphics::MessageRenderer::getThreadChannel();
|
||||
uint32_t peer = graphics::MessageRenderer::getThreadPeer();
|
||||
|
||||
optionsArray[options] = "Back";
|
||||
optionsEnumArray[options++] = Back;
|
||||
|
||||
optionsArray[options] = "Conversations";
|
||||
optionsEnumArray[options++] = ViewMode;
|
||||
|
||||
optionsArray[options] = "Dismiss All";
|
||||
optionsEnumArray[options++] = DismissAll;
|
||||
// Only show Dismiss All in View All mode
|
||||
if (mode == graphics::MessageRenderer::ThreadMode::ALL) {
|
||||
optionsArray[options] = "Dismiss All";
|
||||
optionsEnumArray[options++] = DismissAll;
|
||||
}
|
||||
|
||||
optionsArray[options] = "Dismiss Oldest";
|
||||
optionsEnumArray[options++] = DismissOldest;
|
||||
@ -458,8 +465,24 @@ void menuHandler::messageResponseMenu()
|
||||
} else if (selected == DismissAll) {
|
||||
messageStore.clearAllMessages();
|
||||
graphics::MessageRenderer::clearThreadRegistries();
|
||||
|
||||
// Reset back to "View All"
|
||||
graphics::MessageRenderer::setThreadMode(graphics::MessageRenderer::ThreadMode::ALL);
|
||||
} else if (selected == DismissOldest) {
|
||||
messageStore.dismissOldestMessage();
|
||||
auto mode = graphics::MessageRenderer::getThreadMode();
|
||||
int ch = graphics::MessageRenderer::getThreadChannel();
|
||||
uint32_t peer = graphics::MessageRenderer::getThreadPeer();
|
||||
|
||||
if (mode == graphics::MessageRenderer::ThreadMode::ALL) {
|
||||
// Global oldest
|
||||
messageStore.dismissOldestMessage();
|
||||
} else if (mode == graphics::MessageRenderer::ThreadMode::CHANNEL) {
|
||||
// Oldest in current channel
|
||||
messageStore.dismissOldestMessageInChannel(ch);
|
||||
} else if (mode == graphics::MessageRenderer::ThreadMode::DIRECT) {
|
||||
// Oldest in current DM
|
||||
messageStore.dismissOldestMessageWithPeer(peer);
|
||||
}
|
||||
} else if (selected == Preset || selected == Freetext) {
|
||||
if (mode == graphics::MessageRenderer::ThreadMode::CHANNEL) {
|
||||
LOG_DEBUG("Replying to CHANNEL %d", ch);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user