diff --git a/lnbits/app.py b/lnbits/app.py index b0289b93..a37a5443 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -96,6 +96,10 @@ def register_routes(app: FastAPI) -> None: ext_module = importlib.import_module(f"lnbits.extensions.{ext.code}") ext_route = getattr(ext_module, f"{ext.code}_ext") + if hasattr(ext_module, f"{ext.code}_start"): + ext_start_func = getattr(ext_module, f"{ext.code}_start") + ext_start_func() + if hasattr(ext_module, f"{ext.code}_static_files"): ext_statics = getattr(ext_module, f"{ext.code}_static_files") for s in ext_statics: diff --git a/lnbits/extensions/lnticket/__init__.py b/lnbits/extensions/lnticket/__init__.py index 0a872e8c..9394a1c9 100644 --- a/lnbits/extensions/lnticket/__init__.py +++ b/lnbits/extensions/lnticket/__init__.py @@ -1,7 +1,10 @@ +import asyncio + from fastapi import APIRouter from lnbits.db import Database from lnbits.helpers import template_renderer +from lnbits.tasks import catch_everything_and_restart db = Database("ext_lnticket") @@ -21,9 +24,10 @@ def lnticket_renderer(): from .views_api import * # noqa from .views import * # noqa -from .tasks import register_listeners +from .tasks import wait_for_paid_invoices + + +def lnticket_start(): + loop = asyncio.get_event_loop() + loop.create_task(catch_everything_and_restart(wait_for_paid_invoices)) -@lnticket_ext.on_event("startup") -def _do_it(): - # FIXME: isn't called yet - register_listeners() diff --git a/lnbits/extensions/lnticket/tasks.py b/lnbits/extensions/lnticket/tasks.py index d08d74c9..89e5ebf5 100644 --- a/lnbits/extensions/lnticket/tasks.py +++ b/lnbits/extensions/lnticket/tasks.py @@ -6,16 +6,12 @@ from lnbits.tasks import register_invoice_listener from .crud import get_ticket, set_ticket_paid -async def register_listeners(): - send_queue = asyncio.Queue() - recv_queue = asyncio.Queue() - register_invoice_listener(send_queue) - await wait_for_paid_invoices(recv_queue) +async def wait_for_paid_invoices(): + invoice_queue = asyncio.Queue() + register_invoice_listener(invoice_queue) - -async def wait_for_paid_invoices(invoice_paid_queue: asyncio.Queue): while True: - payment = await invoice_paid_queue.get() + payment = await invoice_queue.get() await on_invoice_paid(payment)