Starta på TUI

This commit is contained in:
Trygve 2023-09-10 22:39:21 +02:00
parent bc611e91e9
commit 60824e5bd3
1 changed files with 116 additions and 42 deletions

View File

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