Initial commit
This commit is contained in:
commit
184b0e6033
18 changed files with 1178 additions and 0 deletions
69
full_updater/ui/sidebar.py
Normal file
69
full_updater/ui/sidebar.py
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
from textual.widgets import Static, ListView, ListItem, Label
|
||||
from textual.containers import Vertical
|
||||
from textual.message import Message
|
||||
|
||||
|
||||
class Sidebar(Vertical):
|
||||
DEFAULT_CSS = """
|
||||
Sidebar {
|
||||
width: 28;
|
||||
border-right: solid $primary-lighten-2;
|
||||
padding: 0 1;
|
||||
}
|
||||
ListView {
|
||||
height: 1fr;
|
||||
border: none;
|
||||
}
|
||||
ListView > ListItem {
|
||||
height: auto;
|
||||
padding: 0 1;
|
||||
}
|
||||
ListView > ListItem.--highlight {
|
||||
background: $primary-darken-1;
|
||||
}
|
||||
"""
|
||||
|
||||
class TargetSelected(Message):
|
||||
def __init__(self, target_id: str, name: str):
|
||||
self.target_id = target_id
|
||||
self.name = name
|
||||
super().__init__()
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self._items: list[tuple[str, str, ListItem]] = []
|
||||
|
||||
def compose(self):
|
||||
yield Static("Targets", id="sidebar-title")
|
||||
yield ListView(id="sidebar-list")
|
||||
|
||||
def set_targets(self, targets: list):
|
||||
lv = self.query_one("#sidebar-list", ListView)
|
||||
lv.clear()
|
||||
self._items = []
|
||||
for t in targets:
|
||||
label = f"{t.name} 🟠 🟠"
|
||||
item = ListItem(Label(label), id=f"target-{t.target_id}")
|
||||
lv.append(item)
|
||||
self._items.append((t.target_id, t.name, item))
|
||||
|
||||
def update_status(self, target_id: str, apt_ok: bool, cve_ok: bool, apt_count: int, cve_count: int, error: str, skipped: bool = False):
|
||||
for tid, name, item in self._items:
|
||||
if tid == target_id:
|
||||
if skipped:
|
||||
label = f"{name} ⚪ ⚪"
|
||||
elif error:
|
||||
label = f"{name} 🔴 🔴"
|
||||
elif apt_count > 0 or cve_count > 0:
|
||||
label = f"{name} {'🔴' if apt_count > 0 else '🟢'} {'🔴' if cve_count > 0 else '🟢'}"
|
||||
else:
|
||||
label = f"{name} 🟢 🟢"
|
||||
item.children[0].update(label)
|
||||
break
|
||||
|
||||
def on_list_view_selected(self, event: ListView.Selected):
|
||||
item = event.item
|
||||
for tid, name, it in self._items:
|
||||
if it == item:
|
||||
self.post_message(self.TargetSelected(tid, name))
|
||||
break
|
||||
Loading…
Add table
Add a link
Reference in a new issue