From f58154f3f15e5b9170a89f9d2a8843e47944f2f7 Mon Sep 17 00:00:00 2001 From: Dummerle Date: Sun, 11 Apr 2021 22:44:18 +0200 Subject: [PATCH] add Discord RPC --- rare/components/main_window.py | 26 ++++++++++++++++++++++++- rare/components/tab_widget.py | 12 +++++++++--- rare/components/tabs/games/game_list.py | 6 ++++-- requirements.txt | 1 + setup.py | 3 ++- 5 files changed, 41 insertions(+), 7 deletions(-) diff --git a/rare/components/main_window.py b/rare/components/main_window.py index 50ef0312..25bdf6ee 100644 --- a/rare/components/main_window.py +++ b/rare/components/main_window.py @@ -1,14 +1,21 @@ +import platform +import time from PyQt5.QtCore import QSettings from PyQt5.QtGui import QCloseEvent from PyQt5.QtWidgets import QMainWindow, QMessageBox +from pypresence import Presence + +from custom_legendary.core import LegendaryCore from rare.components.tab_widget import TabWidget class MainWindow(QMainWindow): - def __init__(self, core): + + def __init__(self, core: LegendaryCore): super(MainWindow, self).__init__() settings = QSettings() + self.core = core width, height = 1200, 800 if settings.value("save_size", False): width, height = settings.value("window_size", (1200, 800), tuple) @@ -17,8 +24,25 @@ class MainWindow(QMainWindow): self.setWindowTitle("Rare - GUI for legendary") self.tab_widget = TabWidget(core) self.setCentralWidget(self.tab_widget) + + + self.tab_widget.game_list.default_widget.game_list.game_started.connect(self.set_discord_rpc) + self.tab_widget.update_presence.connect(self.remove_rpc) + self.show() + def remove_rpc(self): + self.RPC.clear() + self.RPC.close() + del self.RPC + + def set_discord_rpc(self, app_name): + self.RPC = Presence("830732538225360908") + 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) + def closeEvent(self, e: QCloseEvent): settings = QSettings() if settings.value("sys_tray", True, bool): diff --git a/rare/components/tab_widget.py b/rare/components/tab_widget.py index b92ddd2b..67f0cf45 100644 --- a/rare/components/tab_widget.py +++ b/rare/components/tab_widget.py @@ -1,6 +1,6 @@ import webbrowser -from PyQt5.QtCore import QSize +from PyQt5.QtCore import QSize, pyqtSignal from PyQt5.QtWidgets import QMenu, QTabWidget, QWidget, QWidgetAction from qtawesome import icon @@ -15,6 +15,9 @@ from custom_legendary.core import LegendaryCore class TabWidget(QTabWidget): + + update_presence = pyqtSignal() + def __init__(self, core: LegendaryCore): super(TabWidget, self).__init__() disabled_tab = 3 @@ -39,8 +42,7 @@ class TabWidget(QTabWidget): self.cloud_saves.finished.connect(self.finished_sync) - self.game_list.default_widget.game_list.sync_cloud.connect( - lambda app_name: self.cloud_saves.sync_game(app_name, True)) + self.game_list.default_widget.game_list.game_exited.connect(self.game_finished) # Space Tab self.addTab(QWidget(), "") @@ -65,6 +67,10 @@ class TabWidget(QTabWidget): account_button.menu().addAction(account_action) self.tabBar().setTabButton(4, self.tabBar().RightSide, account_button) + def game_finished(self, app_name): + self.update_presence.emit() + self.cloud_saves.sync_game(app_name, True) + def dl_finished(self): self.game_list.default_widget.game_list.update_list() self.setTabText(1, "Downloads") diff --git a/rare/components/tabs/games/game_list.py b/rare/components/tabs/games/game_list.py index 3bc9a0b5..0f739131 100644 --- a/rare/components/tabs/games/game_list.py +++ b/rare/components/tabs/games/game_list.py @@ -21,7 +21,8 @@ class GameList(QStackedWidget): install_game = pyqtSignal(InstallOptions) show_game_info = pyqtSignal(str) update_game = pyqtSignal() - sync_cloud = pyqtSignal(str) + game_exited = pyqtSignal(str) + game_started = pyqtSignal(str) def __init__(self, core: LegendaryCore): super(GameList, self).__init__() @@ -165,12 +166,13 @@ class GameList(QStackedWidget): logger.info("Auto saves disabled") return - self.sync_cloud.emit(app_name) + self.game_exited.emit(app_name) self.widgets[app_name][0].info_text = self.tr("Sync CLoud saves") self.widgets[app_name][0].info_label.setText(self.tr("Sync CLoud saves")) self.widgets[app_name][1].info_label.setText(self.tr("Sync CLoud saves")) def launch(self, app_name): + self.game_started.emit(app_name) self.widgets[app_name][0].info_text = self.tr("Game running") self.widgets[app_name][1].launch_button.setDisabled(True) self.widgets[app_name][1].launch_button.setText(self.tr("Game running")) diff --git a/requirements.txt b/requirements.txt index cf9940ae..1dfa98c3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ PyQt5 QtAwesome notify-py psutil +pypresence \ No newline at end of file diff --git a/setup.py b/setup.py index 2d08904c..87eb2725 100644 --- a/setup.py +++ b/setup.py @@ -33,6 +33,7 @@ setuptools.setup( "PyQt5", "QtAwesome", "notify-py", - "psutil" + "psutil", + "pypresence" ], )