From 4b11bd00c5f4b379893a5296bfa903d02790bcc7 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sat, 15 Apr 2017 15:24:08 -0700 Subject: [PATCH] Added autoupdate settings to Settings, and also to the settings dialog --- onionshare/settings.py | 4 +- onionshare_gui/settings_dialog.py | 68 ++++++++++++++++++++++++++----- share/locale/en.json | 5 +++ 3 files changed, 66 insertions(+), 11 deletions(-) diff --git a/onionshare/settings.py b/onionshare/settings.py index 0132a1c3..2e0b68e7 100644 --- a/onionshare/settings.py +++ b/onionshare/settings.py @@ -42,7 +42,9 @@ class Settings(object): 'auth_type': 'no_auth', 'auth_password': '', 'close_after_first_download': True, - 'use_stealth': False + 'use_stealth': False, + 'use_autoupdate': True, + 'autoupdate_timestamp': None } self._settings = {} self.fill_in_defaults() diff --git a/onionshare_gui/settings_dialog.py b/onionshare_gui/settings_dialog.py index 5e7f957e..447a97df 100644 --- a/onionshare_gui/settings_dialog.py +++ b/onionshare_gui/settings_dialog.py @@ -38,6 +38,8 @@ class SettingsDialog(QtWidgets.QDialog): self.setWindowTitle(strings._('gui_settings_window_title', True)) self.setWindowIcon(QtGui.QIcon(helpers.get_resource_path('images/logo.png'))) + system = platform.system() + # Sharing options # Close after first download @@ -67,6 +69,32 @@ class SettingsDialog(QtWidgets.QDialog): stealth_group = QtWidgets.QGroupBox(strings._("gui_settings_stealth_label", True)) stealth_group.setLayout(stealth_group_layout) + # Automatic updates options + + # Autoupdate + self.autoupdate_checkbox = QtWidgets.QCheckBox() + self.autoupdate_checkbox.setCheckState(QtCore.Qt.Unchecked) + self.autoupdate_checkbox.setText(strings._("gui_settings_autoupdate_option", True)) + + # Last update time + self.autoupdate_timestamp = QtWidgets.QLabel() + + # Check for updates button + self.check_for_updates_button = QtWidgets.QPushButton(strings._('gui_settings_autoupdate_check_button', True)) + self.check_for_updates_button.clicked.connect(self.check_for_updates) + + # Autoupdate options layout + autoupdate_group_layout = QtWidgets.QVBoxLayout() + autoupdate_group_layout.addWidget(self.autoupdate_checkbox) + autoupdate_group_layout.addWidget(self.autoupdate_timestamp) + autoupdate_group_layout.addWidget(self.check_for_updates_button) + autoupdate_group = QtWidgets.QGroupBox(strings._("gui_settings_autoupdate_label", True)) + autoupdate_group.setLayout(autoupdate_group_layout) + + # Autoupdate is only available for Windows and Mac (Linux updates using package manager) + if system != 'Windows' and system != 'Darwin': + autoupdate_group.hide() + # Connection type: either automatic, control port, or socket file # Bundled Tor @@ -74,8 +102,7 @@ class SettingsDialog(QtWidgets.QDialog): self.connection_type_bundled_radio.toggled.connect(self.connection_type_bundled_toggled) # Bundled Tor doesn't work on dev mode in Windows or Mac - p = platform.system() - if (p == 'Windows' or p == 'Darwin') and getattr(sys, 'onionshare_dev_mode', False): + if (system == 'Windows' or system == 'Darwin') and getattr(sys, 'onionshare_dev_mode', False): self.connection_type_bundled_radio.setEnabled(False) # Automatic @@ -140,11 +167,6 @@ class SettingsDialog(QtWidgets.QDialog): self.authenticate_group = QtWidgets.QGroupBox(strings._("gui_settings_authenticate_label", True)) self.authenticate_group.setLayout(authenticate_group_layout) - # Tor networkconnection status - self.tor_status = QtWidgets.QLabel() - self.tor_status.setStyleSheet('color: #666666; padding-top: 10px') - self.tor_status.hide() - # Test tor settings button self.connection_type_test_button = QtWidgets.QPushButton(strings._('gui_settings_connection_type_test_button', True)) self.connection_type_test_button.clicked.connect(self.test_tor_clicked) @@ -158,7 +180,6 @@ class SettingsDialog(QtWidgets.QDialog): connection_type_group_layout.addWidget(self.connection_type_control_port_extras) connection_type_group_layout.addWidget(self.connection_type_socket_file_extras) connection_type_group_layout.addWidget(self.authenticate_group) - connection_type_group_layout.addWidget(self.tor_status) connection_type_group_layout.addWidget(self.connection_type_test_button) connection_type_group = QtWidgets.QGroupBox(strings._("gui_settings_connection_type_label", True)) connection_type_group.setLayout(connection_type_group_layout) @@ -172,15 +193,22 @@ class SettingsDialog(QtWidgets.QDialog): buttons_layout.addWidget(self.save_button) buttons_layout.addWidget(self.cancel_button) + # Tor network connection status + self.tor_status = QtWidgets.QLabel() + self.tor_status.setStyleSheet('background-color: #ffffff; color: #000000; padding: 10px') + self.tor_status.hide() + # Layout layout = QtWidgets.QVBoxLayout() layout.addWidget(sharing_group) layout.addWidget(stealth_group) + layout.addWidget(autoupdate_group) layout.addWidget(connection_type_group) layout.addStretch() layout.addLayout(buttons_layout) + layout.addWidget(self.tor_status) self.setLayout(layout) - + self.cancel_button.setFocus() # Load settings, and fill them in settings = Settings() @@ -198,6 +226,20 @@ class SettingsDialog(QtWidgets.QDialog): else: self.stealth_checkbox.setCheckState(QtCore.Qt.Unchecked) + use_autoupdate = settings.get('use_autoupdate') + if use_autoupdate: + self.autoupdate_checkbox.setCheckState(QtCore.Qt.Checked) + else: + self.autoupdate_checkbox.setCheckState(QtCore.Qt.Unchecked) + + autoupdate_timestamp = settings.get('autoupdate_timestamp') + if autoupdate_timestamp: + dt = datetime.datetime.fromtimestamp(autoupdate_timestamp) + last_checked = dt.strftime('%B %d, %Y %H:%M') + else: + last_checked = strings._('gui_settings_autoupdate_timestamp_never', True) + self.autoupdate_timestamp.setText(strings._('gui_settings_autoupdate_timestamp', True).format(last_checked)) + connection_type = settings.get('connection_type') if connection_type == 'bundled': if self.connection_type_bundled_radio.isEnabled(): @@ -279,7 +321,7 @@ class SettingsDialog(QtWidgets.QDialog): def test_tor_clicked(self): """ - Test Settings button clicked. With the given settings, see if we can + Test Tor Settings button clicked. With the given settings, see if we can successfully connect and authenticate to Tor. """ settings = self.settings_from_fields() @@ -321,6 +363,12 @@ class SettingsDialog(QtWidgets.QDialog): if settings.get('connection_type') == 'bundled': bundled_cleanup() + def check_for_updates(self): + """ + Check for Updates button clicked. Manually force an update check. + """ + pass + def save_clicked(self): """ Save button clicked. Save current settings to disk. diff --git a/share/locale/en.json b/share/locale/en.json index b288cec7..0d5ba84f 100644 --- a/share/locale/en.json +++ b/share/locale/en.json @@ -59,6 +59,11 @@ "gui_settings_stealth_label": "Stealth (advanced)", "gui_settings_stealth_option": "Create stealth onion services", "gui_settings_stealth_option_details": "This makes OnionShare more secure, but also more difficult for the recipient to connect to it.
More information.", + "gui_settings_autoupdate_label": "Automatic updates", + "gui_settings_autoupdate_option": "Notify me when updates are available", + "gui_settings_autoupdate_timestamp": "Last checked: {}", + "gui_settings_autoupdate_timestamp_never": "Never", + "gui_settings_autoupdate_check_button": "Check For Updates", "gui_settings_sharing_label": "Sharing options", "gui_settings_close_after_first_download_option": "Stop sharing after first download", "gui_settings_connection_type_label": "How should OnionShare connect to Tor?",