diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-08-28 17:19:51 -0600 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-08-28 17:19:51 -0600 |
commit | 1ba34f8b16cd06a74ff96dfae803ce4b0521652b (patch) | |
tree | 7ace2b8ef72a5af1ce76d426974e148a982d2406 /examples | |
parent | 7669eeecdd394e1dd9ee8c2fa06edb948a410f6b (diff) | |
download | sink-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')
-rw-r--r-- | examples/imapresource/imapresource.cpp | 2 | ||||
-rw-r--r-- | examples/imapresource/imapserverproxy.cpp | 32 | ||||
-rw-r--r-- | examples/imapresource/imapserverproxy.h | 4 |
3 files changed, 22 insertions, 16 deletions
diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp index 0c0c134..3ae7fd7 100644 --- a/examples/imapresource/imapresource.cpp +++ b/examples/imapresource/imapresource.cpp | |||
@@ -511,6 +511,8 @@ public: | |||
511 | return {ApplicationDomain::LoginError, error.errorMessage}; | 511 | return {ApplicationDomain::LoginError, error.errorMessage}; |
512 | case Imap::HostNotFoundError: | 512 | case Imap::HostNotFoundError: |
513 | return {ApplicationDomain::NoServerError, error.errorMessage}; | 513 | return {ApplicationDomain::NoServerError, error.errorMessage}; |
514 | case Imap::ConnectionLost: | ||
515 | return {ApplicationDomain::ConnectionLostError, error.errorMessage}; | ||
514 | default: | 516 | default: |
515 | return {ApplicationDomain::UnknownError, error.errorMessage}; | 517 | return {ApplicationDomain::UnknownError, error.errorMessage}; |
516 | } | 518 | } |
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 | ||
83 | static 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 | |||
83 | static KAsync::Job<void> runJob(KJob *job) | 98 | static 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 | ||
diff --git a/examples/imapresource/imapserverproxy.h b/examples/imapresource/imapserverproxy.h index 82f4f58..f9b854b 100644 --- a/examples/imapresource/imapserverproxy.h +++ b/examples/imapresource/imapserverproxy.h | |||
@@ -33,7 +33,9 @@ enum ErrorCode { | |||
33 | NoError, | 33 | NoError, |
34 | HostNotFoundError, | 34 | HostNotFoundError, |
35 | CouldNotConnectError, | 35 | CouldNotConnectError, |
36 | SslHandshakeError | 36 | SslHandshakeError, |
37 | ConnectionLost, | ||
38 | UnknownError | ||
37 | }; | 39 | }; |
38 | 40 | ||
39 | namespace Flags | 41 | namespace Flags |