1
0
Fork 0
mirror of synced 2024-07-07 15:35:42 +12:00
Rare/rare/components/tabs/games/game_info/dlcs.py

142 lines
5.7 KiB
Python

import os
from PyQt5.QtCore import pyqtSignal, QSettings
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QGroupBox, QHBoxLayout, QVBoxLayout, QScrollArea, QLabel, QPushButton, QMessageBox
from legendary.core import LegendaryCore
from legendary.models.game import Game
from rare import data_dir
from rare.utils.utils import download_image
class DlcTab(QScrollArea):
install_dlc = pyqtSignal(str, bool)
game: Game
def __init__(self, core: LegendaryCore, parent):
super(DlcTab, self).__init__(parent=parent)
self.core = core
self.widget = QGroupBox("DLCs")
self.widget.setObjectName("group")
self.setWidgetResizable(True)
self.layout = QVBoxLayout()
self.installed_dlcs = [i.app_name for i in self.core.get_installed_dlc_list()]
self.installed_dlc_widget = QGroupBox(self.tr("Installed DLCs"))
self.installed_layout = QVBoxLayout()
self.available_dlcs = QGroupBox(self.tr("Available DLCs"))
self.available_dlcs_layout = QVBoxLayout()
self.installed = []
self.available = []
def update_dlcs(self, app_name, dlcs: list):
self.installed_dlcs = [i.app_name for i in self.core.get_installed_dlc_list()]
self.installed_dlc_widget = QGroupBox(self.tr("Installed DLCs"))
self.installed_layout = QVBoxLayout()
self.available_dlcs = QGroupBox(self.tr("Available DLCs"))
self.available_dlcs_layout = QVBoxLayout()
self.installed = []
self.available = []
QVBoxLayout().addWidget(self.widget)
self.game = self.core.get_game(app_name)
for dlc in sorted(dlcs[self.game.asset_info.catalog_item_id], key=lambda x: x.app_title):
if dlc.app_name in self.installed_dlcs:
w = DLCWidget(dlc, True)
self.installed_layout.addWidget(w)
self.installed.append(dlc)
else:
w = DLCWidget(dlc, False)
w.install.connect(self.install)
self.available_dlcs_layout.addWidget(w)
self.available.append(dlc)
if len(self.installed) == 0:
self.installed_layout.addWidget(QLabel(self.tr("No DLCs are installed")))
if len(self.available) == 0:
self.available_dlcs_layout.addWidget(QLabel(self.tr("No DLCs are available")))
self.widget = QGroupBox("DLCs")
self.layout = QVBoxLayout()
self.installed_dlc_widget.setLayout(self.installed_layout)
self.available_dlcs.setLayout(self.available_dlcs_layout)
self.layout.addWidget(self.installed_dlc_widget)
self.layout.addWidget(self.available_dlcs)
self.layout.addStretch(1)
self.widget.setLayout(self.layout)
self.setWidget(self.widget)
def install(self, app_name):
if not self.core.is_installed(self.game.app_name):
QMessageBox.warning(self, "Error", self.tr("Base Game is not installed. Please install {} first").format(
self.game.app_title))
return
self.install_dlc.emit(app_name, True)
class DLCWidget(QGroupBox):
install = pyqtSignal(str) # Appname
def __init__(self, dlc: Game, installed: bool):
super(DLCWidget, self).__init__()
self.main_layout = QHBoxLayout()
self.dlc = dlc
IMAGE_DIR = QSettings().value("img_dir", os.path.join(data_dir, "images"))
if installed:
if os.path.exists(os.path.join(IMAGE_DIR, dlc.app_name, "FinalArt.png")):
pixmap = QPixmap(os.path.join(IMAGE_DIR, dlc.app_name, "FinalArt.png"))
elif os.path.exists(os.path.join(IMAGE_DIR, dlc.app_name, "DieselGameBoxTall.png")):
pixmap = QPixmap(os.path.join(IMAGE_DIR, dlc.app_name, "DieselGameBoxTall.png"))
elif os.path.exists(os.path.join(IMAGE_DIR, dlc.app_name, "DieselGameBoxLogo.png")):
pixmap = QPixmap(os.path.join(IMAGE_DIR, dlc.app_name, "DieselGameBoxLogo.png"))
else:
print(f"No Image found: {dlc.app_title}")
pixmap = None
if not pixmap or pixmap.isNull():
print(dlc.app_title + " has corrupt Image")
download_image(dlc, force=True)
pixmap = QPixmap(f"{IMAGE_DIR}/{dlc.app_name}/UninstalledArt.png")
else:
if os.path.exists(f"{IMAGE_DIR}/{dlc.app_name}/UninstalledArt.png"):
pixmap = QPixmap(f"{IMAGE_DIR}/{dlc.app_name}/DieselGameBoxTall.png")
else:
pixmap = None
if not pixmap or pixmap.isNull():
print(dlc.app_title + " has corrupt Image")
download_image(dlc, force=True)
pixmap = QPixmap(f"{IMAGE_DIR}/{dlc.app_name}/UninstalledArt.png")
image = QLabel()
image.setPixmap(pixmap)
self.main_layout.addWidget(image)
self.layout = QVBoxLayout()
self.layout.addWidget(QLabel(dlc.app_title))
self.layout.addWidget(QLabel("Version: " + str(dlc.app_version)))
self.layout.addWidget(QLabel("App Name: " + dlc.app_name))
if not installed:
self.install_button = QPushButton(self.tr("Install"))
self.layout.addWidget(self.install_button)
self.install_button.clicked.connect(lambda: self.install.emit(dlc.app_name))
else:
self.layout.addWidget(QLabel(self.tr("Installed. Uninstalling DLCs is not supported")))
self.main_layout.addLayout(self.layout)
self.setLayout(self.main_layout)
self.layout.addStretch(1)
def install_game(self):
self.install_button.setDisabled(True)
self.install_button.setText(self.tr("Installing"))
self.install.emit(self.dlc.app_name)