2021-04-15 01:14:06 +12:00
|
|
|
import os
|
2021-04-14 02:56:44 +12:00
|
|
|
from logging import getLogger
|
|
|
|
|
2021-11-22 10:44:45 +13:00
|
|
|
from PyQt5.QtCore import Qt, QSettings, QTimer, QSize
|
2021-11-12 03:26:58 +13:00
|
|
|
from PyQt5.QtGui import QCloseEvent, QCursor
|
2021-12-05 02:47:55 +13:00
|
|
|
from PyQt5.QtWidgets import QMainWindow, QApplication, QStatusBar
|
2021-02-10 23:48:25 +13:00
|
|
|
|
2021-10-08 07:19:24 +13:00
|
|
|
from rare import data_dir, shared
|
2021-11-03 09:57:19 +13:00
|
|
|
from rare.components.tabs 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-10-08 07:19:24 +13:00
|
|
|
def __init__(self):
|
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-10-15 10:18:13 +13:00
|
|
|
self.core = shared.core
|
2021-09-30 10:22:47 +13:00
|
|
|
|
2021-10-08 07:19:24 +13:00
|
|
|
self.signals = shared.signals
|
|
|
|
self.offline = shared.args.offline
|
2021-05-02 23:15:11 +12:00
|
|
|
|
2021-02-10 23:48:25 +13:00
|
|
|
self.setWindowTitle("Rare - GUI for legendary")
|
2021-10-08 07:19:24 +13:00
|
|
|
self.tab_widget = TabWidget(self)
|
2021-04-07 22:11:31 +12:00
|
|
|
self.setCentralWidget(self.tab_widget)
|
2021-11-12 03:26:58 +13:00
|
|
|
|
2021-12-05 02:47:55 +13:00
|
|
|
self.status_bar = QStatusBar()
|
|
|
|
self.setStatusBar(self.status_bar)
|
|
|
|
|
2021-11-23 03:52:07 +13:00
|
|
|
width, height = 1280, 720
|
2021-11-26 09:54:34 +13:00
|
|
|
if self.settings.value("save_size", False, bool):
|
2021-11-12 03:26:58 +13:00
|
|
|
width, height = self.settings.value("window_size", (width, height), tuple)
|
|
|
|
|
2021-12-23 09:21:49 +13:00
|
|
|
self.resize(width, height)
|
2021-12-23 07:27:43 +13:00
|
|
|
|
2021-12-23 09:21:49 +13:00
|
|
|
if not shared.args.offline:
|
2021-12-27 11:57:56 +13:00
|
|
|
try:
|
|
|
|
self.rpc = DiscordRPC()
|
|
|
|
except ModuleNotFoundError:
|
|
|
|
logger.warning("Discord RPC module not found")
|
2021-12-23 09:21:49 +13:00
|
|
|
|
|
|
|
self.timer = QTimer()
|
|
|
|
self.timer.timeout.connect(self.timer_finished)
|
|
|
|
self.timer.start(1000)
|
|
|
|
|
|
|
|
def show_window_centralized(self):
|
|
|
|
self.show()
|
2021-11-12 03:26:58 +13:00
|
|
|
# get the margins of the decorated window
|
|
|
|
margins = self.windowHandle().frameMargins()
|
|
|
|
# get the screen the cursor is on
|
|
|
|
current_screen = QApplication.screenAt(QCursor.pos())
|
|
|
|
# get the available screen geometry (excludes panels/docks)
|
|
|
|
screen_rect = current_screen.availableGeometry()
|
|
|
|
decor_width = margins.left() + margins.right()
|
|
|
|
decor_height = margins.top() + margins.bottom()
|
2021-12-23 09:21:49 +13:00
|
|
|
window_size = QSize(self.width(), self.height()).boundedTo(
|
2021-12-24 22:09:50 +13:00
|
|
|
screen_rect.size() - QSize(decor_width, decor_height)
|
|
|
|
)
|
2021-12-23 07:27:43 +13:00
|
|
|
|
2021-11-12 03:26:58 +13:00
|
|
|
self.resize(window_size)
|
2021-12-24 22:09:50 +13:00
|
|
|
self.move(
|
|
|
|
screen_rect.center()
|
|
|
|
- self.rect().adjusted(0, 0, decor_width, decor_height).center()
|
|
|
|
)
|
2021-11-12 03:26:58 +13:00
|
|
|
|
2021-04-15 01:14:06 +12:00
|
|
|
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", "")
|
2021-12-24 22:09:50 +13:00
|
|
|
if game in [
|
|
|
|
i.app_name for i in self.tab_widget.games_tab.game_list
|
|
|
|
] and self.core.is_installed(game):
|
|
|
|
self.tab_widget.games_tab.game_utils.prepare_launch(
|
|
|
|
game, offline=shared.args.offline
|
|
|
|
)
|
2021-04-15 01:14:06 +12:00
|
|
|
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-11-23 10:35:37 +13:00
|
|
|
if self.settings.value("save_size", False, bool):
|
|
|
|
size = self.size().width(), self.size().height()
|
|
|
|
self.settings.setValue("window_size", size)
|
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-12-23 09:21:49 +13:00
|
|
|
self.signals.exit_app.emit(0)
|
|
|
|
e.ignore()
|