mkm3u: Factor out the guts of `AudioDir'.
authorMark Wooding <mdw@distorted.org.uk>
Sun, 25 Sep 2022 23:25:08 +0000 (00:25 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sun, 25 Sep 2022 23:40:11 +0000 (00:40 +0100)
mkm3u

diff --git a/mkm3u b/mkm3u
index f945e29..b36d527 100755 (executable)
--- a/mkm3u
+++ b/mkm3u
@@ -360,6 +360,35 @@ class DVDDir (object):
         raise ExpectedError("bad ep list in `%s'", fn)
     me.seasons = seasons
 
+class SingleFileDir (object):
+
+  _CHECK_COMPLETE = True
+
+  def __init__(me, dir):
+    me.dir = dir
+    fns = OS.listdir(OS.path.join(ROOT, dir))
+    fns.sort()
+    episodes = {}
+    last_i = 0
+    rx = RX.compile(r"""
+          E (\d+)
+          (?: \. \ (.*))?
+          %s $
+    """ % RX.escape(me._EXT), RX.X)
+
+    for fn in fns:
+      path = OS.path.join(dir, fn)
+      if not fn.endswith(me._EXT): continue
+      m = rx.match(fn)
+      if not m: continue
+      i = filter(m.group(1), int)
+      etitle = m.group(2)
+      if me._CHECK_COMPLETE:
+        check(i == last_i + 1, "episode %d /= %d" % (i, last_i + 1))
+      episodes[i] = me._mkepisode(path, i)
+      last_i = i
+    me.episodes = episodes
+
 class AudioFile (Source):
   PREFIX = "file://"
   TITLEP = CHAPTERP = False
@@ -376,31 +405,12 @@ class AudioEpisode (AudioFile):
     super().__init__(fn, *args, **kw)
     me.i = i
 
-class AudioDir (object):
+class AudioDir (SingleFileDir):
+  _EXT = ".flac"
 
-  _R_FLAC = RX.compile(r""" ^
-          E (\d+)
-          (?: \. \ (.*))?
-          \. flac $
-  """, RX.X)
+  def _mkepisode(me, path, i):
+    return AudioEpisode(path, i)
 
-  def __init__(me, dir):
-    me.dir = dir
-    fns = OS.listdir(OS.path.join(ROOT, dir))
-    fns.sort()
-    episodes = {}
-    last_i = 0
-    for fn in fns:
-      path = OS.path.join(dir, fn)
-      if not fn.endswith(".flac"): continue
-      m = me._R_FLAC.match(fn)
-      if not m: continue
-      i = filter(m.group(1), int)
-      etitle = m.group(2)
-      check(i == last_i + 1, "episode %d /= %d" % (i, last_i + 1))
-      episodes[i] = AudioEpisode(path, i)
-      last_i = i
-    me.episodes = episodes
 
 class Chapter (object):
   def __init__(me, episode, title, i):