mkm3u: Add (commented-out) debugging machinery for video parser.
[epls] / mkm3u
diff --git a/mkm3u b/mkm3u
index eff5d96..bcc3536 100755 (executable)
--- a/mkm3u
+++ b/mkm3u
@@ -138,8 +138,7 @@ def some_group(m, *gg):
 
 class VideoDir (object):
 
-  _R_ISO_PRE = RX.compile(r"""
-        ^
+  _R_ISO_PRE = RX.compile(r""" ^
         (?: S (?P<si> \d+) (?: \. \ (?P<st> .*)—)? (?: D (?P<sdi> \d+))? |
             (?P<di> \d+))
         \. \  #
@@ -147,59 +146,70 @@ class VideoDir (object):
         \. iso $
   """, RX.X)
 
-  _R_ISO_EP = RX.compile(r"""
-        ^ E (?P<ei> \d+) (?: – (?P<ej> \d+))? $
+  _R_ISO_EP = RX.compile(r""" ^
+        (?: S (?P<si> \d+) \ )?
+        E (?P<ei> \d+) (?: – (?P<ej> \d+))? $
   """, RX.X)
 
   def __init__(me, dir):
     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)
@@ -207,8 +217,7 @@ class AudioEpisode (Source):
 
 class AudioDir (object):
 
-  _R_FLAC = RX.compile(r"""
-          ^
+  _R_FLAC = RX.compile(r""" ^
           E (\d+)
           (?: \. \ (.*))?
           \. flac $