90 lines
3.1 KiB
Python
90 lines
3.1 KiB
Python
from logging import getLogger
|
|
|
|
from PyQt5.QtCore import Qt, pyqtSignal, pyqtSlot
|
|
from requests.exceptions import ConnectionError, HTTPError
|
|
|
|
from rare.components.dialogs.login import LoginDialog
|
|
from rare.shared import RareCore
|
|
from rare.ui.components.dialogs.launch_dialog import Ui_LaunchDialog
|
|
from rare.widgets.dialogs import BaseDialog
|
|
from rare.widgets.elide_label import ElideLabel
|
|
|
|
logger = getLogger("LaunchDialog")
|
|
|
|
|
|
class LaunchDialog(BaseDialog):
|
|
# lk: the reason we use the `start_app` signal here instead of accepted, is to keep the dialog
|
|
# until the main window has been created, then we call `accept()` to close the dialog
|
|
start_app = pyqtSignal()
|
|
|
|
def __init__(self, parent=None):
|
|
super(LaunchDialog, self).__init__(parent=parent)
|
|
self.setWindowFlags(
|
|
Qt.Window
|
|
| Qt.Dialog
|
|
| Qt.CustomizeWindowHint
|
|
| Qt.WindowSystemMenuHint
|
|
| Qt.WindowTitleHint
|
|
| Qt.WindowMinimizeButtonHint
|
|
| Qt.MSWindowsFixedSizeDialogHint
|
|
)
|
|
|
|
self.ui = Ui_LaunchDialog()
|
|
self.ui.setupUi(self)
|
|
|
|
self.progress_info = ElideLabel(parent=self)
|
|
self.progress_info.setFixedHeight(False)
|
|
self.ui.launch_layout.addWidget(self.progress_info)
|
|
|
|
self.rcore = RareCore.instance()
|
|
self.rcore.progress.connect(self.__on_progress)
|
|
self.rcore.completed.connect(self.__on_completed)
|
|
self.core = self.rcore.core()
|
|
self.args = self.rcore.args()
|
|
|
|
self.login_dialog = LoginDialog(core=self.core, parent=parent)
|
|
self.login_dialog.rejected.connect(self.reject)
|
|
self.login_dialog.accepted.connect(self.do_launch)
|
|
|
|
def login(self):
|
|
can_launch = True
|
|
try:
|
|
if not self.args.offline:
|
|
# Force an update check and notice in case there are API changes
|
|
# self.core.check_for_updates(force=True)
|
|
# self.core.force_show_update = True
|
|
if not self.core.login(force_refresh=True):
|
|
raise ValueError("You are not logged in. Opening login window.")
|
|
logger.info("You are logged in")
|
|
self.login_dialog.close()
|
|
except ValueError as e:
|
|
logger.info(str(e))
|
|
# Do not set parent, because it won't show a task bar icon
|
|
# Update: Inherit the same parent as LaunchDialog
|
|
can_launch = False
|
|
self.login_dialog.open()
|
|
except (HTTPError, ConnectionError) as e:
|
|
logger.warning(e)
|
|
self.args.offline = True
|
|
finally:
|
|
if can_launch:
|
|
self.do_launch()
|
|
|
|
@pyqtSlot()
|
|
def do_launch(self):
|
|
if not self.args.silent:
|
|
self.open()
|
|
self.launch()
|
|
|
|
def launch(self):
|
|
self.progress_info.setText(self.tr("Preparing Rare"))
|
|
self.rcore.fetch()
|
|
|
|
@pyqtSlot(int, str)
|
|
def __on_progress(self, i: int, m: str):
|
|
self.ui.progress_bar.setValue(i)
|
|
self.progress_info.setText(m)
|
|
|
|
def __on_completed(self):
|
|
logger.info("App starting")
|
|
self.start_app.emit()
|