summaryrefslogtreecommitdiff
path: root/noncore/net
Unidiff
Diffstat (limited to 'noncore/net') (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
@@ -8,19 +8,37 @@
8 8
9IMAPwrapper::IMAPwrapper( IMAPaccount *a ) 9IMAPwrapper::IMAPwrapper( IMAPaccount *a )
10 : AbstractMail() 10 : AbstractMail()
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()
17{ 18{
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 );
24} 42}
25 43
26void IMAPwrapper::login() 44void IMAPwrapper::login()
@@ -99,33 +117,30 @@ void IMAPwrapper::logout()
99 int err = MAILIMAP_NO_ERROR; 117 int err = MAILIMAP_NO_ERROR;
100 if (!m_imap) return; 118 if (!m_imap) return;
101 err = mailimap_logout( m_imap ); 119 err = mailimap_logout( m_imap );
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
129 int last = m_imap->imap_selection_info->sel_exists; 144 int last = m_imap->imap_selection_info->sel_exists;
130 145
131 if (last == 0) { 146 if (last == 0) {
@@ -386,16 +401,14 @@ RecBody IMAPwrapper::fetchBody(const RecMail&mail)
386 mb = mail.getMbox().latin1(); 401 mb = mail.getMbox().latin1();
387 402
388 login(); 403 login();
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
399 /* the range has to start at 1!!! not with 0!!!! */ 412 /* the range has to start at 1!!! not with 0!!!! */
400 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); 413 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() );
401 fetchAtt = mailimap_fetch_att_new_bodystructure(); 414 fetchAtt = mailimap_fetch_att_new_bodystructure();
@@ -459,13 +472,12 @@ QStringList IMAPwrapper::address_list_to_stringlist(clist*list)
459 return l; 472 return l;
460} 473}
461 474
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;
469 clistcell*current,*cur; 481 clistcell*current,*cur;
470 mailimap_section_part * section_part = 0; 482 mailimap_section_part * section_part = 0;
471 mailimap_section_spec * section_spec = 0; 483 mailimap_section_spec * section_spec = 0;
@@ -474,16 +486,14 @@ encodedString*IMAPwrapper::fetchRawPart(const RecMail&mail,const QValueList<int>
474 486
475 login(); 487 login();
476 if (!m_imap) { 488 if (!m_imap) {
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 }
487 set = mailimap_set_new_single(mail.getNumber()); 497 set = mailimap_set_new_single(mail.getNumber());
488 498
489 clist*id_list = 0; 499 clist*id_list = 0;
@@ -770,16 +780,14 @@ void IMAPwrapper::deleteMail(const RecMail&mail)
770 mailimap_store_att_flags * store_flags; 780 mailimap_store_att_flags * store_flags;
771 int err; 781 int err;
772 login(); 782 login();
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();
783 mailimap_flag_list_add(flist,mailimap_flag_new_deleted()); 791 mailimap_flag_list_add(flist,mailimap_flag_new_deleted());
784 store_flags = mailimap_store_att_flags_new_set_flags(flist); 792 store_flags = mailimap_store_att_flags_new_set_flags(flist);
785 set = mailimap_set_new_single(mail.getNumber()); 793 set = mailimap_set_new_single(mail.getNumber());
@@ -807,16 +815,14 @@ void IMAPwrapper::answeredMail(const RecMail&mail)
807 mailimap_store_att_flags * store_flags; 815 mailimap_store_att_flags * store_flags;
808 int err; 816 int err;
809 login(); 817 login();
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();
820 mailimap_flag_list_add(flist,mailimap_flag_new_answered()); 826 mailimap_flag_list_add(flist,mailimap_flag_new_answered());
821 store_flags = mailimap_store_att_flags_new_add_flags(flist); 827 store_flags = mailimap_store_att_flags_new_add_flags(flist);
822 set = mailimap_set_new_single(mail.getNumber()); 828 set = mailimap_set_new_single(mail.getNumber());
@@ -869,17 +875,17 @@ int IMAPwrapper::deleteAllMail(const Folder*folder)
869 if (!m_imap) { 875 if (!m_imap) {
870 return 0; 876 return 0;
871 } 877 }
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!"));
883 return 0; 889 return 0;
884 } 890 }
885 flist = mailimap_flag_list_new_empty(); 891 flist = mailimap_flag_list_new_empty();
@@ -1019,33 +1025,34 @@ encodedString* IMAPwrapper::fetchRawBody(const RecMail&mail)
1019 QValueList<int> path; 1025 QValueList<int> path;
1020 return fetchRawPart(mail,path,false); 1026 return fetchRawPart(mail,path,false);
1021} 1027}
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 }
1051} 1058}
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
@@ -51,12 +51,13 @@ public:
51protected: 51protected:
52 RecMail*parse_list_result(mailimap_msg_att*); 52 RecMail*parse_list_result(mailimap_msg_att*);
53 void login(); 53 void login();
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);
60 void fillSingleBasicPart(RecPart&target_part,mailimap_body_type_basic*which); 61 void fillSingleBasicPart(RecPart&target_part,mailimap_body_type_basic*which);
61 void fillSingleMsgPart(RecPart&target_part,mailimap_body_type_msg*which); 62 void fillSingleMsgPart(RecPart&target_part,mailimap_body_type_msg*which);
62 void fillMultiPart(RecPart&target_part,mailimap_body_type_mpart*which); 63 void fillMultiPart(RecPart&target_part,mailimap_body_type_mpart*which);
@@ -66,9 +67,10 @@ protected:
66 static void fillBodyFields(RecPart&target_part,mailimap_body_fields*which); 67 static void fillBodyFields(RecPart&target_part,mailimap_body_fields*which);
67 static QStringList address_list_to_stringlist(clist*list); 68 static QStringList address_list_to_stringlist(clist*list);
68 69
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