me.used_titles = dict()
me.used_chapters = set()
me.nuses = 0
- def url(me, title = None, chapter = None):
+ def url(me, title = None, start_chapter = None, end_chapter = None):
if title == "-":
if me.TITLEP: raise ExpectedError("missing title number")
- if chapter is not None:
+ if start_chapter is not None or end_chapter is not None:
raise ExpectedError("can't specify chapter without title")
suffix = ""
elif not me.TITLEP:
raise ExpectedError("can't specify title with `%s'" % me.fn)
- elif chapter is None:
+ elif start_chapter is None:
+ if end_chapter is not None:
+ raise ExpectedError("can't specify end chapter without start chapter")
suffix = "#%d" % title
elif not me.CHAPTERP:
raise ExpectedError("can't specify chapter with `%s'" % me.fn)
+ elif end_chapter is None:
+ suffix = "#%d:%d" % (title, start_chapter)
else:
- suffix = "#%d:%d-%d:%d" % (title, chapter, title, chapter)
- if chapter is not None: key, set = (title, chapter), me.used_chapters
- else: key, set = title, me.used_titles
- if key in set:
- if title == "-":
- raise ExpectedError("`%s' already used" % me.fn)
- elif chapter is None:
- raise ExpectedError("`%s' title %d already used" % (me.fn, title))
- else:
- raise ExpectedError("`%s' title %d chapter %d already used" %
- (me.fn, title, chapter))
- if chapter is not None: me.used_chapters.add((title, chapter))
+ suffix = "#%d:%d-%d:%d" % (title, start_chapter, title, end_chapter - 1)
+ if end_chapter is not None:
+ keys = [(title, ch) for ch in range(start_chapter, end_chapter)]
+ set = me.used_chapters
+ else:
+ keys, set = [title], me.used_titles
+ for k in keys:
+ if k in set:
+ if title == "-":
+ raise ExpectedError("`%s' already used" % me.fn)
+ elif end_chapter is None:
+ raise ExpectedError("`%s' title %d already used" % (me.fn, title))
+ else:
+ raise ExpectedError("`%s' title %d chapter %d already used" %
+ (me.fn, title, k[1]))
+ if end_chapter is not None:
+ for ch in range(start_chapter, end_chapter):
+ me.used_chapters.add((title, ch))
return me.PREFIX + ROOT + urlencode(me.fn) + suffix
class VideoDisc (Source):
class Chapter (object):
def __init__(me, episode, title, i):
me.title, me.i = title, i
- me.url = episode.source.url(episode.tno, i)
+ me.url = episode.source.url(episode.tno, i, i + 1)
class Episode (object):
- def __init__(me, season, i, neps, title, src, tno = None):
+ def __init__(me, season, i, neps, title, src, tno = None, startch = 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)
+ me.url = src.url(tno, startch, None)
def add_chapter(me, title, j):
ch = Chapter(me, title, j)
me.chapters.append(ch)
me.episodes = []
me.implicitp = implicitp
me.ep_i, episodes = 1, []
- def add_episode(me, j, neps, title, src, tno):
- ep = Episode(me, j, neps, title, src, tno)
+ def add_episode(me, j, neps, title, src, tno, startch):
+ ep = Episode(me, j, neps, title, src, tno, startch)
me.episodes.append(ep)
src.nuses += neps; me.ep_i += neps
return ep
return label
class MovieSeason (BaseSeason):
- def add_episode(me, j, neps, title, src, tno):
+ def add_episode(me, j, neps, title, src, tno, startch):
if title is None: raise ExpectedError("movie must have a title")
- return super().add_episode(j, neps, title, src, tno)
+ return super().add_episode(j, neps, title, src, tno, startch)
def _eplabel(me, i, epn, title):
return title
def _process_episode(me, ww):
opts = ww.nextword(); check(opts is not None, "missing title/options")
- ti = None; sname = None; neps = 1; epi = None
+ ti = None; sname = None; neps = 1; epi = None; ch = None
for k, v in me._keyvals(opts):
if k is None:
if v.isdigit(): ti = int(v)
elif k == "s": sname = v
elif k == "n": neps = getint(v)
elif k == "ep": epi = getint(v)
+ elif k == "ch": ch = getint(v)
else: raise ExpectedError("unknown episode option `%s'" % k)
check(ti is not None, "missing title number")
series = me._get_series(sname)
"episode %d.%d not found in video dir `%s'" %
(season.i, season.ep_i, dir.dir))
- episode = season.add_episode(epi, neps, title, src, ti)
+ episode = season.add_episode(epi, neps, title, src, ti, ch)
me._pl.add_episode(episode)
me._cur_episode = episode