1
0
Fork 0
mirror of synced 2024-10-01 09:47:29 +13:00
Rare/rare/components/tray_icon.py

86 lines
2.9 KiB
Python
Raw Normal View History

from logging import getLogger
from typing import List, Dict
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtGui import QIcon
2021-04-08 00:46:27 +12:00
from PyQt5.QtWidgets import QSystemTrayIcon, QMenu, QAction
2021-04-23 00:34:06 +12:00
from rare.shared import LegendaryCoreSingleton, GlobalSignalsSingleton
from rare.models.game import RareGame
logger = getLogger("TrayIcon")
2021-04-08 00:46:27 +12:00
# FIXME: Remove when RareCore gets merged and replace it below
class RareGameMeta:
def __init__(self):
self.core = LegendaryCoreSingleton()
metadata = RareGame.load_metadata_json()
self.metadata: Dict[str, RareGame.Metadata] = {}
for app_name, data in metadata.items():
self.metadata[app_name] = RareGame.Metadata.from_dict(data)
def get_list(self) -> List[str]:
last_played = [
item for item in self.metadata.items() if (bool(item[1]) and self.core.is_installed(item[0]))
]
last_played.sort(key=lambda item: item[1].last_played, reverse=True)
last_played = last_played[0:5]
last_played = [item[0] for item in last_played]
return last_played
2021-04-08 00:46:27 +12:00
class TrayIcon(QSystemTrayIcon):
# none:
show_app: pyqtSignal = pyqtSignal()
# int: exit code
exit_app: pyqtSignal = pyqtSignal(int)
def __init__(self, parent=None):
super(TrayIcon, self).__init__(parent=parent)
self.core = LegendaryCoreSingleton()
2021-12-10 09:59:07 +13:00
self.setIcon(QIcon(":/images/Rare.png"))
2021-04-08 00:46:27 +12:00
self.setVisible(True)
self.setToolTip("Rare")
self.menu = QMenu()
self.show_action = QAction("Rare")
self.show_action.triggered.connect(self.show_app)
self.menu.addAction(self.show_action)
2021-04-08 00:46:27 +12:00
self.menu.addSeparator()
self.text_action = QAction("Quick launch")
self.text_action.setEnabled(False)
self.menu.addAction(self.text_action)
metadata = RareGameMeta()
last_played = metadata.get_list()
self.game_actions: List[QAction] = []
2021-04-08 00:46:27 +12:00
for app_name in last_played:
a = QAction(self.core.get_game(app_name).app_title)
a.setProperty("app_name", 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()
self.exit_action = QAction(self.tr("Quit"))
self.exit_action.triggered.connect(lambda: self.exit_app.emit(0))
self.menu.addAction(self.exit_action)
2021-04-08 00:46:27 +12:00
self.setContextMenu(self.menu)
self.signals = GlobalSignalsSingleton()
self.signals.game.uninstalled.connect(self.remove_button)
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)
action.deleteLater()