Improved email notification provider

This commit is contained in:
maziggy
2025-12-10 19:12:49 +01:00
parent 9cdce0d603
commit dbcbde0b16
2 changed files with 27 additions and 31 deletions
+20 -28
View File
@@ -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."""
@@ -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>