1
0
Fork 0
mirror of synced 2024-06-22 16:20:32 +12:00
Rare/rare/components/dialogs/launch_dialog.py
2024-01-02 17:57:02 +02:00

91 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()