From 5359b73c353869fc3ca42513b0eb3a7ba60b00b0 Mon Sep 17 00:00:00 2001 From: loathingKernel <142770+loathingKernel@users.noreply.github.com> Date: Fri, 16 Feb 2024 13:03:27 +0200 Subject: [PATCH] Settings: Use membership instead of double inheritance --- rare/components/tabs/settings/legendary.py | 79 +++++----- rare/components/tabs/settings/rare.py | 157 ++++++++++--------- rare/components/tabs/settings/widgets/rpc.py | 27 ++-- 3 files changed, 133 insertions(+), 130 deletions(-) diff --git a/rare/components/tabs/settings/legendary.py b/rare/components/tabs/settings/legendary.py index bc697d83..3d2d49c9 100644 --- a/rare/components/tabs/settings/legendary.py +++ b/rare/components/tabs/settings/legendary.py @@ -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 diff --git a/rare/components/tabs/settings/rare.py b/rare/components/tabs/settings/rare.py index 94e51d1e..1be5fd8c 100644 --- a/rare/components/tabs/settings/rare.py +++ b/rare/components/tabs/settings/rare.py @@ -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: diff --git a/rare/components/tabs/settings/widgets/rpc.py b/rare/components/tabs/settings/widgets/rpc.py index e3a3a7e5..a1650f5f 100644 --- a/rare/components/tabs/settings/widgets/rpc.py +++ b/rare/components/tabs/settings/widgets/rpc.py @@ -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: