mirror of
https://github.com/markqvist/NomadNet.git
synced 2025-02-23 08:29:58 -05:00
fix docker, add tabs
This commit is contained in:
parent
7ced4c3659
commit
d9886980fa
@ -16,10 +16,6 @@ ENV PATH="/home/myuser/.local/bin:${PATH}"
|
|||||||
|
|
||||||
################### BEGIN NomadNet ###########################################
|
################### BEGIN NomadNet ###########################################
|
||||||
|
|
||||||
COPY --chown=myuser:myuser requirements.txt requirements.txt
|
|
||||||
|
|
||||||
RUN pip install --user -r requirements.txt
|
|
||||||
|
|
||||||
|
|
||||||
COPY --chown=myuser:myuser . .
|
COPY --chown=myuser:myuser . .
|
||||||
|
|
||||||
|
@ -368,6 +368,10 @@ class AnnounceStreamEntry(urwid.WidgetWrap):
|
|||||||
def timestamp(self):
|
def timestamp(self):
|
||||||
return self.timestamp
|
return self.timestamp
|
||||||
|
|
||||||
|
class TabButton(urwid.Button):
|
||||||
|
button_left = urwid.Text("[")
|
||||||
|
button_right = urwid.Text("]")
|
||||||
|
|
||||||
class AnnounceStream(urwid.WidgetWrap):
|
class AnnounceStream(urwid.WidgetWrap):
|
||||||
def __init__(self, app, parent):
|
def __init__(self, app, parent):
|
||||||
self.app = app
|
self.app = app
|
||||||
@ -376,11 +380,24 @@ class AnnounceStream(urwid.WidgetWrap):
|
|||||||
self.timeout = self.app.config["textui"]["animation_interval"]*2
|
self.timeout = self.app.config["textui"]["animation_interval"]*2
|
||||||
self.ilb = None
|
self.ilb = None
|
||||||
self.no_content = True
|
self.no_content = True
|
||||||
|
self.current_tab = "nodes"
|
||||||
|
|
||||||
self.added_entries = []
|
self.added_entries = []
|
||||||
self.widget_list = []
|
self.widget_list = []
|
||||||
self.update_widget_list()
|
self.update_widget_list()
|
||||||
|
|
||||||
|
# Create tab buttons
|
||||||
|
self.tab_nodes = urwid.AttrMap(TabButton("Nodes", on_press=self.show_nodes_tab), "tab_active")
|
||||||
|
self.tab_peers = urwid.AttrMap(TabButton("Peers", on_press=self.show_peers_tab), "tab_inactive")
|
||||||
|
self.tab_pn = urwid.AttrMap(TabButton("LXMF Propagation Nodes", on_press=self.show_pn_tab), "tab_inactive")
|
||||||
|
|
||||||
|
# Create tab bar with proportional widths
|
||||||
|
self.tab_bar = urwid.Columns([
|
||||||
|
('weight', 1, self.tab_nodes),
|
||||||
|
('weight', 1, self.tab_peers),
|
||||||
|
('weight', 3, self.tab_pn),
|
||||||
|
], dividechars=1) # Add 1 character spacing between tabs
|
||||||
|
|
||||||
self.ilb = ExceptionHandlingListBox(
|
self.ilb = ExceptionHandlingListBox(
|
||||||
self.widget_list,
|
self.widget_list,
|
||||||
on_selection_change=self.list_selection,
|
on_selection_change=self.list_selection,
|
||||||
@ -389,7 +406,13 @@ class AnnounceStream(urwid.WidgetWrap):
|
|||||||
#highlight_offFocus="list_off_focus"
|
#highlight_offFocus="list_off_focus"
|
||||||
)
|
)
|
||||||
|
|
||||||
self.display_widget = self.ilb
|
# Combine tab bar and list box
|
||||||
|
self.pile = urwid.Pile([
|
||||||
|
('pack', self.tab_bar),
|
||||||
|
('weight', 1, self.ilb),
|
||||||
|
])
|
||||||
|
|
||||||
|
self.display_widget = self.pile
|
||||||
super().__init__(urwid.LineBox(self.display_widget, title="Announce Stream"))
|
super().__init__(urwid.LineBox(self.display_widget, title="Announce Stream"))
|
||||||
|
|
||||||
def keypress(self, size, key):
|
def keypress(self, size, key):
|
||||||
@ -412,28 +435,54 @@ class AnnounceStream(urwid.WidgetWrap):
|
|||||||
self.update_widget_list()
|
self.update_widget_list()
|
||||||
|
|
||||||
def update_widget_list(self):
|
def update_widget_list(self):
|
||||||
|
self.widget_list = []
|
||||||
new_entries = []
|
new_entries = []
|
||||||
for e in self.app.directory.announce_stream:
|
|
||||||
if not e[0] in self.added_entries:
|
|
||||||
self.added_entries.insert(0, e[0])
|
|
||||||
new_entries.insert(0, e)
|
|
||||||
|
|
||||||
for e in new_entries:
|
for e in self.app.directory.announce_stream:
|
||||||
|
announce_type = e[3]
|
||||||
|
|
||||||
|
# Filter based on current tab
|
||||||
|
if self.current_tab == "nodes" and (announce_type == "node" or announce_type == True):
|
||||||
|
new_entries.append(e)
|
||||||
|
elif self.current_tab == "peers" and (announce_type == "peer" or announce_type == False):
|
||||||
|
new_entries.append(e)
|
||||||
|
elif self.current_tab == "pn" and announce_type == "pn":
|
||||||
|
new_entries.append(e)
|
||||||
|
|
||||||
|
for e in reversed(new_entries):
|
||||||
nw = AnnounceStreamEntry(self.app, e, self)
|
nw = AnnounceStreamEntry(self.app, e, self)
|
||||||
nw.timestamp = e[0]
|
nw.timestamp = e[0]
|
||||||
self.widget_list.insert(0, nw)
|
self.widget_list.append(nw)
|
||||||
|
|
||||||
if len(new_entries) > 0:
|
if len(new_entries) > 0:
|
||||||
self.no_content = False
|
self.no_content = False
|
||||||
if self.ilb != None:
|
|
||||||
self.ilb.set_body(self.widget_list)
|
|
||||||
else:
|
else:
|
||||||
if len(self.widget_list) == 0:
|
self.no_content = True
|
||||||
self.no_content = True
|
self.widget_list = [urwid.Text(f"No {self.current_tab} announces", align='center')]
|
||||||
|
|
||||||
if self.ilb != None:
|
if self.ilb:
|
||||||
self.ilb.set_body(self.widget_list)
|
self.ilb.set_body(self.widget_list)
|
||||||
|
|
||||||
|
def show_nodes_tab(self, button):
|
||||||
|
self.current_tab = "nodes"
|
||||||
|
self.tab_nodes.set_attr_map({None: "tab_active"})
|
||||||
|
self.tab_peers.set_attr_map({None: "tab_inactive"})
|
||||||
|
self.tab_pn.set_attr_map({None: "tab_inactive"})
|
||||||
|
self.update_widget_list()
|
||||||
|
|
||||||
|
def show_peers_tab(self, button):
|
||||||
|
self.current_tab = "peers"
|
||||||
|
self.tab_nodes.set_attr_map({None: "tab_inactive"})
|
||||||
|
self.tab_peers.set_attr_map({None: "tab_active"})
|
||||||
|
self.tab_pn.set_attr_map({None: "tab_inactive"})
|
||||||
|
self.update_widget_list()
|
||||||
|
|
||||||
|
def show_pn_tab(self, button):
|
||||||
|
self.current_tab = "pn"
|
||||||
|
self.tab_nodes.set_attr_map({None: "tab_inactive"})
|
||||||
|
self.tab_peers.set_attr_map({None: "tab_inactive"})
|
||||||
|
self.tab_pn.set_attr_map({None: "tab_active"})
|
||||||
|
self.update_widget_list()
|
||||||
|
|
||||||
def list_selection(self, arg1, arg2):
|
def list_selection(self, arg1, arg2):
|
||||||
pass
|
pass
|
||||||
|
Loading…
x
Reference in New Issue
Block a user