mirror of
https://github.com/meshtastic/firmware.git
synced 2025-10-28 23:34:03 +00:00
Dismiss feature fixed
This commit is contained in:
parent
3e4f654f58
commit
e3553c4eb3
@ -254,6 +254,54 @@ void MessageStore::dismissOldestMessage()
|
|||||||
saveToFlash();
|
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)
|
// Dismiss newest message (RAM + persisted queue)
|
||||||
void MessageStore::dismissNewestMessage()
|
void MessageStore::dismissNewestMessage()
|
||||||
{
|
{
|
||||||
|
|||||||
@ -72,6 +72,10 @@ class MessageStore
|
|||||||
void dismissOldestMessage();
|
void dismissOldestMessage();
|
||||||
void dismissNewestMessage();
|
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)
|
// Unified accessor (for UI code, defaults to RAM buffer)
|
||||||
const std::deque<StoredMessage> &getMessages() const { return liveMessages; }
|
const std::deque<StoredMessage> &getMessages() const { return liveMessages; }
|
||||||
|
|
||||||
|
|||||||
@ -405,14 +405,21 @@ void menuHandler::messageResponseMenu()
|
|||||||
static int optionsEnumArray[enumEnd];
|
static int optionsEnumArray[enumEnd];
|
||||||
int options = 0;
|
int options = 0;
|
||||||
|
|
||||||
|
auto mode = graphics::MessageRenderer::getThreadMode();
|
||||||
|
int ch = graphics::MessageRenderer::getThreadChannel();
|
||||||
|
uint32_t peer = graphics::MessageRenderer::getThreadPeer();
|
||||||
|
|
||||||
optionsArray[options] = "Back";
|
optionsArray[options] = "Back";
|
||||||
optionsEnumArray[options++] = Back;
|
optionsEnumArray[options++] = Back;
|
||||||
|
|
||||||
optionsArray[options] = "Conversations";
|
optionsArray[options] = "Conversations";
|
||||||
optionsEnumArray[options++] = ViewMode;
|
optionsEnumArray[options++] = ViewMode;
|
||||||
|
|
||||||
optionsArray[options] = "Dismiss All";
|
// Only show Dismiss All in View All mode
|
||||||
optionsEnumArray[options++] = DismissAll;
|
if (mode == graphics::MessageRenderer::ThreadMode::ALL) {
|
||||||
|
optionsArray[options] = "Dismiss All";
|
||||||
|
optionsEnumArray[options++] = DismissAll;
|
||||||
|
}
|
||||||
|
|
||||||
optionsArray[options] = "Dismiss Oldest";
|
optionsArray[options] = "Dismiss Oldest";
|
||||||
optionsEnumArray[options++] = DismissOldest;
|
optionsEnumArray[options++] = DismissOldest;
|
||||||
@ -458,8 +465,24 @@ void menuHandler::messageResponseMenu()
|
|||||||
} else if (selected == DismissAll) {
|
} else if (selected == DismissAll) {
|
||||||
messageStore.clearAllMessages();
|
messageStore.clearAllMessages();
|
||||||
graphics::MessageRenderer::clearThreadRegistries();
|
graphics::MessageRenderer::clearThreadRegistries();
|
||||||
|
|
||||||
|
// Reset back to "View All"
|
||||||
|
graphics::MessageRenderer::setThreadMode(graphics::MessageRenderer::ThreadMode::ALL);
|
||||||
} else if (selected == DismissOldest) {
|
} 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) {
|
} else if (selected == Preset || selected == Freetext) {
|
||||||
if (mode == graphics::MessageRenderer::ThreadMode::CHANNEL) {
|
if (mode == graphics::MessageRenderer::ThreadMode::CHANNEL) {
|
||||||
LOG_DEBUG("Replying to CHANNEL %d", ch);
|
LOG_DEBUG("Replying to CHANNEL %d", ch);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user