From 536f340aa4716351c01e2776f1e4e5ed63b4ede3 Mon Sep 17 00:00:00 2001 From: lunar-mining Date: Mon, 30 Oct 2023 08:13:51 +0100 Subject: [PATCH] dnet: render offline nodes as: node name (offline) --- bin/dnet/main.py | 16 ++++++++-------- bin/dnet/view.py | 50 +++++++++++++++++++++++++++++++----------------- 2 files changed, 40 insertions(+), 26 deletions(-) diff --git a/bin/dnet/main.py b/bin/dnet/main.py index 9b601329a..ead301ae4 100644 --- a/bin/dnet/main.py +++ b/bin/dnet/main.py @@ -83,16 +83,16 @@ class Dnetview: while True: info = await self.queue.get() values = list(info.values())[0] - try: - method = values.get("method") - except: - self.model.add_offline(info) - continue - if method == "dnet.subscribe_events": - self.model.add_event(info) + if values: + method = values.get("method") + if method == "dnet.subscribe_events": + self.model.add_event(info) + else: + self.model.add_node(info) else: - self.model.add_node(info) + self.model.add_offline(info) + self.queue.task_done() def main(self): diff --git a/bin/dnet/view.py b/bin/dnet/view.py index e09a148f6..e8e535125 100644 --- a/bin/dnet/view.py +++ b/bin/dnet/view.py @@ -130,6 +130,12 @@ class View(): slot.set_txt(i, addr) self.listwalker.contents.append(slot) + def draw_empty(self, node_name, info): + name = node_name + " (offline)" + node = Node(name, "node") + node.set_txt() + self.listwalker.contents.append(node) + #----------------------------------------------------------------- # Render subscribe_events() (left menu) #----------------------------------------------------------------- @@ -152,6 +158,8 @@ class View(): def fill_right_box(self): self.pile.contents.clear() focus_w = self.list.get_focus() + if focus_w[0] is None: + return session = focus_w[0].session if session == "outbound": @@ -181,7 +189,7 @@ class View(): async def update_view(self, evloop: asyncio.AbstractEventLoop, loop: urwid.MainLoop): known_nodes = [] - off_nodes = [] + empty_nodes = [] while True: await asyncio.sleep(0.1) # Redraw the screen @@ -190,25 +198,31 @@ class View(): for index, item in enumerate(self.listwalker.contents): known_nodes.append(item.node_name) - for node_name, info in self.model.nodes.items(): - if not info: - off_nodes.append(node_name) - - # TODO: - # Right now we ignore info if it's in the set of known nodes. - # However, there are a few events that should trigger a redraw: - # * a new inbound connection comes online - # * a new node comes online (FIXME) - # * a known node has gone offline - # * a inbound connection has gone offline - # * when RPC can't connect, display the node as offline. + # Draw get_info() -> called once for node_name, info in self.model.nodes.items(): if node_name in known_nodes: continue - if node_name in off_nodes: - continue else: self.draw_info(node_name, info) - - self.fill_left_box() - self.fill_right_box() + # TODO: + # There are a few events that should trigger a redraw: + # * a new inbound connection comes online + # * a inbound connection has gone offline + # * a new node comes online (FIXME) + # * when RPC can't connect, display the node as offline. + + # Check for offline nodes + for node_name, info in self.model.nodes.items(): + if not bool(info): + if node_name in empty_nodes: + continue + else: + empty_nodes.append(node_name) + self.listwalker.contents.clear() + self.draw_empty(node_name, info) + for name, info in self.model.nodes.items(): + if name not in empty_nodes: + self.draw_info(name, info) + # Only render info if the node is online + self.fill_left_box() + self.fill_right_box()