1
0
Fork 0
mirror of synced 2024-06-28 11:11:15 +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.signals.games_tab.connect(lambda x: self.signal_received(*x))
self.settings = QSettings() 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.head_bar = GameListHeadBar()
self.games.layout().insertWidget(0, self.head_bar) 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.addWidget(self.game_info)
self.import_widget = ImportWidget() 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.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.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 = [] self.no_asset_names = []
if not shared.args.offline: if not shared.args.offline:
for game in self.no_assets: for game in self.no_assets:
@ -262,7 +263,6 @@ class GamesTab(QStackedWidget, Ui_GamesTab):
w.setVisible(True) w.setVisible(True)
def update_list(self, app_name=None): def update_list(self, app_name=None):
print(app_name)
if app_name: if app_name:
if widgets := self.widgets.get(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 qtawesome import icon
from legendary.models.game import Game 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_dlc import GameDlc
from rare.components.tabs.games.game_info.game_info import GameInfo from rare.components.tabs.games.game_info.game_info import GameInfo
from rare.components.tabs.games.game_info.game_settings import GameSettings from rare.components.tabs.games.game_info.game_settings import GameSettings
from rare.utils.extra_widgets import SideTabBar from rare.utils.extra_widgets import SideTabBar
from rare.utils.models import Signals
class InfoTabs(QTabWidget): class InfoTabs(QTabWidget):
def __init__(self, core, signals: Signals, parent): def __init__(self, dlcs: list, parent):
super(InfoTabs, self).__init__(parent=parent) super(InfoTabs, self).__init__(parent=parent)
self.app_name = "" self.app_name = ""
self.core = core self.core = shared.legendary_core
self.signals = signals self.signals = shared.signals
self.setTabBar(SideTabBar()) self.setTabBar(SideTabBar())
self.setTabPosition(QTabWidget.West) self.setTabPosition(QTabWidget.West)
@ -26,11 +26,12 @@ class InfoTabs(QTabWidget):
self.info = GameInfo(self.core, self.signals, self) self.info = GameInfo(self.core, self.signals, self)
self.addTab(self.info, self.tr("Information")) 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.addTab(self.settings, self.tr("Settings"))
self.tabBar().setCurrentIndex(1) 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")) self.addTab(self.dlc, self.tr("Downloadable Content"))
def update_game(self, game: Game, dlcs: list): def update_game(self, game: Game, dlcs: list):
@ -39,14 +40,11 @@ class InfoTabs(QTabWidget):
self.settings.update_game(game) self.settings.update_game(game)
# DLC Tab: Disable if no dlcs available # DLC Tab: Disable if no dlcs available
if dlcs: if len(self.dlc_list[game.asset_info.catalog_item_id]) == 0:
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:
self.setTabEnabled(3, False) self.setTabEnabled(3, False)
else:
self.setTabEnabled(3, True)
self.dlc.update_dlcs(game.app_name)
def keyPressEvent(self, e: QKeyEvent): def keyPressEvent(self, e: QKeyEvent):
if e.key() == Qt.Key_Escape: if e.key() == Qt.Key_Escape:

View file

@ -1,11 +1,13 @@
from PyQt5.QtCore import pyqtSignal from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QFrame, QWidget, QMessageBox from PyQt5.QtWidgets import QFrame, QWidget, QMessageBox
from legendary.core import LegendaryCore
from legendary.models.game import Game 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 import Ui_GameDlc
from rare.ui.components.tabs.games.game_info.game_dlc_widget import Ui_GameDlcWidget 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 from rare.utils.utils import get_pixmap
@ -13,21 +15,22 @@ class GameDlc(QWidget, Ui_GameDlc):
install_dlc = pyqtSignal(str, bool) install_dlc = pyqtSignal(str, bool)
game: Game game: Game
def __init__(self, core: LegendaryCore, signals: Signals, parent=None): def __init__(self, dlcs: list, parent=None):
super(GameDlc, self).__init__(parent=parent) super(GameDlc, self).__init__(parent=parent)
self.setupUi(self) self.setupUi(self)
self.available_dlc_scroll.setObjectName("noborder") self.available_dlc_scroll.setObjectName("noborder")
self.installed_dlc_scroll.setObjectName("noborder") self.installed_dlc_scroll.setObjectName("noborder")
self.signals = shared.signals
self.core = shared.legendary_core
self.signals = signals self.dlcs = dlcs
self.core = core
self.installed_dlcs = list()
self.installed_dlc_widgets = list() self.installed_dlc_widgets = list()
self.available_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) 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>") self.game_title.setText(f"<h2>{self.game.app_title}</h2>")
if self.installed_dlc_widgets: if self.installed_dlc_widgets:
@ -39,19 +42,19 @@ class GameDlc(QWidget, Ui_GameDlc):
dlc_widget.install.disconnect() dlc_widget.install.disconnect()
dlc_widget.deleteLater() dlc_widget.deleteLater()
self.available_dlc_widgets.clear() 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()] if self.core.is_installed(dlc.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:
dlc_widget = GameDlcWidget(dlc, True) dlc_widget = GameDlcWidget(dlc, True)
self.installed_dlc_widgets.append(dlc_widget)
self.installed_dlc_contents_layout.addWidget(dlc_widget) self.installed_dlc_contents_layout.addWidget(dlc_widget)
dlc_widget.uninstall.connect(self.uninstall)
self.installed_dlc_widgets.append(dlc_widget)
else: else:
dlc_widget = GameDlcWidget(dlc, False) dlc_widget = GameDlcWidget(dlc, False)
self.available_dlc_contents_layout.addWidget(dlc_widget)
dlc_widget.install.connect(self.install) dlc_widget.install.connect(self.install)
self.available_dlc_widgets.append(dlc_widget) 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_label.setVisible(not self.installed_dlc_widgets)
self.installed_dlc_scroll.setVisible(bool(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_label.setVisible(not self.available_dlc_widgets)
self.available_dlc_scroll.setVisible(bool(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): def install(self, app_name):
if not self.core.is_installed(self.game.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( 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): class GameDlcWidget(QFrame, Ui_GameDlcWidget):
install = pyqtSignal(str) # Appname install = pyqtSignal(str) # Appname
uninstall = pyqtSignal(Game)
def __init__(self, dlc: Game, installed: bool, parent=None): def __init__(self, dlc: Game, installed: bool, parent=None):
super(GameDlcWidget, self).__init__(parent=parent) super(GameDlcWidget, self).__init__(parent=parent)
@ -84,12 +95,18 @@ class GameDlcWidget(QFrame, Ui_GameDlcWidget):
self.version.setText(dlc.app_version) self.version.setText(dlc.app_version)
self.app_name.setText(dlc.app_name) self.app_name.setText(dlc.app_name)
if not installed: if installed:
self.install_button.clicked.connect(lambda: self.install.emit(dlc.app_name)) self.install_button.clicked.connect(self.uninstall_dlc)
self.status.setText(self.tr("Not installed")) self.status.setText(self.tr("Installed"))
self.install_button.setText("Uninstall")
else: else:
self.status.setText(self.tr("Installed. Uninstalling DLCs is not supported")) self.install_button.clicked.connect(self.install_game)
self.install_button.setVisible(not installed) 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): def install_game(self):
self.install_button.setDisabled(True) self.install_button.setDisabled(True)