mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-09-14 15:16:40 +00:00
feat(mesh): mirror app-originated DM/channel sends into on-device history
CMD_SEND_TXT_MSG and CMD_SEND_CHANNEL_TXT_MSG (the phone app's send path) transmitted over the mesh but never touched the device's own MessagesScreen history, unlike a message composed on-device (MessagesScreen::afterSend) -- so a DM/channel post sent from the app was invisible if that same conversation was later opened on the device's own screen. Both handlers now also call into the same history-store entry points incoming messages use. Also wires up delivery-status parity with an on-device send, not just the raw text: - Channels: arms the existing "relayed into mesh" repeater-echo tracker (trackRelaySend()/armChannelRelay()) on the new entry -- sendGroupMessage already runs that tracker regardless of who originated the send, this just attaches it to the right history entry. Required threading a ring position back out through AbstractUITask::addChannelMsg (now returns int) and a new armChannelRelay() passthrough. - DMs: addDMMsg gained ack_tag/ack_deadline_ms/resends params (threaded through MessageHistory -> MessagesScreen -> AbstractUITask/UITask) so an app-sent DM gets the same pending -> \xe2\x9c\x93/\xe2\x9c\x97 status the on-device compose path shows. resends stays 0 deliberately: the app owns its own retry decision, so this only drives the on-screen status, never a second, independent auto-resend from the device itself. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -84,8 +84,19 @@ public:
|
||||
virtual void msgRead(int msgcount) = 0;
|
||||
virtual void newMsg(uint8_t path_len, const char* from_name, const char* text, int msgcount, uint8_t contact_type = 0, const uint8_t* pub_key = nullptr) = 0;
|
||||
virtual void notify(UIEventType t = UIEventType::none) = 0;
|
||||
virtual void addChannelMsg(uint8_t channel_idx, const char* text, uint32_t timestamp = 0) {}
|
||||
virtual void addDMMsg(const uint8_t* pub_key, bool outgoing, const char* text, uint32_t sender_timestamp = 0) {}
|
||||
// Returns the new entry's ring position (see MessageHistory::addChannelMsg),
|
||||
// or -1 on a UI variant that doesn't track history (default no-op below) --
|
||||
// callers that need it (to then arm a relay-echo tracker) should check for
|
||||
// that instead of assuming a valid position.
|
||||
virtual int addChannelMsg(uint8_t channel_idx, const char* text, uint32_t timestamp = 0) { return -1; }
|
||||
// Arms the "relayed into mesh" tracker (a heard repeater rebroadcast) on the
|
||||
// entry at ring position pos, e.g. right after addChannelMsg for a channel
|
||||
// send this device just originated. seq: MyMesh::lastChannelRelaySeq().
|
||||
virtual void armChannelRelay(int pos, uint32_t seq) {}
|
||||
// ack_tag/ack_deadline_ms/resends: pending-ACK tracking for an outgoing DM
|
||||
// (0 = none, e.g. incoming or "no ack expected") -- see MessageHistory::addDMMsg.
|
||||
virtual void addDMMsg(const uint8_t* pub_key, bool outgoing, const char* text, uint32_t sender_timestamp = 0,
|
||||
uint32_t ack_tag = 0, uint32_t ack_deadline_ms = 0, uint8_t resends = 0) {}
|
||||
// A node shared its current position via a [LOC] message. pub_key is the
|
||||
// sender's key prefix for a verified DM share, or null for a channel share
|
||||
// (keyed by name, best-effort). Default no-op so UI variants opt in.
|
||||
|
||||
Reference in New Issue
Block a user