fix docker, add tabs

This commit is contained in:
byte-diver 2025-02-07 00:10:44 +01:00
parent 7ced4c3659
commit d9886980fa
2 changed files with 84 additions and 39 deletions

View File

@ -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 . .

View File

@ -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