From 9b35ca9bede4cb11c124140f90f0bc2f09b4a6eb Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 17 Feb 2019 14:07:38 +1100 Subject: Don't clear in-progress transfers from the History list --- onionshare_gui/mode/history.py | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/onionshare_gui/mode/history.py b/onionshare_gui/mode/history.py index 6af804b2..913ed164 100644 --- a/onionshare_gui/mode/history.py +++ b/onionshare_gui/mode/history.py @@ -237,6 +237,7 @@ class ReceiveHistoryItem(HistoryItem): self.id = id self.content_length = content_length self.started = datetime.now() + self.status = 'started' # Label self.label = QtWidgets.QLabel(strings._('gui_all_modes_transfer_started').format(self.started.strftime("%b %d, %I:%M%p"))) @@ -313,6 +314,9 @@ class ReceiveHistoryItem(HistoryItem): self.files[data['filename']].set_dir(data['dir']) elif data['action'] == 'finished': + # Change the status + self.status = 'finished' + # Hide the progress bar self.progress_bar.hide() @@ -320,6 +324,9 @@ class ReceiveHistoryItem(HistoryItem): self.label.setText(self.get_finished_label_text(self.started)) elif data['action'] == 'canceled': + # Change the status + self.status = 'canceled' + # Hide the progress bar self.progress_bar.hide() @@ -389,11 +396,11 @@ class HistoryItemList(QtWidgets.QScrollArea): """ Reset all items, emptying the list. Override this method. """ - for item in self.items.values(): - self.items_layout.removeWidget(item) - item.close() - self.items = {} - + for key, item in self.items.copy().items(): + if item.status != 'started': + self.items_layout.removeWidget(item) + item.close() + del self.items[key] class History(QtWidgets.QWidget): """ @@ -495,15 +502,17 @@ class History(QtWidgets.QWidget): """ self.item_list.reset() - # Hide not empty, show empty - self.not_empty.hide() - self.empty.show() + if not any(self.item_list.items): + # Hide not empty, show empty + self.not_empty.hide() + self.empty.show() + # Reset in-progress counter + self.in_progress_count = 0 + self.update_in_progress() - # Reset counters + # Reset completed counter self.completed_count = 0 - self.in_progress_count = 0 self.update_completed() - self.update_in_progress() def update_completed(self): """ -- cgit v1.2.3-54-g00ecf From 51e98f40e717a4413427ef3aab4da9839c7c6bea Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 17 Feb 2019 15:49:37 +1100 Subject: Update the GUI when the browser has canceled an upload in Receive Mode. Don't increment the completed counter --- onionshare/web/receive_mode.py | 8 ++++---- onionshare_gui/mode/receive_mode/__init__.py | 2 -- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/onionshare/web/receive_mode.py b/onionshare/web/receive_mode.py index 566946f2..a0cf5934 100644 --- a/onionshare/web/receive_mode.py +++ b/onionshare/web/receive_mode.py @@ -332,14 +332,14 @@ class ReceiveModeRequest(Request): self.told_gui_about_request = True - filename = secure_filename(filename) + self.filename = secure_filename(filename) - self.progress[filename] = { + self.progress[self.filename] = { 'uploaded_bytes': 0, 'complete': False } - f = ReceiveModeFile(self, filename, self.file_write_func, self.file_close_func) + f = ReceiveModeFile(self, self.filename, self.file_write_func, self.file_close_func) if f.upload_error: self.web.common.log('ReceiveModeRequest', '_get_file_stream', 'Error creating file') self.upload_error = True @@ -362,7 +362,7 @@ class ReceiveModeRequest(Request): if self.told_gui_about_request: upload_id = self.upload_id - if not self.web.stop_q.empty(): + if not self.web.stop_q.empty() or not self.progress[self.filename]['complete']: # Inform the GUI that the upload has canceled self.web.add_request(self.web.REQUEST_UPLOAD_CANCELED, self.path, { 'id': upload_id diff --git a/onionshare_gui/mode/receive_mode/__init__.py b/onionshare_gui/mode/receive_mode/__init__.py index 3a90f2f4..5fb33ab3 100644 --- a/onionshare_gui/mode/receive_mode/__init__.py +++ b/onionshare_gui/mode/receive_mode/__init__.py @@ -198,9 +198,7 @@ class ReceiveMode(Mode): self.history.update(event["data"]["id"], { 'action': 'canceled' }) - self.history.completed_count += 1 self.history.in_progress_count -= 1 - self.history.update_completed() self.history.update_in_progress() def on_reload_settings(self): -- cgit v1.2.3-54-g00ecf From 759a0dc2a3fd07fcd35a2a251526d8c793be5b52 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 17 Feb 2019 16:28:11 +1100 Subject: Set status attribute for ShareHistoryItems as well --- onionshare_gui/mode/history.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/onionshare_gui/mode/history.py b/onionshare_gui/mode/history.py index 913ed164..6a3db3a5 100644 --- a/onionshare_gui/mode/history.py +++ b/onionshare_gui/mode/history.py @@ -90,6 +90,7 @@ class ShareHistoryItem(HistoryItem): self.downloaded_bytes = 0 self.started = time.time() self.started_dt = datetime.fromtimestamp(self.started) + self.status = 'started' # Label self.label = QtWidgets.QLabel(strings._('gui_all_modes_transfer_started').format(self.started_dt.strftime("%b %d, %I:%M%p"))) @@ -124,6 +125,7 @@ class ShareHistoryItem(HistoryItem): # Change the label self.label.setText(self.get_finished_label_text(self.started_dt)) + self.status = 'finished' else: elapsed = time.time() - self.started @@ -142,6 +144,7 @@ class ShareHistoryItem(HistoryItem): def cancel(self): self.progress_bar.setFormat(strings._('gui_canceled')) + self.status = 'canceled' @property def estimated_time_remaining(self): @@ -501,8 +504,7 @@ class History(QtWidgets.QWidget): Reset all items. """ self.item_list.reset() - - if not any(self.item_list.items): + if len(self.item_list.items) == 0: # Hide not empty, show empty self.not_empty.hide() self.empty.show() -- cgit v1.2.3-54-g00ecf From 8cf8aa201d6b79805056c4844d049d9b99dd0560 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 17 Feb 2019 17:42:25 +1100 Subject: Use constants for history item status, to be consistent with other parts of the project --- onionshare_gui/mode/history.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/onionshare_gui/mode/history.py b/onionshare_gui/mode/history.py index 6a3db3a5..1546cb68 100644 --- a/onionshare_gui/mode/history.py +++ b/onionshare_gui/mode/history.py @@ -31,6 +31,10 @@ class HistoryItem(QtWidgets.QWidget): """ The base history item """ + STATUS_STARTED = 0 + STATUS_FINISHED = 1 + STATUS_CANCELED = 2 + def __init__(self): super(HistoryItem, self).__init__() @@ -90,7 +94,7 @@ class ShareHistoryItem(HistoryItem): self.downloaded_bytes = 0 self.started = time.time() self.started_dt = datetime.fromtimestamp(self.started) - self.status = 'started' + self.status = HistoryItem.STATUS_STARTED # Label self.label = QtWidgets.QLabel(strings._('gui_all_modes_transfer_started').format(self.started_dt.strftime("%b %d, %I:%M%p"))) @@ -125,7 +129,7 @@ class ShareHistoryItem(HistoryItem): # Change the label self.label.setText(self.get_finished_label_text(self.started_dt)) - self.status = 'finished' + self.status = HistoryItem.STATUS_FINISHED else: elapsed = time.time() - self.started @@ -144,7 +148,7 @@ class ShareHistoryItem(HistoryItem): def cancel(self): self.progress_bar.setFormat(strings._('gui_canceled')) - self.status = 'canceled' + self.status = HistoryItem.STATUS_CANCELED @property def estimated_time_remaining(self): @@ -240,7 +244,7 @@ class ReceiveHistoryItem(HistoryItem): self.id = id self.content_length = content_length self.started = datetime.now() - self.status = 'started' + self.status = HistoryItem.STATUS_STARTED # Label self.label = QtWidgets.QLabel(strings._('gui_all_modes_transfer_started').format(self.started.strftime("%b %d, %I:%M%p"))) @@ -318,7 +322,7 @@ class ReceiveHistoryItem(HistoryItem): elif data['action'] == 'finished': # Change the status - self.status = 'finished' + self.status = HistoryItem.STATUS_FINISHED # Hide the progress bar self.progress_bar.hide() @@ -328,7 +332,7 @@ class ReceiveHistoryItem(HistoryItem): elif data['action'] == 'canceled': # Change the status - self.status = 'canceled' + self.status = HistoryItem.STATUS_CANCELED # Hide the progress bar self.progress_bar.hide() @@ -400,7 +404,7 @@ class HistoryItemList(QtWidgets.QScrollArea): Reset all items, emptying the list. Override this method. """ for key, item in self.items.copy().items(): - if item.status != 'started': + if item.status != HistoryItem.STATUS_STARTED: self.items_layout.removeWidget(item) item.close() del self.items[key] -- cgit v1.2.3-54-g00ecf