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")