From b092d5117493f7633167748a0af8c168b8011583 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Mon, 14 Mar 2022 14:29:25 +0000 Subject: [PATCH] mkm3u: Picky checking of automatically selected discs. Each should be used the right number of times. --- mkm3u | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/mkm3u b/mkm3u index 9be73ce..42f8413 100755 --- a/mkm3u +++ b/mkm3u @@ -81,6 +81,10 @@ class Source (object): TITLEP = CHAPTERP = False def __init__(me, fn): me.fn = fn + me.neps = None + me.used_titles = dict() + me.used_chapters = set() + me.nuses = 0 def url(me, title = None, chapter = None): if title is None: if me.TITLEP: raise ExpectedError("missing title number") @@ -95,12 +99,27 @@ class Source (object): raise ExpectedError("can't specify chapter with `%s'" % me.fn) else: suffix = "#%d:%d-%d:%d" % (title, chapter, title, chapter) + if chapter is not None: key, set = (title, chapter), me.used_chapters + else: key, set = title, me.used_titles + if key in set: + if title is None: + raise ExpectedError("`%s' already used" % me.fn) + elif chapter is None: + raise ExpectedError("`%s' title %d already used" % (me.fn, title)) + else: + raise ExpectedError("`%s' title %d chapter %d already used" % + (me.fn, title, chapter)) + if chapter is not None: me.used_chapters.add((title, chapter)) return me.PREFIX + ROOT + urlencode(me.fn) + suffix class VideoDisc (Source): PREFIX = "dvd://" TITLEP = CHAPTERP = True + def __init__(me, fn, *args, **kw): + super().__init__(fn, *args, **kw) + me.neps = 0 + class VideoSeason (object): def __init__(me, i, title): me.i = i @@ -109,7 +128,7 @@ class VideoSeason (object): def set_episode_disc(me, i, disc): if i in me.episodes: raise ExpectedError("season %d episode %d already taken" % (me.i, i)) - me.episodes[i] = disc + me.episodes[i] = disc; disc.neps += 1 def some_group(m, *gg): for g in gg: @@ -133,6 +152,7 @@ class VideoDir (object): """, RX.X) def __init__(me, dir): + me.dir = dir fns = OS.listdir(OS.path.join(ROOT, dir)) fns.sort() season, last_j = None, 0 @@ -195,6 +215,7 @@ class AudioDir (object): """, RX.X) def __init__(me, dir): + me.dir = dir fns = OS.listdir(OS.path.join(ROOT, dir)) fns.sort() episodes = {} @@ -412,7 +433,7 @@ def parse_list(fn): episode = season.add_episode(fake_epi, neps, title, src, i) chapter = None - ep_i += neps + ep_i += neps; src.nuses += neps else: ww = Words(line) @@ -424,6 +445,16 @@ def parse_list(fn): else: j += 1 chapter = episode.add_chapter(title, j) + discs = set() + for vdir in vds.values(): + for s in vdir.seasons.values(): + for d in s.episodes.values(): + discs.add(d) + for d in sorted(discs, key = lambda d: d.fn): + if d.neps != d.nuses: + raise ExpectedError("disc `%s' has %d episodes, used %d times" % + (d.fn, d.neps, d.nuses)) + return playlist ROOT = "/mnt/dvd/archive/" -- 2.11.0