2021-03-25 23:49:05 +13:00
|
|
|
from logging import getLogger
|
|
|
|
|
2021-12-06 10:24:51 +13:00
|
|
|
from PyQt5.QtCore import QProcess, pyqtSignal, Qt
|
2021-04-23 00:34:06 +12:00
|
|
|
from PyQt5.QtWidgets import QHBoxLayout, QLabel, QPushButton, QVBoxLayout
|
2021-03-25 23:49:05 +13:00
|
|
|
|
2021-12-24 22:09:50 +13:00
|
|
|
from rare.components.tabs.games.game_widgets.base_installed_widget import (
|
|
|
|
BaseInstalledWidget,
|
|
|
|
)
|
2022-07-27 02:58:17 +12:00
|
|
|
from rare.utils.misc import icon, get_size
|
2021-03-25 23:49:05 +13:00
|
|
|
|
|
|
|
logger = getLogger("GameWidget")
|
|
|
|
|
|
|
|
|
|
|
|
class InstalledListWidget(BaseInstalledWidget):
|
|
|
|
proc: QProcess
|
|
|
|
signal = pyqtSignal(str)
|
|
|
|
update_game = pyqtSignal()
|
|
|
|
|
2021-11-02 10:53:04 +13:00
|
|
|
def __init__(self, app_name, pixmap, game_utils):
|
|
|
|
super(InstalledListWidget, self).__init__(app_name, pixmap, game_utils)
|
2022-06-20 21:44:57 +12:00
|
|
|
self.setFrameStyle(self.StyledPanel)
|
2021-09-14 08:27:37 +12:00
|
|
|
self.dev = self.game.metadata["developer"]
|
2021-12-28 04:19:57 +13:00
|
|
|
if self.igame:
|
2021-10-24 12:47:49 +13:00
|
|
|
self.size = self.igame.install_size
|
2021-09-14 08:27:37 +12:00
|
|
|
else:
|
|
|
|
self.size = 0
|
2021-04-13 21:15:14 +12:00
|
|
|
|
2021-03-25 23:49:05 +13:00
|
|
|
self.layout = QHBoxLayout()
|
2021-12-06 10:24:51 +13:00
|
|
|
self.setLayout(self.layout)
|
|
|
|
self.layout.addWidget(self.image)
|
2021-03-25 23:49:05 +13:00
|
|
|
|
|
|
|
##Layout on the right
|
|
|
|
self.childLayout = QVBoxLayout()
|
2021-12-06 10:24:51 +13:00
|
|
|
self.layout.addLayout(self.childLayout)
|
2021-03-25 23:49:05 +13:00
|
|
|
|
2021-08-29 06:03:25 +12:00
|
|
|
play_icon = icon("ei.play")
|
2021-11-03 09:57:19 +13:00
|
|
|
self.title_label = QLabel(f"<h1>{self.game.app_title}</h1>")
|
|
|
|
self.title_label.setWordWrap(True)
|
|
|
|
self.childLayout.addWidget(self.title_label)
|
2021-09-14 08:27:37 +12:00
|
|
|
self.app_name_label = QLabel(self.game.app_name)
|
2021-12-24 22:09:50 +13:00
|
|
|
self.launch_button = QPushButton(
|
|
|
|
play_icon, self.tr("Launch") if self.igame else self.tr("Link/Play")
|
|
|
|
)
|
2021-03-25 23:49:05 +13:00
|
|
|
self.launch_button.setObjectName("launch_game_button")
|
2021-11-03 09:57:19 +13:00
|
|
|
self.launch_button.setFixedWidth(150)
|
2021-03-25 23:49:05 +13:00
|
|
|
|
|
|
|
self.info = QPushButton("Info")
|
2021-12-06 08:11:11 +13:00
|
|
|
self.info.clicked.connect(lambda: self.show_info.emit(self.game.app_name))
|
2021-03-25 23:49:05 +13:00
|
|
|
self.info.setFixedWidth(80)
|
|
|
|
|
2021-11-03 09:57:19 +13:00
|
|
|
self.info_label = QLabel("")
|
|
|
|
self.childLayout.addWidget(self.info_label)
|
|
|
|
self.update_text()
|
|
|
|
|
2021-09-14 08:27:37 +12:00
|
|
|
self.launch_button.clicked.connect(self.launch)
|
|
|
|
|
2021-03-25 23:49:05 +13:00
|
|
|
self.childLayout.addWidget(self.launch_button)
|
|
|
|
self.childLayout.addWidget(self.info)
|
|
|
|
self.childLayout.addWidget(self.app_name_label)
|
2022-02-02 10:29:34 +13:00
|
|
|
self.developer_label = QLabel(self.tr("Developer: {}").format(self.dev))
|
2021-03-25 23:49:05 +13:00
|
|
|
self.childLayout.addWidget(self.developer_label)
|
2021-12-23 06:00:31 +13:00
|
|
|
if self.igame:
|
2022-02-02 10:29:34 +13:00
|
|
|
self.version_label = QLabel(f"Version: {self.igame.version}")
|
2021-12-24 22:09:50 +13:00
|
|
|
self.size_label = QLabel(
|
|
|
|
f"{self.tr('Installed size')}: {get_size(self.size)}"
|
|
|
|
)
|
2021-04-13 00:49:36 +12:00
|
|
|
|
2021-09-14 08:27:37 +12:00
|
|
|
self.childLayout.addWidget(self.version_label)
|
|
|
|
self.childLayout.addWidget(self.size_label)
|
2021-03-25 23:49:05 +13:00
|
|
|
|
2021-12-06 10:24:51 +13:00
|
|
|
self.childLayout.setAlignment(Qt.AlignTop)
|
|
|
|
self.layout.setAlignment(Qt.AlignLeft)
|
2021-03-25 23:49:05 +13:00
|
|
|
|
2021-11-03 09:57:19 +13:00
|
|
|
self.game_utils.cloud_save_finished.connect(self.sync_finished)
|
2021-11-14 11:56:07 +13:00
|
|
|
self.game_utils.finished.connect(self.game_finished)
|
2021-11-03 09:57:19 +13:00
|
|
|
|
|
|
|
self.leaveEvent = self.update_text
|
|
|
|
self.enterEvent = self.update_text
|
|
|
|
|
2021-11-14 11:56:07 +13:00
|
|
|
self.game_utils.game_launched.connect(self.game_started)
|
|
|
|
|
2021-11-03 09:57:19 +13:00
|
|
|
def update_text(self, e=None):
|
|
|
|
if self.update_available:
|
|
|
|
self.info_label.setText(self.texts["default"]["update_available"])
|
2022-04-26 09:30:52 +12:00
|
|
|
elif self.is_only_offline:
|
|
|
|
self.info_label.setText(self.texts["default"]["no_meta"])
|
2021-11-03 09:57:19 +13:00
|
|
|
elif self.igame and self.igame.needs_verification:
|
|
|
|
self.info_label.setText(self.texts["needs_verification"])
|
|
|
|
elif self.syncing_cloud_saves:
|
|
|
|
self.info_label.setText(self.texts["default"]["syncing"])
|
|
|
|
else:
|
|
|
|
self.info_label.setText("")
|
2021-11-14 11:56:07 +13:00
|
|
|
|
|
|
|
def game_started(self, app_name):
|
|
|
|
if app_name == self.game.app_name:
|
|
|
|
self.game_running = True
|
|
|
|
self.update_text()
|
|
|
|
self.launch_button.setDisabled(True)
|
|
|
|
|
|
|
|
def game_finished(self, app_name, error):
|
|
|
|
if app_name != self.game.app_name:
|
|
|
|
return
|
|
|
|
super().game_finished(app_name, error)
|
|
|
|
self.update_text(None)
|
|
|
|
self.launch_button.setDisabled(False)
|