|
@@ -22,6 +22,8 @@ __license__ = 'Public Domain'
|
|
|
__version__ = '2012.02.27'
|
|
|
|
|
|
UPDATE_URL = 'https://raw.github.com/rg3/youtube-dl/master/youtube-dl'
|
|
|
+UPDATE_URL_VERSION = 'https://raw.github.com/rg3/youtube-dl/master/LATEST_VERSION'
|
|
|
+UPDATE_URL_EXE = 'https://raw.github.com/rg3/youtube-dl/master/youtube-dl.exe'
|
|
|
|
|
|
|
|
|
import cookielib
|
|
@@ -44,33 +46,62 @@ from PostProcessing import *
|
|
|
def updateSelf(downloader, filename):
|
|
|
''' Update the program file with the latest version from the repository '''
|
|
|
# Note: downloader only used for options
|
|
|
+
|
|
|
if not os.access(filename, os.W_OK):
|
|
|
sys.exit('ERROR: no write permissions on %s' % filename)
|
|
|
|
|
|
downloader.to_screen(u'Updating to latest version...')
|
|
|
|
|
|
- try:
|
|
|
+ urlv = urllib2.urlopen(UPDATE_URL_VERSION)
|
|
|
+ newversion = urlv.read().strip()
|
|
|
+ if newversion == __version__:
|
|
|
+ downloader.to_screen(u'youtube-dl is up-to-date (' + __version__ + ')')
|
|
|
+ return
|
|
|
+ urlv.close()
|
|
|
+
|
|
|
+ if hasattr(sys, "frozen"): #py2exe
|
|
|
+ directory = os.path.dirname(filename)
|
|
|
+ exe = os.path.abspath(filename)
|
|
|
+ if not os.access(directory, os.W_OK):
|
|
|
+ sys.exit('ERROR: no write permissions on %s' % directory)
|
|
|
+
|
|
|
+ try:
|
|
|
+ urllib.urlretrieve(UPDATE_URL_EXE, exe + '.new')
|
|
|
+ except (IOError, OSError), err:
|
|
|
+ sys.exit('ERROR: unable to download latest version')
|
|
|
+
|
|
|
+ try:
|
|
|
+ bat = os.path.join(directory, 'youtube-dl-updater.bat')
|
|
|
+ b = open(bat, 'w')
|
|
|
+
|
|
|
+ print >> b, """
|
|
|
+timeout /t 5 /nobreak
|
|
|
+move /Y "%s.new" "%s"
|
|
|
+del "%s"
|
|
|
+ """ %(exe, exe, bat)
|
|
|
+
|
|
|
+ b.close()
|
|
|
+
|
|
|
+ os.startfile(bat)
|
|
|
+ except (IOError, OSError), err:
|
|
|
+ sys.exit('ERROR: unable to overwrite current version')
|
|
|
+
|
|
|
+ else:
|
|
|
try:
|
|
|
urlh = urllib2.urlopen(UPDATE_URL)
|
|
|
newcontent = urlh.read()
|
|
|
-
|
|
|
- vmatch = re.search("__version__ = '([^']+)'", newcontent)
|
|
|
- if vmatch is not None and vmatch.group(1) == __version__:
|
|
|
- downloader.to_screen(u'youtube-dl is up-to-date (' + __version__ + ')')
|
|
|
- return
|
|
|
- finally:
|
|
|
urlh.close()
|
|
|
- except (IOError, OSError), err:
|
|
|
- sys.exit('ERROR: unable to download latest version')
|
|
|
+ except (IOError, OSError), err:
|
|
|
+ sys.exit('ERROR: unable to download latest version')
|
|
|
|
|
|
- try:
|
|
|
- outf = open(filename, 'wb')
|
|
|
try:
|
|
|
- outf.write(newcontent)
|
|
|
- finally:
|
|
|
- outf.close()
|
|
|
- except (IOError, OSError), err:
|
|
|
- sys.exit('ERROR: unable to overwrite current version')
|
|
|
+ outf = open(filename, 'wb')
|
|
|
+ try:
|
|
|
+ outf.write(newcontent)
|
|
|
+ finally:
|
|
|
+ outf.close()
|
|
|
+ except (IOError, OSError), err:
|
|
|
+ sys.exit('ERROR: unable to overwrite current version')
|
|
|
|
|
|
downloader.to_screen(u'Updated youtube-dl. Restart youtube-dl to use the new version.')
|
|
|
|