Verified Commit 86186731 authored by Jakob Moser's avatar Jakob Moser
Browse files

Re-initialize card reader if CardReaderException were thrown

Which currently never happens, but we will change that
parent 06639fce
Loading
Loading
Loading
Loading
+25 −8
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ from threading import Thread
from types import FrameType

from poolpay import db, paths
from poolpay.card.CardReaderException import CardReaderException
from poolpay.card.Pirc522CardReader import Pirc522CardReader
from poolpay.director.Director import Director
from poolpay.display.PygameDisplay import PygameDisplay
@@ -26,6 +27,28 @@ touch_screen = EvdevTouchScreen(Path("/dev/input/event0"))
director = Director(play, display)


def _initialize_card_reader_and_run() -> None:
    logging.info("Initializing Pirc522CardReader")
    with Pirc522CardReader() as card_reader:
        logging.info("Registering card removal handler")
        card_reader.on_card_removed(lambda reader: director.card_removed())

        logging.info("Registering card placement handler and starting to wait")
        card_reader.on_card_placed(
            lambda reader: director.card_placed(reader.read_id())
        )


def _initialize_card_reader_and_run_with_automatic_restart() -> None:
    while True:
        try:
            _initialize_card_reader_and_run()
        except CardReaderException as e:
            logging.error("Card reader errored, reinitialization needed")
            logging.exception(e)
            logging.debug("Proceeding to reinitialize card reader")


def launch_application(password: str | None) -> None:
    if director.started:
        logging.warning(
@@ -40,21 +63,15 @@ def launch_application(password: str | None) -> None:
    else:
        logging.info("No password to open vault was given, so assuming it was already open")

    logging.info("Creating CardReader")
    with open_vault, Pirc522CardReader() as card_reader, touch_screen:
    with open_vault, touch_screen:
        try:
            logging.info("Opening database")
            db.open(paths.db_file)
            logging.info("Starting director")
            director.start()
            logging.info("Registering card removal handler")
            card_reader.on_card_removed(lambda reader: director.card_removed())
            logging.info("Registering touch screen input handler")
            touch_screen.on_screen_touched(director.screen_touched)
            logging.info("Registering card placement handler and starting to wait")
            card_reader.on_card_placed(
                lambda reader: director.card_placed(reader.read_id())
            )
            _initialize_card_reader_and_run_with_automatic_restart()
        except Exception as e:
            logging.exception(e)
            raise e
+2 −0
Original line number Diff line number Diff line
class CardReaderException(Exception):
    pass