diff options
author | Micah Lee <micah@micahflee.com> | 2019-01-20 15:42:09 -0800 |
---|---|---|
committer | Micah Lee <micah@micahflee.com> | 2019-01-20 15:42:09 -0800 |
commit | 0ef0659e2fe08f1e50af5b7a31735234cac8b71f (patch) | |
tree | b68861099a596f17309a8336d8fb47f27913137d /onionshare_gui | |
parent | b75757ee49f58f77f524da9ec32cda8062697628 (diff) | |
parent | 45b3105b79af01ee500b63349771764172a91462 (diff) | |
download | onionshare-0ef0659e2fe08f1e50af5b7a31735234cac8b71f.tar.gz onionshare-0ef0659e2fe08f1e50af5b7a31735234cac8b71f.zip |
Merge branch 'develop' into 866_receive_mode_crash
Diffstat (limited to 'onionshare_gui')
-rw-r--r-- | onionshare_gui/mode/__init__.py | 6 | ||||
-rw-r--r-- | onionshare_gui/mode/history.py | 81 | ||||
-rw-r--r-- | onionshare_gui/mode/receive_mode/__init__.py | 27 | ||||
-rw-r--r-- | onionshare_gui/mode/share_mode/__init__.py | 24 | ||||
-rw-r--r-- | onionshare_gui/onionshare_gui.py | 7 | ||||
-rw-r--r-- | onionshare_gui/settings_dialog.py | 40 |
6 files changed, 90 insertions, 95 deletions
diff --git a/onionshare_gui/mode/__init__.py b/onionshare_gui/mode/__init__.py index bd363915..4fe335e7 100644 --- a/onionshare_gui/mode/__init__.py +++ b/onionshare_gui/mode/__init__.py @@ -312,12 +312,6 @@ class Mode(QtWidgets.QWidget): """ pass - def handle_request_close_server(self, event): - """ - Handle REQUEST_CLOSE_SERVER event. - """ - pass - def handle_request_upload_file_renamed(self, event): """ Handle REQUEST_UPLOAD_FILE_RENAMED event. diff --git a/onionshare_gui/mode/history.py b/onionshare_gui/mode/history.py index 5f895d75..02c34ec4 100644 --- a/onionshare_gui/mode/history.py +++ b/onionshare_gui/mode/history.py @@ -40,13 +40,36 @@ class HistoryItem(QtWidgets.QWidget): def cancel(self): pass + def get_finished_label_text(self, started): + """ + When an item finishes, returns a string displaying the start/end datetime range. + started is a datetime object. + """ + ended = datetime.now() + if started.year == ended.year and started.month == ended.month and started.day == ended.day: + if started.hour == ended.hour and started.minute == ended.minute: + text = strings._('gui_all_modes_transfer_finished').format( + started.strftime("%b %d, %I:%M%p") + ) + else: + text = strings._('gui_all_modes_transfer_finished_range').format( + started.strftime("%b %d, %I:%M%p"), + ended.strftime("%I:%M%p") + ) + else: + text = strings._('gui_all_modes_transfer_finished_range').format( + started.strftime("%b %d, %I:%M%p"), + ended.strftime("%b %d, %I:%M%p") + ) + return text -class DownloadHistoryItem(HistoryItem): + +class ShareHistoryItem(HistoryItem): """ Download history item, for share mode """ def __init__(self, common, id, total_bytes): - super(DownloadHistoryItem, self).__init__() + super(ShareHistoryItem, self).__init__() self.common = common self.id = id @@ -56,7 +79,7 @@ class DownloadHistoryItem(HistoryItem): self.started_dt = datetime.fromtimestamp(self.started) # Label - self.label = QtWidgets.QLabel(strings._('gui_download_in_progress').format(self.started_dt.strftime("%b %d, %I:%M%p"))) + self.label = QtWidgets.QLabel(strings._('gui_all_modes_transfer_started').format(self.started_dt.strftime("%b %d, %I:%M%p"))) # Progress bar self.progress_bar = QtWidgets.QProgressBar() @@ -83,18 +106,22 @@ class DownloadHistoryItem(HistoryItem): self.progress_bar.setValue(downloaded_bytes) if downloaded_bytes == self.progress_bar.total_bytes: - pb_fmt = strings._('gui_download_upload_progress_complete').format( + pb_fmt = strings._('gui_all_modes_progress_complete').format( self.common.format_seconds(time.time() - self.started)) + + # Change the label + self.label.setText(self.get_finished_label_text(self.started_dt)) + else: elapsed = time.time() - self.started if elapsed < 10: # Wait a couple of seconds for the download rate to stabilize. # This prevents a "Windows copy dialog"-esque experience at # the beginning of the download. - pb_fmt = strings._('gui_download_upload_progress_starting').format( + pb_fmt = strings._('gui_all_modes_progress_starting').format( self.common.human_readable_filesize(downloaded_bytes)) else: - pb_fmt = strings._('gui_download_upload_progress_eta').format( + pb_fmt = strings._('gui_all_modes_progress_eta').format( self.common.human_readable_filesize(downloaded_bytes), self.estimated_time_remaining) @@ -110,12 +137,12 @@ class DownloadHistoryItem(HistoryItem): self.started) -class UploadHistoryItemFile(QtWidgets.QWidget): +class ReceiveHistoryItemFile(QtWidgets.QWidget): def __init__(self, common, filename): - super(UploadHistoryItemFile, self).__init__() + super(ReceiveHistoryItemFile, self).__init__() self.common = common - self.common.log('UploadHistoryItemFile', '__init__', 'filename: {}'.format(filename)) + self.common.log('ReceiveHistoryItemFile', '__init__', 'filename: {}'.format(filename)) self.filename = filename self.dir = None @@ -166,10 +193,10 @@ class UploadHistoryItemFile(QtWidgets.QWidget): """ Open the downloads folder, with the file selected, in a cross-platform manner """ - self.common.log('UploadHistoryItemFile', 'open_folder') + self.common.log('ReceiveHistoryItemFile', 'open_folder') if not self.dir: - self.common.log('UploadHistoryItemFile', 'open_folder', "dir has not been set yet, can't open folder") + self.common.log('ReceiveHistoryItemFile', 'open_folder', "dir has not been set yet, can't open folder") return abs_filename = os.path.join(self.dir, self.filename) @@ -190,16 +217,16 @@ class UploadHistoryItemFile(QtWidgets.QWidget): elif self.common.platform == 'Windows': subprocess.Popen(['explorer', '/select,{}'.format(abs_filename)]) -class UploadHistoryItem(HistoryItem): +class ReceiveHistoryItem(HistoryItem): def __init__(self, common, id, content_length): - super(UploadHistoryItem, self).__init__() + super(ReceiveHistoryItem, self).__init__() self.common = common self.id = id self.content_length = content_length self.started = datetime.now() # Label - self.label = QtWidgets.QLabel(strings._('gui_upload_in_progress').format(self.started.strftime("%b %d, %I:%M%p"))) + self.label = QtWidgets.QLabel(strings._('gui_all_modes_transfer_started').format(self.started.strftime("%b %d, %I:%M%p"))) # Progress bar self.progress_bar = QtWidgets.QProgressBar() @@ -244,14 +271,14 @@ class UploadHistoryItem(HistoryItem): elapsed = datetime.now() - self.started if elapsed.seconds < 10: - pb_fmt = strings._('gui_download_upload_progress_starting').format( + pb_fmt = strings._('gui_all_modes_progress_starting').format( self.common.human_readable_filesize(total_uploaded_bytes)) else: estimated_time_remaining = self.common.estimated_time_remaining( total_uploaded_bytes, self.content_length, self.started.timestamp()) - pb_fmt = strings._('gui_download_upload_progress_eta').format( + pb_fmt = strings._('gui_all_modes_progress_eta').format( self.common.human_readable_filesize(total_uploaded_bytes), estimated_time_remaining) @@ -259,7 +286,7 @@ class UploadHistoryItem(HistoryItem): for filename in list(data['progress']): # Add a new file if needed if filename not in self.files: - self.files[filename] = UploadHistoryItemFile(self.common, filename) + self.files[filename] = ReceiveHistoryItemFile(self.common, filename) self.files_layout.addWidget(self.files[filename]) # Update the file @@ -277,23 +304,7 @@ class UploadHistoryItem(HistoryItem): self.progress_bar.hide() # Change the label - self.ended = self.started = datetime.now() - if self.started.year == self.ended.year and self.started.month == self.ended.month and self.started.day == self.ended.day: - if self.started.hour == self.ended.hour and self.started.minute == self.ended.minute: - text = strings._('gui_upload_finished').format( - self.started.strftime("%b %d, %I:%M%p") - ) - else: - text = strings._('gui_upload_finished_range').format( - self.started.strftime("%b %d, %I:%M%p"), - self.ended.strftime("%I:%M%p") - ) - else: - text = strings._('gui_upload_finished_range').format( - self.started.strftime("%b %d, %I:%M%p"), - self.ended.strftime("%b %d, %I:%M%p") - ) - self.label.setText(text) + self.label.setText(self.get_finished_label_text(self.started)) elif data['action'] == 'canceled': # Hide the progress bar @@ -393,7 +404,7 @@ class History(QtWidgets.QWidget): # Header self.header_label = QtWidgets.QLabel(header_text) self.header_label.setStyleSheet(self.common.css['downloads_uploads_label']) - clear_button = QtWidgets.QPushButton(strings._('gui_clear_history')) + clear_button = QtWidgets.QPushButton(strings._('gui_all_modes_clear_history')) clear_button.setStyleSheet(self.common.css['downloads_uploads_clear']) clear_button.setFlat(True) clear_button.clicked.connect(self.reset) diff --git a/onionshare_gui/mode/receive_mode/__init__.py b/onionshare_gui/mode/receive_mode/__init__.py index cde2cb8a..3a90f2f4 100644 --- a/onionshare_gui/mode/receive_mode/__init__.py +++ b/onionshare_gui/mode/receive_mode/__init__.py @@ -22,7 +22,7 @@ from PyQt5 import QtCore, QtWidgets, QtGui from onionshare import strings from onionshare.web import Web -from ..history import History, ToggleHistory, UploadHistoryItem +from ..history import History, ToggleHistory, ReceiveHistoryItem from .. import Mode class ReceiveMode(Mode): @@ -49,17 +49,17 @@ class ReceiveMode(Mode): # Upload history self.history = History( self.common, - QtGui.QPixmap.fromImage(QtGui.QImage(self.common.get_resource_path('images/uploads_transparent.png'))), - strings._('gui_no_uploads'), - strings._('gui_uploads') + QtGui.QPixmap.fromImage(QtGui.QImage(self.common.get_resource_path('images/receive_icon_transparent.png'))), + strings._('gui_receive_mode_no_files'), + strings._('gui_all_modes_history') ) self.history.hide() # Toggle history self.toggle_history = ToggleHistory( self.common, self, self.history, - QtGui.QIcon(self.common.get_resource_path('images/uploads_toggle.png')), - QtGui.QIcon(self.common.get_resource_path('images/uploads_toggle_selected.png')) + QtGui.QIcon(self.common.get_resource_path('images/receive_icon_toggle.png')), + QtGui.QIcon(self.common.get_resource_path('images/receive_icon_toggle_selected.png')) ) # Receive mode warning @@ -103,7 +103,7 @@ class ReceiveMode(Mode): return True # An upload is probably still running - hold off on stopping the share, but block new shares. else: - self.server_status_label.setText(strings._('timeout_upload_still_running')) + self.server_status_label.setText(strings._('gui_receive_mode_timeout_waiting')) self.web.receive_mode.can_upload = False return False @@ -136,19 +136,19 @@ class ReceiveMode(Mode): """ Handle REQUEST_LOAD event. """ - self.system_tray.showMessage(strings._('systray_page_loaded_title'), strings._('systray_upload_page_loaded_message')) + self.system_tray.showMessage(strings._('systray_page_loaded_title'), strings._('systray_page_loaded_message')) def handle_request_started(self, event): """ Handle REQUEST_STARTED event. """ - item = UploadHistoryItem(self.common, event["data"]["id"], event["data"]["content_length"]) + item = ReceiveHistoryItem(self.common, event["data"]["id"], event["data"]["content_length"]) self.history.add(event["data"]["id"], item) self.toggle_history.update_indicator(True) self.history.in_progress_count += 1 self.history.update_in_progress() - self.system_tray.showMessage(strings._('systray_upload_started_title'), strings._('systray_upload_started_message')) + self.system_tray.showMessage(strings._('systray_receive_started_title'), strings._('systray_receive_started_message')) def handle_request_progress(self, event): """ @@ -159,13 +159,6 @@ class ReceiveMode(Mode): 'progress': event["data"]["progress"] }) - def handle_request_close_server(self, event): - """ - Handle REQUEST_CLOSE_SERVER event. - """ - self.stop_server() - self.system_tray.showMessage(strings._('systray_close_server_title'), strings._('systray_close_server_message')) - def handle_request_upload_file_renamed(self, event): """ Handle REQUEST_UPLOAD_FILE_RENAMED event. diff --git a/onionshare_gui/mode/share_mode/__init__.py b/onionshare_gui/mode/share_mode/__init__.py index d86a17e4..1f5ad00b 100644 --- a/onionshare_gui/mode/share_mode/__init__.py +++ b/onionshare_gui/mode/share_mode/__init__.py @@ -28,7 +28,7 @@ from onionshare.web import Web from .file_selection import FileSelection from .threads import CompressThread from .. import Mode -from ..history import History, ToggleHistory, DownloadHistoryItem +from ..history import History, ToggleHistory, ShareHistoryItem from ...widgets import Alert @@ -74,9 +74,9 @@ class ShareMode(Mode): # Download history self.history = History( self.common, - QtGui.QPixmap.fromImage(QtGui.QImage(self.common.get_resource_path('images/downloads_transparent.png'))), - strings._('gui_no_downloads'), - strings._('gui_downloads') + QtGui.QPixmap.fromImage(QtGui.QImage(self.common.get_resource_path('images/share_icon_transparent.png'))), + strings._('gui_share_mode_no_files'), + strings._('gui_all_modes_history') ) self.history.hide() @@ -87,8 +87,8 @@ class ShareMode(Mode): # Toggle history self.toggle_history = ToggleHistory( self.common, self, self.history, - QtGui.QIcon(self.common.get_resource_path('images/downloads_toggle.png')), - QtGui.QIcon(self.common.get_resource_path('images/downloads_toggle_selected.png')) + QtGui.QIcon(self.common.get_resource_path('images/share_icon_toggle.png')), + QtGui.QIcon(self.common.get_resource_path('images/share_icon_toggle_selected.png')) ) # Top bar @@ -138,7 +138,7 @@ class ShareMode(Mode): return True # A download is probably still running - hold off on stopping the share else: - self.server_status_label.setText(strings._('timeout_download_still_running')) + self.server_status_label.setText(strings._('gui_share_mode_timeout_waiting')) return False def start_server_custom(self): @@ -229,7 +229,7 @@ class ShareMode(Mode): """ Handle REQUEST_LOAD event. """ - self.system_tray.showMessage(strings._('systray_page_loaded_title'), strings._('systray_download_page_loaded_message')) + self.system_tray.showMessage(strings._('systray_page_loaded_title'), strings._('systray_page_loaded_message')) def handle_request_started(self, event): """ @@ -240,13 +240,13 @@ class ShareMode(Mode): else: filesize = self.web.share_mode.download_filesize - item = DownloadHistoryItem(self.common, event["data"]["id"], filesize) + item = ShareHistoryItem(self.common, event["data"]["id"], filesize) self.history.add(event["data"]["id"], item) self.toggle_history.update_indicator(True) self.history.in_progress_count += 1 self.history.update_in_progress() - self.system_tray.showMessage(strings._('systray_download_started_title'), strings._('systray_download_started_message')) + self.system_tray.showMessage(strings._('systray_share_started_title'), strings._('systray_share_started_message')) def handle_request_progress(self, event): """ @@ -256,7 +256,7 @@ class ShareMode(Mode): # Is the download complete? if event["data"]["bytes"] == self.web.share_mode.filesize: - self.system_tray.showMessage(strings._('systray_download_completed_title'), strings._('systray_download_completed_message')) + self.system_tray.showMessage(strings._('systray_share_completed_title'), strings._('systray_share_completed_message')) # Update completed and in progress labels self.history.completed_count += 1 @@ -284,7 +284,7 @@ class ShareMode(Mode): # Update in progress count self.history.in_progress_count -= 1 self.history.update_in_progress() - self.system_tray.showMessage(strings._('systray_download_canceled_title'), strings._('systray_download_canceled_message')) + self.system_tray.showMessage(strings._('systray_share_canceled_title'), strings._('systray_share_canceled_message')) def on_reload_settings(self): """ diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py index c4f69b2d..27abf5e5 100644 --- a/onionshare_gui/onionshare_gui.py +++ b/onionshare_gui/onionshare_gui.py @@ -384,9 +384,6 @@ class OnionShareGui(QtWidgets.QMainWindow): elif event["type"] == Web.REQUEST_CANCELED: mode.handle_request_canceled(event) - elif event["type"] == Web.REQUEST_CLOSE_SERVER: - mode.handle_request_close_server(event) - elif event["type"] == Web.REQUEST_UPLOAD_FILE_RENAMED: mode.handle_request_upload_file_renamed(event) @@ -399,8 +396,8 @@ class OnionShareGui(QtWidgets.QMainWindow): elif event["type"] == Web.REQUEST_UPLOAD_CANCELED: mode.handle_request_upload_canceled(event) - if event["type"] == Web.REQUEST_ERROR_DOWNLOADS_DIR_CANNOT_CREATE: - Alert(self.common, strings._('error_cannot_create_downloads_dir').format(event["data"]["receive_mode_dir"])) + if event["type"] == Web.REQUEST_ERROR_DATA_DIR_CANNOT_CREATE: + Alert(self.common, strings._('error_cannot_create_data_dir').format(event["data"]["receive_mode_dir"])) if event["type"] == Web.REQUEST_OTHER: if event["path"] != '/favicon.ico' and event["path"] != "/{}/shutdown".format(mode.web.shutdown_slug): diff --git a/onionshare_gui/settings_dialog.py b/onionshare_gui/settings_dialog.py index b933c30f..1fe6dc53 100644 --- a/onionshare_gui/settings_dialog.py +++ b/onionshare_gui/settings_dialog.py @@ -187,20 +187,20 @@ class SettingsDialog(QtWidgets.QDialog): sharing_group = QtWidgets.QGroupBox(strings._("gui_settings_sharing_label")) sharing_group.setLayout(sharing_group_layout) - # Downloads dir - downloads_label = QtWidgets.QLabel(strings._('gui_settings_downloads_label')); - self.downloads_dir_lineedit = QtWidgets.QLineEdit() - self.downloads_dir_lineedit.setReadOnly(True) - downloads_button = QtWidgets.QPushButton(strings._('gui_settings_downloads_button')) - downloads_button.clicked.connect(self.downloads_button_clicked) - downloads_layout = QtWidgets.QHBoxLayout() - downloads_layout.addWidget(downloads_label) - downloads_layout.addWidget(self.downloads_dir_lineedit) - downloads_layout.addWidget(downloads_button) + # OnionShare data dir + data_dir_label = QtWidgets.QLabel(strings._('gui_settings_data_dir_label')); + self.data_dir_lineedit = QtWidgets.QLineEdit() + self.data_dir_lineedit.setReadOnly(True) + data_dir_button = QtWidgets.QPushButton(strings._('gui_settings_data_dir_browse_button')) + data_dir_button.clicked.connect(self.data_dir_button_clicked) + data_dir_layout = QtWidgets.QHBoxLayout() + data_dir_layout.addWidget(data_dir_label) + data_dir_layout.addWidget(self.data_dir_lineedit) + data_dir_layout.addWidget(data_dir_button) # Receiving options layout receiving_group_layout = QtWidgets.QVBoxLayout() - receiving_group_layout.addLayout(downloads_layout) + receiving_group_layout.addLayout(data_dir_layout) receiving_group = QtWidgets.QGroupBox(strings._("gui_settings_receiving_label")) receiving_group.setLayout(receiving_group_layout) @@ -508,8 +508,8 @@ class SettingsDialog(QtWidgets.QDialog): if use_legacy_v2_onions or save_private_key: self.use_legacy_v2_onions_checkbox.setCheckState(QtCore.Qt.Checked) - downloads_dir = self.old_settings.get('downloads_dir') - self.downloads_dir_lineedit.setText(downloads_dir) + data_dir = self.old_settings.get('data_dir') + self.data_dir_lineedit.setText(data_dir) public_mode = self.old_settings.get('public_mode') if public_mode: @@ -747,17 +747,17 @@ class SettingsDialog(QtWidgets.QDialog): if not self.save_private_key_checkbox.isChecked(): self.use_legacy_v2_onions_checkbox.setEnabled(True) - def downloads_button_clicked(self): + def data_dir_button_clicked(self): """ - Browse for a new downloads directory + Browse for a new OnionShare data directory """ - downloads_dir = self.downloads_dir_lineedit.text() + data_dir = self.data_dir_lineedit.text() selected_dir = QtWidgets.QFileDialog.getExistingDirectory(self, - strings._('gui_settings_downloads_label'), downloads_dir) + strings._('gui_settings_data_dir_label'), data_dir) if selected_dir: - self.common.log('SettingsDialog', 'downloads_button_clicked', 'selected dir: {}'.format(selected_dir)) - self.downloads_dir_lineedit.setText(selected_dir) + self.common.log('SettingsDialog', 'data_dir_button_clicked', 'selected dir: {}'.format(selected_dir)) + self.data_dir_lineedit.setText(selected_dir) def test_tor_clicked(self): """ @@ -981,7 +981,7 @@ class SettingsDialog(QtWidgets.QDialog): # Also unset the HidServAuth if we are removing our reusable private key settings.set('hidservauth_string', '') - settings.set('downloads_dir', self.downloads_dir_lineedit.text()) + settings.set('data_dir', self.data_dir_lineedit.text()) settings.set('public_mode', self.public_mode_checkbox.isChecked()) settings.set('use_stealth', self.stealth_checkbox.isChecked()) # Always unset the HidServAuth if Stealth mode is unset |