mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-01-09 14:48:08 -05:00
script/dnet: render result of get_info() in View
This commit is contained in:
@@ -108,6 +108,8 @@ class Dnetview:
|
||||
loop = urwid.MainLoop(self.view.ui, self.view.palette,
|
||||
unhandled_input=self.unhandled_input,
|
||||
event_loop=urwid.AsyncioEventLoop(loop=self.ev))
|
||||
|
||||
#loop.set_alarm_in(2, self.view.update_view)
|
||||
loop.run()
|
||||
|
||||
def unhandled_input(self, key):
|
||||
|
||||
@@ -39,10 +39,11 @@ class LeftList(urwid.ListBox):
|
||||
def load_info(self):
|
||||
return InfoWidget(self)
|
||||
|
||||
class ServiceView(urwid.WidgetWrap):
|
||||
class NodeView(urwid.WidgetWrap):
|
||||
def __init__(self, info):
|
||||
test = urwid.Text(f"{info}")
|
||||
super().__init__(test)
|
||||
self.name = info
|
||||
self.text = urwid.Text(f"{self.name}")
|
||||
super().__init__(self.text)
|
||||
self._w = urwid.AttrWrap(self._w, None)
|
||||
self.update_w()
|
||||
|
||||
@@ -57,34 +58,17 @@ class ServiceView(urwid.WidgetWrap):
|
||||
def update_w(self):
|
||||
self._w.focus_attr = 'line'
|
||||
|
||||
def name(self):
|
||||
return "ServiceView"
|
||||
def get_widget(self):
|
||||
return "NodeView"
|
||||
|
||||
class SessionView(urwid.WidgetWrap):
|
||||
def __init__(self, info):
|
||||
test = urwid.Text(f"{info}")
|
||||
super().__init__(test)
|
||||
self._w = urwid.AttrWrap(self._w, None)
|
||||
self.update_w()
|
||||
|
||||
def selectable(self):
|
||||
return True
|
||||
|
||||
def keypress(self, size, key):
|
||||
#if key in ('q'):
|
||||
# raise urwid.ExitMainLoop()
|
||||
return key
|
||||
|
||||
def update_w(self):
|
||||
self._w.focus_attr = 'line'
|
||||
|
||||
def name(self):
|
||||
return "SessionView"
|
||||
def get_name(self):
|
||||
return self.name
|
||||
|
||||
class ConnectView(urwid.WidgetWrap):
|
||||
def __init__(self, info):
|
||||
test = urwid.Text(f"{info}")
|
||||
super().__init__(test)
|
||||
self.name = info
|
||||
self.text = urwid.Text(f"{self.name}")
|
||||
super().__init__(self.text)
|
||||
self._w = urwid.AttrWrap(self._w, None)
|
||||
self.update_w()
|
||||
|
||||
@@ -102,6 +86,34 @@ class ConnectView(urwid.WidgetWrap):
|
||||
def name(self):
|
||||
return "ConnectView"
|
||||
|
||||
def get_name(self):
|
||||
return self.name
|
||||
|
||||
class SlotView(urwid.WidgetWrap):
|
||||
def __init__(self, info):
|
||||
self.name = info
|
||||
self.text = urwid.Text(f"{self.name}")
|
||||
super().__init__(self.text)
|
||||
self._w = urwid.AttrWrap(self._w, None)
|
||||
self.update_w()
|
||||
|
||||
def selectable(self):
|
||||
return True
|
||||
|
||||
def keypress(self, size, key):
|
||||
#if key in ('q'):
|
||||
# raise urwid.ExitMainLoop()
|
||||
return key
|
||||
|
||||
def update_w(self):
|
||||
self._w.focus_attr = 'line'
|
||||
|
||||
def name(self):
|
||||
return "SlotView"
|
||||
|
||||
def get_name(self):
|
||||
return self.name
|
||||
|
||||
class View():
|
||||
palette = [
|
||||
('body','light gray','black', 'standout'),
|
||||
@@ -111,42 +123,119 @@ class View():
|
||||
def __init__(self, data):
|
||||
#logging.debug(f"dnetview init {data}")
|
||||
|
||||
self.data = data
|
||||
info_text = urwid.Text("")
|
||||
self.pile = urwid.Pile([info_text])
|
||||
scroll = ScrollBar(Scrollable(self.pile))
|
||||
rightbox = urwid.LineBox(scroll)
|
||||
|
||||
self.service_info = urwid.Text("")
|
||||
widget = ServiceView(self.service_info)
|
||||
#self.node_info = urwid.Text("")
|
||||
#widget = NodeView(self.node_info)
|
||||
|
||||
self.session_info = urwid.Text("")
|
||||
widget2 = SessionView(self.session_info)
|
||||
#self.connect_info = urwid.Text("")
|
||||
#widget2 = ConnectView(self.connect_info)
|
||||
|
||||
self.connect_info = urwid.Text("")
|
||||
widget3 = ConnectView(self.connect_info)
|
||||
#self.slot_info = urwid.Text("")
|
||||
#widget3 = SlotView(self.slot_info)
|
||||
|
||||
self.listbox_content = [widget, widget2, widget3]
|
||||
self.listbox = LeftList(urwid.SimpleListWalker(self.listbox_content))
|
||||
leftbox = urwid.LineBox(self.listbox)
|
||||
self.listbox_content = []
|
||||
self.listwalker = urwid.SimpleListWalker(self.listbox_content)
|
||||
self.list = LeftList(self.listwalker)
|
||||
leftbox = urwid.LineBox(self.list)
|
||||
|
||||
columns = urwid.Columns([leftbox, rightbox], focus_column=0)
|
||||
self.ui = urwid.Frame(urwid.AttrWrap( columns, 'body' ))
|
||||
|
||||
#def update_view(self, loop, data):
|
||||
# data = self.data
|
||||
|
||||
# logging.debug(len(data.nodes))
|
||||
# for name, values in data.nodes.items():
|
||||
# self.node_info = urwid.Text(name)
|
||||
# widget = NodeView(self.node_info)
|
||||
# self.listbox_content.append(widget)
|
||||
|
||||
# #loop.set_alarm_in(2, update_view)
|
||||
# #await asyncio.sleep(0.1)
|
||||
|
||||
async def update_view(self, data):
|
||||
while True:
|
||||
logging.debug(f"update_view() received model: {data}")
|
||||
names = []
|
||||
for item in self.listwalker.contents:
|
||||
name = item.get_name()
|
||||
names.append(name)
|
||||
|
||||
for name, values in data.nodes.items():
|
||||
if name in names:
|
||||
continue
|
||||
|
||||
else:
|
||||
widget = NodeView(name)
|
||||
self.listwalker.contents.append(widget)
|
||||
|
||||
info = values["result"]
|
||||
channels = info["channels"]
|
||||
channel_lookup = {}
|
||||
for channel in channels:
|
||||
id = channel["id"]
|
||||
channel_lookup[id] = channel
|
||||
|
||||
for channel in channels:
|
||||
if channel["session"] != "inbound":
|
||||
continue
|
||||
widget = ConnectView("inbound")
|
||||
self.listwalker.contents.append(widget)
|
||||
|
||||
url = channel["url"]
|
||||
widget = SlotView(url)
|
||||
self.listwalker.contents.append(widget)
|
||||
|
||||
widget = ConnectView(" outbound")
|
||||
self.listwalker.contents.append(widget)
|
||||
for i, id in enumerate(info["outbound_slots"]):
|
||||
if id == 0:
|
||||
widget = SlotView(f" {i}: none")
|
||||
self.listwalker.contents.append(widget)
|
||||
continue
|
||||
|
||||
assert id in channel_lookup
|
||||
url = channel_lookup[id]["url"]
|
||||
widget = SlotView(f" {i}: {url}")
|
||||
self.listwalker.contents.append(widget)
|
||||
|
||||
for channel in channels:
|
||||
if channel["session"] != "seed":
|
||||
continue
|
||||
widget = ConnectView("seed")
|
||||
self.listwalker.contents.append(widget)
|
||||
|
||||
url = channel["url"]
|
||||
widget = SlotView(f" {url}")
|
||||
self.listwalker.contents.append(widget)
|
||||
|
||||
for channel in channels:
|
||||
if channel["session"] != "manual":
|
||||
continue
|
||||
widget = ConnectView("manual")
|
||||
self.listwalker.contents.append(widget)
|
||||
|
||||
url = channel["url"]
|
||||
widget = SlotView(url)
|
||||
self.listwalker.contents.append(widget)
|
||||
|
||||
print(f" {url}")
|
||||
|
||||
await asyncio.sleep(0.1)
|
||||
self.service_info = urwid.Text("")
|
||||
|
||||
|
||||
async def render_info(self, channels):
|
||||
while True:
|
||||
await asyncio.sleep(0.1)
|
||||
self.pile.contents.clear()
|
||||
focus_w = self.listbox.get_focus()
|
||||
match focus_w[0].name():
|
||||
case "ServiceView":
|
||||
case "NodeView":
|
||||
self.pile.contents.append((urwid.Text(f""), self.pile.options()))
|
||||
case "SessionView":
|
||||
self.pile.contents.append((urwid.Text("2"), self.pile.options()))
|
||||
case "ConnectView":
|
||||
self.pile.contents.append((urwid.Text("2"), self.pile.options()))
|
||||
case "SlotView":
|
||||
self.pile.contents.append((urwid.Text("3"), self.pile.options()))
|
||||
|
||||
Reference in New Issue
Block a user