From 32cd109c9acbda5c39288f054043601eb6feaa94 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Mon, 14 Mar 2022 13:56:12 +0000 Subject: [PATCH] mkm3u: Abolish `VideoEpisodes'. Instead, just associate a disc with each episode in the season. This way, a disc can be associated with multiple seasons without trouble. --- mkm3u | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/mkm3u b/mkm3u index 5ef5832..9be73ce 100755 --- a/mkm3u +++ b/mkm3u @@ -101,24 +101,15 @@ class VideoDisc (Source): PREFIX = "dvd://" TITLEP = CHAPTERP = True -class VideoEpisodes (VideoDisc): - def __init__(me, fn, season, eps, *args, **kw): - super().__init__(fn, *args, **kw) - me.season = season - me.eps = eps - class VideoSeason (object): def __init__(me, i, title): me.i = i me.title = title me.episodes = {} - def add_disc(me, fn, eps): - d = VideoEpisodes(fn, me, eps) - for i in eps: - if i in me.episodes: - raise ExpectedError("season %d episode %d already taken" % (me.i, i)) - me.episodes[i] = d - return d + def set_episode_disc(me, i, disc): + if i in me.episodes: + raise ExpectedError("season %d episode %d already taken" % (me.i, i)) + me.episodes[i] = disc def some_group(m, *gg): for g in gg: @@ -168,17 +159,18 @@ class VideoDir (object): check(j == last_j + 1, "season %d disc %d /= %d" % (season.i, j, last_j + 1)) - eps = set() - bad = False + disc = VideoDisc(path) + 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 start = filter(mm.group("ei"), int) end = filter(mm.group("ej"), int, start) - for k in range(start, end + 1): eps.add(k) - if bad and eps: + 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) - season.add_disc(path, eps) last_j = j me.seasons = seasons -- 2.11.0