1
0
Fork 0
mirror of synced 2024-07-03 05:31:23 +12:00
Rare/rare/components/dialogs/launch_dialog.py

106 lines
3.1 KiB
Python
Raw Normal View History

2021-02-18 06:19:37 +13:00
from logging import getLogger
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QDialog, QLabel, QProgressBar, QVBoxLayout
2021-04-23 00:34:06 +12:00
from requests.exceptions import ConnectionError
2021-02-18 06:19:37 +13:00
2021-04-23 00:34:06 +12:00
from custom_legendary.core import LegendaryCore
2021-04-08 08:39:23 +12:00
from rare.components.dialogs.login import LoginDialog
from rare.utils.utils import download_images
2021-02-23 07:02:49 +13:00
2021-02-18 06:19:37 +13:00
logger = getLogger("Login")
2021-02-23 07:02:49 +13:00
2021-02-18 06:19:37 +13:00
class LaunchThread(QThread):
download_progess = pyqtSignal(int)
action = pyqtSignal(str)
def __init__(self, core: LegendaryCore, parent=None):
super(LaunchThread, self).__init__(parent)
self.core = core
def run(self):
self.action.emit("Login")
self.action.emit(self.tr("Downloading Images"))
2021-02-18 06:19:37 +13:00
download_images(self.download_progess, self.core)
self.action.emit("finish")
2021-02-23 07:02:49 +13:00
2021-02-18 06:19:37 +13:00
class LoginThread(QThread):
login = pyqtSignal()
2021-04-20 01:44:28 +12:00
start_app = pyqtSignal(bool) # offline
2021-02-23 07:02:49 +13:00
2021-02-18 06:19:37 +13:00
def __init__(self, core: LegendaryCore):
super(LoginThread, self).__init__()
self.core = core
def run(self):
logger.info("Try if you are logged in")
try:
if self.core.login():
logger.info("You are logged in")
2021-04-20 01:44:28 +12:00
self.start_app.emit(False)
2021-02-18 06:19:37 +13:00
else:
self.run()
except ValueError:
logger.info("You are not logged in. Open Login Window")
self.login.emit()
2021-04-20 01:44:28 +12:00
except ConnectionError as e:
logger.warning(e)
self.start_app.emit(True)
2021-02-18 06:19:37 +13:00
class LaunchDialog(QDialog):
2021-04-20 01:44:28 +12:00
start_app = pyqtSignal(bool)
2021-04-20 01:44:28 +12:00
def __init__(self, core: LegendaryCore, offline):
2021-02-18 06:19:37 +13:00
super(LaunchDialog, self).__init__()
self.core = core
2021-04-20 01:44:28 +12:00
if not offline:
self.login_thread = LoginThread(core)
self.login_thread.login.connect(self.login)
self.login_thread.start_app.connect(self.launch)
self.login_thread.start()
2021-02-18 06:19:37 +13:00
2021-02-23 07:02:49 +13:00
self.title = QLabel("<h3>" + self.tr("Launching Rare") + "</h3>")
2021-02-18 06:19:37 +13:00
self.info_pb = QProgressBar()
self.info_text = QLabel(self.tr("Logging in"))
self.layout = QVBoxLayout()
self.layout.addWidget(self.title)
self.layout.addWidget(self.info_pb)
self.layout.addWidget(self.info_text)
self.setLayout(self.layout)
2021-04-20 01:44:28 +12:00
if offline:
self.launch(offline)
def login(self):
self.hide()
2021-03-09 08:36:42 +13:00
if LoginDialog(core=self.core).login():
self.show()
2021-03-09 08:36:42 +13:00
self.login_thread.start()
else:
2021-02-18 22:22:15 +13:00
exit(0)
2021-04-20 01:44:28 +12:00
def launch(self, offline=False):
2021-03-19 00:45:59 +13:00
# self.core = core
2021-04-20 01:44:28 +12:00
self.offline = offline
2021-03-12 00:56:38 +13:00
self.info_text.setText(self.tr("Downloading Images"))
2021-02-18 06:19:37 +13:00
self.thread = LaunchThread(self.core, self)
self.thread.download_progess.connect(self.update_pb)
self.thread.action.connect(self.info)
self.thread.start()
def update_pb(self, i: int):
2021-04-17 04:56:33 +12:00
self.info_pb.setValue(i)
2021-02-18 06:19:37 +13:00
def info(self, text: str):
if text == "finish":
2021-03-25 05:01:12 +13:00
self.info_text.setText(self.tr("Starting..."))
self.info_pb.setValue(100)
2021-04-20 01:44:28 +12:00
self.start_app.emit(self.offline)
2021-03-25 05:01:12 +13:00
else:
self.info_text.setText(text)