Added propagation nodes to announce stream. Added keyboard shortcuts.

This commit is contained in:
Mark Qvist 2022-07-06 17:02:29 +02:00
parent 23ab36a34f
commit efefdbebe8
3 changed files with 87 additions and 27 deletions

16
main.py
View File

@ -99,6 +99,16 @@ class SidebandApp(MDApp):
def keydown_event(self, instance, keyboard, keycode, text, modifiers):
if len(modifiers) > 0 and modifiers[0] == 'ctrl' and (text == "w" or text == "q"):
self.quit_action(self)
if len(modifiers) > 0 and modifiers[0] == 'ctrl' and (text == "s" or text == "d"):
if self.root.ids.screen_manager.current == "messages_screen":
self.message_send_action()
if len(modifiers) > 0 and modifiers[0] == 'ctrl' and (text == "l"):
self.announces_action(self)
if len(modifiers) > 0 and modifiers[0] == 'ctrl' and (text == "n"):
if self.root.ids.screen_manager.current == "conversations_screen":
if not hasattr(self, "dialog_open") or not self.dialog_open:
self.new_conversation_action(self)
def keyboard_event(self, window, key, *largs):
# Handle escape/back
@ -443,9 +453,15 @@ class SidebandApp(MDApp):
def dl_no(s):
dialog.dismiss()
def dl_ds(s):
self.dialog_open = False
yes_button.bind(on_release=dl_yes)
no_button.bind(on_release=dl_no)
dialog.bind(on_dismiss=dl_ds)
dialog.open()
self.dialog_open = True
except Exception as e:
RNS.log("Error while creating new conversation dialog: "+str(e), RNS.LOG_ERROR)

View File

@ -32,6 +32,7 @@ class PropagationNodeDetector():
pass
RNS.log("Detected active propagation node "+RNS.prettyhexrep(destination_hash)+" emission "+str(age)+" seconds ago, "+str(hops)+" hops away")
self.owner.log_announce(destination_hash, RNS.prettyhexrep(destination_hash).encode("utf-8"), dest_type=PropagationNodeDetector.aspect_filter)
if self.owner.config["lxmf_propagation_node"] == None:
if self.owner.active_propagation_node == None:
@ -63,7 +64,7 @@ class SidebandCore():
def received_announce(self, destination_hash, announced_identity, app_data):
# Add the announce to the directory announce
# stream logger
self.log_announce(destination_hash, app_data)
self.log_announce(destination_hash, app_data, dest_type=SidebandCore.aspect_filter)
def __init__(self, owner_app):
self.owner_app = owner_app
@ -202,10 +203,10 @@ class SidebandCore():
RNS.log("Error while setting LXMF propagation node: "+str(e), RNS.LOG_ERROR)
def log_announce(self, dest, app_data):
def log_announce(self, dest, app_data, dest_type):
try:
RNS.log("Received LXMF destination announce for "+RNS.prettyhexrep(dest)+" with data: "+app_data.decode("utf-8"))
self._db_save_announce(dest, app_data)
RNS.log("Received "+str(dest_type)+" announce for "+RNS.prettyhexrep(dest)+" with data: "+app_data.decode("utf-8"))
self._db_save_announce(dest, app_data, dest_type)
self.owner_app.flag_new_announces = True
except Exception as e:
@ -290,7 +291,7 @@ class SidebandCore():
except Exception as e:
RNS.log("Error while getting peer name: "+str(e), RNS.LOG_ERROR)
RNS.log("Could not decode a valid peer name from data: "+str(e), RNS.LOG_DEBUG)
return RNS.prettyhexrep(context_dest)
def clear_conversation(self, context_dest):
@ -342,7 +343,7 @@ class SidebandCore():
dbc.execute("CREATE TABLE conv (dest_context BLOB PRIMARY KEY, last_tx INTEGER, last_rx INTEGER, unread INTEGER, type INTEGER, trust INTEGER, name BLOB, data BLOB)")
dbc.execute("DROP TABLE IF EXISTS announce")
dbc.execute("CREATE TABLE announce (id PRIMARY KEY, received INTEGER, source BLOB, data BLOB)")
dbc.execute("CREATE TABLE announce (id PRIMARY KEY, received INTEGER, source BLOB, data BLOB, dest_type BLOB)")
db.commit()
db.close()
@ -424,6 +425,7 @@ class SidebandCore():
"dest": entry[2],
"data": entry[3].decode("utf-8"),
"time": entry[1],
"type": entry[4]
}
announces.append(announce)
except Exception as e:
@ -649,15 +651,16 @@ class SidebandCore():
self.__event_conversation_changed(context_dest)
def _db_save_announce(self, destination_hash, app_data):
def _db_save_announce(self, destination_hash, app_data, dest_type="lxmf.delivery"):
db = sqlite3.connect(self.db_path)
dbc = db.cursor()
query = "INSERT INTO announce (received, source, data) values (?, ?, ?)"
query = "INSERT INTO announce (received, source, data, dest_type) values (?, ?, ?, ?)"
data = (
time.time(),
destination_hash,
app_data,
dest_type,
)
dbc.execute(query, data)

View File

@ -48,6 +48,7 @@ class Announces():
context_dest = announce["dest"]
ts = announce["time"]
a_data = announce["data"]
dest_type = announce["type"]
if not context_dest in self.added_item_dests:
if self.app.sideband.is_trusted(context_dest):
@ -55,14 +56,20 @@ class Announces():
else:
trust_icon = "account-question"
def gen_info(ts, dest, name):
def gen_info(ts, dest, name, dtype):
def x(sender):
yes_button = MDFlatButton(
text="OK",
)
if dtype == "lxmf.delivery":
ad_text = "[size=22dp]LXMF Peer[/size]\n\nReceived: "+ts+"\nAnnounced Name: "+name+"\nAddress: "+RNS.prettyhexrep(dest)
if dtype == "lxmf.propagation":
ad_text = "[size=22dp]LXMF Propagation Node[/size]\n\nReceived: "+ts+"\nAddress: "+RNS.prettyhexrep(dest)
dialog = MDDialog(
text="Announce Received: "+ts+"\nAnnounced Name: "+name+"\nLXMF Address: "+RNS.prettyhexrep(dest),
text=ad_text,
buttons=[ yes_button ],
)
def dl_yes(s):
@ -74,9 +81,21 @@ class Announces():
return x
time_string = time.strftime(ts_format, time.localtime(ts))
if dest_type == "lxmf.delivery":
disp_name = self.app.sideband.peer_display_name(context_dest)
iconl = IconLeftWidget(icon=trust_icon)
item = OneLineAvatarIconListItem(text=time_string+": "+disp_name, on_release=gen_info(time_string, context_dest, a_data))
elif dest_type == "lxmf.propagation":
disp_name = "Propagation Node "+RNS.prettyhexrep(context_dest)
iconl = IconLeftWidget(icon="upload-network")
else:
disp_name = "Unknown Announce"
iconl = IconLeftWidget(icon="progress-question")
item = OneLineAvatarIconListItem(text=time_string+": "+disp_name, on_release=gen_info(time_string, context_dest, a_data, dest_type))
item.add_widget(iconl)
item.sb_uid = context_dest
@ -111,6 +130,15 @@ class Announces():
self.app.conversation_from_announce_action(dest)
return x
def gen_set_node(dest, item):
def x():
item.dmenu.dismiss()
self.app.sideband.set_active_propagation_node(dest)
self.app.sideband.config["lxmf_propagation_node"] = dest
self.app.sideband.save_configuration()
return x
if dest_type == "lxmf.delivery":
dm_items = [
{
"viewclass": "OneLineListItem",
@ -121,11 +149,24 @@ class Announces():
# {
# "text": "Delete Announce",
# "viewclass": "OneLineListItem",
# "height": dp(64),
# "height": dp(40),
# "on_release": gen_del(context_dest, item)
# }
]
elif dest_type == "lxmf.propagation":
dm_items = [
{
"viewclass": "OneLineListItem",
"text": "Use this Propagation Node",
"height": dp(40),
"on_release": gen_set_node(context_dest, item)
},
]
else:
dm_items = []
item.iconr = IconRightWidget(icon="dots-vertical");
item.dmenu = MDDropdownMenu(