import dcc.config import os class List(dcc.config.ListerBase): def get_parser(self, prog_name): parser = super().get_parser(prog_name) parser.add_argument("target") return parser def take_action(self, parsed_args): match parsed_args.target: case "pwads": return ( ("pwads",), sorted( (x.name,) for x in os.scandir(self.pwads) if x.is_dir() ) ) case "iwads": return ( ("iwads",), sorted( (x.name,) for x in os.scandir(self.iwads) if x.is_file() ) ) case _: raise Exception(f"unknown target {parsed_args.target}") class WadList(dcc.config.ListerBase): def get_parser(self, prog_name): parser = super().get_parser(prog_name) parser.add_argument("wad") return parser def _get_results(self, name, base, wad, ext): return ( (name,), sorted( (x.name,) for x in os.scandir(base.joinpath(wad)) if x.name.endswith(ext) ) ) class ListDemos(WadList): def take_action(self, parsed_args): return self._get_results("demos", self.demos, parsed_args.wad, ".lmp") class ListVideos(WadList): def take_action(self, parsed_args): return self._get_results( "videos", self.fabricate, parsed_args.wad, ".mp4" )