1
0
Fork 0
mirror of synced 2024-06-24 01:00:43 +12:00

Add support for uninstalling dlcs

This commit is contained in:
Dummerle 2021-10-10 21:52:11 +02:00
parent 214db50a40
commit 3f7d8b10e2
3 changed files with 53 additions and 38 deletions

View file

@ -39,10 +39,16 @@ class GamesTab(QStackedWidget, Ui_GamesTab):
self.signals.games_tab.connect(lambda x: self.signal_received(*x))
self.settings = QSettings()
self.game_list = shared.api_results.game_list
self.dlcs = shared.api_results.dlcs
self.bit32 = shared.api_results.bit32_games
self.mac_games = shared.api_results.mac_games
self.no_assets = shared.api_results.no_asset_games
self.head_bar = GameListHeadBar()
self.games.layout().insertWidget(0, self.head_bar)
self.game_info = InfoTabs(self.core, self.signals, self)
self.game_info = InfoTabs(self.dlcs, self)
self.addWidget(self.game_info)
self.import_widget = ImportWidget()
@ -56,11 +62,6 @@ class GamesTab(QStackedWidget, Ui_GamesTab):
self.import_widget.back_button.clicked.connect(lambda: self.setCurrentIndex(0))
self.uninstalled_info_widget.tabBarClicked.connect(lambda x: self.setCurrentIndex(0) if x == 0 else None)
self.game_list = shared.api_results.game_list
self.dlcs = shared.api_results.dlcs
self.bit32 = shared.api_results.bit32_games
self.mac_games = shared.api_results.mac_games
self.no_assets = shared.api_results.no_asset_games
self.no_asset_names = []
if not shared.args.offline:
for game in self.no_assets:
@ -262,7 +263,6 @@ class GamesTab(QStackedWidget, Ui_GamesTab):
w.setVisible(True)
def update_list(self, app_name=None):
print(app_name)
if app_name:
if widgets := self.widgets.get(app_name):

View file

@ -4,19 +4,19 @@ from PyQt5.QtWidgets import QWidget, QTabWidget
from qtawesome import icon
from legendary.models.game import Game
from rare import shared
from rare.components.tabs.games.game_info.game_dlc import GameDlc
from rare.components.tabs.games.game_info.game_info import GameInfo
from rare.components.tabs.games.game_info.game_settings import GameSettings
from rare.utils.extra_widgets import SideTabBar
from rare.utils.models import Signals
class InfoTabs(QTabWidget):
def __init__(self, core, signals: Signals, parent):
def __init__(self, dlcs: list, parent):
super(InfoTabs, self).__init__(parent=parent)
self.app_name = ""
self.core = core
self.signals = signals
self.core = shared.legendary_core
self.signals = shared.signals
self.setTabBar(SideTabBar())
self.setTabPosition(QTabWidget.West)
@ -26,11 +26,12 @@ class InfoTabs(QTabWidget):
self.info = GameInfo(self.core, self.signals, self)
self.addTab(self.info, self.tr("Information"))
self.settings = GameSettings(core, self)
self.settings = GameSettings(self.core, self)
self.addTab(self.settings, self.tr("Settings"))
self.tabBar().setCurrentIndex(1)
self.dlc = GameDlc(core, self.signals, self)
self.dlc_list = dlcs
self.dlc = GameDlc(self.dlc_list, self)
self.addTab(self.dlc, self.tr("Downloadable Content"))
def update_game(self, game: Game, dlcs: list):
@ -39,14 +40,11 @@ class InfoTabs(QTabWidget):
self.settings.update_game(game)
# DLC Tab: Disable if no dlcs available
if dlcs:
if len(dlcs[game.asset_info.catalog_item_id]) == 0:
self.setTabEnabled(3, False)
else:
self.setTabEnabled(3, True)
self.dlc.update_dlcs(game.app_name, dlcs)
else:
if len(self.dlc_list[game.asset_info.catalog_item_id]) == 0:
self.setTabEnabled(3, False)
else:
self.setTabEnabled(3, True)
self.dlc.update_dlcs(game.app_name)
def keyPressEvent(self, e: QKeyEvent):
if e.key() == Qt.Key_Escape:

View file

@ -1,11 +1,13 @@
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QFrame, QWidget, QMessageBox
from legendary.core import LegendaryCore
from legendary.models.game import Game
from rare import shared
from rare.components.dialogs.uninstall_dialog import UninstallDialog
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.utils.models import Signals, InstallOptionsModel
from rare.utils import legendary_utils
from rare.utils.models import InstallOptionsModel
from rare.utils.utils import get_pixmap
@ -13,21 +15,22 @@ class GameDlc(QWidget, Ui_GameDlc):
install_dlc = pyqtSignal(str, bool)
game: Game
def __init__(self, core: LegendaryCore, signals: Signals, parent=None):
def __init__(self, dlcs: list, parent=None):
super(GameDlc, self).__init__(parent=parent)
self.setupUi(self)
self.available_dlc_scroll.setObjectName("noborder")
self.installed_dlc_scroll.setObjectName("noborder")
self.signals = shared.signals
self.core = shared.legendary_core
self.signals = signals
self.core = core
self.installed_dlcs = list()
self.dlcs = dlcs
self.installed_dlc_widgets = list()
self.available_dlc_widgets = list()
def update_dlcs(self, app_name, dlcs: list):
def update_dlcs(self, app_name):
self.game = self.core.get_game(app_name)
dlcs = self.dlcs[self.game.asset_info.catalog_item_id]
self.game_title.setText(f"<h2>{self.game.app_title}</h2>")
if self.installed_dlc_widgets:
@ -39,19 +42,19 @@ class GameDlc(QWidget, Ui_GameDlc):
dlc_widget.install.disconnect()
dlc_widget.deleteLater()
self.available_dlc_widgets.clear()
for dlc in sorted(dlcs, key=lambda x: x.app_title):
self.installed_dlcs = [i.app_name for i in self.core.get_installed_dlc_list()]
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:
if self.core.is_installed(dlc.app_name):
dlc_widget = GameDlcWidget(dlc, True)
self.installed_dlc_widgets.append(dlc_widget)
self.installed_dlc_contents_layout.addWidget(dlc_widget)
dlc_widget.uninstall.connect(self.uninstall)
self.installed_dlc_widgets.append(dlc_widget)
else:
dlc_widget = GameDlcWidget(dlc, False)
self.available_dlc_contents_layout.addWidget(dlc_widget)
dlc_widget.install.connect(self.install)
self.available_dlc_widgets.append(dlc_widget)
self.available_dlc_contents_layout.addWidget(dlc_widget)
self.installed_dlc_label.setVisible(not self.installed_dlc_widgets)
self.installed_dlc_scroll.setVisible(bool(self.installed_dlc_widgets))
@ -59,6 +62,13 @@ class GameDlc(QWidget, Ui_GameDlc):
self.available_dlc_label.setVisible(not self.available_dlc_widgets)
self.available_dlc_scroll.setVisible(bool(self.available_dlc_widgets))
def uninstall(self, game):
infos = UninstallDialog(game).get_information()
if infos == 0:
return
legendary_utils.uninstall(game.app_name, self.core, infos)
self.update_dlcs(self.game.app_name)
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(
@ -71,6 +81,7 @@ class GameDlc(QWidget, Ui_GameDlc):
class GameDlcWidget(QFrame, Ui_GameDlcWidget):
install = pyqtSignal(str) # Appname
uninstall = pyqtSignal(Game)
def __init__(self, dlc: Game, installed: bool, parent=None):
super(GameDlcWidget, self).__init__(parent=parent)
@ -84,12 +95,18 @@ class GameDlcWidget(QFrame, Ui_GameDlcWidget):
self.version.setText(dlc.app_version)
self.app_name.setText(dlc.app_name)
if not installed:
self.install_button.clicked.connect(lambda: self.install.emit(dlc.app_name))
self.status.setText(self.tr("Not installed"))
if installed:
self.install_button.clicked.connect(self.uninstall_dlc)
self.status.setText(self.tr("Installed"))
self.install_button.setText("Uninstall")
else:
self.status.setText(self.tr("Installed. Uninstalling DLCs is not supported"))
self.install_button.setVisible(not installed)
self.install_button.clicked.connect(self.install_game)
self.status.setText(self.tr("Not installed"))
self.install_button.setText("Install")
def uninstall_dlc(self):
self.uninstall.emit(self.dlc)
def install_game(self):
self.install_button.setDisabled(True)