mirror of
https://github.com/onionshare/onionshare.git
synced 2025-05-07 17:05:16 -04:00
Allow the user to cancel a share that is still starting up
This commit is contained in:
parent
af1b56e659
commit
39954c6ee8
4 changed files with 63 additions and 13 deletions
|
@ -78,6 +78,7 @@ class OnionShareGui(QtWidgets.QMainWindow):
|
|||
self.server_status.server_stopped.connect(self.stop_server)
|
||||
self.server_status.server_stopped.connect(self.update_server_status_indicator)
|
||||
self.server_status.server_stopped.connect(self.update_primary_action)
|
||||
self.server_status.server_canceled.connect(self.cancel_server)
|
||||
self.start_server_finished.connect(self.clear_message)
|
||||
self.start_server_finished.connect(self.server_status.start_server_finished)
|
||||
self.start_server_finished.connect(self.update_server_status_indicator)
|
||||
|
@ -341,9 +342,10 @@ class OnionShareGui(QtWidgets.QMainWindow):
|
|||
# wait for modules in thread to load, preventing a thread-related cx_Freeze crash
|
||||
time.sleep(0.2)
|
||||
|
||||
t = threading.Thread(target=start_onion_service, kwargs={'self': self})
|
||||
t.daemon = True
|
||||
t.start()
|
||||
common.log('OnionshareGui', 'start_server', 'Starting an onion thread')
|
||||
self.t = OnionThread(function=start_onion_service, kwargs={'self': self})
|
||||
self.t.daemon = True
|
||||
self.t.start()
|
||||
|
||||
def start_server_step2(self):
|
||||
"""
|
||||
|
@ -427,6 +429,14 @@ class OnionShareGui(QtWidgets.QMainWindow):
|
|||
self._zip_progress_bar = None
|
||||
self.status_bar.clearMessage()
|
||||
|
||||
def cancel_server(self):
|
||||
"""
|
||||
Cancel the server while it is preparing to start
|
||||
"""
|
||||
if self.t:
|
||||
self.t.terminate()
|
||||
self.stop_server()
|
||||
|
||||
def stop_server(self):
|
||||
"""
|
||||
Stop the onionshare server.
|
||||
|
@ -667,3 +677,26 @@ class ZipProgressBar(QtWidgets.QProgressBar):
|
|||
self.setValue(100)
|
||||
else:
|
||||
self.setValue(0)
|
||||
|
||||
|
||||
class OnionThread(QtCore.QThread):
|
||||
"""
|
||||
A QThread for starting our Onion Service.
|
||||
By using QThread rather than threading.Thread, we are able
|
||||
to call quit() or terminate() on the startup if the user
|
||||
decided to cancel (in which case do not proceed with obtaining
|
||||
the Onion address and starting the web server).
|
||||
"""
|
||||
def __init__(self, function, kwargs=None):
|
||||
super(OnionThread, self).__init__()
|
||||
common.log('OnionThread', '__init__')
|
||||
self.function = function
|
||||
if not kwargs:
|
||||
self.kwargs = {}
|
||||
else:
|
||||
self.kwargs = kwargs
|
||||
|
||||
def run(self):
|
||||
common.log('OnionThread', 'run')
|
||||
|
||||
self.function(**self.kwargs)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue