summaryrefslogtreecommitdiff
path: root/noncore/unsupported/mail2/libmail/imaphandler.cpp
Unidiff
Diffstat (limited to 'noncore/unsupported/mail2/libmail/imaphandler.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/unsupported/mail2/libmail/imaphandler.cpp334
1 files changed, 334 insertions, 0 deletions
diff --git a/noncore/unsupported/mail2/libmail/imaphandler.cpp b/noncore/unsupported/mail2/libmail/imaphandler.cpp
new file mode 100644
index 0000000..66c92c5
--- a/dev/null
+++ b/noncore/unsupported/mail2/libmail/imaphandler.cpp
@@ -0,0 +1,334 @@
1#include "imapresponse.h"
2#include "imaphandler.h"
3#include "imapbase.h"
4
5IMAPHandler::IMAPHandler(const Account &account)
6 : QObject(), _account(account)
7{
8 _loggingin = false;
9 _loggedin = false;
10 _tag = 0;
11 _ibase = new IMAPBase(account);
12
13 connect(_ibase, SIGNAL(dataReceived(const QString &)), SLOT(slotDataReceived(const QString &)));
14 connect(_ibase, SIGNAL(lookingUpHost()), SLOT(slotLookingUpHost()));
15 connect(_ibase, SIGNAL(hostFound()), SLOT(slotHostFound()));
16 connect(_ibase, SIGNAL(connected()), SLOT(slotConnected()));
17 connect(_ibase, SIGNAL(disconnected()), SLOT(slotDisconnected()));
18 connect(_ibase, SIGNAL(error(int)), SLOT(slotError(int)));
19}
20
21void IMAPHandler::doLogin()
22{
23 if (_loggedin) return;
24 if (_loggingin) return;
25
26 _loggingin = true;
27 iLogin(_account.user(), _account.pass());
28}
29
30QString IMAPHandler::iCapability()
31{
32 _ibase->sendCommand(QString("%1 CAPABILITY\r\n")
33 .arg(tag()));
34 return tag(false);
35}
36
37QString IMAPHandler::iNoop()
38{
39 _ibase->sendCommand(QString("%1 NOOP\r\n")
40 .arg(tag()));
41 return tag(false);
42}
43
44QString IMAPHandler::iLogout()
45{
46 _ibase->sendCommand(QString("%1 LOGOUT\r\n")
47 .arg(tag()));
48 return tag(false);
49}
50
51QString IMAPHandler::iAuthenticate(const QString &mechanism)
52{
53 _ibase->sendCommand(QString("%1 AUTHENTICATE \"%2\"\r\n")
54 .arg(tag())
55 .arg(escape(mechanism)));
56 return tag(false);
57}
58
59QString IMAPHandler::iLogin(const QString &user, const QString &pass)
60{
61 _ibase->sendCommand(QString("%1 LOGIN \"%2\" \"%3\"\r\n")
62 .arg(tag())
63 .arg(escape(user))
64 .arg(escape(pass)));
65 return tag(false);
66}
67
68QString IMAPHandler::iSelect(const QString &mailbox)
69{
70 doLogin();
71
72 _ibase->sendCommand(QString("%1 SELECT \"%2\"\r\n")
73 .arg(tag())
74 .arg(escape(mailbox)));
75 return tag(false);
76}
77
78QString IMAPHandler::iExamine(const QString &mailbox)
79{
80 doLogin();
81
82 _ibase->sendCommand(QString("%1 EXAMINE \"%2\"\r\n")
83 .arg(tag())
84 .arg(escape(mailbox)));
85 return tag(false);
86}
87
88QString IMAPHandler::iCreate(const QString &mailbox)
89{
90 doLogin();
91
92 _ibase->sendCommand(QString("%1 CREATE \"%2\"\r\n")
93 .arg(tag())
94 .arg(escape(mailbox)));
95 return tag(false);
96}
97
98QString IMAPHandler::iDelete(const QString &mailbox)
99{
100 doLogin();
101
102 _ibase->sendCommand(QString("%1 DELETE \"%2\"\r\n")
103 .arg(tag())
104 .arg(escape(mailbox)));
105 return tag(false);
106}
107
108QString IMAPHandler::iRename(const QString &mailbox, const QString &newMailbox)
109{
110 doLogin();
111
112 _ibase->sendCommand(QString("%1 RENAME \"%2\" \"%3\"\r\n")
113 .arg(tag())
114 .arg(escape(mailbox))
115 .arg(escape(newMailbox)));
116 return tag(false);
117}
118
119QString IMAPHandler::iSubscribe(const QString &mailbox)
120{
121 doLogin();
122
123 _ibase->sendCommand(QString("%1 SUBSCRIBE \"%2\"\r\n")
124 .arg(tag())
125 .arg(escape(mailbox)));
126 return tag(false);
127}
128
129QString IMAPHandler::iUnsubscribe(const QString &mailbox)
130{
131 doLogin();
132
133 _ibase->sendCommand(QString("%1 UNSUBSCRIBE \"%2\"\r\n")
134 .arg(tag())
135 .arg(escape(mailbox)));
136 return tag(false);
137}
138
139QString IMAPHandler::iList(const QString &reference, const QString &mailbox)
140{
141 doLogin();
142
143 _ibase->sendCommand(QString("%1 LIST \"%2\" \"%3\"\r\n")
144 .arg(tag())
145 .arg(escape(reference))
146 .arg(escape(mailbox)));
147 return tag(false);
148}
149
150QString IMAPHandler::iLsub(const QString &reference, const QString &mailbox)
151{
152 doLogin();
153
154 _ibase->sendCommand(QString("%1 LSUB \"%2\" \"%3\"\r\n")
155 .arg(tag())
156 .arg(escape(reference))
157 .arg(escape(mailbox)));
158 return tag(false);
159}
160
161QString IMAPHandler::iStatus(const QString &mailbox, const QString &items)
162{
163 doLogin();
164
165 _ibase->sendCommand(QString("%1 STATUS \"%2\" (%3)\r\n")
166 .arg(tag())
167 .arg(escape(mailbox))
168 .arg(escape(items)));
169 return tag(false);
170}
171
172QString IMAPHandler::iAppend(const QString &mailbox, const QString &literal, const QString &flags, const QString &datetime = 0)
173{
174 doLogin();
175
176 _ibase->sendCommand(QString("%1 APPEND \"%2\" (%3) \"%4\" {%5}\r\n%6\r\n")
177 .arg(tag())
178 .arg(escape(mailbox))
179 .arg(flags)
180 .arg(escape(datetime))
181 .arg(literal.length())
182 .arg(literal));
183 return tag(false);
184}
185
186QString IMAPHandler::iCheck()
187{
188 doLogin();
189
190 _ibase->sendCommand(QString("%1 CHECK\r\n")
191 .arg(tag()));
192 return tag(false);
193}
194
195QString IMAPHandler::iClose()
196{
197 doLogin();
198
199 _ibase->sendCommand(QString("%1 CLOSE\r\n")
200 .arg(tag()));
201 return tag(false);
202}
203
204QString IMAPHandler::iExpunge()
205{
206 doLogin();
207
208 _ibase->sendCommand(QString("%1 EXPUNGE\r\n")
209 .arg(tag()));
210 return tag(false);
211}
212
213QString IMAPHandler::iSearch(const QString &search, const QString &charset)
214{
215 doLogin();
216
217 _ibase->sendCommand(QString("%1 SEARCH %2 %3\r\n")
218 .arg(tag())
219 .arg(charset.isEmpty() ? QString(0) : escape(charset))
220 .arg(search));
221 return tag(false);
222}
223
224QString IMAPHandler::iFetch(const QString &message, const QString &items)
225{
226 doLogin();
227
228 _ibase->sendCommand(QString("%1 FETCH %2 (%3)\r\n")
229 .arg(tag())
230 .arg(message)
231 .arg(items));
232 return tag(false);
233}
234
235QString IMAPHandler::iStore(const QString &message, const QString &items)
236{
237 doLogin();
238
239 _ibase->sendCommand(QString("%1 STORE %2 %3\r\n")
240 .arg(tag())
241 .arg(message)
242 .arg(items));
243 return tag(false);
244}
245
246QString IMAPHandler::iCopy(const QString &message, const QString &mailbox)
247{
248 doLogin();
249
250 _ibase->sendCommand(QString("%1 COPY %2 \"%3\"\r\n")
251 .arg(tag())
252 .arg(message)
253 .arg(escape(mailbox)));
254 return tag(false);
255}
256
257QString IMAPHandler::iUid(const QString &command, const QString &arguments)
258{
259 doLogin();
260
261 _ibase->sendCommand(QString("%1 UID %2 %3\r\n")
262 .arg(tag())
263 .arg(command)
264 .arg(arguments));
265 return tag(false);
266}
267
268QString IMAPHandler::iX(const QString &commandAtom, const QString &arguments)
269{
270 doLogin();
271
272 _ibase->sendCommand(QString("%1 X%2 %3\r\n")
273 .arg(tag())
274 .arg(commandAtom)
275 .arg(arguments));
276 return tag(false);
277}
278
279QString IMAPHandler::escape(const QString &in)
280{
281 QString in_ = in;
282 return in_.replace(QRegExp("\""), "\\\"");
283}
284
285QString IMAPHandler::tag(bool count)
286{
287 return QString("a%1").arg(count ? _tag++ : _tag);
288}
289
290void IMAPHandler::slotDataReceived(const QString &data)
291{
292 IMAPResponseParser parser(data);
293 IMAPResponse response = parser.response();
294 response.setImapHandler(this);
295
296 if (!_loggingin) emit gotResponse(response);
297 else {
298 if (response.statusResponse().status() == IMAPResponseEnums::OK) {
299 _loggingin = false;
300 _loggedin = true;
301 qWarning("OK. Logged in. Leaving loggingin state.");
302 } else {
303 _loggingin = false;
304 emit IMAPError(IMAPBase::IMAPErrLoginFailed);
305 }
306 }
307}
308
309void IMAPHandler::slotLookingUpHost()
310{
311 emit IMAPLookingUpHost();
312}
313
314void IMAPHandler::slotHostFound()
315{
316 emit IMAPHostFound();
317}
318
319void IMAPHandler::slotConnected()
320{
321 emit IMAPConnected();
322}
323
324void IMAPHandler::slotDisconnected()
325{
326 _loggedin = false;
327 emit IMAPDisconnected();
328}
329
330void IMAPHandler::slotError(int err)
331{
332 emit IMAPError(err);
333}
334