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.lgndr.api_exception import LgndrException
|
||||||
from rare.shared import LegendaryCLISingleton, LegendaryCoreSingleton, GlobalSignalsSingleton, ApiResultsSingleton
|
from rare.shared import LegendaryCLISingleton, LegendaryCoreSingleton, GlobalSignalsSingleton, ApiResultsSingleton
|
||||||
from rare.ui.components.tabs.games.import_sync.import_group import Ui_ImportGroup
|
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
|
from rare.utils.extra_widgets import IndicatorLineEdit, PathEdit
|
||||||
|
|
||||||
logger = getLogger("Import")
|
logger = getLogger("Import")
|
||||||
|
@ -56,15 +55,17 @@ class ImportWorker(QRunnable):
|
||||||
finished = pyqtSignal(list)
|
finished = pyqtSignal(list)
|
||||||
progress = pyqtSignal(int)
|
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__()
|
super(ImportWorker, self).__init__()
|
||||||
self.signals = self.Signals()
|
self.signals = self.Signals()
|
||||||
self.core = LegendaryCoreSingleton()
|
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.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:
|
def run(self) -> None:
|
||||||
result_list: List = []
|
result_list: List = []
|
||||||
if self.import_folder:
|
if self.import_folder:
|
||||||
|
@ -85,8 +86,8 @@ class ImportWorker(QRunnable):
|
||||||
result = ImportedGame(ImportResult.ERROR, None, None)
|
result = ImportedGame(ImportResult.ERROR, None, None)
|
||||||
if app_name or (app_name := find_app_name(str(path), self.core)):
|
if app_name or (app_name := find_app_name(str(path), self.core)):
|
||||||
result.app_name = app_name
|
result.app_name = app_name
|
||||||
err = self.__import_game(app_name, path)
|
|
||||||
app_title = self.core.get_game(app_name).app_title
|
app_title = self.core.get_game(app_name).app_title
|
||||||
|
err = self.__import_game(path, app_name, app_title)
|
||||||
if err:
|
if err:
|
||||||
result.result = ImportResult.FAILED
|
result.result = ImportResult.FAILED
|
||||||
result.message = f"{app_title} - {err}"
|
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))
|
result.message = self.tr("Could not find AppName for {}").format(str(path))
|
||||||
return result
|
return result
|
||||||
|
|
||||||
# def __import_game(self, app_name: str, path: Path) -> str:
|
def __import_game(self, path: Path, app_name: str, app_title: 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):
|
|
||||||
cli = LegendaryCLISingleton()
|
cli = LegendaryCLISingleton()
|
||||||
args = LgndrImportGameArgs(
|
args = LgndrImportGameArgs(
|
||||||
app_path=str(path),
|
app_path=str(path),
|
||||||
app_name=app_name,
|
app_name=app_name,
|
||||||
get_boolean_choice=self.get_boolean_choice
|
get_boolean_choice=lambda a0: self.import_dlcs
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
cli.import_game(args)
|
cli.import_game(args)
|
||||||
|
@ -202,17 +191,13 @@ class ImportGroup(QGroupBox):
|
||||||
self.app_name_edit.textChanged.connect(self.app_name_changed)
|
self.app_name_edit.textChanged.connect(self.app_name_changed)
|
||||||
self.ui.app_name_layout.addWidget(self.app_name_edit)
|
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.setEnabled(False)
|
||||||
self.ui.import_button.clicked.connect(
|
self.ui.import_button.clicked.connect(
|
||||||
lambda: self.import_pressed(self.path_edit.text())
|
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()
|
self.threadpool = QThreadPool.globalInstance()
|
||||||
|
|
||||||
def path_edit_cb(self, path) -> Tuple[bool, str, str]:
|
def path_edit_cb(self, path) -> Tuple[bool, str, str]:
|
||||||
|
@ -227,7 +212,7 @@ class ImportGroup(QGroupBox):
|
||||||
|
|
||||||
def path_changed(self, path):
|
def path_changed(self, path):
|
||||||
self.ui.info_label.setText("")
|
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:
|
if self.path_edit.is_valid:
|
||||||
self.app_name_edit.setText(find_app_name(path, self.core))
|
self.app_name_edit.setText(find_app_name(path, self.core))
|
||||||
else:
|
else:
|
||||||
|
@ -241,17 +226,36 @@ class ImportGroup(QGroupBox):
|
||||||
else:
|
else:
|
||||||
return False, text, IndicatorLineEdit.reasons.game_not_installed
|
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.info_label.setText("")
|
||||||
|
self.ui.import_dlcs_check.setCheckState(Qt.Unchecked)
|
||||||
if self.app_name_edit.is_valid:
|
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)
|
self.ui.import_button.setEnabled(True)
|
||||||
else:
|
else:
|
||||||
|
self.ui.import_dlcs_check.setEnabled(False)
|
||||||
self.ui.import_button.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):
|
def import_pressed(self, path=None):
|
||||||
if not path:
|
if not path:
|
||||||
path = self.path_edit.text()
|
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.finished.connect(self.import_finished)
|
||||||
worker.signals.progress.connect(self.import_progress)
|
worker.signals.progress.connect(self.import_progress)
|
||||||
self.threadpool.start(worker)
|
self.threadpool.start(worker)
|
||||||
|
|
|
@ -14,10 +14,11 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
class Ui_ImportGroup(object):
|
class Ui_ImportGroup(object):
|
||||||
def setupUi(self, ImportGroup):
|
def setupUi(self, ImportGroup):
|
||||||
ImportGroup.setObjectName("ImportGroup")
|
ImportGroup.setObjectName("ImportGroup")
|
||||||
ImportGroup.resize(501, 136)
|
ImportGroup.resize(501, 162)
|
||||||
ImportGroup.setWindowTitle("ImportGroup")
|
ImportGroup.setWindowTitle("ImportGroup")
|
||||||
ImportGroup.setWindowFilePath("")
|
ImportGroup.setWindowFilePath("")
|
||||||
self.formLayout = QtWidgets.QFormLayout(ImportGroup)
|
self.formLayout = QtWidgets.QFormLayout(ImportGroup)
|
||||||
|
self.formLayout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
|
||||||
self.formLayout.setObjectName("formLayout")
|
self.formLayout.setObjectName("formLayout")
|
||||||
self.path_edit_label = QtWidgets.QLabel(ImportGroup)
|
self.path_edit_label = QtWidgets.QLabel(ImportGroup)
|
||||||
self.path_edit_label.setObjectName("path_edit_label")
|
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.setFont(font)
|
||||||
self.import_folder_check.setObjectName("import_folder_check")
|
self.import_folder_check.setObjectName("import_folder_check")
|
||||||
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.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 = QtWidgets.QHBoxLayout()
|
||||||
self.button_info_layout.setObjectName("button_info_layout")
|
self.button_info_layout.setObjectName("button_info_layout")
|
||||||
self.import_button = QtWidgets.QPushButton(ImportGroup)
|
self.import_button = QtWidgets.QPushButton(ImportGroup)
|
||||||
|
@ -54,7 +64,7 @@ class Ui_ImportGroup(object):
|
||||||
self.info_label.setText("")
|
self.info_label.setText("")
|
||||||
self.info_label.setObjectName("info_label")
|
self.info_label.setObjectName("info_label")
|
||||||
self.button_info_layout.addWidget(self.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)
|
self.retranslateUi(ImportGroup)
|
||||||
QtCore.QMetaObject.connectSlotsByName(ImportGroup)
|
QtCore.QMetaObject.connectSlotsByName(ImportGroup)
|
||||||
|
@ -66,6 +76,8 @@ class Ui_ImportGroup(object):
|
||||||
self.app_name_label.setText(_translate("ImportGroup", "Override app name"))
|
self.app_name_label.setText(_translate("ImportGroup", "Override app name"))
|
||||||
self.import_folder_label.setText(_translate("ImportGroup", "Import all folders"))
|
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_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"))
|
self.import_button.setText(_translate("ImportGroup", "Import Game"))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>501</width>
|
<width>501</width>
|
||||||
<height>136</height>
|
<height>162</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
|
@ -20,6 +20,9 @@
|
||||||
<string>Import EGL game from a directory</string>
|
<string>Import EGL game from a directory</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QFormLayout" name="formLayout">
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
<property name="labelAlignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="path_edit_label">
|
<widget class="QLabel" name="path_edit_label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -59,7 +62,26 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</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">
|
<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">
|
<layout class="QHBoxLayout" name="button_info_layout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="import_button">
|
<widget class="QPushButton" name="import_button">
|
||||||
|
|
Loading…
Reference in a new issue