87 lines
2.8 KiB
Python
87 lines
2.8 KiB
Python
import os
|
|
from logging import getLogger
|
|
|
|
from PyQt5.QtCore import Qt, QThread, pyqtSignal
|
|
from PyQt5.QtWidgets import QDialog
|
|
from requests.exceptions import ConnectionError
|
|
|
|
from legendary.core import LegendaryCore
|
|
from rare import image_dir
|
|
from rare.components.dialogs.login import LoginDialog
|
|
from rare.ui.components.dialogs.launch_dialog import Ui_LaunchDialog
|
|
from rare.utils.utils import download_images
|
|
|
|
logger = getLogger("Login")
|
|
|
|
|
|
class ImageThread(QThread):
|
|
download_progess = pyqtSignal(int)
|
|
|
|
def __init__(self, core: LegendaryCore, parent=None):
|
|
super(ImageThread, self).__init__(parent)
|
|
self.core = core
|
|
|
|
def run(self):
|
|
download_images(self.download_progess, self.core)
|
|
self.download_progess.emit(100)
|
|
|
|
|
|
class LaunchDialog(QDialog, Ui_LaunchDialog):
|
|
quit_app = pyqtSignal(int)
|
|
start_app = pyqtSignal(bool)
|
|
|
|
def __init__(self, core: LegendaryCore, offline=False, parent=None):
|
|
super(LaunchDialog, self).__init__(parent=parent)
|
|
self.setupUi(self)
|
|
self.setAttribute(Qt.WA_DeleteOnClose, True)
|
|
self.core = core
|
|
self.offline = offline
|
|
self.image_thread = None
|
|
|
|
def login(self):
|
|
do_launch = True
|
|
try:
|
|
if self.offline:
|
|
pass
|
|
else:
|
|
if self.core.login():
|
|
logger.info("You are logged in")
|
|
else:
|
|
raise ValueError("You are not logged in. Open Login Window")
|
|
except ValueError as e:
|
|
logger.info(str(e))
|
|
do_launch = LoginDialog(core=self.core, parent=self).login()
|
|
except ConnectionError as e:
|
|
logger.warning(e)
|
|
self.offline = True
|
|
finally:
|
|
if do_launch:
|
|
self.show()
|
|
self.launch()
|
|
else:
|
|
self.quit_app.emit(0)
|
|
|
|
def launch(self):
|
|
# self.core = core
|
|
if not os.path.exists(image_dir):
|
|
os.makedirs(image_dir)
|
|
|
|
if not self.offline:
|
|
self.image_info.setText(self.tr("Downloading Images"))
|
|
self.image_thread = ImageThread(self.core, self)
|
|
self.image_thread.download_progess.connect(self.update_image_progbar)
|
|
self.image_thread.finished.connect(self.finish)
|
|
self.image_thread.finished.connect(lambda: self.image_info.setText(self.tr("Ready")))
|
|
self.image_thread.finished.connect(self.image_thread.quit)
|
|
self.image_thread.finished.connect(self.image_thread.deleteLater)
|
|
self.image_thread.start()
|
|
else:
|
|
self.finish()
|
|
|
|
def update_image_progbar(self, i: int):
|
|
self.image_prog_bar.setValue(i)
|
|
|
|
def finish(self):
|
|
self.image_info.setText(self.tr("Starting..."))
|
|
self.image_prog_bar.setValue(100)
|
|
self.start_app.emit(self.offline)
|