mkm3u: Add an option to omit the series name in multiseries outputs.
authorMark Wooding <mdw@distorted.org.uk>
Sun, 20 Mar 2022 02:57:19 +0000 (02:57 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Sun, 20 Mar 2022 02:57:19 +0000 (02:57 +0000)
This is for `The Clone Wars', because a lot of the preliminary material
is just called `Clone Wars' or similar, and there'd be so much
redundancy.

mkm3u

diff --git a/mkm3u b/mkm3u
index 1512e86..6a9b688 100755 (executable)
--- a/mkm3u
+++ b/mkm3u
@@ -37,6 +37,11 @@ def getint(s):
   if not s.isdigit(): raise ExpectedError("bad integer `%s'" % s)
   return int(s)
 
+def getbool(s):
+  if s == "t": return True
+  elif s == "nil": return False
+  else: raise ExpectedError("bad boolean `%s'" % s)
+
 class Words (object):
   def __init__(me, s):
     me._s = s
@@ -327,12 +332,13 @@ class Chapter (object):
       episode.source.url_and_duration(episode.tno, i, i + 1)
 
 class Episode (object):
-  def __init__(me, season, i, neps, title, src, tno = None,
-               startch = None, endch = None):
+  def __init__(me, season, i, neps, title, src, series_title_p = True,
+               tno = None, startch = None, endch = None):
     me.season = season
     me.i, me.neps, me.title = i, neps, title
     me.chapters = []
     me.source, me.tno = src, tno
+    me.series_title_p = series_title_p
     me.url, me.duration = src.url_and_duration(tno, startch, endch)
   def add_chapter(me, title, j):
     ch = Chapter(me, title, j)
@@ -347,8 +353,10 @@ class BaseSeason (object):
     me.episodes = []
     me.implicitp = implicitp
     me.ep_i, episodes = 1, []
-  def add_episode(me, j, neps, title, src, tno, startch, endch):
-    ep = Episode(me, j, neps, title, src, tno, startch, endch)
+  def add_episode(me, j, neps, title, src, series_title_p,
+                  tno, startch, endch):
+    ep = Episode(me, j, neps, title, src, series_title_p,
+                 tno, startch, endch)
     me.episodes.append(ep)
     src.nuses += neps; me.ep_i += neps
     return ep
@@ -387,10 +395,12 @@ class MovieSeason (BaseSeason):
     super().__init__(series, *args, **kw)
     me.title = title
     me.i = None
-  def add_episode(me, j, neps, title, src, tno, startch, endch):
+  def add_episode(me, j, neps, title, src, series_title_p,
+                  tno, startch, endch):
     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, endch)
+    return super().add_episode(j, neps, title, src, series_title_p,
+                               tno, startch, endch)
   def _eplabel(me, i, neps, title):
     if me.title is None:
       label = title
@@ -437,7 +447,8 @@ class Playlist (object):
       f.write("\n")
       for ep in season:
         label = ep.label()
-        if me.nseries > 1 and ep.season.series.title is not None:
+        if me.nseries > 1 and ep.series_title_p and \
+           ep.season.series.title is not None:
           if ep.season.i is None: sep = "—"
           else: sep = " "
           label = ep.season.series.title + sep + label
@@ -632,6 +643,7 @@ class EpisodeListParser (object):
     opts = ww.nextword(); check(opts is not None, "missing title/options")
     ti = None; sname = None; neps = 1; epi = None; loch = hich = None
     explen, expvar, explicitlen = me._explen, me._expvar, False
+    series_title_p = True
     for k, v in me._keyvals(opts):
       if k is None:
         if v.isdigit(): ti = int(v)
@@ -640,6 +652,7 @@ class EpisodeListParser (object):
       elif k == "s": sname = v
       elif k == "n": neps = getint(v)
       elif k == "ep": epi = getint(v)
+      elif k == "st": series_title_p = getbool(v)
       elif k == "l":
         if v == "-": me._explen, me._expvar = None, DEFAULT_EXPVAR
         else:
@@ -670,7 +683,8 @@ class EpisodeListParser (object):
       try: src = me._isos[series.name]
       except KeyError: src = me._auto_epsrc(series)
 
-    episode = season.add_episode(epi, neps, title, src, ti, loch, hich)
+    episode = season.add_episode(epi, neps, title, src,
+                                 series_title_p, ti, loch, hich)
 
     if episode.duration != -1 and explen is not None:
       if not explicitlen: explen *= neps