mirror of
https://github.com/onionshare/onionshare.git
synced 2025-08-05 04:44:27 -04:00
Refactor all of the threading.Threads into QThreads, and quit them all when canceling the server. When canceling the compression thread, specifically mass a cancel message into the Web and ZipWriter objects to make the bail out on compression early
This commit is contained in:
parent
06f90b91ce
commit
174de57405
6 changed files with 196 additions and 106 deletions
60
onionshare_gui/share_mode/threads.py
Normal file
60
onionshare_gui/share_mode/threads.py
Normal file
|
@ -0,0 +1,60 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
OnionShare | https://onionshare.org/
|
||||
|
||||
Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
from PyQt5 import QtCore
|
||||
|
||||
|
||||
class CompressThread(QtCore.QThread):
|
||||
"""
|
||||
Compresses files to be shared
|
||||
"""
|
||||
success = QtCore.pyqtSignal()
|
||||
error = QtCore.pyqtSignal(str)
|
||||
|
||||
def __init__(self, mode):
|
||||
super(CompressThread, self).__init__()
|
||||
self.mode = mode
|
||||
self.mode.common.log('CompressThread', '__init__')
|
||||
|
||||
# prepare files to share
|
||||
def set_processed_size(self, x):
|
||||
if self.mode._zip_progress_bar != None:
|
||||
self.mode._zip_progress_bar.update_processed_size_signal.emit(x)
|
||||
|
||||
def run(self):
|
||||
self.mode.common.log('CompressThread', 'run')
|
||||
|
||||
try:
|
||||
if self.mode.web.set_file_info(self.mode.filenames, processed_size_callback=self.set_processed_size):
|
||||
self.success.emit()
|
||||
else:
|
||||
# Cancelled
|
||||
pass
|
||||
|
||||
self.mode.app.cleanup_filenames.append(self.mode.web.zip_filename)
|
||||
except OSError as e:
|
||||
self.error.emit(e.strerror)
|
||||
|
||||
def cancel(self):
|
||||
self.mode.common.log('CompressThread', 'cancel')
|
||||
|
||||
# Let the Web and ZipWriter objects know that we're canceling compression early
|
||||
self.mode.web.cancel_compression = True
|
||||
if self.mode.web.zip_writer:
|
||||
self.mode.web.zip_writer.cancel_compression = True
|
Loading…
Add table
Add a link
Reference in a new issue