ImportGroup: Add platform selection when importing games.
If we are importing multiple games, default to importing the native platform if the game supports it, otherwise fallback to the Windows platform
This commit is contained in:
parent
c9264c732e
commit
dfa60aa99f
|
@ -72,8 +72,10 @@ class ImportWorker(QRunnable):
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
core: LegendaryCore, path: str,
|
core: LegendaryCore,
|
||||||
|
path: str,
|
||||||
app_name: str = None,
|
app_name: str = None,
|
||||||
|
platform: Optional[str] = None,
|
||||||
import_folder: bool = False,
|
import_folder: bool = False,
|
||||||
import_dlcs: bool = False,
|
import_dlcs: bool = False,
|
||||||
import_force: bool = False
|
import_force: bool = False
|
||||||
|
@ -86,6 +88,7 @@ class ImportWorker(QRunnable):
|
||||||
self.path = Path(path)
|
self.path = Path(path)
|
||||||
self.app_name = app_name
|
self.app_name = app_name
|
||||||
self.import_folder = import_folder
|
self.import_folder = import_folder
|
||||||
|
self.platform = platform if platform is not None else self.core.default_platform
|
||||||
self.import_dlcs = import_dlcs
|
self.import_dlcs = import_dlcs
|
||||||
self.import_force = import_force
|
self.import_force = import_force
|
||||||
|
|
||||||
|
@ -110,9 +113,13 @@ class ImportWorker(QRunnable):
|
||||||
result = ImportedGame(ImportResult.ERROR)
|
result = ImportedGame(ImportResult.ERROR)
|
||||||
result.path = str(path)
|
result.path = str(path)
|
||||||
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)):
|
||||||
|
game = self.core.get_game(app_name)
|
||||||
result.app_name = app_name
|
result.app_name = app_name
|
||||||
result.app_title = self.core.get_game(app_name).app_title
|
result.app_title = game.app_title
|
||||||
success, message = self.__import_game(path, app_name)
|
platform = self.platform
|
||||||
|
if platform not in self.core.get_game(app_name, update_meta=False).asset_infos:
|
||||||
|
platform = "Windows"
|
||||||
|
success, message = self.__import_game(path, app_name, platform)
|
||||||
if not success:
|
if not success:
|
||||||
result.result = ImportResult.FAILED
|
result.result = ImportResult.FAILED
|
||||||
result.message = message
|
result.message = message
|
||||||
|
@ -120,14 +127,9 @@ class ImportWorker(QRunnable):
|
||||||
result.result = ImportResult.SUCCESS
|
result.result = ImportResult.SUCCESS
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def __import_game(self, path: Path, app_name: str):
|
def __import_game(self, path: Path, app_name: str, platform: str):
|
||||||
cli = LegendaryCLI(self.core)
|
cli = LegendaryCLI(self.core)
|
||||||
status = LgndrIndirectStatus()
|
status = LgndrIndirectStatus()
|
||||||
# FIXME: Add override option in import form
|
|
||||||
platform = self.core.default_platform
|
|
||||||
if platform not in self.core.get_game(app_name, update_meta=False).asset_infos:
|
|
||||||
platform = "Windows"
|
|
||||||
|
|
||||||
args = LgndrImportGameArgs(
|
args = LgndrImportGameArgs(
|
||||||
app_path=str(path),
|
app_path=str(path),
|
||||||
app_name=app_name,
|
app_name=app_name,
|
||||||
|
@ -212,6 +214,7 @@ class ImportGroup(QGroupBox):
|
||||||
self.app_name_edit = IndicatorLineEdit(
|
self.app_name_edit = IndicatorLineEdit(
|
||||||
placeholder=self.tr("Use in case the app name was not found automatically"),
|
placeholder=self.tr("Use in case the app name was not found automatically"),
|
||||||
edit_func=self.app_name_edit_callback,
|
edit_func=self.app_name_edit_callback,
|
||||||
|
save_func=self.app_name_save_callback,
|
||||||
parent=self,
|
parent=self,
|
||||||
)
|
)
|
||||||
self.app_name_edit.textChanged.connect(self.app_name_changed)
|
self.app_name_edit.textChanged.connect(self.app_name_changed)
|
||||||
|
@ -287,6 +290,12 @@ class ImportGroup(QGroupBox):
|
||||||
else:
|
else:
|
||||||
return False, text, IndicatorReasonsCommon.NOT_INSTALLED
|
return False, text, IndicatorReasonsCommon.NOT_INSTALLED
|
||||||
|
|
||||||
|
def app_name_save_callback(self, text) -> None:
|
||||||
|
rgame = self.rcore.get_game(text)
|
||||||
|
self.ui.platform_combo.clear()
|
||||||
|
self.ui.platform_combo.addItems(rgame.platforms)
|
||||||
|
self.ui.platform_combo.setCurrentText(rgame.default_platform)
|
||||||
|
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
def app_name_changed(self, app_name: str):
|
def app_name_changed(self, app_name: str):
|
||||||
self.info_label.setText("")
|
self.info_label.setText("")
|
||||||
|
@ -302,6 +311,14 @@ class ImportGroup(QGroupBox):
|
||||||
@pyqtSlot(int)
|
@pyqtSlot(int)
|
||||||
def import_folder_changed(self, state: Qt.CheckState):
|
def import_folder_changed(self, state: Qt.CheckState):
|
||||||
self.app_name_edit.setEnabled(not state)
|
self.app_name_edit.setEnabled(not state)
|
||||||
|
self.ui.platform_combo.setEnabled(not state)
|
||||||
|
self.ui.platform_combo.setToolTip(
|
||||||
|
self.tr(
|
||||||
|
"When importing multiple games, the current OS will be used at the"
|
||||||
|
" platform for the games that support it, otherwise the Windows version"
|
||||||
|
" will be imported."
|
||||||
|
) if state else ""
|
||||||
|
)
|
||||||
self.ui.import_dlcs_check.setCheckState(Qt.Unchecked)
|
self.ui.import_dlcs_check.setCheckState(Qt.Unchecked)
|
||||||
self.ui.import_force_check.setCheckState(Qt.Unchecked)
|
self.ui.import_force_check.setCheckState(Qt.Unchecked)
|
||||||
self.ui.import_dlcs_check.setEnabled(
|
self.ui.import_dlcs_check.setEnabled(
|
||||||
|
@ -330,10 +347,11 @@ class ImportGroup(QGroupBox):
|
||||||
self.worker = ImportWorker(
|
self.worker = ImportWorker(
|
||||||
self.core,
|
self.core,
|
||||||
path,
|
path,
|
||||||
self.app_name_edit.text(),
|
app_name=self.app_name_edit.text(),
|
||||||
self.ui.import_folder_check.isChecked(),
|
platform=self.ui.platform_combo.currentText() if not self.ui.import_folder_check.isChecked() else None,
|
||||||
self.ui.import_dlcs_check.isChecked(),
|
import_folder=self.ui.import_folder_check.isChecked(),
|
||||||
self.ui.import_force_check.isChecked()
|
import_dlcs=self.ui.import_dlcs_check.isChecked(),
|
||||||
|
import_force=self.ui.import_force_check.isChecked()
|
||||||
)
|
)
|
||||||
self.worker.signals.progress.connect(self.__on_import_progress)
|
self.worker.signals.progress.connect(self.__on_import_progress)
|
||||||
self.worker.signals.result.connect(self.__on_import_result)
|
self.worker.signals.result.connect(self.__on_import_result)
|
||||||
|
|
|
@ -14,7 +14,7 @@ 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(506, 184)
|
ImportGroup.resize(651, 218)
|
||||||
ImportGroup.setWindowTitle("ImportGroup")
|
ImportGroup.setWindowTitle("ImportGroup")
|
||||||
ImportGroup.setWindowFilePath("")
|
ImportGroup.setWindowFilePath("")
|
||||||
self.import_layout = QtWidgets.QFormLayout(ImportGroup)
|
self.import_layout = QtWidgets.QFormLayout(ImportGroup)
|
||||||
|
@ -28,26 +28,35 @@ class Ui_ImportGroup(object):
|
||||||
self.import_layout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.app_name_label)
|
self.import_layout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.app_name_label)
|
||||||
self.import_folder_label = QtWidgets.QLabel(ImportGroup)
|
self.import_folder_label = QtWidgets.QLabel(ImportGroup)
|
||||||
self.import_folder_label.setObjectName("import_folder_label")
|
self.import_folder_label.setObjectName("import_folder_label")
|
||||||
self.import_layout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.import_folder_label)
|
self.import_layout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.import_folder_label)
|
||||||
self.import_folder_check = QtWidgets.QCheckBox(ImportGroup)
|
self.import_folder_check = QtWidgets.QCheckBox(ImportGroup)
|
||||||
font = QtGui.QFont()
|
font = QtGui.QFont()
|
||||||
font.setItalic(True)
|
font.setItalic(True)
|
||||||
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.import_layout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.import_folder_check)
|
self.import_layout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.import_folder_check)
|
||||||
self.import_dlcs_label = QtWidgets.QLabel(ImportGroup)
|
self.import_dlcs_label = QtWidgets.QLabel(ImportGroup)
|
||||||
self.import_dlcs_label.setObjectName("import_dlcs_label")
|
self.import_dlcs_label.setObjectName("import_dlcs_label")
|
||||||
self.import_layout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.import_dlcs_label)
|
self.import_layout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.import_dlcs_label)
|
||||||
self.import_dlcs_check = QtWidgets.QCheckBox(ImportGroup)
|
self.import_dlcs_check = QtWidgets.QCheckBox(ImportGroup)
|
||||||
font = QtGui.QFont()
|
font = QtGui.QFont()
|
||||||
font.setItalic(True)
|
font.setItalic(True)
|
||||||
self.import_dlcs_check.setFont(font)
|
self.import_dlcs_check.setFont(font)
|
||||||
self.import_dlcs_check.setObjectName("import_dlcs_check")
|
self.import_dlcs_check.setObjectName("import_dlcs_check")
|
||||||
self.import_layout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.import_dlcs_check)
|
self.import_layout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.import_dlcs_check)
|
||||||
|
self.import_force_label = QtWidgets.QLabel(ImportGroup)
|
||||||
|
self.import_force_label.setObjectName("import_force_label")
|
||||||
|
self.import_layout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.import_force_label)
|
||||||
|
self.import_force_check = QtWidgets.QCheckBox(ImportGroup)
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setItalic(True)
|
||||||
|
self.import_force_check.setFont(font)
|
||||||
|
self.import_force_check.setObjectName("import_force_check")
|
||||||
|
self.import_layout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.import_force_check)
|
||||||
self.import_button_label = QtWidgets.QLabel(ImportGroup)
|
self.import_button_label = QtWidgets.QLabel(ImportGroup)
|
||||||
self.import_button_label.setText("Error")
|
self.import_button_label.setText("Error")
|
||||||
self.import_button_label.setObjectName("import_button_label")
|
self.import_button_label.setObjectName("import_button_label")
|
||||||
self.import_layout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.import_button_label)
|
self.import_layout.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.import_button_label)
|
||||||
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)
|
||||||
|
@ -58,16 +67,27 @@ class Ui_ImportGroup(object):
|
||||||
self.import_button.setSizePolicy(sizePolicy)
|
self.import_button.setSizePolicy(sizePolicy)
|
||||||
self.import_button.setObjectName("import_button")
|
self.import_button.setObjectName("import_button")
|
||||||
self.button_info_layout.addWidget(self.import_button)
|
self.button_info_layout.addWidget(self.import_button)
|
||||||
self.import_layout.setLayout(5, QtWidgets.QFormLayout.FieldRole, self.button_info_layout)
|
self.import_layout.setLayout(6, QtWidgets.QFormLayout.FieldRole, self.button_info_layout)
|
||||||
self.import_force_label = QtWidgets.QLabel(ImportGroup)
|
self.platform_label = QtWidgets.QLabel(ImportGroup)
|
||||||
self.import_force_label.setObjectName("import_force_label")
|
self.platform_label.setObjectName("platform_label")
|
||||||
self.import_layout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.import_force_label)
|
self.import_layout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.platform_label)
|
||||||
self.import_force_check = QtWidgets.QCheckBox(ImportGroup)
|
self.platform_layout = QtWidgets.QHBoxLayout()
|
||||||
|
self.platform_layout.setObjectName("platform_layout")
|
||||||
|
self.platform_combo = QtWidgets.QComboBox(ImportGroup)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.platform_combo.sizePolicy().hasHeightForWidth())
|
||||||
|
self.platform_combo.setSizePolicy(sizePolicy)
|
||||||
|
self.platform_combo.setObjectName("platform_combo")
|
||||||
|
self.platform_layout.addWidget(self.platform_combo)
|
||||||
|
self.platform_tooltip = QtWidgets.QLabel(ImportGroup)
|
||||||
font = QtGui.QFont()
|
font = QtGui.QFont()
|
||||||
font.setItalic(True)
|
font.setItalic(True)
|
||||||
self.import_force_check.setFont(font)
|
self.platform_tooltip.setFont(font)
|
||||||
self.import_force_check.setObjectName("import_force_check")
|
self.platform_tooltip.setObjectName("platform_tooltip")
|
||||||
self.import_layout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.import_force_check)
|
self.platform_layout.addWidget(self.platform_tooltip)
|
||||||
|
self.import_layout.setLayout(2, QtWidgets.QFormLayout.FieldRole, self.platform_layout)
|
||||||
|
|
||||||
self.retranslateUi(ImportGroup)
|
self.retranslateUi(ImportGroup)
|
||||||
|
|
||||||
|
@ -80,9 +100,11 @@ class Ui_ImportGroup(object):
|
||||||
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_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_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_force_label.setText(_translate("ImportGroup", "Force import"))
|
self.import_force_label.setText(_translate("ImportGroup", "Force import"))
|
||||||
self.import_force_check.setText(_translate("ImportGroup", "Import game despite missing files"))
|
self.import_force_check.setText(_translate("ImportGroup", "Import game despite missing files"))
|
||||||
|
self.import_button.setText(_translate("ImportGroup", "Import Game"))
|
||||||
|
self.platform_label.setText(_translate("ImportGroup", "Platform"))
|
||||||
|
self.platform_tooltip.setText(_translate("ImportGroup", "Select the native platform of the game"))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>506</width>
|
<width>651</width>
|
||||||
<height>184</height>
|
<height>218</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
|
@ -37,14 +37,14 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
<item row="3" column="0">
|
||||||
<widget class="QLabel" name="import_folder_label">
|
<widget class="QLabel" name="import_folder_label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Import all folders</string>
|
<string>Import all folders</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="1">
|
<item row="3" column="1">
|
||||||
<widget class="QCheckBox" name="import_folder_check">
|
<widget class="QCheckBox" name="import_folder_check">
|
||||||
<property name="font">
|
<property name="font">
|
||||||
<font>
|
<font>
|
||||||
|
@ -56,14 +56,14 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0">
|
<item row="4" column="0">
|
||||||
<widget class="QLabel" name="import_dlcs_label">
|
<widget class="QLabel" name="import_dlcs_label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Import DLCs</string>
|
<string>Import DLCs</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="1">
|
<item row="4" column="1">
|
||||||
<widget class="QCheckBox" name="import_dlcs_check">
|
<widget class="QCheckBox" name="import_dlcs_check">
|
||||||
<property name="font">
|
<property name="font">
|
||||||
<font>
|
<font>
|
||||||
|
@ -76,13 +76,32 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0">
|
<item row="5" column="0">
|
||||||
|
<widget class="QLabel" name="import_force_label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Force import</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1">
|
||||||
|
<widget class="QCheckBox" name="import_force_check">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<italic>true</italic>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Import game despite missing files</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0">
|
||||||
<widget class="QLabel" name="import_button_label">
|
<widget class="QLabel" name="import_button_label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string notr="true">Error</string>
|
<string notr="true">Error</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="1">
|
<item row="6" 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">
|
||||||
|
@ -99,26 +118,40 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="import_force_label">
|
<widget class="QLabel" name="platform_label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Force import</string>
|
<string>Platform</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="1">
|
<item row="2" column="1">
|
||||||
<widget class="QCheckBox" name="import_force_check">
|
<layout class="QHBoxLayout" name="platform_layout">
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="platform_combo">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="platform_tooltip">
|
||||||
<property name="font">
|
<property name="font">
|
||||||
<font>
|
<font>
|
||||||
<italic>true</italic>
|
<italic>true</italic>
|
||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Import game despite missing files</string>
|
<string>Select the native platform of the game</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
||||||
|
|
Loading…
Reference in a new issue