1
0
Fork 0
mirror of synced 2024-05-18 11:32:50 +12:00

Settings: Use membership instead of double inheritance

This commit is contained in:
loathingKernel 2024-02-16 13:03:27 +02:00
parent 6db35d1f1e
commit 5359b73c35
No known key found for this signature in database
GPG key ID: CE0C72D0B53821FD
3 changed files with 133 additions and 130 deletions

View file

@ -36,10 +36,11 @@ class RefreshGameMetaWorker(Worker):
self.signals.finished.emit()
class LegendarySettings(QWidget, Ui_LegendarySettings):
class LegendarySettings(QWidget):
def __init__(self, parent=None):
super(LegendarySettings, self).__init__(parent=parent)
self.setupUi(self)
self.ui = Ui_LegendarySettings()
self.ui.setupUi(self)
self.settings = QSettings(self)
self.core = LegendaryCoreSingleton()
@ -52,7 +53,7 @@ class LegendarySettings(QWidget, Ui_LegendarySettings):
file_mode=QFileDialog.DirectoryOnly,
save_func=self.__mac_path_save,
)
self.install_dir_layout.addWidget(self.mac_install_dir)
self.ui.install_dir_layout.addWidget(self.mac_install_dir)
# Platform-independent installation directory
self.install_dir = PathEdit(
@ -61,34 +62,34 @@ class LegendarySettings(QWidget, Ui_LegendarySettings):
file_mode=QFileDialog.DirectoryOnly,
save_func=self.__win_path_save,
)
self.install_dir_layout.addWidget(self.install_dir)
self.ui.install_dir_layout.addWidget(self.install_dir)
# 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)
self.ui.max_worker_spin.setValue(max_workers)
self.ui.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)
self.ui.max_memory_spin.setValue(max_memory)
self.ui.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)
self.ui.preferred_cdn_line.setText(preferred_cdn)
self.ui.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)
self.ui.disable_https_check.setChecked(disable_https)
self.ui.disable_https_check.stateChanged.connect(self.disable_https_save)
# Cleanup
self.clean_button.clicked.connect(lambda: self.cleanup(False))
self.clean_keep_manifests_button.clicked.connect(lambda: self.cleanup(True))
self.ui.clean_button.clicked.connect(lambda: self.cleanup(False))
self.ui.clean_keep_manifests_button.clicked.connect(lambda: self.cleanup(True))
self.locale_edit = IndicatorLineEdit(
f"{self.core.language_code}-{self.core.country_code}",
@ -97,38 +98,38 @@ class LegendarySettings(QWidget, Ui_LegendarySettings):
horiz_policy=QSizePolicy.Minimum,
parent=self,
)
self.locale_layout.addWidget(self.locale_edit)
self.ui.locale_layout.addWidget(self.locale_edit)
self.fetch_win32_check.setChecked(self.settings.value(*options.win32_meta))
self.fetch_win32_check.stateChanged.connect(
lambda: self.settings.setValue(options.win32_meta.key, self.fetch_win32_check.isChecked())
self.ui.fetch_win32_check.setChecked(self.settings.value(*options.win32_meta))
self.ui.fetch_win32_check.stateChanged.connect(
lambda: self.settings.setValue(options.win32_meta.key, self.ui.fetch_win32_check.isChecked())
)
self.fetch_macos_check.setChecked(self.settings.value(*options.macos_meta))
self.fetch_macos_check.stateChanged.connect(
lambda: self.settings.setValue(options.macos_meta.key, self.fetch_macos_check.isChecked())
self.ui.fetch_macos_check.setChecked(self.settings.value(*options.macos_meta))
self.ui.fetch_macos_check.stateChanged.connect(
lambda: self.settings.setValue(options.macos_meta.key, self.ui.fetch_macos_check.isChecked())
)
self.fetch_macos_check.setDisabled(pf.system() == "Darwin")
self.ui.fetch_macos_check.setDisabled(pf.system() == "Darwin")
self.fetch_unreal_check.setChecked(self.settings.value(*options.unreal_meta))
self.fetch_unreal_check.stateChanged.connect(
lambda: self.settings.setValue(options.unreal_meta.key, self.fetch_unreal_check.isChecked())
self.ui.fetch_unreal_check.setChecked(self.settings.value(*options.unreal_meta))
self.ui.fetch_unreal_check.stateChanged.connect(
lambda: self.settings.setValue(options.unreal_meta.key, self.ui.fetch_unreal_check.isChecked())
)
self.exclude_non_asset_check.setChecked(self.settings.value(*options.exclude_non_asset))
self.exclude_non_asset_check.stateChanged.connect(
lambda: self.settings.setValue(options.exclude_non_asset.key, self.exclude_non_asset_check.isChecked())
self.ui.exclude_non_asset_check.setChecked(self.settings.value(*options.exclude_non_asset))
self.ui.exclude_non_asset_check.stateChanged.connect(
lambda: self.settings.setValue(options.exclude_non_asset.key, self.ui.exclude_non_asset_check.isChecked())
)
self.exclude_entitlements_check.setChecked(self.settings.value(*options.exclude_entitlements))
self.exclude_entitlements_check.stateChanged.connect(
lambda: self.settings.setValue(options.exclude_entitlements.key, self.exclude_entitlements_check.isChecked())
self.ui.exclude_entitlements_check.setChecked(self.settings.value(*options.exclude_entitlements))
self.ui.exclude_entitlements_check.stateChanged.connect(
lambda: self.settings.setValue(options.exclude_entitlements.key, self.ui.exclude_entitlements_check.isChecked())
)
self.refresh_metadata_button.clicked.connect(self.refresh_metadata)
self.ui.refresh_metadata_button.clicked.connect(self.refresh_metadata)
# FIXME: Disable the button for now because it interferes with RareCore
self.refresh_metadata_button.setEnabled(False)
self.refresh_metadata_button.setVisible(False)
self.ui.refresh_metadata_button.setEnabled(False)
self.ui.refresh_metadata_button.setVisible(False)
def showEvent(self, a0: QShowEvent):
if a0.spontaneous():
@ -142,14 +143,14 @@ class LegendarySettings(QWidget, Ui_LegendarySettings):
return super().hideEvent(a0)
def refresh_metadata(self):
self.refresh_metadata_button.setDisabled(True)
self.ui.refresh_metadata_button.setDisabled(True)
platforms = set()
if self.fetch_win32_check.isChecked():
if self.ui.fetch_win32_check.isChecked():
platforms.add("Win32")
if self.fetch_macos_check.isChecked():
if self.ui.fetch_macos_check.isChecked():
platforms.add("Mac")
worker = RefreshGameMetaWorker(platforms, self.fetch_unreal_check.isChecked())
worker.signals.finished.connect(lambda: self.refresh_metadata_button.setDisabled(False))
worker = RefreshGameMetaWorker(platforms, self.ui.fetch_unreal_check.isChecked())
worker.signals.finished.connect(lambda: self.ui.refresh_metadata_button.setDisabled(False))
QThreadPool.globalInstance().start(worker)
@staticmethod

View file

@ -23,115 +23,116 @@ from rare.utils.paths import create_desktop_link, desktop_link_path, log_dir, de
logger = getLogger("RareSettings")
class RareSettings(QWidget, Ui_RareSettings):
class RareSettings(QWidget):
def __init__(self, parent=None):
super(RareSettings, self).__init__(parent=parent)
self.setupUi(self)
self.ui = Ui_RareSettings()
self.ui.setupUi(self)
self.core = LegendaryCoreSingleton()
self.settings = QSettings(self)
# Select lang
self.lang_select.addItem(self.tr("System default"), options.language.default)
self.ui.lang_select.addItem(self.tr("System default"), options.language.default)
for lang_code, title in get_translations():
self.lang_select.addItem(title, lang_code)
self.ui.lang_select.addItem(title, lang_code)
language = self.settings.value(*options.language)
if (index := self.lang_select.findData(language, Qt.UserRole)) > 0:
self.lang_select.setCurrentIndex(index)
if (index := self.ui.lang_select.findData(language, Qt.UserRole)) > 0:
self.ui.lang_select.setCurrentIndex(index)
else:
self.lang_select.setCurrentIndex(0)
self.lang_select.currentIndexChanged.connect(self.on_lang_changed)
self.ui.lang_select.setCurrentIndex(0)
self.ui.lang_select.currentIndexChanged.connect(self.on_lang_changed)
self.color_select.addItem(self.tr("None"), "")
self.ui.color_select.addItem(self.tr("None"), "")
for item in get_color_schemes():
self.color_select.addItem(item, item)
self.ui.color_select.addItem(item, item)
color = self.settings.value(*options.color_scheme)
if (index := self.color_select.findData(color, Qt.UserRole)) > 0:
self.color_select.setCurrentIndex(index)
self.color_select.setDisabled(False)
self.style_select.setDisabled(True)
if (index := self.ui.color_select.findData(color, Qt.UserRole)) > 0:
self.ui.color_select.setCurrentIndex(index)
self.ui.color_select.setDisabled(False)
self.ui.style_select.setDisabled(True)
else:
self.color_select.setCurrentIndex(0)
self.color_select.currentIndexChanged.connect(self.on_color_select_changed)
self.ui.color_select.setCurrentIndex(0)
self.ui.color_select.currentIndexChanged.connect(self.on_color_select_changed)
self.style_select.addItem(self.tr("None"), "")
self.ui.style_select.addItem(self.tr("None"), "")
for item in get_style_sheets():
self.style_select.addItem(item, item)
self.ui.style_select.addItem(item, item)
style = self.settings.value(*options.style_sheet)
if (index := self.style_select.findData(style, Qt.UserRole)) > 0:
self.style_select.setCurrentIndex(index)
self.style_select.setDisabled(False)
self.color_select.setDisabled(True)
if (index := self.ui.style_select.findData(style, Qt.UserRole)) > 0:
self.ui.style_select.setCurrentIndex(index)
self.ui.style_select.setDisabled(False)
self.ui.color_select.setDisabled(True)
else:
self.style_select.setCurrentIndex(0)
self.style_select.currentIndexChanged.connect(self.on_style_select_changed)
self.ui.style_select.setCurrentIndex(0)
self.ui.style_select.currentIndexChanged.connect(self.on_style_select_changed)
self.view_combo.addItem(self.tr("Game covers"), LibraryView.COVER)
self.view_combo.addItem(self.tr("Vertical list"), LibraryView.VLIST)
self.ui.view_combo.addItem(self.tr("Game covers"), LibraryView.COVER)
self.ui.view_combo.addItem(self.tr("Vertical list"), LibraryView.VLIST)
view = LibraryView(self.settings.value(*options.library_view))
if (index := self.view_combo.findData(view)) > -1:
self.view_combo.setCurrentIndex(index)
if (index := self.ui.view_combo.findData(view)) > -1:
self.ui.view_combo.setCurrentIndex(index)
else:
self.view_combo.setCurrentIndex(0)
self.view_combo.currentIndexChanged.connect(self.on_view_combo_changed)
self.ui.view_combo.setCurrentIndex(0)
self.ui.view_combo.currentIndexChanged.connect(self.on_view_combo_changed)
self.rpc = RPCSettings(self)
self.right_layout.insertWidget(1, self.rpc, alignment=Qt.AlignTop)
self.ui.right_layout.insertWidget(1, self.rpc, alignment=Qt.AlignTop)
self.sys_tray.setChecked(self.settings.value(*options.sys_tray))
self.sys_tray.stateChanged.connect(
lambda: self.settings.setValue(options.sys_tray.key, self.sys_tray.isChecked())
self.ui.sys_tray.setChecked(self.settings.value(*options.sys_tray))
self.ui.sys_tray.stateChanged.connect(
lambda: self.settings.setValue(options.sys_tray.key, self.ui.sys_tray.isChecked())
)
self.auto_update.setChecked(self.settings.value(*options.auto_update))
self.auto_update.stateChanged.connect(
lambda: self.settings.setValue(options.auto_update.key, self.auto_update.isChecked())
self.ui.auto_update.setChecked(self.settings.value(*options.auto_update))
self.ui.auto_update.stateChanged.connect(
lambda: self.settings.setValue(options.auto_update.key, self.ui.auto_update.isChecked())
)
self.confirm_start.setChecked(self.settings.value(*options.confirm_start))
self.confirm_start.stateChanged.connect(
lambda: self.settings.setValue(options.confirm_start.key, self.confirm_start.isChecked())
self.ui.confirm_start.setChecked(self.settings.value(*options.confirm_start))
self.ui.confirm_start.stateChanged.connect(
lambda: self.settings.setValue(options.confirm_start.key, self.ui.confirm_start.isChecked())
)
self.auto_sync_cloud.setChecked(self.settings.value(*options.auto_sync_cloud))
self.auto_sync_cloud.stateChanged.connect(
lambda: self.settings.setValue(options.auto_sync_cloud.key, self.auto_sync_cloud.isChecked())
self.ui.auto_sync_cloud.setChecked(self.settings.value(*options.auto_sync_cloud))
self.ui.auto_sync_cloud.stateChanged.connect(
lambda: self.settings.setValue(options.auto_sync_cloud.key, self.ui.auto_sync_cloud.isChecked())
)
self.notification.setChecked(self.settings.value(*options.notification))
self.notification.stateChanged.connect(
lambda: self.settings.setValue(options.notification.key, self.notification.isChecked())
self.ui.notification.setChecked(self.settings.value(*options.notification))
self.ui.notification.stateChanged.connect(
lambda: self.settings.setValue(options.notification.key, self.ui.notification.isChecked())
)
self.save_size.setChecked(self.settings.value(*options.save_size))
self.save_size.stateChanged.connect(self.save_window_size)
self.ui.save_size.setChecked(self.settings.value(*options.save_size))
self.ui.save_size.stateChanged.connect(self.save_window_size)
self.log_games.setChecked(self.settings.value(*options.log_games))
self.log_games.stateChanged.connect(
lambda: self.settings.setValue(options.log_games.key, self.log_games.isChecked())
self.ui.log_games.setChecked(self.settings.value(*options.log_games))
self.ui.log_games.stateChanged.connect(
lambda: self.settings.setValue(options.log_games.key, self.ui.log_games.isChecked())
)
if desktop_links_supported():
self.desktop_link = desktop_link_path("Rare", "desktop")
self.start_menu_link = desktop_link_path("Rare", "start_menu")
else:
self.desktop_link_btn.setToolTip(self.tr("Not supported"))
self.desktop_link_btn.setDisabled(True)
self.startmenu_link_btn.setToolTip(self.tr("Not supported"))
self.startmenu_link_btn.setDisabled(True)
self.ui.desktop_link_btn.setToolTip(self.tr("Not supported"))
self.ui.desktop_link_btn.setDisabled(True)
self.ui.startmenu_link_btn.setToolTip(self.tr("Not supported"))
self.ui.startmenu_link_btn.setDisabled(True)
self.desktop_link = ""
self.start_menu_link = ""
if self.desktop_link and self.desktop_link.exists():
self.desktop_link_btn.setText(self.tr("Remove desktop link"))
self.ui.desktop_link_btn.setText(self.tr("Remove desktop link"))
if self.start_menu_link and self.start_menu_link.exists():
self.startmenu_link_btn.setText(self.tr("Remove start menu link"))
self.ui.startmenu_link_btn.setText(self.tr("Remove start menu link"))
self.desktop_link_btn.clicked.connect(self.create_desktop_link)
self.startmenu_link_btn.clicked.connect(self.create_start_menu_link)
self.ui.desktop_link_btn.clicked.connect(self.create_desktop_link)
self.ui.startmenu_link_btn.clicked.connect(self.create_start_menu_link)
self.log_dir_open_button.clicked.connect(self.open_directory)
self.log_dir_clean_button.clicked.connect(self.clean_logdir)
self.ui.log_dir_open_button.clicked.connect(self.open_directory)
self.ui.log_dir_clean_button.clicked.connect(self.clean_logdir)
# get size of logdir
size = sum(
@ -139,7 +140,7 @@ class RareSettings(QWidget, Ui_RareSettings):
for f in log_dir().iterdir()
if log_dir().joinpath(f).is_file()
)
self.log_dir_size_label.setText(format_size(size))
self.ui.log_dir_size_label.setText(format_size(size))
# self.log_dir_clean_button.setVisible(False)
# self.log_dir_size_label.setVisible(False)
@ -156,7 +157,7 @@ class RareSettings(QWidget, Ui_RareSettings):
for f in log_dir().iterdir()
if log_dir().joinpath(f).is_file()
)
self.log_dir_size_label.setText(format_size(size))
self.ui.log_dir_size_label.setText(format_size(size))
@pyqtSlot()
def create_start_menu_link(self):
@ -164,10 +165,10 @@ class RareSettings(QWidget, Ui_RareSettings):
if not os.path.exists(self.start_menu_link):
if not create_desktop_link(app_name="rare_shortcut", link_type="start_menu"):
return
self.startmenu_link_btn.setText(self.tr("Remove start menu link"))
self.ui.startmenu_link_btn.setText(self.tr("Remove start menu link"))
else:
os.remove(self.start_menu_link)
self.startmenu_link_btn.setText(self.tr("Create start menu link"))
self.ui.startmenu_link_btn.setText(self.tr("Create start menu link"))
except PermissionError as e:
logger.error(str(e))
QMessageBox.warning(
@ -182,10 +183,10 @@ class RareSettings(QWidget, Ui_RareSettings):
if not os.path.exists(self.desktop_link):
if not create_desktop_link(app_name="rare_shortcut", link_type="desktop"):
return
self.desktop_link_btn.setText(self.tr("Remove Desktop link"))
self.ui.desktop_link_btn.setText(self.tr("Remove Desktop link"))
else:
os.remove(self.desktop_link)
self.desktop_link_btn.setText(self.tr("Create desktop link"))
self.ui.desktop_link_btn.setText(self.tr("Create desktop link"))
except PermissionError as e:
logger.error(str(e))
logger.warning(
@ -196,29 +197,29 @@ class RareSettings(QWidget, Ui_RareSettings):
@pyqtSlot(int)
def on_color_select_changed(self, index: int):
scheme = self.color_select.itemData(index, Qt.UserRole)
scheme = self.ui.color_select.itemData(index, Qt.UserRole)
if scheme:
self.style_select.setCurrentIndex(0)
self.style_select.setDisabled(True)
self.ui.style_select.setCurrentIndex(0)
self.ui.style_select.setDisabled(True)
else:
self.style_select.setDisabled(False)
self.ui.style_select.setDisabled(False)
self.settings.setValue("color_scheme", scheme)
set_color_pallete(scheme)
@pyqtSlot(int)
def on_style_select_changed(self, index: int):
style = self.style_select.itemData(index, Qt.UserRole)
style = self.ui.style_select.itemData(index, Qt.UserRole)
if style:
self.color_select.setCurrentIndex(0)
self.color_select.setDisabled(True)
self.ui.color_select.setCurrentIndex(0)
self.ui.color_select.setDisabled(True)
else:
self.color_select.setDisabled(False)
self.ui.color_select.setDisabled(False)
self.settings.setValue("style_sheet", style)
set_style_sheet(style)
@pyqtSlot(int)
def on_view_combo_changed(self, index: int):
view = LibraryView(self.view_combo.itemData(index, Qt.UserRole))
view = LibraryView(self.ui.view_combo.itemData(index, Qt.UserRole))
self.settings.setValue(options.library_view.key, int(view))
@pyqtSlot()
@ -227,12 +228,12 @@ class RareSettings(QWidget, Ui_RareSettings):
@pyqtSlot()
def save_window_size(self):
self.settings.setValue(options.save_size.key, self.save_size.isChecked())
self.settings.setValue(options.save_size.key, self.ui.save_size.isChecked())
self.settings.remove(options.window_size.key)
@pyqtSlot(int)
def on_lang_changed(self, index: int):
lang_code = self.lang_select.itemData(index, Qt.UserRole)
lang_code = self.ui.lang_select.itemData(index, Qt.UserRole)
if lang_code == locale.getlocale()[0]:
self.settings.remove(options.language.key)
else:

View file

@ -6,30 +6,31 @@ from rare.models.options import options
from rare.ui.components.tabs.settings.widgets.rpc import Ui_RPCSettings
class RPCSettings(QGroupBox, Ui_RPCSettings):
class RPCSettings(QGroupBox):
def __init__(self, parent):
super(RPCSettings, self).__init__(parent=parent)
self.setupUi(self)
self.ui = Ui_RPCSettings()
self.ui.setupUi(self)
self.signals = GlobalSignalsSingleton()
self.settings = QSettings()
self.enable.setCurrentIndex(self.settings.value(*options.rpc_enable))
self.enable.currentIndexChanged.connect(self.__enable_changed)
self.ui.enable.setCurrentIndex(self.settings.value(*options.rpc_enable))
self.ui.enable.currentIndexChanged.connect(self.__enable_changed)
self.show_game.setChecked((self.settings.value(*options.rpc_name)))
self.show_game.stateChanged.connect(
lambda: self.settings.setValue(options.rpc_name.key, self.show_game.isChecked())
self.ui.show_game.setChecked((self.settings.value(*options.rpc_name)))
self.ui.show_game.stateChanged.connect(
lambda: self.settings.setValue(options.rpc_name.key, self.ui.show_game.isChecked())
)
self.show_os.setChecked((self.settings.value(*options.rpc_os)))
self.show_os.stateChanged.connect(
lambda: self.settings.setValue(options.rpc_os.key, self.show_os.isChecked())
self.ui.show_os.setChecked((self.settings.value(*options.rpc_os)))
self.ui.show_os.stateChanged.connect(
lambda: self.settings.setValue(options.rpc_os.key, self.ui.show_os.isChecked())
)
self.show_time.setChecked((self.settings.value(*options.rpc_time)))
self.show_time.stateChanged.connect(
lambda: self.settings.setValue(options.rpc_time.key, self.show_time.isChecked())
self.ui.show_time.setChecked((self.settings.value(*options.rpc_time)))
self.ui.show_time.stateChanged.connect(
lambda: self.settings.setValue(options.rpc_time.key, self.ui.show_time.isChecked())
)
try: