Match --download-archive during playlist processing (Fixes #1745)
This commit is contained in:
		@@ -355,15 +355,17 @@ class YoutubeDL(object):
 | 
			
		||||
    def _match_entry(self, info_dict):
 | 
			
		||||
        """ Returns None iff the file should be downloaded """
 | 
			
		||||
 | 
			
		||||
        title = info_dict['title']
 | 
			
		||||
        matchtitle = self.params.get('matchtitle', False)
 | 
			
		||||
        if matchtitle:
 | 
			
		||||
            if not re.search(matchtitle, title, re.IGNORECASE):
 | 
			
		||||
                return u'[download] "' + title + '" title did not match pattern "' + matchtitle + '"'
 | 
			
		||||
        rejecttitle = self.params.get('rejecttitle', False)
 | 
			
		||||
        if rejecttitle:
 | 
			
		||||
            if re.search(rejecttitle, title, re.IGNORECASE):
 | 
			
		||||
                return u'"' + title + '" title matched reject pattern "' + rejecttitle + '"'
 | 
			
		||||
        if 'title' in info_dict:
 | 
			
		||||
            # This can happen when we're just evaluating the playlist
 | 
			
		||||
            title = info_dict['title']
 | 
			
		||||
            matchtitle = self.params.get('matchtitle', False)
 | 
			
		||||
            if matchtitle:
 | 
			
		||||
                if not re.search(matchtitle, title, re.IGNORECASE):
 | 
			
		||||
                    return u'[download] "' + title + '" title did not match pattern "' + matchtitle + '"'
 | 
			
		||||
            rejecttitle = self.params.get('rejecttitle', False)
 | 
			
		||||
            if rejecttitle:
 | 
			
		||||
                if re.search(rejecttitle, title, re.IGNORECASE):
 | 
			
		||||
                    return u'"' + title + '" title matched reject pattern "' + rejecttitle + '"'
 | 
			
		||||
        date = info_dict.get('upload_date', None)
 | 
			
		||||
        if date is not None:
 | 
			
		||||
            dateRange = self.params.get('daterange', DateRange())
 | 
			
		||||
@@ -374,8 +376,8 @@ class YoutubeDL(object):
 | 
			
		||||
            if age_limit < info_dict.get('age_limit', 0):
 | 
			
		||||
                return u'Skipping "' + title + '" because it is age restricted'
 | 
			
		||||
        if self.in_download_archive(info_dict):
 | 
			
		||||
            return (u'%(title)s has already been recorded in archive'
 | 
			
		||||
                    % info_dict)
 | 
			
		||||
            return (u'%s has already been recorded in archive'
 | 
			
		||||
                    % info_dict.get('title', info_dict.get('id', u'video')))
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
@@ -454,7 +456,7 @@ class YoutubeDL(object):
 | 
			
		||||
                                     ie_key=ie_result.get('ie_key'),
 | 
			
		||||
                                     extra_info=extra_info)
 | 
			
		||||
        elif result_type == 'playlist':
 | 
			
		||||
            self.add_extra_info(ie_result, extra_info)
 | 
			
		||||
 | 
			
		||||
            # We process each entry in the playlist
 | 
			
		||||
            playlist = ie_result.get('title', None) or ie_result.get('id', None)
 | 
			
		||||
            self.to_screen(u'[download] Downloading playlist: %s' % playlist)
 | 
			
		||||
@@ -484,6 +486,12 @@ class YoutubeDL(object):
 | 
			
		||||
                    'webpage_url': ie_result['webpage_url'],
 | 
			
		||||
                    'extractor_key': ie_result['extractor_key'],
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                reason = self._match_entry(entry)
 | 
			
		||||
                if reason is not None:
 | 
			
		||||
                    self.to_screen(u'[download] ' + reason)
 | 
			
		||||
                    continue
 | 
			
		||||
 | 
			
		||||
                entry_result = self.process_ie_result(entry,
 | 
			
		||||
                                                      download=download,
 | 
			
		||||
                                                      extra_info=extra)
 | 
			
		||||
@@ -810,7 +818,16 @@ class YoutubeDL(object):
 | 
			
		||||
        fn = self.params.get('download_archive')
 | 
			
		||||
        if fn is None:
 | 
			
		||||
            return False
 | 
			
		||||
        vid_id = info_dict['extractor'] + u' ' + info_dict['id']
 | 
			
		||||
        extractor = info_dict.get('extractor_id')
 | 
			
		||||
        if extractor is None:
 | 
			
		||||
            if 'id' in info_dict:
 | 
			
		||||
                extractor = info_dict.get('ie_key')  # key in a playlist
 | 
			
		||||
        if extractor is None:
 | 
			
		||||
            return False  # Incomplete video information
 | 
			
		||||
        # Future-proof against any change in case
 | 
			
		||||
        # and backwards compatibility with prior versions
 | 
			
		||||
        extractor = extractor.lower()
 | 
			
		||||
        vid_id = extractor + u' ' + info_dict['id']
 | 
			
		||||
        try:
 | 
			
		||||
            with locked_file(fn, 'r', encoding='utf-8') as archive_file:
 | 
			
		||||
                for line in archive_file:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user