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" return base_path() / "Retribution" / "Saves"
def pre_pretense_backups_dir() -> Path:
return save_dir() / "PrePretenseBackups"
def server_port() -> int: def server_port() -> int:
global _server_port global _server_port
return _server_port return _server_port

View File

@ -1,6 +1,5 @@
from __future__ import annotations from __future__ import annotations
import copy
import logging import logging
import pickle import pickle
from datetime import datetime 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.lasercodes.lasercoderegistry import LaserCodeRegistry
from game.missiongenerator.convoygenerator import ConvoyGenerator from game.missiongenerator.convoygenerator import ConvoyGenerator
from game.missiongenerator.environmentgenerator import EnvironmentGenerator from game.missiongenerator.environmentgenerator import EnvironmentGenerator
from game.missiongenerator.flotgenerator import FlotGenerator
from game.missiongenerator.forcedoptionsgenerator import ForcedOptionsGenerator from game.missiongenerator.forcedoptionsgenerator import ForcedOptionsGenerator
from game.missiongenerator.frontlineconflictdescription import ( from game.missiongenerator.frontlineconflictdescription import (
FrontLineConflictDescription, FrontLineConflictDescription,
@ -29,6 +27,7 @@ from game.missiongenerator.missiondata import MissionData, JtacInfo
from game.missiongenerator.tgogenerator import TgoGenerator from game.missiongenerator.tgogenerator import TgoGenerator
from game.missiongenerator.visualsgenerator import VisualsGenerator from game.missiongenerator.visualsgenerator import VisualsGenerator
from game.naming import namegen from game.naming import namegen
from game.persistency import pre_pretense_backups_dir
from game.pretense.pretenseaircraftgenerator import PretenseAircraftGenerator from game.pretense.pretenseaircraftgenerator import PretenseAircraftGenerator
from game.radio.radios import RadioRegistry from game.radio.radios import RadioRegistry
from game.radio.tacan import TacanRegistry from game.radio.tacan import TacanRegistry
@ -74,17 +73,16 @@ class PretenseMissionGenerator(MissionGenerator):
self.mission.options.load_from_dict(options) self.mission.options.load_from_dict(options)
def generate_miz(self, output: Path) -> UnitMap: 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) 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: try:
with open( with open(path, "wb") as f:
self.game.savepath + ".pre-pretense-backup." + date_time, "wb"
) as f:
pickle.dump(self.game, f) pickle.dump(self.game, f)
except: except:
logging.error( 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: if self.generation_started:

View File

@ -1,6 +1,7 @@
import logging import logging
import traceback import traceback
import webbrowser import webbrowser
from datetime import datetime
from pathlib import Path from pathlib import Path
from typing import Optional from typing import Optional
@ -21,6 +22,7 @@ from game import Game, VERSION, persistency, Migrator
from game.debriefing import Debriefing from game.debriefing import Debriefing
from game.game import TurnState from game.game import TurnState
from game.layout import LAYOUTS from game.layout import LAYOUTS
from game.persistency import pre_pretense_backups_dir
from game.pretense.pretensemissiongenerator import PretenseMissionGenerator from game.pretense.pretensemissiongenerator import PretenseMissionGenerator
from game.server import EventStream, GameContext from game.server import EventStream, GameContext
from game.server.dependencies import QtCallbacks, QtContext from game.server.dependencies import QtCallbacks, QtContext
@ -322,9 +324,23 @@ class QLiberationWindow(QMainWindow):
def newPretenseCampaign(self): def newPretenseCampaign(self):
output = persistency.mission_path_for("pretense_campaign.miz") output = persistency.mission_path_for("pretense_campaign.miz")
PretenseMissionGenerator( try:
self.game, self.game.conditions.start_time PretenseMissionGenerator(
).generate_miz(output) 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" title = "Pretense campaign generated"
msg = f"A Pretense campaign mission has been successfully generated in {output}" msg = f"A Pretense campaign mission has been successfully generated in {output}"
QMessageBox.information(QApplication.focusWidget(), title, msg, QMessageBox.Ok) QMessageBox.information(QApplication.focusWidget(), title, msg, QMessageBox.Ok)