From: Mark Wooding Date: Thu, 17 Mar 2022 19:54:59 +0000 (+0000) Subject: mkm3u: New hack for `episodes' which are carved out of chapter breaks. X-Git-Url: https://git.distorted.org.uk/~mdw/epls/commitdiff_plain/0411af2c915f74bbd1c1f9f2373d0fd3d8e9080c mkm3u: New hack for `episodes' which are carved out of chapter breaks. The `Danger Mouse' discs do this. Grr. --- diff --git a/mkm3u b/mkm3u index 7583937..9b308aa 100755 --- a/mkm3u +++ b/mkm3u @@ -284,12 +284,13 @@ class Chapter (object): me.url = episode.source.url(episode.tno, i, i + 1) class Episode (object): - def __init__(me, season, i, neps, title, src, tno = None, startch = None): + def __init__(me, season, i, neps, title, src, 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.url = src.url(tno, startch, None) + me.url = src.url(tno, startch, endch) def add_chapter(me, title, j): ch = Chapter(me, title, j) me.chapters.append(ch) @@ -303,8 +304,8 @@ class BaseSeason (object): me.episodes = [] me.implicitp = implicitp me.ep_i, episodes = 1, [] - def add_episode(me, j, neps, title, src, tno, startch): - ep = Episode(me, j, neps, title, src, tno, startch) + def add_episode(me, j, neps, title, src, tno, startch, endch): + ep = Episode(me, j, neps, title, src, tno, startch, endch) me.episodes.append(ep) src.nuses += neps; me.ep_i += neps return ep @@ -335,10 +336,10 @@ class MovieSeason (BaseSeason): super().__init__(series, *args, **kw) me.title = title me.i = None - def add_episode(me, j, neps, title, src, tno, startch): + def add_episode(me, j, neps, title, src, 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) + return super().add_episode(j, neps, title, src, tno, startch, endch) def _eplabel(me, i, neps, title): if me.title is None: label = title @@ -541,7 +542,7 @@ class EpisodeListParser (object): def _process_episode(me, ww): opts = ww.nextword(); check(opts is not None, "missing title/options") - ti = None; sname = None; neps = 1; epi = None; ch = None + ti = None; sname = None; neps = 1; epi = None; loch = hich = None for k, v in me._keyvals(opts): if k is None: if v.isdigit(): ti = int(v) @@ -550,7 +551,10 @@ class EpisodeListParser (object): elif k == "s": sname = v elif k == "n": neps = getint(v) elif k == "ep": epi = getint(v) - elif k == "ch": ch = getint(v) + elif k == "ch": + try: sep = v.index("-") + except ValueError: loch, hich = getint(v), None + else: loch, hich = getint(v[:sep]), getint(v[sep + 1:]) + 1 else: raise ExpectedError("unknown episode option `%s'" % k) check(ti is not None, "missing title number") series = me._get_series(sname) @@ -572,7 +576,7 @@ 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, ch) + episode = season.add_episode(epi, neps, title, src, ti, loch, hich) me._pl.add_episode(episode) me._cur_episode = episode