Support setting a name for a demo, supporting more than one demo stored at a time for a map.
This commit is contained in:
parent
c73c7dd457
commit
85d3686f1c
11 changed files with 35 additions and 30 deletions
|
@ -45,8 +45,8 @@ def DsdaPreamble(wad, mapstr):
|
||||||
args = args + ["-warp", mapstr] # TODO: UDoom
|
args = args + ["-warp", mapstr] # TODO: UDoom
|
||||||
return args
|
return args
|
||||||
|
|
||||||
def DemoInPath(wad, mapstr):
|
def DemoInPath(wad, mapstr, name=None):
|
||||||
candidates = [x for x in DEMOS.joinpath(wad).glob("{}_map{}*.lmp".format(wad, mapstr))]
|
candidates = [x for x in DEMOS.joinpath(wad).glob("{}_map{}{}*.lmp".format(wad, mapstr, NameString(name)))]
|
||||||
if len(candidates) == 0:
|
if len(candidates) == 0:
|
||||||
raise Exception("no suitable demo candidates for WAD {} MAP {}.".format(wad, mapstr))
|
raise Exception("no suitable demo candidates for WAD {} MAP {}.".format(wad, mapstr))
|
||||||
if len(candidates) == 1:
|
if len(candidates) == 1:
|
||||||
|
@ -56,11 +56,11 @@ def DemoInPath(wad, mapstr):
|
||||||
def DsdaTextPath(wad, mapstr):
|
def DsdaTextPath(wad, mapstr):
|
||||||
return Ensure(DEMOS.joinpath(wad)).joinpath("{}_map{}.txt".format(wad, mapstr))
|
return Ensure(DEMOS.joinpath(wad)).joinpath("{}_map{}.txt".format(wad, mapstr))
|
||||||
|
|
||||||
def DemoOutPath(wad, mapstr):
|
def DemoOutPath(wad, mapstr, name=None):
|
||||||
return Ensure(DEMOS.joinpath(wad)).joinpath(DemoName(wad, mapstr))
|
return Ensure(DEMOS.joinpath(wad)).joinpath(DemoName(wad, mapstr, name))
|
||||||
|
|
||||||
def DemoName(wad, mapstr):
|
def DemoName(wad, mapstr, name=None):
|
||||||
return "{}_map{}.lmp".format(wad, mapstr)
|
return "{}_map{}{}.lmp".format(wad, mapstr, NameString(name))
|
||||||
|
|
||||||
def Complevel(wad):
|
def Complevel(wad):
|
||||||
complevel = PwadPath(wad).joinpath("complevel")
|
complevel = PwadPath(wad).joinpath("complevel")
|
||||||
|
@ -81,20 +81,23 @@ def IwadPath(wad):
|
||||||
def PwadPath(wad):
|
def PwadPath(wad):
|
||||||
return Ensure(PWADS.joinpath(wad))
|
return Ensure(PWADS.joinpath(wad))
|
||||||
|
|
||||||
def BaseThumbPath(wad, mapstr):
|
def BaseThumbPath(wad, mapstr, name=None):
|
||||||
return Ensure(OUTPUT.joinpath(wad)).joinpath("{}_map{}_base.png".format(wad, mapstr))
|
return Ensure(OUTPUT.joinpath(wad)).joinpath("{}_map{}{}_base.png".format(wad, mapstr, NameString(name)))
|
||||||
|
|
||||||
def MDoomPath(wad):
|
def MDoomPath(wad):
|
||||||
return Ensure(OUTPUT.joinpath(wad)).joinpath("M_DOOM_scaled.png")
|
return Ensure(OUTPUT.joinpath(wad)).joinpath("M_DOOM_scaled.png")
|
||||||
|
|
||||||
def TextThumbPath(wad, mapstr):
|
def TextThumbPath(wad, mapstr, name=None):
|
||||||
return Ensure(OUTPUT.joinpath(wad)).joinpath("{}_map{}_text.png".format(wad, mapstr))
|
return Ensure(OUTPUT.joinpath(wad)).joinpath("{}_map{}_text.png".format(wad, mapstr, NameString(name)))
|
||||||
|
|
||||||
def ThumbPath(wad, mapstr):
|
def ThumbPath(wad, mapstr, name=None):
|
||||||
return Ensure(OUTPUT.joinpath(wad)).joinpath("{}_map{}_thumb.png".format(wad, mapstr))
|
return Ensure(OUTPUT.joinpath(wad)).joinpath("{}_map{}_thumb.png".format(wad, mapstr, NameString(name)))
|
||||||
|
|
||||||
def VideoPath(wad, mapstr):
|
def VideoPath(wad, mapstr, name=None):
|
||||||
return Ensure(OUTPUT.joinpath(wad)).joinpath("{}_map{}.mp4".format(wad, mapstr))
|
return Ensure(OUTPUT.joinpath(wad)).joinpath("{}_map{}{}.mp4".format(wad, mapstr, NameString(name)))
|
||||||
|
|
||||||
|
def NameString(name):
|
||||||
|
return "" if name is None else "_" + name
|
||||||
|
|
||||||
def Ensure(path):
|
def Ensure(path):
|
||||||
if not path.exists():
|
if not path.exists():
|
||||||
|
|
|
@ -5,4 +5,5 @@ class WadMap(Command):
|
||||||
parser = super().get_parser(prog_name)
|
parser = super().get_parser(prog_name)
|
||||||
parser.add_argument('wad')
|
parser.add_argument('wad')
|
||||||
parser.add_argument('map')
|
parser.add_argument('map')
|
||||||
|
parser.add_argument('-n','--name','--demo_name')
|
||||||
return parser
|
return parser
|
||||||
|
|
10
dcc/dsda.py
10
dcc/dsda.py
|
@ -10,12 +10,12 @@ class DSDA(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("-s", "--single", action="store_true")
|
parser.add_argument("-s", "--single", action="store_true")
|
||||||
parser.add_argument("-n", "--name")
|
parser.add_argument("-a", "--abbreviation")
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
dip = dcc.config.DemoInPath(parsed_args.wad, parsed_args.map)
|
dip = dcc.config.DemoInPath(parsed_args.wad, parsed_args.map, parsed_args.name)
|
||||||
dtp = dcc.config.DsdaTextPath(parsed_args.wad, parsed_args.map)
|
dtp = dcc.config.DsdaTextPath(parsed_args.wad, parsed_args.map, parsed_args.name)
|
||||||
if not dtp.exists():
|
if not dtp.exists():
|
||||||
command = [dcc.config.DSDA]
|
command = [dcc.config.DSDA]
|
||||||
if shutil.which("xvfb-run") is not None:
|
if shutil.which("xvfb-run") is not None:
|
||||||
|
@ -28,8 +28,8 @@ class DSDA(dcc.doom_base.WadMap):
|
||||||
if "EDITOR" in os.environ:
|
if "EDITOR" in os.environ:
|
||||||
editor = os.environ["EDITOR"]
|
editor = os.environ["EDITOR"]
|
||||||
subprocess.run([editor, dtp])
|
subprocess.run([editor, dtp])
|
||||||
if parsed_args.name:
|
if parsed_args.abbreviation:
|
||||||
fh1 = parsed_args.name
|
fh1 = parsed_args.abbreviation
|
||||||
if not parsed_args.single:
|
if not parsed_args.single:
|
||||||
fh1 += parsed_args.map
|
fh1 += parsed_args.map
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -19,5 +19,5 @@ class Fabricate(dcc.doom_base.WadMap):
|
||||||
command = ["xvfb-run"] + command
|
command = ["xvfb-run"] + command
|
||||||
subprocess.run(command +
|
subprocess.run(command +
|
||||||
dcc.config.DsdaPreamble(parsed_args.wad, parsed_args.map) +
|
dcc.config.DsdaPreamble(parsed_args.wad, parsed_args.map) +
|
||||||
["-timedemo", dcc.config.DemoInPath(parsed_args.wad, parsed_args.map)] +
|
["-timedemo", dcc.config.DemoInPath(parsed_args.wad, parsed_args.map, parsed_args.name)] +
|
||||||
["-viddump", dcc.config.VideoPath(parsed_args.wad, parsed_args.map)])
|
["-viddump", dcc.config.VideoPath(parsed_args.wad, parsed_args.map, parsed_args.name)])
|
||||||
|
|
|
@ -4,4 +4,4 @@ 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", dcc.config.VideoPath(parsed_args.wad, parsed_args.map)])
|
subprocess.run(["ffplay", dcc.config.VideoPath(parsed_args.wad, parsed_args.map, parsed_args.name)])
|
||||||
|
|
|
@ -12,8 +12,8 @@ class Put(dcc.doom_base.WadMap):
|
||||||
# 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 = dcc.config.DemoInPath(parsed_args.wad, parsed_args.map)
|
demo = dcc.config.DemoInPath(parsed_args.wad, parsed_args.map, parsed_args.name)
|
||||||
bucket = dcc.config.DemoName(parsed_args.wad, parsed_args.map)
|
bucket = dcc.config.DemoName(parsed_args.wad, parsed_args.map, parsed_args.name)
|
||||||
if parsed_args.dsda:
|
if parsed_args.dsda:
|
||||||
pattern = ("{}{}".format(parsed_args.wad[0:2], parsed_args.map) if not parsed_args.single else parsed_args.wad[0:4]) + "*.zip"
|
pattern = ("{}{}".format(parsed_args.wad[0:2], parsed_args.map) if not parsed_args.single else parsed_args.wad[0:4]) + "*.zip"
|
||||||
zips = [x for x in dcc.config.DEMOS.joinpath(parsed_args.wad).glob(pattern)]
|
zips = [x for x in dcc.config.DEMOS.joinpath(parsed_args.wad).glob(pattern)]
|
||||||
|
|
|
@ -6,4 +6,4 @@ class Record(dcc.doom_base.WadMap):
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
subprocess.run([dcc.config.DSDA] +
|
subprocess.run([dcc.config.DSDA] +
|
||||||
dcc.config.DsdaPreamble(parsed_args.wad, parsed_args.map) +
|
dcc.config.DsdaPreamble(parsed_args.wad, parsed_args.map) +
|
||||||
["-record", dcc.config.DemoOutPath(parsed_args.wad, parsed_args.map)])
|
["-record", dcc.config.DemoOutPath(parsed_args.wad, parsed_args.map, parsed_args.name)])
|
||||||
|
|
|
@ -29,7 +29,7 @@ class SS(dcc.doom_base.WadMap):
|
||||||
sys.exit("Gave up on image verification")
|
sys.exit("Gave up on image verification")
|
||||||
if not accepted:
|
if not accepted:
|
||||||
return False
|
return False
|
||||||
img.save(filename=dcc.config.BaseThumbPath(parsed_args.wad, parsed_args.map))
|
img.save(filename=dcc.config.BaseThumbPath(parsed_args.wad, parsed_args.map, parsed_args.name))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
while not try_screenshot():
|
while not try_screenshot():
|
||||||
|
|
|
@ -31,4 +31,4 @@ class Text(dcc.doom_base.WadMap):
|
||||||
draw(img)
|
draw(img)
|
||||||
img.trim()
|
img.trim()
|
||||||
img.reset_coords()
|
img.reset_coords()
|
||||||
img.save(filename=dcc.config.TextThumbPath(parsed_args.wad, parsed_args.map))
|
img.save(filename=dcc.config.TextThumbPath(parsed_args.wad, parsed_args.map, parsed_args.name))
|
||||||
|
|
|
@ -10,8 +10,8 @@ class Thumb(dcc.doom_base.WadMap):
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
base = dcc.config.BaseThumbPath(parsed_args.wad, parsed_args.map)
|
base = dcc.config.BaseThumbPath(parsed_args.wad, parsed_args.map, parsed_args.name)
|
||||||
text = dcc.config.TextThumbPath(parsed_args.wad, parsed_args.map)
|
text = dcc.config.TextThumbPath(parsed_args.wad, parsed_args.map, parsed_args.name)
|
||||||
mdoom = dcc.config.MDoomPath(parsed_args.wad)
|
mdoom = dcc.config.MDoomPath(parsed_args.wad)
|
||||||
with wand.image.Image(filename=base) as bi, wand.color.Color("transparent") as tc:
|
with wand.image.Image(filename=base) as bi, wand.color.Color("transparent") as tc:
|
||||||
with wand.image.Image(filename=text) as ti:
|
with wand.image.Image(filename=text) as ti:
|
||||||
|
@ -27,4 +27,4 @@ class Thumb(dcc.doom_base.WadMap):
|
||||||
di.border(tc, 1, 1)
|
di.border(tc, 1, 1)
|
||||||
bi.composite(di, gravity="north_east")
|
bi.composite(di, gravity="north_east")
|
||||||
|
|
||||||
bi.save(filename=dcc.config.ThumbPath(parsed_args.wad, parsed_args.map))
|
bi.save(filename=dcc.config.ThumbPath(parsed_args.wad, parsed_args.map, parsed_args.name))
|
||||||
|
|
1
setup.py
1
setup.py
|
@ -35,6 +35,7 @@ setup(
|
||||||
'dsda = dcc.dsda:DSDA',
|
'dsda = dcc.dsda:DSDA',
|
||||||
'eureka = dcc.eureka:Eureka',
|
'eureka = dcc.eureka:Eureka',
|
||||||
'ls = dcc.ls:List',
|
'ls = dcc.ls:List',
|
||||||
|
'configure = dcc.configure:Configure',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue