From f5827cbad1dece75dd157523fac0cb0f2b63a5d2 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 20 Mar 2017 14:14:39 +0100 Subject: Translate login errors --- examples/imapresource/imapresource.cpp | 17 +++++++++++++++-- examples/imapresource/imapserverproxy.cpp | 10 ++++++++++ examples/imapresource/imapserverproxy.h | 5 +++++ 3 files changed, 30 insertions(+), 2 deletions(-) (limited to 'examples/imapresource') diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp index b27c2b2..ba0251c 100644 --- a/examples/imapresource/imapresource.cpp +++ b/examples/imapresource/imapresource.cpp @@ -469,6 +469,19 @@ public: } } + KAsync::Error getError(const KAsync::Error &error) + { + if (error) { + if (error.errorCode == Imap::CouldNotConnectError) { + return {ApplicationDomain::LoginError, error.errorMessage}; + } else if (error.errorCode == Imap::SslHandshakeError) { + return {ApplicationDomain::LoginError, error.errorMessage}; + } + return {ApplicationDomain::UnknownError, error.errorMessage}; + } + return {}; + } + KAsync::Job synchronizeWithSource(const Sink::QueryBase &query) Q_DECL_OVERRIDE { auto imap = QSharedPointer::create(mServer, mPort, &mSessionCache); @@ -488,7 +501,7 @@ public: SinkWarning() << "Error during folder sync: " << error.errorMessage; } return imap->logout() - .then(KAsync::error(ApplicationDomain::LoginError, error.errorMessage)); + .then(KAsync::error(getError(error))); }); } else if (query.type() == ApplicationDomain::getTypeName()) { //TODO @@ -560,7 +573,7 @@ public: SinkWarning() << "Error during sync: " << error.errorMessage; } return imap->logout() - .then(KAsync::error(ApplicationDomain::LoginError, error.errorMessage)); + .then(KAsync::error(getError(error))); }); } return KAsync::error("Nothing to do"); diff --git a/examples/imapresource/imapserverproxy.cpp b/examples/imapresource/imapserverproxy.cpp index dabdd8e..a856576 100644 --- a/examples/imapresource/imapserverproxy.cpp +++ b/examples/imapresource/imapserverproxy.cpp @@ -159,6 +159,16 @@ KAsync::Job ImapServerProxy::login(const QString &username, const QString // SinkTrace() << "Found personal namespaces: " << mNamespaces.personal; // SinkTrace() << "Found shared namespaces: " << mNamespaces.shared; // SinkTrace() << "Found user namespaces: " << mNamespaces.user; + }).then([=] (const KAsync::Error &error) { + if (error) { + if (error.errorCode == KIMAP2::LoginJob::ErrorCode::ERR_COULD_NOT_CONNECT) { + return KAsync::error(CouldNotConnectError, "Failed to connect: " + error.errorMessage); + } else if (error.errorCode == KIMAP2::LoginJob::ErrorCode::ERR_SSL_HANDSHAKE_FAILED) { + return KAsync::error(SslHandshakeError, "Ssl handshake failed: " + error.errorMessage); + } + return KAsync::error(error); + } + return KAsync::null(); }); } diff --git a/examples/imapresource/imapserverproxy.h b/examples/imapresource/imapserverproxy.h index 6eb47ee..cae3105 100644 --- a/examples/imapresource/imapserverproxy.h +++ b/examples/imapresource/imapserverproxy.h @@ -29,6 +29,11 @@ namespace Imap { +enum ErrorCode { + CouldNotConnectError, + SslHandshakeError +}; + namespace Flags { /// The flag for a message being seen (i.e. opened by user). -- cgit v1.2.3