From dbcbde0b16731b8809f97ca23fab5f5944af234a Mon Sep 17 00:00:00 2001 From: maziggy Date: Wed, 10 Dec 2025 19:12:49 +0100 Subject: [PATCH] Improved email notification provider --- backend/app/main.py | 48 ++++++++----------- .../components/NotificationProviderCard.tsx | 10 ++-- 2 files changed, 27 insertions(+), 31 deletions(-) diff --git a/backend/app/main.py b/backend/app/main.py index 778557654..0506978f9 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -304,6 +304,26 @@ async def on_print_start(printer_id: int, data: dict): await ws_manager.send_print_start(printer_id, data) + # Send print start notifications FIRST (before any early returns) + try: + async with async_session() as db: + from backend.app.models.printer import Printer + result = await db.execute( + select(Printer).where(Printer.id == printer_id) + ) + printer = result.scalar_one_or_none() + printer_name = printer.name if printer else f"Printer {printer_id}" + await notification_service.on_print_start(printer_id, printer_name, data, db) + except Exception as e: + logger.warning(f"Notification on_print_start failed: {e}") + + # Smart plug automation: turn on plug when print starts + try: + async with async_session() as db: + await smart_plug_manager.on_print_start(printer_id, db) + except Exception as e: + logger.warning(f"Smart plug on_print_start failed: {e}") + async with async_session() as db: from backend.app.models.printer import Printer from backend.app.services.bambu_ftp import list_files_async @@ -396,12 +416,6 @@ async def on_print_start(printer_id: int, data: dict): "status": "printing", }) - # Smart plug automation for expected prints too - try: - await smart_plug_manager.on_print_start(printer_id, db) - except Exception as e: - logger.warning(f"Smart plug on_print_start failed: {e}") - return # Skip creating a new archive # Check if there's already a "printing" archive for this printer/file @@ -580,28 +594,6 @@ async def on_print_start(printer_id: int, data: dict): if temp_path and temp_path.exists(): temp_path.unlink() - # Smart plug automation: turn on plug when print starts - try: - async with async_session() as db: - await smart_plug_manager.on_print_start(printer_id, db) - except Exception as e: - import logging - logging.getLogger(__name__).warning(f"Smart plug on_print_start failed: {e}") - - # Send print start notifications - try: - async with async_session() as db: - from backend.app.models.printer import Printer - result = await db.execute( - select(Printer).where(Printer.id == printer_id) - ) - printer = result.scalar_one_or_none() - printer_name = printer.name if printer else f"Printer {printer_id}" - await notification_service.on_print_start(printer_id, printer_name, data, db) - except Exception as e: - import logging - logging.getLogger(__name__).warning(f"Notification on_print_start failed: {e}") - async def on_print_complete(printer_id: int, data: dict): """Handle print completion - update the archive status.""" diff --git a/frontend/src/components/NotificationProviderCard.tsx b/frontend/src/components/NotificationProviderCard.tsx index 509daa1ea..cadfc3798 100644 --- a/frontend/src/components/NotificationProviderCard.tsx +++ b/frontend/src/components/NotificationProviderCard.tsx @@ -87,10 +87,10 @@ export function NotificationProviderCard({ provider, onEdit }: NotificationProvi - {/* Status indicator */} -
+ {/* Quick enable/disable toggle + Status indicator */} +
{provider.last_success && ( - Last sent: {new Date(provider.last_success).toLocaleDateString()} + Last: {new Date(provider.last_success).toLocaleDateString()} )} {/* Only show error if it's more recent than last success */} {provider.last_error && provider.last_error_at && ( @@ -98,6 +98,10 @@ export function NotificationProviderCard({ provider, onEdit }: NotificationProvi ) && ( Error )} + updateMutation.mutate({ enabled: checked })} + />