From edb07c7cea69cdd0cf27b97b0dc5e020f86f3f86 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Sun, 8 Sep 2024 14:51:36 +0200 Subject: [PATCH] Display outgoing stamps in message details --- sbapp/sideband/core.py | 39 ++++++++++++++++++++++++++++++++++----- sbapp/ui/messages.py | 31 ++++++++++++++++++++++++------- 2 files changed, 58 insertions(+), 12 deletions(-) diff --git a/sbapp/sideband/core.py b/sbapp/sideband/core.py index ee06218..9b5ae11 100644 --- a/sbapp/sideband/core.py +++ b/sbapp/sideband/core.py @@ -2388,13 +2388,39 @@ class SidebandCore(): dbc.execute(query, {"outbound_state": LXMF.LXMessage.OUTBOUND, "sending_state": LXMF.LXMessage.SENDING}) db.commit() - def _db_message_set_state(self, lxm_hash, state, is_retry=False): + def _db_message_set_state(self, lxm_hash, state, is_retry=False, ratchet_id=None, originator_stamp=None): + msg_extras = None + if ratchet_id != None: + try: + msg = self._db_message(lxm_hash) + if msg != None: + msg_extras = msg["extras"] + + if ratchet_id: + msg_extras["ratchet_id"] = ratchet_id + + if originator_stamp: + msg_extras["stamp_checked"] = False + msg_extras["stamp_raw"] = originator_stamp[0] + msg_extras["stamp_valid"] = originator_stamp[1] + msg_extras["stamp_value"] = originator_stamp[2] + + except Exception as e: + RNS.log("An error occurred while getting message extras: "+str(e)) + with self.db_lock: db = self.__db_connect() dbc = db.cursor() - - query = "UPDATE lxm set state = ? where lxm_hash = ?" - data = (state, lxm_hash) + + if msg_extras != None: + extras = msgpack.packb(msg_extras) + query = "UPDATE lxm set state = ?, extra = ? where lxm_hash = ?" + data = (state, extras, lxm_hash) + + else: + query = "UPDATE lxm set state = ? where lxm_hash = ?" + data = (state, lxm_hash) + dbc.execute(query, data) try: @@ -3934,7 +3960,10 @@ class SidebandCore(): if self._db_message(message.hash): RNS.log("Message exists, setting state to: "+str(message.state), RNS.LOG_DEBUG) - self._db_message_set_state(message.hash, message.state) + stamp = None + if originator and message.stamp != None: + stamp = [message.stamp, message.stamp_valid, message.stamp_value] + self._db_message_set_state(message.hash, message.state, ratchet_id=message.ratchet_id, originator_stamp=stamp) else: RNS.log("Message does not exist, saving", RNS.LOG_DEBUG) self._db_save_lxm(message, context_dest, originator, own_command=own_command) diff --git a/sbapp/ui/messages.py b/sbapp/ui/messages.py index 8436d5e..906fcad 100644 --- a/sbapp/ui/messages.py +++ b/sbapp/ui/messages.py @@ -104,6 +104,7 @@ class Messages(): def message_details_dialog(self, lxm_hash): RNS.log(f"Opening dialog for {RNS.prettyhexrep(lxm_hash)}", RNS.LOG_DEBUG) ss = int(dp(16)) + ms = int(dp(14)) msg = self.app.sideband.message(lxm_hash) if msg: @@ -119,21 +120,23 @@ class Messages(): else: d_text += f"[size={ss}][b]Signature[/b] is invalid[/size]\n" + ratchet_method = "" if "method" in msg: if msg["method"] == LXMF.LXMessage.UNKNOWN: d_text += f"[size={ss}][b]Delivered[/b] via unknown method[/size]\n" if msg["method"] == LXMF.LXMessage.OPPORTUNISTIC: d_text += f"[size={ss}][b]Delivered[/b] opportunistically[/size]\n" if msg["method"] == LXMF.LXMessage.DIRECT: + ratchet_method = "link " d_text += f"[size={ss}][b]Delivered[/b] over direct link[/size]\n" if msg["method"] == LXMF.LXMessage.PROPAGATED: d_text += f"[size={ss}][b]Delivered[/b] to propagation network[/size]\n" if msg["extras"] != None and "ratchet_id" in msg["extras"]: r_str = RNS.prettyhexrep(msg["extras"]["ratchet_id"]) - d_text += f"[size={ss}][b]Encrypted[/b] with ratchet {r_str}[/size]\n" + d_text += f"[size={ss}][b]Encrypted[/b] with {ratchet_method}ratchet {r_str}[/size]\n" - if msg["extras"] != None and "stamp_checked" in msg["extras"] and msg["extras"]["stamp_checked"] == True: + if msg["extras"] != None and "stamp_checked" in msg["extras"]: valid_str = " is not valid" if msg["extras"]["stamp_valid"] == True: valid_str = " is valid" @@ -146,11 +149,24 @@ class Messages(): else: sv_str = f"with value {sv}" + if msg["extras"]["stamp_checked"] == True: + d_text += f"[size={ss}][b]Stamp[/b] {sv_str}{valid_str}[/size]\n" + + else: + sv = msg["extras"]["stamp_value"] + if sv == None: + pass + elif sv > 255: + d_text += f"[size={ss}][b]Stamp[/b] generated from ticket[/size]\n" + else: + d_text += f"[size={ss}][b]Value[/b] of stamp is {sv}[/size]\n" + + # Stamp details if "stamp_raw" in msg["extras"] and type(msg["extras"]["stamp_raw"]) == bytes: sstr = RNS.hexrep(msg["extras"]["stamp_raw"]) - d_text += f"[size={ss}][b]Raw stamp[/b] {sstr}[/size]\n" - - d_text += f"[size={ss}][b]Stamp[/b] {sv_str}{valid_str}[/size]\n" + sstr1 = RNS.hexrep(msg["extras"]["stamp_raw"][:16]) + sstr2 = RNS.hexrep(msg["extras"]["stamp_raw"][16:]) + d_text += f"[size={ss}]\n[b]Raw stamp[/b]\n[/size][size={ms}][font=RobotoMono-Regular]{sstr1}\n{sstr2}[/font][/size]\n" self.details_dialog = MDDialog( title="Message Details", @@ -484,8 +500,9 @@ class Messages(): heading_str = titlestr if phy_stats_str != "" and self.app.sideband.config["advanced_stats"]: heading_str += phy_stats_str+"\n" - if stamp_valid: - txstr += f" [b]Stamp[/b] value is {stamp_value} " + # TODO: Remove + # if stamp_valid: + # txstr += f" [b]Stamp[/b] value is {stamp_value} " heading_str += "[b]Sent[/b] "+txstr heading_str += "\n[b]Received[/b] "+rxstr