Browse Source

corrected -U to support new zipfile and exe (#153) formats

Filippo Valsorda 13 years ago
parent
commit
53e893615d
4 changed files with 66 additions and 21 deletions
  1. 19 5
      build_exe.py
  2. BIN
      youtube-dl
  3. BIN
      youtube-dl.exe
  4. 47 16
      youtube_dl/__init__.py

+ 19 - 5
build_exe.py

@@ -1,11 +1,12 @@
 from distutils.core import setup
 import py2exe
-import sys
+import sys, os
 
 # If run without args, build executables
 if len(sys.argv) == 1:
     sys.argv.append("py2exe")
 
+os.chdir(os.path.dirname(sys.argv[0]))
 sys.path.append('./youtube_dl')
 
 options = {
@@ -21,10 +22,23 @@ console = [{
     "dest_base": "youtube-dl",
 }]
 
-setup(
-    console = console,
-    options = {"py2exe": options},
-    zipfile = None,
+init_file = open('./youtube_dl/__init__.py')
+for line in init_file.readlines():
+    if line.startswith('__version__'):
+        version = line[11:].strip(" ='\n")
+        break
+else:
+    version = ''
+
+setup(name='youtube-dl',
+      version=version,
+      description='Small command-line program to download videos from YouTube.com and other video sites',
+      url='https://github.com/rg3/youtube-dl',
+      packages=['youtube_dl'],
+      
+      console = console,
+      options = {"py2exe": options},
+      zipfile = None,
 )
 
 import shutil

BIN
youtube-dl


BIN
youtube-dl.exe


+ 47 - 16
youtube_dl/__init__.py

@@ -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.')