1
0
Fork 0
mirror of synced 2024-06-26 18:20:50 +12:00
Rare/Rare/Components/Launch/LaunchDialog.py

79 lines
2.4 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
from legendary.core import LegendaryCore
from Rare.utils.Dialogs.Login.LoginDialog import LoginDialog
from Rare.utils.utils import download_images
logger = getLogger("Login")
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("Downloading Images")
download_images(self.download_progess, self.core)
self.action.emit("finish")
class LoginThread(QThread):
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")
else:
self.run()
except ValueError:
logger.info("You are not logged in. Open Login Window")
login_window = LoginDialog(self.core)
if not login_window.login():
return
class LaunchDialog(QDialog):
def __init__(self, core: LegendaryCore):
super(LaunchDialog, self).__init__()
self.core = core
self.login_thread = LoginThread(core)
self.login_thread.finished.connect(self.launch)
self.login_thread.start()
self.title = QLabel("<h3>"+self.tr("Launching Rare")+"</h3>")
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)
def launch(self):
self.info_pb.setMaximum(len(self.core.get_game_list()))
self.info_text.setText("Downloading Images")
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):
self.info_pb.setValue(i)
def info(self, text: str):
if text == "finish":
self.close()
self.info_text.setText(text)