1
0
Fork 0
mirror of synced 2024-07-03 05:31:23 +12:00
Rare/rare/components/tabs/settings/legendary.py

86 lines
3.5 KiB
Python
Raw Normal View History

2021-02-20 06:09:00 +13:00
from logging import getLogger
from PyQt5.QtWidgets import QFileDialog, QMessageBox, QWidget
2021-02-20 06:09:00 +13:00
2021-04-23 00:34:06 +12:00
from custom_legendary.core import LegendaryCore
2021-04-29 09:35:09 +12:00
from rare.components.tabs.settings.legendary_ui import Ui_LegendarySettings
2021-04-08 08:39:23 +12:00
from rare.utils.extra_widgets import PathEdit
from rare.utils.utils import get_size
2021-02-20 06:09:00 +13:00
logger = getLogger("LegendarySettings")
2021-02-20 00:57:55 +13:00
class LegendarySettings(QWidget, Ui_LegendarySettings):
2021-02-20 06:09:00 +13:00
def __init__(self, core: LegendaryCore):
2021-02-20 00:57:55 +13:00
super(LegendarySettings, self).__init__()
self.setupUi(self)
2021-02-20 06:09:00 +13:00
self.core = core
2021-04-08 21:09:17 +12:00
2021-02-20 06:09:00 +13:00
# Default installation directory
2021-04-29 09:35:09 +12:00
self.install_dir = PathEdit(core.get_default_install_dir(),
type_of_file=QFileDialog.DirectoryOnly,
2021-02-20 06:09:00 +13:00
infotext="Default")
self.install_dir.text_edit.textChanged.connect(
lambda t: self.install_dir.save_path_button.setDisabled(False)
)
self.install_dir.save_path_button.clicked.connect(self.save_path)
self.install_dir.save_path_button.setDisabled(True)
self.layout_install_dir.addWidget(self.install_dir)
2021-02-20 06:09:00 +13:00
# Max Workers
max_workers = self.core.lgd.config["Legendary"].get("max_workers", fallback=0)
self.max_worker_select.setValue(int(max_workers))
self.max_worker_select.valueChanged.connect(self.max_worker_save)
2021-04-06 02:13:27 +12:00
# Cleanup
self.clean_button.clicked.connect(
lambda: self.cleanup(False)
)
self.clean_button_without_manifests.clicked.connect(
lambda: self.cleanup(True)
)
2021-02-20 06:09:00 +13:00
def save_path(self):
self.core.lgd.config["Legendary"]["install_dir"] = self.install_dir.text()
if self.install_dir.text() == "" and "install_dir" in self.core.lgd.config["Legendary"].keys():
2021-02-20 06:09:00 +13:00
self.core.lgd.config["Legendary"].pop("install_dir")
else:
logger.info("Set config install_dir to " + self.install_dir.text())
2021-02-20 06:09:00 +13:00
self.core.lgd.save_config()
def max_worker_save(self, num_workers: str):
if num_workers == "":
self.core.lgd.config.remove_option("Legendary", "max_workers")
self.core.lgd.save_config()
2021-02-20 06:09:00 +13:00
return
num_workers = int(num_workers)
if num_workers == 0:
self.core.lgd.config.remove_option("Legendary", "max_workers")
else:
self.core.lgd.config.set("Legendary", "max_workers", str(num_workers))
2021-02-20 06:09:00 +13:00
self.core.lgd.save_config()
2021-04-06 02:13:27 +12:00
def cleanup(self, keep_manifests):
before = self.core.lgd.get_dir_size()
logger.debug('Removing app metadata...')
app_names = set(g.app_name for g in self.core.get_assets(update_assets=False))
self.core.lgd.clean_metadata(app_names)
if not keep_manifests:
logger.debug('Removing manifests...')
installed = [(ig.app_name, ig.version) for ig in self.core.get_installed_list()]
installed.extend((ig.app_name, ig.version) for ig in self.core.get_installed_dlc_list())
self.core.lgd.clean_manifests(installed)
logger.debug('Removing tmp data')
self.core.lgd.clean_tmp_data()
after = self.core.lgd.get_dir_size()
logger.info(f'Cleanup complete! Removed {(before - after) / 1024 / 1024:.02f} MiB.')
2021-04-23 00:34:06 +12:00
if (before - after) > 0:
QMessageBox.information(self, "Cleanup", self.tr("Cleanup complete! Successfully removed {}").format(
get_size(before - after)))
2021-04-06 02:13:27 +12:00
else:
QMessageBox.information(self, "Cleanup", "Nothing to clean")