Updated rpc
This commit is contained in:
parent
c8b434f1a2
commit
36fb3bf687
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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("")
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
74
rare/utils/rpc.py
Normal 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
|
Loading…
Reference in a new issue