Add support for uninstalling dlcs
This commit is contained in:
parent
214db50a40
commit
3f7d8b10e2
|
@ -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):
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue