2021-04-15 01:14:06 +12:00
|
|
|
import os
|
2021-04-14 02:56:44 +12:00
|
|
|
from logging import getLogger
|
|
|
|
|
2021-06-08 08:12:26 +12:00
|
|
|
from PyQt5.QtCore import Qt, QSettings, QTimer, pyqtSignal
|
2021-04-07 22:11:31 +12:00
|
|
|
from PyQt5.QtGui import QCloseEvent
|
2021-05-02 23:15:11 +12:00
|
|
|
from PyQt5.QtWidgets import QMainWindow, QMessageBox, QApplication
|
2021-02-10 23:48:25 +13:00
|
|
|
|
2021-09-07 07:10:18 +12:00
|
|
|
from legendary.core import LegendaryCore
|
2021-08-08 10:49:27 +12:00
|
|
|
from rare import data_dir
|
2021-04-08 08:39:23 +12:00
|
|
|
from rare.components.tab_widget import TabWidget
|
2021-04-13 07:55:08 +12:00
|
|
|
from rare.utils.rpc import DiscordRPC
|
2021-02-10 23:48:25 +13:00
|
|
|
|
2021-04-14 02:56:44 +12:00
|
|
|
logger = getLogger("Window")
|
|
|
|
|
2021-02-10 23:48:25 +13:00
|
|
|
|
|
|
|
class MainWindow(QMainWindow):
|
2021-06-08 08:12:26 +12:00
|
|
|
quit_app = pyqtSignal(int)
|
2021-04-12 08:44:18 +12:00
|
|
|
|
2021-04-14 02:56:44 +12:00
|
|
|
def __init__(self, core: LegendaryCore, args):
|
2021-02-10 23:48:25 +13:00
|
|
|
super(MainWindow, self).__init__()
|
2021-06-08 08:12:26 +12:00
|
|
|
self.setAttribute(Qt.WA_DeleteOnClose)
|
2021-04-13 06:31:12 +12:00
|
|
|
self.settings = QSettings()
|
2021-04-12 08:44:18 +12:00
|
|
|
self.core = core
|
2021-04-20 01:44:28 +12:00
|
|
|
self.offline = args.offline
|
2021-04-11 00:58:34 +12:00
|
|
|
width, height = 1200, 800
|
2021-04-13 06:31:12 +12:00
|
|
|
if self.settings.value("save_size", False):
|
|
|
|
width, height = self.settings.value("window_size", (1200, 800), tuple)
|
2021-04-11 00:58:34 +12:00
|
|
|
|
2021-05-02 23:15:11 +12:00
|
|
|
desktop = QApplication.desktop()
|
|
|
|
self.setGeometry((desktop.width() - width) / 2, (desktop.height() - height) / 2, width, height)
|
|
|
|
|
2021-02-10 23:48:25 +13:00
|
|
|
self.setWindowTitle("Rare - GUI for legendary")
|
2021-09-11 08:41:30 +12:00
|
|
|
self.tab_widget = TabWidget(core, self, args)
|
2021-06-08 08:12:26 +12:00
|
|
|
self.tab_widget.quit_app.connect(self.quit_app.emit)
|
2021-04-07 22:11:31 +12:00
|
|
|
self.setCentralWidget(self.tab_widget)
|
2021-04-20 01:44:28 +12:00
|
|
|
if not args.offline:
|
|
|
|
self.rpc = DiscordRPC(core)
|
|
|
|
# Discord RPC on game launch
|
|
|
|
self.tab_widget.games_tab.default_widget.game_list.game_started.connect(
|
|
|
|
lambda: self.rpc.set_discord_rpc(self.tab_widget.games_tab.default_widget.game_list.running_games[0]))
|
|
|
|
# Remove RPC
|
|
|
|
self.tab_widget.delete_presence.connect(self.rpc.set_discord_rpc)
|
|
|
|
# Show RPC on changed rare_settings
|
|
|
|
self.tab_widget.settings.rare_settings.rpc.update_settings.connect(
|
|
|
|
lambda: self.rpc.changed_settings(self.tab_widget.games_tab.default_widget.game_list.running_games))
|
2021-04-13 07:55:08 +12:00
|
|
|
|
2021-04-13 02:02:16 +12:00
|
|
|
game = self.tab_widget.games_tab.default_widget.game_list.active_game
|
2021-04-20 01:44:28 +12:00
|
|
|
if game != ("", 0) and not args.offline:
|
2021-04-15 00:32:08 +12:00
|
|
|
self.rpc.set_discord_rpc(game[0]) # Appname
|
2021-04-12 08:44:18 +12:00
|
|
|
|
2021-04-14 02:56:44 +12:00
|
|
|
if args.subparser == "launch":
|
|
|
|
logger.info("Launching " + self.core.get_installed_game(args.app_name).title)
|
|
|
|
if args.app_name in self.tab_widget.games_tab.default_widget.game_list.widgets.keys():
|
|
|
|
self.tab_widget.games_tab.default_widget.game_list.widgets[args.app_name][1].launch()
|
|
|
|
else:
|
|
|
|
logger.info(f"Could not find {args.app_name} in Games")
|
2021-04-12 08:44:18 +12:00
|
|
|
|
2021-04-15 01:14:06 +12:00
|
|
|
self.timer = QTimer()
|
|
|
|
self.timer.timeout.connect(self.timer_finished)
|
|
|
|
self.timer.start(1000)
|
|
|
|
|
|
|
|
def timer_finished(self):
|
2021-08-08 10:49:27 +12:00
|
|
|
file_path = os.path.join(data_dir, "lockfile")
|
2021-04-15 01:14:06 +12:00
|
|
|
if os.path.exists(file_path):
|
|
|
|
file = open(file_path, "r")
|
|
|
|
action = file.read()
|
|
|
|
file.close()
|
|
|
|
if action.startswith("launch"):
|
|
|
|
game = action.replace("launch ", "").replace("\n", "")
|
|
|
|
if game in self.tab_widget.games_tab.default_widget.game_list.widgets.keys():
|
|
|
|
self.tab_widget.games_tab.default_widget.game_list.widgets[game][1].launch()
|
|
|
|
else:
|
|
|
|
logger.info(f"Could not find {game} in Games")
|
|
|
|
|
|
|
|
elif action.startswith("start"):
|
|
|
|
self.show()
|
|
|
|
os.remove(file_path)
|
|
|
|
self.timer.start(1000)
|
|
|
|
|
2021-04-07 22:11:31 +12:00
|
|
|
def closeEvent(self, e: QCloseEvent):
|
2021-04-13 06:31:12 +12:00
|
|
|
if self.settings.value("sys_tray", True, bool):
|
2021-04-08 00:46:27 +12:00
|
|
|
self.hide()
|
|
|
|
e.ignore()
|
2021-04-11 00:58:34 +12:00
|
|
|
return
|
2021-04-20 01:44:28 +12:00
|
|
|
elif self.offline:
|
|
|
|
pass
|
2021-04-11 00:58:34 +12:00
|
|
|
elif self.tab_widget.downloadTab.active_game is not None:
|
2021-04-14 02:56:44 +12:00
|
|
|
if not QMessageBox.question(self, "Close",
|
|
|
|
self.tr("There is a download active. Do you really want to exit app?"),
|
|
|
|
QMessageBox.Yes, QMessageBox.No) == QMessageBox.Yes:
|
2021-04-11 00:58:34 +12:00
|
|
|
e.ignore()
|
|
|
|
return
|
2021-04-13 06:31:12 +12:00
|
|
|
if self.settings.value("save_size", False, bool):
|
2021-04-11 00:58:34 +12:00
|
|
|
size = self.size().width(), self.size().height()
|
2021-04-13 06:31:12 +12:00
|
|
|
self.settings.setValue("window_size", size)
|
2021-04-11 00:58:34 +12:00
|
|
|
e.accept()
|