summaryrefslogtreecommitdiffstats
path: root/examples/imapresource/imapserverproxy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/imapresource/imapserverproxy.cpp')
-rw-r--r--examples/imapresource/imapserverproxy.cpp20
1 files changed, 13 insertions, 7 deletions
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";
62const char* Imap::Capabilities::Uidplus = "UIDPLUS"; 62const char* Imap::Capabilities::Uidplus = "UIDPLUS";
63const char* Imap::Capabilities::Condstore = "CONDSTORE"; 63const char* Imap::Capabilities::Condstore = "CONDSTORE";
64 64
65static int translateImapError(int error) 65static int translateImapError(int error, bool isLoginJob)
66{ 66{
67 switch (error) { 67 switch (error) {
68 case KJob::UserDefinedError:
69 return Imap::ConnectionLost;
70 case KIMAP2::LoginJob::ErrorCode::ERR_HOST_NOT_FOUND: 68 case KIMAP2::LoginJob::ErrorCode::ERR_HOST_NOT_FOUND:
71 return Imap::HostNotFoundError; 69 return Imap::HostNotFoundError;
72 case KIMAP2::LoginJob::ErrorCode::ERR_COULD_NOT_CONNECT: 70 case KIMAP2::LoginJob::ErrorCode::ERR_COULD_NOT_CONNECT:
@@ -74,6 +72,14 @@ static int translateImapError(int error)
74 case KIMAP2::LoginJob::ErrorCode::ERR_SSL_HANDSHAKE_FAILED: 72 case KIMAP2::LoginJob::ErrorCode::ERR_SSL_HANDSHAKE_FAILED:
75 return Imap::SslHandshakeError; 73 return Imap::SslHandshakeError;
76 } 74 }
75 //Hack to detect login failures
76 if (isLoginJob) {
77 return Imap::LoginFailed;
78 }
79 //Hack to detect connection lost
80 if (error == KJob::UserDefinedError) {
81 return Imap::ConnectionLost;
82 }
77 return Imap::UnknownError; 83 return Imap::UnknownError;
78} 84}
79 85
@@ -84,8 +90,8 @@ static KAsync::Job<T> runJob(KJob *job, const std::function<T(KJob*)> &f)
84 QObject::connect(job, &KJob::result, [&future, f](KJob *job) { 90 QObject::connect(job, &KJob::result, [&future, f](KJob *job) {
85 SinkTrace() << "Job done: " << job->metaObject()->className(); 91 SinkTrace() << "Job done: " << job->metaObject()->className();
86 if (job->error()) { 92 if (job->error()) {
87 SinkWarning() << "Job failed: " << job->errorString() << job->metaObject()->className(); 93 SinkWarning() << "Job failed: " << job->errorString() << job->metaObject()->className() << job->error();
88 auto proxyError = translateImapError(job->error()); 94 auto proxyError = translateImapError(job->error(), dynamic_cast<KIMAP2::LoginJob*>(job));
89 future.setError(proxyError, job->errorString()); 95 future.setError(proxyError, job->errorString());
90 } else { 96 } else {
91 future.setValue(f(job)); 97 future.setValue(f(job));
@@ -103,8 +109,8 @@ static KAsync::Job<void> runJob(KJob *job)
103 QObject::connect(job, &KJob::result, [&future](KJob *job) { 109 QObject::connect(job, &KJob::result, [&future](KJob *job) {
104 SinkTrace() << "Job done: " << job->metaObject()->className(); 110 SinkTrace() << "Job done: " << job->metaObject()->className();
105 if (job->error()) { 111 if (job->error()) {
106 SinkWarning() << "Job failed: " << job->errorString() << job->metaObject()->className(); 112 SinkWarning() << "Job failed: " << job->errorString() << job->metaObject()->className() << job->error();
107 auto proxyError = translateImapError(job->error()); 113 auto proxyError = translateImapError(job->error(), dynamic_cast<KIMAP2::LoginJob*>(job));
108 future.setError(proxyError, job->errorString()); 114 future.setError(proxyError, job->errorString());
109 } else { 115 } else {
110 future.setFinished(); 116 future.setFinished();