2021-05-21 23:09:26 +12:00
|
|
|
import json
|
|
|
|
import os
|
2021-02-18 06:19:37 +13:00
|
|
|
from logging import getLogger
|
|
|
|
|
2021-06-03 05:49:41 +12:00
|
|
|
from PyQt5.QtCore import Qt, QThread, pyqtSignal, QSettings
|
2021-05-21 23:09:26 +12:00
|
|
|
from PyQt5.QtWidgets import QDialog
|
2021-04-23 00:34:06 +12:00
|
|
|
from requests.exceptions import ConnectionError
|
2021-02-18 06:19:37 +13:00
|
|
|
|
2021-04-23 00:34:06 +12:00
|
|
|
from custom_legendary.core import LegendaryCore
|
2021-04-08 08:39:23 +12:00
|
|
|
from rare.components.dialogs.login import LoginDialog
|
2021-05-21 23:09:26 +12:00
|
|
|
from rare.ui.components.dialogs.launch_dialog import Ui_LaunchDialog
|
|
|
|
from rare.utils import steam_grades
|
|
|
|
from rare.utils.utils import download_images
|
2021-02-23 07:02:49 +13:00
|
|
|
|
2021-02-18 06:19:37 +13:00
|
|
|
logger = getLogger("Login")
|
|
|
|
|
2021-02-23 07:02:49 +13:00
|
|
|
|
2021-05-21 23:09:26 +12:00
|
|
|
class ImageThread(QThread):
|
2021-02-18 06:19:37 +13:00
|
|
|
download_progess = pyqtSignal(int)
|
|
|
|
|
|
|
|
def __init__(self, core: LegendaryCore, parent=None):
|
2021-05-21 23:09:26 +12:00
|
|
|
super(ImageThread, self).__init__(parent)
|
2021-02-18 06:19:37 +13:00
|
|
|
self.core = core
|
|
|
|
|
|
|
|
def run(self):
|
|
|
|
download_images(self.download_progess, self.core)
|
2021-05-21 23:09:26 +12:00
|
|
|
self.download_progess.emit(100)
|
|
|
|
|
|
|
|
|
|
|
|
class SteamThread(QThread):
|
|
|
|
progress = pyqtSignal(int)
|
|
|
|
action = pyqtSignal(str)
|
|
|
|
|
|
|
|
def __init__(self, core: LegendaryCore, parent):
|
|
|
|
super(SteamThread, self).__init__(parent)
|
|
|
|
self.core = core
|
|
|
|
|
|
|
|
def run(self) -> None:
|
|
|
|
gamelist = self.core.get_game_list(True)
|
|
|
|
if not os.path.exists(os.path.expanduser("~/.cache/rare/game_list.json")):
|
|
|
|
self.action.emit(self.tr("Getting data from ProtonDB"))
|
|
|
|
steam_grades.upgrade_all([(i.app_title, i.app_name) for i in gamelist], self.progress)
|
|
|
|
self.progress.emit(99)
|
|
|
|
|
|
|
|
self.action.emit(self.tr("Checking Games for data"))
|
|
|
|
grades = json.load(open(os.path.expanduser("~/.cache/rare/game_list.json")))
|
|
|
|
ids = json.load(open(os.path.expanduser("~/.cache/rare/steam_ids.json")))
|
|
|
|
for game in gamelist:
|
|
|
|
if not grades.get(game.app_name):
|
|
|
|
steam_id = steam_grades.get_steam_id(game.app_title, ids)
|
|
|
|
grade = steam_grades.get_grade(steam_id)
|
|
|
|
grades[game.app_name] = {
|
|
|
|
"steam_id": steam_id,
|
|
|
|
"grade": grade
|
|
|
|
}
|
|
|
|
if not grades[game.app_name].get("steam_id"):
|
|
|
|
grades[game.app_name]["steam_id"] = steam_grades.get_steam_id(game.app_title)
|
|
|
|
if not grades[game.app_name].get("grade"):
|
|
|
|
grades[game.app_name]["grade"] = steam_grades.get_grade(game.app_title)
|
|
|
|
|
|
|
|
with open(os.path.expanduser("~/.cache/rare/game_list.json"), "w") as f:
|
|
|
|
f.write(json.dumps(grades))
|
|
|
|
f.close()
|
|
|
|
|
|
|
|
self.action.emit("Ready")
|
|
|
|
self.progress.emit(100)
|
2021-02-18 06:19:37 +13:00
|
|
|
|
2021-02-23 07:02:49 +13:00
|
|
|
|
2021-02-18 06:19:37 +13:00
|
|
|
class LoginThread(QThread):
|
2021-02-18 21:46:30 +13:00
|
|
|
login = pyqtSignal()
|
2021-04-20 01:44:28 +12:00
|
|
|
start_app = pyqtSignal(bool) # offline
|
2021-02-23 07:02:49 +13:00
|
|
|
|
2021-02-18 06:19:37 +13:00
|
|
|
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")
|
2021-04-20 01:44:28 +12:00
|
|
|
self.start_app.emit(False)
|
2021-02-18 06:19:37 +13:00
|
|
|
else:
|
|
|
|
self.run()
|
|
|
|
except ValueError:
|
|
|
|
logger.info("You are not logged in. Open Login Window")
|
2021-02-18 21:46:30 +13:00
|
|
|
self.login.emit()
|
2021-04-20 01:44:28 +12:00
|
|
|
except ConnectionError as e:
|
|
|
|
logger.warning(e)
|
|
|
|
self.start_app.emit(True)
|
2021-02-18 06:19:37 +13:00
|
|
|
|
|
|
|
|
2021-05-21 23:09:26 +12:00
|
|
|
class LaunchDialog(QDialog, Ui_LaunchDialog):
|
2021-04-20 01:44:28 +12:00
|
|
|
start_app = pyqtSignal(bool)
|
2021-05-21 23:09:26 +12:00
|
|
|
finished = False
|
2021-03-25 23:49:05 +13:00
|
|
|
|
2021-06-03 05:49:41 +12:00
|
|
|
def __init__(self, core: LegendaryCore, offline, parent=None):
|
|
|
|
super(LaunchDialog, self).__init__(parent)
|
|
|
|
self.setAttribute(Qt.WA_DeleteOnClose)
|
2021-05-21 23:09:26 +12:00
|
|
|
self.setupUi(self)
|
|
|
|
if os.name == "nt":
|
|
|
|
self.finished = True
|
|
|
|
self.steam_info.setVisible(False)
|
|
|
|
self.steam_prog_bar.setVisible(False)
|
2021-02-18 06:19:37 +13:00
|
|
|
self.core = core
|
2021-04-20 01:44:28 +12:00
|
|
|
if not offline:
|
|
|
|
self.login_thread = LoginThread(core)
|
|
|
|
self.login_thread.login.connect(self.login)
|
|
|
|
self.login_thread.start_app.connect(self.launch)
|
|
|
|
self.login_thread.start()
|
2021-02-18 06:19:37 +13:00
|
|
|
|
2021-05-21 23:09:26 +12:00
|
|
|
else:
|
2021-04-20 01:44:28 +12:00
|
|
|
self.launch(offline)
|
|
|
|
|
2021-02-18 21:46:30 +13:00
|
|
|
def login(self):
|
2021-04-09 23:00:40 +12:00
|
|
|
self.hide()
|
2021-03-09 08:36:42 +13:00
|
|
|
if LoginDialog(core=self.core).login():
|
2021-04-09 23:00:40 +12:00
|
|
|
self.show()
|
2021-03-09 08:36:42 +13:00
|
|
|
self.login_thread.start()
|
|
|
|
else:
|
2021-02-18 22:22:15 +13:00
|
|
|
exit(0)
|
2021-02-18 21:46:30 +13:00
|
|
|
|
2021-04-20 01:44:28 +12:00
|
|
|
def launch(self, offline=False):
|
2021-03-19 00:45:59 +13:00
|
|
|
# self.core = core
|
2021-05-21 23:09:26 +12:00
|
|
|
if not os.path.exists(p := os.path.expanduser("~/.cache/rare/images")):
|
|
|
|
os.makedirs(p)
|
2021-04-20 01:44:28 +12:00
|
|
|
self.offline = offline
|
2021-05-21 23:09:26 +12:00
|
|
|
|
|
|
|
if not offline:
|
|
|
|
|
|
|
|
self.image_info.setText(self.tr("Downloading Images"))
|
|
|
|
self.img_thread = ImageThread(self.core, self)
|
|
|
|
self.img_thread.download_progess.connect(self.update_image_progbar)
|
|
|
|
self.img_thread.finished.connect(self.finish)
|
|
|
|
self.img_thread.start()
|
|
|
|
# not disabled and not windows
|
|
|
|
if (not QSettings().value("disable_protondb", False, bool)) and (not os.name == "nt"):
|
|
|
|
self.steam_thread = SteamThread(self.core, self)
|
|
|
|
self.steam_thread.progress.connect(self.update_steam_prog_bar)
|
|
|
|
self.steam_thread.action.connect(lambda x: self.steam_info.setText(x))
|
|
|
|
self.steam_thread.finished.connect(self.finish)
|
|
|
|
self.steam_thread.start()
|
|
|
|
else:
|
|
|
|
self.finished = True
|
|
|
|
self.steam_info.setVisible(False)
|
|
|
|
self.steam_prog_bar.setVisible(False)
|
|
|
|
|
|
|
|
def update_steam_prog_bar(self, value):
|
|
|
|
self.steam_prog_bar.setValue(value)
|
|
|
|
|
|
|
|
def update_image_progbar(self, i: int):
|
|
|
|
self.image_prog_bar.setValue(i)
|
|
|
|
|
|
|
|
def finish(self):
|
|
|
|
if self.finished:
|
|
|
|
self.image_info.setText(self.tr("Starting..."))
|
|
|
|
self.image_prog_bar.setValue(100)
|
|
|
|
self.steam_prog_bar.setValue(100)
|
2021-04-20 01:44:28 +12:00
|
|
|
self.start_app.emit(self.offline)
|
2021-03-25 05:01:12 +13:00
|
|
|
else:
|
2021-05-21 23:09:26 +12:00
|
|
|
self.finished = True
|