diff --git a/download_window.py b/download_window.py index 1469d3b..7951960 100644 --- a/download_window.py +++ b/download_window.py @@ -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(): diff --git a/main.py b/main.py index 80a5ea0..4fb18fa 100644 --- a/main.py +++ b/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) diff --git a/download_thread.py b/threads.py similarity index 58% rename from download_thread.py rename to threads.py index 699976e..80e33c3 100644 --- a/download_thread.py +++ b/threads.py @@ -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