mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-10-17 19:36:28 +02:00
Sync
This commit is contained in:
@@ -340,47 +340,55 @@ async def restore_backup(
|
||||
if not backup_db.exists():
|
||||
raise HTTPException(400, "Invalid backup: missing bambuddy.db")
|
||||
|
||||
# 3. Stop virtual printer if running (releases file locks)
|
||||
vp_was_enabled = virtual_printer_manager.is_enabled
|
||||
if vp_was_enabled:
|
||||
await virtual_printer_manager.configure(enabled=False)
|
||||
|
||||
# 4. Close current database connections
|
||||
await close_all_connections()
|
||||
|
||||
# 5. Replace database
|
||||
shutil.copy2(backup_db, db_path)
|
||||
|
||||
# 6. Replace data directories
|
||||
dirs_to_restore = [
|
||||
("archive", base_dir / "archive"),
|
||||
("virtual_printer", base_dir / "virtual_printer"),
|
||||
("plate_calibration", app_settings.plate_calibration_dir),
|
||||
("icons", base_dir / "icons"),
|
||||
("projects", base_dir / "projects"),
|
||||
]
|
||||
|
||||
for name, dest_dir in dirs_to_restore:
|
||||
src_dir = temp_path / name
|
||||
if src_dir.exists():
|
||||
if dest_dir.exists():
|
||||
shutil.rmtree(dest_dir)
|
||||
shutil.copytree(src_dir, dest_dir)
|
||||
|
||||
# 7. Restart virtual printer if it was running before
|
||||
if vp_was_enabled:
|
||||
try:
|
||||
# 3. Stop virtual printer if running (releases file locks)
|
||||
try:
|
||||
await virtual_printer_manager.configure(enabled=True)
|
||||
if virtual_printer_manager.is_enabled:
|
||||
logger.info("Stopping virtual printer for restore...")
|
||||
await virtual_printer_manager.configure(enabled=False)
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to restart virtual printer after restore: {e}")
|
||||
logger.warning(f"Failed to stop virtual printer: {e}")
|
||||
|
||||
# 8. Note: Database connection will be reinitialized on restart
|
||||
# The application should be restarted after restore
|
||||
# 4. Close current database connections
|
||||
logger.info("Closing database connections...")
|
||||
await close_all_connections()
|
||||
|
||||
return {
|
||||
"success": True,
|
||||
"message": "Backup restored successfully. Please restart Bambuddy for changes to take effect.",
|
||||
}
|
||||
# 5. Replace database
|
||||
logger.info("Restoring database from backup...")
|
||||
shutil.copy2(backup_db, db_path)
|
||||
|
||||
# 6. Replace data directories
|
||||
dirs_to_restore = [
|
||||
("archive", base_dir / "archive"),
|
||||
("virtual_printer", base_dir / "virtual_printer"),
|
||||
("plate_calibration", app_settings.plate_calibration_dir),
|
||||
("icons", base_dir / "icons"),
|
||||
("projects", base_dir / "projects"),
|
||||
]
|
||||
|
||||
for name, dest_dir in dirs_to_restore:
|
||||
src_dir = temp_path / name
|
||||
if src_dir.exists():
|
||||
logger.info(f"Restoring {name} directory...")
|
||||
if dest_dir.exists():
|
||||
shutil.rmtree(dest_dir)
|
||||
shutil.copytree(src_dir, dest_dir)
|
||||
|
||||
# 7. Note: Virtual printer and database will be reinitialized on restart
|
||||
# Do NOT try to restart services here - the database session is closed
|
||||
|
||||
logger.info("Restore complete - restart required")
|
||||
return {
|
||||
"success": True,
|
||||
"message": "Backup restored successfully. Please restart Bambuddy for changes to take effect.",
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Restore failed: {e}")
|
||||
return JSONResponse(
|
||||
status_code=500,
|
||||
content={"success": False, "message": f"Restore failed: {str(e)}"},
|
||||
)
|
||||
|
||||
|
||||
@router.get("/virtual-printer/models")
|
||||
|
||||
@@ -2253,7 +2253,7 @@ export default {
|
||||
restoreSuccess: 'Sicherung erfolgreich wiederhergestellt',
|
||||
backupFailed: 'Sicherung fehlgeschlagen',
|
||||
restoreFailed: 'Wiederherstellung fehlgeschlagen',
|
||||
restoreNote: 'Virtueller Drucker wird nach der Wiederherstellung neu gestartet',
|
||||
restoreNote: 'Virtueller Drucker wird während der Wiederherstellung gestoppt',
|
||||
},
|
||||
|
||||
// Tags
|
||||
|
||||
@@ -2253,7 +2253,7 @@ export default {
|
||||
restoreSuccess: 'Backup restored successfully',
|
||||
backupFailed: 'Backup failed',
|
||||
restoreFailed: 'Restore failed',
|
||||
restoreNote: 'Virtual Printer will be restarted after restore',
|
||||
restoreNote: 'Virtual Printer will be stopped during restore',
|
||||
},
|
||||
|
||||
// Tags
|
||||
|
||||
@@ -1786,7 +1786,7 @@ export default {
|
||||
apiKeysDescription: 'Webhook APIキー(インポート時に新しいキーが生成されます)',
|
||||
restoreBackup: 'バックアップの復元',
|
||||
restoreDescription: 'バックアップファイルからすべてのデータを置き換える',
|
||||
restoreNote: '復元後、仮想プリンターが再起動されます',
|
||||
restoreNote: '復元中、仮想プリンターは停止されます',
|
||||
},
|
||||
|
||||
// Restore modal
|
||||
|
||||
File diff suppressed because one or more lines are too long
+1
-1
@@ -23,7 +23,7 @@
|
||||
|
||||
<!-- Splash screens for iOS -->
|
||||
<link rel="apple-touch-startup-image" href="/img/android-chrome-512x512.png" />
|
||||
<script type="module" crossorigin src="/assets/index-D8xEJ4tS.js"></script>
|
||||
<script type="module" crossorigin src="/assets/index-CKG31ANB.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-DME4t7XG.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
Reference in New Issue
Block a user