From 8b24f7f4919c1d4a3a91cf4b21ad76b610dcddf1 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 22 Sep 2017 08:32:39 +0200 Subject: Detect login failures --- examples/imapresource/imapserverproxy.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'examples/imapresource/imapserverproxy.cpp') diff --git a/examples/imapresource/imapserverproxy.cpp b/examples/imapresource/imapserverproxy.cpp index 317fbdc..9a84327 100644 --- a/examples/imapresource/imapserverproxy.cpp +++ b/examples/imapresource/imapserverproxy.cpp @@ -62,11 +62,9 @@ const char* Imap::Capabilities::Namespace = "NAMESPACE"; const char* Imap::Capabilities::Uidplus = "UIDPLUS"; const char* Imap::Capabilities::Condstore = "CONDSTORE"; -static int translateImapError(int error) +static int translateImapError(int error, bool isLoginJob) { switch (error) { - case KJob::UserDefinedError: - return Imap::ConnectionLost; case KIMAP2::LoginJob::ErrorCode::ERR_HOST_NOT_FOUND: return Imap::HostNotFoundError; case KIMAP2::LoginJob::ErrorCode::ERR_COULD_NOT_CONNECT: @@ -74,6 +72,14 @@ static int translateImapError(int error) case KIMAP2::LoginJob::ErrorCode::ERR_SSL_HANDSHAKE_FAILED: return Imap::SslHandshakeError; } + //Hack to detect login failures + if (isLoginJob) { + return Imap::LoginFailed; + } + //Hack to detect connection lost + if (error == KJob::UserDefinedError) { + return Imap::ConnectionLost; + } return Imap::UnknownError; } @@ -84,8 +90,8 @@ static KAsync::Job runJob(KJob *job, const std::function &f) QObject::connect(job, &KJob::result, [&future, f](KJob *job) { SinkTrace() << "Job done: " << job->metaObject()->className(); if (job->error()) { - SinkWarning() << "Job failed: " << job->errorString() << job->metaObject()->className(); - auto proxyError = translateImapError(job->error()); + SinkWarning() << "Job failed: " << job->errorString() << job->metaObject()->className() << job->error(); + auto proxyError = translateImapError(job->error(), dynamic_cast(job)); future.setError(proxyError, job->errorString()); } else { future.setValue(f(job)); @@ -103,8 +109,8 @@ static KAsync::Job runJob(KJob *job) QObject::connect(job, &KJob::result, [&future](KJob *job) { SinkTrace() << "Job done: " << job->metaObject()->className(); if (job->error()) { - SinkWarning() << "Job failed: " << job->errorString() << job->metaObject()->className(); - auto proxyError = translateImapError(job->error()); + SinkWarning() << "Job failed: " << job->errorString() << job->metaObject()->className() << job->error(); + auto proxyError = translateImapError(job->error(), dynamic_cast(job)); future.setError(proxyError, job->errorString()); } else { future.setFinished(); -- cgit v1.2.3