diff --git a/dcc/__main__.py b/dcc/__main__.py index dbb5b19..6383388 100644 --- a/dcc/__main__.py +++ b/dcc/__main__.py @@ -2,4 +2,4 @@ import sys from dcc.main import main if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) + sys.exit(main(sys.argv[1:])) diff --git a/dcc/concat.py b/dcc/concat.py index 33a3a8b..1f28199 100644 --- a/dcc/concat.py +++ b/dcc/concat.py @@ -61,7 +61,7 @@ class Concat(dcc.doom_base.Wad): output.close() for line in summary: - summary_file.write(f"{line}\n") + summary_file.write(f"{line}\n") summary_file.close() def _add_chunk(self, v, output, overlay): diff --git a/dcc/config.py b/dcc/config.py index 6d1c4b3..cac1f0a 100644 --- a/dcc/config.py +++ b/dcc/config.py @@ -6,6 +6,14 @@ import tomlkit from cliff.command import Command +THUMB_WIDTH = 1280 +THUMB_HEIGHT = 720 +FONT = "League-Spartan-Bold" +TEXT_FILL_COLOR = "white" +TEXT_STROKE_COLOR = "srgb(176,0,0)" + +MIRROR = "https://youfailit.net/pub/idgames" # NYC + class Base(Command): def get_parser(self, prog_name): @@ -26,23 +34,15 @@ class Base(Command): "required key 'dsda' not set in config " + f"{self.doom.joinpath(self.config_name)}.") for d in ("iwads", "pwads", "demos", "fabricate"): - self._init_attr(d, d, fn=self.doom.joinpath) - - self._init_attr("thumbnail.height", 1280) - self._init_attr("thumbnail.width", 720) - self._init_attr("thumbnail.font", None) - self._init_attr("thumbnail.text_fill", "white") - self._init_attr("thumbnail.text_stroke", "red") - self._init_attr("fetch.mirror", "https://youfailit.net/pub/idgames") + self._init_path(d) def run(self, parsed_args): self.init_base(parsed_args) self.take_action(parsed_args) - def _init_attr(self, what, default, fn=lambda x: x): - what = what.replace(".", "_") + def _init_path(self, what): setattr( - self, f"_{what}", fn(self._config.get(what, default))) + self, f"_{what}", self.doom.joinpath(self._config.get(what, what))) setattr( type(self), what, property(lambda self: getattr(self, f"_{what}"))) @@ -57,3 +57,11 @@ class Base(Command): @property def dsda(self): return self._doom.joinpath(self._dsda) + + def iwad_path(self, wad): + iwad = self.iwads.joinpath(self._config.get("default_iwad")) + iwadpath = self.pwads.joinpath(wad).joinpath("iwad") + if iwadpath.exists(): + with io.open(iwadpath) as f: + iwad = self.iwads.joinpath(f.read().strip() + ".WAD") + return iwad diff --git a/dcc/configure.py b/dcc/configure.py deleted file mode 100644 index e5a6c6a..0000000 --- a/dcc/configure.py +++ /dev/null @@ -1,25 +0,0 @@ -import dcc.config -import tomlkit -from tomlkit.toml_file import TOMLFile - - -class Configure(dcc.config.Base): - def get_parser(self, prog_name): - parser = super().get_parser(prog_name) - parser.add_argument("wad") - parser.add_argument("complevel") - parser.add_argument("--iwad") - return parser - - def take_action(self, parsed_args): - new_config = self.pwad_path.joinpath(self.config_name) - if new_config.exists(): - raise Exception("Config %s already exists.".format(new_config)) - - doc = tomlkit.document() - doc.add("complevel", parsed_args.complevel) - if parsed_args.iwad is not None: - doc.add("iwad", parsed_args.iwad) - - f = TOMLFile(new_config) - f.write(doc) diff --git a/dcc/doom_base.py b/dcc/doom_base.py index 7ef5f5b..48d411a 100644 --- a/dcc/doom_base.py +++ b/dcc/doom_base.py @@ -29,19 +29,6 @@ class Wad(dcc.config.Base): def wad(self): return self._wad - @property - def pwad_path(self): - return self.pwads.joinpath(self.wad) - - @property - def iwad_path(self): - iwad = self.iwads.joinpath(self._config.get("iwad")) - iwadpath = self.pwad_path.joinpath("iwad") - if iwadpath.exists(): - with io.open(iwadpath) as f: - iwad = self.iwads.joinpath(f.read().strip() + ".WAD") - return iwad - class WadMap(Wad): def get_parser(self, prog_name): @@ -66,13 +53,14 @@ class WadMap(Wad): return "" if self._name is None else "_" + self._name def dsda_preamble(self): - args = ["-iwad", self.iwad_path] + args = ["-iwad", self.iwad_path(self.wad)] - wads = sorted(self.pwad_path.glob('*.wad', case_sensitive=False)) + pwadpath = self.pwads.joinpath(self.wad) + wads = sorted(pwadpath.glob('*.wad', case_sensitive=False)) if len(wads) > 0: args = args + ["-file"] + wads - dehs = sorted(self.pwad_path.glob('*.deh', case_sensitive=False)) + dehs = sorted(pwadpath.glob('*.deh', case_sensitive=False)) if len(dehs) > 0: args = args + ["-deh"] + dehs diff --git a/dcc/eureka.py b/dcc/eureka.py index 5aa2c56..d147879 100644 --- a/dcc/eureka.py +++ b/dcc/eureka.py @@ -10,7 +10,7 @@ class Eureka(dcc.doom_base.WadMap): return parser def take_action(self, parsed_args): - iwad = self.iwad_path + iwad = self.iwad_path(parsed_args.wad) pwadpath = self.pwads.joinpath(parsed_args.wad) if parsed_args.main is not None: mw = pwadpath.joinpath(parsed_args.main) diff --git a/dcc/fetch.py b/dcc/fetch.py index 27f9f11..00121f5 100644 --- a/dcc/fetch.py +++ b/dcc/fetch.py @@ -23,7 +23,7 @@ class Fetch(dcc.config.Base): ) as response: reply = json.loads(response.read()) rpath = "/".join([ - self.fetch_mirror, + dcc.config.MIRROR, reply["content"]["dir"], reply["content"]["filename"] ]) diff --git a/dcc/ss.py b/dcc/ss.py index 9ec2f54..6d5dc2e 100644 --- a/dcc/ss.py +++ b/dcc/ss.py @@ -18,19 +18,26 @@ class SS(dcc.doom_base.WadMap): pass def _try_screenshot(self, gravity, yolo): - width = self.thumbnail_width - height = self.thumbnail_height - with wand.image.Image(width=width, height=height, pseudo="x:") as img: + with wand.image.Image( + width=dcc.config.THUMB_WIDTH, + height=dcc.config.THUMB_HEIGHT, + pseudo="x:" + ) as img: img.reset_coords() - if (img.size[0] < width or img.size[1] < height): + if ( + img.size[0] < dcc.config.THUMB_WIDTH + or img.size[1] < dcc.config.THUMB_HEIGHT + ): if not messagebox.askretrycancel( - title="DCC", - message=f"Image too small ({img.width}x{img.height})." + - "Try again?" + title="DCC", message="Image too small. Try again?" ): sys.exit("Gave up trying to select an image.") return False - img.crop(width=width, height=height, gravity=gravity) + img.crop( + width=dcc.config.THUMB_WIDTH, + height=dcc.config.THUMB_HEIGHT, + gravity=gravity + ) img.reset_coords() if not yolo: wand.display.display(img) diff --git a/dcc/text.py b/dcc/text.py index 5df6ed4..4a9aa61 100644 --- a/dcc/text.py +++ b/dcc/text.py @@ -6,10 +6,10 @@ import wand.image def draw_text(img, text, font_size=64): with wand.drawing.Drawing() as draw: - draw.font = self.thumbnail_font + draw.font = dcc.config.FONT draw.font_size = font_size - draw.fill_color = wand.color.Color(self.thumbnail_text_fill) - draw.stroke_color = wand.color.Color(self.thumbnail_text_stroke) + draw.fill_color = wand.color.Color(dcc.config.TEXT_FILL_COLOR) + draw.stroke_color = wand.color.Color(dcc.config.TEXT_STROKE_COLOR) draw.stroke_width = font_size * 5 / 32 draw.text_interline_spacing = -font_size / 4 draw.text(5, int(draw.font_size) + 5, text) @@ -33,8 +33,8 @@ class Text(dcc.doom_base.WadMap): text = "MAP{}: {}".format(parsed_args.map, text) text = "{}\n{}".format(text, parsed_args.demotype) with wand.image.Image( - height=self.thumbnail_height, - width=self.thumbnail_height + height=dcc.config.THUMB_HEIGHT, + width=dcc.config.THUMB_WIDTH ) as img: draw_text(img, text) img.trim()