1
0
Fork 0
mirror of synced 2024-06-17 10:04:43 +12:00

ImportGroup: Add option to import DLCs

This commit is contained in:
loathingKernel 2022-07-14 12:01:57 +03:00
parent 14087a3c6c
commit d05f74b286
3 changed files with 71 additions and 33 deletions

View file

@ -15,7 +15,6 @@ from rare.lgndr.api_arguments import LgndrImportGameArgs
from rare.lgndr.api_exception import LgndrException
from rare.shared import LegendaryCLISingleton, LegendaryCoreSingleton, GlobalSignalsSingleton, ApiResultsSingleton
from rare.ui.components.tabs.games.import_sync.import_group import Ui_ImportGroup
from rare.utils import legendary_utils
from rare.utils.extra_widgets import IndicatorLineEdit, PathEdit
logger = getLogger("Import")
@ -56,15 +55,17 @@ class ImportWorker(QRunnable):
finished = pyqtSignal(list)
progress = pyqtSignal(int)
def __init__(self, path: str, import_folder: bool = False, app_name: str = None):
def __init__(self, path: str, app_name: str = None, import_folder: bool = False, import_dlcs: bool = False):
super(ImportWorker, self).__init__()
self.signals = self.Signals()
self.core = LegendaryCoreSingleton()
self.path = Path(path)
self.import_folder = import_folder
self.app_name = app_name
self.tr = lambda message: qApp.translate("ImportThread", message)
self.path = Path(path)
self.app_name = app_name
self.import_folder = import_folder
self.import_dlcs = import_dlcs
def run(self) -> None:
result_list: List = []
if self.import_folder:
@ -85,8 +86,8 @@ class ImportWorker(QRunnable):
result = ImportedGame(ImportResult.ERROR, None, None)
if app_name or (app_name := find_app_name(str(path), self.core)):
result.app_name = app_name
err = self.__import_game(app_name, path)
app_title = self.core.get_game(app_name).app_title
err = self.__import_game(path, app_name, app_title)
if err:
result.result = ImportResult.FAILED
result.message = f"{app_title} - {err}"
@ -97,24 +98,12 @@ class ImportWorker(QRunnable):
result.message = self.tr("Could not find AppName for {}").format(str(path))
return result
# def __import_game(self, app_name: str, path: Path) -> str:
# if not (err := legendary_utils.import_game(self.core, app_name=app_name, path=str(path))):
# igame = self.core.get_installed_game(app_name)
# logger.info(f"Successfully imported {igame.title}")
# return ""
# else:
# return err
def get_boolean_choice(self, a0):
choice = QMessageBox.question(None, "Import DLCs?", a0)
return True if choice == QMessageBox.StandardButton.Yes else False
def __import_game(self, app_name: str, path: Path):
def __import_game(self, path: Path, app_name: str, app_title: str):
cli = LegendaryCLISingleton()
args = LgndrImportGameArgs(
app_path=str(path),
app_name=app_name,
get_boolean_choice=self.get_boolean_choice
get_boolean_choice=lambda a0: self.import_dlcs
)
try:
cli.import_game(args)
@ -202,17 +191,13 @@ class ImportGroup(QGroupBox):
self.app_name_edit.textChanged.connect(self.app_name_changed)
self.ui.app_name_layout.addWidget(self.app_name_edit)
self.ui.import_folder_check.stateChanged.connect(self.import_folder_changed)
self.ui.import_dlcs_check.setEnabled(False)
self.ui.import_button.setEnabled(False)
self.ui.import_button.clicked.connect(
lambda: self.import_pressed(self.path_edit.text())
)
self.ui.import_folder_check.stateChanged.connect(
lambda s: self.ui.import_button.setEnabled(s or (not s and self.app_name_edit.is_valid))
)
self.ui.import_folder_check.stateChanged.connect(
lambda s: self.app_name_edit.setEnabled(not s)
)
self.threadpool = QThreadPool.globalInstance()
def path_edit_cb(self, path) -> Tuple[bool, str, str]:
@ -227,7 +212,7 @@ class ImportGroup(QGroupBox):
def path_changed(self, path):
self.ui.info_label.setText("")
self.ui.import_folder_check.setChecked(False)
self.ui.import_folder_check.setCheckState(Qt.Unchecked)
if self.path_edit.is_valid:
self.app_name_edit.setText(find_app_name(path, self.core))
else:
@ -241,17 +226,36 @@ class ImportGroup(QGroupBox):
else:
return False, text, IndicatorLineEdit.reasons.game_not_installed
def app_name_changed(self, text):
def app_name_changed(self, app_name: str):
self.ui.info_label.setText("")
self.ui.import_dlcs_check.setCheckState(Qt.Unchecked)
if self.app_name_edit.is_valid:
self.ui.import_dlcs_check.setEnabled(
bool(self.core.get_dlc_for_game(app_name))
)
self.ui.import_button.setEnabled(True)
else:
self.ui.import_dlcs_check.setEnabled(False)
self.ui.import_button.setEnabled(False)
def import_folder_changed(self, state):
self.app_name_edit.setEnabled(not state)
self.ui.import_dlcs_check.setCheckState(Qt.Unchecked)
self.ui.import_dlcs_check.setEnabled(
state
or (self.app_name_edit.is_valid and bool(self.core.get_dlc_for_game(self.app_name_edit.text())))
)
self.ui.import_button.setEnabled(state or (not state and self.app_name_edit.is_valid))
def import_pressed(self, path=None):
if not path:
path = self.path_edit.text()
worker = ImportWorker(path, self.ui.import_folder_check.isChecked(), self.app_name_edit.text())
worker = ImportWorker(
path,
self.app_name_edit.text(),
self.ui.import_folder_check.isChecked(),
self.ui.import_dlcs_check.isChecked(),
)
worker.signals.finished.connect(self.import_finished)
worker.signals.progress.connect(self.import_progress)
self.threadpool.start(worker)

View file

@ -14,10 +14,11 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_ImportGroup(object):
def setupUi(self, ImportGroup):
ImportGroup.setObjectName("ImportGroup")
ImportGroup.resize(501, 136)
ImportGroup.resize(501, 162)
ImportGroup.setWindowTitle("ImportGroup")
ImportGroup.setWindowFilePath("")
self.formLayout = QtWidgets.QFormLayout(ImportGroup)
self.formLayout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.formLayout.setObjectName("formLayout")
self.path_edit_label = QtWidgets.QLabel(ImportGroup)
self.path_edit_label.setObjectName("path_edit_label")
@ -40,6 +41,15 @@ class Ui_ImportGroup(object):
self.import_folder_check.setFont(font)
self.import_folder_check.setObjectName("import_folder_check")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.import_folder_check)
self.import_dlcs_label = QtWidgets.QLabel(ImportGroup)
self.import_dlcs_label.setObjectName("import_dlcs_label")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.import_dlcs_label)
self.import_dlcs_check = QtWidgets.QCheckBox(ImportGroup)
font = QtGui.QFont()
font.setItalic(True)
self.import_dlcs_check.setFont(font)
self.import_dlcs_check.setObjectName("import_dlcs_check")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.import_dlcs_check)
self.button_info_layout = QtWidgets.QHBoxLayout()
self.button_info_layout.setObjectName("button_info_layout")
self.import_button = QtWidgets.QPushButton(ImportGroup)
@ -54,7 +64,7 @@ class Ui_ImportGroup(object):
self.info_label.setText("")
self.info_label.setObjectName("info_label")
self.button_info_layout.addWidget(self.info_label)
self.formLayout.setLayout(3, QtWidgets.QFormLayout.FieldRole, self.button_info_layout)
self.formLayout.setLayout(4, QtWidgets.QFormLayout.FieldRole, self.button_info_layout)
self.retranslateUi(ImportGroup)
QtCore.QMetaObject.connectSlotsByName(ImportGroup)
@ -66,6 +76,8 @@ class Ui_ImportGroup(object):
self.app_name_label.setText(_translate("ImportGroup", "Override app name"))
self.import_folder_label.setText(_translate("ImportGroup", "Import all folders"))
self.import_folder_check.setText(_translate("ImportGroup", "Scan the installation path for game folders and import them"))
self.import_dlcs_label.setText(_translate("ImportGroup", "Import DLCs"))
self.import_dlcs_check.setText(_translate("ImportGroup", "If a game has DLCs, try to import them too"))
self.import_button.setText(_translate("ImportGroup", "Import Game"))

View file

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>501</width>
<height>136</height>
<height>162</height>
</rect>
</property>
<property name="windowTitle">
@ -20,6 +20,9 @@
<string>Import EGL game from a directory</string>
</property>
<layout class="QFormLayout" name="formLayout">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="path_edit_label">
<property name="text">
@ -59,7 +62,26 @@
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="import_dlcs_label">
<property name="text">
<string>Import DLCs</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QCheckBox" name="import_dlcs_check">
<property name="font">
<font>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>If a game has DLCs, try to import them too</string>
</property>
</widget>
</item>
<item row="4" column="1">
<layout class="QHBoxLayout" name="button_info_layout">
<item>
<widget class="QPushButton" name="import_button">