summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.cpp63
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.h2
2 files changed, 37 insertions, 28 deletions
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
index 23c678b..98634a3 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
@@ -11,6 +11,7 @@ IMAPwrapper::IMAPwrapper( IMAPaccount *a )
11{ 11{
12 account = a; 12 account = a;
13 m_imap = 0; 13 m_imap = 0;
14 m_Lastmbox = "";
14} 15}
15 16
16IMAPwrapper::~IMAPwrapper() 17IMAPwrapper::~IMAPwrapper()
@@ -18,6 +19,23 @@ IMAPwrapper::~IMAPwrapper()
18 logout(); 19 logout();
19} 20}
20 21
22/* to avoid to often select statements in loops etc.
23 we trust that we are logged in and connection is established!*/
24int IMAPwrapper::selectMbox(const QString&mbox)
25{
26 if (mbox == m_Lastmbox) {
27 return MAILIMAP_NO_ERROR;
28 }
29 int err = mailimap_select( m_imap, (char*)mbox.latin1());
30 if ( err != MAILIMAP_NO_ERROR ) {
31 qDebug("error selecting mailbox: %s",m_imap->imap_response);
32 m_Lastmbox = "";
33 return err;
34 }
35 m_Lastmbox = mbox;
36 return err;
37}
38
21void IMAPwrapper::imap_progress( size_t current, size_t maximum ) 39void IMAPwrapper::imap_progress( size_t current, size_t maximum )
22{ 40{
23 qDebug( "IMAP: %i of %i", current, maximum ); 41 qDebug( "IMAP: %i of %i", current, maximum );
@@ -102,27 +120,24 @@ void IMAPwrapper::logout()
102 err = mailimap_close( m_imap ); 120 err = mailimap_close( m_imap );
103 mailimap_free( m_imap ); 121 mailimap_free( m_imap );
104 m_imap = 0; 122 m_imap = 0;
123 m_Lastmbox = "";
105} 124}
106 125
107void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target ) 126void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
108{ 127{
109 const char *mb = 0;
110 int err = MAILIMAP_NO_ERROR; 128 int err = MAILIMAP_NO_ERROR;
111 clist *result = 0; 129 clist *result = 0;
112 clistcell *current; 130 clistcell *current;
113// mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate,*fetchAttSize;
114 mailimap_fetch_type *fetchType = 0; 131 mailimap_fetch_type *fetchType = 0;
115 mailimap_set *set = 0; 132 mailimap_set *set = 0;
116 133
117 mb = mailbox.latin1();
118 login(); 134 login();
119 if (!m_imap) { 135 if (!m_imap) {
120 return; 136 return;
121 } 137 }
122 /* select mailbox READONLY for operations */ 138 /* select mailbox READONLY for operations */
123 err = mailimap_examine( m_imap, (char*)mb); 139 err = selectMbox(mailbox);
124 if ( err != MAILIMAP_NO_ERROR ) { 140 if ( err != MAILIMAP_NO_ERROR ) {
125 Global::statusMessage(tr("error selecting mailbox: %1").arg(m_imap->imap_response));
126 return; 141 return;
127 } 142 }
128 143
@@ -389,10 +404,8 @@ RecBody IMAPwrapper::fetchBody(const RecMail&mail)
389 if (!m_imap) { 404 if (!m_imap) {
390 return body; 405 return body;
391 } 406 }
392 407 err = selectMbox(mail.getMbox());
393 err = mailimap_select( m_imap, (char*)mb);
394 if ( err != MAILIMAP_NO_ERROR ) { 408 if ( err != MAILIMAP_NO_ERROR ) {
395 qDebug("error selecting mailbox: %s",m_imap->imap_response);
396 return body; 409 return body;
397 } 410 }
398 411
@@ -462,7 +475,6 @@ QStringList IMAPwrapper::address_list_to_stringlist(clist*list)
462encodedString*IMAPwrapper::fetchRawPart(const RecMail&mail,const QValueList<int>&path,bool internal_call) 475encodedString*IMAPwrapper::fetchRawPart(const RecMail&mail,const QValueList<int>&path,bool internal_call)
463{ 476{
464 encodedString*res=new encodedString; 477 encodedString*res=new encodedString;
465 const char*mb;
466 int err; 478 int err;
467 mailimap_fetch_type *fetchType; 479 mailimap_fetch_type *fetchType;
468 mailimap_set *set; 480 mailimap_set *set;
@@ -477,10 +489,8 @@ encodedString*IMAPwrapper::fetchRawPart(const RecMail&mail,const QValueList<int>
477 return res; 489 return res;
478 } 490 }
479 if (!internal_call) { 491 if (!internal_call) {
480 mb = mail.getMbox().latin1(); 492 err = selectMbox(mail.getMbox());
481 err = mailimap_select( m_imap, (char*)mb);
482 if ( err != MAILIMAP_NO_ERROR ) { 493 if ( err != MAILIMAP_NO_ERROR ) {
483 qDebug("error selecting mailbox: %s",m_imap->imap_response);
484 return res; 494 return res;
485 } 495 }
486 } 496 }
@@ -773,10 +783,8 @@ void IMAPwrapper::deleteMail(const RecMail&mail)
773 if (!m_imap) { 783 if (!m_imap) {
774 return; 784 return;
775 } 785 }
776 const char *mb = mail.getMbox().latin1(); 786 err = selectMbox(mail.getMbox());
777 err = mailimap_select( m_imap, (char*)mb);
778 if ( err != MAILIMAP_NO_ERROR ) { 787 if ( err != MAILIMAP_NO_ERROR ) {
779 qDebug("error selecting mailbox for delete: %s",m_imap->imap_response);
780 return; 788 return;
781 } 789 }
782 flist = mailimap_flag_list_new_empty(); 790 flist = mailimap_flag_list_new_empty();
@@ -810,10 +818,8 @@ void IMAPwrapper::answeredMail(const RecMail&mail)
810 if (!m_imap) { 818 if (!m_imap) {
811 return; 819 return;
812 } 820 }
813 const char *mb = mail.getMbox().latin1(); 821 err = selectMbox(mail.getMbox());
814 err = mailimap_select( m_imap, (char*)mb);
815 if ( err != MAILIMAP_NO_ERROR ) { 822 if ( err != MAILIMAP_NO_ERROR ) {
816 qDebug("error selecting mailbox for mark: %s",m_imap->imap_response);
817 return; 823 return;
818 } 824 }
819 flist = mailimap_flag_list_new_empty(); 825 flist = mailimap_flag_list_new_empty();
@@ -872,11 +878,11 @@ int IMAPwrapper::deleteAllMail(const Folder*folder)
872 mailimap_flag_list*flist; 878 mailimap_flag_list*flist;
873 mailimap_set *set; 879 mailimap_set *set;
874 mailimap_store_att_flags * store_flags; 880 mailimap_store_att_flags * store_flags;
875 int err = mailimap_select( m_imap, folder->getName().latin1()); 881 int err = selectMbox(folder->getName());
876 if ( err != MAILIMAP_NO_ERROR ) { 882 if ( err != MAILIMAP_NO_ERROR ) {
877 Global::statusMessage(tr("error selecting mailbox: %1").arg(m_imap->imap_response));
878 return 0; 883 return 0;
879 } 884 }
885
880 int last = m_imap->imap_selection_info->sel_exists; 886 int last = m_imap->imap_selection_info->sel_exists;
881 if (last == 0) { 887 if (last == 0) {
882 Global::statusMessage(tr("Mailbox has no mails!")); 888 Global::statusMessage(tr("Mailbox has no mails!"));
@@ -1022,29 +1028,30 @@ encodedString* IMAPwrapper::fetchRawBody(const RecMail&mail)
1022 1028
1023void IMAPwrapper::mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 1029void IMAPwrapper::mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
1024{ 1030{
1025 qDebug("mvcp mail imap");
1026 if (targetWrapper != this) { 1031 if (targetWrapper != this) {
1027 AbstractMail::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit); 1032 AbstractMail::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit);
1028 qDebug("Using generic"); 1033 qDebug("Using generic");
1029 return; 1034 return;
1030 } 1035 }
1031 qDebug("Using internal");
1032 mailimap_set *set = 0; 1036 mailimap_set *set = 0;
1033 1037 login();
1034 int err = mailimap_select( m_imap, fromFolder->getName().latin1()); 1038 if (!m_imap) {
1039 return;
1040 }
1041 int err = selectMbox(fromFolder->getName());
1035 if ( err != MAILIMAP_NO_ERROR ) { 1042 if ( err != MAILIMAP_NO_ERROR ) {
1036 Global::statusMessage(tr("error selecting mailbox: %1").arg(m_imap->imap_response));
1037 return; 1043 return;
1038 } 1044 }
1039
1040 int last = m_imap->imap_selection_info->sel_exists; 1045 int last = m_imap->imap_selection_info->sel_exists;
1041 set = mailimap_set_new_interval( 1, last ); 1046 set = mailimap_set_new_interval( 1, last );
1042 err = mailimap_copy(m_imap,set,targetFolder.latin1()); 1047 err = mailimap_copy(m_imap,set,targetFolder.latin1());
1048 mailimap_set_free( set );
1043 if ( err != MAILIMAP_NO_ERROR ) { 1049 if ( err != MAILIMAP_NO_ERROR ) {
1044 Global::statusMessage(tr("error copy mails: %1").arg(m_imap->imap_response)); 1050 QString error_msg = tr("error copy mails: %1").arg(m_imap->imap_response);
1051 Global::statusMessage(error_msg);
1052 qDebug(error_msg);
1045 return; 1053 return;
1046 } 1054 }
1047 mailimap_set_free( set );
1048 if (moveit) { 1055 if (moveit) {
1049 deleteAllMail(fromFolder); 1056 deleteAllMail(fromFolder);
1050 } 1057 }
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.h b/noncore/net/mail/libmailwrapper/imapwrapper.h
index 07c6210..99986c2 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.h
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.h
@@ -54,6 +54,7 @@ protected:
54 54
55 virtual QString fetchTextPart(const RecMail&mail,const QValueList<int>&path,bool internal_call=false,const QString&enc=""); 55 virtual QString fetchTextPart(const RecMail&mail,const QValueList<int>&path,bool internal_call=false,const QString&enc="");
56 virtual encodedString*fetchRawPart(const RecMail&mail,const QValueList<int>&path,bool internal_call); 56 virtual encodedString*fetchRawPart(const RecMail&mail,const QValueList<int>&path,bool internal_call);
57 int selectMbox(const QString&mbox);
57 58
58 void fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description); 59 void fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description);
59 void fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which); 60 void fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which);
@@ -69,6 +70,7 @@ protected:
69 70
70 IMAPaccount *account; 71 IMAPaccount *account;
71 mailimap *m_imap; 72 mailimap *m_imap;
73 QString m_Lastmbox;
72}; 74};
73 75
74#endif 76#endif