X-Git-Url: https://git.distorted.org.uk/~mdw/epls/blobdiff_plain/9fc467bb292bc6903dc33c2564b76023c15233e9..065a5db681eac97dd6812197ca11cb67d0914752:/mkm3u?ds=inline diff --git a/mkm3u b/mkm3u index e250c41..bcc3536 100755 --- a/mkm3u +++ b/mkm3u @@ -147,6 +147,7 @@ class VideoDir (object): """, RX.X) _R_ISO_EP = RX.compile(r""" ^ + (?: S (?P \d+) \ )? E (?P \d+) (?: – (?P \d+))? $ """, RX.X) @@ -154,51 +155,61 @@ class VideoDir (object): me.dir = dir fns = OS.listdir(OS.path.join(ROOT, dir)) fns.sort() - season, last_j = None, 0 + season = None seasons = {} for fn in fns: path = OS.path.join(dir, fn) if not fn.endswith(".iso"): continue m = me._R_ISO_PRE.match(fn) - if not m: continue + if not m: + #print(";; `%s' ignored" % path, file = SYS.stderr) + continue - i = filter(m.group("si"), int, 1) + i = filter(m.group("si"), int) stitle = m.group("st") - if season is None or i != season.i: - check(season is None or i == season.i + 1, - "season %d /= %d" % (i, season is None and -1 or season.i + 1)) - check(i not in seasons, "season %d already seen" % i) - seasons[i] = season = VideoSeason(i, stitle) - last_j = 0 - else: - check(stitle == season.title, - "season title `%s' /= `%s'" % (stitle, season.title)) - j = filter(some_group(m, "sdi", "di"), int) - if j is not None: - check(j == last_j + 1, - "season %d disc %d /= %d" % (season.i, j, last_j + 1)) + check(i is not None or stitle is None, + "explicit season title without number in `%s'" % fn) + if i is not None: + if season is None or i != season.i: + check(season is None or i == season.i + 1, + "season %d /= %d" % + (i, season is None and -1 or season.i + 1)) + check(i not in seasons, "season %d already seen" % i) + seasons[i] = season = VideoSeason(i, stitle) + else: + check(stitle == season.title, + "season title `%s' /= `%s'" % (stitle, season.title)) disc = VideoDisc(path) + ts = season any, bad = False, False for eprange in m.group("eps").split(", "): mm = me._R_ISO_EP.match(eprange) if mm is None: bad = True; continue + if not any: + #print(";; `%s'" % path, file = SYS.stderr) + any = True + i = filter(mm.group("si"), int) + if i is not None: + try: ts = seasons[i] + except KeyError: ts = seasons[i] = VideoSeason(i, None) + if ts is None: + ts = season = seasons[1] = VideoSeason(1, None) start = filter(mm.group("ei"), int) end = filter(mm.group("ej"), int, start) for k in range(start, end + 1): - season.set_episode_disc(k, disc) - any = True - if bad and any: - raise ExpectedError("bad ep list in `%s'", fn) - last_j = j + ts.set_episode_disc(k, disc) + #print(";;\tepisode %d.%d" % (ts.i, k), file = SYS.stderr) + if not any: pass #print(";; `%s' ignored" % path, file = SYS.stderr) + elif bad: raise ExpectedError("bad ep list in `%s'", fn) me.seasons = seasons class AudioDisc (Source): - #PREFIX = "file://" + PREFIX = "file://" TITLEP = CHAPTERP = False class AudioEpisode (Source): - #PREFIX = "file://" + PREFIX = "file://" TITLEP = CHAPTERP = False def __init__(me, fn, i, *args, **kw): super().__init__(fn, *args, **kw)