diff options
author | Micah Lee <micah@micahflee.com> | 2020-12-22 13:30:59 -0800 |
---|---|---|
committer | Micah Lee <micah@micahflee.com> | 2020-12-22 13:30:59 -0800 |
commit | 6eee7f9c5c42752bb17a1ae2da14a96a55ba7297 (patch) | |
tree | 9e70ec73bc3611b51bd099bcff9a1c8df7c9e02c /desktop/src/onionshare | |
parent | 71558afb57d1f3aa9ac747897dda636f371c6d01 (diff) | |
parent | 96d21853c09690cd94ae086ec9d0541e51b97eef (diff) | |
download | onionshare-6eee7f9c5c42752bb17a1ae2da14a96a55ba7297.tar.gz onionshare-6eee7f9c5c42752bb17a1ae2da14a96a55ba7297.zip |
Merge branch 'develop' into 1166_make_cancel_forceful
Diffstat (limited to 'desktop/src/onionshare')
21 files changed, 132 insertions, 18 deletions
diff --git a/desktop/src/onionshare/__init__.py b/desktop/src/onionshare/__init__.py index 287d882c..f66c5a28 100644 --- a/desktop/src/onionshare/__init__.py +++ b/desktop/src/onionshare/__init__.py @@ -64,6 +64,10 @@ def main(): """ common = Common() + # Required for macOS Big Sur: https://stackoverflow.com/a/64878899 + if common.platform == "Darwin": + os.environ["QT_MAC_WANTS_LAYER"] = "1" + # Display OnionShare banner print(f"OnionShare {common.version} | https://onionshare.org/") diff --git a/desktop/src/onionshare/main_window.py b/desktop/src/onionshare/main_window.py index c1e0cd1a..a1b44032 100644 --- a/desktop/src/onionshare/main_window.py +++ b/desktop/src/onionshare/main_window.py @@ -30,6 +30,7 @@ from .widgets import Alert from .update_checker import UpdateThread from .tab_widget import TabWidget from .gui_common import GuiCommon +from .threads import OnionCleanupThread class MainWindow(QtWidgets.QMainWindow): @@ -285,8 +286,32 @@ class MainWindow(QtWidgets.QMainWindow): e.accept() def cleanup(self): + self.common.log("MainWindow", "cleanup") self.tabs.cleanup() - self.common.gui.onion.cleanup() + + alert = Alert( + self.common, + strings._("gui_rendezvous_cleanup"), + QtWidgets.QMessageBox.Information, + buttons=QtWidgets.QMessageBox.NoButton, + autostart=False, + ) + quit_early_button = QtWidgets.QPushButton( + strings._("gui_rendezvous_cleanup_quit_early") + ) + alert.addButton(quit_early_button, QtWidgets.QMessageBox.RejectRole) + + self.onion_cleanup_thread = OnionCleanupThread(self.common) + self.onion_cleanup_thread.finished.connect(alert.accept) + self.onion_cleanup_thread.start() + + alert.exec_() + if alert.clickedButton() == quit_early_button: + self.common.log("MainWindow", "cleanup", "quitting early") + if self.onion_cleanup_thread.isRunning(): + self.onion_cleanup_thread.terminate() + self.onion_cleanup_thread.wait() + self.common.gui.onion.cleanup(wait=False) # Wait 1 second for threads to close gracefully, so tests finally pass time.sleep(1) diff --git a/desktop/src/onionshare/resources/locale/ca.json b/desktop/src/onionshare/resources/locale/ca.json index 4edcc392..0015a5ba 100644 --- a/desktop/src/onionshare/resources/locale/ca.json +++ b/desktop/src/onionshare/resources/locale/ca.json @@ -107,7 +107,7 @@ "gui_settings_autostop_timer_checkbox": "Utilitza un temporitzador d'aturada", "gui_settings_autostop_timer": "Atura a:", "settings_error_unknown": "No s'ha pogut connectar a Tor perquè la configuració és inconsistent.", - "settings_error_automatic": "No s'ha pogut connectar al controlador de Tor. Heu iniciat el Tor Browser? (disponible a torproject.org)", + "settings_error_automatic": "No s'ha pogut connectar al controlador de Tor. Heu iniciat el navegador Tor? (disponible a torproject.org)", "settings_error_socket_port": "No s'ha pogut establir la connexió al controlador de Tor a {}:{}.", "settings_error_socket_file": "No s'ha pogut connectar al controlador de Tor fent servir el fitxer de socket {}.", "settings_error_auth": "S'ha establert la connexió a {}:{} però ha fallat l'autenticació. Pot ser que no sigui un controlador de Tor?", @@ -131,7 +131,7 @@ "gui_tor_connection_error_settings": "Proveu de canviar la configuració de com OnionShare es connecta a la xarxa Tor.", "gui_tor_connection_canceled": "No s'ha pogut establir la connexió amb la xarxa Tor.\n\nAssegureu-vos que teniu connexió a internet, torneu a obrir l'OnionShare i prepareu la connexió a Tor.", "gui_tor_connection_lost": "S'ha perdut la connexió amb Tor.", - "gui_server_started_after_autostop_timer": "El temporitzador de finalització automàtica ha acabat abans que s'iniciés el servidor.\nTorneu a compartir-ho.", + "gui_server_started_after_autostop_timer": "El temporitzador de finalització automàtica ha acabat abans que s'iniciés el servidor. Torneu a compartir-ho.", "gui_server_autostop_timer_expired": "El temporitzador de finalització automàtica ja s'ha acabat. Ajusteu-lo per a poder compartir.", "share_via_onionshare": "Comparteix-ho amb l'OnionShare", "gui_use_legacy_v2_onions_checkbox": "Fes servir adreces amb un format antic", @@ -280,5 +280,17 @@ "gui_chat_stop_server": "Atura el servidor de xat", "gui_chat_start_server": "Inicia el servidor de xat", "gui_file_selection_remove_all": "Treu-ho tot", - "gui_remove": "Treu" + "gui_remove": "Treu", + "error_port_not_available": "El port OnionShare no és disponible", + "gui_tab_name_chat": "Xat", + "gui_tab_name_website": "Lloc web", + "gui_tab_name_receive": "Rep", + "gui_tab_name_share": "Comparteix", + "gui_main_page_chat_button": "Comença el xat", + "gui_main_page_website_button": "Comença l'allotjatment", + "gui_main_page_receive_button": "Comença la recepció", + "gui_main_page_share_button": "Comença la compartició", + "gui_new_tab_chat_button": "Xat anònim", + "gui_open_folder_error": "No s'ha pogut obrir la carpeta amb xdg-open. El fitxer és aquí: {}", + "gui_chat_url_description": "<b>Qualsevol persona</b> amb aquesta adreça OnionShare pot <b>unir-se a aquesta sala de xat</b> fent servir el <b>navegador Tor</b>: <img src='{}' />" } diff --git a/desktop/src/onionshare/resources/locale/da.json b/desktop/src/onionshare/resources/locale/da.json index 8eea6c7f..e4da77bc 100644 --- a/desktop/src/onionshare/resources/locale/da.json +++ b/desktop/src/onionshare/resources/locale/da.json @@ -287,5 +287,7 @@ "gui_main_page_share_button": "Begynd at dele", "gui_main_page_receive_button": "Begynd at modtage", "gui_main_page_website_button": "Begynd at være vært", - "gui_main_page_chat_button": "Begynd at chatte" + "gui_main_page_chat_button": "Begynd at chatte", + "gui_chat_url_description": "<b>Alle</b> med denne OnionShare-adresse kan <b>deltage i chatrummet</b> med <b>Tor Browser</b>: <img src='{}' />", + "error_port_not_available": "OnionShare-port ikke tilgængelig" } diff --git a/desktop/src/onionshare/resources/locale/de.json b/desktop/src/onionshare/resources/locale/de.json index 0ffed7dc..25db240e 100644 --- a/desktop/src/onionshare/resources/locale/de.json +++ b/desktop/src/onionshare/resources/locale/de.json @@ -291,5 +291,6 @@ "gui_open_folder_error": "Fehler beim Öffnen des Ordners mit xdg-open. Die Datei befindet sich hier: {}", "gui_qr_code_description": "Scanne diesen QR-Code mit einem QR-Scanner, wie zB. mit der Kamera deines Smartphones, um die OnionShare-Adresse einfacher mit anderen zu teilen.", "gui_receive_flatpak_data_dir": "Da OnionShare durch Flatpak installiert wurde, müssen Dateien im Verzeichnis ~/OnionShare gespeichert werden.", - "gui_chat_url_description": "<b>Jeder</b>, der diese OnionShare-Adresse hat, kann <b>diesem Chatroom beitreten</b>, indem er den <b>Tor Browser</b> benutzt: <img src='{}' />" + "gui_chat_url_description": "<b>Jeder</b>, der diese OnionShare-Adresse hat, kann <b>diesem Chatroom beitreten</b>, indem er den <b>Tor Browser</b> benutzt: <img src='{}' />", + "error_port_not_available": "OnionShare-Port nicht verfügbar" } diff --git a/desktop/src/onionshare/resources/locale/en.json b/desktop/src/onionshare/resources/locale/en.json index 9617e9c4..502fe13e 100644 --- a/desktop/src/onionshare/resources/locale/en.json +++ b/desktop/src/onionshare/resources/locale/en.json @@ -188,5 +188,7 @@ "settings_error_bundled_tor_not_supported": "Using the Tor version that comes with OnionShare does not work in developer mode on Windows or macOS.", "settings_error_bundled_tor_timeout": "Taking too long to connect to Tor. Maybe you aren't connected to the Internet, or have an inaccurate system clock?", "settings_error_bundled_tor_broken": "OnionShare could not connect to Tor:\n{}", + "gui_rendezvous_cleanup": "Waiting for Tor circuits to close to be sure your files have successfully transferred.\n\nThis might take a few minutes.", + "gui_rendezvous_cleanup_quit_early": "Quit Early", "error_port_not_available": "OnionShare port not available" }
\ No newline at end of file diff --git a/desktop/src/onionshare/resources/locale/es.json b/desktop/src/onionshare/resources/locale/es.json index f93333c4..0035f9c5 100644 --- a/desktop/src/onionshare/resources/locale/es.json +++ b/desktop/src/onionshare/resources/locale/es.json @@ -296,5 +296,6 @@ "gui_main_page_website_button": "Empezar a alojar", "gui_main_page_receive_button": "Empezar a recibir", "gui_main_page_share_button": "Empezar a compartir", - "gui_chat_url_description": "<b>Cualquiera</b> con esta dirección de OnionShare puede <b>puede unirse a este cuarto de chat</b> usando el <b>Navegador Tor</b>: <img src='{}' />" + "gui_chat_url_description": "<b>Cualquiera</b> con esta dirección de OnionShare puede <b>puede unirse a este cuarto de chat</b> usando el <b>Navegador Tor</b>: <img src='{}' />", + "error_port_not_available": "Puerto OnionShare no disponible" } diff --git a/desktop/src/onionshare/resources/locale/gl.json b/desktop/src/onionshare/resources/locale/gl.json index 6d074949..3a5558f9 100644 --- a/desktop/src/onionshare/resources/locale/gl.json +++ b/desktop/src/onionshare/resources/locale/gl.json @@ -187,5 +187,6 @@ "settings_error_unreadable_cookie_file": "Conectado ó controlador Tor, pero o contrasinal igual está mal, ou o teu usuario non ten permiso para ler o ficheiro de cookie.", "settings_error_bundled_tor_not_supported": "A versión Tor que ven con OnionShare non funciona en modo desenvolvedor en Windows ou macOS.", "settings_error_bundled_tor_timeout": "Tarda demasiado en conectar a Tor. Igual non tes conexión a Internet, ou o reloxo do sistema está mal axustado?", - "settings_error_bundled_tor_broken": "OnionShare non puido conectar a Tor:\n{}" + "settings_error_bundled_tor_broken": "OnionShare non puido conectar a Tor:\n{}", + "error_port_not_available": "Non está dispoñible o porto OnionShare" } diff --git a/desktop/src/onionshare/resources/locale/hr.json b/desktop/src/onionshare/resources/locale/hr.json index 6c40fdfd..d7670121 100644 --- a/desktop/src/onionshare/resources/locale/hr.json +++ b/desktop/src/onionshare/resources/locale/hr.json @@ -229,5 +229,6 @@ "gui_main_page_website_button": "Pokreni hosting", "gui_main_page_receive_button": "Pokreni primanje", "gui_main_page_share_button": "Pokreni dijeljenje", - "gui_chat_url_description": "<b>Svatko</b> s ovom OnionShare adresom može se <b>pridružiti sobi za chat</b> koristeći <b>Tor preglednik</b>: <img src='{}' />" + "gui_chat_url_description": "<b>Svatko</b> s ovom OnionShare adresom može se <b>pridružiti sobi za chat</b> koristeći <b>Tor preglednik</b>: <img src='{}' />", + "error_port_not_available": "OnionShare priključak nije dostupan" } diff --git a/desktop/src/onionshare/resources/locale/pt_BR.json b/desktop/src/onionshare/resources/locale/pt_BR.json index b321ba7f..f4916351 100644 --- a/desktop/src/onionshare/resources/locale/pt_BR.json +++ b/desktop/src/onionshare/resources/locale/pt_BR.json @@ -131,7 +131,7 @@ "gui_tor_connection_error_settings": "Tente mudar nas configurações a forma como OnionShare se conecta à rede Tor.", "gui_tor_connection_canceled": "Não foi possível conectar ao Tor.\n\nTenha certeza que você está conectado à Internet, então abra OnionShare novamente e configure sua conexão ao Tor.", "gui_tor_connection_lost": "Desconectado do Tor.", - "gui_server_started_after_autostop_timer": "O tempo esgotou antes do servidor iniciar.\nPor favor, crie um novo compartilhamento.", + "gui_server_started_after_autostop_timer": "O cronômetro de parada automática acabou antes que o servidor fosse iniciado. Por favor, faça um novo compartilhamento.", "gui_server_autostop_timer_expired": "O cronômetro já esgotou. Por favor, ajuste-o para começar a compartilhar.", "share_via_onionshare": "Compartilhar via OnionShare", "gui_use_legacy_v2_onions_checkbox": "Usar endereços do tipo antigo", @@ -282,5 +282,7 @@ "gui_chat_start_server": "Iniciar um servidor de conversas", "gui_file_selection_remove_all": "Remover tudo", "gui_remove": "Remover", - "gui_tab_name_chat": "Bate-papo" + "gui_tab_name_chat": "Bate-papo", + "error_port_not_available": "Porta OnionShare não disponível", + "gui_chat_url_description": "<b>Qualquer um</b> com este endereço OnionShare pode <b>entrar nesta sala de chat</b> usando o <b>Tor Browser</b>: <img src='{}' />" } diff --git a/desktop/src/onionshare/resources/locale/tr.json b/desktop/src/onionshare/resources/locale/tr.json index 1fae24b1..c5663e48 100644 --- a/desktop/src/onionshare/resources/locale/tr.json +++ b/desktop/src/onionshare/resources/locale/tr.json @@ -254,5 +254,6 @@ "gui_tab_name_receive": "Al", "gui_tab_name_website": "Web Sitesi", "gui_tab_name_chat": "Sohbet", - "gui_chat_url_description": "Bu OnionShare adresine sahip olan <b>herkes</b> <b>Tor Browser</b> kullanarak <b>bu sohbet odasına katılabilir</b>: <img src='{}' />" + "gui_chat_url_description": "Bu OnionShare adresine sahip olan <b>herkes</b> <b>Tor Browser</b> kullanarak <b>bu sohbet odasına katılabilir</b>: <img src='{}' />", + "error_port_not_available": "OnionShare bağlantı noktası kullanılamıyor" } diff --git a/desktop/src/onionshare/resources/locale/uk.json b/desktop/src/onionshare/resources/locale/uk.json index bb16daaf..528c19c1 100644 --- a/desktop/src/onionshare/resources/locale/uk.json +++ b/desktop/src/onionshare/resources/locale/uk.json @@ -229,5 +229,6 @@ "gui_main_page_chat_button": "Почати спілкуватися в чаті", "gui_main_page_website_button": "Почати хостинг", "gui_main_page_receive_button": "Почати отримання", - "gui_chat_url_description": "<b>Будь-хто</b> за цією адресою OnionShare може <b>приєднатися до цієї бесіди</b> за допомогою <b>Tor Browser</b>: <img src='{}' />" + "gui_chat_url_description": "<b>Будь-хто</b> за цією адресою OnionShare може <b>приєднатися до цієї бесіди</b> за допомогою <b>Tor Browser</b>: <img src='{}' />", + "error_port_not_available": "Порт OnionShare недоступний" } diff --git a/desktop/src/onionshare/resources/locale/zh_Hans.json b/desktop/src/onionshare/resources/locale/zh_Hans.json index 497e42df..6ba6607c 100644 --- a/desktop/src/onionshare/resources/locale/zh_Hans.json +++ b/desktop/src/onionshare/resources/locale/zh_Hans.json @@ -31,7 +31,7 @@ "help_verbose": "将OnionShare错误日志记录到stdout,将web错误日志记录到磁盘", "help_filename": "要分享的文件或文件夹的列表", "help_config": "自定义JSON配置文件的路径(可选)", - "gui_drag_and_drop": "拖动文件或文件夹\n以开始共享", + "gui_drag_and_drop": "拖放文件和文件夹以开始共享", "gui_add": "添加", "gui_delete": "删除", "gui_choose_items": "选取", @@ -243,7 +243,7 @@ "mode_settings_autostop_timer_checkbox": "定时停止onion服务", "mode_settings_autostart_timer_checkbox": "定时起动onion服务", "mode_settings_public_checkbox": "不使用密码", - "mode_settings_persistent_checkbox": "保存此标签,并在打开OnionShare时自动打开它。", + "mode_settings_persistent_checkbox": "保存此标签,并在我打开OnionShare时自动打开它", "mode_settings_advanced_toggle_hide": "隐藏高级选项", "mode_settings_advanced_toggle_show": "显示高级选项", "gui_quit_warning_cancel": "取消", @@ -270,5 +270,17 @@ "gui_chat_start_server": "开始言论服务器", "gui_file_selection_remove_all": "删除所有", "gui_remove": "删除", - "gui_qr_code_dialog_title": "Onionshare 二维码" + "gui_qr_code_dialog_title": "Onionshare 二维码", + "error_port_not_available": "OnionShare端口不可用", + "gui_tab_name_chat": "聊天", + "gui_tab_name_website": "网站", + "gui_tab_name_receive": "接收", + "gui_tab_name_share": "分享", + "gui_main_page_chat_button": "开始聊天", + "gui_main_page_website_button": "开始托管", + "gui_main_page_receive_button": "开始接收", + "gui_main_page_share_button": "开始分享", + "gui_new_tab_chat_button": "匿名聊天", + "gui_open_folder_error": "用xdg-open打开文件夹失败。文件在这里: {}", + "gui_chat_url_description": "<b>任何</b>有这个OnionShare地址的人均可 <b>加入这个聊天室</b>,方法是使用<b>Tor浏览器</b>:<img src='{}' />" } diff --git a/desktop/src/onionshare/tab/mode/__init__.py b/desktop/src/onionshare/tab/mode/__init__.py index 7d2159c7..c48f20c0 100644 --- a/desktop/src/onionshare/tab/mode/__init__.py +++ b/desktop/src/onionshare/tab/mode/__init__.py @@ -107,6 +107,12 @@ class Mode(QtWidgets.QWidget): """ pass + def get_type(self): + """ + Returns the type of mode as a string (e.g. "share", "receive", etc.) + """ + pass + def human_friendly_time(self, secs): """ Returns a human-friendly time delta from given seconds. diff --git a/desktop/src/onionshare/tab/mode/chat_mode/__init__.py b/desktop/src/onionshare/tab/mode/chat_mode/__init__.py index 25a02969..a7c2929b 100644 --- a/desktop/src/onionshare/tab/mode/chat_mode/__init__.py +++ b/desktop/src/onionshare/tab/mode/chat_mode/__init__.py @@ -101,6 +101,12 @@ class ChatMode(Mode): self.wrapper_layout.addLayout(self.column_layout) self.setLayout(self.wrapper_layout) + def get_type(self): + """ + Returns the type of mode as a string (e.g. "share", "receive", etc.) + """ + return "chat" + def get_stop_server_autostop_timer_text(self): """ Return the string to put on the stop server button, if there's an auto-stop timer diff --git a/desktop/src/onionshare/tab/mode/receive_mode/__init__.py b/desktop/src/onionshare/tab/mode/receive_mode/__init__.py index 95d1ecbe..95a68dcb 100644 --- a/desktop/src/onionshare/tab/mode/receive_mode/__init__.py +++ b/desktop/src/onionshare/tab/mode/receive_mode/__init__.py @@ -149,6 +149,12 @@ class ReceiveMode(Mode): self.wrapper_layout.addLayout(self.column_layout) self.setLayout(self.wrapper_layout) + def get_type(self): + """ + Returns the type of mode as a string (e.g. "share", "receive", etc.) + """ + return "receive" + def data_dir_button_clicked(self): """ Browse for a new OnionShare data directory, and save to tab settings diff --git a/desktop/src/onionshare/tab/mode/share_mode/__init__.py b/desktop/src/onionshare/tab/mode/share_mode/__init__.py index ccf85dbd..bf1498d5 100644 --- a/desktop/src/onionshare/tab/mode/share_mode/__init__.py +++ b/desktop/src/onionshare/tab/mode/share_mode/__init__.py @@ -173,6 +173,12 @@ class ShareMode(Mode): # Always start with focus on file selection self.file_selection.setFocus() + def get_type(self): + """ + Returns the type of mode as a string (e.g. "share", "receive", etc.) + """ + return "share" + def autostop_sharing_checkbox_clicked(self): """ Save autostop sharing setting to the tab settings diff --git a/desktop/src/onionshare/tab/mode/website_mode/__init__.py b/desktop/src/onionshare/tab/mode/website_mode/__init__.py index 325b22f1..6df6ff02 100644 --- a/desktop/src/onionshare/tab/mode/website_mode/__init__.py +++ b/desktop/src/onionshare/tab/mode/website_mode/__init__.py @@ -173,6 +173,12 @@ class WebsiteMode(Mode): # Always start with focus on file selection self.file_selection.setFocus() + def get_type(self): + """ + Returns the type of mode as a string (e.g. "share", "receive", etc.) + """ + return "website" + def disable_csp_checkbox_clicked(self): """ Save disable CSP setting to the tab settings diff --git a/desktop/src/onionshare/tab/tab.py b/desktop/src/onionshare/tab/tab.py index 8f5ffd08..8cbddfed 100644 --- a/desktop/src/onionshare/tab/tab.py +++ b/desktop/src/onionshare/tab/tab.py @@ -669,7 +669,9 @@ class Tab(QtWidgets.QWidget): return False def cleanup(self): + self.common.log("Tab", "cleanup", f"tab_id={self.tab_id}") if self.get_mode() and self.get_mode().web_thread: + self.get_mode().web.stop(self.get_mode().app.port) self.get_mode().web_thread.quit() self.get_mode().web_thread.wait() self.app.cleanup() diff --git a/desktop/src/onionshare/tab_widget.py b/desktop/src/onionshare/tab_widget.py index 84d16e83..b78e67dd 100644 --- a/desktop/src/onionshare/tab_widget.py +++ b/desktop/src/onionshare/tab_widget.py @@ -81,6 +81,8 @@ class TabWidget(QtWidgets.QTabWidget): self.event_handler_t.start() def cleanup(self): + self.common.log("TabWidget", "cleanup") + # Stop the event thread self.event_handler_t.should_quit = True self.event_handler_t.quit() diff --git a/desktop/src/onionshare/threads.py b/desktop/src/onionshare/threads.py index 285b51b9..0c31a838 100644 --- a/desktop/src/onionshare/threads.py +++ b/desktop/src/onionshare/threads.py @@ -77,7 +77,7 @@ class OnionThread(QtCore.QThread): try: if self.mode.obtain_onion_early: self.mode.app.start_onion_service( - self.mode.settings, await_publication=False + self.mode.get_type(), self.mode.settings, await_publication=False ) # wait for modules in thread to load, preventing a thread-related cx_Freeze crash time.sleep(0.2) @@ -86,7 +86,7 @@ class OnionThread(QtCore.QThread): self.mode.app.stop_onion_service(self.mode.settings) else: self.mode.app.start_onion_service( - self.mode.settings, await_publication=True + self.mode.get_type(), self.mode.settings, await_publication=True ) # wait for modules in thread to load, preventing a thread-related cx_Freeze crash time.sleep(0.2) @@ -258,3 +258,18 @@ class EventHandlerThread(QtCore.QThread): if self.should_quit: break time.sleep(0.2) + + +class OnionCleanupThread(QtCore.QThread): + """ + Wait for Tor rendezvous circuits to close in a separate thread + """ + + def __init__(self, common): + super(OnionCleanupThread, self).__init__() + self.common = common + self.common.log("OnionCleanupThread", "__init__") + + def run(self): + self.common.log("OnionCleanupThread", "run") + self.common.gui.onion.cleanup() |