summaryrefslogtreecommitdiffstats
path: root/examples/imapresource/imapserverproxy.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-08-28 17:19:51 -0600
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-08-28 17:19:51 -0600
commit1ba34f8b16cd06a74ff96dfae803ce4b0521652b (patch)
tree7ace2b8ef72a5af1ce76d426974e148a982d2406 /examples/imapresource/imapserverproxy.cpp
parent7669eeecdd394e1dd9ee8c2fa06edb948a410f6b (diff)
downloadsink-1ba34f8b16cd06a74ff96dfae803ce4b0521652b.tar.gz
sink-1ba34f8b16cd06a74ff96dfae803ce4b0521652b.zip
Detect connection lost so we can go to offline state
kimap should really have better error codes...
Diffstat (limited to 'examples/imapresource/imapserverproxy.cpp')
-rw-r--r--examples/imapresource/imapserverproxy.cpp32
1 files changed, 17 insertions, 15 deletions
diff --git a/examples/imapresource/imapserverproxy.cpp b/examples/imapresource/imapserverproxy.cpp
index 538105c..a0f0970 100644
--- a/examples/imapresource/imapserverproxy.cpp
+++ b/examples/imapresource/imapserverproxy.cpp
@@ -80,6 +80,21 @@ static KAsync::Job<T> runJob(KJob *job, const std::function<T(KJob*)> &f)
80 }); 80 });
81} 81}
82 82
83static int translateImapError(int error)
84{
85 switch (error) {
86 case KJob::UserDefinedError:
87 return Imap::ConnectionLost;
88 case KIMAP2::LoginJob::ErrorCode::ERR_HOST_NOT_FOUND:
89 return Imap::HostNotFoundError;
90 case KIMAP2::LoginJob::ErrorCode::ERR_COULD_NOT_CONNECT:
91 return Imap::CouldNotConnectError;
92 case KIMAP2::LoginJob::ErrorCode::ERR_SSL_HANDSHAKE_FAILED:
93 return Imap::SslHandshakeError;
94 }
95 return Imap::UnknownError;
96}
97
83static KAsync::Job<void> runJob(KJob *job) 98static KAsync::Job<void> runJob(KJob *job)
84{ 99{
85 return KAsync::start<void>([job](KAsync::Future<void> &future) { 100 return KAsync::start<void>([job](KAsync::Future<void> &future) {
@@ -87,7 +102,8 @@ static KAsync::Job<void> runJob(KJob *job)
87 SinkTrace() << "Job done: " << job->metaObject()->className(); 102 SinkTrace() << "Job done: " << job->metaObject()->className();
88 if (job->error()) { 103 if (job->error()) {
89 SinkWarning() << "Job failed: " << job->errorString() << job->metaObject()->className(); 104 SinkWarning() << "Job failed: " << job->errorString() << job->metaObject()->className();
90 future.setError(job->error(), job->errorString()); 105 auto proxyError = translateImapError(job->error());
106 future.setError(proxyError, job->errorString());
91 } else { 107 } else {
92 future.setFinished(); 108 future.setFinished();
93 } 109 }
@@ -166,20 +182,6 @@ KAsync::Job<void> ImapServerProxy::login(const QString &username, const QString
166 // SinkTrace() << "Found personal namespaces: " << mNamespaces.personal; 182 // SinkTrace() << "Found personal namespaces: " << mNamespaces.personal;
167 // SinkTrace() << "Found shared namespaces: " << mNamespaces.shared; 183 // SinkTrace() << "Found shared namespaces: " << mNamespaces.shared;
168 // SinkTrace() << "Found user namespaces: " << mNamespaces.user; 184 // SinkTrace() << "Found user namespaces: " << mNamespaces.user;
169 }).then([=] (const KAsync::Error &error) {
170 if (error) {
171 switch (error.errorCode) {
172 case KIMAP2::LoginJob::ErrorCode::ERR_HOST_NOT_FOUND:
173 return KAsync::error(HostNotFoundError, "Host not found: " + error.errorMessage);
174 case KIMAP2::LoginJob::ErrorCode::ERR_COULD_NOT_CONNECT:
175 return KAsync::error(CouldNotConnectError, "Failed to connect: " + error.errorMessage);
176 case KIMAP2::LoginJob::ErrorCode::ERR_SSL_HANDSHAKE_FAILED:
177 return KAsync::error(SslHandshakeError, "Ssl handshake failed: " + error.errorMessage);
178 default:
179 return KAsync::error(error);
180 }
181 }
182 return KAsync::null();
183 }); 185 });
184} 186}
185 187