Fixed --playlist-start feature

This commit is contained in:
brotherBox 2014-11-28 11:25:48 +01:00
parent 068629da73
commit f2c22d9f3f
2 changed files with 14 additions and 8 deletions

View File

@ -548,7 +548,6 @@ class YoutubeDL(object):
if not ie.working(): if not ie.working():
self.report_warning('The program functionality for this site has been marked as broken, ' self.report_warning('The program functionality for this site has been marked as broken, '
'and will probably not work.') 'and will probably not work.')
try: try:
ie_result = ie.extract(url) ie_result = ie.extract(url)
if ie_result is None: # Finished already (backwards compatibility; listformats and friends should be moved here) if ie_result is None: # Finished already (backwards compatibility; listformats and friends should be moved here)
@ -668,16 +667,20 @@ class YoutubeDL(object):
(ie_result['extractor'], playlist, n_all_entries, n_entries)) (ie_result['extractor'], playlist, n_all_entries, n_entries))
else: else:
assert isinstance(ie_result['entries'], PagedList) assert isinstance(ie_result['entries'], PagedList)
entries = ie_result['entries'].getslice( entries = ie_result['entries']
playliststart, playlistend) if reverse:
entries = entries.getslice(0, None)
entries = entries[::-1]
entries = entries[playliststart:playlistend]
else:
entries = entries.getslice(
playliststart, playlistend)
n_entries = len(entries) n_entries = len(entries)
self.to_screen( self.to_screen(
"[%s] playlist %s: Downloading %d videos" % "[%s] playlist %s: Downloading %d videos" %
(ie_result['extractor'], playlist, n_entries)) (ie_result['extractor'], playlist, n_entries))
if reverse:
entries = reversed(entries)
for i, entry in enumerate(entries, 1): for i, entry in enumerate(entries, 1):
self.to_screen('[download] Downloading video #%s of %s' % (i, n_entries)) self.to_screen('[download] Downloading video #%s of %s' % (i, n_entries))
extra = { extra = {

View File

@ -1265,16 +1265,19 @@ class OnDemandPagedList(PagedList):
self._pagefunc = pagefunc self._pagefunc = pagefunc
self._pagesize = pagesize self._pagesize = pagesize
def getslice(self, start=0, end=None): def getslice(self, start=0, end=None, reverse=False):
res = [] res = []
# r = list(itertools.count(start // self._pagesize))
# for pagenum in r:
for pagenum in itertools.count(start // self._pagesize): for pagenum in itertools.count(start // self._pagesize):
# absolute videos before current page; page 2 * 50 v/p = 100
firstid = pagenum * self._pagesize firstid = pagenum * self._pagesize
nextfirstid = pagenum * self._pagesize + self._pagesize nextfirstid = pagenum * self._pagesize + self._pagesize
if start >= nextfirstid: if start >= nextfirstid:
continue continue
page_results = list(self._pagefunc(pagenum)) page_results = list(self._pagefunc(pagenum))
startv = ( startv = (
start % self._pagesize start % self._pagesize
if firstid <= start < nextfirstid if firstid <= start < nextfirstid