diff --git a/dcc/config.py b/dcc/config.py index cac1f0a..a0edeb2 100644 --- a/dcc/config.py +++ b/dcc/config.py @@ -6,12 +6,6 @@ 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 @@ -34,15 +28,23 @@ 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_path(d) + 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") def run(self, parsed_args): self.init_base(parsed_args) self.take_action(parsed_args) - def _init_path(self, what): + def _init_attr(self, what, default, fn=lambda x: x): + what = what.replace(".", "_") setattr( - self, f"_{what}", self.doom.joinpath(self._config.get(what, what))) + self, f"_{what}", fn(self._config.get(what, default))) setattr( type(self), what, property(lambda self: getattr(self, f"_{what}"))) diff --git a/dcc/fetch.py b/dcc/fetch.py index 00121f5..27f9f11 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([ - dcc.config.MIRROR, + self.fetch_mirror, reply["content"]["dir"], reply["content"]["filename"] ]) diff --git a/dcc/ss.py b/dcc/ss.py index 6d5dc2e..9ec2f54 100644 --- a/dcc/ss.py +++ b/dcc/ss.py @@ -18,26 +18,19 @@ class SS(dcc.doom_base.WadMap): pass def _try_screenshot(self, gravity, yolo): - with wand.image.Image( - width=dcc.config.THUMB_WIDTH, - height=dcc.config.THUMB_HEIGHT, - pseudo="x:" - ) as img: + width = self.thumbnail_width + height = self.thumbnail_height + with wand.image.Image(width=width, height=height, pseudo="x:") as img: img.reset_coords() - if ( - img.size[0] < dcc.config.THUMB_WIDTH - or img.size[1] < dcc.config.THUMB_HEIGHT - ): + if (img.size[0] < width or img.size[1] < height): if not messagebox.askretrycancel( - title="DCC", message="Image too small. Try again?" + title="DCC", + message=f"Image too small ({img.width}x{img.height})." + + "Try again?" ): sys.exit("Gave up trying to select an image.") return False - img.crop( - width=dcc.config.THUMB_WIDTH, - height=dcc.config.THUMB_HEIGHT, - gravity=gravity - ) + img.crop(width=width, height=height, gravity=gravity) img.reset_coords() if not yolo: wand.display.display(img) diff --git a/dcc/text.py b/dcc/text.py index 4a9aa61..5df6ed4 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 = dcc.config.FONT + draw.font = self.thumbnail_font draw.font_size = font_size - draw.fill_color = wand.color.Color(dcc.config.TEXT_FILL_COLOR) - draw.stroke_color = wand.color.Color(dcc.config.TEXT_STROKE_COLOR) + draw.fill_color = wand.color.Color(self.thumbnail_text_fill) + draw.stroke_color = wand.color.Color(self.thumbnail_text_stroke) 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=dcc.config.THUMB_HEIGHT, - width=dcc.config.THUMB_WIDTH + height=self.thumbnail_height, + width=self.thumbnail_height ) as img: draw_text(img, text) img.trim()