summaryrefslogtreecommitdiffabout
path: root/kmicromail/libmailwrapper/imapwrapper.cpp
Unidiff
Diffstat (limited to 'kmicromail/libmailwrapper/imapwrapper.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kmicromail/libmailwrapper/imapwrapper.cpp28
1 files changed, 15 insertions, 13 deletions
diff --git a/kmicromail/libmailwrapper/imapwrapper.cpp b/kmicromail/libmailwrapper/imapwrapper.cpp
index 4f0c849..f73f4cc 100644
--- a/kmicromail/libmailwrapper/imapwrapper.cpp
+++ b/kmicromail/libmailwrapper/imapwrapper.cpp
@@ -1,57 +1,59 @@
1// CHANGED 2004-09-31 Lutz Rogowski 1// CHANGED 2004-09-31 Lutz Rogowski
2#include <stdlib.h> 2#include <stdlib.h>
3#include <libetpan/libetpan.h> 3#include <libetpan/libetpan.h>
4#include <qpe/global.h> 4#include <qpe/global.h>
5#include <qapplication.h> 5#include <qapplication.h>
6//Added by qt3to4:
7#include <Q3ValueList>
6#include "imapwrapper.h" 8#include "imapwrapper.h"
7#include "mailtypes.h" 9#include "mailtypes.h"
8#include "logindialog.h" 10#include "logindialog.h"
9#include <qprogressbar.h> 11#include <q3progressbar.h>
10#include "genericwrapper.h" 12#include "genericwrapper.h"
11#include <kglobal.h> 13#include <kglobal.h>
12 14
13using namespace Opie::Core; 15using namespace Opie::Core;
14int IMAPwrapper::mMax = 0; 16int IMAPwrapper::mMax = 0;
15int IMAPwrapper::mCurrent = 0; 17int IMAPwrapper::mCurrent = 0;
16 18
17IMAPwrapper::IMAPwrapper( IMAPaccount *a ) 19IMAPwrapper::IMAPwrapper( IMAPaccount *a )
18 : AbstractMail() 20 : AbstractMail()
19{ 21{
20 account = a; 22 account = a;
21 m_imap = 0; 23 m_imap = 0;
22 m_Lastmbox = ""; 24 m_Lastmbox = "";
23 mCurrent = 0; 25 mCurrent = 0;
24 mMax = 0; 26 mMax = 0;
25} 27}
26 28
27IMAPwrapper::~IMAPwrapper() 29IMAPwrapper::~IMAPwrapper()
28{ 30{
29 logout(); 31 logout();
30} 32}
31 33
32/* to avoid to often select statements in loops etc. 34/* to avoid to often select statements in loops etc.
33 we trust that we are logged in and connection is established!*/ 35 we trust that we are logged in and connection is established!*/
34int IMAPwrapper::selectMbox(const QString&mbox) 36int IMAPwrapper::selectMbox(const QString&mbox)
35{ 37{
36 if (mbox == m_Lastmbox) { 38 if (mbox == m_Lastmbox) {
37 return MAILIMAP_NO_ERROR; 39 return MAILIMAP_NO_ERROR;
38 } 40 }
39 int err = mailimap_select( m_imap, (char*)mbox.latin1()); 41 int err = mailimap_select( m_imap, (char*)mbox.latin1());
40 if ( err != MAILIMAP_NO_ERROR ) { 42 if ( err != MAILIMAP_NO_ERROR ) {
41 m_Lastmbox = ""; 43 m_Lastmbox = "";
42 return err; 44 return err;
43 } 45 }
44 m_Lastmbox = mbox; 46 m_Lastmbox = mbox;
45 return err; 47 return err;
46} 48}
47 49
48void IMAPwrapper::imap_progress( size_t current, size_t maximum ) 50void IMAPwrapper::imap_progress( size_t current, size_t maximum )
49{ 51{
50 return; 52 return;
51 //qDebug("imap progress %d of %d ",current,maximum ); 53 //qDebug("imap progress %d of %d ",current,maximum );
52 //Global::statusMessage(i18n("Downloading message %1 of %2").arg( current).arg(maximum)); 54 //Global::statusMessage(i18n("Downloading message %1 of %2").arg( current).arg(maximum));
53 //qApp->processEvents() 55 //qApp->processEvents()
54 static unsigned int last = 0; 56 static unsigned int last = 0;
55 if ( last != current ) 57 if ( last != current )
56 IMAPwrapper::progress(); 58 IMAPwrapper::progress();
57 last = current; 59 last = current;
@@ -194,187 +196,187 @@ void IMAPwrapper::login(bool tryTLS) // = true)
194 return; 196 return;
195 } 197 }
196 if ( tryTLS ) { 198 if ( tryTLS ) {
197 if (!ssl) { 199 if (!ssl) {
198 try_tls = start_tls(force_tls); 200 try_tls = start_tls(force_tls);
199 } 201 }
200 } 202 }
201 bool ok = true; 203 bool ok = true;
202 if (force_tls && !try_tls) { 204 if (force_tls && !try_tls) {
203 Global::statusMessage(i18n("Server has no TLS support!")); 205 Global::statusMessage(i18n("Server has no TLS support!"));
204 ok = false; 206 ok = false;
205 } 207 }
206 208
207 209
208 /* login */ 210 /* login */
209 211
210 if (ok) { 212 if (ok) {
211 err = mailimap_login_simple( m_imap, (char*)user.latin1(), (char*)pass.latin1() ); 213 err = mailimap_login_simple( m_imap, (char*)user.latin1(), (char*)pass.latin1() );
212 if ( err != MAILIMAP_NO_ERROR ) { 214 if ( err != MAILIMAP_NO_ERROR ) {
213 if ( tryTLS && !force_tls && !try_tls ) { 215 if ( tryTLS && !force_tls && !try_tls ) {
214 err = mailimap_close( m_imap ); 216 err = mailimap_close( m_imap );
215 mailimap_free( m_imap ); 217 mailimap_free( m_imap );
216 m_imap = 0; 218 m_imap = 0;
217 login( false ); 219 login( false );
218 return; 220 return;
219 } 221 }
220 Global::statusMessage(i18n("error logging in imap server: %1").arg(m_imap->imap_response)); 222 Global::statusMessage(i18n("error logging in imap server: %1").arg(m_imap->imap_response));
221 ok = false; 223 ok = false;
222 } 224 }
223 } 225 }
224 if (!ok) { 226 if (!ok) {
225 err = mailimap_close( m_imap ); 227 err = mailimap_close( m_imap );
226 mailimap_free( m_imap ); 228 mailimap_free( m_imap );
227 m_imap = 0; 229 m_imap = 0;
228 } 230 }
229} 231}
230 232
231void IMAPwrapper::logout() 233void IMAPwrapper::logout()
232{ 234{
233 int err = MAILIMAP_NO_ERROR; 235 int err = MAILIMAP_NO_ERROR;
234 if (!m_imap) return; 236 if (!m_imap) return;
235 err = mailimap_logout( m_imap ); 237 err = mailimap_logout( m_imap );
236 err = mailimap_close( m_imap ); 238 err = mailimap_close( m_imap );
237 mailimap_free( m_imap ); 239 mailimap_free( m_imap );
238 m_imap = 0; 240 m_imap = 0;
239 m_Lastmbox = ""; 241 m_Lastmbox = "";
240} 242}
241 243
242void IMAPwrapper::listMessages(const QString&mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> > &target , int maxSizeInKb) 244void IMAPwrapper::listMessages(const QString&mailbox,Q3ValueList<Opie::Core::OSmartPointer<RecMail> > &target , int maxSizeInKb)
243{ 245{
244 246
245 int tryAgain = 1; 247 int tryAgain = 1;
246 while ( tryAgain >= 0 ) { 248 while ( tryAgain >= 0 ) {
247 int err = MAILIMAP_NO_ERROR; 249 int err = MAILIMAP_NO_ERROR;
248 clist *result = 0; 250 clist *result = 0;
249 clistcell *current; 251 clistcell *current;
250 mailimap_fetch_type *fetchType = 0; 252 mailimap_fetch_type *fetchType = 0;
251 mailimap_set *set = 0; 253 mailimap_set *set = 0;
252 254
253 login(); 255 login();
254 if (!m_imap) { 256 if (!m_imap) {
255 return; 257 return;
256 } 258 }
257 /* select mailbox READONLY for operations */ 259 /* select mailbox READONLY for operations */
258 err = selectMbox(mailbox); 260 err = selectMbox(mailbox);
259 if ( err != MAILIMAP_NO_ERROR ) { 261 if ( err != MAILIMAP_NO_ERROR ) {
260 return; 262 return;
261 } 263 }
262 264
263 int last = m_imap->imap_selection_info->sel_exists; 265 int last = m_imap->imap_selection_info->sel_exists;
264 266
265 if (last == 0) { 267 if (last == 0) {
266 Global::statusMessage(i18n("Mailbox has no mails")); 268 Global::statusMessage(i18n("Mailbox has no mails"));
267 return; 269 return;
268 } else { 270 } else {
269 } 271 }
270 progress( i18n("Fetch ")); 272 progress( i18n("Fetch "));
271 mMax = last; 273 mMax = last;
272 //qDebug("last %d ", last); 274 //qDebug("last %d ", last);
273 Global::statusMessage(i18n("Fetching header list")); 275 Global::statusMessage(i18n("Fetching header list"));
274 qApp->processEvents(); 276 qApp->processEvents();
275 /* the range has to start at 1!!! not with 0!!!! */ 277 /* the range has to start at 1!!! not with 0!!!! */
276 //LR the access to web.de imap server is no working with value 1 278 //LR the access to web.de imap server is no working with value 1
277 //qDebug("interval %d - %d ", tryAgain, last-1+tryAgain ); 279 //qDebug("interval %d - %d ", tryAgain, last-1+tryAgain );
278 set = mailimap_set_new_interval( tryAgain, last ); 280 set = mailimap_set_new_interval( tryAgain, last );
279 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 281 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
280 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope()); 282 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope());
281 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags()); 283 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags());
282 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate()); 284 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate());
283 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size()); 285 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size());
284 286
285 err = mailimap_fetch( m_imap, set, fetchType, &result ); 287 err = mailimap_fetch( m_imap, set, fetchType, &result );
286 mailimap_set_free( set ); 288 mailimap_set_free( set );
287 mailimap_fetch_type_free( fetchType ); 289 mailimap_fetch_type_free( fetchType );
288 290
289 QString date,subject,from; 291 QString date,subject,from;
290 292
291 if ( err == MAILIMAP_NO_ERROR ) { 293 if ( err == MAILIMAP_NO_ERROR ) {
292 tryAgain = -1; 294 tryAgain = -1;
293 mailimap_msg_att * msg_att; 295 mailimap_msg_att * msg_att;
294 int i = 0; 296 int i = 0;
295 for (current = clist_begin(result); current != 0; current=clist_next(current)) { 297 for (current = clist_begin(result); current != 0; current=clist_next(current)) {
296 ++i; 298 ++i;
297 //qDebug("iii %d ",i); 299 //qDebug("iii %d ",i);
298 msg_att = (mailimap_msg_att*)current->data; 300 msg_att = (mailimap_msg_att*)current->data;
299 RecMail*m = parse_list_result(msg_att); 301 RecMail*m = parse_list_result(msg_att);
300 if (m) { 302 if (m) {
301 if ( maxSizeInKb == 0 || m->Msgsize()<=(unsigned int ) maxSizeInKb*1024 ) { 303 if ( maxSizeInKb == 0 || m->Msgsize()<=(unsigned int ) maxSizeInKb*1024 ) {
302 m->setNumber(i); 304 m->setNumber(i);
303 m->setMbox(mailbox); 305 m->setMbox(mailbox);
304 m->setWrapper(this); 306 m->setWrapper(this);
305 target.append(m); 307 target.append(m);
306 } 308 }
307 } 309 }
308 } 310 }
309 Global::statusMessage(i18n("Mailbox has %1 mails").arg(target.count())); 311 Global::statusMessage(i18n("Mailbox has %1 mails").arg(target.count()));
310 } else { 312 } else {
311 --tryAgain; 313 --tryAgain;
312 --tryAgain;//disabled tryagain by adding this line 314 --tryAgain;//disabled tryagain by adding this line
313 if ( tryAgain < 0 ) 315 if ( tryAgain < 0 )
314 Global::statusMessage(i18n("Error fetching headers: %1").arg(m_imap->imap_response)); 316 Global::statusMessage(i18n("Error fetching headers: %1").arg(m_imap->imap_response));
315 else 317 else
316 qDebug("try again... "); 318 qDebug("try again... ");
317 } 319 }
318 320
319 if (result) mailimap_fetch_list_free(result); 321 if (result) mailimap_fetch_list_free(result);
320 } 322 }
321} 323}
322 324
323QValueList<Opie::Core::OSmartPointer<Folder> >* IMAPwrapper::listFolders() 325Q3ValueList<Opie::Core::OSmartPointer<Folder> >* IMAPwrapper::listFolders()
324{ 326{
325 const char *path, *mask; 327 const char *path, *mask;
326 int err = MAILIMAP_NO_ERROR; 328 int err = MAILIMAP_NO_ERROR;
327 clist *result = 0; 329 clist *result = 0;
328 clistcell *current = 0; 330 clistcell *current = 0;
329 clistcell*cur_flag = 0; 331 clistcell*cur_flag = 0;
330 mailimap_mbx_list_flags*bflags = 0; 332 mailimap_mbx_list_flags*bflags = 0;
331 333
332 QValueList<FolderP>* folders = new QValueList<FolderP>(); 334 Q3ValueList<FolderP>* folders = new Q3ValueList<FolderP>();
333 login(); 335 login();
334 if (!m_imap) { 336 if (!m_imap) {
335 return folders; 337 return folders;
336 } 338 }
337 339
338/* 340/*
339 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 341 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
340 * We must not forget to filter them out in next loop! 342 * We must not forget to filter them out in next loop!
341 * it seems like ugly code. and yes - it is ugly code. but the best way. 343 * it seems like ugly code. and yes - it is ugly code. but the best way.
342 */ 344 */
343 Global::statusMessage(i18n("Fetching folder list")); 345 Global::statusMessage(i18n("Fetching folder list"));
344 qApp->processEvents(); 346 qApp->processEvents();
345 QString temp; 347 QString temp;
346 mask = "INBOX" ; 348 mask = "INBOX" ;
347 mailimap_mailbox_list *list; 349 mailimap_mailbox_list *list;
348 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); 350 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result );
349 QString del; 351 QString del;
350 bool selectable = true; 352 bool selectable = true;
351 bool no_inferiors = false; 353 bool no_inferiors = false;
352 if ( err == MAILIMAP_NO_ERROR ) { 354 if ( err == MAILIMAP_NO_ERROR ) {
353 current = result->first; 355 current = result->first;
354 for ( int i = result->count; i > 0; i-- ) { 356 for ( int i = result->count; i > 0; i-- ) {
355 list = (mailimap_mailbox_list *) current->data; 357 list = (mailimap_mailbox_list *) current->data;
356 // it is better use the deep copy mechanism of qt itself 358 // it is better use the deep copy mechanism of qt itself
357 // instead of using strdup! 359 // instead of using strdup!
358 temp = list->mb_name; 360 temp = list->mb_name;
359 del = list->mb_delimiter; 361 del = list->mb_delimiter;
360 current = current->next; 362 current = current->next;
361 if ( (bflags = list->mb_flag) ) { 363 if ( (bflags = list->mb_flag) ) {
362 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& 364 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&&
363 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); 365 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT);
364 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) { 366 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) {
365 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) { 367 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) {
366 no_inferiors = true; 368 no_inferiors = true;
367 } 369 }
368 } 370 }
369 } 371 }
370 folders->append( new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix())); 372 folders->append( new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix()));
371 } 373 }
372 } else { 374 } else {
373 qDebug("error fetching folders: "); 375 qDebug("error fetching folders: ");
374 376
375 } 377 }
376 mailimap_list_result_free( result ); 378 mailimap_list_result_free( result );
377 379
378/* 380/*
379 * second stage - get the other then inbox folders 381 * second stage - get the other then inbox folders
380 */ 382 */
@@ -568,283 +570,283 @@ RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
568 } 570 }
569 /* msg is already deleted */ 571 /* msg is already deleted */
570 if (mFlags.testBit(FLAG_DELETED) && m) { 572 if (mFlags.testBit(FLAG_DELETED) && m) {
571 delete m; 573 delete m;
572 m = 0; 574 m = 0;
573 } 575 }
574 if (m) { 576 if (m) {
575 m->setFlags(mFlags); 577 m->setFlags(mFlags);
576 m->setMsgsize(size); 578 m->setMsgsize(size);
577 } 579 }
578 return m; 580 return m;
579} 581}
580 582
581RecBodyP IMAPwrapper::fetchBody(const RecMailP&mail) 583RecBodyP IMAPwrapper::fetchBody(const RecMailP&mail)
582{ 584{
583 RecBodyP body = new RecBody(); 585 RecBodyP body = new RecBody();
584 const char *mb; 586 const char *mb;
585 int err = MAILIMAP_NO_ERROR; 587 int err = MAILIMAP_NO_ERROR;
586 clist *result = 0; 588 clist *result = 0;
587 clistcell *current; 589 clistcell *current;
588 mailimap_fetch_att *fetchAtt = 0; 590 mailimap_fetch_att *fetchAtt = 0;
589 mailimap_fetch_type *fetchType = 0; 591 mailimap_fetch_type *fetchType = 0;
590 mailimap_set *set = 0; 592 mailimap_set *set = 0;
591 mailimap_body*body_desc = 0; 593 mailimap_body*body_desc = 0;
592 594
593 mb = mail->getMbox().latin1(); 595 mb = mail->getMbox().latin1();
594 596
595 login(); 597 login();
596 if (!m_imap) { 598 if (!m_imap) {
597 return body; 599 return body;
598 } 600 }
599 err = selectMbox(mail->getMbox()); 601 err = selectMbox(mail->getMbox());
600 if ( err != MAILIMAP_NO_ERROR ) { 602 if ( err != MAILIMAP_NO_ERROR ) {
601 return body; 603 return body;
602 } 604 }
603 605
604 /* the range has to start at 1!!! not with 0!!!! */ 606 /* the range has to start at 1!!! not with 0!!!! */
605 set = mailimap_set_new_interval( mail->getNumber(),mail->getNumber() ); 607 set = mailimap_set_new_interval( mail->getNumber(),mail->getNumber() );
606 fetchAtt = mailimap_fetch_att_new_bodystructure(); 608 fetchAtt = mailimap_fetch_att_new_bodystructure();
607 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 609 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
608 err = mailimap_fetch( m_imap, set, fetchType, &result ); 610 err = mailimap_fetch( m_imap, set, fetchType, &result );
609 mailimap_set_free( set ); 611 mailimap_set_free( set );
610 mailimap_fetch_type_free( fetchType ); 612 mailimap_fetch_type_free( fetchType );
611 613
612 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 614 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
613 mailimap_msg_att * msg_att; 615 mailimap_msg_att * msg_att;
614 msg_att = (mailimap_msg_att*)current->data; 616 msg_att = (mailimap_msg_att*)current->data;
615 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->att_list->first->data; 617 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->att_list->first->data;
616 QValueList<int> path; 618 Q3ValueList<int> path;
617 body_desc = item->att_data.att_static->att_data.att_body; 619 body_desc = item->att_data.att_static->att_data.att_body;
618 traverseBody(mail,body_desc,body,0,path); 620 traverseBody(mail,body_desc,body,0,path);
619 } else { 621 } else {
620 qDebug("error fetching body %d (%d): %s", err, MAILIMAP_NO_ERROR, m_imap->imap_response ); 622 qDebug("error fetching body %d (%d): %s", err, MAILIMAP_NO_ERROR, m_imap->imap_response );
621 } 623 }
622 if (result) mailimap_fetch_list_free(result); 624 if (result) mailimap_fetch_list_free(result);
623 return body; 625 return body;
624} 626}
625 627
626QStringList IMAPwrapper::address_list_to_stringlist(clist*list) 628QStringList IMAPwrapper::address_list_to_stringlist(clist*list)
627{ 629{
628 QStringList l; 630 QStringList l;
629 QString from; 631 QString from;
630 bool named_from; 632 bool named_from;
631 clistcell *current = NULL; 633 clistcell *current = NULL;
632 mailimap_address * current_address=NULL; 634 mailimap_address * current_address=NULL;
633 if (!list) { 635 if (!list) {
634 return l; 636 return l;
635 } 637 }
636 unsigned int count = 0; 638 unsigned int count = 0;
637 for (current=clist_begin(list);current!= NULL;current=clist_next(current)) { 639 for (current=clist_begin(list);current!= NULL;current=clist_next(current)) {
638 from = ""; 640 from = "";
639 named_from = false; 641 named_from = false;
640 current_address=(mailimap_address*)current->data; 642 current_address=(mailimap_address*)current->data;
641 if (current_address->ad_personal_name){ 643 if (current_address->ad_personal_name){
642 from+=convert_String((const char*)current_address->ad_personal_name); 644 from+=convert_String((const char*)current_address->ad_personal_name);
643 from+=" "; 645 from+=" ";
644 named_from = true; 646 named_from = true;
645 } 647 }
646 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) { 648 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) {
647 from+="<"; 649 from+="<";
648 } 650 }
649 if (current_address->ad_mailbox_name) { 651 if (current_address->ad_mailbox_name) {
650 from+=QString(current_address->ad_mailbox_name); 652 from+=QString(current_address->ad_mailbox_name);
651 from+="@"; 653 from+="@";
652 } 654 }
653 if (current_address->ad_host_name) { 655 if (current_address->ad_host_name) {
654 from+=QString(current_address->ad_host_name); 656 from+=QString(current_address->ad_host_name);
655 } 657 }
656 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) { 658 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) {
657 from+=">"; 659 from+=">";
658 } 660 }
659 l.append(QString(from)); 661 l.append(QString(from));
660 if (++count > 99) { 662 if (++count > 99) {
661 break; 663 break;
662 } 664 }
663 } 665 }
664 return l; 666 return l;
665} 667}
666 668
667encodedString*IMAPwrapper::fetchRawPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call) 669encodedString*IMAPwrapper::fetchRawPart(const RecMailP&mail,const Q3ValueList<int>&path,bool internal_call)
668{ 670{
669 encodedString*res=new encodedString; 671 encodedString*res=new encodedString;
670 int err; 672 int err;
671 mailimap_fetch_type *fetchType; 673 mailimap_fetch_type *fetchType;
672 mailimap_set *set; 674 mailimap_set *set;
673 clistcell*current,*cur; 675 clistcell*current,*cur;
674 mailimap_section_part * section_part = 0; 676 mailimap_section_part * section_part = 0;
675 mailimap_section_spec * section_spec = 0; 677 mailimap_section_spec * section_spec = 0;
676 mailimap_section * section = 0; 678 mailimap_section * section = 0;
677 mailimap_fetch_att * fetch_att = 0; 679 mailimap_fetch_att * fetch_att = 0;
678 680
679 login(); 681 login();
680 if (!m_imap) { 682 if (!m_imap) {
681 return res; 683 return res;
682 } 684 }
683 if (!internal_call) { 685 if (!internal_call) {
684 err = selectMbox(mail->getMbox()); 686 err = selectMbox(mail->getMbox());
685 if ( err != MAILIMAP_NO_ERROR ) { 687 if ( err != MAILIMAP_NO_ERROR ) {
686 return res; 688 return res;
687 } 689 }
688 } 690 }
689 set = mailimap_set_new_single(mail->getNumber()); 691 set = mailimap_set_new_single(mail->getNumber());
690 692
691 clist*id_list = 0; 693 clist*id_list = 0;
692 694
693 /* if path == empty then its a request for the whole rfc822 mail and generates 695 /* if path == empty then its a request for the whole rfc822 mail and generates
694 a "fetch <id> (body[])" statement on imap server */ 696 a "fetch <id> (body[])" statement on imap server */
695 if (path.count()>0 ) { 697 if (path.count()>0 ) {
696 id_list = clist_new(); 698 id_list = clist_new();
697 for (unsigned j=0; j < path.count();++j) { 699 for (unsigned j=0; j < path.count();++j) {
698 uint32_t * p_id = (uint32_t *)malloc(sizeof(*p_id)); 700 uint32_t * p_id = (uint32_t *)malloc(sizeof(*p_id));
699 *p_id = path[j]; 701 *p_id = path[j];
700 clist_append(id_list,p_id); 702 clist_append(id_list,p_id);
701 } 703 }
702 section_part = mailimap_section_part_new(id_list); 704 section_part = mailimap_section_part_new(id_list);
703 section_spec = mailimap_section_spec_new(MAILIMAP_SECTION_SPEC_SECTION_PART, NULL, section_part, NULL); 705 section_spec = mailimap_section_spec_new(MAILIMAP_SECTION_SPEC_SECTION_PART, NULL, section_part, NULL);
704 } 706 }
705 707
706 section = mailimap_section_new(section_spec); 708 section = mailimap_section_new(section_spec);
707 fetch_att = mailimap_fetch_att_new_body_section(section); 709 fetch_att = mailimap_fetch_att_new_body_section(section);
708 fetchType = mailimap_fetch_type_new_fetch_att(fetch_att); 710 fetchType = mailimap_fetch_type_new_fetch_att(fetch_att);
709 711
710 clist*result = 0; 712 clist*result = 0;
711 713
712 err = mailimap_fetch( m_imap, set, fetchType, &result ); 714 err = mailimap_fetch( m_imap, set, fetchType, &result );
713 mailimap_set_free( set ); 715 mailimap_set_free( set );
714 mailimap_fetch_type_free( fetchType ); 716 mailimap_fetch_type_free( fetchType );
715 717
716 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 718 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
717 mailimap_msg_att * msg_att; 719 mailimap_msg_att * msg_att;
718 msg_att = (mailimap_msg_att*)current->data; 720 msg_att = (mailimap_msg_att*)current->data;
719 mailimap_msg_att_item*msg_att_item; 721 mailimap_msg_att_item*msg_att_item;
720 for(cur = clist_begin(msg_att->att_list) ; cur != NULL ; cur = clist_next(cur)) { 722 for(cur = clist_begin(msg_att->att_list) ; cur != NULL ; cur = clist_next(cur)) {
721 msg_att_item = (mailimap_msg_att_item*)clist_content(cur); 723 msg_att_item = (mailimap_msg_att_item*)clist_content(cur);
722 if (msg_att_item->att_type == MAILIMAP_MSG_ATT_ITEM_STATIC) { 724 if (msg_att_item->att_type == MAILIMAP_MSG_ATT_ITEM_STATIC) {
723 if (msg_att_item->att_data.att_static->att_type == MAILIMAP_MSG_ATT_BODY_SECTION) { 725 if (msg_att_item->att_data.att_static->att_type == MAILIMAP_MSG_ATT_BODY_SECTION) {
724 char*text = msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part; 726 char*text = msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part;
725 /* detach - we take over the content */ 727 /* detach - we take over the content */
726 msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part = 0L; 728 msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part = 0L;
727 res->setContent(text,msg_att_item->att_data.att_static->att_data.att_body_section->sec_length); 729 res->setContent(text,msg_att_item->att_data.att_static->att_data.att_body_section->sec_length);
728 } 730 }
729 } 731 }
730 } 732 }
731 } else { 733 } else {
732 ;//odebug << "error fetching text: " << m_imap->imap_response << "" << oendl; 734 ;//odebug << "error fetching text: " << m_imap->imap_response << "" << oendl;
733 } 735 }
734 if (result) mailimap_fetch_list_free(result); 736 if (result) mailimap_fetch_list_free(result);
735 return res; 737 return res;
736} 738}
737 739
738/* current_recursion is for recursive calls. 740/* current_recursion is for recursive calls.
739 current_count means the position inside the internal loop! */ 741 current_count means the position inside the internal loop! */
740void IMAPwrapper::traverseBody(const RecMailP&mail,mailimap_body*body,RecBodyP&target_body, 742void IMAPwrapper::traverseBody(const RecMailP&mail,mailimap_body*body,RecBodyP&target_body,
741 int current_recursion,QValueList<int>recList,int current_count) 743 int current_recursion,Q3ValueList<int>recList,int current_count)
742{ 744{
743 if (!body || current_recursion>=10) { 745 if (!body || current_recursion>=10) {
744 return; 746 return;
745 } 747 }
746 switch (body->bd_type) { 748 switch (body->bd_type) {
747 case MAILIMAP_BODY_1PART: 749 case MAILIMAP_BODY_1PART:
748 { 750 {
749 QValueList<int>countlist = recList; 751 Q3ValueList<int>countlist = recList;
750 countlist.append(current_count); 752 countlist.append(current_count);
751 RecPartP currentPart = new RecPart(); 753 RecPartP currentPart = new RecPart();
752 mailimap_body_type_1part*part1 = body->bd_data.bd_body_1part; 754 mailimap_body_type_1part*part1 = body->bd_data.bd_body_1part;
753 QString id(""); 755 QString id("");
754 currentPart->setPositionlist(countlist); 756 currentPart->setPositionlist(countlist);
755 for (unsigned int j = 0; j < countlist.count();++j) { 757 for (unsigned int j = 0; j < countlist.count();++j) {
756 id+=(j>0?" ":""); 758 id+=(j>0?" ":"");
757 id+=QString("%1").arg(countlist[j]); 759 id+=QString("%1").arg(countlist[j]);
758 } 760 }
759 //odebug << "ID = " << id.latin1() << "" << oendl; 761 //odebug << "ID = " << id.latin1() << "" << oendl;
760 currentPart->setIdentifier(id); 762 currentPart->setIdentifier(id);
761 fillSinglePart(currentPart,part1); 763 fillSinglePart(currentPart,part1);
762 /* important: Check for is NULL 'cause a body can be empty! 764 /* important: Check for is NULL 'cause a body can be empty!
763 And we put it only into the mail if it is the FIRST part */ 765 And we put it only into the mail if it is the FIRST part */
764 if (part1->bd_type==MAILIMAP_BODY_TYPE_1PART_TEXT && target_body->Bodytext().isNull() && countlist[0]==1) { 766 if (part1->bd_type==MAILIMAP_BODY_TYPE_1PART_TEXT && target_body->Bodytext().isNull() && countlist[0]==1) {
765 QString body_text = fetchTextPart(mail,countlist,true,currentPart->Encoding()); 767 QString body_text = fetchTextPart(mail,countlist,true,currentPart->Encoding());
766 768
767 size_t index = 0; 769 size_t index = 0;
768 char*res = 0; 770 char*res = 0;
769 int err = MAILIMF_NO_ERROR; 771 int err = MAILIMF_NO_ERROR;
770 772
771 QString charset = currentPart->searchParamter( "charset"); 773 QString charset = currentPart->searchParamter( "charset");
772 qDebug("CHARSET %s ",charset.latin1() ); 774 qDebug("CHARSET %s ",charset.latin1() );
773 if ( false ) { 775 if ( false ) {
774 //if ( !charset.isEmpty() ) { 776 //if ( !charset.isEmpty() ) {
775 target_body->setCharset( charset ); 777 target_body->setCharset( charset );
776 //err = mailmime_encoded_phrase_parse("iso-8859-1", 778 //err = mailmime_encoded_phrase_parse("iso-8859-1",
777 // text, strlen(text),&index, "iso-8859-1",&res); 779 // text, strlen(text),&index, "iso-8859-1",&res);
778 err = mailmime_encoded_phrase_parse(charset.latin1(), 780 err = mailmime_encoded_phrase_parse(charset.latin1(),
779 body_text.latin1(), body_text.length(),&index, "utf-8",&res); 781 body_text.latin1(), body_text.length(),&index, "utf-8",&res);
780 if (err == MAILIMF_NO_ERROR && res && strlen(res)) { 782 if (err == MAILIMF_NO_ERROR && res && strlen(res)) {
781 //qDebug("res %d %s ", index, res); 783 //qDebug("res %d %s ", index, res);
782 body_text = QString::fromUtf8(res); 784 body_text = QString::fromUtf8(res);
783 } 785 }
784 if (res) free(res); 786 if (res) free(res);
785 } 787 }
786 //qDebug("encoding %d text %s ",currentPart->Encoding().latin1(), body_text.latin1() ); 788 //qDebug("encoding %d text %s ",currentPart->Encoding().latin1(), body_text.latin1() );
787 target_body->setDescription(currentPart); 789 target_body->setDescription(currentPart);
788 target_body->setBodytext(body_text); 790 target_body->setBodytext(body_text);
789 if (countlist.count()>1) { 791 if (countlist.count()>1) {
790 target_body->addPart(currentPart); 792 target_body->addPart(currentPart);
791 } 793 }
792 } else { 794 } else {
793 target_body->addPart(currentPart); 795 target_body->addPart(currentPart);
794 } 796 }
795 if (part1->bd_type==MAILIMAP_BODY_TYPE_1PART_MSG) { 797 if (part1->bd_type==MAILIMAP_BODY_TYPE_1PART_MSG) {
796 traverseBody(mail,part1->bd_data.bd_type_msg->bd_body,target_body,current_recursion+1,countlist); 798 traverseBody(mail,part1->bd_data.bd_type_msg->bd_body,target_body,current_recursion+1,countlist);
797 } 799 }
798 } 800 }
799 break; 801 break;
800 case MAILIMAP_BODY_MPART: 802 case MAILIMAP_BODY_MPART:
801 { 803 {
802 QValueList<int>countlist = recList; 804 Q3ValueList<int>countlist = recList;
803 clistcell*current=0; 805 clistcell*current=0;
804 mailimap_body*current_body=0; 806 mailimap_body*current_body=0;
805 unsigned int ccount = 1; 807 unsigned int ccount = 1;
806 mailimap_body_type_mpart*mailDescription = body->bd_data.bd_body_mpart; 808 mailimap_body_type_mpart*mailDescription = body->bd_data.bd_body_mpart;
807 for (current=clist_begin(mailDescription->bd_list);current!=0;current=clist_next(current)) { 809 for (current=clist_begin(mailDescription->bd_list);current!=0;current=clist_next(current)) {
808 current_body = (mailimap_body*)current->data; 810 current_body = (mailimap_body*)current->data;
809 if (current_body->bd_type==MAILIMAP_BODY_MPART) { 811 if (current_body->bd_type==MAILIMAP_BODY_MPART) {
810 RecPartP targetPart = new RecPart(); 812 RecPartP targetPart = new RecPart();
811 targetPart->setType("multipart"); 813 targetPart->setType("multipart");
812 fillMultiPart(targetPart,mailDescription); 814 fillMultiPart(targetPart,mailDescription);
813 countlist.append(current_count); 815 countlist.append(current_count);
814 targetPart->setPositionlist(countlist); 816 targetPart->setPositionlist(countlist);
815 target_body->addPart(targetPart); 817 target_body->addPart(targetPart);
816 QString id(""); 818 QString id("");
817 for (unsigned int j = 0; j < countlist.count();++j) { 819 for (unsigned int j = 0; j < countlist.count();++j) {
818 id+=(j>0?" ":""); 820 id+=(j>0?" ":"");
819 id+=QString("%1").arg(countlist[j]); 821 id+=QString("%1").arg(countlist[j]);
820 } 822 }
821 // odebug << "ID(mpart) = " << id.latin1() << "" << oendl; 823 // odebug << "ID(mpart) = " << id.latin1() << "" << oendl;
822 } 824 }
823 traverseBody(mail,current_body,target_body,current_recursion+1,countlist,ccount); 825 traverseBody(mail,current_body,target_body,current_recursion+1,countlist,ccount);
824 if (current_body->bd_type==MAILIMAP_BODY_MPART) { 826 if (current_body->bd_type==MAILIMAP_BODY_MPART) {
825 countlist = recList; 827 countlist = recList;
826 } 828 }
827 ++ccount; 829 ++ccount;
828 } 830 }
829 } 831 }
830 break; 832 break;
831 default: 833 default:
832 break; 834 break;
833 } 835 }
834} 836}
835 837
836void IMAPwrapper::fillSinglePart(RecPartP&target_part,mailimap_body_type_1part*Description) 838void IMAPwrapper::fillSinglePart(RecPartP&target_part,mailimap_body_type_1part*Description)
837{ 839{
838 if (!Description) { 840 if (!Description) {
839 return; 841 return;
840 } 842 }
841 switch (Description->bd_type) { 843 switch (Description->bd_type) {
842 case MAILIMAP_BODY_TYPE_1PART_TEXT: 844 case MAILIMAP_BODY_TYPE_1PART_TEXT:
843 target_part->setType("text"); 845 target_part->setType("text");
844 fillSingleTextPart(target_part,Description->bd_data.bd_type_text); 846 fillSingleTextPart(target_part,Description->bd_data.bd_type_text);
845 break; 847 break;
846 case MAILIMAP_BODY_TYPE_1PART_BASIC: 848 case MAILIMAP_BODY_TYPE_1PART_BASIC:
847 fillSingleBasicPart(target_part,Description->bd_data.bd_type_basic); 849 fillSingleBasicPart(target_part,Description->bd_data.bd_type_basic);
848 break; 850 break;
849 case MAILIMAP_BODY_TYPE_1PART_MSG: 851 case MAILIMAP_BODY_TYPE_1PART_MSG:
850 target_part->setType("message"); 852 target_part->setType("message");
@@ -940,117 +942,117 @@ void IMAPwrapper::fillSingleBasicPart(RecPartP&target_part,mailimap_body_type_ba
940} 942}
941 943
942void IMAPwrapper::fillBodyFields(RecPartP&target_part,mailimap_body_fields*which) 944void IMAPwrapper::fillBodyFields(RecPartP&target_part,mailimap_body_fields*which)
943{ 945{
944 if (!which) return; 946 if (!which) return;
945 if (which->bd_parameter && which->bd_parameter->pa_list && which->bd_parameter->pa_list->count>0) { 947 if (which->bd_parameter && which->bd_parameter->pa_list && which->bd_parameter->pa_list->count>0) {
946 clistcell*cur; 948 clistcell*cur;
947 mailimap_single_body_fld_param*param=0; 949 mailimap_single_body_fld_param*param=0;
948 for (cur = clist_begin(which->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) { 950 for (cur = clist_begin(which->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) {
949 param = (mailimap_single_body_fld_param*)cur->data; 951 param = (mailimap_single_body_fld_param*)cur->data;
950 if (param) { 952 if (param) {
951 target_part->addParameter(QString(param->pa_name).lower(),QString(param->pa_value)); 953 target_part->addParameter(QString(param->pa_name).lower(),QString(param->pa_value));
952 } 954 }
953 } 955 }
954 } 956 }
955 mailimap_body_fld_enc*enc = which->bd_encoding; 957 mailimap_body_fld_enc*enc = which->bd_encoding;
956 QString encoding(""); 958 QString encoding("");
957 switch (enc->enc_type) { 959 switch (enc->enc_type) {
958 case MAILIMAP_BODY_FLD_ENC_7BIT: 960 case MAILIMAP_BODY_FLD_ENC_7BIT:
959 encoding = "7bit"; 961 encoding = "7bit";
960 break; 962 break;
961 case MAILIMAP_BODY_FLD_ENC_8BIT: 963 case MAILIMAP_BODY_FLD_ENC_8BIT:
962 encoding = "8bit"; 964 encoding = "8bit";
963 break; 965 break;
964 case MAILIMAP_BODY_FLD_ENC_BINARY: 966 case MAILIMAP_BODY_FLD_ENC_BINARY:
965 encoding="binary"; 967 encoding="binary";
966 break; 968 break;
967 case MAILIMAP_BODY_FLD_ENC_BASE64: 969 case MAILIMAP_BODY_FLD_ENC_BASE64:
968 encoding="base64"; 970 encoding="base64";
969 break; 971 break;
970 case MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE: 972 case MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE:
971 encoding="quoted-printable"; 973 encoding="quoted-printable";
972 break; 974 break;
973 case MAILIMAP_BODY_FLD_ENC_OTHER: 975 case MAILIMAP_BODY_FLD_ENC_OTHER:
974 default: 976 default:
975 if (enc->enc_value) { 977 if (enc->enc_value) {
976 char*t=enc->enc_value; 978 char*t=enc->enc_value;
977 encoding=QString(enc->enc_value); 979 encoding=QString(enc->enc_value);
978 enc->enc_value=0L; 980 enc->enc_value=0L;
979 free(t); 981 free(t);
980 } 982 }
981 } 983 }
982 if (which->bd_description) { 984 if (which->bd_description) {
983 target_part->setDescription(QString(which->bd_description)); 985 target_part->setDescription(QString(which->bd_description));
984 } 986 }
985 target_part->setEncoding(encoding); 987 target_part->setEncoding(encoding);
986 target_part->setSize(which->bd_size); 988 target_part->setSize(which->bd_size);
987} 989}
988void IMAPwrapper::deleteMailList(const QValueList<RecMailP>&target) 990void IMAPwrapper::deleteMailList(const Q3ValueList<RecMailP>&target)
989{ 991{
990 //#if 0 992 //#if 0
991 mailimap_flag_list*flist; 993 mailimap_flag_list*flist;
992 mailimap_set *set; 994 mailimap_set *set;
993 mailimap_store_att_flags * store_flags; 995 mailimap_store_att_flags * store_flags;
994 int err; 996 int err;
995 login(); 997 login();
996 //#endif 998 //#endif
997 if (!m_imap) { 999 if (!m_imap) {
998 return; 1000 return;
999 } 1001 }
1000 int iii = 0; 1002 int iii = 0;
1001 int count = target.count(); 1003 int count = target.count();
1002 // qDebug("imap remove count %d ", count); 1004 // qDebug("imap remove count %d ", count);
1003 1005
1004 1006
1005 mMax = count; 1007 mMax = count;
1006 progress( i18n("Delete")); 1008 progress( i18n("Delete"));
1007 1009
1008 QProgressBar wid ( count ); 1010 Q3ProgressBar wid ( count );
1009 wid.setCaption( i18n("Deleting ...")); 1011 wid.setCaption( i18n("Deleting ..."));
1010 wid.show(); 1012 wid.show();
1011 while (iii < count ) { 1013 while (iii < count ) {
1012 Global::statusMessage(i18n("Delete message %1 of %2").arg(iii).arg(count)); 1014 Global::statusMessage(i18n("Delete message %1 of %2").arg(iii).arg(count));
1013 wid.setProgress( iii ); 1015 wid.setProgress( iii );
1014 wid.raise(); 1016 wid.raise();
1015 qApp->processEvents(); 1017 qApp->processEvents();
1016 RecMailP mail = (*target.at( iii )); 1018 RecMailP mail = (*target.at( iii ));
1017 //#if 0 1019 //#if 0
1018 //qDebug("IMAP remove %d %d ", iii, mail->getNumber() ); 1020 //qDebug("IMAP remove %d %d ", iii, mail->getNumber() );
1019 err = selectMbox(mail->getMbox()); 1021 err = selectMbox(mail->getMbox());
1020 if ( err != MAILIMAP_NO_ERROR ) { 1022 if ( err != MAILIMAP_NO_ERROR ) {
1021 return; 1023 return;
1022 } 1024 }
1023 flist = mailimap_flag_list_new_empty(); 1025 flist = mailimap_flag_list_new_empty();
1024 mailimap_flag_list_add(flist,mailimap_flag_new_deleted()); 1026 mailimap_flag_list_add(flist,mailimap_flag_new_deleted());
1025 store_flags = mailimap_store_att_flags_new_set_flags(flist); 1027 store_flags = mailimap_store_att_flags_new_set_flags(flist);
1026 set = mailimap_set_new_single(mail->getNumber()); 1028 set = mailimap_set_new_single(mail->getNumber());
1027 err = mailimap_store(m_imap,set,store_flags); 1029 err = mailimap_store(m_imap,set,store_flags);
1028 mailimap_set_free( set ); 1030 mailimap_set_free( set );
1029 mailimap_store_att_flags_free(store_flags); 1031 mailimap_store_att_flags_free(store_flags);
1030 1032
1031 if (err != MAILIMAP_NO_ERROR) { 1033 if (err != MAILIMAP_NO_ERROR) {
1032 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl; 1034 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl;
1033 return; 1035 return;
1034 } 1036 }
1035 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl; 1037 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl;
1036 /* should we realy do that at this moment? */ 1038 /* should we realy do that at this moment? */
1037 1039
1038 // err = mailimap_expunge(m_imap); 1040 // err = mailimap_expunge(m_imap);
1039 //if (err != MAILIMAP_NO_ERROR) { 1041 //if (err != MAILIMAP_NO_ERROR) {
1040 // Global::statusMessage(i18n("Error deleting mails: %s").arg(m_imap->imap_response)); 1042 // Global::statusMessage(i18n("Error deleting mails: %s").arg(m_imap->imap_response));
1041 // } 1043 // }
1042 //#endif 1044 //#endif
1043 //deleteMail( mail); 1045 //deleteMail( mail);
1044 ++iii; 1046 ++iii;
1045 } 1047 }
1046 //qDebug("Deleting imap mails... "); 1048 //qDebug("Deleting imap mails... ");
1047 err = mailimap_expunge(m_imap); 1049 err = mailimap_expunge(m_imap);
1048 if (err != MAILIMAP_NO_ERROR) { 1050 if (err != MAILIMAP_NO_ERROR) {
1049 Global::statusMessage(i18n("Error deleting mails: %s").arg(m_imap->imap_response)); 1051 Global::statusMessage(i18n("Error deleting mails: %s").arg(m_imap->imap_response));
1050 } 1052 }
1051} 1053}
1052void IMAPwrapper::deleteMail(const RecMailP&mail) 1054void IMAPwrapper::deleteMail(const RecMailP&mail)
1053{ 1055{
1054 mailimap_flag_list*flist; 1056 mailimap_flag_list*flist;
1055 mailimap_set *set; 1057 mailimap_set *set;
1056 mailimap_store_att_flags * store_flags; 1058 mailimap_store_att_flags * store_flags;
@@ -1069,97 +1071,97 @@ void IMAPwrapper::deleteMail(const RecMailP&mail)
1069 set = mailimap_set_new_single(mail->getNumber()); 1071 set = mailimap_set_new_single(mail->getNumber());
1070 err = mailimap_store(m_imap,set,store_flags); 1072 err = mailimap_store(m_imap,set,store_flags);
1071 mailimap_set_free( set ); 1073 mailimap_set_free( set );
1072 mailimap_store_att_flags_free(store_flags); 1074 mailimap_store_att_flags_free(store_flags);
1073 1075
1074 if (err != MAILIMAP_NO_ERROR) { 1076 if (err != MAILIMAP_NO_ERROR) {
1075 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl; 1077 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl;
1076 return; 1078 return;
1077 } 1079 }
1078 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl; 1080 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl;
1079 /* should we realy do that at this moment? */ 1081 /* should we realy do that at this moment? */
1080 1082
1081 err = mailimap_expunge(m_imap); 1083 err = mailimap_expunge(m_imap);
1082 if (err != MAILIMAP_NO_ERROR) { 1084 if (err != MAILIMAP_NO_ERROR) {
1083 Global::statusMessage(i18n("error deleting mail: %s").arg(m_imap->imap_response)); 1085 Global::statusMessage(i18n("error deleting mail: %s").arg(m_imap->imap_response));
1084 } 1086 }
1085 //qDebug("IMAPwrapper::deleteMail 2"); 1087 //qDebug("IMAPwrapper::deleteMail 2");
1086 1088
1087} 1089}
1088 1090
1089void IMAPwrapper::answeredMail(const RecMailP&mail) 1091void IMAPwrapper::answeredMail(const RecMailP&mail)
1090{ 1092{
1091 mailimap_flag_list*flist; 1093 mailimap_flag_list*flist;
1092 mailimap_set *set; 1094 mailimap_set *set;
1093 mailimap_store_att_flags * store_flags; 1095 mailimap_store_att_flags * store_flags;
1094 int err; 1096 int err;
1095 login(); 1097 login();
1096 if (!m_imap) { 1098 if (!m_imap) {
1097 return; 1099 return;
1098 } 1100 }
1099 err = selectMbox(mail->getMbox()); 1101 err = selectMbox(mail->getMbox());
1100 if ( err != MAILIMAP_NO_ERROR ) { 1102 if ( err != MAILIMAP_NO_ERROR ) {
1101 return; 1103 return;
1102 } 1104 }
1103 flist = mailimap_flag_list_new_empty(); 1105 flist = mailimap_flag_list_new_empty();
1104 mailimap_flag_list_add(flist,mailimap_flag_new_answered()); 1106 mailimap_flag_list_add(flist,mailimap_flag_new_answered());
1105 store_flags = mailimap_store_att_flags_new_add_flags(flist); 1107 store_flags = mailimap_store_att_flags_new_add_flags(flist);
1106 set = mailimap_set_new_single(mail->getNumber()); 1108 set = mailimap_set_new_single(mail->getNumber());
1107 err = mailimap_store(m_imap,set,store_flags); 1109 err = mailimap_store(m_imap,set,store_flags);
1108 mailimap_set_free( set ); 1110 mailimap_set_free( set );
1109 mailimap_store_att_flags_free(store_flags); 1111 mailimap_store_att_flags_free(store_flags);
1110 1112
1111 if (err != MAILIMAP_NO_ERROR) { 1113 if (err != MAILIMAP_NO_ERROR) {
1112 // odebug << "error marking mail: " << m_imap->imap_response << "" << oendl; 1114 // odebug << "error marking mail: " << m_imap->imap_response << "" << oendl;
1113 return; 1115 return;
1114 } 1116 }
1115} 1117}
1116 1118
1117QString IMAPwrapper::fetchTextPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call,const QString&enc) 1119QString IMAPwrapper::fetchTextPart(const RecMailP&mail,const Q3ValueList<int>&path,bool internal_call,const QString&enc)
1118{ 1120{
1119 QString body(""); 1121 QString body("");
1120 encodedString*res = fetchRawPart(mail,path,internal_call); 1122 encodedString*res = fetchRawPart(mail,path,internal_call);
1121 encodedString*r = decode_String(res,enc); 1123 encodedString*r = decode_String(res,enc);
1122 delete res; 1124 delete res;
1123 if (r) { 1125 if (r) {
1124 if (r->Length()>0) { 1126 if (r->Length()>0) {
1125 body = r->Content(); 1127 body = r->Content();
1126 } 1128 }
1127 delete r; 1129 delete r;
1128 } 1130 }
1129 return body; 1131 return body;
1130} 1132}
1131 1133
1132QString IMAPwrapper::fetchTextPart(const RecMailP&mail,const RecPartP&part) 1134QString IMAPwrapper::fetchTextPart(const RecMailP&mail,const RecPartP&part)
1133{ 1135{
1134 return fetchTextPart(mail,part->Positionlist(),false,part->Encoding()); 1136 return fetchTextPart(mail,part->Positionlist(),false,part->Encoding());
1135} 1137}
1136 1138
1137encodedString* IMAPwrapper::fetchDecodedPart(const RecMailP&mail,const RecPartP&part) 1139encodedString* IMAPwrapper::fetchDecodedPart(const RecMailP&mail,const RecPartP&part)
1138{ 1140{
1139 encodedString*res = fetchRawPart(mail,part->Positionlist(),false); 1141 encodedString*res = fetchRawPart(mail,part->Positionlist(),false);
1140 encodedString*r = decode_String(res,part->Encoding()); 1142 encodedString*r = decode_String(res,part->Encoding());
1141 delete res; 1143 delete res;
1142 return r; 1144 return r;
1143} 1145}
1144 1146
1145encodedString* IMAPwrapper::fetchRawPart(const RecMailP&mail,const RecPartP&part) 1147encodedString* IMAPwrapper::fetchRawPart(const RecMailP&mail,const RecPartP&part)
1146{ 1148{
1147 return fetchRawPart(mail,part->Positionlist(),false); 1149 return fetchRawPart(mail,part->Positionlist(),false);
1148} 1150}
1149 1151
1150int IMAPwrapper::deleteAllMail(const FolderP&folder) 1152int IMAPwrapper::deleteAllMail(const FolderP&folder)
1151{ 1153{
1152 login(); 1154 login();
1153 if (!m_imap) { 1155 if (!m_imap) {
1154 return 0; 1156 return 0;
1155 } 1157 }
1156 mailimap_flag_list*flist; 1158 mailimap_flag_list*flist;
1157 mailimap_set *set; 1159 mailimap_set *set;
1158 mailimap_store_att_flags * store_flags; 1160 mailimap_store_att_flags * store_flags;
1159 int err = selectMbox(folder->getName()); 1161 int err = selectMbox(folder->getName());
1160 if ( err != MAILIMAP_NO_ERROR ) { 1162 if ( err != MAILIMAP_NO_ERROR ) {
1161 return 0; 1163 return 0;
1162 } 1164 }
1163 1165
1164 int last = m_imap->imap_selection_info->sel_exists; 1166 int last = m_imap->imap_selection_info->sel_exists;
1165 if (last == 0) { 1167 if (last == 0) {
@@ -1254,97 +1256,97 @@ void IMAPwrapper::statusFolder(folderStat&target_stat,const QString & mailbox)
1254 for (cur = clist_begin(status->st_info_list); 1256 for (cur = clist_begin(status->st_info_list);
1255 cur != NULL ; cur = clist_next(cur)) { 1257 cur != NULL ; cur = clist_next(cur)) {
1256 mailimap_status_info * status_info; 1258 mailimap_status_info * status_info;
1257 status_info = (mailimap_status_info *)clist_content(cur); 1259 status_info = (mailimap_status_info *)clist_content(cur);
1258 switch (status_info->st_att) { 1260 switch (status_info->st_att) {
1259 case MAILIMAP_STATUS_ATT_MESSAGES: 1261 case MAILIMAP_STATUS_ATT_MESSAGES:
1260 target_stat.message_count = status_info->st_value; 1262 target_stat.message_count = status_info->st_value;
1261 break; 1263 break;
1262 case MAILIMAP_STATUS_ATT_RECENT: 1264 case MAILIMAP_STATUS_ATT_RECENT:
1263 target_stat.message_recent = status_info->st_value; 1265 target_stat.message_recent = status_info->st_value;
1264 break; 1266 break;
1265 case MAILIMAP_STATUS_ATT_UNSEEN: 1267 case MAILIMAP_STATUS_ATT_UNSEEN:
1266 target_stat.message_unseen = status_info->st_value; 1268 target_stat.message_unseen = status_info->st_value;
1267 break; 1269 break;
1268 } 1270 }
1269 } 1271 }
1270 } else { 1272 } else {
1271 // odebug << "Error retrieving status" << oendl; 1273 // odebug << "Error retrieving status" << oendl;
1272 } 1274 }
1273 if (status) mailimap_mailbox_data_status_free(status); 1275 if (status) mailimap_mailbox_data_status_free(status);
1274 if (att_list) mailimap_status_att_list_free(att_list); 1276 if (att_list) mailimap_status_att_list_free(att_list);
1275} 1277}
1276 1278
1277void IMAPwrapper::storeMessage(const char*msg,size_t length, const QString&folder) 1279void IMAPwrapper::storeMessage(const char*msg,size_t length, const QString&folder)
1278{ 1280{
1279 login(); 1281 login();
1280 if (!m_imap) return; 1282 if (!m_imap) return;
1281 if (!msg) return; 1283 if (!msg) return;
1282 int r = mailimap_append(m_imap,(char*)folder.latin1(),0,0,msg,length); 1284 int r = mailimap_append(m_imap,(char*)folder.latin1(),0,0,msg,length);
1283 if (r != MAILIMAP_NO_ERROR) { 1285 if (r != MAILIMAP_NO_ERROR) {
1284 Global::statusMessage("Error storing mail!"); 1286 Global::statusMessage("Error storing mail!");
1285 } 1287 }
1286} 1288}
1287 1289
1288MAILLIB::ATYPE IMAPwrapper::getType()const 1290MAILLIB::ATYPE IMAPwrapper::getType()const
1289{ 1291{
1290 return account->getType(); 1292 return account->getType();
1291} 1293}
1292 1294
1293const QString&IMAPwrapper::getName()const 1295const QString&IMAPwrapper::getName()const
1294{ 1296{
1295 // odebug << "Get name: " << account->getAccountName().latin1() << "" << oendl; 1297 // odebug << "Get name: " << account->getAccountName().latin1() << "" << oendl;
1296 return account->getAccountName(); 1298 return account->getAccountName();
1297} 1299}
1298 1300
1299encodedString* IMAPwrapper::fetchRawBody(const RecMailP&mail) 1301encodedString* IMAPwrapper::fetchRawBody(const RecMailP&mail)
1300{ 1302{
1301 // dummy 1303 // dummy
1302 QValueList<int> path; 1304 Q3ValueList<int> path;
1303 return fetchRawPart(mail,path,false); 1305 return fetchRawPart(mail,path,false);
1304} 1306}
1305 1307
1306void IMAPwrapper::mvcpAllMails(const FolderP&fromFolder, 1308void IMAPwrapper::mvcpAllMails(const FolderP&fromFolder,
1307 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit, int maxSizeInKb) 1309 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit, int maxSizeInKb)
1308{ 1310{
1309 if (targetWrapper != this || maxSizeInKb > 0 ) { 1311 if (targetWrapper != this || maxSizeInKb > 0 ) {
1310 mMax = 0; 1312 mMax = 0;
1311 progress( i18n("Copy")); 1313 progress( i18n("Copy"));
1312 AbstractMail::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit, maxSizeInKb); 1314 AbstractMail::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit, maxSizeInKb);
1313 //qDebug("IMAPwrapper::mvcpAllMails::Using generic"); 1315 //qDebug("IMAPwrapper::mvcpAllMails::Using generic");
1314 // odebug << "Using generic" << oendl; 1316 // odebug << "Using generic" << oendl;
1315 return; 1317 return;
1316 } 1318 }
1317 mailimap_set *set = 0; 1319 mailimap_set *set = 0;
1318 login(); 1320 login();
1319 if (!m_imap) { 1321 if (!m_imap) {
1320 return; 1322 return;
1321 } 1323 }
1322 int err = selectMbox(fromFolder->getName()); 1324 int err = selectMbox(fromFolder->getName());
1323 if ( err != MAILIMAP_NO_ERROR ) { 1325 if ( err != MAILIMAP_NO_ERROR ) {
1324 return; 1326 return;
1325 } 1327 }
1326 Global::statusMessage( i18n("Copying mails on server...") ); 1328 Global::statusMessage( i18n("Copying mails on server...") );
1327 int last = m_imap->imap_selection_info->sel_exists; 1329 int last = m_imap->imap_selection_info->sel_exists;
1328 set = mailimap_set_new_interval( 1, last ); 1330 set = mailimap_set_new_interval( 1, last );
1329 err = mailimap_copy(m_imap,set,targetFolder.latin1()); 1331 err = mailimap_copy(m_imap,set,targetFolder.latin1());
1330 mailimap_set_free( set ); 1332 mailimap_set_free( set );
1331 if ( err != MAILIMAP_NO_ERROR ) { 1333 if ( err != MAILIMAP_NO_ERROR ) {
1332 QString error_msg = i18n("Error copy mails: %1").arg(m_imap->imap_response); 1334 QString error_msg = i18n("Error copy mails: %1").arg(m_imap->imap_response);
1333 Global::statusMessage(error_msg); 1335 Global::statusMessage(error_msg);
1334 // odebug << error_msg << oendl; 1336 // odebug << error_msg << oendl;
1335 return; 1337 return;
1336 } 1338 }
1337 if (moveit) { 1339 if (moveit) {
1338 deleteAllMail(fromFolder); 1340 deleteAllMail(fromFolder);
1339 } 1341 }
1340} 1342}
1341 1343
1342void IMAPwrapper::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 1344void IMAPwrapper::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
1343{ 1345{
1344 if (targetWrapper != this) { 1346 if (targetWrapper != this) {
1345 // odebug << "Using generic" << oendl; 1347 // odebug << "Using generic" << oendl;
1346 AbstractMail::mvcpMail(mail,targetFolder,targetWrapper,moveit); 1348 AbstractMail::mvcpMail(mail,targetFolder,targetWrapper,moveit);
1347 return; 1349 return;
1348 } 1350 }
1349 mailimap_set *set = 0; 1351 mailimap_set *set = 0;
1350 login(); 1352 login();