summaryrefslogtreecommitdiff
authoralwin <alwin>2003-12-09 23:41:24 (UTC)
committer alwin <alwin>2003-12-09 23:41:24 (UTC)
commitc361d36374d9c333ffe4b853067858df5636e1a5 (patch) (unidiff)
treeed99a2a14aba66f2caad15a3467291c12313d048
parentcf0db32ce938c3254a8153ec3ac390c7282af5d0 (diff)
downloadopie-c361d36374d9c333ffe4b853067858df5636e1a5.zip
opie-c361d36374d9c333ffe4b853067858df5636e1a5.tar.gz
opie-c361d36374d9c333ffe4b853067858df5636e1a5.tar.bz2
all header stuff will be parsed now
RecMail got the unique message id for reply reference
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/ProgrammersDoc/ReceivingMails.diabin3031 -> 3086 bytes
-rw-r--r--noncore/net/mail/imapwrapper.cpp170
-rw-r--r--noncore/net/mail/imapwrapper.h6
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.cpp170
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.h6
-rw-r--r--noncore/net/mail/libmailwrapper/mailtypes.cpp33
-rw-r--r--noncore/net/mail/libmailwrapper/mailtypes.h10
-rw-r--r--noncore/net/mail/mailtypes.cpp33
-rw-r--r--noncore/net/mail/mailtypes.h10
9 files changed, 228 insertions, 210 deletions
diff --git a/noncore/net/mail/ProgrammersDoc/ReceivingMails.dia b/noncore/net/mail/ProgrammersDoc/ReceivingMails.dia
index dcef8c8..08c6434 100644
--- a/noncore/net/mail/ProgrammersDoc/ReceivingMails.dia
+++ b/noncore/net/mail/ProgrammersDoc/ReceivingMails.dia
Binary files differ
diff --git a/noncore/net/mail/imapwrapper.cpp b/noncore/net/mail/imapwrapper.cpp
index 725dcc9..5ce140e 100644
--- a/noncore/net/mail/imapwrapper.cpp
+++ b/noncore/net/mail/imapwrapper.cpp
@@ -196,57 +196,54 @@ QList<IMAPFolder>* IMAPwrapper::listFolders()
196 if (temp.lower()=="inbox") 196 if (temp.lower()=="inbox")
197 continue; 197 continue;
198 folders->append(new IMAPFolder(temp)); 198 folders->append(new IMAPFolder(temp));
199 199
200 } 200 }
201 } else { 201 } else {
202 qDebug("error fetching folders %s",m_imap->response); 202 qDebug("error fetching folders %s",m_imap->response);
203 } 203 }
204 mailimap_list_result_free( result ); 204 mailimap_list_result_free( result );
205 return folders; 205 return folders;
206} 206}
207 207
208RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att) 208RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
209{ 209{
210 RecMail * m = 0; 210 RecMail * m = 0;
211 mailimap_msg_att_item *item=0; 211 mailimap_msg_att_item *item=0;
212 bool named_from = false; 212 bool named_from = false;
213 QString from,date,subject; 213 QString from,date,subject;
214 date = from = subject = ""; 214 date = from = subject = "";
215 clistcell *current,*c,*cf, *current_from = NULL; 215 clistcell *current,*c,*cf, *current_from = NULL;
216 mailimap_address * current_address = NULL; 216 mailimap_address * current_address = NULL;
217 mailimap_msg_att_dynamic*flist; 217 mailimap_msg_att_dynamic*flist;
218 mailimap_flag_fetch*cflag; 218 mailimap_flag_fetch*cflag;
219 QBitArray mFlags(7); 219 QBitArray mFlags(7);
220 QStringList addresslist;
220 221
221 if (!m_att) { 222 if (!m_att) {
222 return m; 223 return m;
223 } 224 }
224 225
225#if 0
226 MAILIMAP_FLAG_KEYWORD, /* keyword flag */
227 MAILIMAP_FLAG_EXTENSION, /* \extension flag */
228#endif
229 c = clist_begin(m_att->list); 226 c = clist_begin(m_att->list);
230 while ( c ) { 227 while ( c ) {
231 current = c; 228 current = c;
232 c = c->next; 229 c = c->next;
233 item = (mailimap_msg_att_item*)current->data; 230 item = (mailimap_msg_att_item*)current->data;
234 if (item->type!=MAILIMAP_MSG_ATT_ITEM_STATIC) { 231 if (item->type!=MAILIMAP_MSG_ATT_ITEM_STATIC) {
235 flist = (mailimap_msg_att_dynamic*)item->msg_att_dyn; 232 flist = (mailimap_msg_att_dynamic*)item->msg_att_dyn;
236 if (!flist->list) { 233 if (!flist->list) {
237 continue; 234 continue;
238 } 235 }
239 cf = flist->list->first; 236 cf = flist->list->first;
240 while (cf) { 237 while (cf) {
241 cflag = (mailimap_flag_fetch*)cf->data; 238 cflag = (mailimap_flag_fetch*)cf->data;
242 if (cflag->type==MAILIMAP_FLAG_FETCH_OTHER && cflag->flag!=0) { 239 if (cflag->type==MAILIMAP_FLAG_FETCH_OTHER && cflag->flag!=0) {
243 switch (cflag->flag->type) { 240 switch (cflag->flag->type) {
244 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */ 241 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */
245 mFlags.setBit(FLAG_ANSWERED); 242 mFlags.setBit(FLAG_ANSWERED);
246 break; 243 break;
247 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */ 244 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */
248 mFlags.setBit(FLAG_FLAGGED); 245 mFlags.setBit(FLAG_FLAGGED);
249 break; 246 break;
250 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */ 247 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */
251 mFlags.setBit(FLAG_DELETED); 248 mFlags.setBit(FLAG_DELETED);
252 break; 249 break;
@@ -255,240 +252,217 @@ RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
255 break; 252 break;
256 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */ 253 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */
257 mFlags.setBit(FLAG_DRAFT); 254 mFlags.setBit(FLAG_DRAFT);
258 break; 255 break;
259 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */ 256 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */
260 break; 257 break;
261 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */ 258 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */
262 break; 259 break;
263 default: 260 default:
264 break; 261 break;
265 } 262 }
266 } else if (cflag->type==MAILIMAP_FLAG_FETCH_RECENT) { 263 } else if (cflag->type==MAILIMAP_FLAG_FETCH_RECENT) {
267 mFlags.setBit(FLAG_RECENT); 264 mFlags.setBit(FLAG_RECENT);
268 } 265 }
269 cf = cf->next; 266 cf = cf->next;
270 } 267 }
271 continue; 268 continue;
272 } 269 }
273 if ( item->msg_att_static->type == MAILIMAP_MSG_ATT_RFC822_HEADER ) { 270 if ( item->msg_att_static->type == MAILIMAP_MSG_ATT_RFC822_HEADER ) {
274 qDebug( "header: \n%s", item->msg_att_static->rfc822_header ); 271 qDebug( "header: \n%s", item->msg_att_static->rfc822_header );
275 } else if (item->msg_att_static->type==MAILIMAP_MSG_ATT_ENVELOPE) { 272 } else if (item->msg_att_static->type==MAILIMAP_MSG_ATT_ENVELOPE) {
276 mailimap_envelope * head = item->msg_att_static->env; 273 mailimap_envelope * head = item->msg_att_static->env;
277 date = head->date; 274 date = head->date;
278 subject = head->subject; 275 subject = head->subject;
279 if (head->from!=NULL) 276 m = new RecMail();
280 current_from = head->from->list->first; 277 if (head->from!=NULL) {
281 while (current_from != NULL) { 278 addresslist = address_list_to_stringlist(head->from->list);
282 from = ""; 279 if (addresslist.count()) {
283 named_from = false; 280 from = addresslist.first();
284 current_address=(mailimap_address*)current_from->data;
285 current_from = current_from->next;
286 if (current_address->personal_name){
287 from+=QString(current_address->personal_name);
288 from+=" ";
289 named_from = true;
290 }
291 if (named_from && (current_address->mailbox_name || current_address->host_name)) {
292 from+="<";
293 }
294 if (current_address->mailbox_name) {
295 from+=QString(current_address->mailbox_name);
296 from+="@";
297 }
298 if (current_address->host_name) {
299 from+=QString(current_address->host_name);
300 }
301 if (named_from && (current_address->mailbox_name || current_address->host_name)) {
302 from+=">";
303 } 281 }
304 } 282 }
305 qDebug("header: \nFrom: %s\nSubject: %s\nDate: %s", 283 if (head->to!=NULL) {
306 from.latin1(), 284 addresslist = address_list_to_stringlist(head->to->list);
307 subject.latin1(),date.latin1()); 285 m->setTo(addresslist);
308 m = new RecMail(); 286 }
287 if (head->cc!=NULL) {
288 addresslist = address_list_to_stringlist(head->cc->list);
289 m->setCC(addresslist);
290 }
291 if (head->bcc!=NULL) {
292 addresslist = address_list_to_stringlist(head->bcc->list);
293 m->setBcc(addresslist);
294 }
309 m->setSubject(subject); 295 m->setSubject(subject);
310 m->setFrom(from); 296 m->setFrom(from);
311 m->setDate(date); 297 m->setDate(date);
298 m->setMsgid(QString(head->message_id));
299 qDebug("header: \nFrom: %s\nSubject: %s\nDate: %s\nMsgid: %s",
300 from.latin1(),
301 subject.latin1(),date.latin1(),m->Msgid().latin1());
312 } else if (item->msg_att_static->type==MAILIMAP_MSG_ATT_INTERNALDATE) { 302 } else if (item->msg_att_static->type==MAILIMAP_MSG_ATT_INTERNALDATE) {
313 mailimap_date_time*d = item->msg_att_static->internal_date; 303 mailimap_date_time*d = item->msg_att_static->internal_date;
314 QDateTime da(QDate(d->year,d->month,d->day),QTime(d->hour,d->min,d->sec)); 304 QDateTime da(QDate(d->year,d->month,d->day),QTime(d->hour,d->min,d->sec));
315 qDebug("%i %i %i - %i %i %i",d->year,d->month,d->day,d->hour,d->min,d->sec); 305 qDebug("%i %i %i - %i %i %i",d->year,d->month,d->day,d->hour,d->min,d->sec);
316 qDebug(da.toString()); 306 qDebug(da.toString());
317 } else { 307 } else {
318 qDebug("Another type"); 308 qDebug("Another type");
319 } 309 }
320 } 310 }
321 /* msg is already deleted */ 311 /* msg is already deleted */
322 if (mFlags.testBit(FLAG_DELETED) && m) { 312 if (mFlags.testBit(FLAG_DELETED) && m) {
323 delete m; 313 delete m;
324 m = 0; 314 m = 0;
325 } 315 }
326 if (m) { 316 if (m) {
327 m->setFlags(mFlags); 317 m->setFlags(mFlags);
328 } 318 }
329 return m; 319 return m;
330} 320}
331 321
332#if 1
333RecBody IMAPwrapper::fetchBody(const RecMail&mail) 322RecBody IMAPwrapper::fetchBody(const RecMail&mail)
334{ 323{
335 RecBody body; 324 RecBody body;
336 QString body_text;
337
338 const char *mb;
339 int err = MAILIMAP_NO_ERROR;
340 clist *result;
341 clistcell *current;
342 mailimap_fetch_att *fetchAtt;
343 mailimap_fetch_type *fetchType;
344 mailimap_set *set;
345
346 mb = mail.getMbox().latin1();
347
348 login();
349 if (!m_imap) {
350 return body;
351 }
352 /* select mailbox READONLY for operations */
353 err = mailimap_examine( m_imap, (char*)mb);
354 if ( err != MAILIMAP_NO_ERROR ) {
355 qDebug("error selecting mailbox: %s",m_imap->response);
356 logout();
357 return body;
358 }
359 result = clist_new();
360 /* the range has to start at 1!!! not with 0!!!! */
361 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() );
362 fetchAtt = mailimap_fetch_att_new_rfc822_text();
363 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
364 err = mailimap_fetch( m_imap, set, fetchType, &result );
365 mailimap_set_free( set );
366 mailimap_fetch_type_free( fetchType );
367
368 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
369 mailimap_msg_att * msg_att;
370 msg_att = (mailimap_msg_att*)current->data;
371 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data;
372
373 if (item->msg_att_static && item->msg_att_static->rfc822_text) {
374 body_text = item->msg_att_static->rfc822_text;
375 body.setBodytext(body_text);
376 }
377 } else {
378 qDebug("error fetching text: %s",m_imap->response);
379 }
380
381 clist_free(result);
382 logout();
383 return body;
384}
385
386#else
387QString IMAPwrapper::fetchBody(const RecMail&mail)
388{
389 QString body = "";
390 const char *mb; 325 const char *mb;
391 int err = MAILIMAP_NO_ERROR; 326 int err = MAILIMAP_NO_ERROR;
392 clist *result; 327 clist *result;
393 clistcell *current; 328 clistcell *current;
394 mailimap_fetch_att *fetchAtt; 329 mailimap_fetch_att *fetchAtt;
395 mailimap_fetch_type *fetchType; 330 mailimap_fetch_type *fetchType;
396 mailimap_set *set; 331 mailimap_set *set;
397 mailimap_body*body_desc; 332 mailimap_body*body_desc;
398 333
399 mb = mail.getMbox().latin1(); 334 mb = mail.getMbox().latin1();
400 335
401 login(); 336 login();
402 if (!m_imap) { 337 if (!m_imap) {
403 return body; 338 return body;
404 } 339 }
405 /* select mailbox READONLY for operations */ 340 /* select mailbox READONLY for operations */
406 err = mailimap_examine( m_imap, (char*)mb); 341 err = mailimap_examine( m_imap, (char*)mb);
407 if ( err != MAILIMAP_NO_ERROR ) { 342 if ( err != MAILIMAP_NO_ERROR ) {
408 qDebug("error selecting mailbox: %s",m_imap->response); 343 qDebug("error selecting mailbox: %s",m_imap->response);
409 logout(); 344 logout();
410 return body; 345 return body;
411 } 346 }
412 result = clist_new(); 347 result = clist_new();
413 /* the range has to start at 1!!! not with 0!!!! */ 348 /* the range has to start at 1!!! not with 0!!!! */
414 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); 349 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() );
415 fetchAtt = mailimap_fetch_att_new_body(); 350 fetchAtt = mailimap_fetch_att_new_body();
416 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 351 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
417 err = mailimap_fetch( m_imap, set, fetchType, &result ); 352 err = mailimap_fetch( m_imap, set, fetchType, &result );
418 mailimap_set_free( set ); 353 mailimap_set_free( set );
419 mailimap_fetch_type_free( fetchType ); 354 mailimap_fetch_type_free( fetchType );
420 355
421 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 356 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
422 mailimap_msg_att * msg_att; 357 mailimap_msg_att * msg_att;
423 msg_att = (mailimap_msg_att*)current->data; 358 msg_att = (mailimap_msg_att*)current->data;
424 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data; 359 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data;
425 body_desc = item->msg_att_static->body; 360 body_desc = item->msg_att_static->body;
426 if (body_desc->type==MAILIMAP_BODY_1PART) { 361 if (body_desc->type==MAILIMAP_BODY_1PART) {
427 body = searchBodyText(mail,body_desc->body_1part); 362 searchBodyText(mail,body_desc->body_1part,body);
428 } else { 363 } else {
429 } 364 }
430 365
431 } else { 366 } else {
432 qDebug("error fetching body: %s",m_imap->response); 367 qDebug("error fetching body: %s",m_imap->response);
433 } 368 }
434 369
435 clist_free(result); 370 clist_free(result);
436 logout(); 371 logout();
437 return body; 372 return body;
438} 373}
439#endif
440 374
441QString IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription) 375void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body)
442{ 376{
443 QString Body="";
444 if (!mailDescription) { 377 if (!mailDescription) {
445 return Body; 378 return;
446 } 379 }
447 switch (mailDescription->type) { 380 switch (mailDescription->type) {
448 case MAILIMAP_BODY_TYPE_1PART_TEXT: 381 case MAILIMAP_BODY_TYPE_1PART_TEXT:
449 return getPlainBody(mail); 382 fillPlainBody(mail,target_body,mailDescription->body_type_text);
450 break; 383 break;
451 default: 384 default:
452 break; 385 break;
453 } 386 }
454 return Body; 387 return;
455} 388}
456 389
457QString IMAPwrapper::getPlainBody(const RecMail&mail) 390void IMAPwrapper::fillPlainBody(const RecMail&mail,RecBody&target_body, mailimap_body_type_text * text_body)
458{ 391{
459 QString body = "";
460 const char *mb; 392 const char *mb;
393 QString body="";
461 int err = MAILIMAP_NO_ERROR; 394 int err = MAILIMAP_NO_ERROR;
462 clist *result; 395 clist *result;
463 clistcell *current; 396 clistcell *current;
464 mailimap_fetch_att *fetchAtt; 397 mailimap_fetch_att *fetchAtt;
465 mailimap_fetch_type *fetchType; 398 mailimap_fetch_type *fetchType;
466 mailimap_set *set; 399 mailimap_set *set;
467 400
468 mb = mail.getMbox().latin1(); 401 mb = mail.getMbox().latin1();
469 402
470 if (!m_imap) { 403 if (!m_imap) {
471 return body; 404 return;
472 } 405 }
406
473 result = clist_new(); 407 result = clist_new();
474 /* the range has to start at 1!!! not with 0!!!! */ 408 /* the range has to start at 1!!! not with 0!!!! */
475 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); 409 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() );
476 fetchAtt = mailimap_fetch_att_new_rfc822_text(); 410 fetchAtt = mailimap_fetch_att_new_rfc822_text();
477 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 411 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
478 err = mailimap_fetch( m_imap, set, fetchType, &result ); 412 err = mailimap_fetch( m_imap, set, fetchType, &result );
479 mailimap_set_free( set ); 413 mailimap_set_free( set );
480 mailimap_fetch_type_free( fetchType ); 414 mailimap_fetch_type_free( fetchType );
481 415
482 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 416 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
483 mailimap_msg_att * msg_att; 417 mailimap_msg_att * msg_att;
484 msg_att = (mailimap_msg_att*)current->data; 418 msg_att = (mailimap_msg_att*)current->data;
485 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data; 419 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data;
486 if (item->msg_att_static && item->msg_att_static->rfc822_text) { 420 if (item->msg_att_static && item->msg_att_static->rfc822_text) {
487 body = item->msg_att_static->rfc822_text; 421 body = item->msg_att_static->rfc822_text;
488 } 422 }
489 } else { 423 } else {
490 qDebug("error fetching text: %s",m_imap->response); 424 qDebug("error fetching text: %s",m_imap->response);
491 } 425 }
492 clist_free(result); 426 clist_free(result);
493 return body; 427 target_body.setBodytext(body);
428 return;
429}
430
431QStringList IMAPwrapper::address_list_to_stringlist(clist*list)
432{
433 QStringList l;
434 QString from;
435 bool named_from;
436 clistcell *current = NULL;
437 mailimap_address * current_address=NULL;
438 if (!list) {
439 return l;
440 }
441 current = clist_begin(list);
442 while (current!= NULL) {
443 from = "";
444 named_from = false;
445 current_address=(mailimap_address*)current->data;
446 current = current->next;
447 if (current_address->personal_name){
448 from+=QString(current_address->personal_name);
449 from+=" ";
450 named_from = true;
451 }
452 if (named_from && (current_address->mailbox_name || current_address->host_name)) {
453 from+="<";
454 }
455 if (current_address->mailbox_name) {
456 from+=QString(current_address->mailbox_name);
457 from+="@";
458 }
459 if (current_address->host_name) {
460 from+=QString(current_address->host_name);
461 }
462 if (named_from && (current_address->mailbox_name || current_address->host_name)) {
463 from+=">";
464 }
465 l.append(QString(from));
466 }
467 return l;
494} 468}
diff --git a/noncore/net/mail/imapwrapper.h b/noncore/net/mail/imapwrapper.h
index 1423faf..6565896 100644
--- a/noncore/net/mail/imapwrapper.h
+++ b/noncore/net/mail/imapwrapper.h
@@ -1,36 +1,38 @@
1#ifndef __IMAPWRAPPER 1#ifndef __IMAPWRAPPER
2#define __IMAPWRAPPER 2#define __IMAPWRAPPER
3 3
4#include <qlist.h> 4#include <qlist.h>
5#include "mailwrapper.h" 5#include "mailwrapper.h"
6 6
7struct mailimap; 7struct mailimap;
8struct mailimap_body_type_1part; 8struct mailimap_body_type_1part;
9struct mailimap_body_type_text;
9class RecMail; 10class RecMail;
10class RecBody; 11class RecBody;
11 12
12class IMAPwrapper : public QObject 13class IMAPwrapper : public QObject
13{ 14{
14 Q_OBJECT 15 Q_OBJECT
15 16
16public: 17public:
17 IMAPwrapper( IMAPaccount *a ); 18 IMAPwrapper( IMAPaccount *a );
18 virtual ~IMAPwrapper(); 19 virtual ~IMAPwrapper();
19 QList<IMAPFolder>* listFolders(); 20 QList<IMAPFolder>* listFolders();
20 void listMessages(const QString & mailbox,QList<RecMail>&target ); 21 void listMessages(const QString & mailbox,QList<RecMail>&target );
21 RecBody fetchBody(const RecMail&mail); 22 RecBody fetchBody(const RecMail&mail);
22 static void imap_progress( size_t current, size_t maximum ); 23 static void imap_progress( size_t current, size_t maximum );
23 24
24protected: 25protected:
25 RecMail*parse_list_result(mailimap_msg_att*); 26 RecMail*parse_list_result(mailimap_msg_att*);
26 void login(); 27 void login();
27 void logout(); 28 void logout();
28 QString searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription); 29 void searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body);
29 QString getPlainBody(const RecMail&mail); 30 void fillPlainBody(const RecMail&mail,RecBody&target_body, mailimap_body_type_text * text_body);
31 QStringList address_list_to_stringlist(clist*list);
30 32
31private: 33private:
32 IMAPaccount *account; 34 IMAPaccount *account;
33 mailimap *m_imap; 35 mailimap *m_imap;
34}; 36};
35 37
36#endif 38#endif
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
index 725dcc9..5ce140e 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
@@ -196,57 +196,54 @@ QList<IMAPFolder>* IMAPwrapper::listFolders()
196 if (temp.lower()=="inbox") 196 if (temp.lower()=="inbox")
197 continue; 197 continue;
198 folders->append(new IMAPFolder(temp)); 198 folders->append(new IMAPFolder(temp));
199 199
200 } 200 }
201 } else { 201 } else {
202 qDebug("error fetching folders %s",m_imap->response); 202 qDebug("error fetching folders %s",m_imap->response);
203 } 203 }
204 mailimap_list_result_free( result ); 204 mailimap_list_result_free( result );
205 return folders; 205 return folders;
206} 206}
207 207
208RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att) 208RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
209{ 209{
210 RecMail * m = 0; 210 RecMail * m = 0;
211 mailimap_msg_att_item *item=0; 211 mailimap_msg_att_item *item=0;
212 bool named_from = false; 212 bool named_from = false;
213 QString from,date,subject; 213 QString from,date,subject;
214 date = from = subject = ""; 214 date = from = subject = "";
215 clistcell *current,*c,*cf, *current_from = NULL; 215 clistcell *current,*c,*cf, *current_from = NULL;
216 mailimap_address * current_address = NULL; 216 mailimap_address * current_address = NULL;
217 mailimap_msg_att_dynamic*flist; 217 mailimap_msg_att_dynamic*flist;
218 mailimap_flag_fetch*cflag; 218 mailimap_flag_fetch*cflag;
219 QBitArray mFlags(7); 219 QBitArray mFlags(7);
220 QStringList addresslist;
220 221
221 if (!m_att) { 222 if (!m_att) {
222 return m; 223 return m;
223 } 224 }
224 225
225#if 0
226 MAILIMAP_FLAG_KEYWORD, /* keyword flag */
227 MAILIMAP_FLAG_EXTENSION, /* \extension flag */
228#endif
229 c = clist_begin(m_att->list); 226 c = clist_begin(m_att->list);
230 while ( c ) { 227 while ( c ) {
231 current = c; 228 current = c;
232 c = c->next; 229 c = c->next;
233 item = (mailimap_msg_att_item*)current->data; 230 item = (mailimap_msg_att_item*)current->data;
234 if (item->type!=MAILIMAP_MSG_ATT_ITEM_STATIC) { 231 if (item->type!=MAILIMAP_MSG_ATT_ITEM_STATIC) {
235 flist = (mailimap_msg_att_dynamic*)item->msg_att_dyn; 232 flist = (mailimap_msg_att_dynamic*)item->msg_att_dyn;
236 if (!flist->list) { 233 if (!flist->list) {
237 continue; 234 continue;
238 } 235 }
239 cf = flist->list->first; 236 cf = flist->list->first;
240 while (cf) { 237 while (cf) {
241 cflag = (mailimap_flag_fetch*)cf->data; 238 cflag = (mailimap_flag_fetch*)cf->data;
242 if (cflag->type==MAILIMAP_FLAG_FETCH_OTHER && cflag->flag!=0) { 239 if (cflag->type==MAILIMAP_FLAG_FETCH_OTHER && cflag->flag!=0) {
243 switch (cflag->flag->type) { 240 switch (cflag->flag->type) {
244 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */ 241 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */
245 mFlags.setBit(FLAG_ANSWERED); 242 mFlags.setBit(FLAG_ANSWERED);
246 break; 243 break;
247 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */ 244 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */
248 mFlags.setBit(FLAG_FLAGGED); 245 mFlags.setBit(FLAG_FLAGGED);
249 break; 246 break;
250 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */ 247 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */
251 mFlags.setBit(FLAG_DELETED); 248 mFlags.setBit(FLAG_DELETED);
252 break; 249 break;
@@ -255,240 +252,217 @@ RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
255 break; 252 break;
256 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */ 253 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */
257 mFlags.setBit(FLAG_DRAFT); 254 mFlags.setBit(FLAG_DRAFT);
258 break; 255 break;
259 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */ 256 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */
260 break; 257 break;
261 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */ 258 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */
262 break; 259 break;
263 default: 260 default:
264 break; 261 break;
265 } 262 }
266 } else if (cflag->type==MAILIMAP_FLAG_FETCH_RECENT) { 263 } else if (cflag->type==MAILIMAP_FLAG_FETCH_RECENT) {
267 mFlags.setBit(FLAG_RECENT); 264 mFlags.setBit(FLAG_RECENT);
268 } 265 }
269 cf = cf->next; 266 cf = cf->next;
270 } 267 }
271 continue; 268 continue;
272 } 269 }
273 if ( item->msg_att_static->type == MAILIMAP_MSG_ATT_RFC822_HEADER ) { 270 if ( item->msg_att_static->type == MAILIMAP_MSG_ATT_RFC822_HEADER ) {
274 qDebug( "header: \n%s", item->msg_att_static->rfc822_header ); 271 qDebug( "header: \n%s", item->msg_att_static->rfc822_header );
275 } else if (item->msg_att_static->type==MAILIMAP_MSG_ATT_ENVELOPE) { 272 } else if (item->msg_att_static->type==MAILIMAP_MSG_ATT_ENVELOPE) {
276 mailimap_envelope * head = item->msg_att_static->env; 273 mailimap_envelope * head = item->msg_att_static->env;
277 date = head->date; 274 date = head->date;
278 subject = head->subject; 275 subject = head->subject;
279 if (head->from!=NULL) 276 m = new RecMail();
280 current_from = head->from->list->first; 277 if (head->from!=NULL) {
281 while (current_from != NULL) { 278 addresslist = address_list_to_stringlist(head->from->list);
282 from = ""; 279 if (addresslist.count()) {
283 named_from = false; 280 from = addresslist.first();
284 current_address=(mailimap_address*)current_from->data;
285 current_from = current_from->next;
286 if (current_address->personal_name){
287 from+=QString(current_address->personal_name);
288 from+=" ";
289 named_from = true;
290 }
291 if (named_from && (current_address->mailbox_name || current_address->host_name)) {
292 from+="<";
293 }
294 if (current_address->mailbox_name) {
295 from+=QString(current_address->mailbox_name);
296 from+="@";
297 }
298 if (current_address->host_name) {
299 from+=QString(current_address->host_name);
300 }
301 if (named_from && (current_address->mailbox_name || current_address->host_name)) {
302 from+=">";
303 } 281 }
304 } 282 }
305 qDebug("header: \nFrom: %s\nSubject: %s\nDate: %s", 283 if (head->to!=NULL) {
306 from.latin1(), 284 addresslist = address_list_to_stringlist(head->to->list);
307 subject.latin1(),date.latin1()); 285 m->setTo(addresslist);
308 m = new RecMail(); 286 }
287 if (head->cc!=NULL) {
288 addresslist = address_list_to_stringlist(head->cc->list);
289 m->setCC(addresslist);
290 }
291 if (head->bcc!=NULL) {
292 addresslist = address_list_to_stringlist(head->bcc->list);
293 m->setBcc(addresslist);
294 }
309 m->setSubject(subject); 295 m->setSubject(subject);
310 m->setFrom(from); 296 m->setFrom(from);
311 m->setDate(date); 297 m->setDate(date);
298 m->setMsgid(QString(head->message_id));
299 qDebug("header: \nFrom: %s\nSubject: %s\nDate: %s\nMsgid: %s",
300 from.latin1(),
301 subject.latin1(),date.latin1(),m->Msgid().latin1());
312 } else if (item->msg_att_static->type==MAILIMAP_MSG_ATT_INTERNALDATE) { 302 } else if (item->msg_att_static->type==MAILIMAP_MSG_ATT_INTERNALDATE) {
313 mailimap_date_time*d = item->msg_att_static->internal_date; 303 mailimap_date_time*d = item->msg_att_static->internal_date;
314 QDateTime da(QDate(d->year,d->month,d->day),QTime(d->hour,d->min,d->sec)); 304 QDateTime da(QDate(d->year,d->month,d->day),QTime(d->hour,d->min,d->sec));
315 qDebug("%i %i %i - %i %i %i",d->year,d->month,d->day,d->hour,d->min,d->sec); 305 qDebug("%i %i %i - %i %i %i",d->year,d->month,d->day,d->hour,d->min,d->sec);
316 qDebug(da.toString()); 306 qDebug(da.toString());
317 } else { 307 } else {
318 qDebug("Another type"); 308 qDebug("Another type");
319 } 309 }
320 } 310 }
321 /* msg is already deleted */ 311 /* msg is already deleted */
322 if (mFlags.testBit(FLAG_DELETED) && m) { 312 if (mFlags.testBit(FLAG_DELETED) && m) {
323 delete m; 313 delete m;
324 m = 0; 314 m = 0;
325 } 315 }
326 if (m) { 316 if (m) {
327 m->setFlags(mFlags); 317 m->setFlags(mFlags);
328 } 318 }
329 return m; 319 return m;
330} 320}
331 321
332#if 1
333RecBody IMAPwrapper::fetchBody(const RecMail&mail) 322RecBody IMAPwrapper::fetchBody(const RecMail&mail)
334{ 323{
335 RecBody body; 324 RecBody body;
336 QString body_text;
337
338 const char *mb;
339 int err = MAILIMAP_NO_ERROR;
340 clist *result;
341 clistcell *current;
342 mailimap_fetch_att *fetchAtt;
343 mailimap_fetch_type *fetchType;
344 mailimap_set *set;
345
346 mb = mail.getMbox().latin1();
347
348 login();
349 if (!m_imap) {
350 return body;
351 }
352 /* select mailbox READONLY for operations */
353 err = mailimap_examine( m_imap, (char*)mb);
354 if ( err != MAILIMAP_NO_ERROR ) {
355 qDebug("error selecting mailbox: %s",m_imap->response);
356 logout();
357 return body;
358 }
359 result = clist_new();
360 /* the range has to start at 1!!! not with 0!!!! */
361 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() );
362 fetchAtt = mailimap_fetch_att_new_rfc822_text();
363 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
364 err = mailimap_fetch( m_imap, set, fetchType, &result );
365 mailimap_set_free( set );
366 mailimap_fetch_type_free( fetchType );
367
368 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
369 mailimap_msg_att * msg_att;
370 msg_att = (mailimap_msg_att*)current->data;
371 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data;
372
373 if (item->msg_att_static && item->msg_att_static->rfc822_text) {
374 body_text = item->msg_att_static->rfc822_text;
375 body.setBodytext(body_text);
376 }
377 } else {
378 qDebug("error fetching text: %s",m_imap->response);
379 }
380
381 clist_free(result);
382 logout();
383 return body;
384}
385
386#else
387QString IMAPwrapper::fetchBody(const RecMail&mail)
388{
389 QString body = "";
390 const char *mb; 325 const char *mb;
391 int err = MAILIMAP_NO_ERROR; 326 int err = MAILIMAP_NO_ERROR;
392 clist *result; 327 clist *result;
393 clistcell *current; 328 clistcell *current;
394 mailimap_fetch_att *fetchAtt; 329 mailimap_fetch_att *fetchAtt;
395 mailimap_fetch_type *fetchType; 330 mailimap_fetch_type *fetchType;
396 mailimap_set *set; 331 mailimap_set *set;
397 mailimap_body*body_desc; 332 mailimap_body*body_desc;
398 333
399 mb = mail.getMbox().latin1(); 334 mb = mail.getMbox().latin1();
400 335
401 login(); 336 login();
402 if (!m_imap) { 337 if (!m_imap) {
403 return body; 338 return body;
404 } 339 }
405 /* select mailbox READONLY for operations */ 340 /* select mailbox READONLY for operations */
406 err = mailimap_examine( m_imap, (char*)mb); 341 err = mailimap_examine( m_imap, (char*)mb);
407 if ( err != MAILIMAP_NO_ERROR ) { 342 if ( err != MAILIMAP_NO_ERROR ) {
408 qDebug("error selecting mailbox: %s",m_imap->response); 343 qDebug("error selecting mailbox: %s",m_imap->response);
409 logout(); 344 logout();
410 return body; 345 return body;
411 } 346 }
412 result = clist_new(); 347 result = clist_new();
413 /* the range has to start at 1!!! not with 0!!!! */ 348 /* the range has to start at 1!!! not with 0!!!! */
414 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); 349 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() );
415 fetchAtt = mailimap_fetch_att_new_body(); 350 fetchAtt = mailimap_fetch_att_new_body();
416 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 351 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
417 err = mailimap_fetch( m_imap, set, fetchType, &result ); 352 err = mailimap_fetch( m_imap, set, fetchType, &result );
418 mailimap_set_free( set ); 353 mailimap_set_free( set );
419 mailimap_fetch_type_free( fetchType ); 354 mailimap_fetch_type_free( fetchType );
420 355
421 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 356 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
422 mailimap_msg_att * msg_att; 357 mailimap_msg_att * msg_att;
423 msg_att = (mailimap_msg_att*)current->data; 358 msg_att = (mailimap_msg_att*)current->data;
424 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data; 359 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data;
425 body_desc = item->msg_att_static->body; 360 body_desc = item->msg_att_static->body;
426 if (body_desc->type==MAILIMAP_BODY_1PART) { 361 if (body_desc->type==MAILIMAP_BODY_1PART) {
427 body = searchBodyText(mail,body_desc->body_1part); 362 searchBodyText(mail,body_desc->body_1part,body);
428 } else { 363 } else {
429 } 364 }
430 365
431 } else { 366 } else {
432 qDebug("error fetching body: %s",m_imap->response); 367 qDebug("error fetching body: %s",m_imap->response);
433 } 368 }
434 369
435 clist_free(result); 370 clist_free(result);
436 logout(); 371 logout();
437 return body; 372 return body;
438} 373}
439#endif
440 374
441QString IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription) 375void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body)
442{ 376{
443 QString Body="";
444 if (!mailDescription) { 377 if (!mailDescription) {
445 return Body; 378 return;
446 } 379 }
447 switch (mailDescription->type) { 380 switch (mailDescription->type) {
448 case MAILIMAP_BODY_TYPE_1PART_TEXT: 381 case MAILIMAP_BODY_TYPE_1PART_TEXT:
449 return getPlainBody(mail); 382 fillPlainBody(mail,target_body,mailDescription->body_type_text);
450 break; 383 break;
451 default: 384 default:
452 break; 385 break;
453 } 386 }
454 return Body; 387 return;
455} 388}
456 389
457QString IMAPwrapper::getPlainBody(const RecMail&mail) 390void IMAPwrapper::fillPlainBody(const RecMail&mail,RecBody&target_body, mailimap_body_type_text * text_body)
458{ 391{
459 QString body = "";
460 const char *mb; 392 const char *mb;
393 QString body="";
461 int err = MAILIMAP_NO_ERROR; 394 int err = MAILIMAP_NO_ERROR;
462 clist *result; 395 clist *result;
463 clistcell *current; 396 clistcell *current;
464 mailimap_fetch_att *fetchAtt; 397 mailimap_fetch_att *fetchAtt;
465 mailimap_fetch_type *fetchType; 398 mailimap_fetch_type *fetchType;
466 mailimap_set *set; 399 mailimap_set *set;
467 400
468 mb = mail.getMbox().latin1(); 401 mb = mail.getMbox().latin1();
469 402
470 if (!m_imap) { 403 if (!m_imap) {
471 return body; 404 return;
472 } 405 }
406
473 result = clist_new(); 407 result = clist_new();
474 /* the range has to start at 1!!! not with 0!!!! */ 408 /* the range has to start at 1!!! not with 0!!!! */
475 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); 409 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() );
476 fetchAtt = mailimap_fetch_att_new_rfc822_text(); 410 fetchAtt = mailimap_fetch_att_new_rfc822_text();
477 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 411 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
478 err = mailimap_fetch( m_imap, set, fetchType, &result ); 412 err = mailimap_fetch( m_imap, set, fetchType, &result );
479 mailimap_set_free( set ); 413 mailimap_set_free( set );
480 mailimap_fetch_type_free( fetchType ); 414 mailimap_fetch_type_free( fetchType );
481 415
482 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 416 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
483 mailimap_msg_att * msg_att; 417 mailimap_msg_att * msg_att;
484 msg_att = (mailimap_msg_att*)current->data; 418 msg_att = (mailimap_msg_att*)current->data;
485 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data; 419 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data;
486 if (item->msg_att_static && item->msg_att_static->rfc822_text) { 420 if (item->msg_att_static && item->msg_att_static->rfc822_text) {
487 body = item->msg_att_static->rfc822_text; 421 body = item->msg_att_static->rfc822_text;
488 } 422 }
489 } else { 423 } else {
490 qDebug("error fetching text: %s",m_imap->response); 424 qDebug("error fetching text: %s",m_imap->response);
491 } 425 }
492 clist_free(result); 426 clist_free(result);
493 return body; 427 target_body.setBodytext(body);
428 return;
429}
430
431QStringList IMAPwrapper::address_list_to_stringlist(clist*list)
432{
433 QStringList l;
434 QString from;
435 bool named_from;
436 clistcell *current = NULL;
437 mailimap_address * current_address=NULL;
438 if (!list) {
439 return l;
440 }
441 current = clist_begin(list);
442 while (current!= NULL) {
443 from = "";
444 named_from = false;
445 current_address=(mailimap_address*)current->data;
446 current = current->next;
447 if (current_address->personal_name){
448 from+=QString(current_address->personal_name);
449 from+=" ";
450 named_from = true;
451 }
452 if (named_from && (current_address->mailbox_name || current_address->host_name)) {
453 from+="<";
454 }
455 if (current_address->mailbox_name) {
456 from+=QString(current_address->mailbox_name);
457 from+="@";
458 }
459 if (current_address->host_name) {
460 from+=QString(current_address->host_name);
461 }
462 if (named_from && (current_address->mailbox_name || current_address->host_name)) {
463 from+=">";
464 }
465 l.append(QString(from));
466 }
467 return l;
494} 468}
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.h b/noncore/net/mail/libmailwrapper/imapwrapper.h
index 1423faf..6565896 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.h
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.h
@@ -1,36 +1,38 @@
1#ifndef __IMAPWRAPPER 1#ifndef __IMAPWRAPPER
2#define __IMAPWRAPPER 2#define __IMAPWRAPPER
3 3
4#include <qlist.h> 4#include <qlist.h>
5#include "mailwrapper.h" 5#include "mailwrapper.h"
6 6
7struct mailimap; 7struct mailimap;
8struct mailimap_body_type_1part; 8struct mailimap_body_type_1part;
9struct mailimap_body_type_text;
9class RecMail; 10class RecMail;
10class RecBody; 11class RecBody;
11 12
12class IMAPwrapper : public QObject 13class IMAPwrapper : public QObject
13{ 14{
14 Q_OBJECT 15 Q_OBJECT
15 16
16public: 17public:
17 IMAPwrapper( IMAPaccount *a ); 18 IMAPwrapper( IMAPaccount *a );
18 virtual ~IMAPwrapper(); 19 virtual ~IMAPwrapper();
19 QList<IMAPFolder>* listFolders(); 20 QList<IMAPFolder>* listFolders();
20 void listMessages(const QString & mailbox,QList<RecMail>&target ); 21 void listMessages(const QString & mailbox,QList<RecMail>&target );
21 RecBody fetchBody(const RecMail&mail); 22 RecBody fetchBody(const RecMail&mail);
22 static void imap_progress( size_t current, size_t maximum ); 23 static void imap_progress( size_t current, size_t maximum );
23 24
24protected: 25protected:
25 RecMail*parse_list_result(mailimap_msg_att*); 26 RecMail*parse_list_result(mailimap_msg_att*);
26 void login(); 27 void login();
27 void logout(); 28 void logout();
28 QString searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription); 29 void searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body);
29 QString getPlainBody(const RecMail&mail); 30 void fillPlainBody(const RecMail&mail,RecBody&target_body, mailimap_body_type_text * text_body);
31 QStringList address_list_to_stringlist(clist*list);
30 32
31private: 33private:
32 IMAPaccount *account; 34 IMAPaccount *account;
33 mailimap *m_imap; 35 mailimap *m_imap;
34}; 36};
35 37
36#endif 38#endif
diff --git a/noncore/net/mail/libmailwrapper/mailtypes.cpp b/noncore/net/mail/libmailwrapper/mailtypes.cpp
index 9f2c9e3..f9e5794 100644
--- a/noncore/net/mail/libmailwrapper/mailtypes.cpp
+++ b/noncore/net/mail/libmailwrapper/mailtypes.cpp
@@ -1,63 +1,92 @@
1#include "mailtypes.h" 1#include "mailtypes.h"
2 2
3 3
4RecMail::RecMail() 4RecMail::RecMail()
5 :subject(""),date(""),mbox(""),msg_number(0),msg_flags(7) 5 :subject(""),date(""),from(""),mbox(""),msg_id(""),msg_number(0),msg_flags(7)
6{ 6{
7 init();
8}
9
10RecMail::RecMail(const RecMail&old)
11 :subject(""),date(""),from(""),mbox(""),msg_id(""),msg_number(0),msg_flags(7)
12{
13 init();
14 copy_old(old);
15 qDebug("Copy constructor RecMail");
16}
17
18void RecMail::copy_old(const RecMail&old)
19{
20 subject = old.subject;
21 date = old.date;
22 mbox = old.mbox;
23 msg_id = old.msg_id;
24 msg_number = old.msg_number;
25 from = old.from;
26 msg_flags = old.msg_flags;
27 to = old.to;
28 cc = old.cc;
29 bcc = old.bcc;
30}
31
32void RecMail::init()
33{
34 to.clear();
35 cc.clear();
36 bcc.clear();
7} 37}
8 38
9void RecMail::setTo(const QStringList&list) 39void RecMail::setTo(const QStringList&list)
10{ 40{
11 to = list; 41 to = list;
12} 42}
13 43
14const QStringList&RecMail::To()const 44const QStringList&RecMail::To()const
15{ 45{
16 return to; 46 return to;
17} 47}
18 48
19void RecMail::setCC(const QStringList&list) 49void RecMail::setCC(const QStringList&list)
20{ 50{
21 cc = list; 51 cc = list;
22} 52}
23 53
24const QStringList&RecMail::CC()const 54const QStringList&RecMail::CC()const
25{ 55{
26 return cc; 56 return cc;
27} 57}
28 58
29void RecMail::setBcc(const QStringList&list) 59void RecMail::setBcc(const QStringList&list)
30{ 60{
31 bcc = list; 61 bcc = list;
32} 62}
33 63
34const QStringList& RecMail::Bcc()const 64const QStringList& RecMail::Bcc()const
35{ 65{
36 return bcc; 66 return bcc;
37} 67}
38 68
39
40RecPart::RecPart() 69RecPart::RecPart()
41 : m_type(""),m_subtype(""),m_identifier(""),m_encoding("") 70 : m_type(""),m_subtype(""),m_identifier(""),m_encoding("")
42{ 71{
43} 72}
44 73
45RecPart::RecPart(const QString&identifier,const QString&type,const QString&subtype,const QString&encoding) 74RecPart::RecPart(const QString&identifier,const QString&type,const QString&subtype,const QString&encoding)
46 : m_type(type),m_subtype(subtype),m_identifier(identifier),m_encoding(encoding) 75 : m_type(type),m_subtype(subtype),m_identifier(identifier),m_encoding(encoding)
47{ 76{
48} 77}
49 78
50RecPart::~RecPart() 79RecPart::~RecPart()
51{ 80{
52} 81}
53 82
54const QString& RecPart::Type()const 83const QString& RecPart::Type()const
55{ 84{
56 return m_type; 85 return m_type;
57} 86}
58 87
59void RecPart::setType(const QString&type) 88void RecPart::setType(const QString&type)
60{ 89{
61 m_type = type; 90 m_type = type;
62} 91}
63 92
diff --git a/noncore/net/mail/libmailwrapper/mailtypes.h b/noncore/net/mail/libmailwrapper/mailtypes.h
index bb6a483..c8d533a 100644
--- a/noncore/net/mail/libmailwrapper/mailtypes.h
+++ b/noncore/net/mail/libmailwrapper/mailtypes.h
@@ -8,76 +8,80 @@
8#define FLAG_DRAFT 4 8#define FLAG_DRAFT 4
9#define FLAG_RECENT 5 9#define FLAG_RECENT 5
10 10
11#include <qlist.h> 11#include <qlist.h>
12#include <qbitarray.h> 12#include <qbitarray.h>
13#include <qstring.h> 13#include <qstring.h>
14#include <qstringlist.h> 14#include <qstringlist.h>
15 15
16/* a class to describe mails in a mailbox */ 16/* a class to describe mails in a mailbox */
17/* Attention! 17/* Attention!
18 From programmers point of view it would make sense to 18 From programmers point of view it would make sense to
19 store the mail body into this class, too. 19 store the mail body into this class, too.
20 But: not from the point of view of the device. 20 But: not from the point of view of the device.
21 Mailbodies can be real large. So we request them when 21 Mailbodies can be real large. So we request them when
22 needed from the mail-wrapper class direct from the server itself 22 needed from the mail-wrapper class direct from the server itself
23 (imap) or from a file-based cache (pop3?) 23 (imap) or from a file-based cache (pop3?)
24 So there is no interface "const QString&body()" but you should 24 So there is no interface "const QString&body()" but you should
25 make a request to the mailwrapper with this class as parameter to 25 make a request to the mailwrapper with this class as parameter to
26 get the body. Same words for the attachments. 26 get the body. Same words for the attachments.
27*/ 27*/
28class RecMail 28class RecMail
29{ 29{
30public: 30public:
31 RecMail(); 31 RecMail();
32 RecMail(const RecMail&old);
32 virtual ~RecMail(){} 33 virtual ~RecMail(){}
33 34
34 const int getNumber()const{return msg_number;} 35 const int getNumber()const{return msg_number;}
35 void setNumber(int number){msg_number=number;} 36 void setNumber(int number){msg_number=number;}
36 const QString&getDate()const{ return date; } 37 const QString&getDate()const{ return date; }
37 void setDate( const QString&a ) { date = a; } 38 void setDate( const QString&a ) { date = a; }
38 const QString&getFrom()const{ return from; } 39 const QString&getFrom()const{ return from; }
39 void setFrom( const QString&a ) { from = a; } 40 void setFrom( const QString&a ) { from = a; }
40 const QString&getSubject()const { return subject; } 41 const QString&getSubject()const { return subject; }
41 void setSubject( const QString&s ) { subject = s; } 42 void setSubject( const QString&s ) { subject = s; }
42 const QString&getMbox()const{return mbox;} 43 const QString&getMbox()const{return mbox;}
43 void setMbox(const QString&box){mbox = box;} 44 void setMbox(const QString&box){mbox = box;}
44 45 void setMsgid(const QString&id){msg_id=id;}
46 const QString&Msgid()const{return msg_id;}
47
45 void setTo(const QStringList&list); 48 void setTo(const QStringList&list);
46 const QStringList&To()const; 49 const QStringList&To()const;
47 void setCC(const QStringList&list); 50 void setCC(const QStringList&list);
48 const QStringList&CC()const; 51 const QStringList&CC()const;
49 void setBcc(const QStringList&list); 52 void setBcc(const QStringList&list);
50 const QStringList&Bcc()const; 53 const QStringList&Bcc()const;
51
52 const QBitArray&getFlags()const{return msg_flags;} 54 const QBitArray&getFlags()const{return msg_flags;}
53 void setFlags(const QBitArray&flags){msg_flags = flags;} 55 void setFlags(const QBitArray&flags){msg_flags = flags;}
54 56
55protected: 57protected:
56 QString subject,date,from,mbox; 58 QString subject,date,from,mbox,msg_id;
57 int msg_number; 59 int msg_number;
58 QBitArray msg_flags; 60 QBitArray msg_flags;
59 QStringList to,cc,bcc; 61 QStringList to,cc,bcc;
62 void init();
63 void copy_old(const RecMail&old);
60}; 64};
61 65
62class RecPart 66class RecPart
63{ 67{
64protected: 68protected:
65 QString m_type,m_subtype,m_identifier,m_encoding; 69 QString m_type,m_subtype,m_identifier,m_encoding;
66public: 70public:
67 RecPart(); 71 RecPart();
68 RecPart(const QString&identifier,const QString&type="",const QString&subtype="",const QString&encoding="BASE64"); 72 RecPart(const QString&identifier,const QString&type="",const QString&subtype="",const QString&encoding="BASE64");
69 virtual ~RecPart(); 73 virtual ~RecPart();
70 74
71 const QString&Type()const; 75 const QString&Type()const;
72 void setType(const QString&type); 76 void setType(const QString&type);
73 const QString&Subtype()const; 77 const QString&Subtype()const;
74 void setSubtype(const QString&subtype); 78 void setSubtype(const QString&subtype);
75 const QString&Identifier()const; 79 const QString&Identifier()const;
76 void setIdentifier(const QString&identifier); 80 void setIdentifier(const QString&identifier);
77 const QString&Encoding()const; 81 const QString&Encoding()const;
78 void setEncoding(const QString&encoding); 82 void setEncoding(const QString&encoding);
79}; 83};
80 84
81class RecBody 85class RecBody
82{ 86{
83protected: 87protected:
diff --git a/noncore/net/mail/mailtypes.cpp b/noncore/net/mail/mailtypes.cpp
index 9f2c9e3..f9e5794 100644
--- a/noncore/net/mail/mailtypes.cpp
+++ b/noncore/net/mail/mailtypes.cpp
@@ -1,63 +1,92 @@
1#include "mailtypes.h" 1#include "mailtypes.h"
2 2
3 3
4RecMail::RecMail() 4RecMail::RecMail()
5 :subject(""),date(""),mbox(""),msg_number(0),msg_flags(7) 5 :subject(""),date(""),from(""),mbox(""),msg_id(""),msg_number(0),msg_flags(7)
6{ 6{
7 init();
8}
9
10RecMail::RecMail(const RecMail&old)
11 :subject(""),date(""),from(""),mbox(""),msg_id(""),msg_number(0),msg_flags(7)
12{
13 init();
14 copy_old(old);
15 qDebug("Copy constructor RecMail");
16}
17
18void RecMail::copy_old(const RecMail&old)
19{
20 subject = old.subject;
21 date = old.date;
22 mbox = old.mbox;
23 msg_id = old.msg_id;
24 msg_number = old.msg_number;
25 from = old.from;
26 msg_flags = old.msg_flags;
27 to = old.to;
28 cc = old.cc;
29 bcc = old.bcc;
30}
31
32void RecMail::init()
33{
34 to.clear();
35 cc.clear();
36 bcc.clear();
7} 37}
8 38
9void RecMail::setTo(const QStringList&list) 39void RecMail::setTo(const QStringList&list)
10{ 40{
11 to = list; 41 to = list;
12} 42}
13 43
14const QStringList&RecMail::To()const 44const QStringList&RecMail::To()const
15{ 45{
16 return to; 46 return to;
17} 47}
18 48
19void RecMail::setCC(const QStringList&list) 49void RecMail::setCC(const QStringList&list)
20{ 50{
21 cc = list; 51 cc = list;
22} 52}
23 53
24const QStringList&RecMail::CC()const 54const QStringList&RecMail::CC()const
25{ 55{
26 return cc; 56 return cc;
27} 57}
28 58
29void RecMail::setBcc(const QStringList&list) 59void RecMail::setBcc(const QStringList&list)
30{ 60{
31 bcc = list; 61 bcc = list;
32} 62}
33 63
34const QStringList& RecMail::Bcc()const 64const QStringList& RecMail::Bcc()const
35{ 65{
36 return bcc; 66 return bcc;
37} 67}
38 68
39
40RecPart::RecPart() 69RecPart::RecPart()
41 : m_type(""),m_subtype(""),m_identifier(""),m_encoding("") 70 : m_type(""),m_subtype(""),m_identifier(""),m_encoding("")
42{ 71{
43} 72}
44 73
45RecPart::RecPart(const QString&identifier,const QString&type,const QString&subtype,const QString&encoding) 74RecPart::RecPart(const QString&identifier,const QString&type,const QString&subtype,const QString&encoding)
46 : m_type(type),m_subtype(subtype),m_identifier(identifier),m_encoding(encoding) 75 : m_type(type),m_subtype(subtype),m_identifier(identifier),m_encoding(encoding)
47{ 76{
48} 77}
49 78
50RecPart::~RecPart() 79RecPart::~RecPart()
51{ 80{
52} 81}
53 82
54const QString& RecPart::Type()const 83const QString& RecPart::Type()const
55{ 84{
56 return m_type; 85 return m_type;
57} 86}
58 87
59void RecPart::setType(const QString&type) 88void RecPart::setType(const QString&type)
60{ 89{
61 m_type = type; 90 m_type = type;
62} 91}
63 92
diff --git a/noncore/net/mail/mailtypes.h b/noncore/net/mail/mailtypes.h
index bb6a483..c8d533a 100644
--- a/noncore/net/mail/mailtypes.h
+++ b/noncore/net/mail/mailtypes.h
@@ -8,76 +8,80 @@
8#define FLAG_DRAFT 4 8#define FLAG_DRAFT 4
9#define FLAG_RECENT 5 9#define FLAG_RECENT 5
10 10
11#include <qlist.h> 11#include <qlist.h>
12#include <qbitarray.h> 12#include <qbitarray.h>
13#include <qstring.h> 13#include <qstring.h>
14#include <qstringlist.h> 14#include <qstringlist.h>
15 15
16/* a class to describe mails in a mailbox */ 16/* a class to describe mails in a mailbox */
17/* Attention! 17/* Attention!
18 From programmers point of view it would make sense to 18 From programmers point of view it would make sense to
19 store the mail body into this class, too. 19 store the mail body into this class, too.
20 But: not from the point of view of the device. 20 But: not from the point of view of the device.
21 Mailbodies can be real large. So we request them when 21 Mailbodies can be real large. So we request them when
22 needed from the mail-wrapper class direct from the server itself 22 needed from the mail-wrapper class direct from the server itself
23 (imap) or from a file-based cache (pop3?) 23 (imap) or from a file-based cache (pop3?)
24 So there is no interface "const QString&body()" but you should 24 So there is no interface "const QString&body()" but you should
25 make a request to the mailwrapper with this class as parameter to 25 make a request to the mailwrapper with this class as parameter to
26 get the body. Same words for the attachments. 26 get the body. Same words for the attachments.
27*/ 27*/
28class RecMail 28class RecMail
29{ 29{
30public: 30public:
31 RecMail(); 31 RecMail();
32 RecMail(const RecMail&old);
32 virtual ~RecMail(){} 33 virtual ~RecMail(){}
33 34
34 const int getNumber()const{return msg_number;} 35 const int getNumber()const{return msg_number;}
35 void setNumber(int number){msg_number=number;} 36 void setNumber(int number){msg_number=number;}
36 const QString&getDate()const{ return date; } 37 const QString&getDate()const{ return date; }
37 void setDate( const QString&a ) { date = a; } 38 void setDate( const QString&a ) { date = a; }
38 const QString&getFrom()const{ return from; } 39 const QString&getFrom()const{ return from; }
39 void setFrom( const QString&a ) { from = a; } 40 void setFrom( const QString&a ) { from = a; }
40 const QString&getSubject()const { return subject; } 41 const QString&getSubject()const { return subject; }
41 void setSubject( const QString&s ) { subject = s; } 42 void setSubject( const QString&s ) { subject = s; }
42 const QString&getMbox()const{return mbox;} 43 const QString&getMbox()const{return mbox;}
43 void setMbox(const QString&box){mbox = box;} 44 void setMbox(const QString&box){mbox = box;}
44 45 void setMsgid(const QString&id){msg_id=id;}
46 const QString&Msgid()const{return msg_id;}
47
45 void setTo(const QStringList&list); 48 void setTo(const QStringList&list);
46 const QStringList&To()const; 49 const QStringList&To()const;
47 void setCC(const QStringList&list); 50 void setCC(const QStringList&list);
48 const QStringList&CC()const; 51 const QStringList&CC()const;
49 void setBcc(const QStringList&list); 52 void setBcc(const QStringList&list);
50 const QStringList&Bcc()const; 53 const QStringList&Bcc()const;
51
52 const QBitArray&getFlags()const{return msg_flags;} 54 const QBitArray&getFlags()const{return msg_flags;}
53 void setFlags(const QBitArray&flags){msg_flags = flags;} 55 void setFlags(const QBitArray&flags){msg_flags = flags;}
54 56
55protected: 57protected:
56 QString subject,date,from,mbox; 58 QString subject,date,from,mbox,msg_id;
57 int msg_number; 59 int msg_number;
58 QBitArray msg_flags; 60 QBitArray msg_flags;
59 QStringList to,cc,bcc; 61 QStringList to,cc,bcc;
62 void init();
63 void copy_old(const RecMail&old);
60}; 64};
61 65
62class RecPart 66class RecPart
63{ 67{
64protected: 68protected:
65 QString m_type,m_subtype,m_identifier,m_encoding; 69 QString m_type,m_subtype,m_identifier,m_encoding;
66public: 70public:
67 RecPart(); 71 RecPart();
68 RecPart(const QString&identifier,const QString&type="",const QString&subtype="",const QString&encoding="BASE64"); 72 RecPart(const QString&identifier,const QString&type="",const QString&subtype="",const QString&encoding="BASE64");
69 virtual ~RecPart(); 73 virtual ~RecPart();
70 74
71 const QString&Type()const; 75 const QString&Type()const;
72 void setType(const QString&type); 76 void setType(const QString&type);
73 const QString&Subtype()const; 77 const QString&Subtype()const;
74 void setSubtype(const QString&subtype); 78 void setSubtype(const QString&subtype);
75 const QString&Identifier()const; 79 const QString&Identifier()const;
76 void setIdentifier(const QString&identifier); 80 void setIdentifier(const QString&identifier);
77 const QString&Encoding()const; 81 const QString&Encoding()const;
78 void setEncoding(const QString&encoding); 82 void setEncoding(const QString&encoding);
79}; 83};
80 84
81class RecBody 85class RecBody
82{ 86{
83protected: 87protected: