summaryrefslogtreecommitdiffabout
path: root/kmicromail
Unidiff
Diffstat (limited to 'kmicromail') (more/less context) (ignore whitespace changes)
-rw-r--r--kmicromail/libmailwrapper/abstractmail.cpp53
-rw-r--r--kmicromail/libmailwrapper/imapwrapper.cpp62
-rw-r--r--kmicromail/libmailwrapper/imapwrapper.h4
-rw-r--r--kmicromail/libmailwrapper/pop3wrapper.cpp49
4 files changed, 67 insertions, 101 deletions
diff --git a/kmicromail/libmailwrapper/abstractmail.cpp b/kmicromail/libmailwrapper/abstractmail.cpp
index cef4e97..f876235 100644
--- a/kmicromail/libmailwrapper/abstractmail.cpp
+++ b/kmicromail/libmailwrapper/abstractmail.cpp
@@ -1,55 +1,56 @@
1// CHANGED 2004-09-31 Lutz Rogowski 1// CHANGED 2004-09-31 Lutz Rogowski
2#include "abstractmail.h" 2#include "abstractmail.h"
3#include "imapwrapper.h" 3#include "imapwrapper.h"
4#include "pop3wrapper.h" 4#include "pop3wrapper.h"
5#include "nntpwrapper.h" 5#include "nntpwrapper.h"
6#include "mhwrapper.h" 6#include "mhwrapper.h"
7#include "mailtypes.h" 7#include "mailtypes.h"
8#include <qpe/global.h>
8 9
9 10
10#include <qprogressbar.h> 11#include <qprogressbar.h>
11#include <qapplication.h> 12#include <qapplication.h>
12 13
13#include <kdecore/kstandarddirs.h> 14#include <kdecore/kstandarddirs.h>
14#include <qfile.h> 15#include <qfile.h>
15#include <qtextstream.h> 16#include <qtextstream.h>
16#include <stdlib.h> 17#include <stdlib.h>
17#include <libetpan/mailmime_content.h> 18#include <libetpan/mailmime_content.h>
18#include <libetpan/mailmime.h> 19#include <libetpan/mailmime.h>
19 20
20using namespace Opie::Core; 21using namespace Opie::Core;
21AbstractMail* AbstractMail::getWrapper(IMAPaccount *a) 22AbstractMail* AbstractMail::getWrapper(IMAPaccount *a)
22{ 23{
23 return new IMAPwrapper(a); 24 return new IMAPwrapper(a);
24} 25}
25 26
26AbstractMail* AbstractMail::getWrapper(POP3account *a) 27AbstractMail* AbstractMail::getWrapper(POP3account *a)
27{ 28{
28 return new POP3wrapper(a); 29 return new POP3wrapper(a);
29} 30}
30 31
31AbstractMail* AbstractMail::getWrapper(NNTPaccount *a) 32AbstractMail* AbstractMail::getWrapper(NNTPaccount *a)
32{ 33{
33 return new NNTPwrapper(a); 34 return new NNTPwrapper(a);
34} 35}
35 36
36AbstractMail* AbstractMail::getWrapper(const QString&a,const QString&name) 37AbstractMail* AbstractMail::getWrapper(const QString&a,const QString&name)
37{ 38{
38 return new MHwrapper(a,name); 39 return new MHwrapper(a,name);
39} 40}
40 41
41AbstractMail* AbstractMail::getWrapper(Account*a) 42AbstractMail* AbstractMail::getWrapper(Account*a)
42{ 43{
43 if (!a) return 0; 44 if (!a) return 0;
44 switch (a->getType()) { 45 switch (a->getType()) {
45 case MAILLIB::A_IMAP: 46 case MAILLIB::A_IMAP:
46 return new IMAPwrapper((IMAPaccount*)a); 47 return new IMAPwrapper((IMAPaccount*)a);
47 break; 48 break;
48 case MAILLIB::A_POP3: 49 case MAILLIB::A_POP3:
49 return new POP3wrapper((POP3account*)a); 50 return new POP3wrapper((POP3account*)a);
50 break; 51 break;
51 case MAILLIB::A_NNTP: 52 case MAILLIB::A_NNTP:
52 return new NNTPwrapper((NNTPaccount*)a); 53 return new NNTPwrapper((NNTPaccount*)a);
53 break; 54 break;
54 default: 55 default:
55 return 0; 56 return 0;
@@ -101,137 +102,109 @@ QString AbstractMail::convert_String(const char*text)
101 if (err == MAILIMF_NO_ERROR && res && strlen(res)) { 102 if (err == MAILIMF_NO_ERROR && res && strlen(res)) {
102// result = QString(res); 103// result = QString(res);
103// odebug << "Res: " << res << ", length: " << strlen(res) << "" << oendl; 104// odebug << "Res: " << res << ", length: " << strlen(res) << "" << oendl;
104 } 105 }
105 if (res) free(res); 106 if (res) free(res);
106 return result; 107 return result;
107} 108}
108 109
109/* cp & paste from launcher */ 110/* cp & paste from launcher */
110QString AbstractMail::gen_attachment_id() 111QString AbstractMail::gen_attachment_id()
111{ 112{
112 QFile file( "/proc/sys/kernel/random/uuid" ); 113 QFile file( "/proc/sys/kernel/random/uuid" );
113 if (!file.open(IO_ReadOnly ) ) 114 if (!file.open(IO_ReadOnly ) )
114 return QString::null; 115 return QString::null;
115 116
116 QTextStream stream(&file); 117 QTextStream stream(&file);
117 118
118 return "{" + stream.read().stripWhiteSpace() + "}"; 119 return "{" + stream.read().stripWhiteSpace() + "}";
119} 120}
120 121
121int AbstractMail::createMbox(const QString&,const FolderP&,const QString& ,bool) 122int AbstractMail::createMbox(const QString&,const FolderP&,const QString& ,bool)
122{ 123{
123 return 0; 124 return 0;
124} 125}
125 126
126QString AbstractMail::defaultLocalfolder() 127QString AbstractMail::defaultLocalfolder()
127{ 128{
128 // QString f = getenv( "HOME" ); 129 // QString f = getenv( "HOME" );
129 QString f = locateLocal( "data", "kopiemail/localmail"); 130 QString f = locateLocal( "data", "kopiemail/localmail");
130 // f += "/Applications/opiemail/localmail"; 131 // f += "/Applications/opiemail/localmail";
131 return f; 132 return f;
132} 133}
133 134
134QString AbstractMail::draftFolder() 135QString AbstractMail::draftFolder()
135{ 136{
136 return QString("Drafts"); 137 return QString("Drafts");
137} 138}
138 139
139/* temporary - will be removed when implemented in all classes */ 140/* temporary - will be removed when implemented in all classes */
140void AbstractMail::deleteMails(const QString &,const QValueList<Opie::Core::OSmartPointer<RecMail> > &) 141void AbstractMail::deleteMails(const QString &,const QValueList<Opie::Core::OSmartPointer<RecMail> > &)
141{ 142{
142} 143}
143void AbstractMail::deleteMailList(const QValueList<RecMailP>&target) 144void AbstractMail::deleteMailList(const QValueList<RecMailP>&target)
144{ 145{
145 //qDebug("AbstractMail::deleteMailList:: Please reimplement! "); 146 //qDebug("AbstractMail::deleteMailList:: Please reimplement! ");
146 // this is currently re-implemented in pop3wrapper and imapwrapper 147 // this is currently re-implemented in pop3wrapper and imapwrapper
147 int iii = 0; 148 int iii = 0;
148 int count = target.count(); 149 int count = target.count();
149 QProgressBar bar( count,0 ); 150 QWidget wid;
150 bar.setCaption (("Removing mails - close to abort!") ); 151 wid.show();
151 int w = 300; 152 while (iii < count ) {
152 if ( QApplication::desktop()->width() < 320 ) 153 Global::statusMessage(tr("Delete message %1 of %2").arg(iii).arg(count));
153 w = 220; 154 wid.raise();
154 int h = bar.sizeHint().height() ;
155 int dw = QApplication::desktop()->width();
156 int dh = QApplication::desktop()->height();
157 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
158 bar.show();
159 int modulo = (count/10)+1;
160 int incCounter = 0;
161 while (iii < count ) {
162 if ( ! bar.isVisible() )
163 return ;
164 if ( incCounter % modulo == 0 )
165 bar.setProgress( incCounter );
166 ++incCounter;
167 qApp->processEvents(); 155 qApp->processEvents();
168 RecMailP mail = (*target.at( iii )); 156 RecMailP mail = (*target.at( iii ));
169 deleteMail(mail); 157 deleteMail(mail);
170 ++iii; 158 ++iii;
171 } 159 }
172} 160}
173void AbstractMail::mvcpAllMails(const FolderP&fromFolder, 161void AbstractMail::mvcpAllMails(const FolderP&fromFolder,
174 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit, int maxSizeInKb) 162 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit, int maxSizeInKb)
175{ 163{
176 QValueList<RecMailP> t; 164 QValueList<RecMailP> t;
177 listMessages(fromFolder->getName(),t, maxSizeInKb); 165 listMessages(fromFolder->getName(),t, maxSizeInKb);
178 mvcpMailList( t,targetFolder,targetWrapper,moveit); 166 mvcpMailList( t,targetFolder,targetWrapper,moveit);
179 167
180} 168}
181void AbstractMail::mvcpMailList(const QValueList<RecMailP>& t, 169void AbstractMail::mvcpMailList(const QValueList<RecMailP>& t,
182 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 170 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
183{ 171{
184 encodedString*st = 0; 172 encodedString*st = 0;
185 int iii = 0; 173 int iii = 0;
186 int count = t.count(); 174 int count = t.count();
187 if ( count == 0 ) 175 if ( count == 0 )
188 return; 176 return;
189 177 // wel, processevents is qite strange, we need a widget for getting
190 QProgressBar bar( count,0 ); 178 // Global::statusMessage(tr("Copy2 message %1").arg(iii)); displayed
191 bar.setCaption (("Copying mails - close to abort!") ); 179 QWidget wid;
192 int w = 300; 180 wid.show();
193 if ( QApplication::desktop()->width() < 320 ) 181 while (iii < count ) {
194 w = 220; 182 Global::statusMessage(tr("Copy message %1 of %2").arg(iii).arg(count));
195 int h = bar.sizeHint().height() ; 183 wid.raise();
196 int dw = QApplication::desktop()->width();
197 int dh = QApplication::desktop()->height();
198 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
199 bar.show();
200 int modulo = (count/10)+1;
201 int incCounter = 0;
202 while (iii < count ) {
203 if ( ! bar.isVisible() )
204 return ;
205 if ( incCounter % modulo == 0 )
206 bar.setProgress( incCounter );
207 ++incCounter;
208 bar.raise();
209 qApp->processEvents(); 184 qApp->processEvents();
210 //qDebug("copy ");
211 RecMailP r = (*t.at( iii )); 185 RecMailP r = (*t.at( iii ));
212 st = fetchRawBody(r); 186 st = fetchRawBody(r);
213 if (st) { 187 if (st) {
214 targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder); 188 targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder);
215 delete st; 189 delete st;
216 } 190 }
217 ++iii; 191 ++iii;
218 } 192 }
219 bar.hide();
220 if (moveit) { 193 if (moveit) {
221 deleteMailList( t ); 194 deleteMailList( t );
222 //deleteAllMail(fromFolder); 195 //deleteAllMail(fromFolder);
223 } 196 }
224} 197}
225 198
226void AbstractMail::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 199void AbstractMail::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
227{ 200{
228 encodedString*st = 0; 201 encodedString*st = 0;
229 st = fetchRawBody(mail); 202 st = fetchRawBody(mail);
230 if (st) { 203 if (st) {
231 targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder); 204 targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder);
232 delete st; 205 delete st;
233 } 206 }
234 if (moveit) { 207 if (moveit) {
235 deleteMail(mail); 208 deleteMail(mail);
236 } 209 }
237} 210}
diff --git a/kmicromail/libmailwrapper/imapwrapper.cpp b/kmicromail/libmailwrapper/imapwrapper.cpp
index 021633b..be825ef 100644
--- a/kmicromail/libmailwrapper/imapwrapper.cpp
+++ b/kmicromail/libmailwrapper/imapwrapper.cpp
@@ -1,94 +1,119 @@
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#include "imapwrapper.h" 6#include "imapwrapper.h"
7#include "mailtypes.h" 7#include "mailtypes.h"
8#include "logindialog.h" 8#include "logindialog.h"
9#include <qprogressbar.h> 9#include <qprogressbar.h>
10 10
11using namespace Opie::Core; 11using namespace Opie::Core;
12int IMAPwrapper::mMax = 0;
13int IMAPwrapper::mCurrent = 0;
14
12IMAPwrapper::IMAPwrapper( IMAPaccount *a ) 15IMAPwrapper::IMAPwrapper( IMAPaccount *a )
13 : AbstractMail() 16 : AbstractMail()
14{ 17{
15 account = a; 18 account = a;
16 m_imap = 0; 19 m_imap = 0;
17 m_Lastmbox = ""; 20 m_Lastmbox = "";
21 mCurrent = 0;
22 mMax = 0;
18} 23}
19 24
20IMAPwrapper::~IMAPwrapper() 25IMAPwrapper::~IMAPwrapper()
21{ 26{
22 logout(); 27 logout();
23} 28}
24 29
25/* to avoid to often select statements in loops etc. 30/* to avoid to often select statements in loops etc.
26 we trust that we are logged in and connection is established!*/ 31 we trust that we are logged in and connection is established!*/
27int IMAPwrapper::selectMbox(const QString&mbox) 32int IMAPwrapper::selectMbox(const QString&mbox)
28{ 33{
29 if (mbox == m_Lastmbox) { 34 if (mbox == m_Lastmbox) {
30 return MAILIMAP_NO_ERROR; 35 return MAILIMAP_NO_ERROR;
31 } 36 }
32 int err = mailimap_select( m_imap, (char*)mbox.latin1()); 37 int err = mailimap_select( m_imap, (char*)mbox.latin1());
33 if ( err != MAILIMAP_NO_ERROR ) { 38 if ( err != MAILIMAP_NO_ERROR ) {
34 m_Lastmbox = ""; 39 m_Lastmbox = "";
35 return err; 40 return err;
36 } 41 }
37 m_Lastmbox = mbox; 42 m_Lastmbox = mbox;
38 return err; 43 return err;
39} 44}
40 45
41void IMAPwrapper::imap_progress( size_t current, size_t maximum ) 46void IMAPwrapper::imap_progress( size_t current, size_t maximum )
42{ 47{
48 //qDebug("imap progress %d of %d ",current,maximum );
49 //Global::statusMessage(tr("Downloading message %1 of %2").arg( current).arg(maximum));
50 //qApp->processEvents()
51 static int last = 0;
52 if ( last != current )
53 IMAPwrapper::progress();
54 last = current;
55}
56void IMAPwrapper::progress( QString m )
57{
58
59 static QString mProgrMess;
60 if ( m != QString::null ) {
61 mProgrMess = m;
62 mCurrent = 0;
63 return;
64 }
65 QString mess;
66 //qDebug("progress ");
67 if ( mMax ) mess = mProgrMess +tr(" message %1 of %2").arg( mCurrent++).arg(mMax);
68 else mess = mProgrMess +tr(" message %1").arg( mCurrent++);
69 Global::statusMessage(mess);
43 qApp->processEvents(); 70 qApp->processEvents();
44 qDebug("imap progress %d of %d ",current,maximum );
45} 71}
46
47bool IMAPwrapper::start_tls(bool force_tls) 72bool IMAPwrapper::start_tls(bool force_tls)
48{ 73{
49 int err; 74 int err;
50 bool try_tls; 75 bool try_tls;
51 mailimap_capability_data * cap_data = 0; 76 mailimap_capability_data * cap_data = 0;
52 77
53 err = mailimap_capability(m_imap,&cap_data); 78 err = mailimap_capability(m_imap,&cap_data);
54 if (err != MAILIMAP_NO_ERROR) { 79 if (err != MAILIMAP_NO_ERROR) {
55 Global::statusMessage("error getting capabilities!"); 80 Global::statusMessage("error getting capabilities!");
56 return false; 81 return false;
57 } 82 }
58 clistiter * cur; 83 clistiter * cur;
59 for(cur = clist_begin(cap_data->cap_list) ; cur != NULL;cur = clist_next(cur)) { 84 for(cur = clist_begin(cap_data->cap_list) ; cur != NULL;cur = clist_next(cur)) {
60 struct mailimap_capability * cap; 85 struct mailimap_capability * cap;
61 cap = (struct mailimap_capability *)clist_content(cur); 86 cap = (struct mailimap_capability *)clist_content(cur);
62 if (cap->cap_type == MAILIMAP_CAPABILITY_NAME) { 87 if (cap->cap_type == MAILIMAP_CAPABILITY_NAME) {
63 if (strcasecmp(cap->cap_data.cap_name, "STARTTLS") == 0) { 88 if (strcasecmp(cap->cap_data.cap_name, "STARTTLS") == 0) {
64 try_tls = true; 89 try_tls = true;
65 break; 90 break;
66 } 91 }
67 } 92 }
68 } 93 }
69 if (cap_data) { 94 if (cap_data) {
70 mailimap_capability_data_free(cap_data); 95 mailimap_capability_data_free(cap_data);
71 } 96 }
72 if (try_tls) { 97 if (try_tls) {
73 err = mailimap_starttls(m_imap); 98 err = mailimap_starttls(m_imap);
74 if (err != MAILIMAP_NO_ERROR && force_tls) { 99 if (err != MAILIMAP_NO_ERROR && force_tls) {
75 Global::statusMessage(tr("Server has no TLS support!")); 100 Global::statusMessage(tr("Server has no TLS support!"));
76 try_tls = false; 101 try_tls = false;
77 } else { 102 } else {
78 mailstream_low * low; 103 mailstream_low * low;
79 mailstream_low * new_low; 104 mailstream_low * new_low;
80 low = mailstream_get_low(m_imap->imap_stream); 105 low = mailstream_get_low(m_imap->imap_stream);
81 if (!low) { 106 if (!low) {
82 try_tls = false; 107 try_tls = false;
83 } else { 108 } else {
84 int fd = mailstream_low_get_fd(low); 109 int fd = mailstream_low_get_fd(low);
85 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) { 110 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) {
86 mailstream_low_free(low); 111 mailstream_low_free(low);
87 mailstream_set_low(m_imap->imap_stream, new_low); 112 mailstream_set_low(m_imap->imap_stream, new_low);
88 } else { 113 } else {
89 try_tls = false; 114 try_tls = false;
90 } 115 }
91 } 116 }
92 } 117 }
93 } 118 }
94 return try_tls; 119 return try_tls;
@@ -420,98 +445,97 @@ RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
420 mailimap_envelope * head = item->att_data.att_static->att_data.att_env; 445 mailimap_envelope * head = item->att_data.att_static->att_data.att_env;
421 m->setDate(head->env_date); 446 m->setDate(head->env_date);
422 m->setSubject(convert_String((const char*)head->env_subject)); 447 m->setSubject(convert_String((const char*)head->env_subject));
423 //m->setSubject(head->env_subject); 448 //m->setSubject(head->env_subject);
424 if (head->env_from!=NULL) { 449 if (head->env_from!=NULL) {
425 addresslist = address_list_to_stringlist(head->env_from->frm_list); 450 addresslist = address_list_to_stringlist(head->env_from->frm_list);
426 if (addresslist.count()) { 451 if (addresslist.count()) {
427 m->setFrom(addresslist.first()); 452 m->setFrom(addresslist.first());
428 } 453 }
429 } 454 }
430 if (head->env_to!=NULL) { 455 if (head->env_to!=NULL) {
431 addresslist = address_list_to_stringlist(head->env_to->to_list); 456 addresslist = address_list_to_stringlist(head->env_to->to_list);
432 m->setTo(addresslist); 457 m->setTo(addresslist);
433 } 458 }
434 if (head->env_cc!=NULL) { 459 if (head->env_cc!=NULL) {
435 addresslist = address_list_to_stringlist(head->env_cc->cc_list); 460 addresslist = address_list_to_stringlist(head->env_cc->cc_list);
436 m->setCC(addresslist); 461 m->setCC(addresslist);
437 } 462 }
438 if (head->env_bcc!=NULL) { 463 if (head->env_bcc!=NULL) {
439 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list); 464 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list);
440 m->setBcc(addresslist); 465 m->setBcc(addresslist);
441 } 466 }
442 /* reply to address, eg. email. */ 467 /* reply to address, eg. email. */
443 if (head->env_reply_to!=NULL) { 468 if (head->env_reply_to!=NULL) {
444 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list); 469 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list);
445 if (addresslist.count()) { 470 if (addresslist.count()) {
446 m->setReplyto(addresslist.first()); 471 m->setReplyto(addresslist.first());
447 } 472 }
448 } 473 }
449 if (head->env_in_reply_to!=NULL) { 474 if (head->env_in_reply_to!=NULL) {
450 QString h(head->env_in_reply_to); 475 QString h(head->env_in_reply_to);
451 while (h.length()>0 && h[0]=='<') { 476 while (h.length()>0 && h[0]=='<') {
452 h.remove(0,1); 477 h.remove(0,1);
453 } 478 }
454 while (h.length()>0 && h[h.length()-1]=='>') { 479 while (h.length()>0 && h[h.length()-1]=='>') {
455 h.remove(h.length()-1,1); 480 h.remove(h.length()-1,1);
456 } 481 }
457 if (h.length()>0) { 482 if (h.length()>0) {
458 m->setInreply(QStringList(h)); 483 m->setInreply(QStringList(h));
459 } 484 }
460 } 485 }
461 if (head->env_message_id) { 486 if (head->env_message_id) {
462 m->setMsgid(QString(head->env_message_id)); 487 m->setMsgid(QString(head->env_message_id));
463 } 488 }
464 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) { 489 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) {
465#if 0 490#if 0
466 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date; 491 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date;
467 QDateTime da(QDate(d->dt_year,d->dt_month,d->dt_day),QTime(d->dt_hour,d->dt_min,d->dt_sec)); 492 QDateTime da(QDate(d->dt_year,d->dt_month,d->dt_day),QTime(d->dt_hour,d->dt_min,d->dt_sec));
468 //odebug << "" << d->dt_year << " " << d->dt_month << " " << d->dt_day << " - " << d->dt_hour << " " << d->dt_min << " " << d->dt_sec << "" << oendl; 493 qDebug("time %s ",da.toString().latin1() );
469 //odebug << da.toString() << oendl;
470#endif 494#endif
471 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_RFC822_SIZE) { 495 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_RFC822_SIZE) {
472 size = item->att_data.att_static->att_data.att_rfc822_size; 496 size = item->att_data.att_static->att_data.att_rfc822_size;
473 } 497 }
474 } 498 }
475 /* msg is already deleted */ 499 /* msg is already deleted */
476 if (mFlags.testBit(FLAG_DELETED) && m) { 500 if (mFlags.testBit(FLAG_DELETED) && m) {
477 delete m; 501 delete m;
478 m = 0; 502 m = 0;
479 } 503 }
480 if (m) { 504 if (m) {
481 m->setFlags(mFlags); 505 m->setFlags(mFlags);
482 m->setMsgsize(size); 506 m->setMsgsize(size);
483 } 507 }
484 return m; 508 return m;
485} 509}
486 510
487RecBodyP IMAPwrapper::fetchBody(const RecMailP&mail) 511RecBodyP IMAPwrapper::fetchBody(const RecMailP&mail)
488{ 512{
489 RecBodyP body = new RecBody(); 513 RecBodyP body = new RecBody();
490 const char *mb; 514 const char *mb;
491 int err = MAILIMAP_NO_ERROR; 515 int err = MAILIMAP_NO_ERROR;
492 clist *result = 0; 516 clist *result = 0;
493 clistcell *current; 517 clistcell *current;
494 mailimap_fetch_att *fetchAtt = 0; 518 mailimap_fetch_att *fetchAtt = 0;
495 mailimap_fetch_type *fetchType = 0; 519 mailimap_fetch_type *fetchType = 0;
496 mailimap_set *set = 0; 520 mailimap_set *set = 0;
497 mailimap_body*body_desc = 0; 521 mailimap_body*body_desc = 0;
498 522
499 mb = mail->getMbox().latin1(); 523 mb = mail->getMbox().latin1();
500 524
501 login(); 525 login();
502 if (!m_imap) { 526 if (!m_imap) {
503 return body; 527 return body;
504 } 528 }
505 err = selectMbox(mail->getMbox()); 529 err = selectMbox(mail->getMbox());
506 if ( err != MAILIMAP_NO_ERROR ) { 530 if ( err != MAILIMAP_NO_ERROR ) {
507 return body; 531 return body;
508 } 532 }
509 533
510 /* the range has to start at 1!!! not with 0!!!! */ 534 /* the range has to start at 1!!! not with 0!!!! */
511 set = mailimap_set_new_interval( mail->getNumber(),mail->getNumber() ); 535 set = mailimap_set_new_interval( mail->getNumber(),mail->getNumber() );
512 fetchAtt = mailimap_fetch_att_new_bodystructure(); 536 fetchAtt = mailimap_fetch_att_new_bodystructure();
513 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 537 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
514 err = mailimap_fetch( m_imap, set, fetchType, &result ); 538 err = mailimap_fetch( m_imap, set, fetchType, &result );
515 mailimap_set_free( set ); 539 mailimap_set_free( set );
516 mailimap_fetch_type_free( fetchType ); 540 mailimap_fetch_type_free( fetchType );
517 541
@@ -841,115 +865,104 @@ void IMAPwrapper::fillBodyFields(RecPartP&target_part,mailimap_body_fields*which
841 QString encoding(""); 865 QString encoding("");
842 switch (enc->enc_type) { 866 switch (enc->enc_type) {
843 case MAILIMAP_BODY_FLD_ENC_7BIT: 867 case MAILIMAP_BODY_FLD_ENC_7BIT:
844 encoding = "7bit"; 868 encoding = "7bit";
845 break; 869 break;
846 case MAILIMAP_BODY_FLD_ENC_8BIT: 870 case MAILIMAP_BODY_FLD_ENC_8BIT:
847 encoding = "8bit"; 871 encoding = "8bit";
848 break; 872 break;
849 case MAILIMAP_BODY_FLD_ENC_BINARY: 873 case MAILIMAP_BODY_FLD_ENC_BINARY:
850 encoding="binary"; 874 encoding="binary";
851 break; 875 break;
852 case MAILIMAP_BODY_FLD_ENC_BASE64: 876 case MAILIMAP_BODY_FLD_ENC_BASE64:
853 encoding="base64"; 877 encoding="base64";
854 break; 878 break;
855 case MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE: 879 case MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE:
856 encoding="quoted-printable"; 880 encoding="quoted-printable";
857 break; 881 break;
858 case MAILIMAP_BODY_FLD_ENC_OTHER: 882 case MAILIMAP_BODY_FLD_ENC_OTHER:
859 default: 883 default:
860 if (enc->enc_value) { 884 if (enc->enc_value) {
861 char*t=enc->enc_value; 885 char*t=enc->enc_value;
862 encoding=QString(enc->enc_value); 886 encoding=QString(enc->enc_value);
863 enc->enc_value=0L; 887 enc->enc_value=0L;
864 free(t); 888 free(t);
865 } 889 }
866 } 890 }
867 if (which->bd_description) { 891 if (which->bd_description) {
868 target_part->setDescription(QString(which->bd_description)); 892 target_part->setDescription(QString(which->bd_description));
869 } 893 }
870 target_part->setEncoding(encoding); 894 target_part->setEncoding(encoding);
871 target_part->setSize(which->bd_size); 895 target_part->setSize(which->bd_size);
872} 896}
873void IMAPwrapper::deleteMailList(const QValueList<RecMailP>&target) 897void IMAPwrapper::deleteMailList(const QValueList<RecMailP>&target)
874{ 898{
875 //#if 0 899 //#if 0
876 mailimap_flag_list*flist; 900 mailimap_flag_list*flist;
877 mailimap_set *set; 901 mailimap_set *set;
878 mailimap_store_att_flags * store_flags; 902 mailimap_store_att_flags * store_flags;
879 int err; 903 int err;
880 login(); 904 login();
881 //#endif 905 //#endif
882 if (!m_imap) { 906 if (!m_imap) {
883 return; 907 return;
884 } 908 }
885 int iii = 0; 909 int iii = 0;
886 int count = target.count(); 910 int count = target.count();
887 // qDebug("imap remove count %d ", count); 911 // qDebug("imap remove count %d ", count);
888 912
889 QProgressBar bar( count,0 ); 913
890 bar.setCaption (("Removing mails - close to abort!") ); 914 mMax = count;
891 int w = 300; 915 //progress( tr("Delete"));
892 if ( QApplication::desktop()->width() < 320 ) 916 QWidget wid;
893 w = 220; 917 wid.show();
894 int h = bar.sizeHint().height() ;
895 int dw = QApplication::desktop()->width();
896 int dh = QApplication::desktop()->height();
897 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
898 bar.show();
899 int modulo = (count/10)+1;
900 int incCounter = 0;
901
902 while (iii < count ) { 918 while (iii < count ) {
903 if ( ! bar.isVisible() ) 919 Global::statusMessage(tr("Delete message %1 of %2").arg(iii).arg(count));
904 return ; 920 wid.raise();
905 if ( incCounter % modulo == 0 )
906 bar.setProgress( incCounter );
907 ++incCounter;
908 qApp->processEvents(); 921 qApp->processEvents();
909 RecMailP mail = (*target.at( iii )); 922 RecMailP mail = (*target.at( iii ));
910 //#if 0 923 //#if 0
911 //qDebug("IMAP remove %d %d ", iii, mail->getNumber() ); 924 //qDebug("IMAP remove %d %d ", iii, mail->getNumber() );
912 err = selectMbox(mail->getMbox()); 925 err = selectMbox(mail->getMbox());
913 if ( err != MAILIMAP_NO_ERROR ) { 926 if ( err != MAILIMAP_NO_ERROR ) {
914 return; 927 return;
915 } 928 }
916 flist = mailimap_flag_list_new_empty(); 929 flist = mailimap_flag_list_new_empty();
917 mailimap_flag_list_add(flist,mailimap_flag_new_deleted()); 930 mailimap_flag_list_add(flist,mailimap_flag_new_deleted());
918 store_flags = mailimap_store_att_flags_new_set_flags(flist); 931 store_flags = mailimap_store_att_flags_new_set_flags(flist);
919 set = mailimap_set_new_single(mail->getNumber()); 932 set = mailimap_set_new_single(mail->getNumber());
920 err = mailimap_store(m_imap,set,store_flags); 933 err = mailimap_store(m_imap,set,store_flags);
921 mailimap_set_free( set ); 934 mailimap_set_free( set );
922 mailimap_store_att_flags_free(store_flags); 935 mailimap_store_att_flags_free(store_flags);
923 936
924 if (err != MAILIMAP_NO_ERROR) { 937 if (err != MAILIMAP_NO_ERROR) {
925 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl; 938 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl;
926 return; 939 return;
927 } 940 }
928 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl; 941 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl;
929 /* should we realy do that at this moment? */ 942 /* should we realy do that at this moment? */
930 943
931 // err = mailimap_expunge(m_imap); 944 // err = mailimap_expunge(m_imap);
932 //if (err != MAILIMAP_NO_ERROR) { 945 //if (err != MAILIMAP_NO_ERROR) {
933 // Global::statusMessage(tr("Error deleting mails: %s").arg(m_imap->imap_response)); 946 // Global::statusMessage(tr("Error deleting mails: %s").arg(m_imap->imap_response));
934 // } 947 // }
935 //#endif 948 //#endif
936 //deleteMail( mail); 949 //deleteMail( mail);
937 ++iii; 950 ++iii;
938 } 951 }
939 //qDebug("Deleting imap mails... "); 952 //qDebug("Deleting imap mails... ");
940 err = mailimap_expunge(m_imap); 953 err = mailimap_expunge(m_imap);
941 if (err != MAILIMAP_NO_ERROR) { 954 if (err != MAILIMAP_NO_ERROR) {
942 Global::statusMessage(tr("Error deleting mails: %s").arg(m_imap->imap_response)); 955 Global::statusMessage(tr("Error deleting mails: %s").arg(m_imap->imap_response));
943 } 956 }
944} 957}
945void IMAPwrapper::deleteMail(const RecMailP&mail) 958void IMAPwrapper::deleteMail(const RecMailP&mail)
946{ 959{
947 mailimap_flag_list*flist; 960 mailimap_flag_list*flist;
948 mailimap_set *set; 961 mailimap_set *set;
949 mailimap_store_att_flags * store_flags; 962 mailimap_store_att_flags * store_flags;
950 int err; 963 int err;
951 login(); 964 login();
952 if (!m_imap) { 965 if (!m_imap) {
953 return; 966 return;
954 } 967 }
955 err = selectMbox(mail->getMbox()); 968 err = selectMbox(mail->getMbox());
@@ -1154,107 +1167,110 @@ void IMAPwrapper::statusFolder(folderStat&target_stat,const QString & mailbox)
1154 break; 1167 break;
1155 case MAILIMAP_STATUS_ATT_RECENT: 1168 case MAILIMAP_STATUS_ATT_RECENT:
1156 target_stat.message_recent = status_info->st_value; 1169 target_stat.message_recent = status_info->st_value;
1157 break; 1170 break;
1158 case MAILIMAP_STATUS_ATT_UNSEEN: 1171 case MAILIMAP_STATUS_ATT_UNSEEN:
1159 target_stat.message_unseen = status_info->st_value; 1172 target_stat.message_unseen = status_info->st_value;
1160 break; 1173 break;
1161 } 1174 }
1162 } 1175 }
1163 } else { 1176 } else {
1164 // odebug << "Error retrieving status" << oendl; 1177 // odebug << "Error retrieving status" << oendl;
1165 } 1178 }
1166 if (status) mailimap_mailbox_data_status_free(status); 1179 if (status) mailimap_mailbox_data_status_free(status);
1167 if (att_list) mailimap_status_att_list_free(att_list); 1180 if (att_list) mailimap_status_att_list_free(att_list);
1168} 1181}
1169 1182
1170void IMAPwrapper::storeMessage(const char*msg,size_t length, const QString&folder) 1183void IMAPwrapper::storeMessage(const char*msg,size_t length, const QString&folder)
1171{ 1184{
1172 login(); 1185 login();
1173 if (!m_imap) return; 1186 if (!m_imap) return;
1174 if (!msg) return; 1187 if (!msg) return;
1175 int r = mailimap_append(m_imap,(char*)folder.latin1(),0,0,msg,length); 1188 int r = mailimap_append(m_imap,(char*)folder.latin1(),0,0,msg,length);
1176 if (r != MAILIMAP_NO_ERROR) { 1189 if (r != MAILIMAP_NO_ERROR) {
1177 Global::statusMessage("Error storing mail!"); 1190 Global::statusMessage("Error storing mail!");
1178 } 1191 }
1179} 1192}
1180 1193
1181MAILLIB::ATYPE IMAPwrapper::getType()const 1194MAILLIB::ATYPE IMAPwrapper::getType()const
1182{ 1195{
1183 return account->getType(); 1196 return account->getType();
1184} 1197}
1185 1198
1186const QString&IMAPwrapper::getName()const 1199const QString&IMAPwrapper::getName()const
1187{ 1200{
1188 // odebug << "Get name: " << account->getAccountName().latin1() << "" << oendl; 1201 // odebug << "Get name: " << account->getAccountName().latin1() << "" << oendl;
1189 return account->getAccountName(); 1202 return account->getAccountName();
1190} 1203}
1191 1204
1192encodedString* IMAPwrapper::fetchRawBody(const RecMailP&mail) 1205encodedString* IMAPwrapper::fetchRawBody(const RecMailP&mail)
1193{ 1206{
1194 // dummy 1207 // dummy
1195 QValueList<int> path; 1208 QValueList<int> path;
1196 return fetchRawPart(mail,path,false); 1209 return fetchRawPart(mail,path,false);
1197} 1210}
1198 1211
1199void IMAPwrapper::mvcpAllMails(const FolderP&fromFolder, 1212void IMAPwrapper::mvcpAllMails(const FolderP&fromFolder,
1200 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit, int maxSizeInKb) 1213 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit, int maxSizeInKb)
1201{ 1214{
1202 if (targetWrapper != this || maxSizeInKb > 0 ) { 1215 if (targetWrapper != this || maxSizeInKb > 0 ) {
1216 mMax = 0;
1217 progress( tr("Copy"));
1203 AbstractMail::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit, maxSizeInKb); 1218 AbstractMail::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit, maxSizeInKb);
1204 qDebug("IMAPwrapper::mvcpAllMails::Using generic"); 1219 qDebug("IMAPwrapper::mvcpAllMails::Using generic");
1205 // odebug << "Using generic" << oendl; 1220 // odebug << "Using generic" << oendl;
1206 return; 1221 return;
1207 } 1222 }
1208 mailimap_set *set = 0; 1223 mailimap_set *set = 0;
1209 login(); 1224 login();
1210 if (!m_imap) { 1225 if (!m_imap) {
1211 return; 1226 return;
1212 } 1227 }
1213 int err = selectMbox(fromFolder->getName()); 1228 int err = selectMbox(fromFolder->getName());
1214 if ( err != MAILIMAP_NO_ERROR ) { 1229 if ( err != MAILIMAP_NO_ERROR ) {
1215 return; 1230 return;
1216 } 1231 }
1232 Global::statusMessage( tr("Copying mails on server...") );
1217 int last = m_imap->imap_selection_info->sel_exists; 1233 int last = m_imap->imap_selection_info->sel_exists;
1218 set = mailimap_set_new_interval( 1, last ); 1234 set = mailimap_set_new_interval( 1, last );
1219 err = mailimap_copy(m_imap,set,targetFolder.latin1()); 1235 err = mailimap_copy(m_imap,set,targetFolder.latin1());
1220 mailimap_set_free( set ); 1236 mailimap_set_free( set );
1221 if ( err != MAILIMAP_NO_ERROR ) { 1237 if ( err != MAILIMAP_NO_ERROR ) {
1222 QString error_msg = tr("Error copy mails: %1").arg(m_imap->imap_response); 1238 QString error_msg = tr("Error copy mails: %1").arg(m_imap->imap_response);
1223 Global::statusMessage(error_msg); 1239 Global::statusMessage(error_msg);
1224 // odebug << error_msg << oendl; 1240 // odebug << error_msg << oendl;
1225 return; 1241 return;
1226 } 1242 }
1227 if (moveit) { 1243 if (moveit) {
1228 deleteAllMail(fromFolder); 1244 deleteAllMail(fromFolder);
1229 } 1245 }
1230} 1246}
1231 1247
1232void IMAPwrapper::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 1248void IMAPwrapper::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
1233{ 1249{
1234 if (targetWrapper != this) { 1250 if (targetWrapper != this) {
1235 // odebug << "Using generic" << oendl; 1251 // odebug << "Using generic" << oendl;
1236 AbstractMail::mvcpMail(mail,targetFolder,targetWrapper,moveit); 1252 AbstractMail::mvcpMail(mail,targetFolder,targetWrapper,moveit);
1237 return; 1253 return;
1238 } 1254 }
1239 mailimap_set *set = 0; 1255 mailimap_set *set = 0;
1240 login(); 1256 login();
1241 if (!m_imap) { 1257 if (!m_imap) {
1242 return; 1258 return;
1243 } 1259 }
1244 int err = selectMbox(mail->getMbox()); 1260 int err = selectMbox(mail->getMbox());
1245 if ( err != MAILIMAP_NO_ERROR ) { 1261 if ( err != MAILIMAP_NO_ERROR ) {
1246 return; 1262 return;
1247 } 1263 }
1248 set = mailimap_set_new_single(mail->getNumber()); 1264 set = mailimap_set_new_single(mail->getNumber());
1249 err = mailimap_copy(m_imap,set,targetFolder.latin1()); 1265 err = mailimap_copy(m_imap,set,targetFolder.latin1());
1250 mailimap_set_free( set ); 1266 mailimap_set_free( set );
1251 if ( err != MAILIMAP_NO_ERROR ) { 1267 if ( err != MAILIMAP_NO_ERROR ) {
1252 QString error_msg = tr("error copy mail: %1").arg(m_imap->imap_response); 1268 QString error_msg = tr("error copy mail: %1").arg(m_imap->imap_response);
1253 Global::statusMessage(error_msg); 1269 Global::statusMessage(error_msg);
1254 // odebug << error_msg << oendl; 1270 // odebug << error_msg << oendl;
1255 return; 1271 return;
1256 } 1272 }
1257 if (moveit) { 1273 if (moveit) {
1258 deleteMail(mail); 1274 deleteMail(mail);
1259 } 1275 }
1260} 1276}
diff --git a/kmicromail/libmailwrapper/imapwrapper.h b/kmicromail/libmailwrapper/imapwrapper.h
index 222fe95..db8ab5b 100644
--- a/kmicromail/libmailwrapper/imapwrapper.h
+++ b/kmicromail/libmailwrapper/imapwrapper.h
@@ -28,55 +28,57 @@ public:
28 virtual void listMessages(const QString & mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> >&target , int sizeInKb = 0); 28 virtual void listMessages(const QString & mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> >&target , int sizeInKb = 0);
29 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX"); 29 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX");
30 30
31 virtual void deleteMail(const RecMailP&mail); 31 virtual void deleteMail(const RecMailP&mail);
32 void deleteMailList(const QValueList<RecMailP>&target); 32 void deleteMailList(const QValueList<RecMailP>&target);
33 virtual void answeredMail(const RecMailP&mail); 33 virtual void answeredMail(const RecMailP&mail);
34 virtual int deleteAllMail(const Opie::Core::OSmartPointer<Folder>&folder); 34 virtual int deleteAllMail(const Opie::Core::OSmartPointer<Folder>&folder);
35 virtual void storeMessage(const char*msg,size_t length, const QString&folder); 35 virtual void storeMessage(const char*msg,size_t length, const QString&folder);
36 virtual void mvcpAllMails(const Opie::Core::OSmartPointer<Folder>&fromFolder, 36 virtual void mvcpAllMails(const Opie::Core::OSmartPointer<Folder>&fromFolder,
37 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit,int sizeInKb = 0); 37 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit,int sizeInKb = 0);
38 virtual void mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit); 38 virtual void mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit);
39 39
40 virtual RecBodyP fetchBody(const RecMailP&mail); 40 virtual RecBodyP fetchBody(const RecMailP&mail);
41 virtual QString fetchTextPart(const RecMailP&mail,const RecPartP&part); 41 virtual QString fetchTextPart(const RecMailP&mail,const RecPartP&part);
42 virtual encodedString* fetchDecodedPart(const RecMailP&mail,const RecPartP&part); 42 virtual encodedString* fetchDecodedPart(const RecMailP&mail,const RecPartP&part);
43 virtual encodedString* fetchRawPart(const RecMailP&mail,const RecPartP&part); 43 virtual encodedString* fetchRawPart(const RecMailP&mail,const RecPartP&part);
44 virtual encodedString* fetchRawBody(const RecMailP&mail); 44 virtual encodedString* fetchRawBody(const RecMailP&mail);
45 45
46 virtual int createMbox(const QString&,const Opie::Core::OSmartPointer<Folder>&parentfolder=0, 46 virtual int createMbox(const QString&,const Opie::Core::OSmartPointer<Folder>&parentfolder=0,
47 const QString& delemiter="/",bool getsubfolder=false); 47 const QString& delemiter="/",bool getsubfolder=false);
48 virtual int deleteMbox(const Opie::Core::OSmartPointer<Folder>&folder); 48 virtual int deleteMbox(const Opie::Core::OSmartPointer<Folder>&folder);
49 49
50 static void imap_progress( size_t current, size_t maximum ); 50 static void imap_progress( size_t current, size_t maximum );
51 51
52 virtual void logout(); 52 virtual void logout();
53 virtual MAILLIB::ATYPE getType()const; 53 virtual MAILLIB::ATYPE getType()const;
54 virtual const QString&getName()const; 54 virtual const QString&getName()const;
55 55
56protected: 56protected:
57 RecMail*parse_list_result(mailimap_msg_att*); 57 RecMail*parse_list_result(mailimap_msg_att*);
58 void login(); 58 void login();
59 bool start_tls(bool force=true); 59 bool start_tls(bool force=true);
60 60
61 virtual QString fetchTextPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call=false,const QString&enc=""); 61 virtual QString fetchTextPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call=false,const QString&enc="");
62 virtual encodedString*fetchRawPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call); 62 virtual encodedString*fetchRawPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call);
63 int selectMbox(const QString&mbox); 63 int selectMbox(const QString&mbox);
64 64
65 void fillSinglePart(RecPartP&target_part,mailimap_body_type_1part*Description); 65 void fillSinglePart(RecPartP&target_part,mailimap_body_type_1part*Description);
66 void fillSingleTextPart(RecPartP&target_part,mailimap_body_type_text*which); 66 void fillSingleTextPart(RecPartP&target_part,mailimap_body_type_text*which);
67 void fillSingleBasicPart(RecPartP&target_part,mailimap_body_type_basic*which); 67 void fillSingleBasicPart(RecPartP&target_part,mailimap_body_type_basic*which);
68 void fillSingleMsgPart(RecPartP&target_part,mailimap_body_type_msg*which); 68 void fillSingleMsgPart(RecPartP&target_part,mailimap_body_type_msg*which);
69 void fillMultiPart(RecPartP&target_part,mailimap_body_type_mpart*which); 69 void fillMultiPart(RecPartP&target_part,mailimap_body_type_mpart*which);
70 void traverseBody(const RecMailP&mail,mailimap_body*body,RecBodyP&target_body,int current_recursion,QValueList<int>recList,int current_count=1); 70 void traverseBody(const RecMailP&mail,mailimap_body*body,RecBodyP&target_body,int current_recursion,QValueList<int>recList,int current_count=1);
71 71
72 /* just helpers */ 72 /* just helpers */
73 static void fillBodyFields(RecPartP&target_part,mailimap_body_fields*which); 73 static void fillBodyFields(RecPartP&target_part,mailimap_body_fields*which);
74 static QStringList address_list_to_stringlist(clist*list); 74 static QStringList address_list_to_stringlist(clist*list);
75 75
76 76 static void progress(QString mess = QString::null);
77 static int mCurrent;
78 static int mMax;
77 IMAPaccount *account; 79 IMAPaccount *account;
78 mailimap *m_imap; 80 mailimap *m_imap;
79 QString m_Lastmbox; 81 QString m_Lastmbox;
80}; 82};
81 83
82#endif 84#endif
diff --git a/kmicromail/libmailwrapper/pop3wrapper.cpp b/kmicromail/libmailwrapper/pop3wrapper.cpp
index f430121..8d2f778 100644
--- a/kmicromail/libmailwrapper/pop3wrapper.cpp
+++ b/kmicromail/libmailwrapper/pop3wrapper.cpp
@@ -81,239 +81,214 @@ RecBodyP POP3wrapper::fetchBody( const RecMailP &mail ) {
81 memcpy(message,msg.latin1(),msg.length()); 81 memcpy(message,msg.latin1(),msg.length());
82 /* transform to libetpan stuff */ 82 /* transform to libetpan stuff */
83 mailmsg = mailmessage_new(); 83 mailmsg = mailmessage_new();
84 mailmessage_init(mailmsg, NULL, data_message_driver, 0, strlen(message)); 84 mailmessage_init(mailmsg, NULL, data_message_driver, 0, strlen(message));
85 generic_message_t * msg_data; 85 generic_message_t * msg_data;
86 msg_data = (generic_message_t *)mailmsg->msg_data; 86 msg_data = (generic_message_t *)mailmsg->msg_data;
87 msg_data->msg_fetched = 1; 87 msg_data->msg_fetched = 1;
88 msg_data->msg_message = message; 88 msg_data->msg_message = message;
89 msg_data->msg_length = strlen(message); 89 msg_data->msg_length = strlen(message);
90 } 90 }
91 body = parseMail(mailmsg); 91 body = parseMail(mailmsg);
92 92
93 /* clean up */ 93 /* clean up */
94 if (mailmsg) 94 if (mailmsg)
95 mailmessage_free(mailmsg); 95 mailmessage_free(mailmsg);
96 if (message) 96 if (message)
97 free(message); 97 free(message);
98 98
99 return body; 99 return body;
100} 100}
101 101
102void POP3wrapper::listMessages(const QString &, QValueList<Opie::Core::OSmartPointer<RecMail> > &target, int maxSizeInKb ) 102void POP3wrapper::listMessages(const QString &, QValueList<Opie::Core::OSmartPointer<RecMail> > &target, int maxSizeInKb )
103{ 103{
104 login(); 104 login();
105 if (!m_pop3) 105 if (!m_pop3)
106 return; 106 return;
107 uint32_t res_messages,res_recent,res_unseen; 107 uint32_t res_messages,res_recent,res_unseen;
108 mailsession_status_folder(m_pop3->sto_session,"INBOX",&res_messages,&res_recent,&res_unseen); 108 mailsession_status_folder(m_pop3->sto_session,"INBOX",&res_messages,&res_recent,&res_unseen);
109 parseList(target,m_pop3->sto_session,"INBOX", false, maxSizeInKb); 109 parseList(target,m_pop3->sto_session,"INBOX", false, maxSizeInKb);
110 Global::statusMessage( tr("Mailbox contains %1 mail(s)").arg(res_messages)); 110 Global::statusMessage( tr("Mailbox contains %1 mail(s)").arg(res_messages));
111} 111}
112 112
113void POP3wrapper::login() 113void POP3wrapper::login()
114{ 114{
115 if (account->getOffline()) 115 if (account->getOffline())
116 return; 116 return;
117 /* we'll hold the line */ 117 /* we'll hold the line */
118 if ( m_pop3 != NULL ) 118 if ( m_pop3 != NULL )
119 return; 119 return;
120 120
121 QString server,user, pass; 121 QString server,user, pass;
122 uint16_t port; 122 uint16_t port;
123 int err = MAILPOP3_NO_ERROR; 123 int err = MAILPOP3_NO_ERROR;
124 124
125 server = account->getServer().latin1(); 125 server = account->getServer().latin1();
126 port = account->getPort().toUInt(); 126 port = account->getPort().toUInt();
127 127
128 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) { 128 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) {
129 qApp->processEvents();
129 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true ); 130 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true );
130 login.show(); 131 login.show();
131 if ( QDialog::Accepted == login.exec() ) { 132 if ( QDialog::Accepted == login.exec() ) {
132 // ok 133 // ok
133 qDebug("ok ");
134 user = login.getUser(); 134 user = login.getUser();
135 pass = login.getPassword(); 135 pass = login.getPassword();
136 } else { 136 } else {
137 // cancel 137 // cancel
138 ; // odebug << "POP3: Login canceled" << oendl; 138 ; // odebug << "POP3: Login canceled" << oendl;
139 return; 139 return;
140 } 140 }
141 } else { 141 } else {
142 user = account->getUser(); 142 user = account->getUser();
143 pass = account->getPassword(); 143 pass = account->getPassword();
144 } 144 }
145 // bool ssl = account->getSSL(); 145 // bool ssl = account->getSSL();
146 146
147 m_pop3=mailstorage_new(NULL); 147 m_pop3=mailstorage_new(NULL);
148 int conntypeset = account->ConnectionType(); 148 int conntypeset = account->ConnectionType();
149 int conntype = 0; 149 int conntype = 0;
150 if ( conntypeset == 3 ) { 150 if ( conntypeset == 3 ) {
151 conntype = CONNECTION_TYPE_COMMAND; 151 conntype = CONNECTION_TYPE_COMMAND;
152 } else if ( conntypeset == 2 ) { 152 } else if ( conntypeset == 2 ) {
153 conntype = CONNECTION_TYPE_TLS; 153 conntype = CONNECTION_TYPE_TLS;
154 } else if ( conntypeset == 1 ) { 154 } else if ( conntypeset == 1 ) {
155 conntype = CONNECTION_TYPE_STARTTLS; 155 conntype = CONNECTION_TYPE_STARTTLS;
156 } else if ( conntypeset == 0 ) { 156 } else if ( conntypeset == 0 ) {
157 conntype = CONNECTION_TYPE_TRY_STARTTLS; 157 conntype = CONNECTION_TYPE_TRY_STARTTLS;
158 } 158 }
159 159
160 //(ssl?CONNECTION_TYPE_TLS:CONNECTION_TYPE_PLAIN); 160 //(ssl?CONNECTION_TYPE_TLS:CONNECTION_TYPE_PLAIN);
161 161
162 pop3_mailstorage_init(m_pop3,(char*)server.latin1(), port, NULL, conntype, POP3_AUTH_TYPE_PLAIN, 162 pop3_mailstorage_init(m_pop3,(char*)server.latin1(), port, NULL, conntype, POP3_AUTH_TYPE_PLAIN,
163 (char*)user.latin1(),(char*)pass.latin1(),0,0,0); 163 (char*)user.latin1(),(char*)pass.latin1(),0,0,0);
164 164
165 err = mailstorage_connect(m_pop3); 165 err = mailstorage_connect(m_pop3);
166 if (err != MAIL_NO_ERROR) { 166 if (err != MAIL_NO_ERROR) {
167 ; // odebug << QString( "FEHLERNUMMER %1" ).arg( err ) << oendl; 167 ; // odebug << QString( "FEHLERNUMMER %1" ).arg( err ) << oendl;
168 Global::statusMessage(tr("Error initializing folder")); 168 Global::statusMessage(tr("Error %1 initializing folder").arg( err ));
169 mailstorage_free(m_pop3); 169 mailstorage_free(m_pop3);
170 m_pop3 = 0; 170 m_pop3 = 0;
171 } else { 171 } else {
172 mailsession * session = m_pop3->sto_session; 172 mailsession * session = m_pop3->sto_session;
173 mailpop3 * mail = ( ( pop3_session_state_data * )session->sess_data )->pop3_session; 173 mailpop3 * mail = ( ( pop3_session_state_data * )session->sess_data )->pop3_session;
174 if (mail) { 174 if (mail) {
175 mail->pop3_progr_fun = &pop3_progress; 175 mail->pop3_progr_fun = &pop3_progress;
176 } 176 }
177 } 177 }
178} 178}
179 179
180void POP3wrapper::logout() 180void POP3wrapper::logout()
181{ 181{
182 if ( m_pop3 == NULL ) 182 if ( m_pop3 == NULL )
183 return; 183 return;
184 mailstorage_free(m_pop3); 184 mailstorage_free(m_pop3);
185 m_pop3 = 0; 185 m_pop3 = 0;
186} 186}
187 187
188 188
189QValueList<Opie::Core::OSmartPointer<Folder> >* POP3wrapper::listFolders() { 189QValueList<Opie::Core::OSmartPointer<Folder> >* POP3wrapper::listFolders() {
190 QValueList<Opie::Core::OSmartPointer<Folder> >* folders = new QValueList<FolderP>(); 190 QValueList<Opie::Core::OSmartPointer<Folder> >* folders = new QValueList<FolderP>();
191 FolderP inb=new Folder("INBOX","/"); 191 FolderP inb=new Folder("INBOX","/");
192 folders->append(inb); 192 folders->append(inb);
193 return folders; 193 return folders;
194} 194}
195 195
196void POP3wrapper::deleteMailList(const QValueList<RecMailP>&target) 196void POP3wrapper::deleteMailList(const QValueList<RecMailP>&target)
197{ 197{
198 login(); 198 login();
199 if (!m_pop3) 199 if (!m_pop3)
200 return; 200 return;
201 int iii = 0; 201 int iii = 0;
202 int count = target.count(); 202 int count = target.count();
203 QProgressBar bar( count,0 ); 203 QWidget wid;
204 bar.setCaption (("Removing mails - close to abort!") ); 204 wid.show();
205 int w = 300;
206 if ( QApplication::desktop()->width() < 320 )
207 w = 220;
208 int h = bar.sizeHint().height() ;
209 int dw = QApplication::desktop()->width();
210 int dh = QApplication::desktop()->height();
211 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
212 bar.show();
213 int modulo = (count/10)+1;
214 int incCounter = 0;
215 while (iii < count ) { 205 while (iii < count ) {
216 if ( ! bar.isVisible() ) 206 Global::statusMessage(tr("Delete message %1 of %2").arg(iii).arg(count));
217 return ; 207 wid.raise();
218 if ( incCounter % modulo == 0 )
219 bar.setProgress( incCounter );
220 ++incCounter;
221 qApp->processEvents(); 208 qApp->processEvents();
222 //qDebug("delete "); 209 //qDebug("delete ");
223 RecMailP mail = (*target.at( iii )); 210 RecMailP mail = (*target.at( iii ));
224 int err = mailsession_remove_message(m_pop3->sto_session,mail->getNumber()); 211 int err = mailsession_remove_message(m_pop3->sto_session,mail->getNumber());
225 if (err != MAIL_NO_ERROR) { 212 if (err != MAIL_NO_ERROR) {
226 Global::statusMessage(tr("Error deleting mail")); 213 Global::statusMessage(tr("Error deleting mail"));
227 } 214 }
228 ++iii; 215 ++iii;
229 } 216 }
230} 217}
231void POP3wrapper::deleteMail(const RecMailP&mail) { 218void POP3wrapper::deleteMail(const RecMailP&mail) {
232 login(); 219 login();
233 if (!m_pop3) 220 if (!m_pop3)
234 return; 221 return;
235 int err = mailsession_remove_message(m_pop3->sto_session,mail->getNumber()); 222 int err = mailsession_remove_message(m_pop3->sto_session,mail->getNumber());
236 if (err != MAIL_NO_ERROR) { 223 if (err != MAIL_NO_ERROR) {
237 Global::statusMessage(tr("error deleting mail")); 224 Global::statusMessage(tr("error deleting mail"));
238 } 225 }
239} 226}
240 227
241void POP3wrapper::answeredMail(const RecMailP&) {} 228void POP3wrapper::answeredMail(const RecMailP&) {}
242 229
243int POP3wrapper::deleteAllMail(const FolderP&) { 230int POP3wrapper::deleteAllMail(const FolderP&) {
244 login(); 231 login();
245 if (!m_pop3) 232 if (!m_pop3)
246 return 0; 233 return 0;
247 int res = 1; 234 int res = 1;
248 235
249 uint32_t result = 0; 236 uint32_t result = 0;
250 int err = mailsession_messages_number(m_pop3->sto_session,NULL,&result); 237 int err = mailsession_messages_number(m_pop3->sto_session,NULL,&result);
251 if (err != MAIL_NO_ERROR) { 238 if (err != MAIL_NO_ERROR) {
252 Global::statusMessage(tr("Error getting folder info")); 239 Global::statusMessage(tr("Error getting folder info"));
253 return 0; 240 return 0;
254 } 241 }
255 QProgressBar bar( result,0 ); 242 QWidget wid;
256 bar.setCaption (("Deleting mails - close to abort!") ); 243 wid.show();
257 int w = 300; 244 for (unsigned int i = 0; i < result; ++i) {
258 if ( QApplication::desktop()->width() < 320 ) 245 Global::statusMessage(tr("Delete message %1 of %2").arg(i).arg(result));
259 w = 220; 246 wid.raise();
260 int h = bar.sizeHint().height() ;
261 int dw = QApplication::desktop()->width();
262 int dh = QApplication::desktop()->height();
263 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
264 bar.show();
265 int modulo = (result/10)+1;
266 int incCounter = 0;
267 for (unsigned int i = 0; i < result; ++i) {
268 if ( ! bar.isVisible() )
269 return 0;
270 if ( incCounter % modulo == 0 )
271 bar.setProgress( incCounter );
272 ++incCounter;
273 qApp->processEvents(); 247 qApp->processEvents();
248
274 err = mailsession_remove_message(m_pop3->sto_session,i+1); 249 err = mailsession_remove_message(m_pop3->sto_session,i+1);
275 if (err != MAIL_NO_ERROR) { 250 if (err != MAIL_NO_ERROR) {
276 Global::statusMessage(tr("Error deleting mail %1").arg(i+1)); 251 Global::statusMessage(tr("Error deleting mail %1").arg(i+1));
277 res=0; 252 res=0;
278 } 253 }
279 break; 254 break;
280 } 255 }
281 return res; 256 return res;
282} 257}
283 258
284void POP3wrapper::statusFolder(folderStat&target_stat,const QString&) { 259void POP3wrapper::statusFolder(folderStat&target_stat,const QString&) {
285 login(); 260 login();
286 target_stat.message_count = 0; 261 target_stat.message_count = 0;
287 target_stat.message_unseen = 0; 262 target_stat.message_unseen = 0;
288 target_stat.message_recent = 0; 263 target_stat.message_recent = 0;
289 if (!m_pop3) 264 if (!m_pop3)
290 return; 265 return;
291 int r = mailsession_status_folder(m_pop3->sto_session,0,&target_stat.message_count, 266 int r = mailsession_status_folder(m_pop3->sto_session,0,&target_stat.message_count,
292 &target_stat.message_recent,&target_stat.message_unseen); 267 &target_stat.message_recent,&target_stat.message_unseen);
293 if (r != MAIL_NO_ERROR) { 268 if (r != MAIL_NO_ERROR) {
294 ; // odebug << "error getting folter status." << oendl; 269 ; // odebug << "error getting folter status." << oendl;
295 } 270 }
296} 271}
297 272
298encodedString* POP3wrapper::fetchRawBody(const RecMailP&mail) { 273encodedString* POP3wrapper::fetchRawBody(const RecMailP&mail) {
299 char*target=0; 274 char*target=0;
300 size_t length=0; 275 size_t length=0;
301 encodedString*res = 0; 276 encodedString*res = 0;
302 mailmessage * mailmsg = 0; 277 mailmessage * mailmsg = 0;
303 int err = mailsession_get_message(m_pop3->sto_session, mail->getNumber(), &mailmsg); 278 int err = mailsession_get_message(m_pop3->sto_session, mail->getNumber(), &mailmsg);
304 err = mailmessage_fetch(mailmsg,&target,&length); 279 err = mailmessage_fetch(mailmsg,&target,&length);
305 if (mailmsg) 280 if (mailmsg)
306 mailmessage_free(mailmsg); 281 mailmessage_free(mailmsg);
307 if (target) { 282 if (target) {
308 res = new encodedString(target,length); 283 res = new encodedString(target,length);
309 } 284 }
310 return res; 285 return res;
311} 286}
312 287
313MAILLIB::ATYPE POP3wrapper::getType()const { 288MAILLIB::ATYPE POP3wrapper::getType()const {
314 return account->getType(); 289 return account->getType();
315} 290}
316 291
317const QString&POP3wrapper::getName()const{ 292const QString&POP3wrapper::getName()const{
318 return account->getAccountName(); 293 return account->getAccountName();
319} 294}