1
0
Fork 0
mirror of synced 2024-06-29 11:40:37 +12:00
Rare/rare/components/tabs/settings/legendary.py

136 lines
5.6 KiB
Python
Raw Normal View History

2021-09-14 05:46:50 +12:00
import re
2021-02-20 06:09:00 +13:00
from logging import getLogger
2021-10-11 09:08:31 +13:00
from typing import Tuple
2021-02-20 06:09:00 +13:00
from PyQt5.QtWidgets import QSizePolicy, QWidget, QFileDialog, QMessageBox
2021-02-20 06:09:00 +13:00
import rare.shared as shared
from rare.ui.components.tabs.settings.legendary import Ui_LegendarySettings
from rare.utils.extra_widgets import PathEdit, IndicatorLineEdit
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):
def __init__(self, parent=None):
super(LegendarySettings, self).__init__(parent=parent)
self.setupUi(self)
2021-10-15 10:18:13 +13:00
self.core = shared.core
2021-04-08 21:09:17 +12:00
2021-02-20 06:09:00 +13:00
# Default installation directory
2021-10-08 07:19:24 +13:00
self.install_dir = PathEdit(self.core.get_default_install_dir(),
2021-05-02 08:15:42 +12:00
file_type=QFileDialog.DirectoryOnly,
save_func=self.path_save)
self.install_dir_layout.addWidget(self.install_dir)
2021-02-20 06:09:00 +13:00
# Max Workers
max_workers = self.core.lgd.config['Legendary'].getint('max_workers', fallback=0)
self.max_worker_spin.setValue(max_workers)
self.max_worker_spin.valueChanged.connect(self.max_worker_save)
# Max memory
max_memory = self.core.lgd.config['Legendary'].getint('max_memory', fallback=0)
self.max_memory_spin.setValue(max_memory)
self.max_memory_spin.valueChanged.connect(self.max_memory_save)
# Preferred CDN
preferred_cdn = self.core.lgd.config['Legendary'].get('preferred_cdn', fallback="")
self.preferred_cdn_line.setText(preferred_cdn)
self.preferred_cdn_line.textChanged.connect(self.preferred_cdn_save)
# Disable HTTPS
disable_https = self.core.lgd.config['Legendary'].getboolean('disable_https', fallback=False)
self.disable_https_check.setChecked(disable_https)
self.disable_https_check.stateChanged.connect(self.disable_https_save)
2021-04-06 02:13:27 +12:00
# Cleanup
self.clean_button.clicked.connect(
lambda: self.cleanup(False)
)
self.clean_keep_manifests_button.clicked.connect(
lambda: self.cleanup(True)
)
2021-05-19 23:33:16 +12:00
self.locale_edit = IndicatorLineEdit(
f"{self.core.language_code}-{self.core.country_code}",
edit_func=self.locale_chck,
save_func=self.locale_save,
horiz_policy=QSizePolicy.Minimum,
parent=self
)
self.locale_layout.addWidget(self.locale_edit)
@staticmethod
2021-10-11 09:08:31 +13:00
def locale_chck(text: str) -> Tuple[bool, str]:
if text:
2021-10-11 21:41:01 +13:00
if re.match("^[a-zA-Z]{2,3}[-_][a-zA-Z]{2,3}$", text):
language, country = text.replace("_", "-").split("-")
text = "-".join([language.lower(), country.upper()])
return bool(re.match("^[a-z]{2,3}-[A-Z]{2,3}$", text)), text
2021-05-19 23:33:16 +12:00
else:
return True, text
2021-05-19 23:33:16 +12:00
def locale_save(self, text: str):
if text:
self.core.egs.language_code, self.core.egs.country_code = text.split("-")
2021-09-14 05:46:50 +12:00
self.core.lgd.config.set("Legendary", "locale", text)
else:
2021-09-15 03:56:55 +12:00
if self.core.lgd.config.has_option("Legendary", "locale"):
self.core.lgd.config.remove_option("Legendary", "locale")
2021-05-20 07:09:14 +12:00
self.core.lgd.save_config()
def path_save(self, text: str):
self.core.lgd.config["Legendary"]["install_dir"] = text
if not 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 " + text)
2021-02-20 06:09:00 +13:00
self.core.lgd.save_config()
def max_worker_save(self, workers: str):
if workers := int(workers):
self.core.lgd.config.set("Legendary", "max_workers", str(workers))
else:
self.core.lgd.config.remove_option("Legendary", "max_workers")
self.core.lgd.save_config()
def max_memory_save(self, memory: str):
if memory := int(memory):
self.core.lgd.config.set("Legendary", "max_memory", str(memory))
else:
self.core.lgd.config.remove_option("Legendary", "max_memory")
self.core.lgd.save_config()
def preferred_cdn_save(self, cdn: str):
if cdn:
self.core.lgd.config.set("Legendary", "preferred_cdn", cdn.strip())
else:
self.core.lgd.config.remove_option("Legendary", "preferred_cdn")
self.core.lgd.save_config()
def disable_https_save(self, checked: int):
self.core.lgd.config.set("Legendary", "disable_https", str(bool(checked)).lower())
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")