Compare commits

...

5 commits

9 changed files with 69 additions and 47 deletions

View file

@ -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:]))

View file

@ -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):

View file

@ -6,14 +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
class Base(Command):
def get_parser(self, prog_name):
@ -34,15 +26,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}")))
@ -57,11 +57,3 @@ 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

25
dcc/configure.py Normal file
View file

@ -0,0 +1,25 @@
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)

View file

@ -29,6 +29,19 @@ 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):
@ -53,14 +66,13 @@ class WadMap(Wad):
return "" if self._name is None else "_" + self._name
def dsda_preamble(self):
args = ["-iwad", self.iwad_path(self.wad)]
args = ["-iwad", self.iwad_path]
pwadpath = self.pwads.joinpath(self.wad)
wads = sorted(pwadpath.glob('*.wad', case_sensitive=False))
wads = sorted(self.pwad_path.glob('*.wad', case_sensitive=False))
if len(wads) > 0:
args = args + ["-file"] + wads
dehs = sorted(pwadpath.glob('*.deh', case_sensitive=False))
dehs = sorted(self.pwad_path.glob('*.deh', case_sensitive=False))
if len(dehs) > 0:
args = args + ["-deh"] + dehs

View file

@ -10,7 +10,7 @@ class Eureka(dcc.doom_base.WadMap):
return parser
def take_action(self, parsed_args):
iwad = self.iwad_path(parsed_args.wad)
iwad = self.iwad_path
pwadpath = self.pwads.joinpath(parsed_args.wad)
if parsed_args.main is not None:
mw = pwadpath.joinpath(parsed_args.main)

View file

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

View file

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

View file

@ -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()