1
0
Fork 0
mirror of synced 2024-06-02 10:44:40 +12:00
Rare/rare/utils/rpc.py

117 lines
3.8 KiB
Python
Raw Normal View History

2021-04-13 07:55:08 +12:00
import platform
import time
2021-04-13 22:38:11 +12:00
from logging import getLogger
2021-04-13 07:55:08 +12:00
2021-05-01 21:24:38 +12:00
import pypresence.exceptions
2021-04-13 07:55:08 +12:00
from PyQt5.QtCore import QObject, QSettings
from pypresence import Presence
from rare.shared import LegendaryCoreSingleton, GlobalSignalsSingleton
from rare.models.options import options
2021-04-13 07:55:08 +12:00
client_id = "830732538225360908"
2021-04-13 22:38:11 +12:00
logger = getLogger("RPC")
2021-04-13 07:55:08 +12:00
class DiscordRPC(QObject):
2021-10-15 10:05:00 +13:00
def __init__(self):
2021-04-13 07:55:08 +12:00
super(DiscordRPC, self).__init__()
self.RPC = None
self.state = 1 # 0: game, 1: always active, 2: off
self.core = LegendaryCoreSingleton()
self.signals = GlobalSignalsSingleton()
2021-10-15 10:05:00 +13:00
2021-04-13 07:55:08 +12:00
self.settings = QSettings()
if self.settings.value(*options.rpc_enable) == 1: # show always
2021-04-13 07:55:08 +12:00
self.state = 2
self.set_discord_rpc()
self.signals.discord_rpc.set_title.connect(self.update_presence)
self.signals.discord_rpc.apply_settings.connect(self.changed_settings)
2021-10-15 10:05:00 +13:00
def update_presence(self, app_name):
self.set_discord_rpc(app_name)
2022-03-10 10:16:45 +13:00
def changed_settings(self, game_running: list = None):
value = self.settings.value(*options.rpc_enable)
2021-04-13 07:55:08 +12:00
if value == 2:
self.remove_rpc()
return
2021-04-13 22:38:11 +12:00
if not game_running and value == 0:
2021-04-13 07:55:08 +12:00
self.remove_rpc()
2021-04-13 22:38:11 +12:00
elif not game_running:
self.set_discord_rpc()
2021-04-13 07:55:08 +12:00
else:
self.set_discord_rpc(game_running[0])
def remove_rpc(self):
if self.settings.value(*options.rpc_enable) != 1:
2021-04-13 07:55:08 +12:00
if not self.RPC:
return
2021-04-13 22:38:11 +12:00
try:
self.RPC.close()
except Exception:
logger.warning("Already closed")
2021-04-13 07:55:08 +12:00
del self.RPC
self.RPC = None
2021-04-13 22:38:11 +12:00
logger.info("Remove RPC")
2021-04-13 07:55:08 +12:00
self.state = 2
else:
self.state = 1
self.set_discord_rpc()
def set_discord_rpc(self, app_name=None):
if not self.RPC:
2021-04-13 22:38:11 +12:00
try:
2021-12-24 22:09:50 +13:00
self.RPC = Presence(
client_id
) # Rare app: https://discord.com/developers/applications
2021-04-13 22:38:11 +12:00
self.RPC.connect()
except ConnectionRefusedError as e:
logger.warning(f"Discord is not active\n{e}")
2021-04-13 22:40:50 +12:00
self.RPC = None
2021-04-13 22:38:11 +12:00
return
except FileNotFoundError as e:
logger.warning(f"File not found error\n{e}")
self.RPC = None
return
2021-05-01 21:24:38 +12:00
except pypresence.exceptions.InvalidPipe as e:
logger.error(f"Is Discord running? \n{e}")
2021-05-01 21:24:38 +12:00
self.RPC = None
return
except Exception as e:
logger.error(str(e))
self.RPC = None
return
2021-04-13 07:55:08 +12:00
self.update_rpc(app_name)
def update_rpc(self, app_name=None):
if self.settings.value(*options.rpc_enable) == 2 or (
not app_name and self.settings.value(*options.rpc_enable) == 0
2021-12-24 22:09:50 +13:00
):
2021-04-13 07:55:08 +12:00
self.remove_rpc()
return
title = None
if not app_name:
2021-12-24 22:09:50 +13:00
self.RPC.update(
2023-11-29 02:20:06 +13:00
large_image="logo", details="https://github.com/RareDevs/Rare"
2021-12-24 22:09:50 +13:00
)
2021-04-13 07:55:08 +12:00
return
if self.settings.value(*options.rpc_name):
try:
title = self.core.get_installed_game(app_name).title
except AttributeError:
logger.error(f"Could not get title of game: {app_name}")
title = app_name
2021-04-13 07:55:08 +12:00
start = None
if self.settings.value(*options.rpc_time):
2021-04-13 07:55:08 +12:00
start = str(time.time()).split(".")[0]
os = None
if self.settings.value(*options.rpc_os):
os = f"via Rare on {platform.system()}"
2021-04-13 07:55:08 +12:00
2021-12-24 22:09:50 +13:00
self.RPC.update(
large_image="logo", details=title, large_text=title, state=os, start=start
)
2021-04-13 07:55:08 +12:00
self.state = 0