From 6787a6c2825f4d6c99db25d8f0c5049f06b512c6 Mon Sep 17 00:00:00 2001 From: Dummerle Date: Mon, 12 Apr 2021 20:31:12 +0200 Subject: [PATCH] Add many rpc settings --- rare/components/main_window.py | 64 ++++++++++++++----- rare/components/tabs/settings/rare.py | 4 ++ rare/components/tabs/settings/rpc_settings.py | 35 ++++++++++ 3 files changed, 86 insertions(+), 17 deletions(-) create mode 100644 rare/components/tabs/settings/rpc_settings.py diff --git a/rare/components/main_window.py b/rare/components/main_window.py index 72a73c97..d7940fae 100644 --- a/rare/components/main_window.py +++ b/rare/components/main_window.py @@ -14,11 +14,11 @@ class MainWindow(QMainWindow): def __init__(self, core: LegendaryCore): super(MainWindow, self).__init__() - settings = QSettings() + self.settings = QSettings() self.core = core width, height = 1200, 800 - if settings.value("save_size", False): - width, height = settings.value("window_size", (1200, 800), tuple) + if self.settings.value("save_size", False): + width, height = self.settings.value("window_size", (1200, 800), tuple) self.setGeometry(0, 0, width, height) self.setWindowTitle("Rare - GUI for legendary") @@ -30,25 +30,55 @@ class MainWindow(QMainWindow): game = self.tab_widget.games_tab.default_widget.game_list.active_game if game != ("", 0): self.set_discord_rpc(game[0]) # Appname - + self.RPC = None + if self.settings.value("rpc_enable", 0, int) == 1: # show always + self.RPC = Presence("830732538225360908") + self.RPC.connect() + self.update_rpc() self.show() def remove_rpc(self): - self.RPC.clear() - self.RPC.close() - del self.RPC + if self.settings.value("rpc_enable", 0, int) != 1: + if not self.RPC: + return + self.RPC.close() + del self.RPC + self.RPC = None + else: + self.update_rpc() def set_discord_rpc(self, app_name): - self.RPC = Presence("830732538225360908") # Rare app: https://discord.com/developers/applications - self.RPC.connect() - title = self.core.get_installed_game(app_name).title - start = str(time.time()).split(".")[0] - self.RPC.update(large_image="logo", details=title, large_text=title, - state="via Rare on " + platform.system(), start=start) + if not self.RPC: + self.RPC = Presence("830732538225360908") # Rare app: https://discord.com/developers/applications + self.RPC.connect() + self.update_rpc(app_name) + + def update_rpc(self, app_name=None): + if self.settings.value("rpc_enable", 0, int) == 2: + self.remove_rpc() + return + title = None + if not app_name: + self.RPC.update(large_image="logo", + details="https://github.com/Dummerle/Rare") + return + if self.settings.value("rpc_name", True, bool): + title = self.core.get_installed_game(app_name).title + start = None + if self.settings.value("rpc_time", True, bool): + start = str(time.time()).split(".")[0] + os = None + if self.settings.value("rpc_os", True, bool): + os = "via Rare on " + platform.system() + + self.RPC.update(large_image="logo", + details=title, + large_text=title, + state=os, + start=start) def closeEvent(self, e: QCloseEvent): - settings = QSettings() - if settings.value("sys_tray", True, bool): + if self.settings.value("sys_tray", True, bool): self.hide() e.ignore() return @@ -56,8 +86,8 @@ class MainWindow(QMainWindow): 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: e.ignore() return - if settings.value("save_size", False, bool): + if self.settings.value("save_size", False, bool): size = self.size().width(), self.size().height() - settings.setValue("window_size", size) + self.settings.setValue("window_size", size) e.accept() diff --git a/rare/components/tabs/settings/rare.py b/rare/components/tabs/settings/rare.py index 5b1b9426..9ab3664f 100644 --- a/rare/components/tabs/settings/rare.py +++ b/rare/components/tabs/settings/rare.py @@ -5,6 +5,7 @@ from logging import getLogger from PyQt5.QtCore import QSettings, Qt from PyQt5.QtWidgets import QVBoxLayout, QFileDialog, QComboBox, QPushButton, QCheckBox, QGroupBox, QScrollArea +from rare.components.tabs.settings.rpc_settings import RPCSettings from rare.components.tabs.settings.settings_widget import SettingsWidget from rare.utils.extra_widgets import PathEdit from rare.utils.utils import get_lang, get_possible_langs @@ -55,6 +56,9 @@ class RareSettings(QScrollArea): self.sys_tray_widget = SettingsWidget(self.tr("Exit to System Tray Icon"), self.exit_to_sys_tray) self.layout.addWidget(self.sys_tray_widget) + self.rpc = RPCSettings() + self.layout.addWidget(self.rpc) + self.game_start_accept = QCheckBox(self.tr("Confirm launch of game")) self.game_start_accept.stateChanged.connect(lambda x: self.settings.setValue("confirm_start", self.game_start_accept.isChecked())) self.game_start_accept_widget = SettingsWidget(self.tr("Confirm launch of game"), self.game_start_accept) diff --git a/rare/components/tabs/settings/rpc_settings.py b/rare/components/tabs/settings/rpc_settings.py new file mode 100644 index 00000000..2ef8f466 --- /dev/null +++ b/rare/components/tabs/settings/rpc_settings.py @@ -0,0 +1,35 @@ +from PyQt5.QtCore import QSettings +from PyQt5.QtWidgets import QGroupBox, QCheckBox, QVBoxLayout, QComboBox + + +class RPCSettings(QGroupBox): + def __init__(self): + super(RPCSettings, self).__init__() + self.setTitle(self.tr("Discord RPC")) + self.setObjectName("settings_widget") + self.settings = QSettings() + self.layout = QVBoxLayout() + + self.enable = QComboBox() + self.enable_states = [self.tr("Show when playing"), self.tr("Show always"), self.tr("Show never")] + self.enable.addItems(self.enable_states) + self.enable.setCurrentIndex(self.settings.value("rpc_enable", 0, int)) + self.layout.addWidget(self.enable) + self.enable.currentIndexChanged.connect(lambda i: self.settings.setValue("rpc_enable", i)) + + self.show_game = QCheckBox(self.tr("Show Game")) + self.show_game.setChecked((self.settings.value("rpc_name", True, bool))) + self.layout.addWidget(self.show_game) + self.show_game.stateChanged.connect(lambda: self.settings.setValue("rpc_game", self.show_game.isChecked())) + + self.show_os = QCheckBox(self.tr("Show OS")) + self.layout.addWidget(self.show_os) + self.show_os.setChecked((self.settings.value("rpc_os", True, bool))) + self.show_os.stateChanged.connect(lambda: self.settings.setValue("rpc_os", self.show_os.isChecked())) + + self.show_time = QCheckBox(self.tr("Show Time playing")) + self.layout.addWidget(self.show_time) + self.show_time.setChecked((self.settings.value("rpc_time", True, bool))) + self.show_time.stateChanged.connect(lambda: self.settings.setValue("rpc_time", self.show_time.isChecked())) + + self.setLayout(self.layout)