From 60824e5bd343a763ea21105c17605a893a8ab7a7 Mon Sep 17 00:00:00 2001 From: Trygve Date: Sun, 10 Sep 2023 22:39:21 +0200 Subject: [PATCH] =?UTF-8?q?Starta=20p=C3=A5=20TUI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- event_mgr.py | 158 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 116 insertions(+), 42 deletions(-) diff --git a/event_mgr.py b/event_mgr.py index 707af9e..38e1606 100644 --- a/event_mgr.py +++ b/event_mgr.py @@ -14,55 +14,129 @@ from rich.columns import Columns from rich.table import Table from rich.panel import Panel from rich.console import Group +from rich.syntax import Syntax +from rich.table import Table +from time import monotonic +from textual.app import App, ComposeResult +from textual.containers import ScrollableContainer, Horizontal, Vertical +from textual.reactive import reactive +from textual.widgets import Button, Footer, Header, Static, RichLog, DataTable, Label +class RunnerTable(Static): + def compose(self) -> ComposeResult: + yield DataTable(id="runnertable") + + def RowSelected(self, data_table, cursor_row, row_key) -> None: + name = self.query_one("#inspname") + name.update(renderable='test') + ecard_log = app.query_one("#ecardlog") + ecard_log.write('aaaaaaaaaaaaaaaaa') + +class RunnerInsp(Static): + def compose(self) -> ComposeResult: + yield Static("NAVN", id="inspname") + yield Label("RESULTAT", id="inspresult") + yield Label("POSTER", id="inspcontr") +class EcardLog(Static): + def compose(self) -> ComposeResult: + yield RichLog(highlight=True, markup=True, id="ecardlog") -def run_otime(): - event = otime.Event.from_toml(open("/home/trygve/Prosjekter/otime-testing/sc3/sc3.toml", "rb")) - event.import_ttime_db(open("/home/trygve/Prosjekter/otime-testing/sc3/db.csv")) +class MTRDash(Static): + def compose(self) -> ComposeResult: + yield Label("MTR") - data = (open("/home/trygve/Prosjekter/otime-testing/sc3/mtr.json")).readlines() - for l in data: - d = json.loads(l) - #print(l) - event.card_dumps.append(otime.CardDump(d['card'], d['controls'], d['splits'], - datetime.datetime.fromisoformat(d['read_time']), - datetime.datetime.fromisoformat(d['s_time']), - datetime.datetime.fromisoformat(d['f_time']))) - print('Ecards:'+str(len(event.card_dumps))) - print('Løpere:'+str(len(event.runners))) - event.match_all() - #cli.print_runners(event.runners) - for n in event.o_classes: - cli.print_class_result(event.runners, n) +class TimeApp(App): + CSS_PATH = "event_mgr.tcss" + BINDINGS = [("d", "toggle_dark", "Toggle dark mode"), ("r", "rerun", "Rerun")] -def read_mtr(mtr): - global event - if mtr.in_waiting > 0: - mtr.read_until(expected=b'\xFF\xFF\xFF\xFF') - size = mtr.read(size=1) - if size == b'\xe6': - meat = mtr.read(229) - full = b'\xFF\xFF\xFF\xFF' + size + meat - card_r = otime.CardDump.from_mtr_bytes(full) - print(json.dumps(card_r.asdict())) - with open("sc3/mtr.json", "a") as myfile: - myfile.write('\n' + json.dumps(card_r.asdict())) - run_otime() + def compose(self) -> ComposeResult: + """Create child widgets for the app.""" + yield Header() + yield Footer() + yield RunnerTable(classes="box") + yield RunnerInsp(classes="box") + yield EcardLog(classes="box") + yield MTRDash(classes="box") - elif size == b'\x37': - meat = mtr.read(55) - status = mtrreader.MtrStatusMessage(meat) - inspect(status) - print(status.year(),status.month(),status.day(),status.hours(),status.minutes()) + def on_ready(self) -> None: + mtr = serial.Serial(port="/dev/pts/2", baudrate=9600, timeout=40) + ecard_log = self.query_one("#ecardlog") + ecard_log.write("[bold magenta]Write text or any Rich renderable!") + #self.run_worker(self.watch_serial()) + self.render_table() + self.read_mtr() + + def action_toggle_dark(self) -> None: + """An action to toggle dark mode.""" + self.dark = not self.dark + def action_rerun(self) -> None: + """Rerun otime""" + self.run_otime() + + def read_mtr(app): + mtr = serial.Serial(port="/dev/pts/2", baudrate=9600, timeout=40) + # mtr.write(b'/SA') + global event + if mtr.in_waiting > 0: + mtr.read_until(expected=b'\xFF\xFF\xFF\xFF') + size = mtr.read(size=1) + if size == b'\xe6': + meat = mtr.read(229) + full = b'\xFF\xFF\xFF\xFF' + size + meat + card_r = otime.CardDump.from_mtr_bytes(full) + ecard_log.write(json.dumps(card_r.asdict())) + with open("sc3/mtr.json", "a") as myfile: + myfile.write('\n' + json.dumps(card_r.asdict())) + run_otime() + + elif size == b'\x37': + meat = mtr.read(55) + status = mtrreader.MtrStatusMessage(meat) + inspect(status) + ecard_log.write(status.year(),status.month(),status.day(),status.hours(),status.minutes()) + + def run_otime(app): + ecard_log = app.query_one("#ecardlog") + event = otime.Event.from_toml(open("/home/trygve/Prosjekter/otime-testing/sc3/sc3.toml", "rb")) + event.import_ttime_db(open("/home/trygve/Prosjekter/otime-testing/sc3/db.csv")) + + data = (open("/home/trygve/Prosjekter/otime-testing/sc3/mtr.json")).readlines() + for l in data: + d = json.loads(l) + ecard_log.write(l) + event.card_dumps.append(otime.CardDump(d['card'], d['controls'], d['splits'], + datetime.datetime.fromisoformat(d['read_time']), + datetime.datetime.fromisoformat(d['s_time']), + datetime.datetime.fromisoformat(d['f_time']))) + #ecard_log.write('Ecards:'+str(len(event.card_dumps))) + #ecard_log.write('Løpere:'+str(len(event.runners))) + event.match_all() + #cli.print_runners(event.runners) + #for n in event.o_classes: + #cli.print_class_result(event.runners, n) + return event + + def render_table(app): + table = app.query_one("#runnertable") + table.cursor_type = "row" + table.add_column("Name") + table.add_column("Status") + table.add_column("club") + table.add_column("card") + table.add_column("class") + table.add_column("start_time") + table.add_column("fork") + + for i in app.run_otime().runners: + try: + o_class = i.o_class.name + except: + o_class = '' + table.add_row(i.fullname(), i.status(), i.club ,str(i.card), o_class, i.start_time, str(i.fork)) -def main(): - mtr = serial.Serial(port="/dev/pts/2", baudrate=9600, timeout=40) - # mtr.write(b'/SA') - while True: - read_mtr(mtr) - sleep(0.1) db_file_u = None if __name__ == "__main__": - main() + app = TimeApp() + app.run()