Display outgoing stamps in message details

This commit is contained in:
Mark Qvist 2024-09-08 14:51:36 +02:00
parent 12b7250a37
commit edb07c7cea
2 changed files with 58 additions and 12 deletions

View File

@ -2388,13 +2388,39 @@ class SidebandCore():
dbc.execute(query, {"outbound_state": LXMF.LXMessage.OUTBOUND, "sending_state": LXMF.LXMessage.SENDING}) dbc.execute(query, {"outbound_state": LXMF.LXMessage.OUTBOUND, "sending_state": LXMF.LXMessage.SENDING})
db.commit() 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: with self.db_lock:
db = self.__db_connect() db = self.__db_connect()
dbc = db.cursor() dbc = db.cursor()
query = "UPDATE lxm set state = ? where lxm_hash = ?" if msg_extras != None:
data = (state, lxm_hash) 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) dbc.execute(query, data)
try: try:
@ -3934,7 +3960,10 @@ class SidebandCore():
if self._db_message(message.hash): if self._db_message(message.hash):
RNS.log("Message exists, setting state to: "+str(message.state), RNS.LOG_DEBUG) 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: else:
RNS.log("Message does not exist, saving", RNS.LOG_DEBUG) RNS.log("Message does not exist, saving", RNS.LOG_DEBUG)
self._db_save_lxm(message, context_dest, originator, own_command=own_command) self._db_save_lxm(message, context_dest, originator, own_command=own_command)

View File

@ -104,6 +104,7 @@ class Messages():
def message_details_dialog(self, lxm_hash): def message_details_dialog(self, lxm_hash):
RNS.log(f"Opening dialog for {RNS.prettyhexrep(lxm_hash)}", RNS.LOG_DEBUG) RNS.log(f"Opening dialog for {RNS.prettyhexrep(lxm_hash)}", RNS.LOG_DEBUG)
ss = int(dp(16)) ss = int(dp(16))
ms = int(dp(14))
msg = self.app.sideband.message(lxm_hash) msg = self.app.sideband.message(lxm_hash)
if msg: if msg:
@ -119,21 +120,23 @@ class Messages():
else: else:
d_text += f"[size={ss}][b]Signature[/b] is invalid[/size]\n" d_text += f"[size={ss}][b]Signature[/b] is invalid[/size]\n"
ratchet_method = ""
if "method" in msg: if "method" in msg:
if msg["method"] == LXMF.LXMessage.UNKNOWN: if msg["method"] == LXMF.LXMessage.UNKNOWN:
d_text += f"[size={ss}][b]Delivered[/b] via unknown method[/size]\n" d_text += f"[size={ss}][b]Delivered[/b] via unknown method[/size]\n"
if msg["method"] == LXMF.LXMessage.OPPORTUNISTIC: if msg["method"] == LXMF.LXMessage.OPPORTUNISTIC:
d_text += f"[size={ss}][b]Delivered[/b] opportunistically[/size]\n" d_text += f"[size={ss}][b]Delivered[/b] opportunistically[/size]\n"
if msg["method"] == LXMF.LXMessage.DIRECT: if msg["method"] == LXMF.LXMessage.DIRECT:
ratchet_method = "link "
d_text += f"[size={ss}][b]Delivered[/b] over direct link[/size]\n" d_text += f"[size={ss}][b]Delivered[/b] over direct link[/size]\n"
if msg["method"] == LXMF.LXMessage.PROPAGATED: if msg["method"] == LXMF.LXMessage.PROPAGATED:
d_text += f"[size={ss}][b]Delivered[/b] to propagation network[/size]\n" d_text += f"[size={ss}][b]Delivered[/b] to propagation network[/size]\n"
if msg["extras"] != None and "ratchet_id" in msg["extras"]: if msg["extras"] != None and "ratchet_id" in msg["extras"]:
r_str = RNS.prettyhexrep(msg["extras"]["ratchet_id"]) 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" valid_str = " is not valid"
if msg["extras"]["stamp_valid"] == True: if msg["extras"]["stamp_valid"] == True:
valid_str = " is valid" valid_str = " is valid"
@ -146,11 +149,24 @@ class Messages():
else: else:
sv_str = f"with value {sv}" 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: if "stamp_raw" in msg["extras"] and type(msg["extras"]["stamp_raw"]) == bytes:
sstr = RNS.hexrep(msg["extras"]["stamp_raw"]) sstr = RNS.hexrep(msg["extras"]["stamp_raw"])
d_text += f"[size={ss}][b]Raw stamp[/b] {sstr}[/size]\n" sstr1 = RNS.hexrep(msg["extras"]["stamp_raw"][:16])
sstr2 = RNS.hexrep(msg["extras"]["stamp_raw"][16:])
d_text += f"[size={ss}][b]Stamp[/b] {sv_str}{valid_str}[/size]\n" 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( self.details_dialog = MDDialog(
title="Message Details", title="Message Details",
@ -484,8 +500,9 @@ class Messages():
heading_str = titlestr heading_str = titlestr
if phy_stats_str != "" and self.app.sideband.config["advanced_stats"]: if phy_stats_str != "" and self.app.sideband.config["advanced_stats"]:
heading_str += phy_stats_str+"\n" heading_str += phy_stats_str+"\n"
if stamp_valid: # TODO: Remove
txstr += f" [b]Stamp[/b] value is {stamp_value} " # if stamp_valid:
# txstr += f" [b]Stamp[/b] value is {stamp_value} "
heading_str += "[b]Sent[/b] "+txstr heading_str += "[b]Sent[/b] "+txstr
heading_str += "\n[b]Received[/b] "+rxstr heading_str += "\n[b]Received[/b] "+rxstr