Skip to content

Commit f31b07e

Browse files
committed
Revamp cookies tab UI and add apply functionality
Improves the cookies tab in CustomOptionsDialog by making browser extraction the recommended default, updating the status indicator to show active cookies, and adding an Apply button to confirm cookie settings. Refactors radio button logic, status updates, and integrates user feedback via QMessageBox.
1 parent 1ba4703 commit f31b07e

File tree

1 file changed

+97
-26
lines changed

1 file changed

+97
-26
lines changed

src/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py

Lines changed: 97 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
QHBoxLayout,
2020
QLabel,
2121
QLineEdit,
22+
QMessageBox,
2223
QPlainTextEdit,
2324
QPushButton,
2425
QRadioButton,
@@ -117,6 +118,7 @@ def __init__(self, parent=None) -> None:
117118

118119
# === Cookies Tab ===
119120
cookies_tab = QWidget()
121+
120122
cookies_layout = QVBoxLayout(cookies_tab)
121123

122124
# Help text
@@ -130,15 +132,15 @@ def __init__(self, parent=None) -> None:
130132
cookie_source_layout = QVBoxLayout(cookie_source_group)
131133

132134
# Radio buttons for cookie source
135+
self.cookie_browser_radio = QRadioButton(_('cookies.extract_from_browser') + f" ({_('cookies.recommended')})")
136+
self.cookie_browser_radio.setChecked(True)
137+
self.cookie_browser_radio.toggled.connect(self.on_cookie_source_changed)
138+
cookie_source_layout.addWidget(self.cookie_browser_radio)
139+
133140
self.cookie_file_radio = QRadioButton(_('cookies.use_cookie_file'))
134-
self.cookie_file_radio.setChecked(True)
135141
self.cookie_file_radio.toggled.connect(self.on_cookie_source_changed)
136142
cookie_source_layout.addWidget(self.cookie_file_radio)
137143

138-
self.cookie_browser_radio = QRadioButton(_('cookies.extract_from_browser'))
139-
self.cookie_browser_radio.toggled.connect(self.on_cookie_source_changed)
140-
cookie_source_layout.addWidget(self.cookie_browser_radio)
141-
142144
cookies_layout.addWidget(cookie_source_group)
143145

144146
# Cookie file section
@@ -191,13 +193,42 @@ def __init__(self, parent=None) -> None:
191193

192194
cookies_layout.addWidget(self.cookie_browser_group)
193195

194-
# Initially hide browser group
195-
self.cookie_browser_group.setVisible(False)
196+
# Initially show browser group (recommended default) and hide file group
197+
self.cookie_file_group.setVisible(False)
198+
self.cookie_browser_group.setVisible(True)
196199

197-
# Status indicator for cookies
198-
self.cookie_status = QLabel("")
199-
self.cookie_status.setStyleSheet("color: #999999; font-style: italic;")
200-
cookies_layout.addWidget(self.cookie_status)
200+
# Apply button and status indicator
201+
apply_layout = QHBoxLayout()
202+
203+
# Status indicator for active cookies
204+
self.cookies_active_status = QLabel()
205+
self._update_cookies_active_status()
206+
apply_layout.addWidget(self.cookies_active_status)
207+
208+
apply_layout.addStretch()
209+
210+
# Apply button
211+
self.apply_cookies_btn = QPushButton(_('buttons.apply'))
212+
self.apply_cookies_btn.clicked.connect(self.apply_cookies)
213+
self.apply_cookies_btn.setStyleSheet(
214+
"""
215+
QPushButton {
216+
padding: 8px 20px;
217+
background-color: #c90000;
218+
border: none;
219+
border-radius: 4px;
220+
color: white;
221+
font-weight: bold;
222+
min-width: 100px;
223+
}
224+
QPushButton:hover {
225+
background-color: #a50000;
226+
}
227+
"""
228+
)
229+
apply_layout.addWidget(self.apply_cookies_btn)
230+
231+
cookies_layout.addLayout(apply_layout)
201232

202233
cookies_layout.addStretch()
203234

@@ -622,17 +653,24 @@ def _initialize_cookie_settings(self) -> None:
622653

623654
# Set profile if any
624655
self.profile_input.setText(profile)
625-
626-
self.cookie_status.setText(f"Browser cookies active: {self._parent.browser_cookies_option}")
627-
self.cookie_status.setStyleSheet("color: #00cc00; font-style: italic;")
628656
elif hasattr(self._parent, "cookie_file_path") and self._parent.cookie_file_path:
629-
# File cookies are active - ensure file radio is selected and update status
657+
# File cookies are active - ensure file radio is selected
630658
self.cookie_file_radio.setChecked(True)
631-
self.cookie_status.setText(f"Cookie file active: {self._parent.cookie_file_path.name}")
632-
self.cookie_status.setStyleSheet("color: #00cc00; font-style: italic;")
633659
else:
634-
# No cookies configured - ensure file radio is selected by default
635-
self.cookie_file_radio.setChecked(True)
660+
# No cookies configured - browser extraction is the recommended default
661+
self.cookie_browser_radio.setChecked(True)
662+
663+
def _update_cookies_active_status(self) -> None:
664+
"""Update the status indicator showing if cookies are currently active"""
665+
if hasattr(self._parent, "browser_cookies_option") and self._parent.browser_cookies_option:
666+
self.cookies_active_status.setText(f"✓ Active: Browser cookies ({self._parent.browser_cookies_option})")
667+
self.cookies_active_status.setStyleSheet("color: #00cc00; font-weight: bold;")
668+
elif hasattr(self._parent, "cookie_file_path") and self._parent.cookie_file_path:
669+
self.cookies_active_status.setText(f"✓ Active: Cookie file ({self._parent.cookie_file_path.name})")
670+
self.cookies_active_status.setStyleSheet("color: #00cc00; font-weight: bold;")
671+
else:
672+
self.cookies_active_status.setText("○ No cookies active")
673+
self.cookies_active_status.setStyleSheet("color: #888888; font-style: italic;")
636674

637675
def _initialize_proxy_settings(self) -> None:
638676
"""Initialize the dialog with current proxy settings from config"""
@@ -655,23 +693,56 @@ def on_cookie_source_changed(self) -> None:
655693
if self.cookie_file_radio.isChecked():
656694
self.cookie_file_group.setVisible(True)
657695
self.cookie_browser_group.setVisible(False)
658-
self.cookie_status.setText("")
659696
else:
660697
self.cookie_file_group.setVisible(False)
661698
self.cookie_browser_group.setVisible(True)
662-
self.cookie_status.setText(_("cookies.browser_extract_message"))
663-
self.cookie_status.setStyleSheet("color: #ffaa00; font-style: italic;")
699+
700+
def apply_cookies(self) -> None:
701+
"""Apply cookie settings when user clicks Apply button"""
702+
# Handle cookies
703+
cookie_path = self.get_cookie_file_path()
704+
browser_cookies = self.get_browser_cookies_option()
705+
706+
# Clear both first to avoid conflicts
707+
self._parent.cookie_file_path = None
708+
self._parent.browser_cookies_option = None
709+
710+
if cookie_path:
711+
self._parent.cookie_file_path = cookie_path
712+
logger.info(f"Applied cookie file: {self._parent.cookie_file_path}")
713+
QMessageBox.information(
714+
self,
715+
_("cookies.file_selected_title"),
716+
_("cookies.file_applied_message", path=str(cookie_path)),
717+
)
718+
elif browser_cookies:
719+
self._parent.browser_cookies_option = browser_cookies
720+
logger.info(f"Applied browser cookies: {self._parent.browser_cookies_option}")
721+
QMessageBox.information(
722+
self,
723+
_("cookies.browser_selected_title"),
724+
_("cookies.browser_applied_message", browser=browser_cookies),
725+
)
726+
else:
727+
# Clear cookies
728+
logger.info("Cookies cleared")
729+
QMessageBox.information(
730+
self,
731+
_("cookies.cleared_title"),
732+
_("cookies.cleared_message"),
733+
)
734+
735+
# Update the status indicator
736+
self._update_cookies_active_status()
664737

665738
def browse_cookie_file(self) -> None:
666739
# Open file dialog to select cookie file
667-
selected_files, _ = QFileDialog.getOpenFileName(self, _("cookies.select_file_title"), "", _("cookies.file_filter"))
740+
selected_files, _filter = QFileDialog.getOpenFileName(self, _("cookies.select_file_title"), "", _("cookies.file_filter"))
668741

669742
if selected_files:
670743
# Ensure we have a valid full path
671744
cookie_path = Path(selected_files).resolve()
672745
self.cookie_path_input.setText(str(cookie_path))
673-
self.cookie_status.setText(_("cookies.file_selected_message"))
674-
self.cookie_status.setStyleSheet("color: #00cc00; font-style: italic;")
675746

676747
def get_cookie_file_path(self) -> Path | None:
677748
# Return the selected cookie file path if it's not empty and using file mode
@@ -701,7 +772,7 @@ def get_browser_cookies_option(self) -> str | None:
701772
def is_using_browser_cookies(self) -> bool:
702773
"""Returns True if browser cookies mode is selected"""
703774
return self.cookie_browser_radio.isChecked()
704-
775+
705776
def get_proxy_url(self) -> str | None:
706777
"""Returns the main proxy URL if specified"""
707778
proxy_url = self.proxy_url_input.text().strip()

0 commit comments

Comments
 (0)