Subject: [trojita] /: GUI: Show accurate error message when
a part fails to load in the GUI



Git commit 1faa911b5331ad6196165c739fa5f5f6134593a9 by Jan Kundrát.
Committed on 02/01/2017 at 22:07.
Pushed by gerrit into branch 'master'.

GUI: Show accurate error message when a part fails to load in the GUI

The code should distinguish between being offline and parts failing for
some other reason.

CCBUG: 341982
Change-Id: I858d79d88c4c51a25ca8cb3a493dd144f1cc366f

M +17 -4 src/Gui/EmbeddedWebView.cpp
M +10 -2 src/Imap/Network/MsgPartNetworkReply.cpp
M +1 -1 tests/Imap/test_Imap_MsgPartNetAccessManager.cpp

https://commits.kde.org/trojita/1faa911b5331ad6196165c739fa5f5f6134593a9

diff --git a/src/Gui/EmbeddedWebView.cpp b/src/Gui/EmbeddedWebView.cpp
index 66350a9c..95826d85 100644
--- a/src/Gui/EmbeddedWebView.cpp
+++ b/src/Gui/EmbeddedWebView.cpp
@@ -324,10 +324,23 @@ bool ErrorCheckingPage::extension(Extension extension,
const ExtensionOption *op
ErrorPageExtensionReturn *res = static_cast<ErrorPageExtensionReturn
*>(output);
if (input && res) {
if (input->url.scheme() == QLatin1String("trojita-imap")) {
- if (input->domain == QtNetwork && input->error ==
QNetworkReply::TimeoutError) {
- res->content = tr("<img src=\"%2\"/><span style=\"font-family:
sans-serif; color: gray\">"
- "Uncached data not available when
offline</span>")
-
.arg(Util::resizedImageAsDataUrl(QStringLiteral(":/icons/network-offline.svg"),
32)).toUtf8();
+ QString emblem;
+ if (input->domain == QtNetwork) {
+ switch (input->error) {
+ case QNetworkReply::TimeoutError:
+ emblem = QStringLiteral("network-offline");
+ break;
+ case QNetworkReply::ContentNotFoundError:
+ emblem = QStringLiteral("emblem-error");
+ break;
+ case QNetworkReply::UnknownProxyError:
+ emblem = QStringLiteral("emblem-error");
+ break;
+ }
+ }
+ if (!emblem.isNull()) {
+ res->content = tr("<img src=\"%2\"/><span style=\"font-family:
sans-serif; color: gray\">%1</span>")
+ .arg(input->errorString,
Util::resizedImageAsDataUrl(QStringLiteral(":/icons/%1.svg").arg(emblem),
32)).toUtf8();
return true;
}
}
diff --git a/src/Imap/Network/MsgPartNetworkReply.cpp
b/src/Imap/Network/MsgPartNetworkReply.cpp
index c1a9b497..1135650e 100644
--- a/src/Imap/Network/MsgPartNetworkReply.cpp
+++ b/src/Imap/Network/MsgPartNetworkReply.cpp
@@ -78,9 +78,17 @@ void MsgPartNetworkReply::slotModelDataChanged(const
QModelIndex &topLeft, const
void MsgPartNetworkReply::slotMyDataChanged()
{
if (part.data(Mailbox::RoleIsUnavailable).toBool()) {
- setError(TimeoutError, tr("Offline"));
+ if (!part.data(Mailbox::RoleIsNetworkOffline).isValid()) {
+ setError(UnknownProxyError, tr("Cannot access data"));
+ } else {
+ if (part.data(Mailbox::RoleIsNetworkOffline).toBool()) {
+ setError(TimeoutError, tr("Uncached data not available when
offline"));
+ } else {
+ setError(ContentNotFoundError, tr("Error downloading data"));
+ }
+ }
setFinished(true);
- emit error(TimeoutError);
+ emit error(error());
emit finished();
return;
}
diff --git a/tests/Imap/test_Imap_MsgPartNetAccessManager.cpp
b/tests/Imap/test_Imap_MsgPartNetAccessManager.cpp
index 32a54233..ded026af 100644
--- a/tests/Imap/test_Imap_MsgPartNetAccessManager.cpp
+++ b/tests/Imap/test_Imap_MsgPartNetAccessManager.cpp
@@ -226,7 +226,7 @@ void
ImapMsgPartNetAccessManagerTest::testFetchResultOfflineSingle()
QCOMPARE(msg1p1.data(Imap::Mailbox::RoleIsUnavailable), QVariant(true));

QCOMPARE(res->isFinished(), true);
- QCOMPARE(res->error(), QNetworkReply::TimeoutError);
+ QCOMPARE(res->error(), QNetworkReply::ContentNotFoundError);
}





Programming list archiving by: Enterprise Git Hosting