2021-12-05 12:31:36 +13:00
|
|
|
from PyQt5.QtCore import Qt, pyqtSignal
|
|
|
|
from PyQt5.QtGui import QPixmap, QResizeEvent
|
2021-09-11 02:36:26 +12:00
|
|
|
from PyQt5.QtWidgets import QFrame, QWidget, QMessageBox
|
|
|
|
|
|
|
|
from legendary.models.game import Game
|
2021-10-11 08:52:11 +13:00
|
|
|
from rare import shared
|
2021-11-02 10:53:04 +13:00
|
|
|
from rare.components.tabs.games.game_utils import GameUtils
|
2021-09-11 02:36:26 +12:00
|
|
|
from rare.ui.components.tabs.games.game_info.game_dlc import Ui_GameDlc
|
|
|
|
from rare.ui.components.tabs.games.game_info.game_dlc_widget import Ui_GameDlcWidget
|
2021-10-11 08:52:11 +13:00
|
|
|
from rare.utils.models import InstallOptionsModel
|
2021-09-12 23:23:40 +12:00
|
|
|
from rare.utils.utils import get_pixmap
|
2021-09-11 02:36:26 +12:00
|
|
|
|
|
|
|
|
|
|
|
class GameDlc(QWidget, Ui_GameDlc):
|
|
|
|
install_dlc = pyqtSignal(str, bool)
|
|
|
|
game: Game
|
|
|
|
|
2021-12-10 08:03:34 +13:00
|
|
|
def __init__(self, dlcs: dict, game_utils: GameUtils, parent=None):
|
2021-09-11 02:36:26 +12:00
|
|
|
super(GameDlc, self).__init__(parent=parent)
|
|
|
|
self.setupUi(self)
|
2021-11-02 10:53:04 +13:00
|
|
|
self.game_utils = game_utils
|
2021-10-08 06:42:27 +13:00
|
|
|
|
2021-10-13 08:11:52 +13:00
|
|
|
self.available_dlc_scroll.setProperty("noBorder", 1)
|
|
|
|
self.installed_dlc_scroll.setProperty("noBorder", 1)
|
2021-10-11 08:52:11 +13:00
|
|
|
self.signals = shared.signals
|
2021-10-15 10:18:13 +13:00
|
|
|
self.core = shared.core
|
2021-10-08 06:42:27 +13:00
|
|
|
|
2021-10-11 08:52:11 +13:00
|
|
|
self.dlcs = dlcs
|
2021-09-11 02:36:26 +12:00
|
|
|
self.installed_dlc_widgets = list()
|
|
|
|
self.available_dlc_widgets = list()
|
|
|
|
|
2021-10-11 08:52:11 +13:00
|
|
|
def update_dlcs(self, app_name):
|
2021-09-11 02:36:26 +12:00
|
|
|
self.game = self.core.get_game(app_name)
|
2021-12-05 12:56:51 +13:00
|
|
|
dlcs = self.dlcs[self.game.catalog_item_id]
|
2021-10-05 08:51:39 +13:00
|
|
|
self.game_title.setText(f"<h2>{self.game.app_title}</h2>")
|
2021-09-11 02:36:26 +12:00
|
|
|
|
|
|
|
if self.installed_dlc_widgets:
|
|
|
|
for dlc_widget in self.installed_dlc_widgets:
|
|
|
|
dlc_widget.deleteLater()
|
|
|
|
self.installed_dlc_widgets.clear()
|
|
|
|
if self.available_dlc_widgets:
|
|
|
|
for dlc_widget in self.available_dlc_widgets:
|
|
|
|
dlc_widget.install.disconnect()
|
|
|
|
dlc_widget.deleteLater()
|
|
|
|
self.available_dlc_widgets.clear()
|
|
|
|
|
2021-12-05 12:56:51 +13:00
|
|
|
for dlc in sorted(dlcs, key=lambda x: x.app_title):
|
2021-10-11 08:52:11 +13:00
|
|
|
if self.core.is_installed(dlc.app_name):
|
2021-09-11 02:36:26 +12:00
|
|
|
dlc_widget = GameDlcWidget(dlc, True)
|
2021-10-05 08:51:39 +13:00
|
|
|
self.installed_dlc_contents_layout.addWidget(dlc_widget)
|
2021-10-11 08:52:11 +13:00
|
|
|
dlc_widget.uninstall.connect(self.uninstall)
|
|
|
|
self.installed_dlc_widgets.append(dlc_widget)
|
|
|
|
|
2021-09-11 02:36:26 +12:00
|
|
|
else:
|
|
|
|
dlc_widget = GameDlcWidget(dlc, False)
|
2021-10-11 08:52:11 +13:00
|
|
|
self.available_dlc_contents_layout.addWidget(dlc_widget)
|
2021-09-11 02:36:26 +12:00
|
|
|
dlc_widget.install.connect(self.install)
|
|
|
|
self.available_dlc_widgets.append(dlc_widget)
|
|
|
|
|
|
|
|
self.installed_dlc_label.setVisible(not self.installed_dlc_widgets)
|
2021-10-05 08:51:39 +13:00
|
|
|
self.installed_dlc_scroll.setVisible(bool(self.installed_dlc_widgets))
|
2021-09-11 02:36:26 +12:00
|
|
|
|
|
|
|
self.available_dlc_label.setVisible(not self.available_dlc_widgets)
|
2021-10-05 08:51:39 +13:00
|
|
|
self.available_dlc_scroll.setVisible(bool(self.available_dlc_widgets))
|
2021-09-11 02:36:26 +12:00
|
|
|
|
2021-11-02 10:53:04 +13:00
|
|
|
def uninstall(self, app_name):
|
|
|
|
if self.game_utils.uninstall_game(app_name):
|
|
|
|
self.update_dlcs(app_name)
|
2021-10-11 08:52:11 +13:00
|
|
|
|
2021-09-11 02:36:26 +12:00
|
|
|
def install(self, app_name):
|
|
|
|
if not self.core.is_installed(self.game.app_name):
|
2021-12-24 22:09:50 +13:00
|
|
|
QMessageBox.warning(
|
|
|
|
self,
|
|
|
|
"Error",
|
|
|
|
self.tr("Base Game is not installed. Please install {} first").format(
|
|
|
|
self.game.app_title
|
|
|
|
),
|
|
|
|
)
|
2021-09-11 02:36:26 +12:00
|
|
|
return
|
2021-10-08 06:42:27 +13:00
|
|
|
|
2021-12-24 22:09:50 +13:00
|
|
|
self.signals.install_game.emit(
|
|
|
|
InstallOptionsModel(app_name=app_name, update=True)
|
|
|
|
)
|
2021-09-11 02:36:26 +12:00
|
|
|
|
|
|
|
|
|
|
|
class GameDlcWidget(QFrame, Ui_GameDlcWidget):
|
|
|
|
install = pyqtSignal(str) # Appname
|
2021-11-02 10:53:04 +13:00
|
|
|
uninstall = pyqtSignal(str)
|
2021-09-11 02:36:26 +12:00
|
|
|
|
|
|
|
def __init__(self, dlc: Game, installed: bool, parent=None):
|
|
|
|
super(GameDlcWidget, self).__init__(parent=parent)
|
|
|
|
self.setupUi(self)
|
|
|
|
self.dlc = dlc
|
2021-09-12 23:23:40 +12:00
|
|
|
|
2021-09-11 02:36:26 +12:00
|
|
|
self.dlc_name.setText(dlc.app_title)
|
2021-12-05 12:56:51 +13:00
|
|
|
self.version.setText(dlc.app_version())
|
2021-09-11 02:36:26 +12:00
|
|
|
self.app_name.setText(dlc.app_name)
|
|
|
|
|
2021-12-05 12:31:36 +13:00
|
|
|
self.pixmap = get_pixmap(dlc.app_name)
|
|
|
|
|
2021-10-11 08:52:11 +13:00
|
|
|
if installed:
|
2021-10-13 08:11:52 +13:00
|
|
|
self.action_button.setProperty("uninstall", 1)
|
|
|
|
self.action_button.clicked.connect(self.uninstall_dlc)
|
|
|
|
self.action_button.setText(self.tr("Uninstall DLC"))
|
2021-09-11 02:36:26 +12:00
|
|
|
else:
|
2021-10-13 08:11:52 +13:00
|
|
|
self.action_button.setProperty("install", 1)
|
|
|
|
self.action_button.clicked.connect(self.install_game)
|
|
|
|
self.action_button.setText(self.tr("Install DLC"))
|
2021-10-11 08:52:11 +13:00
|
|
|
|
2021-12-05 12:31:36 +13:00
|
|
|
def resizeEvent(self, a0: QResizeEvent) -> None:
|
|
|
|
self.image.clear()
|
|
|
|
super(GameDlcWidget, self).resizeEvent(a0)
|
|
|
|
self.setPixmap(self.pixmap)
|
|
|
|
|
|
|
|
def setPixmap(self, a0: QPixmap) -> None:
|
|
|
|
self.pixmap = a0
|
|
|
|
self.image.setPixmap(
|
|
|
|
self.pixmap.scaledToHeight(
|
2021-12-24 22:09:50 +13:00
|
|
|
self.dlc_info.size().height()
|
|
|
|
- (
|
|
|
|
self.image.contentsMargins().top()
|
|
|
|
+ self.image.contentsMargins().bottom()
|
|
|
|
+ self.image.lineWidth() * 2
|
|
|
|
),
|
|
|
|
Qt.SmoothTransformation,
|
|
|
|
)
|
|
|
|
)
|
2021-12-05 12:31:36 +13:00
|
|
|
self.image.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
|
|
|
|
|
2021-10-11 08:52:11 +13:00
|
|
|
def uninstall_dlc(self):
|
2021-10-13 08:11:52 +13:00
|
|
|
self.action_button.setDisabled(True)
|
|
|
|
self.action_button.setText(self.tr("Uninstalling"))
|
2021-10-11 08:52:11 +13:00
|
|
|
self.uninstall.emit(self.dlc)
|
2021-09-11 02:36:26 +12:00
|
|
|
|
|
|
|
def install_game(self):
|
2021-10-13 08:11:52 +13:00
|
|
|
self.action_button.setDisabled(True)
|
|
|
|
self.action_button.setText(self.tr("Installing"))
|
2021-09-11 02:36:26 +12:00
|
|
|
self.install.emit(self.dlc.app_name)
|