diff --git a/files/nw-versions.txt b/files/nw-versions.txt index e53bd72..e1efe95 100644 --- a/files/nw-versions.txt +++ b/files/nw-versions.txt @@ -1,15 +1,21 @@ +0.10.5 +0.10.4 +0.10.3 +0.10.2 +0.10.1 +0.10.0-rc2 +0.10.0-rc1 +0.10.0 0.9.2 0.9.1 0.9.0 +0.8.6 0.8.5 0.8.4 0.8.3 0.8.2 0.8.1 0.8.0 -0.7.5 -0.7.4 -0.7.3 0.7.2 0.7.1 0.7.0 @@ -17,12 +23,3 @@ 0.6.2 0.6.1 0.6.0 -0.5.1 -0.5.0 -0.4.2 -0.4.1 -0.3.7 -0.3.6 -0.3.5 -0.3.4 -0.3.3 diff --git a/main.py b/main.py index 58efbc2..fee2ee7 100644 --- a/main.py +++ b/main.py @@ -1,10 +1,16 @@ from utils import zip_files, join_files, log, get_temp_dir + +import urllib2, re import sys, os, glob, json, re, shutil, stat, tarfile import zipfile, traceback, platform, filecmp + from PySide import QtGui, QtCore from PySide.QtGui import QApplication from PySide.QtNetwork import QHttp from PySide.QtCore import QUrl, QFileInfo, QFile, QIODevice + +from distutils.version import LooseVersion + from zipfile import ZipFile from tarfile import TarFile @@ -48,6 +54,8 @@ class Setting(object): self.file_types = file_types self.default_value = kwargs.pop('default_value', None) + self.button = kwargs.pop('button', None) + self.button_callback = kwargs.pop('button_callback', None) self.set_extra_attributes_from_keyword_args(kwargs) @@ -144,33 +152,44 @@ class MainWindow(QtGui.QWidget): export_settings = {'windows': Setting('windows', default_value=False, type='check', url=base_url+'node-webkit-v{}-win-ia32.zip', - extract_files=['nw.exe', 'nw.pak', 'icudt.dll', 'libEGL.dll', 'libGLESv2.dll'], - dest_files=['nw.exe', 'nw.pak', 'icudt.dll', 'libEGL.dll', 'libGLESv2.dll']), + extract_files=['nw.exe', 'nw.pak', 'icudtl.dat', 'libEGL.dll', 'libGLESv2.dll'], + dest_files=['nw.exe', 'nw.pak', 'icudtl.dat', 'libEGL.dll', 'libGLESv2.dll']), 'mac': Setting('mac', default_value=False, type='check', url=base_url+'node-webkit-v{}-osx-ia32.zip', extract_file='node-webkit.app/Contents/Frameworks/node-webkit Framework.framework/node-webkit Framework', extract_files=['node-webkit.app/Contents/Frameworks/node-webkit Framework.framework/node-webkit Framework', - 'node-webkit.app/Contents/Frameworks/node-webkit Framework.framework/Resources/nw.pak'], + 'node-webkit.app/Contents/Frameworks/node-webkit Framework.framework/Resources/nw.pak', + 'node-webkit.app/Contents/Frameworks/node-webkit Framework.framework/Resources/icudtl.dat'], dest_files=[os.path.join('node-webkit.app','Contents', 'Frameworks','node-webkit Framework.framework', 'node-webkit Framework'), os.path.join('node-webkit.app','Contents', 'Frameworks','node-webkit Framework.framework', - 'Resources', 'nw.pak')]), + 'Resources', 'nw.pak'), + os.path.join('node-webkit.app','Contents', + 'Frameworks','node-webkit Framework.framework', + 'Resources', 'icudtl.dat')] + ), 'linux-x64': Setting('linux-x64', default_value=False, type='check', url=base_url+'node-webkit-v{}-linux-x64.tar.gz', extract_file='node-webkit-v{}-linux-x64/nw', extract_files=['node-webkit-v{}-linux-x64/nw', - 'node-webkit-v{}-linux-x64/nw.pak'], - dest_files=['nw', 'nw.pak']), + 'node-webkit-v{}-linux-x64/nw.pak', + 'node-webkit-v{}-linux-x64/icudtl.dat'], + dest_files=['nw', 'nw.pak', 'icudtl.dat']), 'linux-x32': Setting('linux-x32', default_value=False, type='check', url=base_url+'node-webkit-v{}-linux-ia32.tar.gz', extract_file='node-webkit-v{}-linux-ia32/nw', extract_files=['node-webkit-v{}-linux-ia32/nw', - 'node-webkit-v{}-linux-ia32/nw.pak'], + 'node-webkit-v{}-linux-ia32/nw.pak', + 'node-webkit-v{}-linux-ia32/icudtl.dat'], dest_files=['nw', 'nw.pak'])} - download_settings = {'nw_version':Setting('nw_version', 'Node-webkit version', default_value='0.9.2', values=[], type='list'), + def update_nw_versions(self, button): + self.getVersions() + + + download_settings = {'nw_version':Setting('nw_version', 'Node-webkit version', default_value='0.9.2', values=[], type='list', button='Update NW Versions', button_callback=update_nw_versions), 'force_download': Setting('force_download', default_value=False, type='check')} _setting_groups = [app_settings, webkit_settings, window_settings, export_settings, download_settings] @@ -206,6 +225,7 @@ class MainWindow(QtGui.QWidget): self.option_settings_enabled(False) self.setWindowTitle("Web2Executable") + self.update_nw_versions(None) def setup_nw_versions(self): nw_version = self.getSetting('nw_version') @@ -447,6 +467,44 @@ class MainWindow(QtGui.QWidget): self.thread.finished.connect(callback) self.thread.start() + def getVersionsInBackground(self): + self.ex_button.setEnabled(False) + self.runInBackground('getVersions', self.doneGettingVersions) + + def getVersions(self): + response = urllib2.urlopen('https://raw.githubusercontent.com/rogerwang/node-webkit/master/CHANGELOG.md') + html = response.read() + + nw_version = self.getSetting('nw_version') + + old_versions = set(nw_version.values) + new_versions = set(re.findall('(\S+) / \S+', html)) + + versions = sorted(list(old_versions.union(new_versions)), key=LooseVersion, reverse=True) + nw_version.values = versions + combo = self.findChildByName(nw_version.name) + + combo.clear() + combo.addItems(nw_version.values) + + try: + f = open(os.path.join(CWD, 'files','nw-versions.txt'), 'w') + for v in nw_version.values: + f.write(v+os.linesep) + except IOError as e: + error = ''.join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])) + self.show_error(error) + self.enable_ui_after_error() + finally: + f.close() + + + def doneGettingVersions(self): + self.ex_button.setEnabled(self.requiredSettingsFilled()) + self.progress_text = 'Done retrieving versions.' + + self.enableUI() + def makeOutputFilesInBackground(self): self.ex_button.setEnabled(False) self.runInBackground('makeOutputDirs', self.doneMakingFiles) @@ -829,6 +887,10 @@ class MainWindow(QtGui.QWidget): setting = self.getSetting(name) + button = None + if setting.button: + button = QtGui.QPushButton(setting.button) + button.clicked.connect(lambda: setting.button_callback(self, button)) combo = QtGui.QComboBox() combo.setObjectName(setting.name) @@ -844,6 +906,8 @@ class MainWindow(QtGui.QWidget): combo.setCurrentIndex(default_index) hlayout.addWidget(combo) + if button: + hlayout.addWidget(button) return hlayout