2021-12-19 11:24:20 +13:00
|
|
|
import platform
|
2021-02-18 06:19:37 +13:00
|
|
|
from logging import getLogger
|
|
|
|
|
2023-03-05 00:23:18 +13:00
|
|
|
from PyQt5.QtCore import Qt, pyqtSignal, pyqtSlot
|
2022-09-02 07:49:09 +12:00
|
|
|
from PyQt5.QtWidgets import QDialog, QApplication
|
2021-10-05 08:01:45 +13:00
|
|
|
from requests.exceptions import ConnectionError, HTTPError
|
2021-02-18 06:19:37 +13:00
|
|
|
|
2021-04-08 08:39:23 +12:00
|
|
|
from rare.components.dialogs.login import LoginDialog
|
2023-03-05 00:23:18 +13:00
|
|
|
from rare.shared import RareCore
|
2021-05-21 23:09:26 +12:00
|
|
|
from rare.ui.components.dialogs.launch_dialog import Ui_LaunchDialog
|
2022-09-11 07:42:47 +12:00
|
|
|
from rare.widgets.elide_label import ElideLabel
|
2021-02-23 07:02:49 +13:00
|
|
|
|
2022-09-08 00:35:51 +12:00
|
|
|
logger = getLogger("LaunchDialog")
|
2021-02-18 06:19:37 +13:00
|
|
|
|
2021-02-23 07:02:49 +13:00
|
|
|
|
2022-09-02 00:13:58 +12:00
|
|
|
class LaunchDialog(QDialog):
|
2023-09-14 06:36:11 +12:00
|
|
|
exit_app = pyqtSignal(int)
|
2021-10-08 07:19:24 +13:00
|
|
|
start_app = pyqtSignal()
|
2021-03-25 23:49:05 +13:00
|
|
|
|
2021-10-08 07:19:24 +13:00
|
|
|
def __init__(self, parent=None):
|
2021-06-08 08:12:26 +12:00
|
|
|
super(LaunchDialog, self).__init__(parent=parent)
|
2021-06-04 09:33:36 +12:00
|
|
|
self.setAttribute(Qt.WA_DeleteOnClose, True)
|
2022-06-24 05:39:43 +12:00
|
|
|
self.setWindowFlags(
|
|
|
|
Qt.Window
|
|
|
|
| Qt.Dialog
|
|
|
|
| Qt.CustomizeWindowHint
|
2022-06-24 08:33:20 +12:00
|
|
|
| Qt.WindowSystemMenuHint
|
2022-06-24 05:39:43 +12:00
|
|
|
| Qt.WindowTitleHint
|
|
|
|
| Qt.WindowMinimizeButtonHint
|
2022-06-24 08:33:20 +12:00
|
|
|
| Qt.MSWindowsFixedSizeDialogHint
|
2022-06-24 05:39:43 +12:00
|
|
|
)
|
2022-01-30 12:23:37 +13:00
|
|
|
self.setWindowModality(Qt.WindowModal)
|
2022-09-02 00:13:58 +12:00
|
|
|
self.ui = Ui_LaunchDialog()
|
|
|
|
self.ui.setupUi(self)
|
2022-01-30 12:23:37 +13:00
|
|
|
|
2023-12-10 10:38:30 +13:00
|
|
|
self.reject_close = True
|
2023-03-05 00:23:18 +13:00
|
|
|
|
2022-09-11 07:42:47 +12:00
|
|
|
self.progress_info = ElideLabel(parent=self)
|
2023-02-21 01:26:14 +13:00
|
|
|
self.progress_info.setFixedHeight(False)
|
2023-02-21 01:58:01 +13:00
|
|
|
self.ui.launch_layout.addWidget(self.progress_info)
|
2022-09-11 07:42:47 +12:00
|
|
|
|
2023-03-05 00:23:18 +13:00
|
|
|
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()
|
2021-04-20 01:44:28 +12:00
|
|
|
|
2022-09-11 03:07:32 +12:00
|
|
|
self.login_dialog = LoginDialog(core=self.core, parent=parent)
|
2022-09-02 07:49:09 +12:00
|
|
|
|
2021-02-18 21:46:30 +13:00
|
|
|
def login(self):
|
2021-06-08 08:12:26 +12:00
|
|
|
do_launch = True
|
|
|
|
try:
|
2022-02-26 06:43:27 +13:00
|
|
|
if self.args.offline:
|
2021-06-08 08:12:26 +12:00
|
|
|
pass
|
|
|
|
else:
|
2022-09-05 04:51:23 +12:00
|
|
|
# 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
|
2021-06-08 08:12:26 +12:00
|
|
|
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))
|
2022-04-26 07:33:07 +12:00
|
|
|
# Do not set parent, because it won't show a task bar icon
|
2022-06-24 02:57:29 +12:00
|
|
|
# Update: Inherit the same parent as LaunchDialog
|
2022-09-02 07:49:09 +12:00
|
|
|
do_launch = self.login_dialog.login()
|
|
|
|
except (HTTPError, ConnectionError) as e:
|
2021-06-08 08:12:26 +12:00
|
|
|
logger.warning(e)
|
2022-02-26 06:43:27 +13:00
|
|
|
self.args.offline = True
|
2021-06-08 08:12:26 +12:00
|
|
|
finally:
|
|
|
|
if do_launch:
|
2022-02-26 06:43:27 +13:00
|
|
|
if not self.args.silent:
|
2021-12-10 08:03:34 +13:00
|
|
|
self.show()
|
2021-06-08 08:12:26 +12:00
|
|
|
self.launch()
|
|
|
|
else:
|
2023-09-14 06:36:11 +12:00
|
|
|
self.exit_app.emit(0)
|
2021-02-18 21:46:30 +13:00
|
|
|
|
2021-06-08 08:12:26 +12:00
|
|
|
def launch(self):
|
2022-09-11 07:42:47 +12:00
|
|
|
self.progress_info.setText(self.tr("Preparing Rare"))
|
2023-03-05 00:23:18 +13:00
|
|
|
self.rcore.fetch()
|
2021-06-12 10:29:55 +12:00
|
|
|
|
2022-09-11 02:27:37 +12:00
|
|
|
@pyqtSlot(int, str)
|
2023-03-05 00:23:18 +13:00
|
|
|
def __on_progress(self, i: int, m: str):
|
2022-09-11 07:42:47 +12:00
|
|
|
self.ui.progress_bar.setValue(i)
|
|
|
|
self.progress_info.setText(m)
|
2021-05-21 23:09:26 +12:00
|
|
|
|
2023-03-05 00:23:18 +13:00
|
|
|
def __on_completed(self):
|
|
|
|
logger.info("App starting")
|
2023-12-10 10:38:30 +13:00
|
|
|
self.reject_close = False
|
2023-03-05 00:23:18 +13:00
|
|
|
self.start_app.emit()
|
2022-06-24 08:33:20 +12:00
|
|
|
|
|
|
|
def reject(self) -> None:
|
2023-12-10 10:38:30 +13:00
|
|
|
if not self.reject_close:
|
2022-06-24 08:33:20 +12:00
|
|
|
super(LaunchDialog, self).reject()
|