feat: .tsb backup import/restore functionality
This commit is contained in:
@@ -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():
|
||||
|
||||
Reference in New Issue
Block a user