summaryrefslogtreecommitdiffabout
path: root/kmicromail/libmailwrapper
authorzautrix <zautrix>2004-08-31 21:01:18 (UTC)
committer zautrix <zautrix>2004-08-31 21:01:18 (UTC)
commit3f5c51234c8068f3d4826a2a0066648ace21a19f (patch) (unidiff)
tree91b76c1c7ddec6628c573e409070070747d99feb /kmicromail/libmailwrapper
parent95f8d4f1de557bd25ae38807d970208399cec5d1 (diff)
downloadkdepimpi-3f5c51234c8068f3d4826a2a0066648ace21a19f.zip
kdepimpi-3f5c51234c8068f3d4826a2a0066648ace21a19f.tar.gz
kdepimpi-3f5c51234c8068f3d4826a2a0066648ace21a19f.tar.bz2
Enhancements of kopiemail
Diffstat (limited to 'kmicromail/libmailwrapper') (more/less context) (ignore whitespace changes)
-rw-r--r--kmicromail/libmailwrapper/abstractmail.cpp29
-rw-r--r--kmicromail/libmailwrapper/abstractmail.h8
-rw-r--r--kmicromail/libmailwrapper/genericwrapper.cpp6
-rw-r--r--kmicromail/libmailwrapper/genericwrapper.h3
-rw-r--r--kmicromail/libmailwrapper/imapwrapper.cpp68
-rw-r--r--kmicromail/libmailwrapper/imapwrapper.h6
-rw-r--r--kmicromail/libmailwrapper/mhwrapper.cpp5
-rw-r--r--kmicromail/libmailwrapper/mhwrapper.h3
-rw-r--r--kmicromail/libmailwrapper/nntpwrapper.cpp5
-rw-r--r--kmicromail/libmailwrapper/nntpwrapper.h3
-rw-r--r--kmicromail/libmailwrapper/pop3wrapper.cpp21
-rw-r--r--kmicromail/libmailwrapper/pop3wrapper.h4
12 files changed, 128 insertions, 33 deletions
diff --git a/kmicromail/libmailwrapper/abstractmail.cpp b/kmicromail/libmailwrapper/abstractmail.cpp
index 128a7c0..3998abd 100644
--- a/kmicromail/libmailwrapper/abstractmail.cpp
+++ b/kmicromail/libmailwrapper/abstractmail.cpp
@@ -1,48 +1,49 @@
1// CHANGED 2004-09-31 Lutz Rogowski
1#include "abstractmail.h" 2#include "abstractmail.h"
2#include "imapwrapper.h" 3#include "imapwrapper.h"
3#include "pop3wrapper.h" 4#include "pop3wrapper.h"
4#include "nntpwrapper.h" 5#include "nntpwrapper.h"
5#include "mhwrapper.h" 6#include "mhwrapper.h"
6#include "mailtypes.h" 7#include "mailtypes.h"
7 8
8 9
9 10
10#include <kdecore/kstandarddirs.h> 11#include <kdecore/kstandarddirs.h>
11#include <qfile.h> 12#include <qfile.h>
12#include <qtextstream.h> 13#include <qtextstream.h>
13#include <stdlib.h> 14#include <stdlib.h>
14#include <libetpan/mailmime_content.h> 15#include <libetpan/mailmime_content.h>
15#include <libetpan/mailmime.h> 16#include <libetpan/mailmime.h>
16 17
17using namespace Opie::Core; 18using namespace Opie::Core;
18AbstractMail* AbstractMail::getWrapper(IMAPaccount *a) 19AbstractMail* AbstractMail::getWrapper(IMAPaccount *a)
19{ 20{
20 return new IMAPwrapper(a); 21 return new IMAPwrapper(a);
21} 22}
22 23
23AbstractMail* AbstractMail::getWrapper(POP3account *a) 24AbstractMail* AbstractMail::getWrapper(POP3account *a)
24{ 25{
25 return new POP3wrapper(a); 26 return new POP3wrapper(a);
26} 27}
27 28
28AbstractMail* AbstractMail::getWrapper(NNTPaccount *a) 29AbstractMail* AbstractMail::getWrapper(NNTPaccount *a)
29{ 30{
30 return new NNTPwrapper(a); 31 return new NNTPwrapper(a);
31} 32}
32 33
33AbstractMail* AbstractMail::getWrapper(const QString&a,const QString&name) 34AbstractMail* AbstractMail::getWrapper(const QString&a,const QString&name)
34{ 35{
35 return new MHwrapper(a,name); 36 return new MHwrapper(a,name);
36} 37}
37 38
38AbstractMail* AbstractMail::getWrapper(Account*a) 39AbstractMail* AbstractMail::getWrapper(Account*a)
39{ 40{
40 if (!a) return 0; 41 if (!a) return 0;
41 switch (a->getType()) { 42 switch (a->getType()) {
42 case MAILLIB::A_IMAP: 43 case MAILLIB::A_IMAP:
43 return new IMAPwrapper((IMAPaccount*)a); 44 return new IMAPwrapper((IMAPaccount*)a);
44 break; 45 break;
45 case MAILLIB::A_POP3: 46 case MAILLIB::A_POP3:
46 return new POP3wrapper((POP3account*)a); 47 return new POP3wrapper((POP3account*)a);
47 break; 48 break;
48 case MAILLIB::A_NNTP: 49 case MAILLIB::A_NNTP:
@@ -92,81 +93,95 @@ QString AbstractMail::convert_String(const char*text)
92 QString result(text); 93 QString result(text);
93 94
94 /* due a bug in libetpan it isn't usable this moment */ 95 /* due a bug in libetpan it isn't usable this moment */
95/* int err = mailmime_encoded_phrase_parse("iso-8859-1", 96/* int err = mailmime_encoded_phrase_parse("iso-8859-1",
96 text, strlen(text),&index, "iso-8859-1",&res);*/ 97 text, strlen(text),&index, "iso-8859-1",&res);*/
97 //odebug << "Input: " << text << "" << oendl; 98 //odebug << "Input: " << text << "" << oendl;
98 if (err == MAILIMF_NO_ERROR && res && strlen(res)) { 99 if (err == MAILIMF_NO_ERROR && res && strlen(res)) {
99// result = QString(res); 100// result = QString(res);
100// odebug << "Res: " << res << ", length: " << strlen(res) << "" << oendl; 101// odebug << "Res: " << res << ", length: " << strlen(res) << "" << oendl;
101 } 102 }
102 if (res) free(res); 103 if (res) free(res);
103 return result; 104 return result;
104} 105}
105 106
106/* cp & paste from launcher */ 107/* cp & paste from launcher */
107QString AbstractMail::gen_attachment_id() 108QString AbstractMail::gen_attachment_id()
108{ 109{
109 QFile file( "/proc/sys/kernel/random/uuid" ); 110 QFile file( "/proc/sys/kernel/random/uuid" );
110 if (!file.open(IO_ReadOnly ) ) 111 if (!file.open(IO_ReadOnly ) )
111 return QString::null; 112 return QString::null;
112 113
113 QTextStream stream(&file); 114 QTextStream stream(&file);
114 115
115 return "{" + stream.read().stripWhiteSpace() + "}"; 116 return "{" + stream.read().stripWhiteSpace() + "}";
116} 117}
117 118
118int AbstractMail::createMbox(const QString&,const FolderP&,const QString& ,bool) 119int AbstractMail::createMbox(const QString&,const FolderP&,const QString& ,bool)
119{ 120{
120 return 0; 121 return 0;
121} 122}
122 123
123QString AbstractMail::defaultLocalfolder() 124QString AbstractMail::defaultLocalfolder()
124{ 125{
125 // QString f = getenv( "HOME" ); 126 // QString f = getenv( "HOME" );
126 QString f = locateLocal( "data", "kmicromail/localmail"); 127 QString f = locateLocal( "data", "kmicromail/localmail");
127 // f += "/Applications/opiemail/localmail"; 128 // f += "/Applications/opiemail/localmail";
128 return f; 129 return f;
129} 130}
130 131
131QString AbstractMail::draftFolder() 132QString AbstractMail::draftFolder()
132{ 133{
133 return QString("Drafts"); 134 return QString("Drafts");
134} 135}
135 136
136/* temporary - will be removed when implemented in all classes */ 137/* temporary - will be removed when implemented in all classes */
137void AbstractMail::deleteMails(const QString &,const QValueList<Opie::Core::OSmartPointer<RecMail> > &) 138void AbstractMail::deleteMails(const QString &,const QValueList<Opie::Core::OSmartPointer<RecMail> > &)
138{ 139{
139} 140}
141void AbstractMail::deleteMailList(const QValueList<RecMailP>&target)
142{
143 qDebug("AbstractMail::deleteMailList:: Please reimplement! ");
140 144
145}
141void AbstractMail::mvcpAllMails(const FolderP&fromFolder, 146void AbstractMail::mvcpAllMails(const FolderP&fromFolder,
142 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 147 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit, int maxSizeInKb)
148{
149 QValueList<RecMailP> t;
150 listMessages(fromFolder->getName(),t, maxSizeInKb);
151 mvcpMailList( t,targetFolder,targetWrapper,moveit);
152
153}
154void AbstractMail::mvcpMailList(const QValueList<RecMailP>& t,
155 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
143{ 156{
144 QValueList<RecMailP> t; 157
145 listMessages(fromFolder->getName(),t);
146 encodedString*st = 0; 158 encodedString*st = 0;
147 while (t.count()>0) { 159 int iii = 0;
148 RecMailP r = (*t.begin()); 160 int count = t.count();
161 while (iii < count ) {
162 RecMailP r = (*t.at( iii ));
149 st = fetchRawBody(r); 163 st = fetchRawBody(r);
150 if (st) { 164 if (st) {
151 targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder); 165 targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder);
152 delete st; 166 delete st;
153 } 167 }
154 t.remove(t.begin()); 168 ++iii;
155 } 169 }
156 if (moveit) { 170 if (moveit) {
157 deleteAllMail(fromFolder); 171 deleteMailList( t );
172 //deleteAllMail(fromFolder);
158 } 173 }
159} 174}
160 175
161void AbstractMail::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 176void AbstractMail::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
162{ 177{
163 encodedString*st = 0; 178 encodedString*st = 0;
164 st = fetchRawBody(mail); 179 st = fetchRawBody(mail);
165 if (st) { 180 if (st) {
166 targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder); 181 targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder);
167 delete st; 182 delete st;
168 } 183 }
169 if (moveit) { 184 if (moveit) {
170 deleteMail(mail); 185 deleteMail(mail);
171 } 186 }
172} 187}
diff --git a/kmicromail/libmailwrapper/abstractmail.h b/kmicromail/libmailwrapper/abstractmail.h
index e5d64a6..cae83f4 100644
--- a/kmicromail/libmailwrapper/abstractmail.h
+++ b/kmicromail/libmailwrapper/abstractmail.h
@@ -1,72 +1,76 @@
1// CHANGED 2004-09-31 Lutz Rogowski
1#ifndef __abstract_mail_ 2#ifndef __abstract_mail_
2#define __abstract_mail_ 3#define __abstract_mail_
3 4
4#include "maildefines.h" 5#include "maildefines.h"
5 6
6#include "settings.h" 7#include "settings.h"
7 8
8#include <qobject.h> 9#include <qobject.h>
9#include <opie2/osmartpointer.h> 10#include <opie2/osmartpointer.h>
10#include "mailtypes.h" 11#include "mailtypes.h"
11 12
12class IMAPwrapper; 13class IMAPwrapper;
13class POP3wrapper; 14class POP3wrapper;
14class Folder; 15class Folder;
15class encodedString; 16class encodedString;
16struct folderStat; 17struct folderStat;
17 18
18class AbstractMail:public QObject 19class AbstractMail:public QObject
19{ 20{
20 Q_OBJECT 21 Q_OBJECT
21public: 22public:
22 AbstractMail(){}; 23 AbstractMail(){};
23 virtual ~AbstractMail(){} 24 virtual ~AbstractMail(){}
24 virtual QValueList<Opie::Core::OSmartPointer<Folder> >* listFolders()=0; 25 virtual QValueList<Opie::Core::OSmartPointer<Folder> >* listFolders()=0;
25 virtual void listMessages(const QString & mailbox,QValueList<RecMailP>&target )=0; 26 virtual void listMessages(const QString & mailbox,QValueList<RecMailP>&target, int sizeInKb = 0 )=0;
26 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX")=0; 27 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX")=0;
27 virtual RecBodyP fetchBody(const RecMailP&mail)=0; 28 virtual RecBodyP fetchBody(const RecMailP&mail)=0;
28 virtual QString fetchTextPart(const RecMailP&mail,const RecPartP&part)=0; 29 virtual QString fetchTextPart(const RecMailP&mail,const RecPartP&part)=0;
29 virtual encodedString* fetchDecodedPart(const RecMailP&mail,const RecPartP&part)=0; 30 virtual encodedString* fetchDecodedPart(const RecMailP&mail,const RecPartP&part)=0;
30 virtual encodedString* fetchRawPart(const RecMailP&mail,const RecPartP&part)=0; 31 virtual encodedString* fetchRawPart(const RecMailP&mail,const RecPartP&part)=0;
31 virtual encodedString* fetchRawBody(const RecMailP&mail)=0; 32 virtual encodedString* fetchRawBody(const RecMailP&mail)=0;
32 33
33 virtual void deleteMail(const RecMailP&mail)=0; 34 virtual void deleteMail(const RecMailP&mail)=0;
35 virtual void deleteMailList(const QValueList<RecMailP>&target);
34 virtual void answeredMail(const RecMailP&mail)=0; 36 virtual void answeredMail(const RecMailP&mail)=0;
35 virtual int deleteAllMail(const Opie::Core::OSmartPointer<Folder>&)=0; 37 virtual int deleteAllMail(const Opie::Core::OSmartPointer<Folder>&)=0;
36 virtual void deleteMails(const QString & FolderName,const QValueList<Opie::Core::OSmartPointer<RecMail> >&target); 38 virtual void deleteMails(const QString & FolderName,const QValueList<Opie::Core::OSmartPointer<RecMail> >&target);
37 virtual int deleteMbox(const Opie::Core::OSmartPointer<Folder>&)=0; 39 virtual int deleteMbox(const Opie::Core::OSmartPointer<Folder>&)=0;
38 virtual void storeMessage(const char*msg,size_t length, const QString&folder)=0; 40 virtual void storeMessage(const char*msg,size_t length, const QString&folder)=0;
39 41
40 virtual void mvcpAllMails(const Opie::Core::OSmartPointer<Folder>&fromFolder, 42 virtual void mvcpAllMails(const Opie::Core::OSmartPointer<Folder>&fromFolder,
41 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit); 43 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit, int sizeInKb = 0);
44 virtual void mvcpMailList(const QValueList<RecMailP>& t,
45 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit);
42 virtual void mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit); 46 virtual void mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit);
43 47
44 virtual void cleanMimeCache(){}; 48 virtual void cleanMimeCache(){};
45 /* mail box methods */ 49 /* mail box methods */
46 /* parameter is the box to create. 50 /* parameter is the box to create.
47 * if the implementing subclass has prefixes, 51 * if the implementing subclass has prefixes,
48 * them has to be appended automatic. 52 * them has to be appended automatic.
49 */ 53 */
50 virtual int createMbox(const QString&,const Opie::Core::OSmartPointer<Folder>&parentfolder=0, 54 virtual int createMbox(const QString&,const Opie::Core::OSmartPointer<Folder>&parentfolder=0,
51 const QString& delemiter="/",bool getsubfolder=false); 55 const QString& delemiter="/",bool getsubfolder=false);
52 virtual void logout()=0; 56 virtual void logout()=0;
53 57
54 static AbstractMail* getWrapper(IMAPaccount *a); 58 static AbstractMail* getWrapper(IMAPaccount *a);
55 static AbstractMail* getWrapper(POP3account *a); 59 static AbstractMail* getWrapper(POP3account *a);
56 static AbstractMail* getWrapper(NNTPaccount *a); 60 static AbstractMail* getWrapper(NNTPaccount *a);
57 /* mbox only! */ 61 /* mbox only! */
58 static AbstractMail* getWrapper(const QString&a,const QString&name="Local Folders"); 62 static AbstractMail* getWrapper(const QString&a,const QString&name="Local Folders");
59 static AbstractMail* getWrapper(Account*a); 63 static AbstractMail* getWrapper(Account*a);
60 64
61 static QString defaultLocalfolder(); 65 static QString defaultLocalfolder();
62 static QString draftFolder(); 66 static QString draftFolder();
63 67
64 virtual MAILLIB::ATYPE getType()const=0; 68 virtual MAILLIB::ATYPE getType()const=0;
65 virtual const QString&getName()const=0; 69 virtual const QString&getName()const=0;
66 70
67protected: 71protected:
68 static encodedString*decode_String(const encodedString*text,const QString&enc); 72 static encodedString*decode_String(const encodedString*text,const QString&enc);
69 static QString convert_String(const char*text); 73 static QString convert_String(const char*text);
70 static QString gen_attachment_id(); 74 static QString gen_attachment_id();
71}; 75};
72#endif 76#endif
diff --git a/kmicromail/libmailwrapper/genericwrapper.cpp b/kmicromail/libmailwrapper/genericwrapper.cpp
index f804e44..1fd4bb1 100644
--- a/kmicromail/libmailwrapper/genericwrapper.cpp
+++ b/kmicromail/libmailwrapper/genericwrapper.cpp
@@ -1,48 +1,49 @@
1// CHANGED 2004-09-31 Lutz Rogowski
1#include "genericwrapper.h" 2#include "genericwrapper.h"
2#include <libetpan/libetpan.h> 3#include <libetpan/libetpan.h>
3#include "mailtypes.h" 4#include "mailtypes.h"
4 5
5 6
6 7
7using namespace Opie::Core; 8using namespace Opie::Core;
8Genericwrapper::Genericwrapper() 9Genericwrapper::Genericwrapper()
9 : AbstractMail() 10 : AbstractMail()
10{ 11{
11 bodyCache.clear(); 12 bodyCache.clear();
12 m_storage = 0; 13 m_storage = 0;
13 m_folder = 0; 14 m_folder = 0;
14} 15}
15 16
16Genericwrapper::~Genericwrapper() 17Genericwrapper::~Genericwrapper()
17{ 18{
18 if (m_folder) { 19 if (m_folder) {
19 mailfolder_free(m_folder); 20 mailfolder_free(m_folder);
20 } 21 }
21 if (m_storage) { 22 if (m_storage) {
22 mailstorage_free(m_storage); 23 mailstorage_free(m_storage);
23 } 24 }
24 cleanMimeCache(); 25 cleanMimeCache();
25} 26}
26 27
27void Genericwrapper::fillSingleBody(RecPartP&target,mailmessage*,mailmime*mime) 28void Genericwrapper::fillSingleBody(RecPartP&target,mailmessage*,mailmime*mime)
28{ 29{
29 if (!mime) { 30 if (!mime) {
30 return; 31 return;
31 } 32 }
32 mailmime_field*field = 0; 33 mailmime_field*field = 0;
33 mailmime_single_fields fields; 34 mailmime_single_fields fields;
34 memset(&fields, 0, sizeof(struct mailmime_single_fields)); 35 memset(&fields, 0, sizeof(struct mailmime_single_fields));
35 if (mime->mm_mime_fields != NULL) { 36 if (mime->mm_mime_fields != NULL) {
36 mailmime_single_fields_init(&fields, mime->mm_mime_fields, 37 mailmime_single_fields_init(&fields, mime->mm_mime_fields,
37 mime->mm_content_type); 38 mime->mm_content_type);
38 } 39 }
39 40
40 mailmime_content*type = fields.fld_content; 41 mailmime_content*type = fields.fld_content;
41 clistcell*current; 42 clistcell*current;
42 if (!type) { 43 if (!type) {
43 target->setType("text"); 44 target->setType("text");
44 target->setSubtype("plain"); 45 target->setSubtype("plain");
45 } else { 46 } else {
46 target->setSubtype(type->ct_subtype); 47 target->setSubtype(type->ct_subtype);
47 switch(type->ct_type->tp_data.tp_discrete_type->dt_type) { 48 switch(type->ct_type->tp_data.tp_discrete_type->dt_type) {
48 case MAILMIME_DISCRETE_TYPE_TEXT: 49 case MAILMIME_DISCRETE_TYPE_TEXT:
@@ -347,134 +348,135 @@ encodedString* Genericwrapper::fetchDecodedPart(const RecMailP&,const RecPartP&p
347encodedString* Genericwrapper::fetchRawPart(const RecMailP&,const RecPartP&part) 348encodedString* Genericwrapper::fetchRawPart(const RecMailP&,const RecPartP&part)
348{ 349{
349 QMap<QString,encodedString*>::ConstIterator it = bodyCache.find(part->Identifier()); 350 QMap<QString,encodedString*>::ConstIterator it = bodyCache.find(part->Identifier());
350 if (it==bodyCache.end()) return new encodedString(); 351 if (it==bodyCache.end()) return new encodedString();
351 encodedString*t = it.data(); 352 encodedString*t = it.data();
352 return t; 353 return t;
353} 354}
354 355
355QString Genericwrapper::fetchTextPart(const RecMailP&mail,const RecPartP&part) 356QString Genericwrapper::fetchTextPart(const RecMailP&mail,const RecPartP&part)
356{ 357{
357 encodedString*t = fetchDecodedPart(mail,part); 358 encodedString*t = fetchDecodedPart(mail,part);
358 QString text=t->Content(); 359 QString text=t->Content();
359 delete t; 360 delete t;
360 return text; 361 return text;
361} 362}
362 363
363void Genericwrapper::cleanMimeCache() 364void Genericwrapper::cleanMimeCache()
364{ 365{
365 QMap<QString,encodedString*>::Iterator it = bodyCache.begin(); 366 QMap<QString,encodedString*>::Iterator it = bodyCache.begin();
366 for (;it!=bodyCache.end();++it) { 367 for (;it!=bodyCache.end();++it) {
367 encodedString*t = it.data(); 368 encodedString*t = it.data();
368 //it.setValue(0); 369 //it.setValue(0);
369 if (t) delete t; 370 if (t) delete t;
370 } 371 }
371 bodyCache.clear(); 372 bodyCache.clear();
372 ; // odebug << "Genericwrapper: cache cleaned" << oendl; 373 ; // odebug << "Genericwrapper: cache cleaned" << oendl;
373} 374}
374 375
375QStringList Genericwrapper::parseInreplies(mailimf_in_reply_to * in_replies) 376QStringList Genericwrapper::parseInreplies(mailimf_in_reply_to * in_replies)
376{ 377{
377 QStringList res; 378 QStringList res;
378 if (!in_replies || !in_replies->mid_list) return res; 379 if (!in_replies || !in_replies->mid_list) return res;
379 clistiter * current = 0; 380 clistiter * current = 0;
380 for ( current = clist_begin( in_replies->mid_list ); current != NULL; current = current->next ) { 381 for ( current = clist_begin( in_replies->mid_list ); current != NULL; current = current->next ) {
381 QString h((char*)current->data); 382 QString h((char*)current->data);
382 while (h.length()>0 && h[0]=='<') { 383 while (h.length()>0 && h[0]=='<') {
383 h.remove(0,1); 384 h.remove(0,1);
384 } 385 }
385 while (h.length()>0 && h[h.length()-1]=='>') { 386 while (h.length()>0 && h[h.length()-1]=='>') {
386 h.remove(h.length()-1,1); 387 h.remove(h.length()-1,1);
387 } 388 }
388 if (h.length()>0) { 389 if (h.length()>0) {
389 res.append(h); 390 res.append(h);
390 } 391 }
391 } 392 }
392 return res; 393 return res;
393} 394}
394 395
395void Genericwrapper::parseList(QValueList<Opie::Core::OSmartPointer<RecMail> > &target,mailsession*session,const QString&mailbox,bool mbox_as_to) 396void Genericwrapper::parseList(QValueList<Opie::Core::OSmartPointer<RecMail> > &target,mailsession*session,const QString&mailbox,bool mbox_as_to, int maxSizeInKb)
396{ 397{
397 int r; 398 int r;
398 mailmessage_list * env_list = 0; 399 mailmessage_list * env_list = 0;
399 r = mailsession_get_messages_list(session,&env_list); 400 r = mailsession_get_messages_list(session,&env_list);
400 if (r != MAIL_NO_ERROR) { 401 if (r != MAIL_NO_ERROR) {
401 ; // odebug << "Error message list" << oendl; 402 ; // odebug << "Error message list" << oendl;
402 return; 403 return;
403 } 404 }
404 r = mailsession_get_envelopes_list(session, env_list); 405 r = mailsession_get_envelopes_list(session, env_list);
405 if (r != MAIL_NO_ERROR) { 406 if (r != MAIL_NO_ERROR) {
406 ; // odebug << "Error filling message list" << oendl; 407 ; // odebug << "Error filling message list" << oendl;
407 if (env_list) { 408 if (env_list) {
408 mailmessage_list_free(env_list); 409 mailmessage_list_free(env_list);
409 } 410 }
410 return; 411 return;
411 } 412 }
412 mailimf_references * refs = 0; 413 mailimf_references * refs = 0;
413 mailimf_in_reply_to * in_replies = 0; 414 mailimf_in_reply_to * in_replies = 0;
414 uint32_t i = 0; 415 uint32_t i = 0;
415 for(; i < carray_count(env_list->msg_tab) ; ++i) { 416 for(; i < carray_count(env_list->msg_tab) ; ++i) {
416 mailmessage * msg; 417 mailmessage * msg;
417 QBitArray mFlags(7); 418 QBitArray mFlags(7);
418 msg = (mailmessage*)carray_get(env_list->msg_tab, i); 419 msg = (mailmessage*)carray_get(env_list->msg_tab, i);
419 if (msg->msg_fields == NULL) { 420 if (msg->msg_fields == NULL) {
420 //; // odebug << "could not fetch envelope of message " << i << "" << oendl; 421 //; // odebug << "could not fetch envelope of message " << i << "" << oendl;
421 continue; 422 continue;
422 } 423 }
423 RecMailP mail = new RecMail(); 424 RecMailP mail = new RecMail();
424 mail->setWrapper(this); 425 mail->setWrapper(this);
425 mail_flags * flag_result = 0; 426 mail_flags * flag_result = 0;
426 r = mailmessage_get_flags(msg,&flag_result); 427 r = mailmessage_get_flags(msg,&flag_result);
427 if (r == MAIL_ERROR_NOT_IMPLEMENTED) { 428 if (r == MAIL_ERROR_NOT_IMPLEMENTED) {
428 mFlags.setBit(FLAG_SEEN); 429 mFlags.setBit(FLAG_SEEN);
429 } 430 }
430 mailimf_single_fields single_fields; 431 mailimf_single_fields single_fields;
431 mailimf_single_fields_init(&single_fields, msg->msg_fields); 432 mailimf_single_fields_init(&single_fields, msg->msg_fields);
432 mail->setMsgsize(msg->msg_size); 433 mail->setMsgsize(msg->msg_size);
433 mail->setFlags(mFlags); 434 mail->setFlags(mFlags);
434 mail->setMbox(mailbox); 435 mail->setMbox(mailbox);
435 mail->setNumber(msg->msg_index); 436 mail->setNumber(msg->msg_index);
436 if (single_fields.fld_subject) 437 if (single_fields.fld_subject)
437 mail->setSubject( convert_String(single_fields.fld_subject->sbj_value)); 438 mail->setSubject( convert_String(single_fields.fld_subject->sbj_value));
438 if (single_fields.fld_from) 439 if (single_fields.fld_from)
439 mail->setFrom(parseMailboxList(single_fields.fld_from->frm_mb_list)); 440 mail->setFrom(parseMailboxList(single_fields.fld_from->frm_mb_list));
440 if (!mbox_as_to) { 441 if (!mbox_as_to) {
441 if (single_fields.fld_to) 442 if (single_fields.fld_to)
442 mail->setTo( parseAddressList( single_fields.fld_to->to_addr_list ) ); 443 mail->setTo( parseAddressList( single_fields.fld_to->to_addr_list ) );
443 } else { 444 } else {
444 mail->setTo(mailbox); 445 mail->setTo(mailbox);
445 } 446 }
446 if (single_fields.fld_cc) 447 if (single_fields.fld_cc)
447 mail->setCC( parseAddressList( single_fields.fld_cc->cc_addr_list ) ); 448 mail->setCC( parseAddressList( single_fields.fld_cc->cc_addr_list ) );
448 if (single_fields.fld_bcc) 449 if (single_fields.fld_bcc)
449 mail->setBcc( parseAddressList( single_fields.fld_bcc->bcc_addr_list ) ); 450 mail->setBcc( parseAddressList( single_fields.fld_bcc->bcc_addr_list ) );
450 if (single_fields.fld_orig_date) 451 if (single_fields.fld_orig_date)
451 mail->setDate( parseDateTime( single_fields.fld_orig_date->dt_date_time ) ); 452 mail->setDate( parseDateTime( single_fields.fld_orig_date->dt_date_time ) );
452 // crashes when accessing pop3 account? 453 // crashes when accessing pop3 account?
453 if (single_fields.fld_message_id->mid_value) { 454 if (single_fields.fld_message_id->mid_value) {
454 mail->setMsgid(QString(single_fields.fld_message_id->mid_value)); 455 mail->setMsgid(QString(single_fields.fld_message_id->mid_value));
455 ; // odebug << "Msgid == " << mail->Msgid().latin1() << "" << oendl; 456 ; // odebug << "Msgid == " << mail->Msgid().latin1() << "" << oendl;
456 } 457 }
457 458
458 if (single_fields.fld_reply_to) { 459 if (single_fields.fld_reply_to) {
459 QStringList t = parseAddressList(single_fields.fld_reply_to->rt_addr_list); 460 QStringList t = parseAddressList(single_fields.fld_reply_to->rt_addr_list);
460 if (t.count()>0) { 461 if (t.count()>0) {
461 mail->setReplyto(t[0]); 462 mail->setReplyto(t[0]);
462 } 463 }
463 } 464 }
464#if 0 465#if 0
465 refs = single_fields.fld_references; 466 refs = single_fields.fld_references;
466 if (refs && refs->mid_list && clist_count(refs->mid_list)) { 467 if (refs && refs->mid_list && clist_count(refs->mid_list)) {
467 char * text = (char*)refs->mid_list->first->data; 468 char * text = (char*)refs->mid_list->first->data;
468 mail->setReplyto(QString(text)); 469 mail->setReplyto(QString(text));
469 } 470 }
470#endif 471#endif
471 if (single_fields.fld_in_reply_to && single_fields.fld_in_reply_to->mid_list && 472 if (single_fields.fld_in_reply_to && single_fields.fld_in_reply_to->mid_list &&
472 clist_count(single_fields.fld_in_reply_to->mid_list)) { 473 clist_count(single_fields.fld_in_reply_to->mid_list)) {
473 mail->setInreply(parseInreplies(single_fields.fld_in_reply_to)); 474 mail->setInreply(parseInreplies(single_fields.fld_in_reply_to));
474 } 475 }
475 target.append(mail); 476 if ( maxSizeInKb == 0 || mail->Msgsize()<=maxSizeInKb*1024 )
477 target.append(mail);
476 } 478 }
477 if (env_list) { 479 if (env_list) {
478 mailmessage_list_free(env_list); 480 mailmessage_list_free(env_list);
479 } 481 }
480} 482}
diff --git a/kmicromail/libmailwrapper/genericwrapper.h b/kmicromail/libmailwrapper/genericwrapper.h
index 8be9212..235e116 100644
--- a/kmicromail/libmailwrapper/genericwrapper.h
+++ b/kmicromail/libmailwrapper/genericwrapper.h
@@ -1,67 +1,68 @@
1// CHANGED 2004-09-31 Lutz Rogowski
1#ifndef __GENERIC_WRAPPER_H 2#ifndef __GENERIC_WRAPPER_H
2#define __GENERIC_WRAPPER_H 3#define __GENERIC_WRAPPER_H
3 4
4#include "abstractmail.h" 5#include "abstractmail.h"
5#include <qmap.h> 6#include <qmap.h>
6#include <qstring.h> 7#include <qstring.h>
7#include <libetpan/clist.h> 8#include <libetpan/clist.h>
8 9
9class RecMail; 10class RecMail;
10class RecBody; 11class RecBody;
11class encodedString; 12class encodedString;
12struct mailpop3; 13struct mailpop3;
13struct mailmessage; 14struct mailmessage;
14struct mailmime; 15struct mailmime;
15struct mailmime_mechanism; 16struct mailmime_mechanism;
16struct mailimf_mailbox_list; 17struct mailimf_mailbox_list;
17struct mailimf_mailbox; 18struct mailimf_mailbox;
18struct mailimf_date_time; 19struct mailimf_date_time;
19struct mailimf_group; 20struct mailimf_group;
20struct mailimf_address_list; 21struct mailimf_address_list;
21struct mailsession; 22struct mailsession;
22struct mailstorage; 23struct mailstorage;
23struct mailfolder; 24struct mailfolder;
24struct mailimf_in_reply_to; 25struct mailimf_in_reply_to;
25 26
26/* this class hold just the funs shared between 27/* this class hold just the funs shared between
27 * mbox and pop3 (later mh, too) mail access. 28 * mbox and pop3 (later mh, too) mail access.
28 * it is not desigend to make a instance of it! 29 * it is not desigend to make a instance of it!
29 */ 30 */
30class Genericwrapper : public AbstractMail 31class Genericwrapper : public AbstractMail
31{ 32{
32 Q_OBJECT 33 Q_OBJECT
33public: 34public:
34 Genericwrapper(); 35 Genericwrapper();
35 virtual ~Genericwrapper(); 36 virtual ~Genericwrapper();
36 37
37 virtual encodedString* fetchDecodedPart(const RecMailP&mail,const RecPartP&part); 38 virtual encodedString* fetchDecodedPart(const RecMailP&mail,const RecPartP&part);
38 virtual encodedString* fetchRawPart(const RecMailP&mail,const RecPartP&part); 39 virtual encodedString* fetchRawPart(const RecMailP&mail,const RecPartP&part);
39 virtual QString fetchTextPart(const RecMailP&mail,const RecPartP&part); 40 virtual QString fetchTextPart(const RecMailP&mail,const RecPartP&part);
40 virtual void cleanMimeCache(); 41 virtual void cleanMimeCache();
41 virtual int deleteMbox(const Opie::Core::OSmartPointer<Folder>&){return 1;} 42 virtual int deleteMbox(const Opie::Core::OSmartPointer<Folder>&){return 1;}
42 virtual void logout(){}; 43 virtual void logout(){};
43 virtual void storeMessage(const char*msg,size_t length, const QString&folder){}; 44 virtual void storeMessage(const char*msg,size_t length, const QString&folder){};
44 45
45protected: 46protected:
46 RecBodyP parseMail( mailmessage * msg ); 47 RecBodyP parseMail( mailmessage * msg );
47 QString parseMailboxList( mailimf_mailbox_list *list ); 48 QString parseMailboxList( mailimf_mailbox_list *list );
48 QString parseMailbox( mailimf_mailbox *box ); 49 QString parseMailbox( mailimf_mailbox *box );
49 QString parseGroup( mailimf_group *group ); 50 QString parseGroup( mailimf_group *group );
50 QString parseAddressList( mailimf_address_list *list ); 51 QString parseAddressList( mailimf_address_list *list );
51 QString parseDateTime( mailimf_date_time *date ); 52 QString parseDateTime( mailimf_date_time *date );
52 53
53 void traverseBody(RecBodyP&target,mailmessage*message,mailmime*mime,QValueList<int>recList,unsigned int current_rek=0,int current_count=1); 54 void traverseBody(RecBodyP&target,mailmessage*message,mailmime*mime,QValueList<int>recList,unsigned int current_rek=0,int current_count=1);
54 static void fillSingleBody(RecPartP&target,mailmessage*message,mailmime*mime); 55 static void fillSingleBody(RecPartP&target,mailmessage*message,mailmime*mime);
55 static void fillParameters(RecPartP&target,clist*parameters); 56 static void fillParameters(RecPartP&target,clist*parameters);
56 static QString getencoding(mailmime_mechanism*aEnc); 57 static QString getencoding(mailmime_mechanism*aEnc);
57 virtual void parseList(QValueList<Opie::Core::OSmartPointer<RecMail> > &target,mailsession*session,const QString&mailbox,bool mbox_as_to=false); 58 virtual void parseList(QValueList<Opie::Core::OSmartPointer<RecMail> > &target,mailsession*session,const QString&mailbox,bool mbox_as_to=false, int maxSizeInKb = 0);
58 QStringList parseInreplies(mailimf_in_reply_to * in_replies); 59 QStringList parseInreplies(mailimf_in_reply_to * in_replies);
59 60
60 QString msgTempName; 61 QString msgTempName;
61 unsigned int last_msg_id; 62 unsigned int last_msg_id;
62 QMap<QString,encodedString*> bodyCache; 63 QMap<QString,encodedString*> bodyCache;
63 mailstorage * m_storage; 64 mailstorage * m_storage;
64 mailfolder*m_folder; 65 mailfolder*m_folder;
65}; 66};
66 67
67#endif 68#endif
diff --git a/kmicromail/libmailwrapper/imapwrapper.cpp b/kmicromail/libmailwrapper/imapwrapper.cpp
index e0fb6f9..bb8bbfc 100644
--- a/kmicromail/libmailwrapper/imapwrapper.cpp
+++ b/kmicromail/libmailwrapper/imapwrapper.cpp
@@ -1,48 +1,49 @@
1// CHANGED 2004-09-31 Lutz Rogowski
1#include <stdlib.h> 2#include <stdlib.h>
2#include <libetpan/libetpan.h> 3#include <libetpan/libetpan.h>
3#include <qpe/global.h> 4#include <qpe/global.h>
4#include <qapplication.h> 5#include <qapplication.h>
5#include "imapwrapper.h" 6#include "imapwrapper.h"
6#include "mailtypes.h" 7#include "mailtypes.h"
7#include "logindialog.h" 8#include "logindialog.h"
8 9
9using namespace Opie::Core; 10using namespace Opie::Core;
10IMAPwrapper::IMAPwrapper( IMAPaccount *a ) 11IMAPwrapper::IMAPwrapper( IMAPaccount *a )
11 : AbstractMail() 12 : AbstractMail()
12{ 13{
13 account = a; 14 account = a;
14 m_imap = 0; 15 m_imap = 0;
15 m_Lastmbox = ""; 16 m_Lastmbox = "";
16} 17}
17 18
18IMAPwrapper::~IMAPwrapper() 19IMAPwrapper::~IMAPwrapper()
19{ 20{
20 logout(); 21 logout();
21} 22}
22 23
23/* to avoid to often select statements in loops etc. 24/* to avoid to often select statements in loops etc.
24 we trust that we are logged in and connection is established!*/ 25 we trust that we are logged in and connection is established!*/
25int IMAPwrapper::selectMbox(const QString&mbox) 26int IMAPwrapper::selectMbox(const QString&mbox)
26{ 27{
27 if (mbox == m_Lastmbox) { 28 if (mbox == m_Lastmbox) {
28 return MAILIMAP_NO_ERROR; 29 return MAILIMAP_NO_ERROR;
29 } 30 }
30 int err = mailimap_select( m_imap, (char*)mbox.latin1()); 31 int err = mailimap_select( m_imap, (char*)mbox.latin1());
31 if ( err != MAILIMAP_NO_ERROR ) { 32 if ( err != MAILIMAP_NO_ERROR ) {
32 m_Lastmbox = ""; 33 m_Lastmbox = "";
33 return err; 34 return err;
34 } 35 }
35 m_Lastmbox = mbox; 36 m_Lastmbox = mbox;
36 return err; 37 return err;
37} 38}
38 39
39void IMAPwrapper::imap_progress( size_t current, size_t maximum ) 40void IMAPwrapper::imap_progress( size_t current, size_t maximum )
40{ 41{
41 qApp->processEvents(); 42 qApp->processEvents();
42 qDebug("imap progress %d of %d ",current,maximum ); 43 qDebug("imap progress %d of %d ",current,maximum );
43} 44}
44 45
45bool IMAPwrapper::start_tls(bool force_tls) 46bool IMAPwrapper::start_tls(bool force_tls)
46{ 47{
47 int err; 48 int err;
48 bool try_tls; 49 bool try_tls;
@@ -157,148 +158,150 @@ void IMAPwrapper::login()
157 failure="Connection refused"; 158 failure="Connection refused";
158 } else { 159 } else {
159 failure="Unknown failure"; 160 failure="Unknown failure";
160 } 161 }
161 Global::statusMessage(tr("error connecting imap server: %1").arg(failure)); 162 Global::statusMessage(tr("error connecting imap server: %1").arg(failure));
162 mailimap_free( m_imap ); 163 mailimap_free( m_imap );
163 m_imap = 0; 164 m_imap = 0;
164 return; 165 return;
165 } 166 }
166 167
167 if (!ssl) { 168 if (!ssl) {
168 try_tls = start_tls(force_tls); 169 try_tls = start_tls(force_tls);
169 } 170 }
170 171
171 bool ok = true; 172 bool ok = true;
172 if (force_tls && !try_tls) { 173 if (force_tls && !try_tls) {
173 Global::statusMessage(tr("Server has no TLS support!")); 174 Global::statusMessage(tr("Server has no TLS support!"));
174 ok = false; 175 ok = false;
175 } 176 }
176 177
177 178
178 /* login */ 179 /* login */
179 180
180 if (ok) { 181 if (ok) {
181 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass ); 182 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass );
182 if ( err != MAILIMAP_NO_ERROR ) { 183 if ( err != MAILIMAP_NO_ERROR ) {
183 Global::statusMessage(tr("error logging in imap server: %1").arg(m_imap->imap_response)); 184 Global::statusMessage(tr("error logging in imap server: %1").arg(m_imap->imap_response));
184 ok = false; 185 ok = false;
185 } 186 }
186 } 187 }
187 if (!ok) { 188 if (!ok) {
188 err = mailimap_close( m_imap ); 189 err = mailimap_close( m_imap );
189 mailimap_free( m_imap ); 190 mailimap_free( m_imap );
190 m_imap = 0; 191 m_imap = 0;
191 } 192 }
192} 193}
193 194
194void IMAPwrapper::logout() 195void IMAPwrapper::logout()
195{ 196{
196 int err = MAILIMAP_NO_ERROR; 197 int err = MAILIMAP_NO_ERROR;
197 if (!m_imap) return; 198 if (!m_imap) return;
198 err = mailimap_logout( m_imap ); 199 err = mailimap_logout( m_imap );
199 err = mailimap_close( m_imap ); 200 err = mailimap_close( m_imap );
200 mailimap_free( m_imap ); 201 mailimap_free( m_imap );
201 m_imap = 0; 202 m_imap = 0;
202 m_Lastmbox = ""; 203 m_Lastmbox = "";
203} 204}
204 205
205void IMAPwrapper::listMessages(const QString&mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> > &target ) 206void IMAPwrapper::listMessages(const QString&mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> > &target , int maxSizeInKb)
206{ 207{
207 int err = MAILIMAP_NO_ERROR; 208 int err = MAILIMAP_NO_ERROR;
208 clist *result = 0; 209 clist *result = 0;
209 clistcell *current; 210 clistcell *current;
210 mailimap_fetch_type *fetchType = 0; 211 mailimap_fetch_type *fetchType = 0;
211 mailimap_set *set = 0; 212 mailimap_set *set = 0;
212 213
213 login(); 214 login();
214 if (!m_imap) { 215 if (!m_imap) {
215 return; 216 return;
216 } 217 }
217 /* select mailbox READONLY for operations */ 218 /* select mailbox READONLY for operations */
218 err = selectMbox(mailbox); 219 err = selectMbox(mailbox);
219 if ( err != MAILIMAP_NO_ERROR ) { 220 if ( err != MAILIMAP_NO_ERROR ) {
220 return; 221 return;
221 } 222 }
222 223
223 int last = m_imap->imap_selection_info->sel_exists; 224 int last = m_imap->imap_selection_info->sel_exists;
224 225
225 if (last == 0) { 226 if (last == 0) {
226 Global::statusMessage(tr("Mailbox has no mails")); 227 Global::statusMessage(tr("Mailbox has no mails"));
227 return; 228 return;
228 } else { 229 } else {
229 } 230 }
230 231
231 /* the range has to start at 1!!! not with 0!!!! */ 232 /* the range has to start at 1!!! not with 0!!!! */
232 set = mailimap_set_new_interval( 1, last ); 233 set = mailimap_set_new_interval( 1, last );
233 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 234 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
234 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope()); 235 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope());
235 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags()); 236 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags());
236 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate()); 237 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate());
237 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size()); 238 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size());
238 239
239 err = mailimap_fetch( m_imap, set, fetchType, &result ); 240 err = mailimap_fetch( m_imap, set, fetchType, &result );
240 mailimap_set_free( set ); 241 mailimap_set_free( set );
241 mailimap_fetch_type_free( fetchType ); 242 mailimap_fetch_type_free( fetchType );
242 243
243 QString date,subject,from; 244 QString date,subject,from;
244 245
245 if ( err == MAILIMAP_NO_ERROR ) { 246 if ( err == MAILIMAP_NO_ERROR ) {
246 mailimap_msg_att * msg_att; 247 mailimap_msg_att * msg_att;
247 int i = 0; 248 int i = 0;
248 for (current = clist_begin(result); current != 0; current=clist_next(current)) { 249 for (current = clist_begin(result); current != 0; current=clist_next(current)) {
249 ++i; 250 ++i;
250 msg_att = (mailimap_msg_att*)current->data; 251 msg_att = (mailimap_msg_att*)current->data;
251 RecMail*m = parse_list_result(msg_att); 252 RecMail*m = parse_list_result(msg_att);
252 if (m) { 253 if (m) {
253 m->setNumber(i); 254 if ( maxSizeInKb == 0 || m->Msgsize()<=maxSizeInKb*1024 ) {
254 m->setMbox(mailbox); 255 m->setNumber(i);
255 m->setWrapper(this); 256 m->setMbox(mailbox);
256 target.append(m); 257 m->setWrapper(this);
258 target.append(m);
259 }
257 } 260 }
258 } 261 }
259 Global::statusMessage(tr("Mailbox has %1 mails").arg(target.count())); 262 Global::statusMessage(tr("Mailbox has %1 mails").arg(target.count()));
260 } else { 263 } else {
261 Global::statusMessage(tr("Error fetching headers: %1").arg(m_imap->imap_response)); 264 Global::statusMessage(tr("Error fetching headers: %1").arg(m_imap->imap_response));
262 } 265 }
263 if (result) mailimap_fetch_list_free(result); 266 if (result) mailimap_fetch_list_free(result);
264} 267}
265 268
266QValueList<Opie::Core::OSmartPointer<Folder> >* IMAPwrapper::listFolders() 269QValueList<Opie::Core::OSmartPointer<Folder> >* IMAPwrapper::listFolders()
267{ 270{
268 const char *path, *mask; 271 const char *path, *mask;
269 int err = MAILIMAP_NO_ERROR; 272 int err = MAILIMAP_NO_ERROR;
270 clist *result = 0; 273 clist *result = 0;
271 clistcell *current = 0; 274 clistcell *current = 0;
272 clistcell*cur_flag = 0; 275 clistcell*cur_flag = 0;
273 mailimap_mbx_list_flags*bflags = 0; 276 mailimap_mbx_list_flags*bflags = 0;
274 277
275 QValueList<FolderP>* folders = new QValueList<FolderP>(); 278 QValueList<FolderP>* folders = new QValueList<FolderP>();
276 login(); 279 login();
277 if (!m_imap) { 280 if (!m_imap) {
278 return folders; 281 return folders;
279 } 282 }
280 283
281/* 284/*
282 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 285 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
283 * We must not forget to filter them out in next loop! 286 * We must not forget to filter them out in next loop!
284 * it seems like ugly code. and yes - it is ugly code. but the best way. 287 * it seems like ugly code. and yes - it is ugly code. but the best way.
285 */ 288 */
286 QString temp; 289 QString temp;
287 mask = "INBOX" ; 290 mask = "INBOX" ;
288 mailimap_mailbox_list *list; 291 mailimap_mailbox_list *list;
289 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); 292 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result );
290 QString del; 293 QString del;
291 bool selectable = true; 294 bool selectable = true;
292 bool no_inferiors = false; 295 bool no_inferiors = false;
293 if ( err == MAILIMAP_NO_ERROR ) { 296 if ( err == MAILIMAP_NO_ERROR ) {
294 current = result->first; 297 current = result->first;
295 for ( int i = result->count; i > 0; i-- ) { 298 for ( int i = result->count; i > 0; i-- ) {
296 list = (mailimap_mailbox_list *) current->data; 299 list = (mailimap_mailbox_list *) current->data;
297 // it is better use the deep copy mechanism of qt itself 300 // it is better use the deep copy mechanism of qt itself
298 // instead of using strdup! 301 // instead of using strdup!
299 temp = list->mb_name; 302 temp = list->mb_name;
300 del = list->mb_delimiter; 303 del = list->mb_delimiter;
301 current = current->next; 304 current = current->next;
302 if ( (bflags = list->mb_flag) ) { 305 if ( (bflags = list->mb_flag) ) {
303 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& 306 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&&
304 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); 307 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT);
@@ -821,130 +824,174 @@ void IMAPwrapper::fillSingleBasicPart(RecPartP&target_part,mailimap_body_type_ba
821} 824}
822 825
823void IMAPwrapper::fillBodyFields(RecPartP&target_part,mailimap_body_fields*which) 826void IMAPwrapper::fillBodyFields(RecPartP&target_part,mailimap_body_fields*which)
824{ 827{
825 if (!which) return; 828 if (!which) return;
826 if (which->bd_parameter && which->bd_parameter->pa_list && which->bd_parameter->pa_list->count>0) { 829 if (which->bd_parameter && which->bd_parameter->pa_list && which->bd_parameter->pa_list->count>0) {
827 clistcell*cur; 830 clistcell*cur;
828 mailimap_single_body_fld_param*param=0; 831 mailimap_single_body_fld_param*param=0;
829 for (cur = clist_begin(which->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) { 832 for (cur = clist_begin(which->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) {
830 param = (mailimap_single_body_fld_param*)cur->data; 833 param = (mailimap_single_body_fld_param*)cur->data;
831 if (param) { 834 if (param) {
832 target_part->addParameter(QString(param->pa_name).lower(),QString(param->pa_value)); 835 target_part->addParameter(QString(param->pa_name).lower(),QString(param->pa_value));
833 } 836 }
834 } 837 }
835 } 838 }
836 mailimap_body_fld_enc*enc = which->bd_encoding; 839 mailimap_body_fld_enc*enc = which->bd_encoding;
837 QString encoding(""); 840 QString encoding("");
838 switch (enc->enc_type) { 841 switch (enc->enc_type) {
839 case MAILIMAP_BODY_FLD_ENC_7BIT: 842 case MAILIMAP_BODY_FLD_ENC_7BIT:
840 encoding = "7bit"; 843 encoding = "7bit";
841 break; 844 break;
842 case MAILIMAP_BODY_FLD_ENC_8BIT: 845 case MAILIMAP_BODY_FLD_ENC_8BIT:
843 encoding = "8bit"; 846 encoding = "8bit";
844 break; 847 break;
845 case MAILIMAP_BODY_FLD_ENC_BINARY: 848 case MAILIMAP_BODY_FLD_ENC_BINARY:
846 encoding="binary"; 849 encoding="binary";
847 break; 850 break;
848 case MAILIMAP_BODY_FLD_ENC_BASE64: 851 case MAILIMAP_BODY_FLD_ENC_BASE64:
849 encoding="base64"; 852 encoding="base64";
850 break; 853 break;
851 case MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE: 854 case MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE:
852 encoding="quoted-printable"; 855 encoding="quoted-printable";
853 break; 856 break;
854 case MAILIMAP_BODY_FLD_ENC_OTHER: 857 case MAILIMAP_BODY_FLD_ENC_OTHER:
855 default: 858 default:
856 if (enc->enc_value) { 859 if (enc->enc_value) {
857 char*t=enc->enc_value; 860 char*t=enc->enc_value;
858 encoding=QString(enc->enc_value); 861 encoding=QString(enc->enc_value);
859 enc->enc_value=0L; 862 enc->enc_value=0L;
860 free(t); 863 free(t);
861 } 864 }
862 } 865 }
863 if (which->bd_description) { 866 if (which->bd_description) {
864 target_part->setDescription(QString(which->bd_description)); 867 target_part->setDescription(QString(which->bd_description));
865 } 868 }
866 target_part->setEncoding(encoding); 869 target_part->setEncoding(encoding);
867 target_part->setSize(which->bd_size); 870 target_part->setSize(which->bd_size);
868} 871}
872void IMAPwrapper::deleteMailList(const QValueList<RecMailP>&target)
873{
874 mailimap_flag_list*flist;
875 mailimap_set *set;
876 mailimap_store_att_flags * store_flags;
877 int err;
878 login();
879 if (!m_imap) {
880 return;
881 }
882 int iii = 0;
883 int count = target.count();
884 qDebug("imap remove count %d ", count);
885 while (iii < count ) {
886 qDebug("IMAP remove %d ", iii);
887 RecMailP mail = (*target.at( iii ));
869 888
889 err = selectMbox(mail->getMbox());
890 if ( err != MAILIMAP_NO_ERROR ) {
891 return;
892 }
893 flist = mailimap_flag_list_new_empty();
894 mailimap_flag_list_add(flist,mailimap_flag_new_deleted());
895 store_flags = mailimap_store_att_flags_new_set_flags(flist);
896 set = mailimap_set_new_single(mail->getNumber());
897 err = mailimap_store(m_imap,set,store_flags);
898 mailimap_set_free( set );
899 mailimap_store_att_flags_free(store_flags);
900
901 if (err != MAILIMAP_NO_ERROR) {
902 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl;
903 return;
904 }
905 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl;
906 /* should we realy do that at this moment? */
907
908 err = mailimap_expunge(m_imap);
909 if (err != MAILIMAP_NO_ERROR) {
910 Global::statusMessage(tr("error deleting mail: %s").arg(m_imap->imap_response));
911 }
912 ++iii;
913 }
914}
870void IMAPwrapper::deleteMail(const RecMailP&mail) 915void IMAPwrapper::deleteMail(const RecMailP&mail)
871{ 916{
872 mailimap_flag_list*flist; 917 mailimap_flag_list*flist;
873 mailimap_set *set; 918 mailimap_set *set;
874 mailimap_store_att_flags * store_flags; 919 mailimap_store_att_flags * store_flags;
875 int err; 920 int err;
876 login(); 921 login();
877 if (!m_imap) { 922 if (!m_imap) {
878 return; 923 return;
879 } 924 }
880 err = selectMbox(mail->getMbox()); 925 err = selectMbox(mail->getMbox());
881 if ( err != MAILIMAP_NO_ERROR ) { 926 if ( err != MAILIMAP_NO_ERROR ) {
882 return; 927 return;
883 } 928 }
884 flist = mailimap_flag_list_new_empty(); 929 flist = mailimap_flag_list_new_empty();
885 mailimap_flag_list_add(flist,mailimap_flag_new_deleted()); 930 mailimap_flag_list_add(flist,mailimap_flag_new_deleted());
886 store_flags = mailimap_store_att_flags_new_set_flags(flist); 931 store_flags = mailimap_store_att_flags_new_set_flags(flist);
887 set = mailimap_set_new_single(mail->getNumber()); 932 set = mailimap_set_new_single(mail->getNumber());
888 err = mailimap_store(m_imap,set,store_flags); 933 err = mailimap_store(m_imap,set,store_flags);
889 mailimap_set_free( set ); 934 mailimap_set_free( set );
890 mailimap_store_att_flags_free(store_flags); 935 mailimap_store_att_flags_free(store_flags);
891 936
892 if (err != MAILIMAP_NO_ERROR) { 937 if (err != MAILIMAP_NO_ERROR) {
893 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl; 938 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl;
894 return; 939 return;
895 } 940 }
896 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl; 941 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl;
897 /* should we realy do that at this moment? */ 942 /* should we realy do that at this moment? */
943
898 err = mailimap_expunge(m_imap); 944 err = mailimap_expunge(m_imap);
899 if (err != MAILIMAP_NO_ERROR) { 945 if (err != MAILIMAP_NO_ERROR) {
900 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl; 946 Global::statusMessage(tr("error deleting mail: %s").arg(m_imap->imap_response));
901 } 947 }
902 // odebug << "Delete successfull " << m_imap->imap_response << "" << oendl; 948 qDebug("IMAPwrapper::deleteMail ");
949
903} 950}
904 951
905void IMAPwrapper::answeredMail(const RecMailP&mail) 952void IMAPwrapper::answeredMail(const RecMailP&mail)
906{ 953{
907 mailimap_flag_list*flist; 954 mailimap_flag_list*flist;
908 mailimap_set *set; 955 mailimap_set *set;
909 mailimap_store_att_flags * store_flags; 956 mailimap_store_att_flags * store_flags;
910 int err; 957 int err;
911 login(); 958 login();
912 if (!m_imap) { 959 if (!m_imap) {
913 return; 960 return;
914 } 961 }
915 err = selectMbox(mail->getMbox()); 962 err = selectMbox(mail->getMbox());
916 if ( err != MAILIMAP_NO_ERROR ) { 963 if ( err != MAILIMAP_NO_ERROR ) {
917 return; 964 return;
918 } 965 }
919 flist = mailimap_flag_list_new_empty(); 966 flist = mailimap_flag_list_new_empty();
920 mailimap_flag_list_add(flist,mailimap_flag_new_answered()); 967 mailimap_flag_list_add(flist,mailimap_flag_new_answered());
921 store_flags = mailimap_store_att_flags_new_add_flags(flist); 968 store_flags = mailimap_store_att_flags_new_add_flags(flist);
922 set = mailimap_set_new_single(mail->getNumber()); 969 set = mailimap_set_new_single(mail->getNumber());
923 err = mailimap_store(m_imap,set,store_flags); 970 err = mailimap_store(m_imap,set,store_flags);
924 mailimap_set_free( set ); 971 mailimap_set_free( set );
925 mailimap_store_att_flags_free(store_flags); 972 mailimap_store_att_flags_free(store_flags);
926 973
927 if (err != MAILIMAP_NO_ERROR) { 974 if (err != MAILIMAP_NO_ERROR) {
928 // odebug << "error marking mail: " << m_imap->imap_response << "" << oendl; 975 // odebug << "error marking mail: " << m_imap->imap_response << "" << oendl;
929 return; 976 return;
930 } 977 }
931} 978}
932 979
933QString IMAPwrapper::fetchTextPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call,const QString&enc) 980QString IMAPwrapper::fetchTextPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call,const QString&enc)
934{ 981{
935 QString body(""); 982 QString body("");
936 encodedString*res = fetchRawPart(mail,path,internal_call); 983 encodedString*res = fetchRawPart(mail,path,internal_call);
937 encodedString*r = decode_String(res,enc); 984 encodedString*r = decode_String(res,enc);
938 delete res; 985 delete res;
939 if (r) { 986 if (r) {
940 if (r->Length()>0) { 987 if (r->Length()>0) {
941 body = r->Content(); 988 body = r->Content();
942 } 989 }
943 delete r; 990 delete r;
944 } 991 }
945 return body; 992 return body;
946} 993}
947 994
948QString IMAPwrapper::fetchTextPart(const RecMailP&mail,const RecPartP&part) 995QString IMAPwrapper::fetchTextPart(const RecMailP&mail,const RecPartP&part)
949{ 996{
950 return fetchTextPart(mail,part->Positionlist(),false,part->Encoding()); 997 return fetchTextPart(mail,part->Positionlist(),false,part->Encoding());
@@ -1075,100 +1122,101 @@ void IMAPwrapper::statusFolder(folderStat&target_stat,const QString & mailbox)
1075 case MAILIMAP_STATUS_ATT_MESSAGES: 1122 case MAILIMAP_STATUS_ATT_MESSAGES:
1076 target_stat.message_count = status_info->st_value; 1123 target_stat.message_count = status_info->st_value;
1077 break; 1124 break;
1078 case MAILIMAP_STATUS_ATT_RECENT: 1125 case MAILIMAP_STATUS_ATT_RECENT:
1079 target_stat.message_recent = status_info->st_value; 1126 target_stat.message_recent = status_info->st_value;
1080 break; 1127 break;
1081 case MAILIMAP_STATUS_ATT_UNSEEN: 1128 case MAILIMAP_STATUS_ATT_UNSEEN:
1082 target_stat.message_unseen = status_info->st_value; 1129 target_stat.message_unseen = status_info->st_value;
1083 break; 1130 break;
1084 } 1131 }
1085 } 1132 }
1086 } else { 1133 } else {
1087 // odebug << "Error retrieving status" << oendl; 1134 // odebug << "Error retrieving status" << oendl;
1088 } 1135 }
1089 if (status) mailimap_mailbox_data_status_free(status); 1136 if (status) mailimap_mailbox_data_status_free(status);
1090 if (att_list) mailimap_status_att_list_free(att_list); 1137 if (att_list) mailimap_status_att_list_free(att_list);
1091} 1138}
1092 1139
1093void IMAPwrapper::storeMessage(const char*msg,size_t length, const QString&folder) 1140void IMAPwrapper::storeMessage(const char*msg,size_t length, const QString&folder)
1094{ 1141{
1095 login(); 1142 login();
1096 if (!m_imap) return; 1143 if (!m_imap) return;
1097 if (!msg) return; 1144 if (!msg) return;
1098 int r = mailimap_append(m_imap,(char*)folder.latin1(),0,0,msg,length); 1145 int r = mailimap_append(m_imap,(char*)folder.latin1(),0,0,msg,length);
1099 if (r != MAILIMAP_NO_ERROR) { 1146 if (r != MAILIMAP_NO_ERROR) {
1100 Global::statusMessage("Error storing mail!"); 1147 Global::statusMessage("Error storing mail!");
1101 } 1148 }
1102} 1149}
1103 1150
1104MAILLIB::ATYPE IMAPwrapper::getType()const 1151MAILLIB::ATYPE IMAPwrapper::getType()const
1105{ 1152{
1106 return account->getType(); 1153 return account->getType();
1107} 1154}
1108 1155
1109const QString&IMAPwrapper::getName()const 1156const QString&IMAPwrapper::getName()const
1110{ 1157{
1111 // odebug << "Get name: " << account->getAccountName().latin1() << "" << oendl; 1158 // odebug << "Get name: " << account->getAccountName().latin1() << "" << oendl;
1112 return account->getAccountName(); 1159 return account->getAccountName();
1113} 1160}
1114 1161
1115encodedString* IMAPwrapper::fetchRawBody(const RecMailP&mail) 1162encodedString* IMAPwrapper::fetchRawBody(const RecMailP&mail)
1116{ 1163{
1117 // dummy 1164 // dummy
1118 QValueList<int> path; 1165 QValueList<int> path;
1119 return fetchRawPart(mail,path,false); 1166 return fetchRawPart(mail,path,false);
1120} 1167}
1121 1168
1122void IMAPwrapper::mvcpAllMails(const FolderP&fromFolder, 1169void IMAPwrapper::mvcpAllMails(const FolderP&fromFolder,
1123 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 1170 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit, int maxSizeInKb)
1124{ 1171{
1125 if (targetWrapper != this) { 1172 if (targetWrapper != this || maxSizeInKb > 0 ) {
1126 AbstractMail::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit); 1173 AbstractMail::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit, maxSizeInKb);
1174 qDebug("IMAPwrapper::mvcpAllMails::Using generic");
1127 // odebug << "Using generic" << oendl; 1175 // odebug << "Using generic" << oendl;
1128 return; 1176 return;
1129 } 1177 }
1130 mailimap_set *set = 0; 1178 mailimap_set *set = 0;
1131 login(); 1179 login();
1132 if (!m_imap) { 1180 if (!m_imap) {
1133 return; 1181 return;
1134 } 1182 }
1135 int err = selectMbox(fromFolder->getName()); 1183 int err = selectMbox(fromFolder->getName());
1136 if ( err != MAILIMAP_NO_ERROR ) { 1184 if ( err != MAILIMAP_NO_ERROR ) {
1137 return; 1185 return;
1138 } 1186 }
1139 int last = m_imap->imap_selection_info->sel_exists; 1187 int last = m_imap->imap_selection_info->sel_exists;
1140 set = mailimap_set_new_interval( 1, last ); 1188 set = mailimap_set_new_interval( 1, last );
1141 err = mailimap_copy(m_imap,set,targetFolder.latin1()); 1189 err = mailimap_copy(m_imap,set,targetFolder.latin1());
1142 mailimap_set_free( set ); 1190 mailimap_set_free( set );
1143 if ( err != MAILIMAP_NO_ERROR ) { 1191 if ( err != MAILIMAP_NO_ERROR ) {
1144 QString error_msg = tr("error copy mails: %1").arg(m_imap->imap_response); 1192 QString error_msg = tr("error copy mails: %1").arg(m_imap->imap_response);
1145 Global::statusMessage(error_msg); 1193 Global::statusMessage(error_msg);
1146 // odebug << error_msg << oendl; 1194 // odebug << error_msg << oendl;
1147 return; 1195 return;
1148 } 1196 }
1149 if (moveit) { 1197 if (moveit) {
1150 deleteAllMail(fromFolder); 1198 deleteAllMail(fromFolder);
1151 } 1199 }
1152} 1200}
1153 1201
1154void IMAPwrapper::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 1202void IMAPwrapper::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
1155{ 1203{
1156 if (targetWrapper != this) { 1204 if (targetWrapper != this) {
1157 // odebug << "Using generic" << oendl; 1205 // odebug << "Using generic" << oendl;
1158 AbstractMail::mvcpMail(mail,targetFolder,targetWrapper,moveit); 1206 AbstractMail::mvcpMail(mail,targetFolder,targetWrapper,moveit);
1159 return; 1207 return;
1160 } 1208 }
1161 mailimap_set *set = 0; 1209 mailimap_set *set = 0;
1162 login(); 1210 login();
1163 if (!m_imap) { 1211 if (!m_imap) {
1164 return; 1212 return;
1165 } 1213 }
1166 int err = selectMbox(mail->getMbox()); 1214 int err = selectMbox(mail->getMbox());
1167 if ( err != MAILIMAP_NO_ERROR ) { 1215 if ( err != MAILIMAP_NO_ERROR ) {
1168 return; 1216 return;
1169 } 1217 }
1170 set = mailimap_set_new_single(mail->getNumber()); 1218 set = mailimap_set_new_single(mail->getNumber());
1171 err = mailimap_copy(m_imap,set,targetFolder.latin1()); 1219 err = mailimap_copy(m_imap,set,targetFolder.latin1());
1172 mailimap_set_free( set ); 1220 mailimap_set_free( set );
1173 if ( err != MAILIMAP_NO_ERROR ) { 1221 if ( err != MAILIMAP_NO_ERROR ) {
1174 QString error_msg = tr("error copy mail: %1").arg(m_imap->imap_response); 1222 QString error_msg = tr("error copy mail: %1").arg(m_imap->imap_response);
diff --git a/kmicromail/libmailwrapper/imapwrapper.h b/kmicromail/libmailwrapper/imapwrapper.h
index e56605a..222fe95 100644
--- a/kmicromail/libmailwrapper/imapwrapper.h
+++ b/kmicromail/libmailwrapper/imapwrapper.h
@@ -1,80 +1,82 @@
1// CHANGED 2004-09-31 Lutz Rogowski
1#ifndef __IMAPWRAPPER 2#ifndef __IMAPWRAPPER
2#define __IMAPWRAPPER 3#define __IMAPWRAPPER
3 4
4#include <qlist.h> 5#include <qlist.h>
5#include "mailwrapper.h" 6#include "mailwrapper.h"
6#include "abstractmail.h" 7#include "abstractmail.h"
7#include <libetpan/clist.h> 8#include <libetpan/clist.h>
8 9
9struct mailimap; 10struct mailimap;
10struct mailimap_body; 11struct mailimap_body;
11struct mailimap_body_type_1part; 12struct mailimap_body_type_1part;
12struct mailimap_body_type_text; 13struct mailimap_body_type_text;
13struct mailimap_body_type_basic; 14struct mailimap_body_type_basic;
14struct mailimap_body_type_msg; 15struct mailimap_body_type_msg;
15struct mailimap_body_type_mpart; 16struct mailimap_body_type_mpart;
16struct mailimap_body_fields; 17struct mailimap_body_fields;
17struct mailimap_msg_att; 18struct mailimap_msg_att;
18class encodedString; 19class encodedString;
19 20
20class IMAPwrapper : public AbstractMail 21class IMAPwrapper : public AbstractMail
21{ 22{
22 Q_OBJECT 23 Q_OBJECT
23public: 24public:
24 IMAPwrapper( IMAPaccount *a ); 25 IMAPwrapper( IMAPaccount *a );
25 virtual ~IMAPwrapper(); 26 virtual ~IMAPwrapper();
26 virtual QValueList<Opie::Core::OSmartPointer<Folder> >* listFolders(); 27 virtual QValueList<Opie::Core::OSmartPointer<Folder> >* listFolders();
27 virtual void listMessages(const QString & mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> >&target ); 28 virtual void listMessages(const QString & mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> >&target , int sizeInKb = 0);
28 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX"); 29 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX");
29 30
30 virtual void deleteMail(const RecMailP&mail); 31 virtual void deleteMail(const RecMailP&mail);
32 void deleteMailList(const QValueList<RecMailP>&target);
31 virtual void answeredMail(const RecMailP&mail); 33 virtual void answeredMail(const RecMailP&mail);
32 virtual int deleteAllMail(const Opie::Core::OSmartPointer<Folder>&folder); 34 virtual int deleteAllMail(const Opie::Core::OSmartPointer<Folder>&folder);
33 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);
34 virtual void mvcpAllMails(const Opie::Core::OSmartPointer<Folder>&fromFolder, 36 virtual void mvcpAllMails(const Opie::Core::OSmartPointer<Folder>&fromFolder,
35 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit); 37 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit,int sizeInKb = 0);
36 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);
37 39
38 virtual RecBodyP fetchBody(const RecMailP&mail); 40 virtual RecBodyP fetchBody(const RecMailP&mail);
39 virtual QString fetchTextPart(const RecMailP&mail,const RecPartP&part); 41 virtual QString fetchTextPart(const RecMailP&mail,const RecPartP&part);
40 virtual encodedString* fetchDecodedPart(const RecMailP&mail,const RecPartP&part); 42 virtual encodedString* fetchDecodedPart(const RecMailP&mail,const RecPartP&part);
41 virtual encodedString* fetchRawPart(const RecMailP&mail,const RecPartP&part); 43 virtual encodedString* fetchRawPart(const RecMailP&mail,const RecPartP&part);
42 virtual encodedString* fetchRawBody(const RecMailP&mail); 44 virtual encodedString* fetchRawBody(const RecMailP&mail);
43 45
44 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,
45 const QString& delemiter="/",bool getsubfolder=false); 47 const QString& delemiter="/",bool getsubfolder=false);
46 virtual int deleteMbox(const Opie::Core::OSmartPointer<Folder>&folder); 48 virtual int deleteMbox(const Opie::Core::OSmartPointer<Folder>&folder);
47 49
48 static void imap_progress( size_t current, size_t maximum ); 50 static void imap_progress( size_t current, size_t maximum );
49 51
50 virtual void logout(); 52 virtual void logout();
51 virtual MAILLIB::ATYPE getType()const; 53 virtual MAILLIB::ATYPE getType()const;
52 virtual const QString&getName()const; 54 virtual const QString&getName()const;
53 55
54protected: 56protected:
55 RecMail*parse_list_result(mailimap_msg_att*); 57 RecMail*parse_list_result(mailimap_msg_att*);
56 void login(); 58 void login();
57 bool start_tls(bool force=true); 59 bool start_tls(bool force=true);
58 60
59 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="");
60 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);
61 int selectMbox(const QString&mbox); 63 int selectMbox(const QString&mbox);
62 64
63 void fillSinglePart(RecPartP&target_part,mailimap_body_type_1part*Description); 65 void fillSinglePart(RecPartP&target_part,mailimap_body_type_1part*Description);
64 void fillSingleTextPart(RecPartP&target_part,mailimap_body_type_text*which); 66 void fillSingleTextPart(RecPartP&target_part,mailimap_body_type_text*which);
65 void fillSingleBasicPart(RecPartP&target_part,mailimap_body_type_basic*which); 67 void fillSingleBasicPart(RecPartP&target_part,mailimap_body_type_basic*which);
66 void fillSingleMsgPart(RecPartP&target_part,mailimap_body_type_msg*which); 68 void fillSingleMsgPart(RecPartP&target_part,mailimap_body_type_msg*which);
67 void fillMultiPart(RecPartP&target_part,mailimap_body_type_mpart*which); 69 void fillMultiPart(RecPartP&target_part,mailimap_body_type_mpart*which);
68 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);
69 71
70 /* just helpers */ 72 /* just helpers */
71 static void fillBodyFields(RecPartP&target_part,mailimap_body_fields*which); 73 static void fillBodyFields(RecPartP&target_part,mailimap_body_fields*which);
72 static QStringList address_list_to_stringlist(clist*list); 74 static QStringList address_list_to_stringlist(clist*list);
73 75
74 76
75 IMAPaccount *account; 77 IMAPaccount *account;
76 mailimap *m_imap; 78 mailimap *m_imap;
77 QString m_Lastmbox; 79 QString m_Lastmbox;
78}; 80};
79 81
80#endif 82#endif
diff --git a/kmicromail/libmailwrapper/mhwrapper.cpp b/kmicromail/libmailwrapper/mhwrapper.cpp
index 7ef9b32..cbc52d9 100644
--- a/kmicromail/libmailwrapper/mhwrapper.cpp
+++ b/kmicromail/libmailwrapper/mhwrapper.cpp
@@ -1,125 +1,126 @@
1// CHANGED 2004-09-31 Lutz Rogowski
1#include "mhwrapper.h" 2#include "mhwrapper.h"
2#include "mailtypes.h" 3#include "mailtypes.h"
3#include "mailwrapper.h" 4#include "mailwrapper.h"
4#include <libetpan/libetpan.h> 5#include <libetpan/libetpan.h>
5#include <qdir.h> 6#include <qdir.h>
6#include <qmessagebox.h> 7#include <qmessagebox.h>
7#include <stdlib.h> 8#include <stdlib.h>
8#include <qpe/global.h> 9#include <qpe/global.h>
9#include <oprocess.h> 10#include <oprocess.h>
10//#include <opie2/odebug.h> 11//#include <opie2/odebug.h>
11 12
12using namespace Opie::Core; 13using namespace Opie::Core;
13MHwrapper::MHwrapper(const QString & mbox_dir,const QString&mbox_name) 14MHwrapper::MHwrapper(const QString & mbox_dir,const QString&mbox_name)
14 : Genericwrapper(),MHPath(mbox_dir),MHName(mbox_name) 15 : Genericwrapper(),MHPath(mbox_dir),MHName(mbox_name)
15{ 16{
16 if (MHPath.length()>0) { 17 if (MHPath.length()>0) {
17 if (MHPath[MHPath.length()-1]=='/') { 18 if (MHPath[MHPath.length()-1]=='/') {
18 MHPath=MHPath.left(MHPath.length()-1); 19 MHPath=MHPath.left(MHPath.length()-1);
19 } 20 }
20 //odebug << MHPath << oendl; 21 //odebug << MHPath << oendl;
21 QDir dir(MHPath); 22 QDir dir(MHPath);
22 if (!dir.exists()) { 23 if (!dir.exists()) {
23 dir.mkdir(MHPath); 24 dir.mkdir(MHPath);
24 } 25 }
25 init_storage(); 26 init_storage();
26 } 27 }
27} 28}
28 29
29void MHwrapper::init_storage() 30void MHwrapper::init_storage()
30{ 31{
31 int r; 32 int r;
32 QString pre = MHPath; 33 QString pre = MHPath;
33 if (!m_storage) { 34 if (!m_storage) {
34 m_storage = mailstorage_new(NULL); 35 m_storage = mailstorage_new(NULL);
35 r = mh_mailstorage_init(m_storage,(char*)pre.latin1(),0,0,0); 36 r = mh_mailstorage_init(m_storage,(char*)pre.latin1(),0,0,0);
36 if (r != MAIL_NO_ERROR) { 37 if (r != MAIL_NO_ERROR) {
37 qDebug(" error init storage "); 38 qDebug(" error init storage ");
38 mailstorage_free(m_storage); 39 mailstorage_free(m_storage);
39 m_storage = 0; 40 m_storage = 0;
40 return; 41 return;
41 } 42 }
42 } 43 }
43 r = mailstorage_connect(m_storage); 44 r = mailstorage_connect(m_storage);
44 if (r!=MAIL_NO_ERROR) { 45 if (r!=MAIL_NO_ERROR) {
45 qDebug("error connecting storage "); 46 qDebug("error connecting storage ");
46 mailstorage_free(m_storage); 47 mailstorage_free(m_storage);
47 m_storage = 0; 48 m_storage = 0;
48 } 49 }
49} 50}
50 51
51void MHwrapper::clean_storage() 52void MHwrapper::clean_storage()
52{ 53{
53 if (m_storage) { 54 if (m_storage) {
54 mailstorage_disconnect(m_storage); 55 mailstorage_disconnect(m_storage);
55 mailstorage_free(m_storage); 56 mailstorage_free(m_storage);
56 m_storage = 0; 57 m_storage = 0;
57 } 58 }
58} 59}
59 60
60MHwrapper::~MHwrapper() 61MHwrapper::~MHwrapper()
61{ 62{
62 clean_storage(); 63 clean_storage();
63} 64}
64 65
65void MHwrapper::listMessages(const QString & mailbox, QValueList<Opie::Core::OSmartPointer<RecMail> > &target ) 66void MHwrapper::listMessages(const QString & mailbox, QValueList<Opie::Core::OSmartPointer<RecMail> > &target, int maxSizeInKb )
66{ 67{
67 init_storage(); 68 init_storage();
68 if (!m_storage) { 69 if (!m_storage) {
69 return; 70 return;
70 } 71 }
71 QString f = buildPath(mailbox); 72 QString f = buildPath(mailbox);
72 int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1()); 73 int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1());
73 if (r!=MAIL_NO_ERROR) { 74 if (r!=MAIL_NO_ERROR) {
74 qDebug("listMessages: error selecting folder! "); 75 qDebug("listMessages: error selecting folder! ");
75 return; 76 return;
76 } 77 }
77 parseList(target,m_storage->sto_session,f); 78 parseList(target,m_storage->sto_session,f, false, maxSizeInKb );
78 Global::statusMessage(tr("Mailbox has %1 mail(s)").arg(target.count())); 79 Global::statusMessage(tr("Mailbox has %1 mail(s)").arg(target.count()));
79} 80}
80 81
81QValueList<Opie::Core::OSmartPointer<Folder> >* MHwrapper::listFolders() 82QValueList<Opie::Core::OSmartPointer<Folder> >* MHwrapper::listFolders()
82{ 83{
83 QValueList<Opie::Core::OSmartPointer<Folder> >* folders = new QValueList<Opie::Core::OSmartPointer<Folder> >(); 84 QValueList<Opie::Core::OSmartPointer<Folder> >* folders = new QValueList<Opie::Core::OSmartPointer<Folder> >();
84 /* this is needed! */ 85 /* this is needed! */
85 if (m_storage) mailstorage_disconnect(m_storage); 86 if (m_storage) mailstorage_disconnect(m_storage);
86 init_storage(); 87 init_storage();
87 if (!m_storage) { 88 if (!m_storage) {
88 return folders; 89 return folders;
89 } 90 }
90 mail_list*flist = 0; 91 mail_list*flist = 0;
91 clistcell*current=0; 92 clistcell*current=0;
92 int r = mailsession_list_folders(m_storage->sto_session,NULL,&flist); 93 int r = mailsession_list_folders(m_storage->sto_session,NULL,&flist);
93 if (r != MAIL_NO_ERROR || !flist) { 94 if (r != MAIL_NO_ERROR || !flist) {
94 qDebug("error getting folder list "); 95 qDebug("error getting folder list ");
95 return folders; 96 return folders;
96 } 97 }
97 for (current=clist_begin(flist->mb_list);current!=0;current=clist_next(current)) { 98 for (current=clist_begin(flist->mb_list);current!=0;current=clist_next(current)) {
98 QString t = (char*)current->data; 99 QString t = (char*)current->data;
99 t.replace(0,MHPath.length(),""); 100 t.replace(0,MHPath.length(),"");
100 folders->append(new MHFolder(t,MHPath)); 101 folders->append(new MHFolder(t,MHPath));
101 } 102 }
102 mail_list_free(flist); 103 mail_list_free(flist);
103 return folders; 104 return folders;
104} 105}
105 106
106void MHwrapper::deleteMail(const RecMailP&mail) 107void MHwrapper::deleteMail(const RecMailP&mail)
107{ 108{
108 init_storage(); 109 init_storage();
109 if (!m_storage) { 110 if (!m_storage) {
110 return; 111 return;
111 } 112 }
112 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail->getMbox().latin1()); 113 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail->getMbox().latin1());
113 if (r!=MAIL_NO_ERROR) { 114 if (r!=MAIL_NO_ERROR) {
114 qDebug("error selecting folder! "); 115 qDebug("error selecting folder! ");
115 return; 116 return;
116 } 117 }
117 r = mailsession_remove_message(m_storage->sto_session,mail->getNumber()); 118 r = mailsession_remove_message(m_storage->sto_session,mail->getNumber());
118 if (r != MAIL_NO_ERROR) { 119 if (r != MAIL_NO_ERROR) {
119 qDebug("error deleting mail "); 120 qDebug("error deleting mail ");
120 } 121 }
121} 122}
122 123
123void MHwrapper::answeredMail(const RecMailP&) 124void MHwrapper::answeredMail(const RecMailP&)
124{ 125{
125} 126}
diff --git a/kmicromail/libmailwrapper/mhwrapper.h b/kmicromail/libmailwrapper/mhwrapper.h
index 4310c84..550824d 100644
--- a/kmicromail/libmailwrapper/mhwrapper.h
+++ b/kmicromail/libmailwrapper/mhwrapper.h
@@ -1,60 +1,61 @@
1// CHANGED 2004-09-31 Lutz Rogowski
1#ifndef __MH_WRAPPER_H 2#ifndef __MH_WRAPPER_H
2#define __MH_WRAPPER_H 3#define __MH_WRAPPER_H
3 4
4#include "maildefines.h" 5#include "maildefines.h"
5 6
6#include "genericwrapper.h" 7#include "genericwrapper.h"
7#include <qstring.h> 8#include <qstring.h>
8 9
9class encodedString; 10class encodedString;
10struct mailmbox_folder; 11struct mailmbox_folder;
11namespace Opie {namespace Core {class OProcess;}} 12namespace Opie {namespace Core {class OProcess;}}
12 13
13class MHwrapper : public Genericwrapper 14class MHwrapper : public Genericwrapper
14{ 15{
15 Q_OBJECT 16 Q_OBJECT
16public: 17public:
17 MHwrapper(const QString & dir,const QString&name); 18 MHwrapper(const QString & dir,const QString&name);
18 virtual ~MHwrapper(); 19 virtual ~MHwrapper();
19 20
20 virtual void listMessages(const QString & mailbox, QValueList<Opie::Core::OSmartPointer<RecMail> > &target ); 21 virtual void listMessages(const QString & mailbox, QValueList<Opie::Core::OSmartPointer<RecMail> > &target, int maxSizeInKb = 0 );
21 virtual QValueList<Opie::Core::OSmartPointer<Folder> >* listFolders(); 22 virtual QValueList<Opie::Core::OSmartPointer<Folder> >* listFolders();
22 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX"); 23 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX");
23 24
24 virtual void deleteMail(const RecMailP&mail); 25 virtual void deleteMail(const RecMailP&mail);
25 virtual void answeredMail(const RecMailP&mail); 26 virtual void answeredMail(const RecMailP&mail);
26 virtual void mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit); 27 virtual void mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit);
27 virtual void mvcpAllMails(const Opie::Core::OSmartPointer<Folder>&fromFolder, 28 virtual void mvcpAllMails(const Opie::Core::OSmartPointer<Folder>&fromFolder,
28 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit); 29 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit);
29 30
30 virtual int createMbox(const QString&folder,const Opie::Core::OSmartPointer<Folder>&f=0, 31 virtual int createMbox(const QString&folder,const Opie::Core::OSmartPointer<Folder>&f=0,
31 const QString&d="",bool s=false); 32 const QString&d="",bool s=false);
32 virtual int deleteMbox(const Opie::Core::OSmartPointer<Folder>&); 33 virtual int deleteMbox(const Opie::Core::OSmartPointer<Folder>&);
33 34
34 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);
35 36
36 virtual RecBodyP fetchBody( const RecMailP &mail ); 37 virtual RecBodyP fetchBody( const RecMailP &mail );
37 static void mbox_progress( size_t current, size_t maximum ); 38 static void mbox_progress( size_t current, size_t maximum );
38 39
39 virtual encodedString* fetchRawBody(const RecMailP&mail); 40 virtual encodedString* fetchRawBody(const RecMailP&mail);
40 virtual void deleteMails(const QString & FolderName,const QValueList<Opie::Core::OSmartPointer<RecMail> > &target); 41 virtual void deleteMails(const QString & FolderName,const QValueList<Opie::Core::OSmartPointer<RecMail> > &target);
41 virtual int deleteAllMail(const Opie::Core::OSmartPointer<Folder>&); 42 virtual int deleteAllMail(const Opie::Core::OSmartPointer<Folder>&);
42 virtual MAILLIB::ATYPE getType()const; 43 virtual MAILLIB::ATYPE getType()const;
43 virtual const QString&getName()const; 44 virtual const QString&getName()const;
44 45
45public slots: 46public slots:
46 /* for deleting maildirs we are using a system call */ 47 /* for deleting maildirs we are using a system call */
47 virtual void oprocessStderr(Opie::Core::OProcess*, char *buffer, int ); 48 virtual void oprocessStderr(Opie::Core::OProcess*, char *buffer, int );
48 virtual void processEnded(Opie::Core::OProcess *); 49 virtual void processEnded(Opie::Core::OProcess *);
49protected: 50protected:
50 QString buildPath(const QString&p); 51 QString buildPath(const QString&p);
51 QString MHPath; 52 QString MHPath;
52 QString MHName; 53 QString MHName;
53 54
54 void init_storage(); 55 void init_storage();
55 void clean_storage(); 56 void clean_storage();
56 57
57 bool removeMboxfailed; 58 bool removeMboxfailed;
58}; 59};
59 60
60#endif 61#endif
diff --git a/kmicromail/libmailwrapper/nntpwrapper.cpp b/kmicromail/libmailwrapper/nntpwrapper.cpp
index daa128e..f5d7f16 100644
--- a/kmicromail/libmailwrapper/nntpwrapper.cpp
+++ b/kmicromail/libmailwrapper/nntpwrapper.cpp
@@ -1,48 +1,49 @@
1// CHANGED 2004-09-31 Lutz Rogowski
1#include "nntpwrapper.h" 2#include "nntpwrapper.h"
2#include "logindialog.h" 3#include "logindialog.h"
3#include "mailtypes.h" 4#include "mailtypes.h"
4 5
5#include <qfile.h> 6#include <qfile.h>
6 7
7#include <stdlib.h> 8#include <stdlib.h>
8 9
9#include <libetpan/libetpan.h> 10#include <libetpan/libetpan.h>
10 11
11 12
12 13
13#define HARD_MSG_SIZE_LIMIT 5242880 14#define HARD_MSG_SIZE_LIMIT 5242880
14 15
15using namespace Opie::Core; 16using namespace Opie::Core;
16NNTPwrapper::NNTPwrapper( NNTPaccount *a ) 17NNTPwrapper::NNTPwrapper( NNTPaccount *a )
17: Genericwrapper() { 18: Genericwrapper() {
18 account = a; 19 account = a;
19 m_nntp = NULL; 20 m_nntp = NULL;
20 msgTempName = a->getFileName()+"_msg_cache"; 21 msgTempName = a->getFileName()+"_msg_cache";
21 last_msg_id = 0; 22 last_msg_id = 0;
22} 23}
23 24
24NNTPwrapper::~NNTPwrapper() { 25NNTPwrapper::~NNTPwrapper() {
25 logout(); 26 logout();
26 QFile msg_cache(msgTempName); 27 QFile msg_cache(msgTempName);
27 if (msg_cache.exists()) { 28 if (msg_cache.exists()) {
28 msg_cache.remove(); 29 msg_cache.remove();
29 } 30 }
30} 31}
31 32
32void NNTPwrapper::nntp_progress( size_t current, size_t maximum ) { 33void NNTPwrapper::nntp_progress( size_t current, size_t maximum ) {
33 ; // << "NNTP: " << current << " of " << maximum << "" << oendl; 34 ; // << "NNTP: " << current << " of " << maximum << "" << oendl;
34} 35}
35 36
36 37
37RecBodyP NNTPwrapper::fetchBody( const RecMailP &mail ) { 38RecBodyP NNTPwrapper::fetchBody( const RecMailP &mail ) {
38 int err = NEWSNNTP_NO_ERROR; 39 int err = NEWSNNTP_NO_ERROR;
39 char *message = 0; 40 char *message = 0;
40 size_t length = 0; 41 size_t length = 0;
41 42
42 RecBodyP body = new RecBody(); 43 RecBodyP body = new RecBody();
43 login(); 44 login();
44 if ( !m_nntp ) { 45 if ( !m_nntp ) {
45 return body; 46 return body;
46 } 47 }
47 48
48 mailmessage * mailmsg; 49 mailmessage * mailmsg;
@@ -53,104 +54,104 @@ RecBodyP NNTPwrapper::fetchBody( const RecMailP &mail ) {
53 54
54 QFile msg_cache(msgTempName); 55 QFile msg_cache(msgTempName);
55 56
56 cleanMimeCache(); 57 cleanMimeCache();
57 58
58 if (mail->getNumber()!=last_msg_id) { 59 if (mail->getNumber()!=last_msg_id) {
59 if (msg_cache.exists()) { 60 if (msg_cache.exists()) {
60 msg_cache.remove(); 61 msg_cache.remove();
61 } 62 }
62 msg_cache.open(IO_ReadWrite|IO_Truncate); 63 msg_cache.open(IO_ReadWrite|IO_Truncate);
63 last_msg_id = mail->getNumber(); 64 last_msg_id = mail->getNumber();
64 err = mailsession_get_message(m_nntp->sto_session, mail->getNumber(), &mailmsg); 65 err = mailsession_get_message(m_nntp->sto_session, mail->getNumber(), &mailmsg);
65 err = mailmessage_fetch(mailmsg,&message,&length); 66 err = mailmessage_fetch(mailmsg,&message,&length);
66 msg_cache.writeBlock(message,length); 67 msg_cache.writeBlock(message,length);
67 } else { 68 } else {
68 QString msg=""; 69 QString msg="";
69 msg_cache.open(IO_ReadOnly); 70 msg_cache.open(IO_ReadOnly);
70 message = new char[4096]; 71 message = new char[4096];
71 memset(message,0,4096); 72 memset(message,0,4096);
72 while (msg_cache.readBlock(message,4095)>0) { 73 while (msg_cache.readBlock(message,4095)>0) {
73 msg+=message; 74 msg+=message;
74 memset(message,0,4096); 75 memset(message,0,4096);
75 } 76 }
76 delete message; 77 delete message;
77 message = (char*)malloc(msg.length()+1*sizeof(char)); 78 message = (char*)malloc(msg.length()+1*sizeof(char));
78 memset(message,0,msg.length()+1); 79 memset(message,0,msg.length()+1);
79 memcpy(message,msg.latin1(),msg.length()); 80 memcpy(message,msg.latin1(),msg.length());
80 /* transform to libetpan stuff */ 81 /* transform to libetpan stuff */
81 mailmsg = mailmessage_new(); 82 mailmsg = mailmessage_new();
82 mailmessage_init(mailmsg, NULL, data_message_driver, 0, strlen(message)); 83 mailmessage_init(mailmsg, NULL, data_message_driver, 0, strlen(message));
83 generic_message_t * msg_data; 84 generic_message_t * msg_data;
84 msg_data = (generic_message_t *)mailmsg->msg_data; 85 msg_data = (generic_message_t *)mailmsg->msg_data;
85 msg_data->msg_fetched = 1; 86 msg_data->msg_fetched = 1;
86 msg_data->msg_message = message; 87 msg_data->msg_message = message;
87 msg_data->msg_length = strlen(message); 88 msg_data->msg_length = strlen(message);
88 } 89 }
89 body = parseMail(mailmsg); 90 body = parseMail(mailmsg);
90 91
91 /* clean up */ 92 /* clean up */
92 if (mailmsg) 93 if (mailmsg)
93 mailmessage_free(mailmsg); 94 mailmessage_free(mailmsg);
94 if (message) 95 if (message)
95 free(message); 96 free(message);
96 97
97 return body; 98 return body;
98} 99}
99 100
100 101
101void NNTPwrapper::listMessages(const QString & which, QValueList<Opie::Core::OSmartPointer<RecMail> > &target ) 102void NNTPwrapper::listMessages(const QString & which, QValueList<Opie::Core::OSmartPointer<RecMail> > &target, int maxSizeInKb)
102{ 103{
103 login(); 104 login();
104 if (!m_nntp) 105 if (!m_nntp)
105 return; 106 return;
106 uint32_t res_messages,res_recent,res_unseen; 107 uint32_t res_messages,res_recent,res_unseen;
107 mailsession_status_folder(m_nntp->sto_session,(char*)which.latin1(),&res_messages,&res_recent,&res_unseen); 108 mailsession_status_folder(m_nntp->sto_session,(char*)which.latin1(),&res_messages,&res_recent,&res_unseen);
108 parseList(target,m_nntp->sto_session,which,true); 109 parseList(target,m_nntp->sto_session,which,true, maxSizeInKb);
109} 110}
110 111
111void NNTPwrapper::login() 112void NNTPwrapper::login()
112{ 113{
113 if (account->getOffline()) 114 if (account->getOffline())
114 return; 115 return;
115 /* we'll hold the line */ 116 /* we'll hold the line */
116 if ( m_nntp != NULL ) 117 if ( m_nntp != NULL )
117 return; 118 return;
118 119
119 const char *server, *user, *pass; 120 const char *server, *user, *pass;
120 QString User,Pass; 121 QString User,Pass;
121 uint16_t port; 122 uint16_t port;
122 int err = NEWSNNTP_NO_ERROR; 123 int err = NEWSNNTP_NO_ERROR;
123 124
124 server = account->getServer().latin1(); 125 server = account->getServer().latin1();
125 port = account->getPort().toUInt(); 126 port = account->getPort().toUInt();
126 127
127 user = pass = 0; 128 user = pass = 0;
128 129
129 if ( ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) && account->getLogin() ) { 130 if ( ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) && account->getLogin() ) {
130 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true ); 131 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true );
131 login.show(); 132 login.show();
132 if ( QDialog::Accepted == login.exec() ) { 133 if ( QDialog::Accepted == login.exec() ) {
133 // ok 134 // ok
134 User = login.getUser().latin1(); 135 User = login.getUser().latin1();
135 Pass = login.getPassword().latin1(); 136 Pass = login.getPassword().latin1();
136 } else { 137 } else {
137 // cancel 138 // cancel
138 ; // << "NNTP: Login canceled" << oendl; 139 ; // << "NNTP: Login canceled" << oendl;
139 return; 140 return;
140 } 141 }
141 } else { 142 } else {
142 User = account->getUser().latin1(); 143 User = account->getUser().latin1();
143 Pass = account->getPassword().latin1(); 144 Pass = account->getPassword().latin1();
144 } 145 }
145 146
146 if (User.isEmpty()) { 147 if (User.isEmpty()) {
147 user=0; 148 user=0;
148 pass = 0; 149 pass = 0;
149 } else { 150 } else {
150 user=User.latin1(); 151 user=User.latin1();
151 pass=Pass.latin1(); 152 pass=Pass.latin1();
152 } 153 }
153 // bool ssl = account->getSSL(); 154 // bool ssl = account->getSSL();
154 155
155 m_nntp=mailstorage_new(NULL); 156 m_nntp=mailstorage_new(NULL);
156 157
diff --git a/kmicromail/libmailwrapper/nntpwrapper.h b/kmicromail/libmailwrapper/nntpwrapper.h
index 2fb82f2..5d4e5ce 100644
--- a/kmicromail/libmailwrapper/nntpwrapper.h
+++ b/kmicromail/libmailwrapper/nntpwrapper.h
@@ -1,48 +1,49 @@
1// CHANGED 2004-09-31 Lutz Rogowski
1#ifndef __NNTPWRAPPER 2#ifndef __NNTPWRAPPER
2#define __NNTPWRAPPER 3#define __NNTPWRAPPER
3 4
4#include "mailwrapper.h" 5#include "mailwrapper.h"
5#include "genericwrapper.h" 6#include "genericwrapper.h"
6#include <qstring.h> 7#include <qstring.h>
7#include <libetpan/clist.h> 8#include <libetpan/clist.h>
8 9
9class encodedString; 10class encodedString;
10struct mailstorage; 11struct mailstorage;
11struct mailfolder; 12struct mailfolder;
12 13
13class NNTPwrapper : public Genericwrapper 14class NNTPwrapper : public Genericwrapper
14{ 15{
15 16
16 Q_OBJECT 17 Q_OBJECT
17 18
18public: 19public:
19 NNTPwrapper( NNTPaccount *a ); 20 NNTPwrapper( NNTPaccount *a );
20 virtual ~NNTPwrapper(); 21 virtual ~NNTPwrapper();
21 22
22 /* mailbox will be ignored */ 23 /* mailbox will be ignored */
23 virtual void listMessages(const QString & mailbox, QValueList<Opie::Core::OSmartPointer<RecMail> > &target ); 24 virtual void listMessages(const QString & mailbox, QValueList<Opie::Core::OSmartPointer<RecMail> > &target, int maxSizeInKb = 0 );
24 /* should only get the subscribed one */ 25 /* should only get the subscribed one */
25 virtual QValueList<Opie::Core::OSmartPointer<Folder> >* listFolders(); 26 virtual QValueList<Opie::Core::OSmartPointer<Folder> >* listFolders();
26 /* mailbox will be ignored */ 27 /* mailbox will be ignored */
27 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX"); 28 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX");
28 QStringList listAllNewsgroups(const QString&mask = QString::null); 29 QStringList listAllNewsgroups(const QString&mask = QString::null);
29 virtual void deleteMail(const RecMailP&mail); 30 virtual void deleteMail(const RecMailP&mail);
30 virtual void answeredMail(const RecMailP&mail); 31 virtual void answeredMail(const RecMailP&mail);
31 virtual int deleteAllMail(const Opie::Core::OSmartPointer<Folder>&); 32 virtual int deleteAllMail(const Opie::Core::OSmartPointer<Folder>&);
32 33
33 virtual RecBodyP fetchBody( const RecMailP &mail ); 34 virtual RecBodyP fetchBody( const RecMailP &mail );
34 virtual encodedString* fetchRawBody(const RecMailP&mail); 35 virtual encodedString* fetchRawBody(const RecMailP&mail);
35 virtual void logout(); 36 virtual void logout();
36 virtual MAILLIB::ATYPE getType()const; 37 virtual MAILLIB::ATYPE getType()const;
37 virtual const QString&getName()const; 38 virtual const QString&getName()const;
38 static void nntp_progress( size_t current, size_t maximum ); 39 static void nntp_progress( size_t current, size_t maximum );
39 40
40protected: 41protected:
41 void login(); 42 void login();
42 NNTPaccount *account; 43 NNTPaccount *account;
43 mailstorage* m_nntp; 44 mailstorage* m_nntp;
44 45
45 46
46}; 47};
47 48
48#endif 49#endif
diff --git a/kmicromail/libmailwrapper/pop3wrapper.cpp b/kmicromail/libmailwrapper/pop3wrapper.cpp
index e5d083a..7a84b30 100644
--- a/kmicromail/libmailwrapper/pop3wrapper.cpp
+++ b/kmicromail/libmailwrapper/pop3wrapper.cpp
@@ -1,48 +1,49 @@
1// CHANGED 2004-09-31 Lutz Rogowski
1#include <stdlib.h> 2#include <stdlib.h>
2#include "pop3wrapper.h" 3#include "pop3wrapper.h"
3#include "mailtypes.h" 4#include "mailtypes.h"
4#include "logindialog.h" 5#include "logindialog.h"
5#include <libetpan/libetpan.h> 6#include <libetpan/libetpan.h>
6 7
7 8
8#include <qpe/global.h> 9#include <qpe/global.h>
9#include <qfile.h> 10#include <qfile.h>
10 11
11/* we don't fetch messages larger than 5 MB */ 12/* we don't fetch messages larger than 5 MB */
12#define HARD_MSG_SIZE_LIMIT 5242880 13#define HARD_MSG_SIZE_LIMIT 5242880
13 14
14using namespace Opie::Core; 15using namespace Opie::Core;
15POP3wrapper::POP3wrapper( POP3account *a ) 16POP3wrapper::POP3wrapper( POP3account *a )
16: Genericwrapper() { 17: Genericwrapper() {
17 account = a; 18 account = a;
18 m_pop3 = NULL; 19 m_pop3 = NULL;
19 msgTempName = a->getFileName()+"_msg_cache"; 20 msgTempName = a->getFileName()+"_msg_cache";
20 last_msg_id = 0; 21 last_msg_id = 0;
21} 22}
22 23
23POP3wrapper::~POP3wrapper() { 24POP3wrapper::~POP3wrapper() {
24 logout(); 25 logout();
25 QFile msg_cache(msgTempName); 26 QFile msg_cache(msgTempName);
26 if (msg_cache.exists()) { 27 if (msg_cache.exists()) {
27 msg_cache.remove(); 28 msg_cache.remove();
28 } 29 }
29} 30}
30 31
31void POP3wrapper::pop3_progress( size_t current, size_t maximum ) { 32void POP3wrapper::pop3_progress( size_t current, size_t maximum ) {
32 ; // odebug << "POP3: " << current << " of " << maximum << "" << oendl; 33 ; // odebug << "POP3: " << current << " of " << maximum << "" << oendl;
33} 34}
34 35
35RecBodyP POP3wrapper::fetchBody( const RecMailP &mail ) { 36RecBodyP POP3wrapper::fetchBody( const RecMailP &mail ) {
36 int err = MAILPOP3_NO_ERROR; 37 int err = MAILPOP3_NO_ERROR;
37 char *message = 0; 38 char *message = 0;
38 size_t length = 0; 39 size_t length = 0;
39 40
40 RecBodyP body = new RecBody(); 41 RecBodyP body = new RecBody();
41 42
42 login(); 43 login();
43 if ( !m_pop3 ) { 44 if ( !m_pop3 ) {
44 return body; 45 return body;
45 } 46 }
46 47
47 mailmessage * mailmsg; 48 mailmessage * mailmsg;
48 if (mail->Msgsize()>HARD_MSG_SIZE_LIMIT) { 49 if (mail->Msgsize()>HARD_MSG_SIZE_LIMIT) {
@@ -51,192 +52,208 @@ RecBodyP POP3wrapper::fetchBody( const RecMailP &mail ) {
51 } 52 }
52 53
53 QFile msg_cache(msgTempName); 54 QFile msg_cache(msgTempName);
54 55
55 cleanMimeCache(); 56 cleanMimeCache();
56 57
57 if (mail->getNumber()!=last_msg_id) { 58 if (mail->getNumber()!=last_msg_id) {
58 if (msg_cache.exists()) { 59 if (msg_cache.exists()) {
59 msg_cache.remove(); 60 msg_cache.remove();
60 } 61 }
61 msg_cache.open(IO_ReadWrite|IO_Truncate); 62 msg_cache.open(IO_ReadWrite|IO_Truncate);
62 last_msg_id = mail->getNumber(); 63 last_msg_id = mail->getNumber();
63 err = mailsession_get_message(m_pop3->sto_session, mail->getNumber(), &mailmsg); 64 err = mailsession_get_message(m_pop3->sto_session, mail->getNumber(), &mailmsg);
64 err = mailmessage_fetch(mailmsg,&message,&length); 65 err = mailmessage_fetch(mailmsg,&message,&length);
65 msg_cache.writeBlock(message,length); 66 msg_cache.writeBlock(message,length);
66 } else { 67 } else {
67 QString msg=""; 68 QString msg="";
68 msg_cache.open(IO_ReadOnly); 69 msg_cache.open(IO_ReadOnly);
69 message = new char[4096]; 70 message = new char[4096];
70 memset(message,0,4096); 71 memset(message,0,4096);
71 while (msg_cache.readBlock(message,4095)>0) { 72 while (msg_cache.readBlock(message,4095)>0) {
72 msg+=message; 73 msg+=message;
73 memset(message,0,4096); 74 memset(message,0,4096);
74 } 75 }
75 delete message; 76 delete message;
76 message = (char*)malloc(msg.length()+1*sizeof(char)); 77 message = (char*)malloc(msg.length()+1*sizeof(char));
77 memset(message,0,msg.length()+1); 78 memset(message,0,msg.length()+1);
78 memcpy(message,msg.latin1(),msg.length()); 79 memcpy(message,msg.latin1(),msg.length());
79 /* transform to libetpan stuff */ 80 /* transform to libetpan stuff */
80 mailmsg = mailmessage_new(); 81 mailmsg = mailmessage_new();
81 mailmessage_init(mailmsg, NULL, data_message_driver, 0, strlen(message)); 82 mailmessage_init(mailmsg, NULL, data_message_driver, 0, strlen(message));
82 generic_message_t * msg_data; 83 generic_message_t * msg_data;
83 msg_data = (generic_message_t *)mailmsg->msg_data; 84 msg_data = (generic_message_t *)mailmsg->msg_data;
84 msg_data->msg_fetched = 1; 85 msg_data->msg_fetched = 1;
85 msg_data->msg_message = message; 86 msg_data->msg_message = message;
86 msg_data->msg_length = strlen(message); 87 msg_data->msg_length = strlen(message);
87 } 88 }
88 body = parseMail(mailmsg); 89 body = parseMail(mailmsg);
89 90
90 /* clean up */ 91 /* clean up */
91 if (mailmsg) 92 if (mailmsg)
92 mailmessage_free(mailmsg); 93 mailmessage_free(mailmsg);
93 if (message) 94 if (message)
94 free(message); 95 free(message);
95 96
96 return body; 97 return body;
97} 98}
98 99
99void POP3wrapper::listMessages(const QString &, QValueList<Opie::Core::OSmartPointer<RecMail> > &target ) 100void POP3wrapper::listMessages(const QString &, QValueList<Opie::Core::OSmartPointer<RecMail> > &target, int maxSizeInKb )
100{ 101{
101 login(); 102 login();
102 if (!m_pop3) 103 if (!m_pop3)
103 return; 104 return;
104 uint32_t res_messages,res_recent,res_unseen; 105 uint32_t res_messages,res_recent,res_unseen;
105 mailsession_status_folder(m_pop3->sto_session,"INBOX",&res_messages,&res_recent,&res_unseen); 106 mailsession_status_folder(m_pop3->sto_session,"INBOX",&res_messages,&res_recent,&res_unseen);
106 parseList(target,m_pop3->sto_session,"INBOX"); 107 parseList(target,m_pop3->sto_session,"INBOX", false, maxSizeInKb);
107 Global::statusMessage( tr("Mailbox contains %1 mail(s)").arg(res_messages)); 108 Global::statusMessage( tr("Mailbox contains %1 mail(s)").arg(res_messages));
108} 109}
109 110
110void POP3wrapper::login() 111void POP3wrapper::login()
111{ 112{
112 if (account->getOffline()) 113 if (account->getOffline())
113 return; 114 return;
114 /* we'll hold the line */ 115 /* we'll hold the line */
115 if ( m_pop3 != NULL ) 116 if ( m_pop3 != NULL )
116 return; 117 return;
117 118
118 const char *server, *user, *pass; 119 const char *server, *user, *pass;
119 uint16_t port; 120 uint16_t port;
120 int err = MAILPOP3_NO_ERROR; 121 int err = MAILPOP3_NO_ERROR;
121 122
122 server = account->getServer().latin1(); 123 server = account->getServer().latin1();
123 port = account->getPort().toUInt(); 124 port = account->getPort().toUInt();
124 125
125 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) { 126 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) {
126 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true ); 127 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true );
127 login.show(); 128 login.show();
128 if ( QDialog::Accepted == login.exec() ) { 129 if ( QDialog::Accepted == login.exec() ) {
129 // ok 130 // ok
130 user = login.getUser().latin1(); 131 user = login.getUser().latin1();
131 pass = login.getPassword().latin1(); 132 pass = login.getPassword().latin1();
132 } else { 133 } else {
133 // cancel 134 // cancel
134 ; // odebug << "POP3: Login canceled" << oendl; 135 ; // odebug << "POP3: Login canceled" << oendl;
135 return; 136 return;
136 } 137 }
137 } else { 138 } else {
138 user = account->getUser().latin1(); 139 user = account->getUser().latin1();
139 pass = account->getPassword().latin1(); 140 pass = account->getPassword().latin1();
140 } 141 }
141 142
142 // bool ssl = account->getSSL(); 143 // bool ssl = account->getSSL();
143 144
144 m_pop3=mailstorage_new(NULL); 145 m_pop3=mailstorage_new(NULL);
145 146
146 int conntypeset = account->ConnectionType(); 147 int conntypeset = account->ConnectionType();
147 int conntype = 0; 148 int conntype = 0;
148 if ( conntypeset == 3 ) { 149 if ( conntypeset == 3 ) {
149 conntype = CONNECTION_TYPE_COMMAND; 150 conntype = CONNECTION_TYPE_COMMAND;
150 } else if ( conntypeset == 2 ) { 151 } else if ( conntypeset == 2 ) {
151 conntype = CONNECTION_TYPE_TLS; 152 conntype = CONNECTION_TYPE_TLS;
152 } else if ( conntypeset == 1 ) { 153 } else if ( conntypeset == 1 ) {
153 conntype = CONNECTION_TYPE_STARTTLS; 154 conntype = CONNECTION_TYPE_STARTTLS;
154 } else if ( conntypeset == 0 ) { 155 } else if ( conntypeset == 0 ) {
155 conntype = CONNECTION_TYPE_TRY_STARTTLS; 156 conntype = CONNECTION_TYPE_TRY_STARTTLS;
156 } 157 }
157 158
158 //(ssl?CONNECTION_TYPE_TLS:CONNECTION_TYPE_PLAIN); 159 //(ssl?CONNECTION_TYPE_TLS:CONNECTION_TYPE_PLAIN);
159 160
160 pop3_mailstorage_init(m_pop3,(char*)server, port, NULL, conntype, POP3_AUTH_TYPE_PLAIN, 161 pop3_mailstorage_init(m_pop3,(char*)server, port, NULL, conntype, POP3_AUTH_TYPE_PLAIN,
161 (char*)user,(char*)pass,0,0,0); 162 (char*)user,(char*)pass,0,0,0);
162 163
163 164
164 err = mailstorage_connect(m_pop3); 165 err = mailstorage_connect(m_pop3);
165 if (err != MAIL_NO_ERROR) { 166 if (err != MAIL_NO_ERROR) {
166 ; // odebug << QString( "FEHLERNUMMER %1" ).arg( err ) << oendl; 167 ; // odebug << QString( "FEHLERNUMMER %1" ).arg( err ) << oendl;
167 Global::statusMessage(tr("Error initializing folder")); 168 Global::statusMessage(tr("Error initializing folder"));
168 mailstorage_free(m_pop3); 169 mailstorage_free(m_pop3);
169 m_pop3 = 0; 170 m_pop3 = 0;
170 } else { 171 } else {
171 mailsession * session = m_pop3->sto_session; 172 mailsession * session = m_pop3->sto_session;
172 mailpop3 * mail = ( ( pop3_session_state_data * )session->sess_data )->pop3_session; 173 mailpop3 * mail = ( ( pop3_session_state_data * )session->sess_data )->pop3_session;
173 if (mail) { 174 if (mail) {
174 mail->pop3_progr_fun = &pop3_progress; 175 mail->pop3_progr_fun = &pop3_progress;
175 } 176 }
176 } 177 }
177} 178}
178 179
179void POP3wrapper::logout() 180void POP3wrapper::logout()
180{ 181{
181 if ( m_pop3 == NULL ) 182 if ( m_pop3 == NULL )
182 return; 183 return;
183 mailstorage_free(m_pop3); 184 mailstorage_free(m_pop3);
184 m_pop3 = 0; 185 m_pop3 = 0;
185} 186}
186 187
187 188
188QValueList<Opie::Core::OSmartPointer<Folder> >* POP3wrapper::listFolders() { 189QValueList<Opie::Core::OSmartPointer<Folder> >* POP3wrapper::listFolders() {
189 QValueList<Opie::Core::OSmartPointer<Folder> >* folders = new QValueList<FolderP>(); 190 QValueList<Opie::Core::OSmartPointer<Folder> >* folders = new QValueList<FolderP>();
190 FolderP inb=new Folder("INBOX","/"); 191 FolderP inb=new Folder("INBOX","/");
191 folders->append(inb); 192 folders->append(inb);
192 return folders; 193 return folders;
193} 194}
194 195
196void POP3wrapper::deleteMailList(QValueList<RecMailP>&target)
197{
198 login();
199 if (!m_pop3)
200 return;
201 int iii = 0;
202 int count = target.count();
203 while (iii < count ) {
204 RecMailP mail = (*target.at( iii ));
205 int err = mailsession_remove_message(m_pop3->sto_session,mail->getNumber());
206 if (err != MAIL_NO_ERROR) {
207 Global::statusMessage(tr("error deleting mail"));
208 }
209 ++iii;
210 }
211}
195void POP3wrapper::deleteMail(const RecMailP&mail) { 212void POP3wrapper::deleteMail(const RecMailP&mail) {
196 login(); 213 login();
197 if (!m_pop3) 214 if (!m_pop3)
198 return; 215 return;
199 int err = mailsession_remove_message(m_pop3->sto_session,mail->getNumber()); 216 int err = mailsession_remove_message(m_pop3->sto_session,mail->getNumber());
200 if (err != MAIL_NO_ERROR) { 217 if (err != MAIL_NO_ERROR) {
201 Global::statusMessage(tr("error deleting mail")); 218 Global::statusMessage(tr("error deleting mail"));
202 } 219 }
203} 220}
204 221
205void POP3wrapper::answeredMail(const RecMailP&) {} 222void POP3wrapper::answeredMail(const RecMailP&) {}
206 223
207int POP3wrapper::deleteAllMail(const FolderP&) { 224int POP3wrapper::deleteAllMail(const FolderP&) {
208 login(); 225 login();
209 if (!m_pop3) 226 if (!m_pop3)
210 return 0; 227 return 0;
211 int res = 1; 228 int res = 1;
212 229
213 uint32_t result = 0; 230 uint32_t result = 0;
214 int err = mailsession_messages_number(m_pop3->sto_session,NULL,&result); 231 int err = mailsession_messages_number(m_pop3->sto_session,NULL,&result);
215 if (err != MAIL_NO_ERROR) { 232 if (err != MAIL_NO_ERROR) {
216 Global::statusMessage(tr("Error getting folder info")); 233 Global::statusMessage(tr("Error getting folder info"));
217 return 0; 234 return 0;
218 } 235 }
219 for (unsigned int i = 0; i < result; ++i) { 236 for (unsigned int i = 0; i < result; ++i) {
220 err = mailsession_remove_message(m_pop3->sto_session,i+1); 237 err = mailsession_remove_message(m_pop3->sto_session,i+1);
221 if (err != MAIL_NO_ERROR) { 238 if (err != MAIL_NO_ERROR) {
222 Global::statusMessage(tr("Error deleting mail %1").arg(i+1)); 239 Global::statusMessage(tr("Error deleting mail %1").arg(i+1));
223 res=0; 240 res=0;
224 } 241 }
225 break; 242 break;
226 } 243 }
227 return res; 244 return res;
228} 245}
229 246
230void POP3wrapper::statusFolder(folderStat&target_stat,const QString&) { 247void POP3wrapper::statusFolder(folderStat&target_stat,const QString&) {
231 login(); 248 login();
232 target_stat.message_count = 0; 249 target_stat.message_count = 0;
233 target_stat.message_unseen = 0; 250 target_stat.message_unseen = 0;
234 target_stat.message_recent = 0; 251 target_stat.message_recent = 0;
235 if (!m_pop3) 252 if (!m_pop3)
236 return; 253 return;
237 int r = mailsession_status_folder(m_pop3->sto_session,0,&target_stat.message_count, 254 int r = mailsession_status_folder(m_pop3->sto_session,0,&target_stat.message_count,
238 &target_stat.message_recent,&target_stat.message_unseen); 255 &target_stat.message_recent,&target_stat.message_unseen);
239 if (r != MAIL_NO_ERROR) { 256 if (r != MAIL_NO_ERROR) {
240 ; // odebug << "error getting folter status." << oendl; 257 ; // odebug << "error getting folter status." << oendl;
241 } 258 }
242} 259}
diff --git a/kmicromail/libmailwrapper/pop3wrapper.h b/kmicromail/libmailwrapper/pop3wrapper.h
index 5101fa5..ee754a4 100644
--- a/kmicromail/libmailwrapper/pop3wrapper.h
+++ b/kmicromail/libmailwrapper/pop3wrapper.h
@@ -1,42 +1,44 @@
1// CHANGED 2004-09-31 Lutz Rogowski
1#ifndef __POP3WRAPPER 2#ifndef __POP3WRAPPER
2#define __POP3WRAPPER 3#define __POP3WRAPPER
3 4
4#include "mailwrapper.h" 5#include "mailwrapper.h"
5#include "genericwrapper.h" 6#include "genericwrapper.h"
6#include <qstring.h> 7#include <qstring.h>
7 8
8class encodedString; 9class encodedString;
9struct mailstorage; 10struct mailstorage;
10struct mailfolder; 11struct mailfolder;
11 12
12class POP3wrapper : public Genericwrapper 13class POP3wrapper : public Genericwrapper
13{ 14{
14 Q_OBJECT 15 Q_OBJECT
15 16
16public: 17public:
17 POP3wrapper( POP3account *a ); 18 POP3wrapper( POP3account *a );
18 virtual ~POP3wrapper(); 19 virtual ~POP3wrapper();
19 /* mailbox will be ignored */ 20 /* mailbox will be ignored */
20 virtual void listMessages(const QString & mailbox, QValueList<Opie::Core::OSmartPointer<RecMail> > &target ); 21 virtual void listMessages(const QString & mailbox, QValueList<Opie::Core::OSmartPointer<RecMail> > &target, int maxSizeInKb = 0 );
21 virtual QValueList<Opie::Core::OSmartPointer<Folder> >* listFolders(); 22 virtual QValueList<Opie::Core::OSmartPointer<Folder> >* listFolders();
22 /* mailbox will be ignored */ 23 /* mailbox will be ignored */
23 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX"); 24 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX");
24 25
25 virtual void deleteMail(const RecMailP&mail); 26 virtual void deleteMail(const RecMailP&mail);
26 virtual void answeredMail(const RecMailP&mail); 27 virtual void answeredMail(const RecMailP&mail);
28 virtual void deleteMailList(QValueList<RecMailP>&target);
27 virtual int deleteAllMail(const Opie::Core::OSmartPointer<Folder>&); 29 virtual int deleteAllMail(const Opie::Core::OSmartPointer<Folder>&);
28 30
29 virtual RecBodyP fetchBody( const RecMailP &mail ); 31 virtual RecBodyP fetchBody( const RecMailP &mail );
30 virtual encodedString* fetchRawBody(const RecMailP&mail); 32 virtual encodedString* fetchRawBody(const RecMailP&mail);
31 virtual void logout(); 33 virtual void logout();
32 virtual MAILLIB::ATYPE getType()const; 34 virtual MAILLIB::ATYPE getType()const;
33 virtual const QString&getName()const; 35 virtual const QString&getName()const;
34 static void pop3_progress( size_t current, size_t maximum ); 36 static void pop3_progress( size_t current, size_t maximum );
35 37
36protected: 38protected:
37 void login(); 39 void login();
38 POP3account *account; 40 POP3account *account;
39 mailstorage*m_pop3; 41 mailstorage*m_pop3;
40}; 42};
41 43
42#endif 44#endif