1
0
Fork 0
mirror of synced 2024-06-24 01:00:43 +12:00
Rare/rare/components/tabs/games/game_info/game_dlc.py

124 lines
4.7 KiB
Python
Raw Normal View History

from typing import Optional
from PyQt5.QtCore import pyqtSignal, pyqtSlot
2021-09-11 02:36:26 +12:00
from PyQt5.QtWidgets import QFrame, QWidget, QMessageBox
from rare.models.game import RareGame
from rare.models.install import InstallOptionsModel
from rare.shared import LegendaryCoreSingleton, GlobalSignalsSingleton
from rare.shared.game_utils import GameUtils
from rare.shared.image_manager import ImageSize
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
from rare.widgets.image_widget import ImageWidget
2021-09-11 02:36:26 +12:00
class GameDlc(QWidget):
2021-09-11 02:36:26 +12:00
install_dlc = pyqtSignal(str, bool)
def __init__(self, game_utils: GameUtils, parent=None):
2021-09-11 02:36:26 +12:00
super(GameDlc, self).__init__(parent=parent)
self.ui = Ui_GameDlc()
self.ui.setupUi(self)
self.core = LegendaryCoreSingleton()
self.signals = GlobalSignalsSingleton()
self.rgame: Optional[RareGame] = None
self.game_utils = game_utils
self.ui.available_dlc_scroll.setFrameStyle(QFrame.NoFrame)
self.ui.installed_dlc_scroll.setFrameStyle(QFrame.NoFrame)
2021-09-11 02:36:26 +12:00
self.installed_dlc_widgets = list()
self.available_dlc_widgets = list()
def update_dlcs(self, rgame: RareGame):
self.rgame = rgame
self.title.setTitle(self.rgame.app_title)
2021-09-11 02:36:26 +12:00
if self.installed_dlc_widgets:
for dlc_widget in self.installed_dlc_widgets:
dlc_widget.uninstall.disconnect()
2021-09-11 02:36:26 +12:00
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()
for dlc in sorted(self.rgame.owned_dlcs, key=lambda x: x.app_title):
if dlc.is_installed:
2021-09-11 02:36:26 +12:00
dlc_widget = GameDlcWidget(dlc, True)
self.ui.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)
self.ui.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.ui.installed_dlc_label.setVisible(not self.installed_dlc_widgets)
self.ui.installed_dlc_scroll.setVisible(bool(self.installed_dlc_widgets))
2021-09-11 02:36:26 +12:00
self.ui.available_dlc_label.setVisible(not self.available_dlc_widgets)
self.ui.available_dlc_scroll.setVisible(bool(self.available_dlc_widgets))
2021-09-11 02:36:26 +12:00
@pyqtSlot(RareGame)
def uninstall(self, rgame: RareGame):
if self.game_utils.uninstall_game(rgame.app_name):
self.update_dlcs(self.rgame)
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.rgame.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.rgame.app_title),
2021-12-24 22:09:50 +13:00
)
2021-09-11 02:36:26 +12:00
return
self.signals.game.install.emit(InstallOptionsModel(app_name=app_name, update=True))
2021-09-11 02:36:26 +12:00
class GameDlcWidget(QFrame):
install = pyqtSignal(RareGame)
uninstall = pyqtSignal(RareGame)
2021-09-11 02:36:26 +12:00
def __init__(self, dlc: RareGame, installed: bool, parent=None):
2021-09-11 02:36:26 +12:00
super(GameDlcWidget, self).__init__(parent=parent)
self.ui = Ui_GameDlcWidget()
self.ui.setupUi(self)
2021-09-11 02:36:26 +12:00
self.dlc = dlc
self.image = ImageWidget(self)
self.image.setFixedSize(ImageSize.Smaller)
self.ui.dlc_layout.insertWidget(0, self.image)
self.ui.dlc_name.setText(dlc.app_title)
self.ui.version.setText(dlc.version)
self.ui.app_name.setText(dlc.app_name)
2021-09-11 02:36:26 +12:00
self.image.setPixmap(dlc.pixmap)
2021-10-11 08:52:11 +13:00
if installed:
self.ui.action_button.setProperty("uninstall", 1)
self.ui.action_button.clicked.connect(self.uninstall_dlc)
self.ui.action_button.setText(self.tr("Uninstall DLC"))
2021-09-11 02:36:26 +12:00
else:
self.ui.action_button.setProperty("install", 1)
self.ui.action_button.clicked.connect(self.install_game)
self.ui.action_button.setText(self.tr("Install DLC"))
2021-10-11 08:52:11 +13:00
def uninstall_dlc(self):
self.ui.action_button.setDisabled(True)
self.ui.action_button.setText(self.tr("Uninstalling"))
self.uninstall.emit(self.dlc)
2021-09-11 02:36:26 +12:00
def install_game(self):
self.ui.action_button.setDisabled(True)
self.ui.action_button.setText(self.tr("Installing"))
self.install.emit(self.dlc)