Kaynağa Gözat

dnet: render offline nodes as: node name (offline)

lunar-mining 2 yıl önce
ebeveyn
işleme
536f340aa4
2 değiştirilmiş dosya ile 38 ekleme ve 24 silme
  1. 7 7
      bin/dnet/main.py
  2. 31 17
      bin/dnet/view.py

+ 7 - 7
bin/dnet/main.py

@@ -83,16 +83,16 @@ class Dnetview:
         while True:
         while True:
             info = await self.queue.get()
             info = await self.queue.get()
             values = list(info.values())[0]
             values = list(info.values())[0]
-            try:
+
+            if values:
                 method = values.get("method")
                 method = values.get("method")
-            except:
+                if method == "dnet.subscribe_events":
+                    self.model.add_event(info)
+                else:
+                    self.model.add_node(info)
+            else:
                 self.model.add_offline(info)
                 self.model.add_offline(info)
-                continue
 
 
-            if method == "dnet.subscribe_events":
-                self.model.add_event(info)
-            else:
-                self.model.add_node(info)
             self.queue.task_done()
             self.queue.task_done()
 
 
     def main(self):
     def main(self):

+ 31 - 17
bin/dnet/view.py

@@ -130,6 +130,12 @@ class View():
                slot.set_txt(i, addr)
                slot.set_txt(i, addr)
                self.listwalker.contents.append(slot)
                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)
     # Render subscribe_events() (left menu)
     #-----------------------------------------------------------------
     #-----------------------------------------------------------------
@@ -152,6 +158,8 @@ class View():
     def fill_right_box(self):
     def fill_right_box(self):
         self.pile.contents.clear()
         self.pile.contents.clear()
         focus_w = self.list.get_focus()
         focus_w = self.list.get_focus()
+        if focus_w[0] is None:
+            return
         session = focus_w[0].session
         session = focus_w[0].session
 
 
         if session == "outbound":
         if session == "outbound":
@@ -181,7 +189,7 @@ class View():
     async def update_view(self, evloop: asyncio.AbstractEventLoop,
     async def update_view(self, evloop: asyncio.AbstractEventLoop,
                           loop: urwid.MainLoop):
                           loop: urwid.MainLoop):
         known_nodes = []
         known_nodes = []
-        off_nodes = []
+        empty_nodes = []
         while True:
         while True:
             await asyncio.sleep(0.1)
             await asyncio.sleep(0.1)
             # Redraw the screen
             # Redraw the screen
@@ -190,25 +198,31 @@ class View():
             for index, item in enumerate(self.listwalker.contents):
             for index, item in enumerate(self.listwalker.contents):
                 known_nodes.append(item.node_name)
                 known_nodes.append(item.node_name)
 
 
+            # Draw get_info() -> called once
             for node_name, info in self.model.nodes.items():
             for node_name, info in self.model.nodes.items():
-                if not info:
-                    off_nodes.append(node_name)
-                
+                if node_name in known_nodes:
+                    continue
+                else:
+                    self.draw_info(node_name, info)
             # TODO:
             # 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:
+            # There are a few events that should trigger a redraw:
             #   * a new inbound connection comes online
             #   * a new inbound connection comes online
-            #   * a new node comes online (FIXME)
-            #   * a known node has gone offline
             #   * a inbound connection has gone offline
             #   * a inbound connection has gone offline
+            #   * a new node comes online (FIXME)
             #   * when RPC can't connect, display the node as offline.
             #   * when RPC can't connect, display the node as offline.
+
+            # Check for offline nodes
             for node_name, info in self.model.nodes.items():
             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()
+                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()