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__(
|
||||
self,
|
||||
core: LegendaryCore, path: str,
|
||||
core: LegendaryCore,
|
||||
path: str,
|
||||
app_name: str = None,
|
||||
platform: Optional[str] = None,
|
||||
import_folder: bool = False,
|
||||
import_dlcs: bool = False,
|
||||
import_force: bool = False
|
||||
|
@ -86,6 +88,7 @@ class ImportWorker(QRunnable):
|
|||
self.path = Path(path)
|
||||
self.app_name = app_name
|
||||
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_force = import_force
|
||||
|
||||
|
@ -110,9 +113,13 @@ class ImportWorker(QRunnable):
|
|||
result = ImportedGame(ImportResult.ERROR)
|
||||
result.path = str(path)
|
||||
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_title = self.core.get_game(app_name).app_title
|
||||
success, message = self.__import_game(path, app_name)
|
||||
result.app_title = game.app_title
|
||||
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:
|
||||
result.result = ImportResult.FAILED
|
||||
result.message = message
|
||||
|
@ -120,14 +127,9 @@ class ImportWorker(QRunnable):
|
|||
result.result = ImportResult.SUCCESS
|
||||
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)
|
||||
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(
|
||||
app_path=str(path),
|
||||
app_name=app_name,
|
||||
|
@ -212,6 +214,7 @@ class ImportGroup(QGroupBox):
|
|||
self.app_name_edit = IndicatorLineEdit(
|
||||
placeholder=self.tr("Use in case the app name was not found automatically"),
|
||||
edit_func=self.app_name_edit_callback,
|
||||
save_func=self.app_name_save_callback,
|
||||
parent=self,
|
||||
)
|
||||
self.app_name_edit.textChanged.connect(self.app_name_changed)
|
||||
|
@ -287,6 +290,12 @@ class ImportGroup(QGroupBox):
|
|||
else:
|
||||
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)
|
||||
def app_name_changed(self, app_name: str):
|
||||
self.info_label.setText("")
|
||||
|
@ -302,6 +311,14 @@ class ImportGroup(QGroupBox):
|
|||
@pyqtSlot(int)
|
||||
def import_folder_changed(self, state: Qt.CheckState):
|
||||
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_force_check.setCheckState(Qt.Unchecked)
|
||||
self.ui.import_dlcs_check.setEnabled(
|
||||
|
@ -330,10 +347,11 @@ class ImportGroup(QGroupBox):
|
|||
self.worker = ImportWorker(
|
||||
self.core,
|
||||
path,
|
||||
self.app_name_edit.text(),
|
||||
self.ui.import_folder_check.isChecked(),
|
||||
self.ui.import_dlcs_check.isChecked(),
|
||||
self.ui.import_force_check.isChecked()
|
||||
app_name=self.app_name_edit.text(),
|
||||
platform=self.ui.platform_combo.currentText() if not self.ui.import_folder_check.isChecked() else None,
|
||||
import_folder=self.ui.import_folder_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.result.connect(self.__on_import_result)
|
||||
|
|
|
@ -14,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
|||
class Ui_ImportGroup(object):
|
||||
def setupUi(self, ImportGroup):
|
||||
ImportGroup.setObjectName("ImportGroup")
|
||||
ImportGroup.resize(506, 184)
|
||||
ImportGroup.resize(651, 218)
|
||||
ImportGroup.setWindowTitle("ImportGroup")
|
||||
ImportGroup.setWindowFilePath("")
|
||||
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_folder_label = QtWidgets.QLabel(ImportGroup)
|
||||
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)
|
||||
font = QtGui.QFont()
|
||||
font.setItalic(True)
|
||||
self.import_folder_check.setFont(font)
|
||||
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.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)
|
||||
font = QtGui.QFont()
|
||||
font.setItalic(True)
|
||||
self.import_dlcs_check.setFont(font)
|
||||
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.setText("Error")
|
||||
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.setObjectName("button_info_layout")
|
||||
self.import_button = QtWidgets.QPushButton(ImportGroup)
|
||||
|
@ -58,16 +67,27 @@ class Ui_ImportGroup(object):
|
|||
self.import_button.setSizePolicy(sizePolicy)
|
||||
self.import_button.setObjectName("import_button")
|
||||
self.button_info_layout.addWidget(self.import_button)
|
||||
self.import_layout.setLayout(5, QtWidgets.QFormLayout.FieldRole, self.button_info_layout)
|
||||
self.import_force_label = QtWidgets.QLabel(ImportGroup)
|
||||
self.import_force_label.setObjectName("import_force_label")
|
||||
self.import_layout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.import_force_label)
|
||||
self.import_force_check = QtWidgets.QCheckBox(ImportGroup)
|
||||
self.import_layout.setLayout(6, QtWidgets.QFormLayout.FieldRole, self.button_info_layout)
|
||||
self.platform_label = QtWidgets.QLabel(ImportGroup)
|
||||
self.platform_label.setObjectName("platform_label")
|
||||
self.import_layout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.platform_label)
|
||||
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.setItalic(True)
|
||||
self.import_force_check.setFont(font)
|
||||
self.import_force_check.setObjectName("import_force_check")
|
||||
self.import_layout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.import_force_check)
|
||||
self.platform_tooltip.setFont(font)
|
||||
self.platform_tooltip.setObjectName("platform_tooltip")
|
||||
self.platform_layout.addWidget(self.platform_tooltip)
|
||||
self.import_layout.setLayout(2, QtWidgets.QFormLayout.FieldRole, self.platform_layout)
|
||||
|
||||
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_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_force_label.setText(_translate("ImportGroup", "Force import"))
|
||||
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__":
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>506</width>
|
||||
<height>184</height>
|
||||
<width>651</width>
|
||||
<height>218</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -37,14 +37,14 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="import_folder_label">
|
||||
<property name="text">
|
||||
<string>Import all folders</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<item row="3" column="1">
|
||||
<widget class="QCheckBox" name="import_folder_check">
|
||||
<property name="font">
|
||||
<font>
|
||||
|
@ -56,14 +56,14 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<item row="4" 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="4" column="1">
|
||||
<widget class="QCheckBox" name="import_dlcs_check">
|
||||
<property name="font">
|
||||
<font>
|
||||
|
@ -76,13 +76,32 @@
|
|||
</widget>
|
||||
</item>
|
||||
<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">
|
||||
<property name="text">
|
||||
<string notr="true">Error</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<item row="6" column="1">
|
||||
<layout class="QHBoxLayout" name="button_info_layout">
|
||||
<item>
|
||||
<widget class="QPushButton" name="import_button">
|
||||
|
@ -99,24 +118,38 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="import_force_label">
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="platform_label">
|
||||
<property name="text">
|
||||
<string>Force import</string>
|
||||
<string>Platform</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" 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 row="2" column="1">
|
||||
<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">
|
||||
<font>
|
||||
<italic>true</italic>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Select the native platform of the game</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
|
Loading…
Reference in a new issue