Merge branch 'main' into feat/location-beacon-alerts-autopause

This commit is contained in:
MarekZegare4
2026-06-22 18:33:57 +02:00
2 changed files with 63 additions and 7 deletions
+22 -1
View File
@@ -486,8 +486,29 @@ void MyMesh::queueMessage(const ContactInfo &from, uint8_t txt_type, mesh::Packe
if (should_display && _ui) {
_ui->newMsg(path_len, from.name, text, offline_queue_len, from.type, from.id.pub_key);
_ui->notify(UIEventType::contactMessage);
if (from.type == ADV_TYPE_CHAT)
// Add to the on-device conversation history. Room servers (ADV_TYPE_ROOM) are
// viewed through the same history list as chat contacts (keyed by the server's
// pubkey), so their posts must be stored too — otherwise an incoming room
// message fires the notification and reaches the app via the offline queue but
// never shows when the room is opened directly on the device.
if (from.type == ADV_TYPE_CHAT) {
_ui->addDMMsg(from.id.pub_key, false, text, sender_timestamp);
} else if (from.type == ADV_TYPE_ROOM) {
// A room carries many guests, so prefix the post with its author so the UI
// can attribute each line. The signed message's `extra` holds the sender's
// pubkey prefix; resolve it to a contact name, falling back to a short hex.
char labeled[MAX_TEXT_LEN + 40]; // room text + "Sender: " (history store truncates)
if (extra && extra_len >= 4) {
ContactInfo* sc = lookupContactByPubKey(extra, extra_len);
if (sc && sc->name[0])
snprintf(labeled, sizeof(labeled), "%s: %s", sc->name, text);
else
snprintf(labeled, sizeof(labeled), "%02X%02X: %s", extra[0], extra[1], text);
} else {
snprintf(labeled, sizeof(labeled), "%s", text);
}
_ui->addDMMsg(from.id.pub_key, false, labeled, sender_timestamp);
}
}
#endif
}