From f65d7f8e4ab2d9a6ea8f7097f61d72fdf5b83bf3 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 15 Feb 2026 11:21:34 +0530 Subject: [PATCH] Cleanup OAuth re-auth dialog --- src/calibre/gui2/dialogs/oauth_reauth.py | 60 ++++++++---------------- src/calibre/gui2/ui.py | 4 +- 2 files changed, 22 insertions(+), 42 deletions(-) diff --git a/src/calibre/gui2/dialogs/oauth_reauth.py b/src/calibre/gui2/dialogs/oauth_reauth.py index 64513dc0a0..e14be6394b 100644 --- a/src/calibre/gui2/dialogs/oauth_reauth.py +++ b/src/calibre/gui2/dialogs/oauth_reauth.py @@ -2,61 +2,41 @@ # License: GPLv3 Copyright: 2026, Kovid Goyal -from qt.core import QDialog, QDialogButtonBox, QGridLayout, QIcon, QLabel, QPushButton, QSizePolicy, Qt +from qt.core import QIcon -from calibre.utils.resources import get_image_path as I +from calibre.gui2.dialogs.message_box import MessageBox -class OAuthReauthMessage(QDialog): +class OAuthReauthMessage(MessageBox): def __init__(self, parent=None, title=None, provider=None): - QDialog.__init__(self, parent) - self.gui = parent - self.setWindowTitle(_('Email Authorization Required')) - self.setWindowIcon(QIcon(I('mail.png'))) - - l = QGridLayout(self) - self.setLayout(l) - - la = QLabel() - la.setPixmap(QIcon(I('dialog_warning.png')).pixmap(64, 64)) - la.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) - l.addWidget(la, 0, 0, Qt.AlignmentFlag.AlignTop) - - pname = {'gmail': 'Google', 'outlook': 'Microsoft'}.get(provider, provider or 'your email provider') + pname = {'gmail': 'Google', 'outlook': 'Microsoft'}.get(provider, provider or _('email provider')) msg = _( - '

Email Authorization Expired

' + '

Email authorization expired

' '

Your {0} authorization has expired or been revoked. ' 'This can happen if you changed your password, revoked access, ' 'or the authorization expired due to inactivity.

' - '

Click Re-authorize to set up email again.

' + '

Click Re-authorize to set up authorization for email again.

' ).format(pname) if title: msg = _('

Failed to email: {0}

').format(title) + msg - self.msg = QLabel(msg) - self.msg.setWordWrap(True) - l.addWidget(self.msg, 0, 1) + super().__init__( + MessageBox.QUESTION, _('Email authorization required'), msg, + parent=parent, show_copy_button=False, q_icon=QIcon.ic('dialog_warning.png'), + yes_text=_('Re-&authorize'), yes_icon=QIcon.ic('config.png'), no_text=_('&Close'), + ) + self.accepted.connect(show_email_preferences) - bb = QDialogButtonBox() - self.reauth_btn = QPushButton(_('&Re-authorize')) - self.reauth_btn.setIcon(QIcon(I('config.png'))) - self.reauth_btn.clicked.connect(self.do_reauth) - bb.addButton(self.reauth_btn, QDialogButtonBox.ButtonRole.AcceptRole) - bb.addButton(QDialogButtonBox.StandardButton.Close) - bb.rejected.connect(self.reject) - l.addWidget(bb, 1, 0, 1, 2) - self.resize(450, 250) - - def do_reauth(self): - self.accept() - if self.gui is not None: - try: - self.gui.iactions['Preferences'].do_config( - initial_plugin=('Sharing', 'Email'), close_after_initial=True) - except Exception: - pass +def show_email_preferences(): + from calibre.gui2.ui import get_gui + if gui := get_gui(): + try: + gui.iactions['Preferences'].do_config( + initial_plugin=('Sharing', 'Email'), close_after_initial=True) + except Exception: + pass if __name__ == '__main__': diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 336fd1f994..d42abf9fc8 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -1085,7 +1085,7 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{ d.setModal(False) d.show() self._modeless_dialogs.append(d) - return + return # )))) if 'calibre.utils.oauth2.OAuth2ReauthenticationRequired' in job.details: if not minz: @@ -1097,7 +1097,7 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{ provider = 'gmail' elif 'Microsoft' in job.details: provider = 'outlook' - d = OAuthReauthMessage(self, title=title, provider=provider) + d = OAuthReauthMessage(parent=self, title=title, provider=provider) d.setModal(False) d.show() self._modeless_dialogs.append(d)