Compare commits

..

No commits in common. "ebdac7c89d2d06b2e51e570e4d3e82be46c63d3b" and "218928f033bb0ce3ce34dac9741dd9b94615e55b" have entirely different histories.

7 changed files with 125 additions and 173 deletions

View file

@ -1,39 +1,27 @@
import dcc.config import dcc.config
import os import os
class List(dcc.config.Base): class List(dcc.config.Base):
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super().get_parser(prog_name) parser = super().get_parser(prog_name)
parser.add_argument("target") parser.add_argument("target")
parser.add_argument("--wad") parser.add_argument("--wad")
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
match parsed_args.target: match parsed_args.target:
case "pwads": case "pwads":
self.list(x.name for x in os.scandir(self.pwads) if x.is_dir()) self.list(x.name for x in os.scandir(self.pwads) if x.is_dir())
case "iwads": case "iwads":
self.list( self.list(x.name for x in os.scandir(self.iwads) if x.is_file())
x.name for x in os.scandir(self.iwads) case "demos":
if x.is_file() self.list(x.name for x in os.scandir(self.demos.joinpath(parsed_args.wad)) if x.name.endswith(".lmp"))
) case "videos":
case "demos": self.list(x.name for x in os.scandir(self.fabricate.joinpath(parsed_args.wad)) if x.name.endswith(".mp4"))
self.list( case _:
x.name for x in raise Exception(f"unknown target {parsed_args.target}")
os.scandir(self.demos.joinpath(parsed_args.wad))
if x.name.endswith(".lmp")
)
case "videos":
self.list(
x.name for x in
os.scandir(self.fabricate.joinpath(parsed_args.wad))
if x.name.endswith(".mp4")
)
case _:
raise Exception(f"unknown target {parsed_args.target}")
def list(self, gen): def list(self, gen):
# TODO: fancy text? # TODO: fancy text?
for i in sorted(gen): for i in sorted(gen):
print(i) print(i)

View file

@ -3,30 +3,27 @@ import sys
from cliff.app import App from cliff.app import App
from cliff.commandmanager import CommandManager from cliff.commandmanager import CommandManager
class DCC(App): class DCC(App):
def __init__(self): def __init__(self):
super().__init__( super().__init__(
description="Doom Command Center", description="Doom Command Center",
version="0.0.1", version="0.0.1",
command_manager=CommandManager("dcc"), command_manager=CommandManager("dcc"),
deferred_help=True, deferred_help=True,
) )
def initialize_app(self, argv): def initialize_app(self, argv):
pass pass
def prepare_to_run_command(self, cmd): def prepare_to_run_command(self, cmd):
pass pass
def clean_up(self, cmd, result, err):
pass
def clean_up(self, cmd, result, err):
pass
def main(argv=sys.argv[1:]): def main(argv=sys.argv[1:]):
dcc = DCC() dcc = DCC()
return dcc.run(argv) return dcc.run(argv)
if __name__ == '__main__': if __name__ == '__main__':
sys.exit(main()) sys.exit(main())

View file

@ -2,7 +2,6 @@ import dcc.config
import dcc.doom_base import dcc.doom_base
import subprocess import subprocess
class PB(dcc.doom_base.WadMap): class PB(dcc.doom_base.WadMap):
def take_action(self, parsed_args): def take_action(self, parsed_args):
subprocess.run(["ffplay", self.video_path()]) subprocess.run(["ffplay", self.video_path()])

View file

@ -2,22 +2,16 @@ import boto3
import dcc.config import dcc.config
import dcc.doom_base import dcc.doom_base
class Put(dcc.doom_base.WadMap): class Put(dcc.doom_base.WadMap):
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super().get_parser(prog_name) parser = super().get_parser(prog_name)
return parser return parser
# TODO: accept configuration for bucket name # TODO: accept configuration for bucket name
def take_action(self, parsed_args): def take_action(self, parsed_args):
s3_client = boto3.client('s3') s3_client = boto3.client('s3')
demo = self.demo_in_path() demo = self.demo_in_path()
bucket = self.target_bucket() bucket = self.target_bucket()
print("Uploading {} to bucket {}.".format(demo, bucket)) print("Uploading {} to bucket {}.".format(demo, bucket))
s3_client.upload_file( s3_client.upload_file(demo, 'yrriban', bucket,
demo, 'yrriban', bucket, ExtraArgs={'ContentType': 'binary/octet-stream', 'ACL': 'public-read'})
ExtraArgs={
'ContentType': 'binary/octet-stream',
'ACL': 'public-read'
}
)

View file

@ -5,48 +5,32 @@ import sys
import wand.display import wand.display
import wand.image import wand.image
class SS(dcc.doom_base.WadMap): class SS(dcc.doom_base.WadMap):
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super().get_parser(prog_name) parser = super().get_parser(prog_name)
parser.add_argument("-g", "--gravity", default="center") parser.add_argument("-g", "--gravity", default="center")
parser.add_argument("-y", "--yolo", action="store_true") parser.add_argument("-y", "--yolo", action="store_true")
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
while not self._try_screenshot(parsed_args.gravity, parsed_args.yolo): def try_screenshot():
pass 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] < dcc.config.THUMB_WIDTH or img.size[1] < dcc.config.THUMB_HEIGHT:
if not messagebox.askretrycancel(title="DCC", message="Image too small. 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=parsed_args.gravity)
img.reset_coords()
if not parsed_args.yolo:
wand.display.display(img)
accepted = messagebox.askyesnocancel(title="DCC", message="Is this image acceptable?")
if accepted is None:
sys.exit("Gave up on image verification")
if not accepted:
return False
img.save(filename=self.base_thumb_path())
return True
def _try_screenshot(self, gravity, yolo): while not try_screenshot():
with wand.image.Image( pass
width=dcc.config.THUMB_WIDTH,
height=dcc.config.THUMB_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 not messagebox.askretrycancel(
title="DCC", message="Image too small. 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.reset_coords()
if not yolo:
wand.display.display(img)
accepted = messagebox.askyesnocancel(
title="DCC", message="Is this image acceptable?"
)
if accepted is None:
sys.exit("Gave up on image verification")
if not accepted:
return False
img.save(filename=self.base_thumb_path())
return True

View file

@ -3,40 +3,36 @@ import sys
import wand.drawing import wand.drawing
import wand.image import wand.image
def draw_text(img, text, font_size=64): def draw_text(img, text, font_size=64):
with wand.drawing.Drawing() as draw: with wand.drawing.Drawing() as draw:
draw.font = dcc.config.FONT draw.font = dcc.config.FONT
draw.font_size = font_size draw.font_size=font_size
draw.fill_color = wand.color.Color(dcc.config.TEXT_FILL_COLOR) draw.fill_color=wand.color.Color(dcc.config.TEXT_FILL_COLOR)
draw.stroke_color = wand.color.Color(dcc.config.TEXT_STROKE_COLOR) draw.stroke_color=wand.color.Color(dcc.config.TEXT_STROKE_COLOR)
draw.stroke_width = font_size * 5 / 32 draw.stroke_width=font_size*5/32
draw.text_interline_spacing = -font_size / 4 draw.text_interline_spacing=-font_size/4
draw.text(5, int(draw.font_size) + 5, text) draw.text(5,int(draw.font_size)+5,text)
draw(img) draw(img)
draw.stroke_color = wand.color.Color("none") draw.stroke_color=wand.color.Color("none")
draw.stroke_width = 0 draw.stroke_width=0
draw.text(5, int(draw.font_size)+5, text) draw.text(5,int(draw.font_size)+5,text)
draw(img) draw(img)
class Text(dcc.doom_base.WadMap): class Text(dcc.doom_base.WadMap):
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super().get_parser(prog_name) parser = super().get_parser(prog_name)
parser.add_argument("--nomap", action="store_true") parser.add_argument("--nomap", action="store_true")
parser.add_argument("--demotype", default="UV-Max Demo") parser.add_argument("--demotype", default="UV-Max Demo")
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
text = sys.stdin.read().rstrip() text = sys.stdin.read().rstrip()
if not parsed_args.nomap: if not parsed_args.nomap:
text = "MAP{}: {}".format(parsed_args.map, text) text = "MAP{}: {}".format(parsed_args.map, text)
text = "{}\n{}".format(text, parsed_args.demotype) text = "{}\n{}".format(text, parsed_args.demotype)
with wand.image.Image( with wand.image.Image(height=dcc.config.THUMB_HEIGHT,width=dcc.config.THUMB_WIDTH) as img:
height=dcc.config.THUMB_HEIGHT, draw_text(img, text)
width=dcc.config.THUMB_WIDTH img.trim()
) as img: img.reset_coords()
draw_text(img, text) img.save(filename=self.text_thumb_path())
img.trim()
img.reset_coords()
img.save(filename=self.text_thumb_path())

View file

@ -3,34 +3,28 @@ import dcc.doom_base
import wand.color import wand.color
import wand.image import wand.image
class Thumb(dcc.doom_base.WadMap): class Thumb(dcc.doom_base.WadMap):
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super().get_parser(prog_name) parser = super().get_parser(prog_name)
parser.add_argument("--index", action="store_true") parser.add_argument("--index", action="store_true")
return parser return parser
def take_action(self, parsed_args):
base = self.base_thumb_path()
text = self.text_thumb_path()
mdoom = self.m_doom_path()
with wand.image.Image(filename=base) as bi, wand.color.Color("transparent") as tc:
with wand.image.Image(filename=text) as ti:
ti.border(tc, 5, 5)
bi.composite(ti, gravity="south_west")
def take_action(self, parsed_args): with wand.image.Image(filename=mdoom) as mdi:
base = self.base_thumb_path() mdi.border(tc, 5, 5)
text = self.text_thumb_path() bi.composite(mdi, gravity="north_west")
mdoom = self.m_doom_path()
with (
wand.image.Image(filename=base) as bi,
wand.color.Color("transparent") as tc
):
with wand.image.Image(filename=text) as ti:
ti.border(tc, 5, 5)
bi.composite(ti, gravity="south_west")
with wand.image.Image(filename=mdoom) as mdi: if parsed_args.index:
mdi.border(tc, 5, 5) with wand.image.Image(filename=self.output.joinpath("doomed_index.png")) as di:
bi.composite(mdi, gravity="north_west") di.border(tc, 1, 1)
bi.composite(di, gravity="north_east")
if parsed_args.index: bi.save(filename=self.thumb_path())
with wand.image.Image(
filename=self.output.joinpath("doomed_index.png")
) as di:
di.border(tc, 1, 1)
bi.composite(di, gravity="north_east")
bi.save(filename=self.thumb_path())