1
0
Fork 0
mirror of synced 2024-05-18 19:42:54 +12:00

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:
loathingKernel 2023-12-17 01:20:07 +02:00
parent c9264c732e
commit dfa60aa99f
No known key found for this signature in database
GPG key ID: CE0C72D0B53821FD
3 changed files with 122 additions and 49 deletions

View file

@ -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)

View file

@ -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__":

View file

@ -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>