- Refactor the Web.ShareMode client_cancel variable to be Web.stop_q, a thread-safe queue that communicates to both share and receive mode when the user stops the server. In share mode this still stops sending the file. In receive mode, if there's a transfer in progress, it cancels it in the middle, and doesn't end up saving that file

- In receive mode, make the receive mode dir right before saving a file (so if it doesn't complete, don't make an empty dir)
- Minor UX tweak: resizing the window stretches the History widget first
This commit is contained in:
Micah Lee 2019-01-20 15:25:36 -08:00
parent ae5b46d475
commit 053d0ed615
8 changed files with 102 additions and 39 deletions

View file

@ -335,3 +335,9 @@ class Mode(QtWidgets.QWidget):
Handle REQUEST_UPLOAD_FINISHED event.
"""
pass
def handle_request_upload_canceled(self, event):
"""
Handle REQUEST_UPLOAD_CANCELED event.
"""
pass

View file

@ -184,7 +184,7 @@ class UploadHistoryItemFile(QtWidgets.QWidget):
# macOS
elif self.common.platform == 'Darwin':
subprocess.call(['open', '-R', abs_filename])
subprocess.call(['open', '-R', abs_filename])
# Windows
elif self.common.platform == 'Windows':
@ -295,6 +295,13 @@ class UploadHistoryItem(HistoryItem):
)
self.label.setText(text)
elif data['action'] == 'canceled':
# Hide the progress bar
self.progress_bar.hide()
# Change the label
self.label.setText(strings._('gui_canceled'))
class HistoryItemList(QtWidgets.QScrollArea):
"""

View file

@ -83,7 +83,7 @@ class ReceiveMode(Mode):
# Wrapper layout
self.wrapper_layout = QtWidgets.QHBoxLayout()
self.wrapper_layout.addLayout(self.main_layout)
self.wrapper_layout.addWidget(self.history)
self.wrapper_layout.addWidget(self.history, stretch=1)
self.setLayout(self.wrapper_layout)
def get_stop_server_shutdown_timeout_text(self):
@ -198,6 +198,18 @@ class ReceiveMode(Mode):
self.history.update_completed()
self.history.update_in_progress()
def handle_request_upload_canceled(self, event):
"""
Handle REQUEST_UPLOAD_CANCELED event.
"""
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):
"""
We should be ok to re-enable the 'Start Receive Mode' button now.

View file

@ -115,7 +115,7 @@ class ShareMode(Mode):
# Wrapper layout
self.wrapper_layout = QtWidgets.QHBoxLayout()
self.wrapper_layout.addLayout(self.main_layout)
self.wrapper_layout.addWidget(self.history)
self.wrapper_layout.addWidget(self.history, stretch=1)
self.setLayout(self.wrapper_layout)
# Always start with focus on file selection

View file

@ -396,6 +396,9 @@ class OnionShareGui(QtWidgets.QMainWindow):
elif event["type"] == Web.REQUEST_UPLOAD_FINISHED:
mode.handle_request_upload_finished(event)
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"]))