diff options
Diffstat (limited to 'examples/imapresource/imapserverproxy.cpp')
-rw-r--r-- | examples/imapresource/imapserverproxy.cpp | 20 |
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"; | |||
62 | const char* Imap::Capabilities::Uidplus = "UIDPLUS"; | 62 | const char* Imap::Capabilities::Uidplus = "UIDPLUS"; |
63 | const char* Imap::Capabilities::Condstore = "CONDSTORE"; | 63 | const char* Imap::Capabilities::Condstore = "CONDSTORE"; |
64 | 64 | ||
65 | static int translateImapError(int error) | 65 | static 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(); |