ImportGroup: Add option to import DLCs
This commit is contained in:
parent
14087a3c6c
commit
d05f74b286
|
@ -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)
|
||||
|
|
|
@ -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"))
|
||||
|
||||
|
||||
|
|
|
@ -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">
|
||||
|
|
Loading…
Reference in a new issue