mkm3u: Allow movie seasons to have titles and numbered episodes.
authorMark Wooding <mdw@distorted.org.uk>
Thu, 17 Mar 2022 16:16:47 +0000 (16:16 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Thu, 17 Mar 2022 16:16:47 +0000 (16:16 +0000)
mkm3u

diff --git a/mkm3u b/mkm3u
index 9051c26..27907cd 100755 (executable)
--- a/mkm3u
+++ b/mkm3u
@@ -322,13 +322,23 @@ class Season (BaseSeason):
     return label
 
 class MovieSeason (BaseSeason):
-  def __init__(me, series, *args, **kw):
+  def __init__(me, series, title, *args, **kw):
+    super().__init__(series, *args, **kw)
+    me.title = title
     me.i = None
   def add_episode(me, j, neps, title, src, tno, startch):
-    if title is None: raise ExpectedError("movie must have a title")
+    if me.title is None and title is None:
+      raise ExpectedError("movie or movie season must have a title")
     return super().add_episode(j, neps, title, src, tno, startch)
-  def _eplabel(me, i, epn, title):
-    return title
+  def _eplabel(me, i, neps, title):
+    if me.title is None:
+      label = title
+    elif title is None:
+      epname, epn = me._epnames(i, neps)
+      label = "%s—%s %s" % (me.title, epname, epn)
+    else:
+      label = "%s—%s" % (me.title, title)
+    return label
 
 class Series (object):
   def __init__(me, playlist, title = None):
@@ -339,8 +349,8 @@ class Series (object):
     me.cur_season = season
   def add_season(me, title, i, implicitp = False):
     me._add_season(Season(me, title, i, implicitp))
-  def add_movies(me):
-    me._add_season(MovieSeason(me))
+  def add_movies(me, title = None):
+    me._add_season(MovieSeason(me, title))
   def ensure_season(me):
     if me.cur_season is None: me.add_season(None, 1, implicitp = True)
     return me.cur_season
@@ -451,9 +461,8 @@ class EpisodeListParser (object):
       w = ww.nextword();
       check(w is not None, "missing season number")
       if w == "-":
-        check(ww.rest() is None, "trailing junk")
         if not me._wantedp(sname): return
-        series.add_movies()
+        series.add_movies(ww.rest())
       else:
         title = ww.rest(); i = getint(w)
         if not me._wantedp(sname): return