diff --git a/rare/components/dialogs/install_dialog.py b/rare/components/dialogs/install_dialog.py index 9da47805..6d4c3d13 100644 --- a/rare/components/dialogs/install_dialog.py +++ b/rare/components/dialogs/install_dialog.py @@ -1,19 +1,21 @@ import os from PyQt5.QtCore import QObject, QRunnable, QThreadPool, pyqtSignal, pyqtSlot -from PyQt5.QtWidgets import QDialog, QFileDialog +from PyQt5.QtWidgets import QDialog, QFileDialog, QCheckBox from custom_legendary.core import LegendaryCore +from custom_legendary.utils.selective_dl import games from rare.ui.components.dialogs.install_dialog import Ui_InstallDialog from rare.utils.extra_widgets import PathEdit +from rare.utils.models import InstallOptions from rare.utils.utils import get_size class InstallDialog(QDialog, Ui_InstallDialog): - infos = False + options = False - def __init__(self, app_name, core: LegendaryCore, update=False): - super(InstallDialog, self).__init__() + def __init__(self, app_name, core: LegendaryCore, update=False, parent=None): + super(InstallDialog, self).__init__(parent=parent) self.setupUi(self) self.core = core @@ -23,10 +25,9 @@ class InstallDialog(QDialog, Ui_InstallDialog): self.threadpool = QThreadPool.globalInstance() - header_text = self.tr("Update") if update else self.tr("Install") - self.install_dialog_label.setText("

{} \"{}\"

".format(header_text, self.game.app_title)) - # TODO: Get application name from QApplication instance - self.setWindowTitle("{} - {} \"{}\"".format("Rare", header_text, self.game.app_title)) + header = self.tr("Update") if update else self.tr("Install") + self.install_dialog_label.setText(f"

{header} \"{self.game.app_title}\"

") + self.setWindowTitle(f"{self.windowTitle()} - {header} \"{self.game.app_title}\"") if self.core.lgd.config.has_option("Legendary", "install_dir"): default_path = self.core.lgd.config.get("Legendary", "install_dir") @@ -35,14 +36,14 @@ class InstallDialog(QDialog, Ui_InstallDialog): if not default_path: default_path = os.path.expanduser("~/legendary") - self.install_dir_path = PathEdit(text=default_path, + self.install_dir_edit = PathEdit(text=default_path, file_type=QFileDialog.DirectoryOnly, edit_func=self.on_install_dir_text_changed) - self.install_dir_layout.addWidget(self.install_dir_path) + self.install_dir_layout.addWidget(self.install_dir_edit) if update: self.install_dir_label.setVisible(False) - self.install_dir_path.setVisible(False) + self.install_dir_edit.setVisible(False) if self.core.lgd.config.has_option("Legendary", "max_workers"): max_workers = self.core.lgd.config.get("Legendary", "max_workers") @@ -50,41 +51,70 @@ class InstallDialog(QDialog, Ui_InstallDialog): max_workers = 0 self.max_workers_spin.setValue(int(max_workers)) - self.get_install_info(app_name, default_path) + self.sdl_list_checks = list() + self.tags = list() + try: + for key, info in games[app_name].items(): + cb = QDataCheckBox(info['name'], info['tags']) + cb.stateChanged.connect(self.on_sdl_checkbox_changed) + if key == '__required': + self.tags.extend(info['tags']) + cb.setChecked(True) + cb.setDisabled(True) + self.sdl_list_layout.addWidget(cb) + self.sdl_list_checks.append(cb) + self.sdl_list_frame.resize(self.sdl_list_frame.minimumSize()) + except KeyError: + self.sdl_list_frame.setVisible(False) + self.sdl_list_label.setVisible(False) + + self.get_install_info(app_name, default_path, self.tags) self.install_button.clicked.connect(self.on_install_button_clicked) self.cancel_button.clicked.connect(self.on_cancel_button_clicked) - self.resize(self.minimumSizeHint()) + self.resize(self.minimumSize()) self.setFixedSize(self.size()) - def get_information(self, path=None): + def get_install_options(self, path=None): if path: - self.install_dir_path.setText(path) + self.install_dir_edit.setText(path) self.exec_() - return self.infos + return self.options - def get_install_info(self, app_name, default_path): - updating_text = self.tr("Updating...") - self.download_size_info_label.setText(updating_text) + def get_install_info(self, app_name, path, tags): + message = self.tr("Updating...") + self.download_size_info_label.setText(message) self.download_size_info_label.setStyleSheet("font-style: italic; font-weight: normal") - self.install_size_info_label.setText(updating_text) + self.install_size_info_label.setText(message) self.install_size_info_label.setStyleSheet("font-style: italic; font-weight: normal") self.install_button.setEnabled(False) - info_worker = InstallInfoWorker(app_name, default_path, self.core) + self.sdl_list_frame.setEnabled(False) + info_worker = InstallInfoWorker(app_name, path, tags, self.core) info_worker.setAutoDelete(True) info_worker.signals.finished.connect(self.on_worker_finished) self.threadpool.start(info_worker) + def on_sdl_checkbox_changed(self): + self.tags = list() + for cb in self.sdl_list_checks: + if data := cb.isChecked(): + self.tags.extend(data) + self.get_install_info(self.app_name, self.install_dir_edit.text(), self.tags) + def on_install_dir_text_changed(self, path: str): - self.get_install_info(self.app_name, path) + self.get_install_info(self.app_name, path, self.tags) def on_install_button_clicked(self): - self.infos = self.install_dir_path.text() if not self.update_game else None, \ - self.max_workers_spin.value(), \ - self.force_download_check.isChecked(), \ - self.ignore_space_check.isChecked(), \ - self.download_only_check.isChecked() + self.options = InstallOptions( + app_name=self.app_name, + path=self.install_dir_edit.text() if not self.update_game else None, + max_workers=self.max_workers_spin.value(), + force=self.force_download_check.isChecked(), + ignore_free_space=self.ignore_space_check.isChecked(), + download_only=self.download_only_check.isChecked(), + sdl_list=self.tags + ) self.threadpool.clear() self.close() @@ -94,11 +124,9 @@ class InstallDialog(QDialog, Ui_InstallDialog): def on_worker_finished(self, info: tuple): download_size, install_size = info - # TODO: Check available size and act accordingly # TODO: (show message in label | color it | disable install unless ignore) # TODO: Find a way to get the installation size delta and show it - if download_size is not None and install_size is not None: if download_size: self.download_size_info_label.setText("{}".format(get_size(download_size))) @@ -112,6 +140,7 @@ class InstallDialog(QDialog, Ui_InstallDialog): else: self.download_size_info_label.setText("Error") self.install_size_info_label.setText("Error") + self.sdl_list_frame.setEnabled(True) class InstallInfoWorkerSignals(QObject): @@ -120,12 +149,13 @@ class InstallInfoWorkerSignals(QObject): class InstallInfoWorker(QRunnable): - def __init__(self, app_name, path, core: LegendaryCore): + def __init__(self, app_name, path, tags, core: LegendaryCore): super(InstallInfoWorker, self).__init__() self.signals = InstallInfoWorkerSignals() self.core = core self.app_name = app_name self.path = path + self.tags = tags @pyqtSlot() def run(self): @@ -133,8 +163,23 @@ class InstallInfoWorker(QRunnable): dlm, analysis, game, igame, repair, repair_file = self.core.prepare_download( app_name=self.app_name, base_path=self.path, + sdl_prompt=lambda app_name, title: self.tags ) self.signals.finished.emit((analysis.dl_size, analysis.install_size)) except: self.signals.finished.emit((None, None)) return + + +class QDataCheckBox(QCheckBox): + + def __init__(self, text, data=None): + super(QDataCheckBox, self).__init__() + self.setText(text) + self.data = data + + def isChecked(self): + if super(QDataCheckBox, self).isChecked(): + return self.data + else: + return False diff --git a/rare/components/tab_widget.py b/rare/components/tab_widget.py index 5818536e..9c1da44c 100644 --- a/rare/components/tab_widget.py +++ b/rare/components/tab_widget.py @@ -97,12 +97,9 @@ class TabWidget(QTabWidget): def install_game(self, app_name, disable_path=False): - infos = InstallDialog(app_name, self.core, disable_path).get_information() - if infos: - path, max_workers, force, ignore_free_space, dl_only = infos - options = InstallOptions(app_name=app_name, max_workers=max_workers, path=path, force=force, - ignore_free_space=ignore_free_space, download_only=dl_only) - + options = InstallDialog(app_name, self.core, disable_path, parent=self).get_install_options() + if options: + self.setCurrentIndex(1) self.start_download(options) def start_download(self, options): diff --git a/rare/components/tabs/downloads/__init__.py b/rare/components/tabs/downloads/__init__.py index 78cf3fbc..3eaf7aae 100644 --- a/rare/components/tabs/downloads/__init__.py +++ b/rare/components/tabs/downloads/__init__.py @@ -29,6 +29,7 @@ class DownloadTab(QWidget): self.core = core self.layout = QVBoxLayout() self.active_game: Game = None + self.analysis = None self.info_layout = QGridLayout() @@ -85,7 +86,7 @@ class DownloadTab(QWidget): widget = UpdateWidget(self.core, igame, self) self.update_layout.addWidget(widget) self.update_widgets[igame.app_name] = widget - widget.update.connect(self.update_game) + widget.update_signal.connect(self.update_game) if QSettings().value("auto_update", False, bool): self.update_game(igame.app_name, True) widget.update_button.setDisabled(True) @@ -125,7 +126,8 @@ class DownloadTab(QWidget): # disable_delta=, # override_delta_manifest=, # reset_sdl=, - sdl_prompt=self.sdl_prompt) + sdl_prompt=lambda app_name, title: options.sdl_list + ) except Exception as e: QMessageBox.warning(self, self.tr("Error preparing download"), str(e)) @@ -153,44 +155,6 @@ class DownloadTab(QWidget): self.analysis = analysis self.installing_game.setText(self.tr("Installing Game: ") + self.active_game.app_title) - def sdl_prompt(self, app_name: str = '', title: str = '') -> list: - sdl = QDialog() - sdl.setWindowTitle('Select Additional Downloads') - - layout = QVBoxLayout(sdl) - sdl.setLayout(layout) - - pack_list = QListWidget() - layout.addWidget(pack_list) - - done = QPushButton(text='Done') - done.clicked.connect(sdl.accept) - layout.addWidget(done) - - tags = [''] - if '__required' in games[app_name]: - tags.extend(games[app_name]['__required']['tags']) - - # add available additional downloads to list - pack_list.addItems([tag + ': ' + info['name'] for tag, info in games[app_name].items() if tag != '__required']) - - # enable checkboxes - for i in range(len(pack_list)): - item = pack_list.item(i) - item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) - item.setCheckState(Qt.Unchecked) - - sdl.exec_() - - # read checkboxes states - for i in range(len(pack_list)): - item = pack_list.item(i) - if item.checkState() == Qt.Checked: - tag = item.text().split(':')[0] - tags.extend(games[app_name][tag]['tags']) - - return tags - def status(self, text): if text == "dl_finished": pass @@ -270,14 +234,12 @@ class DownloadTab(QWidget): def update_game(self, app_name: str, auto=False): logger.info("Update " + app_name) if not auto: - infos = InstallDialog(app_name, self.core, True).get_information() + options = InstallDialog(app_name, self.core, True).get_install_options() else: self.install_game(InstallOptions(app_name=app_name), True) return - if infos: - path, max_workers, force, ignore_free_space, dl_only = infos - self.install_game(InstallOptions(app_name=app_name, max_workers=max_workers, path=path, - force=force, ignore_free_space=ignore_free_space, download_only=dl_only), True) + if options: + self.install_game(options, True) else: self.update_widgets[app_name].update_button.setDisabled(False) self.update_widgets[app_name].update_with_settings.setDisabled(False) diff --git a/rare/ui/components/dialogs/install_dialog.py b/rare/ui/components/dialogs/install_dialog.py index e693ce8c..467d4f4c 100644 --- a/rare/ui/components/dialogs/install_dialog.py +++ b/rare/ui/components/dialogs/install_dialog.py @@ -14,106 +14,119 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_InstallDialog(object): def setupUi(self, InstallDialog): InstallDialog.setObjectName("InstallDialog") + InstallDialog.setWindowTitle("Rare") self.install_dialog_layout = QtWidgets.QGridLayout(InstallDialog) self.install_dialog_layout.setObjectName("install_dialog_layout") - self.ignore_space_label = QtWidgets.QLabel(InstallDialog) - self.ignore_space_label.setObjectName("ignore_space_label") - self.install_dialog_layout.addWidget(self.ignore_space_label, 4, 0, 1, 1, QtCore.Qt.AlignRight) - self.install_dialog_label = QtWidgets.QLabel(InstallDialog) - self.install_dialog_label.setObjectName("install_dialog_label") - self.install_dialog_layout.addWidget(self.install_dialog_label, 0, 0, 1, 3) - self.download_size_label = QtWidgets.QLabel(InstallDialog) - self.download_size_label.setObjectName("download_size_label") - self.install_dialog_layout.addWidget(self.download_size_label, 6, 0, 1, 1, QtCore.Qt.AlignRight) - self.install_size_info_label = QtWidgets.QLabel(InstallDialog) - self.install_size_info_label.setText("") - self.install_size_info_label.setObjectName("install_size_info_label") - self.install_dialog_layout.addWidget(self.install_size_info_label, 7, 1, 1, 2) - self.install_dir_label = QtWidgets.QLabel(InstallDialog) - self.install_dir_label.setObjectName("install_dir_label") - self.install_dialog_layout.addWidget(self.install_dir_label, 1, 0, 1, 1, QtCore.Qt.AlignRight) - spacerItem = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.install_dialog_layout.addItem(spacerItem, 3, 2, 1, 1) - self.ignore_space_info_label = QtWidgets.QLabel(InstallDialog) - font = QtGui.QFont() - font.setItalic(True) - self.ignore_space_info_label.setFont(font) - self.ignore_space_info_label.setObjectName("ignore_space_info_label") - self.install_dialog_layout.addWidget(self.ignore_space_info_label, 4, 2, 1, 1) - self.force_download_check = QtWidgets.QCheckBox(InstallDialog) - self.force_download_check.setObjectName("force_download_check") - self.install_dialog_layout.addWidget(self.force_download_check, 3, 1, 1, 1) self.force_download_label = QtWidgets.QLabel(InstallDialog) self.force_download_label.setObjectName("force_download_label") self.install_dialog_layout.addWidget(self.force_download_label, 3, 0, 1, 1, QtCore.Qt.AlignRight) self.button_layout = QtWidgets.QHBoxLayout() self.button_layout.setObjectName("button_layout") - spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.button_layout.addItem(spacerItem1) + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.button_layout.addItem(spacerItem) self.cancel_button = QtWidgets.QPushButton(InstallDialog) self.cancel_button.setObjectName("cancel_button") self.button_layout.addWidget(self.cancel_button) self.install_button = QtWidgets.QPushButton(InstallDialog) self.install_button.setObjectName("install_button") self.button_layout.addWidget(self.install_button) - self.install_dialog_layout.addLayout(self.button_layout, 8, 0, 1, 3) - self.max_workers_spin = QtWidgets.QSpinBox(InstallDialog) - self.max_workers_spin.setObjectName("max_workers_spin") - self.install_dialog_layout.addWidget(self.max_workers_spin, 2, 1, 1, 1) + self.install_dialog_layout.addLayout(self.button_layout, 9, 0, 1, 3) + self.ignore_space_info_label = QtWidgets.QLabel(InstallDialog) + font = QtGui.QFont() + font.setItalic(True) + self.ignore_space_info_label.setFont(font) + self.ignore_space_info_label.setObjectName("ignore_space_info_label") + self.install_dialog_layout.addWidget(self.ignore_space_info_label, 4, 2, 1, 1) + self.install_dir_label = QtWidgets.QLabel(InstallDialog) + self.install_dir_label.setObjectName("install_dir_label") + self.install_dialog_layout.addWidget(self.install_dir_label, 1, 0, 1, 1, QtCore.Qt.AlignRight) self.ignore_space_check = QtWidgets.QCheckBox(InstallDialog) self.ignore_space_check.setObjectName("ignore_space_check") self.install_dialog_layout.addWidget(self.ignore_space_check, 4, 1, 1, 1) - self.install_size_label = QtWidgets.QLabel(InstallDialog) - self.install_size_label.setObjectName("install_size_label") - self.install_dialog_layout.addWidget(self.install_size_label, 7, 0, 1, 1, QtCore.Qt.AlignRight) self.max_workers_info_label = QtWidgets.QLabel(InstallDialog) font = QtGui.QFont() font.setItalic(True) self.max_workers_info_label.setFont(font) self.max_workers_info_label.setObjectName("max_workers_info_label") self.install_dialog_layout.addWidget(self.max_workers_info_label, 2, 2, 1, 1) - self.install_dir_layout = QtWidgets.QHBoxLayout() - self.install_dir_layout.setObjectName("install_dir_layout") - self.install_dialog_layout.addLayout(self.install_dir_layout, 1, 1, 1, 2) - self.download_size_info_label = QtWidgets.QLabel(InstallDialog) - self.download_size_info_label.setText("") - self.download_size_info_label.setObjectName("download_size_info_label") - self.install_dialog_layout.addWidget(self.download_size_info_label, 6, 1, 1, 2) - self.max_workers_label = QtWidgets.QLabel(InstallDialog) - self.max_workers_label.setObjectName("max_workers_label") - self.install_dialog_layout.addWidget(self.max_workers_label, 2, 0, 1, 1, QtCore.Qt.AlignRight) - self.download_only_label = QtWidgets.QLabel(InstallDialog) - self.download_only_label.setObjectName("download_only_label") - self.install_dialog_layout.addWidget(self.download_only_label, 5, 0, 1, 1, QtCore.Qt.AlignRight) - self.download_only_check = QtWidgets.QCheckBox(InstallDialog) - self.download_only_check.setText("") - self.download_only_check.setObjectName("download_only_check") - self.install_dialog_layout.addWidget(self.download_only_check, 5, 1, 1, 1) + self.max_workers_spin = QtWidgets.QSpinBox(InstallDialog) + self.max_workers_spin.setObjectName("max_workers_spin") + self.install_dialog_layout.addWidget(self.max_workers_spin, 2, 1, 1, 1) self.download_only_info_label = QtWidgets.QLabel(InstallDialog) font = QtGui.QFont() font.setItalic(True) self.download_only_info_label.setFont(font) self.download_only_info_label.setObjectName("download_only_info_label") self.install_dialog_layout.addWidget(self.download_only_info_label, 5, 2, 1, 1) + self.install_size_label = QtWidgets.QLabel(InstallDialog) + self.install_size_label.setObjectName("install_size_label") + self.install_dialog_layout.addWidget(self.install_size_label, 8, 0, 1, 1, QtCore.Qt.AlignRight) + self.install_dir_layout = QtWidgets.QHBoxLayout() + self.install_dir_layout.setObjectName("install_dir_layout") + self.install_dialog_layout.addLayout(self.install_dir_layout, 1, 1, 1, 2) + spacerItem1 = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.install_dialog_layout.addItem(spacerItem1, 3, 2, 1, 1) + self.ignore_space_label = QtWidgets.QLabel(InstallDialog) + self.ignore_space_label.setObjectName("ignore_space_label") + self.install_dialog_layout.addWidget(self.ignore_space_label, 4, 0, 1, 1, QtCore.Qt.AlignRight) + self.download_only_label = QtWidgets.QLabel(InstallDialog) + self.download_only_label.setObjectName("download_only_label") + self.install_dialog_layout.addWidget(self.download_only_label, 5, 0, 1, 1, QtCore.Qt.AlignRight) + self.max_workers_label = QtWidgets.QLabel(InstallDialog) + self.max_workers_label.setObjectName("max_workers_label") + self.install_dialog_layout.addWidget(self.max_workers_label, 2, 0, 1, 1, QtCore.Qt.AlignRight) + self.install_size_info_label = QtWidgets.QLabel(InstallDialog) + self.install_size_info_label.setText("") + self.install_size_info_label.setObjectName("install_size_info_label") + self.install_dialog_layout.addWidget(self.install_size_info_label, 8, 1, 1, 2) + self.download_size_label = QtWidgets.QLabel(InstallDialog) + self.download_size_label.setObjectName("download_size_label") + self.install_dialog_layout.addWidget(self.download_size_label, 7, 0, 1, 1, QtCore.Qt.AlignRight) + self.download_size_info_label = QtWidgets.QLabel(InstallDialog) + self.download_size_info_label.setText("") + self.download_size_info_label.setObjectName("download_size_info_label") + self.install_dialog_layout.addWidget(self.download_size_info_label, 7, 1, 1, 2) + self.force_download_check = QtWidgets.QCheckBox(InstallDialog) + self.force_download_check.setObjectName("force_download_check") + self.install_dialog_layout.addWidget(self.force_download_check, 3, 1, 1, 1) + self.install_dialog_label = QtWidgets.QLabel(InstallDialog) + self.install_dialog_label.setObjectName("install_dialog_label") + self.install_dialog_layout.addWidget(self.install_dialog_label, 0, 0, 1, 3) + self.download_only_check = QtWidgets.QCheckBox(InstallDialog) + self.download_only_check.setText("") + self.download_only_check.setObjectName("download_only_check") + self.install_dialog_layout.addWidget(self.download_only_check, 5, 1, 1, 1) + self.sdl_list_frame = QtWidgets.QFrame(InstallDialog) + self.sdl_list_frame.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.sdl_list_frame.setFrameShadow(QtWidgets.QFrame.Raised) + self.sdl_list_frame.setObjectName("sdl_list_frame") + self.sdl_list_layout = QtWidgets.QVBoxLayout(self.sdl_list_frame) + self.sdl_list_layout.setSpacing(0) + self.sdl_list_layout.setObjectName("sdl_list_layout") + self.install_dialog_layout.addWidget(self.sdl_list_frame, 6, 1, 1, 2, QtCore.Qt.AlignTop) + self.sdl_list_label = QtWidgets.QLabel(InstallDialog) + self.sdl_list_label.setObjectName("sdl_list_label") + self.install_dialog_layout.addWidget(self.sdl_list_label, 6, 0, 1, 1, QtCore.Qt.AlignRight) self.retranslateUi(InstallDialog) QtCore.QMetaObject.connectSlotsByName(InstallDialog) def retranslateUi(self, InstallDialog): _translate = QtCore.QCoreApplication.translate - self.ignore_space_label.setText(_translate("InstallDialog", "Ignore free space")) - self.install_dialog_label.setText(_translate("InstallDialog", "error")) - self.download_size_label.setText(_translate("InstallDialog", "Download size")) - self.install_dir_label.setText(_translate("InstallDialog", "Install directory")) - self.ignore_space_info_label.setText(_translate("InstallDialog", "Use with caution!")) self.force_download_label.setText(_translate("InstallDialog", "Force download")) self.cancel_button.setText(_translate("InstallDialog", "Cancel")) self.install_button.setText(_translate("InstallDialog", "Install")) - self.install_size_label.setText(_translate("InstallDialog", "Total install size")) + self.ignore_space_info_label.setText(_translate("InstallDialog", "Use with caution!")) + self.install_dir_label.setText(_translate("InstallDialog", "Install directory")) self.max_workers_info_label.setText(_translate("InstallDialog", "Less is slower. (0: Default)")) - self.max_workers_label.setText(_translate("InstallDialog", "Max workers")) - self.download_only_label.setText(_translate("InstallDialog", "Download only")) self.download_only_info_label.setText(_translate("InstallDialog", "Do not try to install.")) + self.install_size_label.setText(_translate("InstallDialog", "Total install size")) + self.ignore_space_label.setText(_translate("InstallDialog", "Ignore free space")) + self.download_only_label.setText(_translate("InstallDialog", "Download only")) + self.max_workers_label.setText(_translate("InstallDialog", "Max workers")) + self.download_size_label.setText(_translate("InstallDialog", "Download size")) + self.install_dialog_label.setText(_translate("InstallDialog", "error")) + self.sdl_list_label.setText(_translate("InstallDialog", "Optional packs")) if __name__ == "__main__": diff --git a/rare/ui/components/dialogs/install_dialog.ui b/rare/ui/components/dialogs/install_dialog.ui index 576482dd..b8a26ba1 100644 --- a/rare/ui/components/dialogs/install_dialog.ui +++ b/rare/ui/components/dialogs/install_dialog.ui @@ -2,70 +2,10 @@ InstallDialog + + Rare + - - - - Ignore free space - - - - - - - error - - - - - - - Download size - - - - - - - - - - - - - - Install directory - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - - - - - true - - - - Use with caution! - - - - - - @@ -73,7 +13,7 @@ - + @@ -104,19 +44,28 @@ - - + + + + + true + + + + Use with caution! + + + + + + + Install directory + + - - - - Total install size - - - @@ -129,36 +78,8 @@ - - - - - - - - - - - - - - Max workers - - - - - - - Download only - - - - - - - - - + + @@ -172,6 +93,110 @@ + + + + Total install size + + + + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + Ignore free space + + + + + + + Download only + + + + + + + Max workers + + + + + + + + + + + + + + Download size + + + + + + + + + + + + + + + + + error + + + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + + + + + + Optional packs + + + diff --git a/rare/utils/models.py b/rare/utils/models.py index 503d0532..5cbf8af3 100644 --- a/rare/utils/models.py +++ b/rare/utils/models.py @@ -5,6 +5,7 @@ class InstallOptions: def __init__(self, app_name: str, path: str = os.path.expanduser("~/legendary"), max_workers: int = os.cpu_count() * 2, repair: bool = False, download_only: bool = False, ignore_free_space: bool = False, force: bool = False, + sdl_list: list = list() ): self.app_name = app_name self.path = path @@ -13,3 +14,4 @@ class InstallOptions: self.download_only = download_only self.ignore_free_space = ignore_free_space self.force = force + self.sdl_list = sdl_list