diff --git a/ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py b/ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py index e8f3d28..3c19863 100644 --- a/ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py +++ b/ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py @@ -972,6 +972,11 @@ class CustomOptionsDialog(QDialog): ConfigManager.set("check_beta_updates", beta_enabled) logger.info(f"Saved beta updates setting: {beta_enabled}") + # Save app update checker setting + app_updates_enabled = self.updater_tab.get_app_update_checker_setting() + ConfigManager.set("check_app_updates", app_updates_enabled) + logger.info(f"Saved app updates checker setting: {app_updates_enabled}") + except Exception as e: logger.exception(f"Error saving auto-update settings: {e}") diff --git a/ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py b/ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py index 8f8e4bb..fd0ff6b 100644 --- a/ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py +++ b/ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py @@ -445,6 +445,33 @@ class UpdaterTabWidget(QWidget): # === App Updates Section === app_update_group = QGroupBox(_("settings.app_updates_title")) app_update_layout = QVBoxLayout() + + self.app_updates_checkbox = QCheckBox(_("settings.check_app_updates")) + self.app_updates_checkbox.setStyleSheet( + """ + QCheckBox { + color: #ffffff; + spacing: 5px; + padding: 3px; + } + QCheckBox::indicator { + width: 18px; + height: 18px; + border-radius: 9px; + } + QCheckBox::indicator:unchecked { + border: 2px solid #666666; + background: #1d1e22; + border-radius: 9px; + } + QCheckBox::indicator:checked { + border: 2px solid #c90000; + background: #c90000; + border-radius: 9px; + } + """ + ) + app_update_layout.addWidget(self.app_updates_checkbox) self.beta_updates_checkbox = QCheckBox(_("settings.check_beta_updates")) self.beta_updates_checkbox.setStyleSheet( @@ -655,6 +682,10 @@ class UpdaterTabWidget(QWidget): # Load beta setting beta_enabled = ConfigManager.get("check_beta_updates") or False self.beta_updates_checkbox.setChecked(beta_enabled) + + # Load app update checker setting (default enabled for older configs) + app_updates_enabled = ConfigManager.get("check_app_updates") + self.app_updates_checkbox.setChecked(app_updates_enabled is not False) # Set current selection based on saved settings current_frequency = auto_settings["frequency"] @@ -697,6 +728,10 @@ class UpdaterTabWidget(QWidget): def get_beta_update_setting(self) -> bool: """Returns the beta update setting from the dialog.""" return self.beta_updates_checkbox.isChecked() + + def get_app_update_checker_setting(self) -> bool: + """Returns the app version checker setting from the dialog.""" + return self.app_updates_checkbox.isChecked() def _on_channel_changed(self, checked: bool) -> None: """Handle channel selection change.""" diff --git a/ytsage/gui/ytsage_gui_main.py b/ytsage/gui/ytsage_gui_main.py index 61a66aa..23d80cd 100644 --- a/ytsage/gui/ytsage_gui_main.py +++ b/ytsage/gui/ytsage_gui_main.py @@ -958,6 +958,10 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin): def check_for_updates(self) -> None: """Starts the update check in a background thread.""" + if ConfigManager.get("check_app_updates") is False: + logger.info("App version checker is disabled in settings.") + return + self.update_thread = UpdateCheckThread(self.version) self.update_thread.update_available.connect(self.show_update_dialog) self.update_thread.start() diff --git a/ytsage/languages/en.json b/ytsage/languages/en.json index a98751d..4cb0824 100644 --- a/ytsage/languages/en.json +++ b/ytsage/languages/en.json @@ -304,6 +304,7 @@ "ytdlp_channel_switch_failed": "❌ Failed to switch channel: {error}", "ytdlp_current_channel": "Current channel: {channel}", "app_updates_title": "YTSage Updates", + "check_app_updates": "Check for YTSage updates on startup", "check_beta_updates": "Receive Beta Updates", "auto_update_title": "Auto-Update Settings", "auto_update_header": "🔄 Auto-Update Settings", diff --git a/ytsage/utils/ytsage_config_manager.py b/ytsage/utils/ytsage_config_manager.py index fdb2e95..0692e6a 100644 --- a/ytsage/utils/ytsage_config_manager.py +++ b/ytsage/utils/ytsage_config_manager.py @@ -84,6 +84,7 @@ class ConfigManager: "geo_proxy_url": None, "auto_update_ytdlp": True, "auto_update_frequency": "daily", + "check_app_updates": True, "check_beta_updates": False, "last_update_check": 0, "language": "en", diff --git a/ytsage/utils/ytsage_localization.py b/ytsage/utils/ytsage_localization.py index db91723..a7eb4fa 100644 --- a/ytsage/utils/ytsage_localization.py +++ b/ytsage/utils/ytsage_localization.py @@ -73,7 +73,10 @@ class LocalizationManager: "settings": { "generic_mode": "Generic Mode", "enable_generic_mode": "Enable Generic Mode (support non-YouTube sites)", - "generic_mode_help": "Allows downloading from Dailymotion, CBC Gem, and other sites supported by yt-dlp." + "generic_mode_help": "Allows downloading from Dailymotion, CBC Gem, and other sites supported by yt-dlp.", + "app_updates_title": "YTSage Updates", + "check_app_updates": "Check for YTSage updates on startup", + "check_beta_updates": "Receive Beta Updates" }, "tabs": { "cookies": "Login with Cookies",