1
0
Fork 0
mirror of synced 2024-05-16 10:32:43 +12:00

Updated rpc

This commit is contained in:
Dummerle 2021-04-12 21:55:08 +02:00
parent c8b434f1a2
commit 36fb3bf687
7 changed files with 100 additions and 55 deletions

View file

@ -4,14 +4,14 @@
### Add translations
1. Execute ```pylupdate5 $(find -name "*.py") -ts Rare/languages/{your lang (two letters)}.ts``` in project directrory
1. Execute ```pylupdate5 $(find -name "*.py") -ts Rare/languages/{your lang (two letters)}.ts``` in project directory
2. Modify the .ts file manually or in Qt Linguist
3. Compile the file with ```lrelease Rare/languages/{lang}.ts```
### Add Stylesheets
For this you can create a .qss file in Rare/Styles/ directory or modify the existing RareStyle.qss file. Here are some
exmples:
examples:
[Qt Docs](https://doc.qt.io/qt-5/stylesheet-examples.html)
### Add features

View file

@ -4,10 +4,9 @@ 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
from rare.utils.rpc import DiscordRPC
class MainWindow(QMainWindow):
@ -16,6 +15,7 @@ class MainWindow(QMainWindow):
super(MainWindow, self).__init__()
self.settings = QSettings()
self.core = core
self.rpc = DiscordRPC(core)
width, height = 1200, 800
if self.settings.value("save_size", False):
width, height = self.settings.value("window_size", (1200, 800), tuple)
@ -25,58 +25,20 @@ class MainWindow(QMainWindow):
self.tab_widget = TabWidget(core)
self.setCentralWidget(self.tab_widget)
self.tab_widget.games_tab.default_widget.game_list.game_started.connect(self.set_discord_rpc)
self.tab_widget.delete_presence.connect(self.remove_rpc)
# 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))
# Remove RPC
self.tab_widget.delete_presence.connect(self.rpc.remove_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))
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):
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):
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):
if self.settings.value("sys_tray", True, bool):
self.hide()

View file

@ -102,7 +102,6 @@ class TabWidget(QTabWidget):
# Remove text "sync game"
def finished_sync(self, app_name):
print("Lol")
self.games_tab.default_widget.game_list.widgets[app_name][0].info_text = ""
self.games_tab.default_widget.game_list.widgets[app_name][0].info_label.setText("")
self.games_tab.default_widget.game_list.widgets[app_name][1].info_label.setText("")

View file

@ -25,6 +25,7 @@ class GameList(QStackedWidget):
game_exited = pyqtSignal(str)
game_started = pyqtSignal(str)
running_games = []
active_game = ("", 0)
def __init__(self, core: LegendaryCore):
@ -192,6 +193,7 @@ class GameList(QStackedWidget):
self.install_game.emit(options)
def finished(self, app_name):
self.running_games.remove(app_name)
self.active_game = ("", 0)
self.widgets[app_name][0].info_text = ""
self.widgets[app_name][0].info_label.setText("")
@ -210,6 +212,7 @@ class GameList(QStackedWidget):
def launch(self, app_name):
self.game_started.emit(app_name)
self.running_games.append(app_name)
self.widgets[app_name][0].info_text = self.tr("Game running")
self.widgets[app_name][0].info_label.setText(self.tr("Game running"))
self.widgets[app_name][1].launch_button.setDisabled(True)

View file

@ -15,7 +15,8 @@ class SettingsTab(QTabWidget):
self.core = core
self.setTabBar(SideTabBar())
self.setTabPosition(QTabWidget.West)
self.addTab(RareSettings(), "Rare")
self.rare_settings = RareSettings()
self.addTab(self.rare_settings, "Rare")
self.addTab(LegendarySettings(core), "Legendary")
if os.name != "nt":
self.addTab(LinuxSettings(core), "Linux")

View file

@ -1,8 +1,10 @@
from PyQt5.QtCore import QSettings
from PyQt5.QtCore import QSettings, pyqtSignal
from PyQt5.QtWidgets import QGroupBox, QCheckBox, QVBoxLayout, QComboBox
class RPCSettings(QGroupBox):
update_settings = pyqtSignal()
def __init__(self):
super(RPCSettings, self).__init__()
self.setTitle(self.tr("Discord RPC"))
@ -15,7 +17,7 @@ class RPCSettings(QGroupBox):
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.enable.currentIndexChanged.connect(self.changed)
self.show_game = QCheckBox(self.tr("Show Game"))
self.show_game.setChecked((self.settings.value("rpc_name", True, bool)))
@ -33,3 +35,7 @@ class RPCSettings(QGroupBox):
self.show_time.stateChanged.connect(lambda: self.settings.setValue("rpc_time", self.show_time.isChecked()))
self.setLayout(self.layout)
def changed(self, i):
self.settings.setValue("rpc_enable", i)
self.update_settings.emit()

74
rare/utils/rpc.py Normal file
View file

@ -0,0 +1,74 @@
import platform
import time
from PyQt5.QtCore import QObject, QSettings
from pypresence import Presence
from custom_legendary.core import LegendaryCore
client_id = "830732538225360908"
class DiscordRPC(QObject):
def __init__(self, core: LegendaryCore):
super(DiscordRPC, self).__init__()
self.RPC = None
self.state = 1 # 0: game, 1: always active, 2: off
self.core = core
self.settings = QSettings()
if self.settings.value("rpc_enable", 0, int) == 1: # show always
self.state = 2
self.set_discord_rpc()
def changed_settings(self, game_running: list):
value = self.settings.value("rpc_enable", 0, int)
if value == 2:
self.remove_rpc()
return
if not game_running:
self.remove_rpc()
else:
self.set_discord_rpc(game_running[0])
def remove_rpc(self):
if self.settings.value("rpc_enable", 0, int) != 1:
if not self.RPC:
return
self.RPC.close()
del self.RPC
self.RPC = None
self.state = 2
else:
self.state = 1
self.set_discord_rpc()
def set_discord_rpc(self, app_name=None):
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)
self.state = 0