[Pkg-privacy-commits] [torbrowser-launcher] 05/39: Port Settings from gtk2 to Qt5, and also switch from python2 to python3
Roger Shimizu
rosh at debian.org
Tue Mar 27 15:41:50 UTC 2018
This is an automated email from the git hooks/post-receive script.
rosh pushed a commit to branch rosh/experimental
in repository torbrowser-launcher.
commit f8a4f746440a88588f91512a6c00c00ca81fc7ba
Author: Micah Lee <micah at micahflee.com>
Date: Mon Mar 19 09:29:12 2018 -0700
Port Settings from gtk2 to Qt5, and also switch from python2 to python3
---
torbrowser-launcher | 2 +-
torbrowser_launcher/__init__.py | 32 +++-
torbrowser_launcher/common.py | 12 +-
torbrowser_launcher/settings.py | 323 +++++++++++++++++-----------------------
4 files changed, 162 insertions(+), 207 deletions(-)
diff --git a/torbrowser-launcher b/torbrowser-launcher
index a8cfd43..e811242 100755
--- a/torbrowser-launcher
+++ b/torbrowser-launcher
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2
+#!/usr/bin/env python3
"""
Tor Browser Launcher
https://github.com/micahflee/torbrowser-launcher/
diff --git a/torbrowser_launcher/__init__.py b/torbrowser_launcher/__init__.py
index 57284a7..ccd4e33 100644
--- a/torbrowser_launcher/__init__.py
+++ b/torbrowser_launcher/__init__.py
@@ -26,16 +26,29 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
"""
-from __future__ import print_function
+import os
+import sys
+import argparse
-import os, sys, argparse
+from PyQt5 import QtCore, QtWidgets
from .common import Common, SHARE
from .settings import Settings
from .launcher import Launcher
+
+class Application(QtWidgets.QApplication):
+ """
+ Qt's QApplication class. It has been overridden to support threads.
+ """
+ def __init__(self):
+ self.setAttribute(QtCore.Qt.AA_X11InitThreads, True)
+ QtWidgets.QApplication.__init__(self, sys.argv)
+ self.installEventFilter(self)
+
+
def main():
- # parse arguments
+ # Parse arguments
parser = argparse.ArgumentParser()
parser.add_argument('--settings', action='store_true', dest='settings', help='Open Tor Browser Launcher settings')
parser.add_argument('url', nargs='*', help='URL to load')
@@ -44,7 +57,7 @@ def main():
settings = bool(args.settings)
url_list = args.url
- # load the version and print the banner
+ # Load the version and print the banner
with open(os.path.join(SHARE, 'version')) as buf:
tor_browser_launcher_version = buf.read().strip()
@@ -54,14 +67,17 @@ def main():
print('https://github.com/micahflee/torbrowser-launcher')
common = Common(tor_browser_launcher_version)
+ app = Application()
if settings:
- # settings mode
- app = Settings(common)
+ # Settings mode
+ gui = Settings(common)
else:
- # launcher mode
- app = Launcher(common, url_list)
+ # Launcher mode
+ gui = Launcher(common, url_list)
+
+ sys.exit(app.exec_())
if __name__ == "__main__":
main()
diff --git a/torbrowser_launcher/common.py b/torbrowser_launcher/common.py
index a304786..e012c4b 100644
--- a/torbrowser_launcher/common.py
+++ b/torbrowser_launcher/common.py
@@ -26,8 +26,6 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
"""
-from __future__ import print_function
-
import os
import sys
import platform
@@ -43,18 +41,11 @@ try:
except ImportError:
gpgme_support = False
-import pygtk
-pygtk.require('2.0')
-import gtk
-
SHARE = os.getenv('TBL_SHARE', sys.prefix+'/share/torbrowser-launcher')
import gettext
gettext.install('torbrowser-launcher')
-from twisted.internet import gtk2reactor
-gtk2reactor.install()
-
# We're looking for output which:
#
# 1. The first portion must be `[GNUPG:] IMPORT_OK`
@@ -64,8 +55,7 @@ gnupg_import_ok_pattern = re.compile(
"(\[GNUPG\:\]) (IMPORT_OK) ([0-9]|[1]?[0-5]) ([A-F0-9]{40})")
-class Common:
-
+class Common(object):
def __init__(self, tbl_version):
self.tbl_version = tbl_version
diff --git a/torbrowser_launcher/settings.py b/torbrowser_launcher/settings.py
index e321566..b7b361b 100644
--- a/torbrowser_launcher/settings.py
+++ b/torbrowser_launcher/settings.py
@@ -26,232 +26,181 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
"""
-import subprocess, time, shutil
+import subprocess
+import shutil
-import pygtk
-pygtk.require('2.0')
-import gtk
+from PyQt5 import QtCore, QtWidgets, QtGui
-class Settings:
+class Settings(QtWidgets.QMainWindow):
+ """
+ Settings window.
+ """
def __init__(self, common):
+ super(Settings, self).__init__()
+
self.common = common
- # set up the window
- self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
- self.window.set_title(_("Tor Browser Launcher Settings"))
- self.window.set_icon_from_file(self.common.paths['icon_file'])
- self.window.set_position(gtk.WIN_POS_CENTER)
- self.window.set_border_width(10)
- self.window.connect("delete_event", self.delete_event)
- self.window.connect("destroy", self.destroy)
-
- # build the rest of the UI
- self.box = gtk.VBox(False, 10)
- self.window.add(self.box)
- self.box.show()
-
- self.hbox = gtk.HBox(False, 10)
- self.box.pack_start(self.hbox, True, True, 0)
- self.hbox.show()
-
- self.settings_box = gtk.VBox(False, 10)
- self.hbox.pack_start(self.settings_box, True, True, 0)
- self.settings_box.show()
-
- self.status_box = gtk.VBox(False, 10)
- self.hbox.pack_start(self.status_box, True, True, 0)
- self.status_box.show()
-
- # download over system tor
+ # Set up the window
+ self.setWindowTitle(_("Tor Browser Launcher Settings"))
+ self.setWindowIcon(QtGui.QIcon(self.common.paths['icon_file']))
+
+ # Download over system tor
+ self.tor_download_checkbox = QtWidgets.QCheckBox()
+ self.tor_download_checkbox.setText(_("Download over system Tor"))
+
try:
import txsocksx
self.txsocks_found = True
except ImportError:
self.txsocks_found = False
- self.tor_download_checkbox = gtk.CheckButton(_("Download over system Tor"))
- if self.txsocks_found:
- self.tor_download_checkbox.set_tooltip_text(_("This option is only available when using a system wide Tor installation."))
- else:
- self.tor_download_checkbox.set_tooltip_text(_("This option requires the python-txsocksx package."))
- self.settings_box.pack_start(self.tor_download_checkbox, True, True, 0)
- if self.common.settings['download_over_tor'] and self.txsocks_found:
- self.tor_download_checkbox.set_active(True)
+ if self.txsocks_found:
+ self.tor_download_checkbox.setToolTip(_("This option is only available when using a system wide Tor installation."))
else:
- self.tor_download_checkbox.set_active(False)
+ self.tor_download_checkbox.setToolTip(_("This option requires the python-txsocksx package."))
+ self.tor_download_checkbox.setEnabled(False)
- if self.txsocks_found == False:
- self.tor_download_checkbox.set_sensitive(False)
+ self.tor_download_checkbox.setCheckState(self.common.settings['download_over_tor'] and self.txsocks_found)
- self.tor_download_checkbox.show()
-
- # modem sound
- self.modem_checkbox = gtk.CheckButton(_("Play modem sound, because Tor is slow :]"))
- self.settings_box.pack_start(self.modem_checkbox, True, True, 0)
+ # Modem sound
+ self.modem_checkbox = QtWidgets.QCheckBox()
+ self.modem_checkbox.setText(_("Play modem sound, because Tor is slow :]"))
try:
import pygame
- if self.common.settings['modem_sound']:
- self.modem_checkbox.set_active(True)
- else:
- self.modem_checkbox.set_active(False)
+ self.modem_checkbox.setCheckState(bool(self.common.settings['modem_sound']))
except ImportError:
- self.modem_checkbox.set_active(False)
- self.modem_checkbox.set_sensitive(False)
- self.modem_checkbox.set_tooltip_text(_("This option requires python-pygame to be installed"))
- self.modem_checkbox.show()
-
- # force en-US, only display if language isn't already en-US
- if self.common.language != 'en-US':
- self.force_en_checkbox = gtk.CheckButton(_("Force downloading English version of Tor Browser"))
- if self.common.settings['force_en-US']:
- self.force_en_checkbox.set_active(True)
- else:
- self.force_en_checkbox.set_active(False)
- self.settings_box.pack_start(self.force_en_checkbox, True, True, 0)
- self.force_en_checkbox.show()
+ self.modem_checkbox.setCheckState(False)
+ self.modem_checkbox.setEnabled(False)
+ self.modem_checkbox.setToolTip(_("This option requires python-pygame to be installed"))
+
+ # Force en-US, only display if language isn't already en-US
+ self.force_en_checkbox = QtWidgets.QCheckBox()
+ self.force_en_checkbox.setText(_("Force downloading English version of Tor Browser"))
+ self.force_en_checkbox.setCheckState(bool(self.common.settings['force_en-US']))
+ if self.common.language == 'en-US':
+ self.force_en_checkbox.hide()
# Tor SOCKS address
- self.tor_addr_box = gtk.HBox(False, 10)
- self.settings_box.pack_start(self.tor_addr_box, True, True, 0)
- self.tor_addr_box.show()
+ tor_addr_label = QtWidgets.QLabel(_('Tor server'))
+ self.tor_addr = QtWidgets.QLineEdit()
+ self.tor_addr.setText(self.common.settings['tor_socks_address'])
+ tor_addr_layout = QtWidgets.QHBoxLayout()
+ tor_addr_layout.addWidget(tor_addr_label)
+ tor_addr_layout.addWidget(self.tor_addr)
+
+ # Settings layout
+ settings_layout = QtWidgets.QVBoxLayout()
+ settings_layout.addWidget(self.tor_download_checkbox)
+ settings_layout.addWidget(self.modem_checkbox)
+ settings_layout.addWidget(self.force_en_checkbox)
+ settings_layout.addLayout(tor_addr_layout)
+
+ # Status
+ status_label = QtWidgets.QLabel()
+ if(self.common.settings['installed']):
+ status_label.setText(_('Status: Installed'))
+ else:
+ status_label.setText(_('Status: Not Installed'))
- self.tor_addr_label = gtk.Label(_('Tor server'))
- self.tor_addr_label.set_line_wrap(True)
- self.tor_addr_box.pack_start(self.tor_addr_label, True, True, 0)
- self.tor_addr_label.show()
+ # Install button
+ install_button = QtWidgets.QPushButton(_("Install Tor Browser"))
+ install_button.clicked.connect(self.install)
+ # TODO: add apply icon
- self.tor_addr = gtk.Entry()
- self.tor_addr.set_text(self.common.settings['tor_socks_address'])
- self.tor_addr_box.pack_start(self.tor_addr, True, True, 0)
- self.tor_addr.show()
+ # Reinstall buttons
+ reinstall_button = QtWidgets.QPushButton(_("Reinstall Tor Browser"))
+ reinstall_button.clicked.connect(self.reinstall)
+ # TODO: add apply icon
- # status
if(self.common.settings['installed']):
- self.status_label = gtk.Label(_('Status: Installed'))
+ install_button.hide()
+ reinstall_button.show()
else:
- self.status_label = gtk.Label(_('Status: Not Installed'))
- self.status_label.set_line_wrap(True)
- self.status_box.pack_start(self.status_label, True, True, 0)
- self.status_label.show()
+ install_button.show()
+ reinstall_button.hide()
- if(self.common.settings['installed']):
- # reinstall button
- reinstall_image = gtk.Image()
- reinstall_image.set_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_BUTTON)
- self.reinstall_button = gtk.Button(_("Reinstall Tor Browser"))
- self.reinstall_button.set_image(reinstall_image)
- self.reinstall_button.connect("clicked", self.reinstall, None)
- self.status_box.add(self.reinstall_button)
- self.reinstall_button.show()
- else:
- # install button
- install_image = gtk.Image()
- install_image.set_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_BUTTON)
- self.install_button = gtk.Button(_("Install Tor Browser"))
- self.install_button.set_image(install_image)
- self.install_button.connect("clicked", self.install, None)
- self.status_box.add(self.install_button)
- self.install_button.show()
-
- # mirrors
- self.mirrors_box = gtk.HBox(False, 10)
- self.box.pack_start(self.mirrors_box, True, True, 0)
- self.mirrors_box.show()
-
- self.mirrors_label = gtk.Label(_('Mirror'))
- self.mirrors_label.set_line_wrap(True)
- self.mirrors_box.pack_start(self.mirrors_label, True, True, 0)
- self.mirrors_label.show()
-
- self.mirrors = gtk.combo_box_new_text()
+ # Status layout
+ status_layout = QtWidgets.QVBoxLayout()
+ status_layout.addWidget(status_label)
+ status_layout.addWidget(install_button)
+ status_layout.addWidget(reinstall_button)
+
+ # Top layout
+ top_layout = QtWidgets.QHBoxLayout()
+ top_layout.addLayout(settings_layout)
+ top_layout.addLayout(status_layout)
+
+ # Mirror
+ mirror_label = QtWidgets.QLabel(_('Mirror'))
+
+ self.mirror = QtWidgets.QComboBox()
for mirror in self.common.mirrors:
- self.mirrors.append_text(mirror)
+ self.mirror.addItem(mirror)
+
if self.common.settings['mirror'] in self.common.mirrors:
- self.mirrors.set_active(self.common.mirrors.index(self.common.settings['mirror']))
- else:
- self.mirrors.set_active(0)
- self.mirrors_box.pack_start(self.mirrors, True, True, 0)
- self.mirrors.show()
-
- # button box
- self.button_box = gtk.HButtonBox()
- self.button_box.set_layout(gtk.BUTTONBOX_SPREAD)
- self.box.pack_start(self.button_box, True, True, 0)
- self.button_box.show()
-
- # save and exit button
- save_exit_image = gtk.Image()
- save_exit_image.set_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_BUTTON)
- self.save_exit_button = gtk.Button(_("Save & Exit"))
- self.save_exit_button.set_image(save_exit_image)
- self.save_exit_button.connect("clicked", self.save_exit, None)
- self.button_box.add(self.save_exit_button)
- self.save_exit_button.show()
-
- # cancel button
- cancel_image = gtk.Image()
- cancel_image.set_from_stock(gtk.STOCK_CANCEL, gtk.ICON_SIZE_BUTTON)
- self.cancel_button = gtk.Button(_("Cancel"))
- self.cancel_button.set_image(cancel_image)
- self.cancel_button.connect("clicked", self.destroy, None)
- self.button_box.add(self.cancel_button)
- self.cancel_button.show()
-
- # show the window
- self.window.show()
-
- # start gtk
- gtk.main()
-
- # UI Callback for update over tor/use system tor
- def on_system_tor_clicked(self, event):
- if self.txsocks_found:
- value = self.system_tor_checkbox.get_active()
+ self.mirror.setCurrentIndex(self.mirror.findText(self.common.settings['mirror']))
else:
- value = False
-
- self.tor_download_checkbox.set_active(value)
- self.tor_download_checkbox.set_sensitive(value)
-
- # install
- def install(self, widget, data=None):
+ self.mirror.setCurrentIndex(0)
+
+ mirror_layout = QtWidgets.QHBoxLayout()
+ mirror_layout.addWidget(mirror_label)
+ mirror_layout.addWidget(self.mirror)
+
+ # Save & Exit button
+ self.save_exit_button = QtWidgets.QPushButton(_("Save & Exit"))
+ self.save_exit_button.clicked.connect(self.save_exit)
+ # TODO: add apply icon
+
+ # Cancel button
+ self.cancel_button = QtWidgets.QPushButton(_("Cancel"))
+ self.cancel_button.clicked.connect(self.close)
+ # TODO: add cancel icon
+
+ # Buttons layout
+ buttons_layout = QtWidgets.QHBoxLayout()
+ buttons_layout.addWidget(self.save_exit_button)
+ buttons_layout.addWidget(self.cancel_button)
+
+ # Main layout
+ layout = QtWidgets.QVBoxLayout()
+ layout.addLayout(top_layout)
+ layout.addLayout(mirror_layout)
+ layout.addLayout(buttons_layout)
+
+ central_widget = QtWidgets.QWidget()
+ central_widget.setLayout(layout)
+ self.setCentralWidget(central_widget)
+ self.show()
+
+ # Install
+ def install(self):
self.save()
subprocess.Popen([self.common.paths['tbl_bin']])
- self.destroy(False)
+ self.close()
- # launch
- def reinstall(self, widget, data=None):
+ # Reinstall
+ def reinstall(self):
self.save()
shutil.rmtree(self.common.paths['tbb']['dir'])
subprocess.Popen([self.common.paths['tbl_bin']])
- self.destroy(False)
+ self.close()
- # save and exit
- def save_exit(self, widget, data=None):
+ # Save & Exit
+ def save_exit(self):
self.save()
- self.destroy(False)
+ self.close()
- # save settings
+ # Save settings
def save(self):
- # checkbox options
- self.common.settings['download_over_tor'] = self.tor_download_checkbox.get_active()
- self.common.settings['modem_sound'] = self.modem_checkbox.get_active()
- if hasattr(self, 'force_en_checkbox'):
- self.common.settings['force_en-US'] = self.force_en_checkbox.get_active()
- else:
- self.common.settings['force_en-US'] = False
- self.common.settings['tor_socks_address'] = self.tor_addr.get_text()
+ # Checkbox options
+ self.common.settings['download_over_tor'] = self.tor_download_checkbox.isChecked()
+ self.common.settings['modem_sound'] = self.modem_checkbox.isChecked()
+ self.common.settings['force_en-US'] = self.force_en_checkbox.isChecked()
+ self.common.settings['tor_socks_address'] = self.tor_addr.text()
- # figure out the selected mirror
- self.common.settings['mirror'] = self.common.mirrors[self.mirrors.get_active()]
+ # Figure out the selected mirror
+ self.common.settings['mirror'] = self.mirror.currentText()
- # save them
+ # Save them
self.common.save_settings()
-
- # exit
- def delete_event(self, widget, event, data=None):
- return False
-
- def destroy(self, widget, data=None):
- gtk.main_quit()
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-privacy/packages/torbrowser-launcher.git
More information about the Pkg-privacy-commits
mailing list