maziggy 3 maanden geleden
bovenliggende
commit
89b19cbe4f

+ 46 - 38
backend/app/api/routes/settings.py

@@ -340,47 +340,55 @@ async def restore_backup(
         if not backup_db.exists():
         if not backup_db.exists():
             raise HTTPException(400, "Invalid backup: missing bambuddy.db")
             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:
             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:
             except Exception as e:
-                logger.warning(f"Failed to restart virtual printer after restore: {e}")
-
-        # 8. Note: Database connection will be reinitialized on restart
-        # The application should be restarted after restore
+                logger.warning(f"Failed to stop virtual printer: {e}")
+
+            # 4. Close current database connections
+            logger.info("Closing database connections...")
+            await close_all_connections()
+
+            # 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.",
+            }
 
 
-        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")
 @router.get("/virtual-printer/models")

+ 1 - 1
frontend/src/i18n/locales/de.ts

@@ -2253,7 +2253,7 @@ export default {
     restoreSuccess: 'Sicherung erfolgreich wiederhergestellt',
     restoreSuccess: 'Sicherung erfolgreich wiederhergestellt',
     backupFailed: 'Sicherung fehlgeschlagen',
     backupFailed: 'Sicherung fehlgeschlagen',
     restoreFailed: 'Wiederherstellung fehlgeschlagen',
     restoreFailed: 'Wiederherstellung fehlgeschlagen',
-    restoreNote: 'Virtueller Drucker wird nach der Wiederherstellung neu gestartet',
+    restoreNote: 'Virtueller Drucker wird während der Wiederherstellung gestoppt',
   },
   },
 
 
   // Tags
   // Tags

+ 1 - 1
frontend/src/i18n/locales/en.ts

@@ -2253,7 +2253,7 @@ export default {
     restoreSuccess: 'Backup restored successfully',
     restoreSuccess: 'Backup restored successfully',
     backupFailed: 'Backup failed',
     backupFailed: 'Backup failed',
     restoreFailed: 'Restore failed',
     restoreFailed: 'Restore failed',
-    restoreNote: 'Virtual Printer will be restarted after restore',
+    restoreNote: 'Virtual Printer will be stopped during restore',
   },
   },
 
 
   // Tags
   // Tags

+ 1 - 1
frontend/src/i18n/locales/ja.ts

@@ -1786,7 +1786,7 @@ export default {
     apiKeysDescription: 'Webhook APIキー(インポート時に新しいキーが生成されます)',
     apiKeysDescription: 'Webhook APIキー(インポート時に新しいキーが生成されます)',
     restoreBackup: 'バックアップの復元',
     restoreBackup: 'バックアップの復元',
     restoreDescription: 'バックアップファイルからすべてのデータを置き換える',
     restoreDescription: 'バックアップファイルからすべてのデータを置き換える',
-    restoreNote: '復元後、仮想プリンターが再起動されます',
+    restoreNote: '復元中、仮想プリンターは停止されます',
   },
   },
 
 
   // Restore modal
   // Restore modal

File diff suppressed because it is too large
+ 0 - 0
static/assets/index-CKG31ANB.js


+ 1 - 1
static/index.html

@@ -23,7 +23,7 @@
 
 
     <!-- Splash screens for iOS -->
     <!-- Splash screens for iOS -->
     <link rel="apple-touch-startup-image" href="/img/android-chrome-512x512.png" />
     <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">
     <link rel="stylesheet" crossorigin href="/assets/index-DME4t7XG.css">
   </head>
   </head>
   <body>
   <body>

Some files were not shown because too many files changed in this diff