summaryrefslogtreecommitdiff
path: root/noncore/unsupported/mail2/libmail/imapresponse.h
Unidiff
Diffstat (limited to 'noncore/unsupported/mail2/libmail/imapresponse.h') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/unsupported/mail2/libmail/imapresponse.h531
1 files changed, 531 insertions, 0 deletions
diff --git a/noncore/unsupported/mail2/libmail/imapresponse.h b/noncore/unsupported/mail2/libmail/imapresponse.h
new file mode 100644
index 0000000..73435ee
--- a/dev/null
+++ b/noncore/unsupported/mail2/libmail/imapresponse.h
@@ -0,0 +1,531 @@
1#ifndef IMAPRESPONSE_H
2#define IMAPRESPONSE_H
3
4#include <qobject.h>
5
6 #define MAX_BODYPARTS 50
7
8class IMAPHandler;
9
10class IMAPResponseEnums
11{
12public:
13 enum IMAPResponseStatus {
14 OK, NO, BAD, PREAUTH, BYE, UnknownStatus = 0
15 };
16
17 enum IMAPResponseFlags {
18 Seen, Answered, Flagged, Deleted, Draft, Recent,
19 Noinferiors, Noselect, Marked, Unmarked, UnknownFlag = 0
20 };
21
22 enum IMAPResponseCode {
23 ALERT, NEWNAME, PARSE, PERMANENTFLAGS, READONLY, READWRITE,
24 TRYCREATE, UIDVALIDITY, UNSEEN, NoCode, UnknownCode = 0
25 };
26
27};
28
29class IMAPResponseAddress
30{
31public:
32 IMAPResponseAddress(QString name = 0, QString adl = 0, QString mailbox = 0, QString host = 0)
33 {
34 _name = name;
35 _adl = adl;
36 _mailbox = mailbox;
37 _host = host;
38 }
39
40 void setName(QString name) { _name = name; }
41 QString name() { return _name; }
42 void setAdl(QString adl) { _adl = adl; }
43 QString adl() { return _adl; }
44 void setMailbox(QString mailbox) { _mailbox = mailbox; }
45 QString mailbox() { return _mailbox; }
46 void setHost(QString host) { _host = host; }
47 QString host() { return _host; }
48
49 QString toString()
50 {
51 if (_name.isNull() && _mailbox.isNull() && _host.isNull())
52 return QString(0);
53 if (_name != _mailbox + "@" + _host)
54 return _name + " <" + _mailbox + "@" + _host + ">";
55 else
56 return _name;
57 }
58
59 QString email()
60 {
61 if (_host.isEmpty()) return _mailbox;
62 else return _mailbox + "@" + _host;
63 }
64
65private:
66 QString _name, _adl, _mailbox, _host;
67
68};
69
70class IMAPResponseAddressList : public QValueList<IMAPResponseAddress>
71{
72public:
73 IMAPResponseAddressList()
74 : QValueList<IMAPResponseAddress>()
75 {
76
77 }
78
79 QString toString()
80 {
81 QString string;
82 IMAPResponseAddressList::Iterator it;
83 for (it = this->begin(); it != this->end(); it++) {
84 QString tmp = (*it).toString();
85 if (!tmp.isNull() && string.isEmpty()) string = tmp;
86 else if (!tmp.isNull()) string += ", " + tmp;
87 }
88 return string;
89 }
90
91};
92
93class IMAPResponseBody
94{
95public:
96 void setData(QString data) { _data = data; }
97 QString data() { return _data; }
98
99private:
100 QString _data;
101
102};
103
104class IMAPResponseBodyPart : public IMAPResponseBody
105{
106public:
107 void setPart(QString part) { _part = part; }
108 QString part() { return _part; }
109
110private:
111 QString _part;
112
113};
114
115class IMAPResponseEnvelope
116{
117public:
118 void setMailDate(QString date) { _date = date; }
119 QString mailDate() { return _date; }
120 void setSubject(QString subject) { _subject = subject; }
121 QString subject() { return _subject; }
122 void addFrom(IMAPResponseAddress from) { _from.append(from); }
123 IMAPResponseAddressList from() { return _from; }
124 void addSender(IMAPResponseAddress sender) { _sender.append(sender); }
125 IMAPResponseAddressList sender() { return _sender; }
126 void addReplyTo(IMAPResponseAddress replyTo) { _replyTo.append(replyTo); }
127 IMAPResponseAddressList replyTo() { return _replyTo; }
128 void addTo(IMAPResponseAddress to) { _to.append(to); }
129 IMAPResponseAddressList to() { return _to; }
130 void addCc(IMAPResponseAddress cc) { _cc.append(cc); }
131 IMAPResponseAddressList cc() { return _cc; }
132 void addBcc(IMAPResponseAddress bcc) { _bcc.append(bcc); }
133 IMAPResponseAddressList bcc() { return _bcc; }
134 void setInReplyTo(QString inReplyTo) { _inReplyTo = inReplyTo; }
135 QString inReplyTo() { return _inReplyTo; }
136 void setMessageId(QString messageId) { _messageId = messageId; }
137 QString messageId() { return _messageId; }
138
139private:
140 QString _date, _subject, _inReplyTo, _messageId;
141 IMAPResponseAddressList _from, _sender, _replyTo, _to, _cc, _bcc;
142
143};
144
145class IMAPResponseStatusResponse : public IMAPResponseEnums
146{
147public:
148 IMAPResponseStatusResponse(IMAPResponseStatus status = (IMAPResponseStatus)0, QString comment = 0, IMAPResponseCode code = (IMAPResponseCode)0)
149 {
150 _status = status;
151 _comment = comment;
152 _code = code;
153 }
154
155 void setStatus(IMAPResponseStatus status) { _status = status; }
156 IMAPResponseStatus status() { return _status; }
157 void setComment(QString comment) { _comment = comment; }
158 QString comment() { return _comment; }
159 void setResponseCode(IMAPResponseCode code) { _code = code; }
160 IMAPResponseCode responseCode() { return _code; }
161
162 void setExitedUnexpected(bool exitu) { _exitu = exitu; }
163 bool exitedUnexpected() { return _exitu; }
164
165private:
166 IMAPResponseStatus _status;
167 QString _comment;
168 IMAPResponseCode _code;
169 bool _exitu;
170
171};
172
173class IMAPResponseOK : public IMAPResponseEnums
174{
175public:
176 IMAPResponseOK(QString comment = 0, IMAPResponseCode code = (IMAPResponseCode)0)
177 {
178 _comment = comment;
179 _code = code;
180 }
181
182 void setComment(QString comment) { _comment = comment; }
183 QString comment() { return _comment; }
184 void setResponseCode(IMAPResponseCode code) { _code = code; }
185 IMAPResponseCode responseCode() { return _code; }
186
187private:
188 QString _comment;
189 IMAPResponseCode _code;
190
191};
192
193class IMAPResponseNO : public IMAPResponseEnums
194{
195public:
196 IMAPResponseNO(QString comment = 0, IMAPResponseCode code = (IMAPResponseCode)0)
197 {
198 _comment = comment;
199 _code = code;
200 }
201
202 void setComment(QString comment) { _comment = comment; }
203 QString comment() { return _comment; }
204 void setResponseCode(IMAPResponseCode code) { _code = code; }
205 IMAPResponseCode responseCode() { return _code; }
206
207private:
208 QString _comment;
209 IMAPResponseCode _code;
210
211};
212
213class IMAPResponseBAD : public IMAPResponseEnums
214{
215public:
216 IMAPResponseBAD(QString comment = 0, IMAPResponseCode code = (IMAPResponseCode)0)
217 {
218 _comment = comment;
219 _code = code;
220 }
221
222 void setComment(QString comment) { _comment = comment; }
223 QString comment() { return _comment; }
224 void setResponseCode(IMAPResponseCode code) { _code = code; }
225 IMAPResponseCode responseCode() { return _code; }
226
227private:
228 QString _comment;
229 IMAPResponseCode _code;
230
231};
232
233class IMAPResponseCAPABILITY
234{
235public:
236 IMAPResponseCAPABILITY(QStringList capabilities = 0)
237 {
238 _capabilities = capabilities;
239 }
240
241 void setCapabilities(QStringList capabilities) { _capabilities = capabilities; }
242 QStringList capabilities() { return _capabilities; }
243
244private:
245 QStringList _capabilities;
246
247};
248
249class IMAPResponseLIST : public IMAPResponseEnums
250{
251public:
252 IMAPResponseLIST(QValueList<IMAPResponseFlags> flags = QValueList<IMAPResponseFlags>(), QString folderSeparator = 0, QString folder = 0)
253 {
254 _flags = flags;
255 _folderSeparator = folderSeparator;
256 _folder = folder;
257 }
258
259 void setFlags(QValueList<IMAPResponseFlags> flags) { _flags = flags; }
260 QValueList<IMAPResponseFlags> flags() { return _flags; }
261 void setFolderSeparator(QString folderSeparator) { _folderSeparator = folderSeparator; }
262 QString folderSeparator() { return _folderSeparator; }
263 void setFolder(QString folder) { _folder = folder; }
264 QString folder() { return _folder; }
265
266private:
267 QValueList<IMAPResponseFlags> _flags;
268 QString _folderSeparator, _folder;
269
270};
271
272class IMAPResponseLSUB : public IMAPResponseEnums
273{
274public:
275 IMAPResponseLSUB(QValueList<IMAPResponseFlags> flags = QValueList<IMAPResponseFlags>(), QString folderSeperator = 0, QString folder = 0)
276 {
277 _flags = flags;
278 _folderSeperator = folderSeperator;
279 _folder = folder;
280 }
281
282 void setFlags(QValueList<IMAPResponseFlags> flags) { _flags = flags; }
283 QValueList<IMAPResponseFlags> flags() { return _flags; }
284 void setFolderSeperator(QString folderSeperator) { _folderSeperator = folderSeperator; }
285 QString folderSeperator() { return _folderSeperator; }
286 void setFolder(QString folder) { _folder = folder; }
287 QString folder() { return _folder; }
288
289private:
290 QValueList<IMAPResponseFlags> _flags;
291 QString _folderSeperator, _folder;
292
293};
294
295class IMAPResponseSTATUS
296{
297public:
298 IMAPResponseSTATUS(QString mailbox = 0, QString messages = 0, QString recent = 0, QString uidnext = 0, QString uidvalidity = 0, QString unseen = 0)
299 {
300 _mailbox = mailbox;
301 _messages = messages;
302 _recent = recent;
303 _uidnext = uidnext;
304 _uidvalidity = uidvalidity;
305 _unseen = unseen;
306 }
307
308 void setMailbox(QString &mailbox) { _mailbox = mailbox; }
309 QString mailbox() { return _mailbox; }
310 void setMessages(QString &messages) { _messages = messages; }
311 QString messages() { return _messages; }
312 void setRecent(QString &recent) { _recent = recent; }
313 QString recent() { return _recent; }
314 void setUidnext(QString &uidnext) { _uidnext = uidnext; }
315 QString uidnext() { return _uidnext; }
316 void setUidvalidity(QString &uidvalidity) { _uidvalidity = uidvalidity; }
317 QString uidvalidity() { return _uidvalidity; }
318 void setUnseen(QString &unseen) { _unseen = unseen; }
319 QString unseen() { return _unseen; }
320
321private:
322 QString _mailbox, _messages, _recent, _uidnext, _uidvalidity, _unseen;
323
324};
325
326class IMAPResponseSEARCH
327{
328public:
329 IMAPResponseSEARCH(QStringList mails = 0)
330 {
331 _mails = mails;
332 }
333
334 void setMails(QStringList mails) { _mails = mails; }
335 QStringList mails() { return _mails; }
336
337private:
338 QStringList _mails;
339
340};
341
342class IMAPResponseFLAGS : public IMAPResponseEnums
343{
344public:
345 IMAPResponseFLAGS(QValueList<IMAPResponseFlags> flags = QValueList<IMAPResponseFlags>())
346 {
347 _flags = flags;
348 }
349
350 void setFlags(QValueList<IMAPResponseFlags> flags) { _flags = flags; }
351 QValueList<IMAPResponseFlags> flags() { return _flags; }
352
353private:
354 QValueList<IMAPResponseFlags> _flags;
355
356};
357
358class IMAPResponseEXISTS
359{
360public:
361 IMAPResponseEXISTS(QString mails = 0)
362 {
363 _mails = mails;
364 }
365
366 void setMails(QString mails) { _mails = mails; }
367 QString mails() { return _mails; }
368
369private:
370 QString _mails;
371
372};
373
374class IMAPResponseRECENT
375{
376public:
377 IMAPResponseRECENT(QString mails = 0)
378 {
379 _mails = mails;
380 }
381
382 void setMails(QString mails) { _mails = mails; }
383 QString mails() { return _mails; }
384
385private:
386 QString _mails;
387
388};
389
390class IMAPResponseEXPUNGE
391{
392public:
393 IMAPResponseEXPUNGE(QString mails = 0)
394 {
395 _mails = mails;
396 }
397
398 void setMails(QString mails) { _mails = mails; }
399 QString mails() { return _mails; }
400
401private:
402 QString _mails;
403
404};
405
406class IMAPResponseFETCH : public IMAPResponseEnums
407{
408public:
409 void setEnvelope(IMAPResponseEnvelope envelope) { _envelope = envelope; }
410 IMAPResponseEnvelope envelope() { return _envelope; }
411 void setFlags(QValueList<IMAPResponseFlags> flags) { _flags = flags; }
412 QValueList<IMAPResponseFlags> flags() { return _flags; }
413 void setInternalDate(QString idate) { _idate = idate; }
414 QString internalDate() { return _idate; }
415 void setRFC822Size(QString rfc822size) { _rfc822size = rfc822size; }
416 QString RFC822Size() { return _rfc822size; }
417 void setUid(QString uid) { _uid = uid; }
418 QString uid() { return _uid; }
419
420 void setBody(QString body) { _body = body; }
421 QString body() { return _body; }
422 void addBodyPart(IMAPResponseBodyPart part) { _bodyParts.append(part); }
423 void setBodyParts(QValueList<IMAPResponseBodyPart> parts) { _bodyParts = parts; }
424 QValueList<IMAPResponseBodyPart> bodyParts() { return _bodyParts; }
425 IMAPResponseBodyPart bodyPart(int part) { return _bodyParts[part]; }
426 void setRfc822(QString rfc822) { _rfc822 = rfc822; }
427 QString rfc822() { return _rfc822; }
428 void setRfc822Header(QString rfc822Header) { _rfc822Header = rfc822Header; }
429 QString rfc822Header() { return _rfc822Header; }
430 void setRfc822Text(QString rfc822Text) { _rfc822Text = rfc822Text; }
431 QString rfc822Text() { return _rfc822Text; }
432
433private:
434 IMAPResponseEnvelope _envelope;
435 QValueList<IMAPResponseFlags> _flags;
436 QString _idate, _rfc822size, _uid, _body, _rfc822, _rfc822Header, _rfc822Text;
437 QValueList<IMAPResponseBodyPart> _bodyParts;
438
439};
440
441class IMAPResponse : public IMAPResponseEnums
442{
443public:
444 void setTag(QString tag) { _tag = tag; }
445 QString tag() { return _tag; }
446
447 void setImapHandler(IMAPHandler *handler) { _handler = handler; }
448 IMAPHandler *imapHandler() { return _handler; }
449
450 void setStatusResponse(IMAPResponseStatusResponse response) { _response = response; }
451 IMAPResponseStatusResponse statusResponse() { return _response; }
452
453 void addOK(IMAPResponseOK ok) { _okl.append(ok); }
454 void addNO(IMAPResponseNO no) { _nol.append(no); }
455 void addBAD(IMAPResponseBAD bad) { _badl.append(bad); }
456 void addCAPABILITY(IMAPResponseCAPABILITY capability) { _capabilityl.append(capability); }
457 void addLIST(IMAPResponseLIST list) { _listl.append(list); }
458 void addLSUB(IMAPResponseLSUB lsub) { _lsubl.append(lsub); }
459 void addSTATUS(IMAPResponseSTATUS status) { _statusl.append(status); }
460 void addSEARCH(IMAPResponseSEARCH search) { _searchl.append(search); }
461 void addFLAGS(IMAPResponseFLAGS flags) { _flagsl.append(flags); }
462 void addEXISTS(IMAPResponseEXISTS exists) { _existsl.append(exists); }
463 void addRECENT(IMAPResponseRECENT recent) { _recentl.append(recent); }
464 void addEXPUNGE(IMAPResponseEXPUNGE expunge) { _expungel.append(expunge); }
465 void addFETCH(IMAPResponseFETCH fetch) { _fetchl.append(fetch); }
466
467 QValueList<IMAPResponseOK> OK() { return _okl; }
468 QValueList<IMAPResponseNO> NO() { return _nol; }
469 QValueList<IMAPResponseBAD> BAD() { return _badl; }
470 QValueList<IMAPResponseCAPABILITY> CAPABILITY() { return _capabilityl; }
471 QValueList<IMAPResponseLIST> LIST() { return _listl; }
472 QValueList<IMAPResponseLSUB> LSUB() { return _lsubl; }
473 QValueList<IMAPResponseSTATUS> STATUS() { return _statusl; }
474 QValueList<IMAPResponseSEARCH> SEARCH() { return _searchl; }
475 QValueList<IMAPResponseFLAGS> FLAGS() { return _flagsl; }
476 QValueList<IMAPResponseEXISTS> EXISTS() { return _existsl; }
477 QValueList<IMAPResponseRECENT> RECENT() { return _recentl; }
478 QValueList<IMAPResponseEXPUNGE> EXPUNGE() { return _expungel; }
479 QValueList<IMAPResponseFETCH> FETCH() { return _fetchl; }
480
481private:
482 QString _tag;
483 IMAPResponseStatusResponse _response;
484
485 IMAPHandler *_handler;
486
487 QValueList<IMAPResponseOK> _okl;
488 QValueList<IMAPResponseNO> _nol;
489 QValueList<IMAPResponseBAD> _badl;
490 QValueList<IMAPResponseCAPABILITY> _capabilityl;
491 QValueList<IMAPResponseLIST> _listl;
492 QValueList<IMAPResponseLSUB> _lsubl;
493 QValueList<IMAPResponseSTATUS> _statusl;
494 QValueList<IMAPResponseSEARCH> _searchl;
495 QValueList<IMAPResponseFLAGS> _flagsl;
496 QValueList<IMAPResponseEXISTS> _existsl;
497 QValueList<IMAPResponseRECENT> _recentl;
498 QValueList<IMAPResponseEXPUNGE> _expungel;
499 QValueList<IMAPResponseFETCH> _fetchl;
500
501};
502
503class IMAPResponseParser : public QObject, public IMAPResponseEnums
504{
505 Q_OBJECT
506
507public:
508 IMAPResponseParser(const QString &data);
509
510 IMAPResponse response();
511
512signals:
513 void needMoreData(const QString &comment);
514
515protected:
516 void parseResponse(const QString &data, bool tagged = false);
517
518 QStringList splitData(const QString &data, bool withBrackets);
519 void parseParenthesizedList(const QString &data, QStringList &parsed);
520 void splitTagData(const QString &line, QString &tag, QString &data);
521 QString removeLimiters(QString &string, const QChar &sl = '"', const QChar &el = '"');
522 IMAPResponseCode getResponseCode(const QString &line);
523 QValueList<IMAPResponseFlags> parseFlagList(const QStringList &flags);
524
525private:
526 IMAPResponse _iresponse;
527
528};
529
530#endif
531