1
0
Fork 0
mirror of synced 2024-06-16 01:24:45 +12:00

TrayIcon: Update the list of recent games after a game has exited

Signed-off-by: loathingKernel <142770+loathingKernel@users.noreply.github.com>
This commit is contained in:
loathingKernel 2023-01-10 22:31:10 +02:00
parent 7fbd941c98
commit 599db2629f
4 changed files with 37 additions and 22 deletions

View file

@ -1,9 +1,9 @@
from logging import getLogger
from typing import List
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtCore import pyqtSignal, pyqtSlot
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QSystemTrayIcon, QMenu, QAction
from PyQt5.QtWidgets import QSystemTrayIcon, QMenu, QAction, QApplication
from rare.shared import RareCore, LegendaryCoreSingleton, GlobalSignalsSingleton
@ -18,16 +18,17 @@ class TrayIcon(QSystemTrayIcon):
def __init__(self, parent=None):
super(TrayIcon, self).__init__(parent=parent)
self.__parent = parent
self.rcore = RareCore.instance()
self.core = LegendaryCoreSingleton()
self.setIcon(QIcon(":/images/Rare.png"))
self.setVisible(True)
self.setToolTip("Rare")
self.setToolTip(QApplication.applicationName())
self.menu = QMenu()
self.show_action = QAction("Rare")
self.show_action = QAction(QApplication.applicationName())
self.show_action.triggered.connect(self.show_app)
self.menu.addAction(self.show_action)
@ -36,32 +37,42 @@ class TrayIcon(QSystemTrayIcon):
self.text_action.setEnabled(False)
self.menu.addAction(self.text_action)
last_played = [game for game in self.rcore.games if (game.metadata and game.is_installed)]
last_played.sort(key=lambda g: g.metadata.last_played, reverse=True)
last_played = last_played[0:5]
self.game_actions: List[QAction] = []
for game in last_played:
a = QAction(game.game.app_title)
a.setProperty("app_name", game.app_name)
self.game_actions.append(a)
a.triggered.connect(
lambda: parent.tab_widget.games_tab.game_utils.prepare_launch(
self.sender().property("app_name"))
)
self.menu.addActions(self.game_actions)
self.menu.addSeparator()
# We need to reference this separator to add game actions before it
self.separator = self.menu.addSeparator()
self.exit_action = QAction(self.tr("Quit"))
self.exit_action.triggered.connect(lambda: self.exit_app.emit(0))
self.menu.addAction(self.exit_action)
self.game_actions: List[QAction] = []
self.update_actions()
self.setContextMenu(self.menu)
self.signals = GlobalSignalsSingleton()
self.signals.game.uninstalled.connect(self.remove_button)
self.signals.application.update_tray.connect(self.update_actions)
def last_played(self) -> List:
last_played = [game for game in self.rcore.games if (game.metadata and game.is_installed)]
last_played.sort(key=lambda g: g.metadata.last_played, reverse=True)
return last_played[0:5]
@pyqtSlot()
def update_actions(self):
for action in self.game_actions:
action.deleteLater()
self.game_actions.clear()
for rgame in self.last_played():
a = QAction(rgame.app_title)
a.setProperty("app_name", rgame.app_name)
a.triggered.connect(
lambda: self.__parent.tab_widget.games_tab.game_utils.prepare_launch(
self.sender().property("app_name"))
)
self.menu.insertAction(self.separator, a)
self.game_actions.append(a)
@pyqtSlot(str)
def remove_button(self, app_name: str):
if action := next((i for i in self.game_actions if i.property("app_name") == app_name), None):
self.game_actions.remove(action)

View file

@ -17,6 +17,8 @@ class GlobalSignals:
prefix_updated = pyqtSignal()
# none
overlay_installed = pyqtSignal()
# none
update_tray = pyqtSignal()
class ProgressSignals(QObject):
# str: app_name

View file

@ -182,6 +182,7 @@ class GameUtils(QObject):
return
self.finished.emit(rgame.app_name, "")
rgame.signals.game.finished.emit()
logger.info(f"Game exited with exit code: {exit_code}")
self.signals.discord_rpc.set_title.emit("")

View file

@ -141,6 +141,7 @@ class RareCore(QObject):
def add_game(self, rgame: RareGame) -> None:
rgame.signals.game.install.connect(self._signals.game.install)
rgame.signals.game.finished.connect(self._signals.application.update_tray)
self.__games[rgame.app_name] = rgame
def __filter_games(self, condition: Callable[[RareGame], bool]) -> Iterator[RareGame]: