Use an enum to define the thread status
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from PyQt5 import uic
|
||||
from PyQt5.QtCore import Qt, pyqtSlot
|
||||
from PyQt5.QtWidgets import QWidget, QMessageBox
|
||||
from download_thread import DownloadThread
|
||||
from threads import DownloadThread, ThreadStatus
|
||||
Ui_Download_window, _ = uic.loadUiType("download_db_window.ui")
|
||||
|
||||
class DownloadWindow(QWidget, Ui_Download_window):
|
||||
@@ -37,18 +37,15 @@ class DownloadWindow(QWidget, Ui_Download_window):
|
||||
|
||||
self.download_thread = DownloadThread(db_location, data_folder)
|
||||
self.download_thread.finished.connect(self.wait_close)
|
||||
self.download_thread.no_connection_error.connect(self.show_no_connection_warning)
|
||||
self.download_thread.bad_db_download_error.connect(self.show_bad_download_warning)
|
||||
|
||||
self.cancel_btn.clicked.connect(self.terminate_process)
|
||||
|
||||
@pyqtSlot()
|
||||
def show_no_connection_warning(self):
|
||||
self.bad_db_download_msg.setText(f"Unable to correctly download the database.\nReason: {self.download_thread.reason}")
|
||||
self.bad_db_download_msg.setText(f"""Unable to correctly download the database.
|
||||
Reason: {self.download_thread.reason}""")
|
||||
self.no_internet_msg.show()
|
||||
self.everything_ok = False
|
||||
|
||||
@pyqtSlot()
|
||||
def show_bad_download_warning(self):
|
||||
self.bad_db_download_msg.show()
|
||||
self.everything_ok = False
|
||||
@@ -62,8 +59,14 @@ class DownloadWindow(QWidget, Ui_Download_window):
|
||||
|
||||
@pyqtSlot()
|
||||
def wait_close(self):
|
||||
if self.download_thread.regular_execution:
|
||||
self.close()
|
||||
if self.download_thread.status == ThreadStatus.ok:
|
||||
self.close()
|
||||
elif self.download_thread.status == ThreadStatus.no_connection_err:
|
||||
self.show_no_connection_warning()
|
||||
elif self.download_thread.status == ThreadStatus.bad_download_err:
|
||||
self.show_bad_download_warning
|
||||
else:
|
||||
self.close()
|
||||
|
||||
def reject(self):
|
||||
if self.download_thread.isRunning():
|
||||
|
||||
4
main.py
4
main.py
@@ -55,7 +55,6 @@ class MyApp(QMainWindow, Ui_MainWindow):
|
||||
self.setupUi(self)
|
||||
self.set_initial_size()
|
||||
self.download_window = DownloadWindow(self.db_location, self.data_folder)
|
||||
self.show()
|
||||
self.actionExit.triggered.connect(qApp.quit)
|
||||
self.action_update_database.triggered.connect(self.download_db)
|
||||
self.db_version = None
|
||||
@@ -289,6 +288,9 @@ class MyApp(QMainWindow, Ui_MainWindow):
|
||||
self.description_text,]
|
||||
|
||||
self.url_button.clicked.connect(self.go_to_web_page_signal)
|
||||
|
||||
self.show()
|
||||
|
||||
self.load_db()
|
||||
self.display_signals()
|
||||
self.search_bar.textChanged.connect(self.display_signals)
|
||||
|
||||
@@ -1,24 +1,31 @@
|
||||
from enum import Enum, auto
|
||||
from io import BytesIO
|
||||
from os import mkdir
|
||||
import os.path
|
||||
from shutil import rmtree
|
||||
import urllib3
|
||||
from zipfile import ZipFile
|
||||
from PyQt5.QtCore import QThread, pyqtSignal
|
||||
from PyQt5.QtCore import QThread
|
||||
import utilities
|
||||
|
||||
class DownloadThread(QThread):
|
||||
no_connection_error = pyqtSignal()
|
||||
bad_db_download_error = pyqtSignal()
|
||||
bad_file_error = pyqtSignal()
|
||||
class ThreadStatus(Enum):
|
||||
ok = auto()
|
||||
no_connection_err = auto()
|
||||
no_file_err = auto()
|
||||
bad_download_err = auto()
|
||||
|
||||
class DownloadThread(QThread):
|
||||
def __init__(self, db_location, path):
|
||||
super().__init__()
|
||||
self.__db_location = db_location
|
||||
self.__path = path
|
||||
self.regular_execution = True
|
||||
self.__status = None
|
||||
self.reason = 0
|
||||
|
||||
@property
|
||||
def status(self):
|
||||
return self.__status
|
||||
|
||||
def __del__(self):
|
||||
self.terminate()
|
||||
self.wait()
|
||||
@@ -29,26 +36,27 @@ class DownloadThread(QThread):
|
||||
# db = urllib.request.urlopen(self.__db_location)
|
||||
# raise urllib.error.URLError('Test')
|
||||
except urllib3.exceptions.MaxRetryError: # No internet connection.
|
||||
self.regular_execution = False
|
||||
self.no_connection_error.emit()
|
||||
# self.no_connection_error.emit()
|
||||
self.__status = ThreadStatus.no_connection_err
|
||||
return
|
||||
if db.status != 200:
|
||||
self.regular_execution = False
|
||||
self.reason = db.reason
|
||||
self.bad_db_download_error.emit()
|
||||
# self.bad_download_error.emit()
|
||||
self.__status = ThreadStatus.bad_download_err
|
||||
return
|
||||
if not utilities.checksum_ok(db.data, "folder"):
|
||||
regular_execution = False
|
||||
self.bad_db_download_error.emit()
|
||||
# self.bad_download_error.emit()
|
||||
self.__status = ThreadStatus.bad_download_err
|
||||
return
|
||||
if os.path.exists(self.__path):
|
||||
rmtree(self.__path)
|
||||
try:
|
||||
# data_folder = db.read()
|
||||
# data_folder = db.data
|
||||
# data_folder = db.read()
|
||||
with ZipFile(BytesIO(db.data)) as zipped:
|
||||
zipped.extractall()
|
||||
except:
|
||||
self.regular_execution = False
|
||||
self.bad_file_error.emit()
|
||||
# self.bad_file_error.emit()
|
||||
self.__status = ThreadStatus.bad_file_err
|
||||
return
|
||||
else:
|
||||
self.__status = ThreadStatus.ok
|
||||
Reference in New Issue
Block a user