diff --git a/__init__.py b/__init__.py index 6209e9d..438d0f1 100644 --- a/__init__.py +++ b/__init__.py @@ -38,16 +38,35 @@ def castle_start(): from .models import CastleSettings from .tasks import wait_for_account_sync - # Initialize Fava client with default settings - # (Will be re-initialized if admin updates settings) - defaults = CastleSettings() - try: + async def _init_fava(): + """Load saved settings from DB, fall back to defaults.""" + from .crud import db as castle_db + + settings = None + try: + row = await castle_db.fetchone( + "SELECT * FROM extension_settings LIMIT 1", + model=CastleSettings, + ) + if row: + settings = row + logger.info(f"Loaded Castle settings from DB: {settings.fava_url}/{settings.fava_ledger_slug}") + except Exception as e: + logger.warning(f"Could not load settings from DB: {e}") + + if not settings: + settings = CastleSettings() + logger.info(f"Using default Castle settings: {settings.fava_url}/{settings.fava_ledger_slug}") + init_fava_client( - fava_url=defaults.fava_url, - ledger_slug=defaults.fava_ledger_slug, - timeout=defaults.fava_timeout + fava_url=settings.fava_url, + ledger_slug=settings.fava_ledger_slug, + timeout=settings.fava_timeout ) - logger.info(f"Fava client initialized: {defaults.fava_url}/{defaults.fava_ledger_slug}") + logger.info(f"Fava client initialized: {settings.fava_url}/{settings.fava_ledger_slug}") + + try: + asyncio.get_event_loop().create_task(_init_fava()) except Exception as e: logger.error(f"Failed to initialize Fava client: {e}") logger.warning("Castle will not function without Fava. Please configure Fava settings.")