Adjust pre-pretense backup strategy

This commit is contained in:
Raffson 2024-07-28 18:59:07 +02:00
parent dcc424d7e1
commit 3d1a5bea67
No known key found for this signature in database
GPG Key ID: B0402B2C9B764D99
3 changed files with 29 additions and 11 deletions

View File

@ -154,6 +154,10 @@ def save_dir() -> Path:
return base_path() / "Retribution" / "Saves"
def pre_pretense_backups_dir() -> Path:
return save_dir() / "PrePretenseBackups"
def server_port() -> int:
global _server_port
return _server_port

View File

@ -1,6 +1,5 @@
from __future__ import annotations
import copy
import logging
import pickle
from datetime import datetime
@ -20,7 +19,6 @@ from dcs.task import AFAC, FAC, SetInvisibleCommand, SetImmortalCommand, OrbitAc
from game.lasercodes.lasercoderegistry import LaserCodeRegistry
from game.missiongenerator.convoygenerator import ConvoyGenerator
from game.missiongenerator.environmentgenerator import EnvironmentGenerator
from game.missiongenerator.flotgenerator import FlotGenerator
from game.missiongenerator.forcedoptionsgenerator import ForcedOptionsGenerator
from game.missiongenerator.frontlineconflictdescription import (
FrontLineConflictDescription,
@ -29,6 +27,7 @@ from game.missiongenerator.missiondata import MissionData, JtacInfo
from game.missiongenerator.tgogenerator import TgoGenerator
from game.missiongenerator.visualsgenerator import VisualsGenerator
from game.naming import namegen
from game.persistency import pre_pretense_backups_dir
from game.pretense.pretenseaircraftgenerator import PretenseAircraftGenerator
from game.radio.radios import RadioRegistry
from game.radio.tacan import TacanRegistry
@ -74,17 +73,16 @@ class PretenseMissionGenerator(MissionGenerator):
self.mission.options.load_from_dict(options)
def generate_miz(self, output: Path) -> UnitMap:
now = datetime.now()
date_time = now.strftime("%Y-%d-%mT%H_%M_%S")
game_backup_pickle = pickle.dumps(self.game)
path = pre_pretense_backups_dir()
path.mkdir(parents=True, exist_ok=True)
path /= f".pre-pretense-backup.retribution"
try:
with open(
self.game.savepath + ".pre-pretense-backup." + date_time, "wb"
) as f:
with open(path, "wb") as f:
pickle.dump(self.game, f)
except:
logging.error(
f"Unable to save Pretense pre-generation backup to {self.game.savepath}.pre-pretense-backup.{date_time}"
f"Unable to save Pretense pre-generation backup to {path}"
)
if self.generation_started:

View File

@ -1,6 +1,7 @@
import logging
import traceback
import webbrowser
from datetime import datetime
from pathlib import Path
from typing import Optional
@ -21,6 +22,7 @@ from game import Game, VERSION, persistency, Migrator
from game.debriefing import Debriefing
from game.game import TurnState
from game.layout import LAYOUTS
from game.persistency import pre_pretense_backups_dir
from game.pretense.pretensemissiongenerator import PretenseMissionGenerator
from game.server import EventStream, GameContext
from game.server.dependencies import QtCallbacks, QtContext
@ -322,9 +324,23 @@ class QLiberationWindow(QMainWindow):
def newPretenseCampaign(self):
output = persistency.mission_path_for("pretense_campaign.miz")
PretenseMissionGenerator(
self.game, self.game.conditions.start_time
).generate_miz(output)
try:
PretenseMissionGenerator(
self.game, self.game.conditions.start_time
).generate_miz(output)
except Exception as e:
now = datetime.now()
date_time = now.strftime("%Y-%d-%mT%H_%M_%S")
path = pre_pretense_backups_dir()
path.mkdir(parents=True, exist_ok=True)
tgt = path / f"pre-pretense-backup_{date_time}.retribution"
path /= f".pre-pretense-backup.retribution"
if path.exists():
with open(path, "rb") as source:
with open(tgt, "wb") as target:
target.write(source.read())
raise e
title = "Pretense campaign generated"
msg = f"A Pretense campaign mission has been successfully generated in {output}"
QMessageBox.information(QApplication.focusWidget(), title, msg, QMessageBox.Ok)