feat: .tsb backup import/restore functionality

This commit is contained in:
2026-07-26 18:31:04 +08:00
parent 02ffa33298
commit 2daa4d48f1
2 changed files with 43 additions and 1 deletions
+31
View File
@@ -369,6 +369,37 @@ async def api_export_backup():
headers={"Content-Disposition": "attachment; filename=turbosu_backup.tsb"})
@router.post("/backup/import")
async def api_import_backup(file: UploadFile = File(...)):
if not file.filename or not file.filename.endswith('.tsb'):
raise HTTPException(400, "Only .tsb files are accepted")
import io, zipfile, shutil
zip_data = await file.read()
base = Path(__file__).resolve().parent.parent
try:
with zipfile.ZipFile(io.BytesIO(zip_data), 'r') as zf:
for name in zf.namelist():
if name.endswith('/') or '__pycache__' in name:
continue
dest = base / name
dest.parent.mkdir(parents=True, exist_ok=True)
dest.write_bytes(zf.read(name))
from config.settings import reload_config
reload_config()
from models.dashboard import dashboard_manager
import importlib
importlib.reload(__import__('models.dashboard', fromlist=['dashboard_manager']))
from server.game_manager import game_plugin_manager
game_plugin_manager.reload()
return {"ok": True, "message": "备份已恢复,请重启服务"}
except Exception as e:
return {"ok": False, "message": str(e)}
# ---- Data Forwarding ----
@router.get("/forward")
async def api_list_forward_targets():