From 2221f5b39d81c45d42e15affe7672e9d6fc96240 Mon Sep 17 00:00:00 2001 From: Martin Quarda Date: Fri, 28 Mar 2025 10:41:17 +0100 Subject: [PATCH] more autonomous --- SW/PC/Stopwatch/registrace.py | 89 ++++++++++++++++++++--------------- SW/PC/Stopwatch/registrace.ui | 23 ++------- 2 files changed, 54 insertions(+), 58 deletions(-) diff --git a/SW/PC/Stopwatch/registrace.py b/SW/PC/Stopwatch/registrace.py index b758318..8dd75cb 100644 --- a/SW/PC/Stopwatch/registrace.py +++ b/SW/PC/Stopwatch/registrace.py @@ -45,9 +45,9 @@ def register_racer(): index = window.racers.currentIndex() racer_id = int(index.data().split(' ')[-1]) try: - starting_number = int(window.starting_number.text()) - except Exception: - raise + starting_number = max(filter(lambda r: r['starting_number'], racers), key=lambda racer: racer['starting_number'])['starting_number'] + 1 + except ValueError: + starting_number = 1 response = session.post(config['host'] + '/api/card/register', json={'racer_id': racer_id, 'starting_number': starting_number, 'card_id': card_id}) if response.status_code == 400: @@ -55,50 +55,21 @@ def register_racer(): mb.exec() return if response.status_code != 200: - mb = QtWidgets.QMessageBox(text="Neznámá chyba!") + mb = QtWidgets.QMessageBox(text=f"Neznámá chyba! {response.status_code} {response.content}") mb.exec() return racer = list(filter(lambda x: x['racer_id'] == racer_id, racers))[0] racer['card_id'] = card_id racer['starting_number'] = starting_number + racer['started'] = False updateRacers() - mb = QtWidgets.QMessageBox(text="Úspěšné zaregistrování závodníka!") + mb = QtWidgets.QMessageBox(text=f"Úspěšné zaregistrování závodníka se startovním číslem {starting_number}!") mb.exec() -def unregister_racer(): - card_id = last_card - time = last_time - - response = session.post(config['host'] + '/api/station/register', json={'card_id': card_id, 'time': time.strftime('%d.%m.%Y %H:%M:%S.%f'), 'station_id': config['station_id']}) - if response != 200: - mb = QtWidgets.QMessageBox(text="Selhalo zapsání na Stanici!") - mb.exec() - return - - racer = list(filter(lambda x: x['card_id'] == card_id, racers))[0] - starting_number = racer['starting_number'] - racer_id = racer['racer_id'] - racer['card_id'] = None - - response = session.post(config['host'] + '/api/card/unregister', json={'racer_id': racer_id, 'starting_number': starting_number, 'card_id': card_id}) - - if response.status_code != 200: - mb = QtWidgets.QMessageBox(text="Registrace na stanici proběhla úspěšně, ale karta nebyla odhlášena!") - mb.exec() - return - - json = response.json() - - mb = QtWidgets.QMessageBox(text=f"Úspěšné odhlášení závodníka! Finální čas je: {json['time']}") - mb.exec() - - - window = uic.loadUi("registrace.ui") window.register_racer.clicked.connect(register_racer) -window.unregister_racer.clicked.connect(unregister_racer) window.show() @@ -117,8 +88,50 @@ def updateRacers(): updateRacers() +def findByCard(card_id): + for racer in racers: + if racer['card_id'] == card_id: + return racer + + def updateLastCard(card_id): window.lastCard.setText(str(card_id)) + time = last_time + + racer = findByCard(card_id) + if racer: + if racer['started']: + response = session.post(config['host'] + '/api/station/register', json={'card_id': card_id, 'time': time.strftime('%d.%m.%Y %H:%M:%S.%f'), 'station_id': 6}) + if response != 200: + mb = QtWidgets.QMessageBox(text="Selhalo zapsání na Stanici!") + mb.exec() + return + + racer = list(filter(lambda x: x['card_id'] == card_id, racers))[0] + starting_number = racer['starting_number'] + racer_id = racer['racer_id'] + racer['card_id'] = None + + response = session.post(config['host'] + '/api/card/unregister', json={'racer_id': racer_id, 'starting_number': starting_number, 'card_id': card_id}) + + if response.status_code != 200: + mb = QtWidgets.QMessageBox(text="Registrace na stanici proběhla úspěšně, ale karta nebyla odhlášena!") + mb.exec() + return + + json = response.json() + + mb = QtWidgets.QMessageBox(text=f"Úspěšné odhlášení závodníka! Finální čas je: {json['time']}") + mb.exec() + else: + response = session.post(config['host'] + '/api/station/register', json={'card_id': card_id, 'time': last_time.strftime('%d.%m.%Y %H:%M:%S.%f'), 'station_id': 1}) + if response.status_code != 200: + mb = QtWidgets.QMessageBox(text="Nastala nějaká chyba na serveru!") + mb.exec() + return + mb = QtWidgets.QMessageBox(text=f"Úspěšné odstartování závodníka {racer['starting_number']}!") + mb.exec() + racer['started'] = True class UsbCardReader(): @@ -153,10 +166,10 @@ class UsbCardReader(): receivedNumber = 10 * receivedNumber + receivedDigit if (( control[0] == 0 )) & (( control[2] == 40 )) & (( not receivedNumber == 0 )): - updateLastCard(receivedNumber) - if last_card != receivedNumber: + if last_card != receivedNumber or datetime.datetime.now() - last_time > datetime.timedelta(seconds=10): + updateLastCard(receivedNumber) last_time = datetime.datetime.now() - last_card = receivedNumber + last_card = receivedNumber receivedNumber = 0 except KeyboardInterrupt: diff --git a/SW/PC/Stopwatch/registrace.ui b/SW/PC/Stopwatch/registrace.ui index 190b48a..f85230e 100644 --- a/SW/PC/Stopwatch/registrace.ui +++ b/SW/PC/Stopwatch/registrace.ui @@ -14,9 +14,6 @@ Registrace závodníků - - - @@ -24,31 +21,17 @@ - - - - Dokončit - - - - + - - - startovní číslo - - - - číslo karty - + Qt::Vertical @@ -61,7 +44,7 @@ - +