import dcc.doom_base import pathlib import os import subprocess import time class RIB(dcc.doom_base.WadMap): def get_parser(self, prog_name): parser = super().get_parser(prog_name) parser.add_argument("-s", "--secs_before", type=int, default=10) parser.add_argument("-a", "--attempt") return parser # TODO: the root path should probably be configurable. def take_action(self, parsed_args): demo = "" dt = 0 demodir = ( pathlib.Path.home() / ".dsda-doom" / "dsda_doom_data" / self.iwad_path.stem.lower() ) for w in self.load_order(): demodir = demodir.joinpath(w.stem.lower()) demodir = demodir / "failed_demos" glob = f"*map{self.map}*" if parsed_args.attempt is not None: glob += f"{parsed_args.attempt}*" for f in demodir.glob(glob, case_sensitive=False): st = os.stat(f) if st.st_mtime > dt: demo = f dt = st.st_mtime if demo == "": raise Exception( f"no failed demos found for wad {parsed_args.wad} " + f"and map {parsed_args.map} (tried to look in {demodir})" ) subprocess.run( [self.dsda] + self.dsda_preamble(warp=False) + ["-playdemo", demo] + ["-skiptic", str(-35 * parsed_args.secs_before)] )