Improve video ordinal assignment method (fixes issue #149)
authorRicardo Garcia <sarbalap+freshmeat@gmail.com>
Tue, 13 Jul 2010 17:37:07 +0000 (19:37 +0200)
committerRicardo Garcia <sarbalap+freshmeat@gmail.com>
Sun, 31 Oct 2010 10:28:17 +0000 (11:28 +0100)
youtube-dl

index 481f9f400422149f552a490847558fb8cf43e960..56500d2201f3fec363e4a8791b402ea62499e219 100755 (executable)
@@ -387,6 +387,10 @@ class FileDownloader(object):
                        self.to_stdout(u'[download] Download completed')
                else:
                        self.to_stdout(u'')
+       
+       def increment_downloads(self):
+               """Increment the ordinal that assigns a number to each file."""
+               self._num_downloads += 1
 
        def process_info(self, info_dict):
                """Process a single dictionary returned by an InfoExtractor."""
@@ -582,7 +586,6 @@ class FileDownloader(object):
                                try:
                                        (stream, filename) = sanitize_open(filename, open_mode)
                                        self.report_destination(filename)
-                                       self._num_downloads += 1
                                except (OSError, IOError), err:
                                        self.trouble('ERROR: unable to open for writing: %s' % str(err))
                                        return False
@@ -809,6 +812,10 @@ class YoutubeIE(InfoExtractor):
                if mobj is None:
                        self._downloader.trouble(u'ERROR: invalid URL: %s' % url)
                        return
+
+               # At this point we have a new video
+               if self._downloader is not None:
+                       self._downloader.increment_downloads()
                video_id = mobj.group(2)
 
                # Downloader parameters
@@ -1035,6 +1042,10 @@ class MetacafeIE(InfoExtractor):
                        self._youtube_ie.extract('http://www.youtube.com/watch?v=%s' % mobj2.group(1))
                        return
 
+               # At this point we have a new video
+               if self._downloader is not None:
+                       self._downloader.increment_downloads()
+
                simple_title = mobj.group(2).decode('utf-8')
                video_extension = 'flv'
 
@@ -1124,6 +1135,9 @@ class DailymotionIE(InfoExtractor):
                        self._downloader.trouble(u'ERROR: invalid URL: %s' % url)
                        return
 
+               # At this point we have a new video
+               if self._downloader is not None:
+                       self._downloader.increment_downloads()
                video_id = mobj.group(1)
 
                simple_title = mobj.group(2).decode('utf-8')
@@ -1209,6 +1223,9 @@ class GoogleIE(InfoExtractor):
                        self._downloader.trouble(u'ERROR: Invalid URL: %s' % url)
                        return
 
+               # At this point we have a new video
+               if self._downloader is not None:
+                       self._downloader.increment_downloads()
                video_id = mobj.group(1)
 
                video_extension = 'mp4'
@@ -1317,6 +1334,9 @@ class PhotobucketIE(InfoExtractor):
                        self._downloader.trouble(u'ERROR: Invalid URL: %s' % url)
                        return
 
+               # At this point we have a new video
+               if self._downloader is not None:
+                       self._downloader.increment_downloads()
                video_id = mobj.group(1)
 
                video_extension = 'flv'
@@ -1392,13 +1412,16 @@ class YahooIE(InfoExtractor):
        def _real_initialize(self):
                return
 
-       def _real_extract(self, url):
+       def _real_extract(self, url, new_video=True):
                # Extract ID from URL
                mobj = re.match(self._VALID_URL, url)
                if mobj is None:
                        self._downloader.trouble(u'ERROR: Invalid URL: %s' % url)
                        return
 
+               # At this point we have a new video
+               if self._downloader is not None and new_video:
+                       self._downloader.increment_downloads()
                video_id = mobj.group(2)
                video_extension = 'flv'
 
@@ -1425,7 +1448,7 @@ class YahooIE(InfoExtractor):
                        yahoo_vid = mobj.group(1)
 
                        url = 'http://video.yahoo.com/watch/%s/%s' % (yahoo_vid, yahoo_id)
-                       return self._real_extract(url)
+                       return self._real_extract(url, new_video=False)
 
                # Retrieve video webpage to extract further information
                request = urllib2.Request(url)
@@ -1544,6 +1567,10 @@ class GenericIE(InfoExtractor):
                return
 
        def _real_extract(self, url):
+               # At this point we have a new video
+               if self._downloader is not None:
+                       self._downloader.increment_downloads()
+
                video_id = url.split('/')[-1]
                request = urllib2.Request(url)
                try: