1
0
Fork 0
mirror of synced 2024-06-26 10:11:19 +12:00

Download settings update, More download options

This commit is contained in:
Dummerle 2021-04-05 11:53:33 +02:00
parent 836ec1f895
commit 54adc0cbea
5 changed files with 41 additions and 15 deletions

View file

@ -1,26 +1,41 @@
import os import os
from PyQt5.QtWidgets import QDialog, QFormLayout, QVBoxLayout, QSpinBox, QFileDialog, QLabel, QPushButton, QHBoxLayout from PyQt5.QtWidgets import QDialog, QFormLayout, QVBoxLayout, QSpinBox, QFileDialog, QLabel, QPushButton, QHBoxLayout, \
QCheckBox
from Rare.utils.QtExtensions import PathEdit from Rare.utils.QtExtensions import PathEdit
from custom_legendary.core import LegendaryCore
class InstallDialog(QDialog): class InstallDialog(QDialog):
infos = 0 infos = 0
def __init__(self): def __init__(self, app_name, core: LegendaryCore, update=False):
super(InstallDialog, self).__init__() super(InstallDialog, self).__init__()
self.layout = QVBoxLayout() self.layout = QVBoxLayout()
self.core = core
self.game = self.core.get_game(app_name)
self.form = QFormLayout() self.form = QFormLayout()
self.update_game = update
self.layout.addWidget(QLabel(self.tr("<h3>Install {}</h3>").format(self.game.app_title)))
default_path = os.path.expanduser("~/legendary") default_path = os.path.expanduser("~/legendary")
# TODO read from config # TODO read from config
self.install_path_field = PathEdit(text=default_path, type_of_file=QFileDialog.DirectoryOnly) if not update:
self.form.addRow(QLabel("Install directory"), self.install_path_field) self.install_path_field = PathEdit(text=default_path, type_of_file=QFileDialog.DirectoryOnly)
self.form.addRow(QLabel("Install directory"), self.install_path_field)
self.max_workes = QSpinBox() self.max_workes = QSpinBox()
self.form.addRow(QLabel(self.tr("Max workers (0: Default)")), self.max_workes) self.form.addRow(QLabel(self.tr("Max workers (0: Default)")), self.max_workes)
self.force = QCheckBox()
self.force.setChecked(False)
self.form.addRow(QLabel(self.tr("Force download")), self.force)
self.ignore_free_space = QCheckBox()
self.ignore_free_space.setChecked(False)
self.form.addRow(QLabel(self.tr("Ignore free space (Warning!)")), self.ignore_free_space)
self.layout.addLayout(self.form) self.layout.addLayout(self.form)
self.ok_btn = QPushButton("Next") self.ok_btn = QPushButton("Next")
@ -42,7 +57,7 @@ class InstallDialog(QDialog):
return self.infos return self.infos
def ok(self): def ok(self):
self.infos = self.install_path_field.text(), self.max_workes.value() self.infos = self.install_path_field.text() if not self.update_game else None, self.max_workes.value(), self.force.isChecked(), self.ignore_free_space.isChecked()
self.close() self.close()
@ -80,3 +95,4 @@ class InstallInfoDialog(QDialog):
def cancel(self): def cancel(self):
self.accept = False self.accept = False
self.close() self.close()

View file

@ -10,7 +10,7 @@ from PyQt5.QtCore import QThread, pyqtSignal, Qt
from PyQt5.QtWidgets import QWidget, QMessageBox, QVBoxLayout, QLabel, QGridLayout, QProgressBar, QPushButton, QDialog, \ from PyQt5.QtWidgets import QWidget, QMessageBox, QVBoxLayout, QLabel, QGridLayout, QProgressBar, QPushButton, QDialog, \
QListWidget, QHBoxLayout QListWidget, QHBoxLayout
from Rare.Components.Dialogs.InstallDialog import InstallInfoDialog from Rare.Components.Dialogs.InstallDialog import InstallInfoDialog, InstallDialog
from Rare.utils.Models import InstallOptions, KillDownloadException from Rare.utils.Models import InstallOptions, KillDownloadException
from custom_legendary.core import LegendaryCore from custom_legendary.core import LegendaryCore
from custom_legendary.downloader.manager import DLManager from custom_legendary.downloader.manager import DLManager
@ -193,7 +193,7 @@ class DownloadTab(QWidget):
dlm, analysis, game, igame, repair, repair_file = self.core.prepare_download( dlm, analysis, game, igame, repair, repair_file = self.core.prepare_download(
app_name=options.app_name, app_name=options.app_name,
base_path=options.path, base_path=options.path,
force=False, # TODO allow overwrite force=options.force,
no_install=options.download_only, no_install=options.download_only,
status_q=status_queue, status_q=status_queue,
# max_shm=, # max_shm=,
@ -211,7 +211,7 @@ class DownloadTab(QWidget):
# dl_timeout=, # dl_timeout=,
repair=options.repair, repair=options.repair,
# repair_use_latest=, # repair_use_latest=,
# ignore_space_req=, ignore_space_req=options.ignore_free_space,
# disable_delta=, # disable_delta=,
# override_delta_manifest=, # override_delta_manifest=,
# reset_sdl=, # reset_sdl=,
@ -229,6 +229,7 @@ class DownloadTab(QWidget):
return return
self.active_game = game self.active_game = game
self.installing_game_widget.setText(self.tr("Installing game: ")+self.active_game.app_title)
self.thread = DownloadThread(dlm, self.core, status_queue, igame, options.repair, repair_file) self.thread = DownloadThread(dlm, self.core, status_queue, igame, options.repair, repair_file)
self.thread.status.connect(self.status) self.thread.status.connect(self.status)
self.thread.statistics.connect(self.statistics) self.thread.statistics.connect(self.statistics)
@ -329,7 +330,11 @@ class DownloadTab(QWidget):
def update_game(self, app_name: str): def update_game(self, app_name: str):
print("Update ", app_name) print("Update ", app_name)
self.install_game(InstallOptions(app_name)) infos = InstallDialog(app_name, self.core, True).get_information()
if infos != 0:
path, max_workers, force, ignore_free_space = infos
self.install_game(InstallOptions(app_name=app_name, max_workers=max_workers, path=path,
force=force, ignore_free_space=ignore_free_space))
def repair(self): def repair(self):
pass pass
@ -343,7 +348,6 @@ class UpdateWidget(QWidget):
print(game) print(game)
self.core = core self.core = core
self.game = game self.game = game
print(self.game)
self.layout = QVBoxLayout() self.layout = QVBoxLayout()
self.title = QLabel(self.game.title) self.title = QLabel(self.game.title)

View file

@ -21,7 +21,7 @@ class BaseUninstalledWidget(QGroupBox):
self.setContentsMargins(0, 0, 0, 0) self.setContentsMargins(0, 0, 0, 0)
def install(self): def install(self):
infos = InstallDialog().get_information() infos = InstallDialog(self.game.app_name, self.core).get_information()
if infos != 0: if infos != 0:
path, max_workers = infos path, max_workers, force, ignore_free_space = infos
self.install_game.emit(InstallOptions(app_name=self.game.app_name, max_workers=max_workers, path=path)) self.install_game.emit(InstallOptions(app_name=self.game.app_name, max_workers=max_workers, path=path, force=force, ignore_free_space=ignore_free_space))

View file

@ -84,7 +84,12 @@ QLineEdit {
QCheckBox { QCheckBox {
color: #F0F0F0; color: #F0F0F0;
background-color: none;
} }
QCheckBox::indicator{
}
#list_widget { #list_widget {

View file

@ -4,13 +4,14 @@ import os
class InstallOptions: class InstallOptions:
def __init__(self, app_name: str, path: str = os.path.expanduser("~/legendary"), def __init__(self, app_name: str, path: str = os.path.expanduser("~/legendary"),
max_workers: int = os.cpu_count() * 2, repair: bool = False, max_workers: int = os.cpu_count() * 2, repair: bool = False,
download_only: bool = False, ignore_free_space: bool = False): download_only: bool = False, ignore_free_space: bool = False, force: bool = False):
self.app_name = app_name self.app_name = app_name
self.path = path self.path = path
self.max_workers = max_workers self.max_workers = max_workers
self.repair = repair self.repair = repair
self.download_only = download_only self.download_only = download_only
self.ignore_free_space = ignore_free_space self.ignore_free_space = ignore_free_space
self.force = force
class KillDownloadException(Exception): class KillDownloadException(Exception):