Przeglądaj źródła

Improved email notification provider

maziggy 5 miesięcy temu
rodzic
commit
dbcbde0b16

+ 20 - 28
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."""

+ 7 - 3
frontend/src/components/NotificationProviderCard.tsx

@@ -87,10 +87,10 @@ export function NotificationProviderCard({ provider, onEdit }: NotificationProvi
               </div>
             </div>
 
-            {/* Status indicator */}
-            <div className="flex items-center gap-2">
+            {/* Quick enable/disable toggle + Status indicator */}
+            <div className="flex items-center gap-3">
               {provider.last_success && (
-                <span className="text-xs text-bambu-green">Last sent: {new Date(provider.last_success).toLocaleDateString()}</span>
+                <span className="text-xs text-bambu-green hidden sm:inline">Last: {new Date(provider.last_success).toLocaleDateString()}</span>
               )}
               {/* 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
               ) && (
                 <span className="text-xs text-red-400" title={provider.last_error}>Error</span>
               )}
+              <Toggle
+                checked={provider.enabled}
+                onChange={(checked) => updateMutation.mutate({ enabled: checked })}
+              />
             </div>
           </div>