From 76c7dd1703c3d9c153bc3d78bec18375577174de Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Thu, 16 Nov 2023 10:21:30 +0100 Subject: [PATCH] fixes for gmail, fixed crash when editing email --- .../gui/reusable/colortoolbutton.cpp | 6 ++++-- .../gui/reusable/colortoolbutton.h | 2 +- .../gui/richtexteditor/mrichtextedit.cpp | 6 ++++-- .../services/gmail/gmailnetworkfactory.cpp | 2 +- .../services/gmail/gui/formaddeditemail.cpp | 19 +++++++++++++------ 5 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/librssguard/gui/reusable/colortoolbutton.cpp b/src/librssguard/gui/reusable/colortoolbutton.cpp index cc3e3628f..79045d997 100644 --- a/src/librssguard/gui/reusable/colortoolbutton.cpp +++ b/src/librssguard/gui/reusable/colortoolbutton.cpp @@ -30,11 +30,13 @@ QColor ColorToolButton::color() const { return m_color; } -void ColorToolButton::setColor(const QColor& color) { +void ColorToolButton::setColor(const QColor& color, bool inform_about_changes) { m_color = color; repaint(); - emit colorChanged(m_color); + if (inform_about_changes) { + emit colorChanged(m_color); + } } void ColorToolButton::setRandomColor() { diff --git a/src/librssguard/gui/reusable/colortoolbutton.h b/src/librssguard/gui/reusable/colortoolbutton.h index cfe9e9d54..b631cf851 100644 --- a/src/librssguard/gui/reusable/colortoolbutton.h +++ b/src/librssguard/gui/reusable/colortoolbutton.h @@ -12,7 +12,7 @@ class ColorToolButton : public QToolButton { explicit ColorToolButton(QWidget* parent = nullptr); QColor color() const; - void setColor(const QColor& color); + void setColor(const QColor& color, bool inform_about_changes = true); QColor alternateColor() const; void setAlternateColor(const QColor& alt_color); diff --git a/src/librssguard/gui/richtexteditor/mrichtextedit.cpp b/src/librssguard/gui/richtexteditor/mrichtextedit.cpp index 566d40f7c..fc6b4a85f 100644 --- a/src/librssguard/gui/richtexteditor/mrichtextedit.cpp +++ b/src/librssguard/gui/richtexteditor/mrichtextedit.cpp @@ -555,9 +555,11 @@ void MRichTextEdit::fontChanged(const QFont& f) { void MRichTextEdit::onCurrentCharFormatChanged(const QTextCharFormat& format) { fontChanged(format.font()); m_ui.f_bgcolor->setColor(format.background().isOpaque() ? format.background().color() - : m_ui.f_bgcolor->alternateColor()); + : m_ui.f_bgcolor->alternateColor(), + false); m_ui.f_fgcolor->setColor(format.foreground().isOpaque() ? format.foreground().color() - : m_ui.f_fgcolor->alternateColor()); + : m_ui.f_fgcolor->alternateColor(), + false); m_ui.f_link->setChecked(format.isAnchor()); } diff --git a/src/librssguard/services/gmail/gmailnetworkfactory.cpp b/src/librssguard/services/gmail/gmailnetworkfactory.cpp index e6002f8eb..bb02e6f8c 100644 --- a/src/librssguard/services/gmail/gmailnetworkfactory.cpp +++ b/src/librssguard/services/gmail/gmailnetworkfactory.cpp @@ -688,7 +688,7 @@ QMap GmailNetworkFactory::getMessageMetadata(const QString& ms return result; } else { - throw ApplicationException(tr("failed to get metadata")); + throw NetworkException(res.m_networkError); } } diff --git a/src/librssguard/services/gmail/gui/formaddeditemail.cpp b/src/librssguard/services/gmail/gui/formaddeditemail.cpp index 88d0e5f1a..1320ac5a4 100644 --- a/src/librssguard/services/gmail/gui/formaddeditemail.cpp +++ b/src/librssguard/services/gmail/gui/formaddeditemail.cpp @@ -59,11 +59,6 @@ void FormAddEditEmail::execForReply(Message* original_message) { m_ui.m_txtSubject->setEnabled(false); m_ui.m_txtMessage->setFocus(); - auto from_header = - m_root->network()->getMessageMetadata(original_message->m_customId, {QSL("FROM")}, m_root->networkProxy()); - - // TODO: konverze html > plain - // QTextDocumentFragment::fromHtml(m_originalMessage->m_contents).toPlainText() m_ui.m_txtMessage->setText(m_originalMessage->m_contents); m_ui.m_txtMessage->editor()->moveCursor(QTextCursor::MoveOperation::Start); m_ui.m_txtMessage->editor()->insertHtml(QSL("

" @@ -71,7 +66,15 @@ void FormAddEditEmail::execForReply(Message* original_message) { "


")); m_ui.m_txtMessage->editor()->moveCursor(QTextCursor::MoveOperation::Start); - addRecipientRow(from_header[QSL("From")]); + try { + auto from_header = + m_root->network()->getMessageMetadata(original_message->m_customId, {QSL("FROM")}, m_root->networkProxy()); + addRecipientRow(from_header.value(QSL("From"))); + } + catch (const ApplicationException& ex) { + qWarningNN << LOGSEC_GMAIL << "Failed to get message metadata:" << QUOTE_W_SPACE_DOT(ex.message()); + } + exec(); } @@ -187,6 +190,10 @@ void FormAddEditEmail::onOkClicked() { } EmailRecipientControl* FormAddEditEmail::addRecipientRow(const QString& recipient) { + if (recipient.isEmpty()) { + return nullptr; + } + auto* mail_rec = new EmailRecipientControl(recipient, this); connect(mail_rec, &EmailRecipientControl::removalRequested, this, &FormAddEditEmail::removeRecipientRow);