summaryrefslogtreecommitdiffabout
path: root/kmicromail
Unidiff
Diffstat (limited to 'kmicromail') (more/less context) (ignore whitespace changes)
-rw-r--r--kmicromail/libmailwrapper/imapwrapper.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/kmicromail/libmailwrapper/imapwrapper.cpp b/kmicromail/libmailwrapper/imapwrapper.cpp
index da7065f..b890725 100644
--- a/kmicromail/libmailwrapper/imapwrapper.cpp
+++ b/kmicromail/libmailwrapper/imapwrapper.cpp
@@ -1,1359 +1,1361 @@
1// CHANGED 2004-09-31 Lutz Rogowski 1// CHANGED 2004-09-31 Lutz Rogowski
2#include <stdlib.h> 2#include <stdlib.h>
3#include <libetpan/libetpan.h> 3#include <libetpan/libetpan.h>
4#include <qpe/global.h> 4#include <qpe/global.h>
5#include <qapplication.h> 5#include <qapplication.h>
6#include "imapwrapper.h" 6#include "imapwrapper.h"
7#include "mailtypes.h" 7#include "mailtypes.h"
8#include "logindialog.h" 8#include "logindialog.h"
9#include <qprogressbar.h> 9#include <qprogressbar.h>
10#include "genericwrapper.h" 10#include "genericwrapper.h"
11#include <kglobal.h> 11#include <kglobal.h>
12 12
13using namespace Opie::Core; 13using namespace Opie::Core;
14int IMAPwrapper::mMax = 0; 14int IMAPwrapper::mMax = 0;
15int IMAPwrapper::mCurrent = 0; 15int IMAPwrapper::mCurrent = 0;
16 16
17IMAPwrapper::IMAPwrapper( IMAPaccount *a ) 17IMAPwrapper::IMAPwrapper( IMAPaccount *a )
18 : AbstractMail() 18 : AbstractMail()
19{ 19{
20 account = a; 20 account = a;
21 m_imap = 0; 21 m_imap = 0;
22 m_Lastmbox = ""; 22 m_Lastmbox = "";
23 mCurrent = 0; 23 mCurrent = 0;
24 mMax = 0; 24 mMax = 0;
25} 25}
26 26
27IMAPwrapper::~IMAPwrapper() 27IMAPwrapper::~IMAPwrapper()
28{ 28{
29 logout(); 29 logout();
30} 30}
31 31
32/* to avoid to often select statements in loops etc. 32/* to avoid to often select statements in loops etc.
33 we trust that we are logged in and connection is established!*/ 33 we trust that we are logged in and connection is established!*/
34int IMAPwrapper::selectMbox(const QString&mbox) 34int IMAPwrapper::selectMbox(const QString&mbox)
35{ 35{
36 if (mbox == m_Lastmbox) { 36 if (mbox == m_Lastmbox) {
37 return MAILIMAP_NO_ERROR; 37 return MAILIMAP_NO_ERROR;
38 } 38 }
39 int err = mailimap_select( m_imap, (char*)mbox.latin1()); 39 int err = mailimap_select( m_imap, (char*)mbox.latin1());
40 if ( err != MAILIMAP_NO_ERROR ) { 40 if ( err != MAILIMAP_NO_ERROR ) {
41 m_Lastmbox = ""; 41 m_Lastmbox = "";
42 return err; 42 return err;
43 } 43 }
44 m_Lastmbox = mbox; 44 m_Lastmbox = mbox;
45 return err; 45 return err;
46} 46}
47 47
48void IMAPwrapper::imap_progress( size_t current, size_t maximum ) 48void IMAPwrapper::imap_progress( size_t current, size_t maximum )
49{ 49{
50 qApp->processEvents();
51 return;
50 //qDebug("imap progress %d of %d ",current,maximum ); 52 //qDebug("imap progress %d of %d ",current,maximum );
51 //Global::statusMessage(i18n("Downloading message %1 of %2").arg( current).arg(maximum)); 53 //Global::statusMessage(i18n("Downloading message %1 of %2").arg( current).arg(maximum));
52 //qApp->processEvents() 54 //qApp->processEvents()
53 static unsigned int last = 0; 55 static unsigned int last = 0;
54 if ( last != current ) 56 if ( last != current )
55 IMAPwrapper::progress(); 57 IMAPwrapper::progress();
56 last = current; 58 last = current;
57} 59}
58void IMAPwrapper::progress( QString m ) 60void IMAPwrapper::progress( QString m )
59{ 61{
60 62
61 static QString mProgrMess; 63 static QString mProgrMess;
62 if ( m != QString::null ) { 64 if ( m != QString::null ) {
63 mProgrMess = m; 65 mProgrMess = m;
64 mCurrent = 1; 66 mCurrent = 1;
65 return; 67 return;
66 } 68 }
67 QString mess; 69 QString mess;
68 //qDebug("progress "); 70 //qDebug("progress ");
69 if ( mMax ) mess = mProgrMess +i18n(" message %1 of %2").arg( mCurrent++).arg(mMax); 71 if ( mMax ) mess = mProgrMess +i18n(" message %1 of %2").arg( mCurrent++).arg(mMax);
70 else mess = mProgrMess +i18n(" message %1").arg( mCurrent++); 72 else mess = mProgrMess +i18n(" message %1").arg( mCurrent++);
71 Global::statusMessage(mess); 73 Global::statusMessage(mess);
72 //qDebug("Progress %s %s", mess.latin1(), m.latin1()); 74 //qDebug("Progress %s %s", mess.latin1(), m.latin1());
73 qApp->processEvents(); 75 qApp->processEvents();
74} 76}
75bool IMAPwrapper::start_tls(bool force_tls) 77bool IMAPwrapper::start_tls(bool force_tls)
76{ 78{
77 int err; 79 int err;
78 bool try_tls = force_tls; 80 bool try_tls = force_tls;
79 mailimap_capability_data * cap_data = 0; 81 mailimap_capability_data * cap_data = 0;
80 82
81 err = mailimap_capability(m_imap,&cap_data); 83 err = mailimap_capability(m_imap,&cap_data);
82 if (err != MAILIMAP_NO_ERROR) { 84 if (err != MAILIMAP_NO_ERROR) {
83 Global::statusMessage("error getting capabilities!"); 85 Global::statusMessage("error getting capabilities!");
84 return false; 86 return false;
85 } 87 }
86 clistiter * cur; 88 clistiter * cur;
87 for(cur = clist_begin(cap_data->cap_list) ; cur != NULL;cur = clist_next(cur)) { 89 for(cur = clist_begin(cap_data->cap_list) ; cur != NULL;cur = clist_next(cur)) {
88 struct mailimap_capability * cap; 90 struct mailimap_capability * cap;
89 cap = (struct mailimap_capability *)clist_content(cur); 91 cap = (struct mailimap_capability *)clist_content(cur);
90 if (cap->cap_type == MAILIMAP_CAPABILITY_NAME) { 92 if (cap->cap_type == MAILIMAP_CAPABILITY_NAME) {
91 if (strcasecmp(cap->cap_data.cap_name, "STARTTLS") == 0) { 93 if (strcasecmp(cap->cap_data.cap_name, "STARTTLS") == 0) {
92 try_tls = true; 94 try_tls = true;
93 break; 95 break;
94 } 96 }
95 } 97 }
96 } 98 }
97 if (cap_data) { 99 if (cap_data) {
98 mailimap_capability_data_free(cap_data); 100 mailimap_capability_data_free(cap_data);
99 } 101 }
100 if (try_tls) { 102 if (try_tls) {
101 err = mailimap_starttls(m_imap); 103 err = mailimap_starttls(m_imap);
102 if (err != MAILIMAP_NO_ERROR && force_tls) { 104 if (err != MAILIMAP_NO_ERROR && force_tls) {
103 Global::statusMessage(i18n("Server has no TLS support!")); 105 Global::statusMessage(i18n("Server has no TLS support!"));
104 try_tls = false; 106 try_tls = false;
105 } else { 107 } else {
106 mailstream_low * low; 108 mailstream_low * low;
107 mailstream_low * new_low; 109 mailstream_low * new_low;
108 low = mailstream_get_low(m_imap->imap_stream); 110 low = mailstream_get_low(m_imap->imap_stream);
109 if (!low) { 111 if (!low) {
110 try_tls = false; 112 try_tls = false;
111 } else { 113 } else {
112 int fd = mailstream_low_get_fd(low); 114 int fd = mailstream_low_get_fd(low);
113 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) { 115 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) {
114 mailstream_low_free(low); 116 mailstream_low_free(low);
115 mailstream_set_low(m_imap->imap_stream, new_low); 117 mailstream_set_low(m_imap->imap_stream, new_low);
116 } else { 118 } else {
117 try_tls = false; 119 try_tls = false;
118 } 120 }
119 } 121 }
120 } 122 }
121 } 123 }
122 return try_tls; 124 return try_tls;
123} 125}
124 126
125void IMAPwrapper::login() 127void IMAPwrapper::login()
126{ 128{
127 QString server, user, pass; 129 QString server, user, pass;
128 uint16_t port; 130 uint16_t port;
129 int err = MAILIMAP_NO_ERROR; 131 int err = MAILIMAP_NO_ERROR;
130 132
131 if (account->getOffline()) return; 133 if (account->getOffline()) return;
132 /* we are connected this moment */ 134 /* we are connected this moment */
133 /* TODO: setup a timer holding the line or if connection closed - delete the value */ 135 /* TODO: setup a timer holding the line or if connection closed - delete the value */
134 if (m_imap) { 136 if (m_imap) {
135 err = mailimap_noop(m_imap); 137 err = mailimap_noop(m_imap);
136 if (err!=MAILIMAP_NO_ERROR) { 138 if (err!=MAILIMAP_NO_ERROR) {
137 logout(); 139 logout();
138 } else { 140 } else {
139 mailstream_flush(m_imap->imap_stream); 141 mailstream_flush(m_imap->imap_stream);
140 return; 142 return;
141 } 143 }
142 } 144 }
143 server = account->getServer(); 145 server = account->getServer();
144 port = account->getPort().toUInt(); 146 port = account->getPort().toUInt();
145 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) { 147 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) {
146 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true ); 148 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true );
147 login.show(); 149 login.show();
148 if ( QDialog::Accepted == login.exec() ) { 150 if ( QDialog::Accepted == login.exec() ) {
149 // ok 151 // ok
150 user = login.getUser(); 152 user = login.getUser();
151 pass = login.getPassword(); 153 pass = login.getPassword();
152 } else { 154 } else {
153 // cancel 155 // cancel
154 return; 156 return;
155 } 157 }
156 } else { 158 } else {
157 user = account->getUser(); 159 user = account->getUser();
158 pass = account->getPassword(); 160 pass = account->getPassword();
159 } 161 }
160 162
161 m_imap = mailimap_new( 20, &imap_progress ); 163 m_imap = mailimap_new( 20, &imap_progress );
162 164
163 /* connect */ 165 /* connect */
164 bool ssl = false; 166 bool ssl = false;
165 bool try_tls = false; 167 bool try_tls = false;
166 bool force_tls = false; 168 bool force_tls = false;
167 169
168 if ( account->ConnectionType() == 2 ) { 170 if ( account->ConnectionType() == 2 ) {
169 ssl = true; 171 ssl = true;
170 } 172 }
171 if (account->ConnectionType()==1) { 173 if (account->ConnectionType()==1) {
172 force_tls = true; 174 force_tls = true;
173 } 175 }
174 176
175 if ( ssl ) { 177 if ( ssl ) {
176 qDebug("using ssl "); 178 qDebug("using ssl ");
177 err = mailimap_ssl_connect( m_imap, (char*)server.latin1(), port ); 179 err = mailimap_ssl_connect( m_imap, (char*)server.latin1(), port );
178 qDebug("back "); 180 qDebug("back ");
179 } else { 181 } else {
180 err = mailimap_socket_connect( m_imap, (char*)server.latin1(), port ); 182 err = mailimap_socket_connect( m_imap, (char*)server.latin1(), port );
181 } 183 }
182 184
183 if ( err != MAILIMAP_NO_ERROR && 185 if ( err != MAILIMAP_NO_ERROR &&
184 err != MAILIMAP_NO_ERROR_AUTHENTICATED && 186 err != MAILIMAP_NO_ERROR_AUTHENTICATED &&
185 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { 187 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) {
186 QString failure = ""; 188 QString failure = "";
187 if (err == MAILIMAP_ERROR_CONNECTION_REFUSED) { 189 if (err == MAILIMAP_ERROR_CONNECTION_REFUSED) {
188 failure="Connection refused"; 190 failure="Connection refused";
189 } else { 191 } else {
190 failure="Unknown failure"; 192 failure="Unknown failure";
191 } 193 }
192 Global::statusMessage(i18n("error connecting imap server: %1").arg(failure)); 194 Global::statusMessage(i18n("error connecting imap server: %1").arg(failure));
193 mailimap_free( m_imap ); 195 mailimap_free( m_imap );
194 m_imap = 0; 196 m_imap = 0;
195 return; 197 return;
196 } 198 }
197 199
198 if (!ssl) { 200 if (!ssl) {
199 try_tls = start_tls(force_tls); 201 try_tls = start_tls(force_tls);
200 } 202 }
201 203
202 bool ok = true; 204 bool ok = true;
203 if (force_tls && !try_tls) { 205 if (force_tls && !try_tls) {
204 Global::statusMessage(i18n("Server has no TLS support!")); 206 Global::statusMessage(i18n("Server has no TLS support!"));
205 ok = false; 207 ok = false;
206 } 208 }
207 209
208 210
209 /* login */ 211 /* login */
210 212
211 if (ok) { 213 if (ok) {
212 err = mailimap_login_simple( m_imap, (char*)user.latin1(), (char*)pass.latin1() ); 214 err = mailimap_login_simple( m_imap, (char*)user.latin1(), (char*)pass.latin1() );
213 if ( err != MAILIMAP_NO_ERROR ) { 215 if ( err != MAILIMAP_NO_ERROR ) {
214 Global::statusMessage(i18n("error logging in imap server: %1").arg(m_imap->imap_response)); 216 Global::statusMessage(i18n("error logging in imap server: %1").arg(m_imap->imap_response));
215 ok = false; 217 ok = false;
216 } 218 }
217 } 219 }
218 if (!ok) { 220 if (!ok) {
219 err = mailimap_close( m_imap ); 221 err = mailimap_close( m_imap );
220 mailimap_free( m_imap ); 222 mailimap_free( m_imap );
221 m_imap = 0; 223 m_imap = 0;
222 } 224 }
223} 225}
224 226
225void IMAPwrapper::logout() 227void IMAPwrapper::logout()
226{ 228{
227 int err = MAILIMAP_NO_ERROR; 229 int err = MAILIMAP_NO_ERROR;
228 if (!m_imap) return; 230 if (!m_imap) return;
229 err = mailimap_logout( m_imap ); 231 err = mailimap_logout( m_imap );
230 err = mailimap_close( m_imap ); 232 err = mailimap_close( m_imap );
231 mailimap_free( m_imap ); 233 mailimap_free( m_imap );
232 m_imap = 0; 234 m_imap = 0;
233 m_Lastmbox = ""; 235 m_Lastmbox = "";
234} 236}
235 237
236void IMAPwrapper::listMessages(const QString&mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> > &target , int maxSizeInKb) 238void IMAPwrapper::listMessages(const QString&mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> > &target , int maxSizeInKb)
237{ 239{
238 240
239 int tryAgain = 1; 241 int tryAgain = 1;
240 while ( tryAgain >= 0 ) { 242 while ( tryAgain >= 0 ) {
241 int err = MAILIMAP_NO_ERROR; 243 int err = MAILIMAP_NO_ERROR;
242 clist *result = 0; 244 clist *result = 0;
243 clistcell *current; 245 clistcell *current;
244 mailimap_fetch_type *fetchType = 0; 246 mailimap_fetch_type *fetchType = 0;
245 mailimap_set *set = 0; 247 mailimap_set *set = 0;
246 248
247 login(); 249 login();
248 if (!m_imap) { 250 if (!m_imap) {
249 return; 251 return;
250 } 252 }
251 /* select mailbox READONLY for operations */ 253 /* select mailbox READONLY for operations */
252 err = selectMbox(mailbox); 254 err = selectMbox(mailbox);
253 if ( err != MAILIMAP_NO_ERROR ) { 255 if ( err != MAILIMAP_NO_ERROR ) {
254 return; 256 return;
255 } 257 }
256 258
257 int last = m_imap->imap_selection_info->sel_exists; 259 int last = m_imap->imap_selection_info->sel_exists;
258 260
259 if (last == 0) { 261 if (last == 0) {
260 Global::statusMessage(i18n("Mailbox has no mails")); 262 Global::statusMessage(i18n("Mailbox has no mails"));
261 return; 263 return;
262 } else { 264 } else {
263 } 265 }
264 progress( i18n("Fetch ")); 266 progress( i18n("Fetch "));
265 mMax = last; 267 mMax = last;
266 //qDebug("last %d ", last); 268 //qDebug("last %d ", last);
267 Global::statusMessage(i18n("Fetching header list")); 269 Global::statusMessage(i18n("Fetching header list"));
268 qApp->processEvents(); 270 qApp->processEvents();
269 /* the range has to start at 1!!! not with 0!!!! */ 271 /* the range has to start at 1!!! not with 0!!!! */
270 //LR the access to web.de imap server is no working with value 1 272 //LR the access to web.de imap server is no working with value 1
271 //qDebug("interval %d - %d ", tryAgain, last-1+tryAgain ); 273 //qDebug("interval %d - %d ", tryAgain, last-1+tryAgain );
272 set = mailimap_set_new_interval( tryAgain, last ); 274 set = mailimap_set_new_interval( tryAgain, last );
273 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 275 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
274 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope()); 276 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope());
275 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags()); 277 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags());
276 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate()); 278 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate());
277 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size()); 279 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size());
278 280
279 err = mailimap_fetch( m_imap, set, fetchType, &result ); 281 err = mailimap_fetch( m_imap, set, fetchType, &result );
280 mailimap_set_free( set ); 282 mailimap_set_free( set );
281 mailimap_fetch_type_free( fetchType ); 283 mailimap_fetch_type_free( fetchType );
282 284
283 QString date,subject,from; 285 QString date,subject,from;
284 286
285 if ( err == MAILIMAP_NO_ERROR ) { 287 if ( err == MAILIMAP_NO_ERROR ) {
286 tryAgain = -1; 288 tryAgain = -1;
287 mailimap_msg_att * msg_att; 289 mailimap_msg_att * msg_att;
288 int i = 0; 290 int i = 0;
289 for (current = clist_begin(result); current != 0; current=clist_next(current)) { 291 for (current = clist_begin(result); current != 0; current=clist_next(current)) {
290 ++i; 292 ++i;
291 //qDebug("iii %d ",i); 293 //qDebug("iii %d ",i);
292 msg_att = (mailimap_msg_att*)current->data; 294 msg_att = (mailimap_msg_att*)current->data;
293 RecMail*m = parse_list_result(msg_att); 295 RecMail*m = parse_list_result(msg_att);
294 if (m) { 296 if (m) {
295 if ( maxSizeInKb == 0 || m->Msgsize()<=(unsigned int ) maxSizeInKb*1024 ) { 297 if ( maxSizeInKb == 0 || m->Msgsize()<=(unsigned int ) maxSizeInKb*1024 ) {
296 m->setNumber(i); 298 m->setNumber(i);
297 m->setMbox(mailbox); 299 m->setMbox(mailbox);
298 m->setWrapper(this); 300 m->setWrapper(this);
299 target.append(m); 301 target.append(m);
300 } 302 }
301 } 303 }
302 } 304 }
303 Global::statusMessage(i18n("Mailbox has %1 mails").arg(target.count())); 305 Global::statusMessage(i18n("Mailbox has %1 mails").arg(target.count()));
304 } else { 306 } else {
305 --tryAgain; 307 --tryAgain;
306 --tryAgain;//disabled tryagain by adding this line 308 --tryAgain;//disabled tryagain by adding this line
307 if ( tryAgain < 0 ) 309 if ( tryAgain < 0 )
308 Global::statusMessage(i18n("Error fetching headers: %1").arg(m_imap->imap_response)); 310 Global::statusMessage(i18n("Error fetching headers: %1").arg(m_imap->imap_response));
309 else 311 else
310 qDebug("try again... "); 312 qDebug("try again... ");
311 } 313 }
312 314
313 if (result) mailimap_fetch_list_free(result); 315 if (result) mailimap_fetch_list_free(result);
314 } 316 }
315} 317}
316 318
317QValueList<Opie::Core::OSmartPointer<Folder> >* IMAPwrapper::listFolders() 319QValueList<Opie::Core::OSmartPointer<Folder> >* IMAPwrapper::listFolders()
318{ 320{
319 const char *path, *mask; 321 const char *path, *mask;
320 int err = MAILIMAP_NO_ERROR; 322 int err = MAILIMAP_NO_ERROR;
321 clist *result = 0; 323 clist *result = 0;
322 clistcell *current = 0; 324 clistcell *current = 0;
323 clistcell*cur_flag = 0; 325 clistcell*cur_flag = 0;
324 mailimap_mbx_list_flags*bflags = 0; 326 mailimap_mbx_list_flags*bflags = 0;
325 327
326 QValueList<FolderP>* folders = new QValueList<FolderP>(); 328 QValueList<FolderP>* folders = new QValueList<FolderP>();
327 login(); 329 login();
328 if (!m_imap) { 330 if (!m_imap) {
329 return folders; 331 return folders;
330 } 332 }
331 333
332/* 334/*
333 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 335 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
334 * We must not forget to filter them out in next loop! 336 * We must not forget to filter them out in next loop!
335 * it seems like ugly code. and yes - it is ugly code. but the best way. 337 * it seems like ugly code. and yes - it is ugly code. but the best way.
336 */ 338 */
337 Global::statusMessage(i18n("Fetching folder list")); 339 Global::statusMessage(i18n("Fetching folder list"));
338 qApp->processEvents(); 340 qApp->processEvents();
339 QString temp; 341 QString temp;
340 mask = "INBOX" ; 342 mask = "INBOX" ;
341 mailimap_mailbox_list *list; 343 mailimap_mailbox_list *list;
342 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); 344 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result );
343 QString del; 345 QString del;
344 bool selectable = true; 346 bool selectable = true;
345 bool no_inferiors = false; 347 bool no_inferiors = false;
346 if ( err == MAILIMAP_NO_ERROR ) { 348 if ( err == MAILIMAP_NO_ERROR ) {
347 current = result->first; 349 current = result->first;
348 for ( int i = result->count; i > 0; i-- ) { 350 for ( int i = result->count; i > 0; i-- ) {
349 list = (mailimap_mailbox_list *) current->data; 351 list = (mailimap_mailbox_list *) current->data;
350 // it is better use the deep copy mechanism of qt itself 352 // it is better use the deep copy mechanism of qt itself
351 // instead of using strdup! 353 // instead of using strdup!
352 temp = list->mb_name; 354 temp = list->mb_name;
353 del = list->mb_delimiter; 355 del = list->mb_delimiter;
354 current = current->next; 356 current = current->next;
355 if ( (bflags = list->mb_flag) ) { 357 if ( (bflags = list->mb_flag) ) {
356 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& 358 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&&
357 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); 359 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT);
358 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) { 360 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) {
359 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) { 361 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) {
360 no_inferiors = true; 362 no_inferiors = true;
361 } 363 }
362 } 364 }
363 } 365 }
364 folders->append( new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix())); 366 folders->append( new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix()));
365 } 367 }
366 } else { 368 } else {
367 qDebug("error fetching folders: "); 369 qDebug("error fetching folders: ");
368 370
369 } 371 }
370 mailimap_list_result_free( result ); 372 mailimap_list_result_free( result );
371 373
372/* 374/*
373 * second stage - get the other then inbox folders 375 * second stage - get the other then inbox folders
374 */ 376 */
375 mask = "*" ; 377 mask = "*" ;
376 path = account->getPrefix().latin1(); 378 path = account->getPrefix().latin1();
377 if (!path) path = ""; 379 if (!path) path = "";
378 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result ); 380 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result );
379 if ( err == MAILIMAP_NO_ERROR ) { 381 if ( err == MAILIMAP_NO_ERROR ) {
380 current = result->first; 382 current = result->first;
381 for ( current=clist_begin(result);current!=NULL;current=clist_next(current)) { 383 for ( current=clist_begin(result);current!=NULL;current=clist_next(current)) {
382 no_inferiors = false; 384 no_inferiors = false;
383 list = (mailimap_mailbox_list *) current->data; 385 list = (mailimap_mailbox_list *) current->data;
384 // it is better use the deep copy mechanism of qt itself 386 // it is better use the deep copy mechanism of qt itself
385 // instead of using strdup! 387 // instead of using strdup!
386 temp = list->mb_name; 388 temp = list->mb_name;
387 if (temp.lower()=="inbox") 389 if (temp.lower()=="inbox")
388 continue; 390 continue;
389 if (temp.lower()==account->getPrefix().lower()) 391 if (temp.lower()==account->getPrefix().lower())
390 continue; 392 continue;
391 if ( (bflags = list->mb_flag) ) { 393 if ( (bflags = list->mb_flag) ) {
392 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& 394 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&&
393 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); 395 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT);
394 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) { 396 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) {
395 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) { 397 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) {
396 no_inferiors = true; 398 no_inferiors = true;
397 } 399 }
398 } 400 }
399 } 401 }
400 del = list->mb_delimiter; 402 del = list->mb_delimiter;
401 folders->append(new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix())); 403 folders->append(new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix()));
402 } 404 }
403 } else { 405 } else {
404 qDebug("error fetching folders "); 406 qDebug("error fetching folders ");
405 407
406 } 408 }
407 if (result) mailimap_list_result_free( result ); 409 if (result) mailimap_list_result_free( result );
408 return folders; 410 return folders;
409} 411}
410 412
411RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att) 413RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
412{ 414{
413 RecMail * m = 0; 415 RecMail * m = 0;
414 mailimap_msg_att_item *item=0; 416 mailimap_msg_att_item *item=0;
415 clistcell *current,*c,*cf; 417 clistcell *current,*c,*cf;
416 mailimap_msg_att_dynamic*flist; 418 mailimap_msg_att_dynamic*flist;
417 mailimap_flag_fetch*cflag; 419 mailimap_flag_fetch*cflag;
418 int size = 0; 420 int size = 0;
419 QBitArray mFlags(7); 421 QBitArray mFlags(7);
420 QStringList addresslist; 422 QStringList addresslist;
421 423
422 if (!m_att) { 424 if (!m_att) {
423 return m; 425 return m;
424 } 426 }
425 m = new RecMail(); 427 m = new RecMail();
426 for (c = clist_begin(m_att->att_list); c!=NULL;c=clist_next(c) ) { 428 for (c = clist_begin(m_att->att_list); c!=NULL;c=clist_next(c) ) {
427 current = c; 429 current = c;
428 size = 0; 430 size = 0;
429 item = (mailimap_msg_att_item*)current->data; 431 item = (mailimap_msg_att_item*)current->data;
430 if ( !item ) 432 if ( !item )
431 continue; 433 continue;
432 if (item->att_type!=MAILIMAP_MSG_ATT_ITEM_STATIC) { 434 if (item->att_type!=MAILIMAP_MSG_ATT_ITEM_STATIC) {
433 flist = (mailimap_msg_att_dynamic*)item->att_data.att_dyn; 435 flist = (mailimap_msg_att_dynamic*)item->att_data.att_dyn;
434 if (!flist || !flist->att_list) { 436 if (!flist || !flist->att_list) {
435 continue; 437 continue;
436 } 438 }
437 cf = flist->att_list->first; 439 cf = flist->att_list->first;
438 if( ! cf ) 440 if( ! cf )
439 for (cf = clist_begin(flist->att_list); cf!=NULL; cf = clist_next(cf)) { 441 for (cf = clist_begin(flist->att_list); cf!=NULL; cf = clist_next(cf)) {
440 cflag = (mailimap_flag_fetch*)cf->data; 442 cflag = (mailimap_flag_fetch*)cf->data;
441 if( ! cflag ) 443 if( ! cflag )
442 qDebug("imap:not cflag "); 444 qDebug("imap:not cflag ");
443 if (cflag->fl_type==MAILIMAP_FLAG_FETCH_OTHER && cflag->fl_flag!=0) { 445 if (cflag->fl_type==MAILIMAP_FLAG_FETCH_OTHER && cflag->fl_flag!=0) {
444 switch (cflag->fl_flag->fl_type) { 446 switch (cflag->fl_flag->fl_type) {
445 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */ 447 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */
446 mFlags.setBit(FLAG_ANSWERED); 448 mFlags.setBit(FLAG_ANSWERED);
447 break; 449 break;
448 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */ 450 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */
449 mFlags.setBit(FLAG_FLAGGED); 451 mFlags.setBit(FLAG_FLAGGED);
450 break; 452 break;
451 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */ 453 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */
452 mFlags.setBit(FLAG_DELETED); 454 mFlags.setBit(FLAG_DELETED);
453 break; 455 break;
454 case MAILIMAP_FLAG_SEEN: /* \Seen flag */ 456 case MAILIMAP_FLAG_SEEN: /* \Seen flag */
455 mFlags.setBit(FLAG_SEEN); 457 mFlags.setBit(FLAG_SEEN);
456 break; 458 break;
457 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */ 459 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */
458 mFlags.setBit(FLAG_DRAFT); 460 mFlags.setBit(FLAG_DRAFT);
459 break; 461 break;
460 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */ 462 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */
461 break; 463 break;
462 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */ 464 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */
463 break; 465 break;
464 default: 466 default:
465 break; 467 break;
466 } 468 }
467 } else if (cflag->fl_type==MAILIMAP_FLAG_FETCH_RECENT) { 469 } else if (cflag->fl_type==MAILIMAP_FLAG_FETCH_RECENT) {
468 mFlags.setBit(FLAG_RECENT); 470 mFlags.setBit(FLAG_RECENT);
469 } 471 }
470 } 472 }
471 continue; 473 continue;
472 } 474 }
473 if ( item->att_data.att_static == NULL ) 475 if ( item->att_data.att_static == NULL )
474 continue; 476 continue;
475 if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_ENVELOPE) { 477 if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_ENVELOPE) {
476 mailimap_envelope * head = item->att_data.att_static->att_data.att_env; 478 mailimap_envelope * head = item->att_data.att_static->att_data.att_env;
477 if ( head == NULL ) 479 if ( head == NULL )
478 continue; 480 continue;
479 if ( head->env_date != NULL ) { 481 if ( head->env_date != NULL ) {
480 m->setDate(head->env_date); 482 m->setDate(head->env_date);
481 //struct mailimf_date_time result; 483 //struct mailimf_date_time result;
482 struct mailimf_date_time* date;// = &result; 484 struct mailimf_date_time* date;// = &result;
483 struct mailimf_date_time **re = &date; 485 struct mailimf_date_time **re = &date;
484 size_t length = m->getDate().length(); 486 size_t length = m->getDate().length();
485 size_t index = 0; 487 size_t index = 0;
486 if ( mailimf_date_time_parse(head->env_date, length,&index, re ) == MAILIMF_NO_ERROR ) { 488 if ( mailimf_date_time_parse(head->env_date, length,&index, re ) == MAILIMF_NO_ERROR ) {
487 QDateTime dt = Genericwrapper::parseDateTime( date ); 489 QDateTime dt = Genericwrapper::parseDateTime( date );
488 QString ret; 490 QString ret;
489 if ( dt.date() == QDate::currentDate () ) 491 if ( dt.date() == QDate::currentDate () )
490 ret = KGlobal::locale()->formatTime( dt.time(),true); 492 ret = KGlobal::locale()->formatTime( dt.time(),true);
491 else { 493 else {
492 ret = KGlobal::locale()->formatDateTime( dt,true,true); 494 ret = KGlobal::locale()->formatDateTime( dt,true,true);
493 } 495 }
494 m->setDate( ret ); 496 m->setDate( ret );
495 char tmp[20]; 497 char tmp[20];
496 snprintf( tmp, 20, "%04i-%02i-%02i %02i:%02i:%02i", 498 snprintf( tmp, 20, "%04i-%02i-%02i %02i:%02i:%02i",
497 dt.date().year(),dt.date().month(), dt.date().day(), dt.time().hour(), dt.time().minute(), dt.time().second() ); 499 dt.date().year(),dt.date().month(), dt.date().day(), dt.time().hour(), dt.time().minute(), dt.time().second() );
498 //qDebug("%d iso %s %s ", date->dt_zone, tmp, head->env_date); 500 //qDebug("%d iso %s %s ", date->dt_zone, tmp, head->env_date);
499 m->setIsoDate( QString( tmp ) ); 501 m->setIsoDate( QString( tmp ) );
500 mailimf_date_time_free ( date ); 502 mailimf_date_time_free ( date );
501 } else { 503 } else {
502 m->setIsoDate(head->env_date); 504 m->setIsoDate(head->env_date);
503 } 505 }
504 } 506 }
505 if ( head->env_subject != NULL ) 507 if ( head->env_subject != NULL )
506 m->setSubject(convert_String((const char*)head->env_subject)); 508 m->setSubject(convert_String((const char*)head->env_subject));
507 //m->setSubject(head->env_subject); 509 //m->setSubject(head->env_subject);
508 if (head->env_from!=NULL) { 510 if (head->env_from!=NULL) {
509 addresslist = address_list_to_stringlist(head->env_from->frm_list); 511 addresslist = address_list_to_stringlist(head->env_from->frm_list);
510 if (addresslist.count()) { 512 if (addresslist.count()) {
511 m->setFrom(addresslist.first()); 513 m->setFrom(addresslist.first());
512 } 514 }
513 } 515 }
514 if (head->env_to!=NULL) { 516 if (head->env_to!=NULL) {
515 addresslist = address_list_to_stringlist(head->env_to->to_list); 517 addresslist = address_list_to_stringlist(head->env_to->to_list);
516 m->setTo(addresslist); 518 m->setTo(addresslist);
517 } 519 }
518 if (head->env_cc!=NULL) { 520 if (head->env_cc!=NULL) {
519 addresslist = address_list_to_stringlist(head->env_cc->cc_list); 521 addresslist = address_list_to_stringlist(head->env_cc->cc_list);
520 m->setCC(addresslist); 522 m->setCC(addresslist);
521 } 523 }
522 if (head->env_bcc!=NULL) { 524 if (head->env_bcc!=NULL) {
523 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list); 525 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list);
524 m->setBcc(addresslist); 526 m->setBcc(addresslist);
525 } 527 }
526 /* reply to address, eg. email. */ 528 /* reply to address, eg. email. */
527 if (head->env_reply_to!=NULL) { 529 if (head->env_reply_to!=NULL) {
528 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list); 530 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list);
529 if (addresslist.count()) { 531 if (addresslist.count()) {
530 m->setReplyto(addresslist.first()); 532 m->setReplyto(addresslist.first());
531 } 533 }
532 } 534 }
533 if (head->env_in_reply_to!=NULL) { 535 if (head->env_in_reply_to!=NULL) {
534 QString h(head->env_in_reply_to); 536 QString h(head->env_in_reply_to);
535 while (h.length()>0 && h[0]=='<') { 537 while (h.length()>0 && h[0]=='<') {
536 h.remove(0,1); 538 h.remove(0,1);
537 } 539 }
538 while (h.length()>0 && h[h.length()-1]=='>') { 540 while (h.length()>0 && h[h.length()-1]=='>') {
539 h.remove(h.length()-1,1); 541 h.remove(h.length()-1,1);
540 } 542 }
541 if (h.length()>0) { 543 if (h.length()>0) {
542 m->setInreply(QStringList(h)); 544 m->setInreply(QStringList(h));
543 } 545 }
544 } 546 }
545 if (head->env_message_id != NULL) { 547 if (head->env_message_id != NULL) {
546 m->setMsgid(QString(head->env_message_id)); 548 m->setMsgid(QString(head->env_message_id));
547 } 549 }
548 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) { 550 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) {
549#if 0 551#if 0
550 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date; 552 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date;
551 QDateTime da(QDate(d->dt_year,d->dt_month,d->dt_day),QTime(d->dt_hour,d->dt_min,d->dt_sec)); 553 QDateTime da(QDate(d->dt_year,d->dt_month,d->dt_day),QTime(d->dt_hour,d->dt_min,d->dt_sec));
552 qDebug("time %s ",da.toString().latin1() ); 554 qDebug("time %s ",da.toString().latin1() );
553#endif 555#endif
554 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_RFC822_SIZE) { 556 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_RFC822_SIZE) {
555 size = item->att_data.att_static->att_data.att_rfc822_size; 557 size = item->att_data.att_static->att_data.att_rfc822_size;
556 } 558 }
557 } 559 }
558 /* msg is already deleted */ 560 /* msg is already deleted */
559 if (mFlags.testBit(FLAG_DELETED) && m) { 561 if (mFlags.testBit(FLAG_DELETED) && m) {
560 delete m; 562 delete m;
561 m = 0; 563 m = 0;
562 } 564 }
563 if (m) { 565 if (m) {
564 m->setFlags(mFlags); 566 m->setFlags(mFlags);
565 m->setMsgsize(size); 567 m->setMsgsize(size);
566 } 568 }
567 return m; 569 return m;
568} 570}
569 571
570RecBodyP IMAPwrapper::fetchBody(const RecMailP&mail) 572RecBodyP IMAPwrapper::fetchBody(const RecMailP&mail)
571{ 573{
572 RecBodyP body = new RecBody(); 574 RecBodyP body = new RecBody();
573 const char *mb; 575 const char *mb;
574 int err = MAILIMAP_NO_ERROR; 576 int err = MAILIMAP_NO_ERROR;
575 clist *result = 0; 577 clist *result = 0;
576 clistcell *current; 578 clistcell *current;
577 mailimap_fetch_att *fetchAtt = 0; 579 mailimap_fetch_att *fetchAtt = 0;
578 mailimap_fetch_type *fetchType = 0; 580 mailimap_fetch_type *fetchType = 0;
579 mailimap_set *set = 0; 581 mailimap_set *set = 0;
580 mailimap_body*body_desc = 0; 582 mailimap_body*body_desc = 0;
581 583
582 mb = mail->getMbox().latin1(); 584 mb = mail->getMbox().latin1();
583 585
584 login(); 586 login();
585 if (!m_imap) { 587 if (!m_imap) {
586 return body; 588 return body;
587 } 589 }
588 err = selectMbox(mail->getMbox()); 590 err = selectMbox(mail->getMbox());
589 if ( err != MAILIMAP_NO_ERROR ) { 591 if ( err != MAILIMAP_NO_ERROR ) {
590 return body; 592 return body;
591 } 593 }
592 594
593 /* the range has to start at 1!!! not with 0!!!! */ 595 /* the range has to start at 1!!! not with 0!!!! */
594 set = mailimap_set_new_interval( mail->getNumber(),mail->getNumber() ); 596 set = mailimap_set_new_interval( mail->getNumber(),mail->getNumber() );
595 fetchAtt = mailimap_fetch_att_new_bodystructure(); 597 fetchAtt = mailimap_fetch_att_new_bodystructure();
596 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 598 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
597 err = mailimap_fetch( m_imap, set, fetchType, &result ); 599 err = mailimap_fetch( m_imap, set, fetchType, &result );
598 mailimap_set_free( set ); 600 mailimap_set_free( set );
599 mailimap_fetch_type_free( fetchType ); 601 mailimap_fetch_type_free( fetchType );
600 602
601 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 603 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
602 mailimap_msg_att * msg_att; 604 mailimap_msg_att * msg_att;
603 msg_att = (mailimap_msg_att*)current->data; 605 msg_att = (mailimap_msg_att*)current->data;
604 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->att_list->first->data; 606 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->att_list->first->data;
605 QValueList<int> path; 607 QValueList<int> path;
606 body_desc = item->att_data.att_static->att_data.att_body; 608 body_desc = item->att_data.att_static->att_data.att_body;
607 traverseBody(mail,body_desc,body,0,path); 609 traverseBody(mail,body_desc,body,0,path);
608 } else { 610 } else {
609 //odebug << "error fetching body: " << m_imap->imap_response << "" << oendl; 611 //odebug << "error fetching body: " << m_imap->imap_response << "" << oendl;
610 } 612 }
611 if (result) mailimap_fetch_list_free(result); 613 if (result) mailimap_fetch_list_free(result);
612 return body; 614 return body;
613} 615}
614 616
615QStringList IMAPwrapper::address_list_to_stringlist(clist*list) 617QStringList IMAPwrapper::address_list_to_stringlist(clist*list)
616{ 618{
617 QStringList l; 619 QStringList l;
618 QString from; 620 QString from;
619 bool named_from; 621 bool named_from;
620 clistcell *current = NULL; 622 clistcell *current = NULL;
621 mailimap_address * current_address=NULL; 623 mailimap_address * current_address=NULL;
622 if (!list) { 624 if (!list) {
623 return l; 625 return l;
624 } 626 }
625 unsigned int count = 0; 627 unsigned int count = 0;
626 for (current=clist_begin(list);current!= NULL;current=clist_next(current)) { 628 for (current=clist_begin(list);current!= NULL;current=clist_next(current)) {
627 from = ""; 629 from = "";
628 named_from = false; 630 named_from = false;
629 current_address=(mailimap_address*)current->data; 631 current_address=(mailimap_address*)current->data;
630 if (current_address->ad_personal_name){ 632 if (current_address->ad_personal_name){
631 from+=convert_String((const char*)current_address->ad_personal_name); 633 from+=convert_String((const char*)current_address->ad_personal_name);
632 from+=" "; 634 from+=" ";
633 named_from = true; 635 named_from = true;
634 } 636 }
635 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) { 637 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) {
636 from+="<"; 638 from+="<";
637 } 639 }
638 if (current_address->ad_mailbox_name) { 640 if (current_address->ad_mailbox_name) {
639 from+=QString(current_address->ad_mailbox_name); 641 from+=QString(current_address->ad_mailbox_name);
640 from+="@"; 642 from+="@";
641 } 643 }
642 if (current_address->ad_host_name) { 644 if (current_address->ad_host_name) {
643 from+=QString(current_address->ad_host_name); 645 from+=QString(current_address->ad_host_name);
644 } 646 }
645 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) { 647 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) {
646 from+=">"; 648 from+=">";
647 } 649 }
648 l.append(QString(from)); 650 l.append(QString(from));
649 if (++count > 99) { 651 if (++count > 99) {
650 break; 652 break;
651 } 653 }
652 } 654 }
653 return l; 655 return l;
654} 656}
655 657
656encodedString*IMAPwrapper::fetchRawPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call) 658encodedString*IMAPwrapper::fetchRawPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call)
657{ 659{
658 encodedString*res=new encodedString; 660 encodedString*res=new encodedString;
659 int err; 661 int err;
660 mailimap_fetch_type *fetchType; 662 mailimap_fetch_type *fetchType;
661 mailimap_set *set; 663 mailimap_set *set;
662 clistcell*current,*cur; 664 clistcell*current,*cur;
663 mailimap_section_part * section_part = 0; 665 mailimap_section_part * section_part = 0;
664 mailimap_section_spec * section_spec = 0; 666 mailimap_section_spec * section_spec = 0;
665 mailimap_section * section = 0; 667 mailimap_section * section = 0;
666 mailimap_fetch_att * fetch_att = 0; 668 mailimap_fetch_att * fetch_att = 0;
667 669
668 login(); 670 login();
669 if (!m_imap) { 671 if (!m_imap) {
670 return res; 672 return res;
671 } 673 }
672 if (!internal_call) { 674 if (!internal_call) {
673 err = selectMbox(mail->getMbox()); 675 err = selectMbox(mail->getMbox());
674 if ( err != MAILIMAP_NO_ERROR ) { 676 if ( err != MAILIMAP_NO_ERROR ) {
675 return res; 677 return res;
676 } 678 }
677 } 679 }
678 set = mailimap_set_new_single(mail->getNumber()); 680 set = mailimap_set_new_single(mail->getNumber());
679 681
680 clist*id_list = 0; 682 clist*id_list = 0;
681 683
682 /* if path == empty then its a request for the whole rfc822 mail and generates 684 /* if path == empty then its a request for the whole rfc822 mail and generates
683 a "fetch <id> (body[])" statement on imap server */ 685 a "fetch <id> (body[])" statement on imap server */
684 if (path.count()>0 ) { 686 if (path.count()>0 ) {
685 id_list = clist_new(); 687 id_list = clist_new();
686 for (unsigned j=0; j < path.count();++j) { 688 for (unsigned j=0; j < path.count();++j) {
687 uint32_t * p_id = (uint32_t *)malloc(sizeof(*p_id)); 689 uint32_t * p_id = (uint32_t *)malloc(sizeof(*p_id));
688 *p_id = path[j]; 690 *p_id = path[j];
689 clist_append(id_list,p_id); 691 clist_append(id_list,p_id);
690 } 692 }
691 section_part = mailimap_section_part_new(id_list); 693 section_part = mailimap_section_part_new(id_list);
692 section_spec = mailimap_section_spec_new(MAILIMAP_SECTION_SPEC_SECTION_PART, NULL, section_part, NULL); 694 section_spec = mailimap_section_spec_new(MAILIMAP_SECTION_SPEC_SECTION_PART, NULL, section_part, NULL);
693 } 695 }
694 696
695 section = mailimap_section_new(section_spec); 697 section = mailimap_section_new(section_spec);
696 fetch_att = mailimap_fetch_att_new_body_section(section); 698 fetch_att = mailimap_fetch_att_new_body_section(section);
697 fetchType = mailimap_fetch_type_new_fetch_att(fetch_att); 699 fetchType = mailimap_fetch_type_new_fetch_att(fetch_att);
698 700
699 clist*result = 0; 701 clist*result = 0;
700 702
701 err = mailimap_fetch( m_imap, set, fetchType, &result ); 703 err = mailimap_fetch( m_imap, set, fetchType, &result );
702 mailimap_set_free( set ); 704 mailimap_set_free( set );
703 mailimap_fetch_type_free( fetchType ); 705 mailimap_fetch_type_free( fetchType );
704 706
705 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 707 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
706 mailimap_msg_att * msg_att; 708 mailimap_msg_att * msg_att;
707 msg_att = (mailimap_msg_att*)current->data; 709 msg_att = (mailimap_msg_att*)current->data;
708 mailimap_msg_att_item*msg_att_item; 710 mailimap_msg_att_item*msg_att_item;
709 for(cur = clist_begin(msg_att->att_list) ; cur != NULL ; cur = clist_next(cur)) { 711 for(cur = clist_begin(msg_att->att_list) ; cur != NULL ; cur = clist_next(cur)) {
710 msg_att_item = (mailimap_msg_att_item*)clist_content(cur); 712 msg_att_item = (mailimap_msg_att_item*)clist_content(cur);
711 if (msg_att_item->att_type == MAILIMAP_MSG_ATT_ITEM_STATIC) { 713 if (msg_att_item->att_type == MAILIMAP_MSG_ATT_ITEM_STATIC) {
712 if (msg_att_item->att_data.att_static->att_type == MAILIMAP_MSG_ATT_BODY_SECTION) { 714 if (msg_att_item->att_data.att_static->att_type == MAILIMAP_MSG_ATT_BODY_SECTION) {
713 char*text = msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part; 715 char*text = msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part;
714 /* detach - we take over the content */ 716 /* detach - we take over the content */
715 msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part = 0L; 717 msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part = 0L;
716 res->setContent(text,msg_att_item->att_data.att_static->att_data.att_body_section->sec_length); 718 res->setContent(text,msg_att_item->att_data.att_static->att_data.att_body_section->sec_length);
717 } 719 }
718 } 720 }
719 } 721 }
720 } else { 722 } else {
721 ;//odebug << "error fetching text: " << m_imap->imap_response << "" << oendl; 723 ;//odebug << "error fetching text: " << m_imap->imap_response << "" << oendl;
722 } 724 }
723 if (result) mailimap_fetch_list_free(result); 725 if (result) mailimap_fetch_list_free(result);
724 return res; 726 return res;
725} 727}
726 728
727/* current_recursion is for recursive calls. 729/* current_recursion is for recursive calls.
728 current_count means the position inside the internal loop! */ 730 current_count means the position inside the internal loop! */
729void IMAPwrapper::traverseBody(const RecMailP&mail,mailimap_body*body,RecBodyP&target_body, 731void IMAPwrapper::traverseBody(const RecMailP&mail,mailimap_body*body,RecBodyP&target_body,
730 int current_recursion,QValueList<int>recList,int current_count) 732 int current_recursion,QValueList<int>recList,int current_count)
731{ 733{
732 if (!body || current_recursion>=10) { 734 if (!body || current_recursion>=10) {
733 return; 735 return;
734 } 736 }
735 switch (body->bd_type) { 737 switch (body->bd_type) {
736 case MAILIMAP_BODY_1PART: 738 case MAILIMAP_BODY_1PART:
737 { 739 {
738 QValueList<int>countlist = recList; 740 QValueList<int>countlist = recList;
739 countlist.append(current_count); 741 countlist.append(current_count);
740 RecPartP currentPart = new RecPart(); 742 RecPartP currentPart = new RecPart();
741 mailimap_body_type_1part*part1 = body->bd_data.bd_body_1part; 743 mailimap_body_type_1part*part1 = body->bd_data.bd_body_1part;
742 QString id(""); 744 QString id("");
743 currentPart->setPositionlist(countlist); 745 currentPart->setPositionlist(countlist);
744 for (unsigned int j = 0; j < countlist.count();++j) { 746 for (unsigned int j = 0; j < countlist.count();++j) {
745 id+=(j>0?" ":""); 747 id+=(j>0?" ":"");
746 id+=QString("%1").arg(countlist[j]); 748 id+=QString("%1").arg(countlist[j]);
747 } 749 }
748 //odebug << "ID = " << id.latin1() << "" << oendl; 750 //odebug << "ID = " << id.latin1() << "" << oendl;
749 currentPart->setIdentifier(id); 751 currentPart->setIdentifier(id);
750 fillSinglePart(currentPart,part1); 752 fillSinglePart(currentPart,part1);
751 /* important: Check for is NULL 'cause a body can be empty! 753 /* important: Check for is NULL 'cause a body can be empty!
752 And we put it only into the mail if it is the FIRST part */ 754 And we put it only into the mail if it is the FIRST part */
753 if (part1->bd_type==MAILIMAP_BODY_TYPE_1PART_TEXT && target_body->Bodytext().isNull() && countlist[0]==1) { 755 if (part1->bd_type==MAILIMAP_BODY_TYPE_1PART_TEXT && target_body->Bodytext().isNull() && countlist[0]==1) {
754 QString body_text = fetchTextPart(mail,countlist,true,currentPart->Encoding()); 756 QString body_text = fetchTextPart(mail,countlist,true,currentPart->Encoding());
755 757
756 size_t index = 0; 758 size_t index = 0;
757 char*res = 0; 759 char*res = 0;
758 int err = MAILIMF_NO_ERROR; 760 int err = MAILIMF_NO_ERROR;
759 761
760 QString charset = currentPart->searchParamter( "charset"); 762 QString charset = currentPart->searchParamter( "charset");
761 qDebug("CHARSET %s ",charset.latin1() ); 763 qDebug("CHARSET %s ",charset.latin1() );
762 if ( false ) { 764 if ( false ) {
763 //if ( !charset.isEmpty() ) { 765 //if ( !charset.isEmpty() ) {
764 target_body->setCharset( charset ); 766 target_body->setCharset( charset );
765 //err = mailmime_encoded_phrase_parse("iso-8859-1", 767 //err = mailmime_encoded_phrase_parse("iso-8859-1",
766 // text, strlen(text),&index, "iso-8859-1",&res); 768 // text, strlen(text),&index, "iso-8859-1",&res);
767 err = mailmime_encoded_phrase_parse(charset.latin1(), 769 err = mailmime_encoded_phrase_parse(charset.latin1(),
768 body_text.latin1(), body_text.length(),&index, "utf-8",&res); 770 body_text.latin1(), body_text.length(),&index, "utf-8",&res);
769 if (err == MAILIMF_NO_ERROR && res && strlen(res)) { 771 if (err == MAILIMF_NO_ERROR && res && strlen(res)) {
770 //qDebug("res %d %s ", index, res); 772 //qDebug("res %d %s ", index, res);
771 body_text = QString::fromUtf8(res); 773 body_text = QString::fromUtf8(res);
772 } 774 }
773 if (res) free(res); 775 if (res) free(res);
774 } 776 }
775 //qDebug("encoding %d text %s ",currentPart->Encoding().latin1(), body_text.latin1() ); 777 //qDebug("encoding %d text %s ",currentPart->Encoding().latin1(), body_text.latin1() );
776 target_body->setDescription(currentPart); 778 target_body->setDescription(currentPart);
777 target_body->setBodytext(body_text); 779 target_body->setBodytext(body_text);
778 if (countlist.count()>1) { 780 if (countlist.count()>1) {
779 target_body->addPart(currentPart); 781 target_body->addPart(currentPart);
780 } 782 }
781 } else { 783 } else {
782 target_body->addPart(currentPart); 784 target_body->addPart(currentPart);
783 } 785 }
784 if (part1->bd_type==MAILIMAP_BODY_TYPE_1PART_MSG) { 786 if (part1->bd_type==MAILIMAP_BODY_TYPE_1PART_MSG) {
785 traverseBody(mail,part1->bd_data.bd_type_msg->bd_body,target_body,current_recursion+1,countlist); 787 traverseBody(mail,part1->bd_data.bd_type_msg->bd_body,target_body,current_recursion+1,countlist);
786 } 788 }
787 } 789 }
788 break; 790 break;
789 case MAILIMAP_BODY_MPART: 791 case MAILIMAP_BODY_MPART:
790 { 792 {
791 QValueList<int>countlist = recList; 793 QValueList<int>countlist = recList;
792 clistcell*current=0; 794 clistcell*current=0;
793 mailimap_body*current_body=0; 795 mailimap_body*current_body=0;
794 unsigned int ccount = 1; 796 unsigned int ccount = 1;
795 mailimap_body_type_mpart*mailDescription = body->bd_data.bd_body_mpart; 797 mailimap_body_type_mpart*mailDescription = body->bd_data.bd_body_mpart;
796 for (current=clist_begin(mailDescription->bd_list);current!=0;current=clist_next(current)) { 798 for (current=clist_begin(mailDescription->bd_list);current!=0;current=clist_next(current)) {
797 current_body = (mailimap_body*)current->data; 799 current_body = (mailimap_body*)current->data;
798 if (current_body->bd_type==MAILIMAP_BODY_MPART) { 800 if (current_body->bd_type==MAILIMAP_BODY_MPART) {
799 RecPartP targetPart = new RecPart(); 801 RecPartP targetPart = new RecPart();
800 targetPart->setType("multipart"); 802 targetPart->setType("multipart");
801 fillMultiPart(targetPart,mailDescription); 803 fillMultiPart(targetPart,mailDescription);
802 countlist.append(current_count); 804 countlist.append(current_count);
803 targetPart->setPositionlist(countlist); 805 targetPart->setPositionlist(countlist);
804 target_body->addPart(targetPart); 806 target_body->addPart(targetPart);
805 QString id(""); 807 QString id("");
806 for (unsigned int j = 0; j < countlist.count();++j) { 808 for (unsigned int j = 0; j < countlist.count();++j) {
807 id+=(j>0?" ":""); 809 id+=(j>0?" ":"");
808 id+=QString("%1").arg(countlist[j]); 810 id+=QString("%1").arg(countlist[j]);
809 } 811 }
810 // odebug << "ID(mpart) = " << id.latin1() << "" << oendl; 812 // odebug << "ID(mpart) = " << id.latin1() << "" << oendl;
811 } 813 }
812 traverseBody(mail,current_body,target_body,current_recursion+1,countlist,ccount); 814 traverseBody(mail,current_body,target_body,current_recursion+1,countlist,ccount);
813 if (current_body->bd_type==MAILIMAP_BODY_MPART) { 815 if (current_body->bd_type==MAILIMAP_BODY_MPART) {
814 countlist = recList; 816 countlist = recList;
815 } 817 }
816 ++ccount; 818 ++ccount;
817 } 819 }
818 } 820 }
819 break; 821 break;
820 default: 822 default:
821 break; 823 break;
822 } 824 }
823} 825}
824 826
825void IMAPwrapper::fillSinglePart(RecPartP&target_part,mailimap_body_type_1part*Description) 827void IMAPwrapper::fillSinglePart(RecPartP&target_part,mailimap_body_type_1part*Description)
826{ 828{
827 if (!Description) { 829 if (!Description) {
828 return; 830 return;
829 } 831 }
830 switch (Description->bd_type) { 832 switch (Description->bd_type) {
831 case MAILIMAP_BODY_TYPE_1PART_TEXT: 833 case MAILIMAP_BODY_TYPE_1PART_TEXT:
832 target_part->setType("text"); 834 target_part->setType("text");
833 fillSingleTextPart(target_part,Description->bd_data.bd_type_text); 835 fillSingleTextPart(target_part,Description->bd_data.bd_type_text);
834 break; 836 break;
835 case MAILIMAP_BODY_TYPE_1PART_BASIC: 837 case MAILIMAP_BODY_TYPE_1PART_BASIC:
836 fillSingleBasicPart(target_part,Description->bd_data.bd_type_basic); 838 fillSingleBasicPart(target_part,Description->bd_data.bd_type_basic);
837 break; 839 break;
838 case MAILIMAP_BODY_TYPE_1PART_MSG: 840 case MAILIMAP_BODY_TYPE_1PART_MSG:
839 target_part->setType("message"); 841 target_part->setType("message");
840 fillSingleMsgPart(target_part,Description->bd_data.bd_type_msg); 842 fillSingleMsgPart(target_part,Description->bd_data.bd_type_msg);
841 break; 843 break;
842 default: 844 default:
843 break; 845 break;
844 } 846 }
845} 847}
846 848
847void IMAPwrapper::fillSingleTextPart(RecPartP&target_part,mailimap_body_type_text*which) 849void IMAPwrapper::fillSingleTextPart(RecPartP&target_part,mailimap_body_type_text*which)
848{ 850{
849 if (!which) { 851 if (!which) {
850 return; 852 return;
851 } 853 }
852 QString sub; 854 QString sub;
853 sub = which->bd_media_text; 855 sub = which->bd_media_text;
854 //odebug << "Type= text/" << which->bd_media_text << "" << oendl; 856 //odebug << "Type= text/" << which->bd_media_text << "" << oendl;
855 target_part->setSubtype(sub.lower()); 857 target_part->setSubtype(sub.lower());
856 target_part->setLines(which->bd_lines); 858 target_part->setLines(which->bd_lines);
857 fillBodyFields(target_part,which->bd_fields); 859 fillBodyFields(target_part,which->bd_fields);
858} 860}
859 861
860void IMAPwrapper::fillSingleMsgPart(RecPartP&target_part,mailimap_body_type_msg*which) 862void IMAPwrapper::fillSingleMsgPart(RecPartP&target_part,mailimap_body_type_msg*which)
861{ 863{
862 if (!which) { 864 if (!which) {
863 return; 865 return;
864 } 866 }
865 target_part->setSubtype("rfc822"); 867 target_part->setSubtype("rfc822");
866 //odebug << "Message part" << oendl; 868 //odebug << "Message part" << oendl;
867 /* we set this type to text/plain */ 869 /* we set this type to text/plain */
868 target_part->setLines(which->bd_lines); 870 target_part->setLines(which->bd_lines);
869 fillBodyFields(target_part,which->bd_fields); 871 fillBodyFields(target_part,which->bd_fields);
870} 872}
871 873
872void IMAPwrapper::fillMultiPart(RecPartP&target_part,mailimap_body_type_mpart*which) 874void IMAPwrapper::fillMultiPart(RecPartP&target_part,mailimap_body_type_mpart*which)
873{ 875{
874 if (!which) return; 876 if (!which) return;
875 QString sub = which->bd_media_subtype; 877 QString sub = which->bd_media_subtype;
876 target_part->setSubtype(sub.lower()); 878 target_part->setSubtype(sub.lower());
877 if (which->bd_ext_mpart && which->bd_ext_mpart->bd_parameter && which->bd_ext_mpart->bd_parameter->pa_list) { 879 if (which->bd_ext_mpart && which->bd_ext_mpart->bd_parameter && which->bd_ext_mpart->bd_parameter->pa_list) {
878 clistcell*cur = 0; 880 clistcell*cur = 0;
879 mailimap_single_body_fld_param*param=0; 881 mailimap_single_body_fld_param*param=0;
880 for (cur = clist_begin(which->bd_ext_mpart->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) { 882 for (cur = clist_begin(which->bd_ext_mpart->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) {
881 param = (mailimap_single_body_fld_param*)cur->data; 883 param = (mailimap_single_body_fld_param*)cur->data;
882 if (param) { 884 if (param) {
883 target_part->addParameter(QString(param->pa_name).lower(),QString(param->pa_value)); 885 target_part->addParameter(QString(param->pa_name).lower(),QString(param->pa_value));
884 } 886 }
885 } 887 }
886 } 888 }
887} 889}
888 890
889void IMAPwrapper::fillSingleBasicPart(RecPartP&target_part,mailimap_body_type_basic*which) 891void IMAPwrapper::fillSingleBasicPart(RecPartP&target_part,mailimap_body_type_basic*which)
890{ 892{
891 if (!which) { 893 if (!which) {
892 return; 894 return;
893 } 895 }
894 QString type,sub; 896 QString type,sub;
895 switch (which->bd_media_basic->med_type) { 897 switch (which->bd_media_basic->med_type) {
896 case MAILIMAP_MEDIA_BASIC_APPLICATION: 898 case MAILIMAP_MEDIA_BASIC_APPLICATION:
897 type = "application"; 899 type = "application";
898 break; 900 break;
899 case MAILIMAP_MEDIA_BASIC_AUDIO: 901 case MAILIMAP_MEDIA_BASIC_AUDIO:
900 type = "audio"; 902 type = "audio";
901 break; 903 break;
902 case MAILIMAP_MEDIA_BASIC_IMAGE: 904 case MAILIMAP_MEDIA_BASIC_IMAGE:
903 type = "image"; 905 type = "image";
904 break; 906 break;
905 case MAILIMAP_MEDIA_BASIC_MESSAGE: 907 case MAILIMAP_MEDIA_BASIC_MESSAGE:
906 type = "message"; 908 type = "message";
907 break; 909 break;
908 case MAILIMAP_MEDIA_BASIC_VIDEO: 910 case MAILIMAP_MEDIA_BASIC_VIDEO:
909 type = "video"; 911 type = "video";
910 break; 912 break;
911 case MAILIMAP_MEDIA_BASIC_OTHER: 913 case MAILIMAP_MEDIA_BASIC_OTHER:
912 default: 914 default:
913 if (which->bd_media_basic->med_basic_type) { 915 if (which->bd_media_basic->med_basic_type) {
914 type = which->bd_media_basic->med_basic_type; 916 type = which->bd_media_basic->med_basic_type;
915 } else { 917 } else {
916 type = ""; 918 type = "";
917 } 919 }
918 break; 920 break;
919 } 921 }
920 if (which->bd_media_basic->med_subtype) { 922 if (which->bd_media_basic->med_subtype) {
921 sub = which->bd_media_basic->med_subtype; 923 sub = which->bd_media_basic->med_subtype;
922 } else { 924 } else {
923 sub = ""; 925 sub = "";
924 } 926 }
925 // odebug << "Type = " << type.latin1() << "/" << sub.latin1() << "" << oendl; 927 // odebug << "Type = " << type.latin1() << "/" << sub.latin1() << "" << oendl;
926 target_part->setType(type.lower()); 928 target_part->setType(type.lower());
927 target_part->setSubtype(sub.lower()); 929 target_part->setSubtype(sub.lower());
928 fillBodyFields(target_part,which->bd_fields); 930 fillBodyFields(target_part,which->bd_fields);
929} 931}
930 932
931void IMAPwrapper::fillBodyFields(RecPartP&target_part,mailimap_body_fields*which) 933void IMAPwrapper::fillBodyFields(RecPartP&target_part,mailimap_body_fields*which)
932{ 934{
933 if (!which) return; 935 if (!which) return;
934 if (which->bd_parameter && which->bd_parameter->pa_list && which->bd_parameter->pa_list->count>0) { 936 if (which->bd_parameter && which->bd_parameter->pa_list && which->bd_parameter->pa_list->count>0) {
935 clistcell*cur; 937 clistcell*cur;
936 mailimap_single_body_fld_param*param=0; 938 mailimap_single_body_fld_param*param=0;
937 for (cur = clist_begin(which->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) { 939 for (cur = clist_begin(which->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) {
938 param = (mailimap_single_body_fld_param*)cur->data; 940 param = (mailimap_single_body_fld_param*)cur->data;
939 if (param) { 941 if (param) {
940 target_part->addParameter(QString(param->pa_name).lower(),QString(param->pa_value)); 942 target_part->addParameter(QString(param->pa_name).lower(),QString(param->pa_value));
941 } 943 }
942 } 944 }
943 } 945 }
944 mailimap_body_fld_enc*enc = which->bd_encoding; 946 mailimap_body_fld_enc*enc = which->bd_encoding;
945 QString encoding(""); 947 QString encoding("");
946 switch (enc->enc_type) { 948 switch (enc->enc_type) {
947 case MAILIMAP_BODY_FLD_ENC_7BIT: 949 case MAILIMAP_BODY_FLD_ENC_7BIT:
948 encoding = "7bit"; 950 encoding = "7bit";
949 break; 951 break;
950 case MAILIMAP_BODY_FLD_ENC_8BIT: 952 case MAILIMAP_BODY_FLD_ENC_8BIT:
951 encoding = "8bit"; 953 encoding = "8bit";
952 break; 954 break;
953 case MAILIMAP_BODY_FLD_ENC_BINARY: 955 case MAILIMAP_BODY_FLD_ENC_BINARY:
954 encoding="binary"; 956 encoding="binary";
955 break; 957 break;
956 case MAILIMAP_BODY_FLD_ENC_BASE64: 958 case MAILIMAP_BODY_FLD_ENC_BASE64:
957 encoding="base64"; 959 encoding="base64";
958 break; 960 break;
959 case MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE: 961 case MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE:
960 encoding="quoted-printable"; 962 encoding="quoted-printable";
961 break; 963 break;
962 case MAILIMAP_BODY_FLD_ENC_OTHER: 964 case MAILIMAP_BODY_FLD_ENC_OTHER:
963 default: 965 default:
964 if (enc->enc_value) { 966 if (enc->enc_value) {
965 char*t=enc->enc_value; 967 char*t=enc->enc_value;
966 encoding=QString(enc->enc_value); 968 encoding=QString(enc->enc_value);
967 enc->enc_value=0L; 969 enc->enc_value=0L;
968 free(t); 970 free(t);
969 } 971 }
970 } 972 }
971 if (which->bd_description) { 973 if (which->bd_description) {
972 target_part->setDescription(QString(which->bd_description)); 974 target_part->setDescription(QString(which->bd_description));
973 } 975 }
974 target_part->setEncoding(encoding); 976 target_part->setEncoding(encoding);
975 target_part->setSize(which->bd_size); 977 target_part->setSize(which->bd_size);
976} 978}
977void IMAPwrapper::deleteMailList(const QValueList<RecMailP>&target) 979void IMAPwrapper::deleteMailList(const QValueList<RecMailP>&target)
978{ 980{
979 //#if 0 981 //#if 0
980 mailimap_flag_list*flist; 982 mailimap_flag_list*flist;
981 mailimap_set *set; 983 mailimap_set *set;
982 mailimap_store_att_flags * store_flags; 984 mailimap_store_att_flags * store_flags;
983 int err; 985 int err;
984 login(); 986 login();
985 //#endif 987 //#endif
986 if (!m_imap) { 988 if (!m_imap) {
987 return; 989 return;
988 } 990 }
989 int iii = 0; 991 int iii = 0;
990 int count = target.count(); 992 int count = target.count();
991 // qDebug("imap remove count %d ", count); 993 // qDebug("imap remove count %d ", count);
992 994
993 995
994 mMax = count; 996 mMax = count;
995 progress( i18n("Delete")); 997 progress( i18n("Delete"));
996 998
997 QProgressBar wid ( count ); 999 QProgressBar wid ( count );
998 wid.setCaption( i18n("Deleting ...")); 1000 wid.setCaption( i18n("Deleting ..."));
999 wid.show(); 1001 wid.show();
1000 while (iii < count ) { 1002 while (iii < count ) {
1001 Global::statusMessage(i18n("Delete message %1 of %2").arg(iii).arg(count)); 1003 Global::statusMessage(i18n("Delete message %1 of %2").arg(iii).arg(count));
1002 wid.setProgress( iii ); 1004 wid.setProgress( iii );
1003 wid.raise(); 1005 wid.raise();
1004 qApp->processEvents(); 1006 qApp->processEvents();
1005 RecMailP mail = (*target.at( iii )); 1007 RecMailP mail = (*target.at( iii ));
1006 //#if 0 1008 //#if 0
1007 //qDebug("IMAP remove %d %d ", iii, mail->getNumber() ); 1009 //qDebug("IMAP remove %d %d ", iii, mail->getNumber() );
1008 err = selectMbox(mail->getMbox()); 1010 err = selectMbox(mail->getMbox());
1009 if ( err != MAILIMAP_NO_ERROR ) { 1011 if ( err != MAILIMAP_NO_ERROR ) {
1010 return; 1012 return;
1011 } 1013 }
1012 flist = mailimap_flag_list_new_empty(); 1014 flist = mailimap_flag_list_new_empty();
1013 mailimap_flag_list_add(flist,mailimap_flag_new_deleted()); 1015 mailimap_flag_list_add(flist,mailimap_flag_new_deleted());
1014 store_flags = mailimap_store_att_flags_new_set_flags(flist); 1016 store_flags = mailimap_store_att_flags_new_set_flags(flist);
1015 set = mailimap_set_new_single(mail->getNumber()); 1017 set = mailimap_set_new_single(mail->getNumber());
1016 err = mailimap_store(m_imap,set,store_flags); 1018 err = mailimap_store(m_imap,set,store_flags);
1017 mailimap_set_free( set ); 1019 mailimap_set_free( set );
1018 mailimap_store_att_flags_free(store_flags); 1020 mailimap_store_att_flags_free(store_flags);
1019 1021
1020 if (err != MAILIMAP_NO_ERROR) { 1022 if (err != MAILIMAP_NO_ERROR) {
1021 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl; 1023 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl;
1022 return; 1024 return;
1023 } 1025 }
1024 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl; 1026 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl;
1025 /* should we realy do that at this moment? */ 1027 /* should we realy do that at this moment? */
1026 1028
1027 // err = mailimap_expunge(m_imap); 1029 // err = mailimap_expunge(m_imap);
1028 //if (err != MAILIMAP_NO_ERROR) { 1030 //if (err != MAILIMAP_NO_ERROR) {
1029 // Global::statusMessage(i18n("Error deleting mails: %s").arg(m_imap->imap_response)); 1031 // Global::statusMessage(i18n("Error deleting mails: %s").arg(m_imap->imap_response));
1030 // } 1032 // }
1031 //#endif 1033 //#endif
1032 //deleteMail( mail); 1034 //deleteMail( mail);
1033 ++iii; 1035 ++iii;
1034 } 1036 }
1035 //qDebug("Deleting imap mails... "); 1037 //qDebug("Deleting imap mails... ");
1036 err = mailimap_expunge(m_imap); 1038 err = mailimap_expunge(m_imap);
1037 if (err != MAILIMAP_NO_ERROR) { 1039 if (err != MAILIMAP_NO_ERROR) {
1038 Global::statusMessage(i18n("Error deleting mails: %s").arg(m_imap->imap_response)); 1040 Global::statusMessage(i18n("Error deleting mails: %s").arg(m_imap->imap_response));
1039 } 1041 }
1040} 1042}
1041void IMAPwrapper::deleteMail(const RecMailP&mail) 1043void IMAPwrapper::deleteMail(const RecMailP&mail)
1042{ 1044{
1043 mailimap_flag_list*flist; 1045 mailimap_flag_list*flist;
1044 mailimap_set *set; 1046 mailimap_set *set;
1045 mailimap_store_att_flags * store_flags; 1047 mailimap_store_att_flags * store_flags;
1046 int err; 1048 int err;
1047 login(); 1049 login();
1048 if (!m_imap) { 1050 if (!m_imap) {
1049 return; 1051 return;
1050 } 1052 }
1051 err = selectMbox(mail->getMbox()); 1053 err = selectMbox(mail->getMbox());
1052 if ( err != MAILIMAP_NO_ERROR ) { 1054 if ( err != MAILIMAP_NO_ERROR ) {
1053 return; 1055 return;
1054 } 1056 }
1055 flist = mailimap_flag_list_new_empty(); 1057 flist = mailimap_flag_list_new_empty();
1056 mailimap_flag_list_add(flist,mailimap_flag_new_deleted()); 1058 mailimap_flag_list_add(flist,mailimap_flag_new_deleted());
1057 store_flags = mailimap_store_att_flags_new_set_flags(flist); 1059 store_flags = mailimap_store_att_flags_new_set_flags(flist);
1058 set = mailimap_set_new_single(mail->getNumber()); 1060 set = mailimap_set_new_single(mail->getNumber());
1059 err = mailimap_store(m_imap,set,store_flags); 1061 err = mailimap_store(m_imap,set,store_flags);
1060 mailimap_set_free( set ); 1062 mailimap_set_free( set );
1061 mailimap_store_att_flags_free(store_flags); 1063 mailimap_store_att_flags_free(store_flags);
1062 1064
1063 if (err != MAILIMAP_NO_ERROR) { 1065 if (err != MAILIMAP_NO_ERROR) {
1064 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl; 1066 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl;
1065 return; 1067 return;
1066 } 1068 }
1067 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl; 1069 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl;
1068 /* should we realy do that at this moment? */ 1070 /* should we realy do that at this moment? */
1069 1071
1070 err = mailimap_expunge(m_imap); 1072 err = mailimap_expunge(m_imap);
1071 if (err != MAILIMAP_NO_ERROR) { 1073 if (err != MAILIMAP_NO_ERROR) {
1072 Global::statusMessage(i18n("error deleting mail: %s").arg(m_imap->imap_response)); 1074 Global::statusMessage(i18n("error deleting mail: %s").arg(m_imap->imap_response));
1073 } 1075 }
1074 //qDebug("IMAPwrapper::deleteMail 2"); 1076 //qDebug("IMAPwrapper::deleteMail 2");
1075 1077
1076} 1078}
1077 1079
1078void IMAPwrapper::answeredMail(const RecMailP&mail) 1080void IMAPwrapper::answeredMail(const RecMailP&mail)
1079{ 1081{
1080 mailimap_flag_list*flist; 1082 mailimap_flag_list*flist;
1081 mailimap_set *set; 1083 mailimap_set *set;
1082 mailimap_store_att_flags * store_flags; 1084 mailimap_store_att_flags * store_flags;
1083 int err; 1085 int err;
1084 login(); 1086 login();
1085 if (!m_imap) { 1087 if (!m_imap) {
1086 return; 1088 return;
1087 } 1089 }
1088 err = selectMbox(mail->getMbox()); 1090 err = selectMbox(mail->getMbox());
1089 if ( err != MAILIMAP_NO_ERROR ) { 1091 if ( err != MAILIMAP_NO_ERROR ) {
1090 return; 1092 return;
1091 } 1093 }
1092 flist = mailimap_flag_list_new_empty(); 1094 flist = mailimap_flag_list_new_empty();
1093 mailimap_flag_list_add(flist,mailimap_flag_new_answered()); 1095 mailimap_flag_list_add(flist,mailimap_flag_new_answered());
1094 store_flags = mailimap_store_att_flags_new_add_flags(flist); 1096 store_flags = mailimap_store_att_flags_new_add_flags(flist);
1095 set = mailimap_set_new_single(mail->getNumber()); 1097 set = mailimap_set_new_single(mail->getNumber());
1096 err = mailimap_store(m_imap,set,store_flags); 1098 err = mailimap_store(m_imap,set,store_flags);
1097 mailimap_set_free( set ); 1099 mailimap_set_free( set );
1098 mailimap_store_att_flags_free(store_flags); 1100 mailimap_store_att_flags_free(store_flags);
1099 1101
1100 if (err != MAILIMAP_NO_ERROR) { 1102 if (err != MAILIMAP_NO_ERROR) {
1101 // odebug << "error marking mail: " << m_imap->imap_response << "" << oendl; 1103 // odebug << "error marking mail: " << m_imap->imap_response << "" << oendl;
1102 return; 1104 return;
1103 } 1105 }
1104} 1106}
1105 1107
1106QString IMAPwrapper::fetchTextPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call,const QString&enc) 1108QString IMAPwrapper::fetchTextPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call,const QString&enc)
1107{ 1109{
1108 QString body(""); 1110 QString body("");
1109 encodedString*res = fetchRawPart(mail,path,internal_call); 1111 encodedString*res = fetchRawPart(mail,path,internal_call);
1110 encodedString*r = decode_String(res,enc); 1112 encodedString*r = decode_String(res,enc);
1111 delete res; 1113 delete res;
1112 if (r) { 1114 if (r) {
1113 if (r->Length()>0) { 1115 if (r->Length()>0) {
1114 body = r->Content(); 1116 body = r->Content();
1115 } 1117 }
1116 delete r; 1118 delete r;
1117 } 1119 }
1118 return body; 1120 return body;
1119} 1121}
1120 1122
1121QString IMAPwrapper::fetchTextPart(const RecMailP&mail,const RecPartP&part) 1123QString IMAPwrapper::fetchTextPart(const RecMailP&mail,const RecPartP&part)
1122{ 1124{
1123 return fetchTextPart(mail,part->Positionlist(),false,part->Encoding()); 1125 return fetchTextPart(mail,part->Positionlist(),false,part->Encoding());
1124} 1126}
1125 1127
1126encodedString* IMAPwrapper::fetchDecodedPart(const RecMailP&mail,const RecPartP&part) 1128encodedString* IMAPwrapper::fetchDecodedPart(const RecMailP&mail,const RecPartP&part)
1127{ 1129{
1128 encodedString*res = fetchRawPart(mail,part->Positionlist(),false); 1130 encodedString*res = fetchRawPart(mail,part->Positionlist(),false);
1129 encodedString*r = decode_String(res,part->Encoding()); 1131 encodedString*r = decode_String(res,part->Encoding());
1130 delete res; 1132 delete res;
1131 return r; 1133 return r;
1132} 1134}
1133 1135
1134encodedString* IMAPwrapper::fetchRawPart(const RecMailP&mail,const RecPartP&part) 1136encodedString* IMAPwrapper::fetchRawPart(const RecMailP&mail,const RecPartP&part)
1135{ 1137{
1136 return fetchRawPart(mail,part->Positionlist(),false); 1138 return fetchRawPart(mail,part->Positionlist(),false);
1137} 1139}
1138 1140
1139int IMAPwrapper::deleteAllMail(const FolderP&folder) 1141int IMAPwrapper::deleteAllMail(const FolderP&folder)
1140{ 1142{
1141 login(); 1143 login();
1142 if (!m_imap) { 1144 if (!m_imap) {
1143 return 0; 1145 return 0;
1144 } 1146 }
1145 mailimap_flag_list*flist; 1147 mailimap_flag_list*flist;
1146 mailimap_set *set; 1148 mailimap_set *set;
1147 mailimap_store_att_flags * store_flags; 1149 mailimap_store_att_flags * store_flags;
1148 int err = selectMbox(folder->getName()); 1150 int err = selectMbox(folder->getName());
1149 if ( err != MAILIMAP_NO_ERROR ) { 1151 if ( err != MAILIMAP_NO_ERROR ) {
1150 return 0; 1152 return 0;
1151 } 1153 }
1152 1154
1153 int last = m_imap->imap_selection_info->sel_exists; 1155 int last = m_imap->imap_selection_info->sel_exists;
1154 if (last == 0) { 1156 if (last == 0) {
1155 Global::statusMessage(i18n("Mailbox has no mails!")); 1157 Global::statusMessage(i18n("Mailbox has no mails!"));
1156 return 0; 1158 return 0;
1157 } 1159 }
1158 flist = mailimap_flag_list_new_empty(); 1160 flist = mailimap_flag_list_new_empty();
1159 mailimap_flag_list_add(flist,mailimap_flag_new_deleted()); 1161 mailimap_flag_list_add(flist,mailimap_flag_new_deleted());
1160 store_flags = mailimap_store_att_flags_new_set_flags(flist); 1162 store_flags = mailimap_store_att_flags_new_set_flags(flist);
1161 set = mailimap_set_new_interval( 1, last ); 1163 set = mailimap_set_new_interval( 1, last );
1162 err = mailimap_store(m_imap,set,store_flags); 1164 err = mailimap_store(m_imap,set,store_flags);
1163 mailimap_set_free( set ); 1165 mailimap_set_free( set );
1164 mailimap_store_att_flags_free(store_flags); 1166 mailimap_store_att_flags_free(store_flags);
1165 if (err != MAILIMAP_NO_ERROR) { 1167 if (err != MAILIMAP_NO_ERROR) {
1166 Global::statusMessage(i18n("error deleting mail: %s").arg(m_imap->imap_response)); 1168 Global::statusMessage(i18n("error deleting mail: %s").arg(m_imap->imap_response));
1167 return 0; 1169 return 0;
1168 } 1170 }
1169 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl; 1171 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl;
1170 /* should we realy do that at this moment? */ 1172 /* should we realy do that at this moment? */
1171 err = mailimap_expunge(m_imap); 1173 err = mailimap_expunge(m_imap);
1172 if (err != MAILIMAP_NO_ERROR) { 1174 if (err != MAILIMAP_NO_ERROR) {
1173 Global::statusMessage(i18n("error deleting mail: %s").arg(m_imap->imap_response)); 1175 Global::statusMessage(i18n("error deleting mail: %s").arg(m_imap->imap_response));
1174 return 0; 1176 return 0;
1175 } 1177 }
1176 // odebug << "Delete successfull " << m_imap->imap_response << "" << oendl; 1178 // odebug << "Delete successfull " << m_imap->imap_response << "" << oendl;
1177 return 1; 1179 return 1;
1178} 1180}
1179 1181
1180int IMAPwrapper::createMbox(const QString&folder,const FolderP&parentfolder,const QString& delemiter,bool getsubfolder) 1182int IMAPwrapper::createMbox(const QString&folder,const FolderP&parentfolder,const QString& delemiter,bool getsubfolder)
1181{ 1183{
1182 if (folder.length()==0) return 0; 1184 if (folder.length()==0) return 0;
1183 login(); 1185 login();
1184 if (!m_imap) {return 0;} 1186 if (!m_imap) {return 0;}
1185 QString pre = account->getPrefix(); 1187 QString pre = account->getPrefix();
1186 if (delemiter.length()>0 && pre.findRev(delemiter)!=((int)pre.length())-1) { 1188 if (delemiter.length()>0 && pre.findRev(delemiter)!=((int)pre.length())-1) {
1187 pre+=delemiter; 1189 pre+=delemiter;
1188 } 1190 }
1189 if (parentfolder) { 1191 if (parentfolder) {
1190 pre += parentfolder->getDisplayName()+delemiter; 1192 pre += parentfolder->getDisplayName()+delemiter;
1191 } 1193 }
1192 pre+=folder; 1194 pre+=folder;
1193 if (getsubfolder) { 1195 if (getsubfolder) {
1194 if (delemiter.length()>0) { 1196 if (delemiter.length()>0) {
1195 pre+=delemiter; 1197 pre+=delemiter;
1196 } else { 1198 } else {
1197 Global::statusMessage(i18n("Cannot create folder %1 for holding subfolders").arg(pre)); 1199 Global::statusMessage(i18n("Cannot create folder %1 for holding subfolders").arg(pre));
1198 return 0; 1200 return 0;
1199 } 1201 }
1200 } 1202 }
1201 // odebug << "Creating " << pre.latin1() << "" << oendl; 1203 // odebug << "Creating " << pre.latin1() << "" << oendl;
1202 int res = mailimap_create(m_imap,pre.latin1()); 1204 int res = mailimap_create(m_imap,pre.latin1());
1203 if (res != MAILIMAP_NO_ERROR) { 1205 if (res != MAILIMAP_NO_ERROR) {
1204 Global::statusMessage(i18n("%1").arg(m_imap->imap_response)); 1206 Global::statusMessage(i18n("%1").arg(m_imap->imap_response));
1205 return 0; 1207 return 0;
1206 } 1208 }
1207 return 1; 1209 return 1;
1208} 1210}
1209 1211
1210int IMAPwrapper::deleteMbox(const FolderP&folder) 1212int IMAPwrapper::deleteMbox(const FolderP&folder)
1211{ 1213{
1212 if (!folder) return 0; 1214 if (!folder) return 0;
1213 login(); 1215 login();
1214 if (!m_imap) {return 0;} 1216 if (!m_imap) {return 0;}
1215 int res = mailimap_delete(m_imap,folder->getName()); 1217 int res = mailimap_delete(m_imap,folder->getName());
1216 if (res != MAILIMAP_NO_ERROR) { 1218 if (res != MAILIMAP_NO_ERROR) {
1217 Global::statusMessage(i18n("%1").arg(m_imap->imap_response)); 1219 Global::statusMessage(i18n("%1").arg(m_imap->imap_response));
1218 return 0; 1220 return 0;
1219 } 1221 }
1220 return 1; 1222 return 1;
1221} 1223}
1222 1224
1223void IMAPwrapper::statusFolder(folderStat&target_stat,const QString & mailbox) 1225void IMAPwrapper::statusFolder(folderStat&target_stat,const QString & mailbox)
1224{ 1226{
1225 mailimap_status_att_list * att_list =0; 1227 mailimap_status_att_list * att_list =0;
1226 mailimap_mailbox_data_status * status=0; 1228 mailimap_mailbox_data_status * status=0;
1227 clistiter * cur = 0; 1229 clistiter * cur = 0;
1228 int r = 0; 1230 int r = 0;
1229 target_stat.message_count = 0; 1231 target_stat.message_count = 0;
1230 target_stat.message_unseen = 0; 1232 target_stat.message_unseen = 0;
1231 target_stat.message_recent = 0; 1233 target_stat.message_recent = 0;
1232 login(); 1234 login();
1233 if (!m_imap) { 1235 if (!m_imap) {
1234 return; 1236 return;
1235 } 1237 }
1236 att_list = mailimap_status_att_list_new_empty(); 1238 att_list = mailimap_status_att_list_new_empty();
1237 if (!att_list) return; 1239 if (!att_list) return;
1238 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_MESSAGES); 1240 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_MESSAGES);
1239 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_RECENT); 1241 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_RECENT);
1240 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_UNSEEN); 1242 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_UNSEEN);
1241 r = mailimap_status(m_imap, mailbox.latin1(), att_list, &status); 1243 r = mailimap_status(m_imap, mailbox.latin1(), att_list, &status);
1242 if (r==MAILIMAP_NO_ERROR&&status->st_info_list!=0) { 1244 if (r==MAILIMAP_NO_ERROR&&status->st_info_list!=0) {
1243 for (cur = clist_begin(status->st_info_list); 1245 for (cur = clist_begin(status->st_info_list);
1244 cur != NULL ; cur = clist_next(cur)) { 1246 cur != NULL ; cur = clist_next(cur)) {
1245 mailimap_status_info * status_info; 1247 mailimap_status_info * status_info;
1246 status_info = (mailimap_status_info *)clist_content(cur); 1248 status_info = (mailimap_status_info *)clist_content(cur);
1247 switch (status_info->st_att) { 1249 switch (status_info->st_att) {
1248 case MAILIMAP_STATUS_ATT_MESSAGES: 1250 case MAILIMAP_STATUS_ATT_MESSAGES:
1249 target_stat.message_count = status_info->st_value; 1251 target_stat.message_count = status_info->st_value;
1250 break; 1252 break;
1251 case MAILIMAP_STATUS_ATT_RECENT: 1253 case MAILIMAP_STATUS_ATT_RECENT:
1252 target_stat.message_recent = status_info->st_value; 1254 target_stat.message_recent = status_info->st_value;
1253 break; 1255 break;
1254 case MAILIMAP_STATUS_ATT_UNSEEN: 1256 case MAILIMAP_STATUS_ATT_UNSEEN:
1255 target_stat.message_unseen = status_info->st_value; 1257 target_stat.message_unseen = status_info->st_value;
1256 break; 1258 break;
1257 } 1259 }
1258 } 1260 }
1259 } else { 1261 } else {
1260 // odebug << "Error retrieving status" << oendl; 1262 // odebug << "Error retrieving status" << oendl;
1261 } 1263 }
1262 if (status) mailimap_mailbox_data_status_free(status); 1264 if (status) mailimap_mailbox_data_status_free(status);
1263 if (att_list) mailimap_status_att_list_free(att_list); 1265 if (att_list) mailimap_status_att_list_free(att_list);
1264} 1266}
1265 1267
1266void IMAPwrapper::storeMessage(const char*msg,size_t length, const QString&folder) 1268void IMAPwrapper::storeMessage(const char*msg,size_t length, const QString&folder)
1267{ 1269{
1268 login(); 1270 login();
1269 if (!m_imap) return; 1271 if (!m_imap) return;
1270 if (!msg) return; 1272 if (!msg) return;
1271 int r = mailimap_append(m_imap,(char*)folder.latin1(),0,0,msg,length); 1273 int r = mailimap_append(m_imap,(char*)folder.latin1(),0,0,msg,length);
1272 if (r != MAILIMAP_NO_ERROR) { 1274 if (r != MAILIMAP_NO_ERROR) {
1273 Global::statusMessage("Error storing mail!"); 1275 Global::statusMessage("Error storing mail!");
1274 } 1276 }
1275} 1277}
1276 1278
1277MAILLIB::ATYPE IMAPwrapper::getType()const 1279MAILLIB::ATYPE IMAPwrapper::getType()const
1278{ 1280{
1279 return account->getType(); 1281 return account->getType();
1280} 1282}
1281 1283
1282const QString&IMAPwrapper::getName()const 1284const QString&IMAPwrapper::getName()const
1283{ 1285{
1284 // odebug << "Get name: " << account->getAccountName().latin1() << "" << oendl; 1286 // odebug << "Get name: " << account->getAccountName().latin1() << "" << oendl;
1285 return account->getAccountName(); 1287 return account->getAccountName();
1286} 1288}
1287 1289
1288encodedString* IMAPwrapper::fetchRawBody(const RecMailP&mail) 1290encodedString* IMAPwrapper::fetchRawBody(const RecMailP&mail)
1289{ 1291{
1290 // dummy 1292 // dummy
1291 QValueList<int> path; 1293 QValueList<int> path;
1292 return fetchRawPart(mail,path,false); 1294 return fetchRawPart(mail,path,false);
1293} 1295}
1294 1296
1295void IMAPwrapper::mvcpAllMails(const FolderP&fromFolder, 1297void IMAPwrapper::mvcpAllMails(const FolderP&fromFolder,
1296 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit, int maxSizeInKb) 1298 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit, int maxSizeInKb)
1297{ 1299{
1298 if (targetWrapper != this || maxSizeInKb > 0 ) { 1300 if (targetWrapper != this || maxSizeInKb > 0 ) {
1299 mMax = 0; 1301 mMax = 0;
1300 progress( i18n("Copy")); 1302 progress( i18n("Copy"));
1301 AbstractMail::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit, maxSizeInKb); 1303 AbstractMail::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit, maxSizeInKb);
1302 //qDebug("IMAPwrapper::mvcpAllMails::Using generic"); 1304 //qDebug("IMAPwrapper::mvcpAllMails::Using generic");
1303 // odebug << "Using generic" << oendl; 1305 // odebug << "Using generic" << oendl;
1304 return; 1306 return;
1305 } 1307 }
1306 mailimap_set *set = 0; 1308 mailimap_set *set = 0;
1307 login(); 1309 login();
1308 if (!m_imap) { 1310 if (!m_imap) {
1309 return; 1311 return;
1310 } 1312 }
1311 int err = selectMbox(fromFolder->getName()); 1313 int err = selectMbox(fromFolder->getName());
1312 if ( err != MAILIMAP_NO_ERROR ) { 1314 if ( err != MAILIMAP_NO_ERROR ) {
1313 return; 1315 return;
1314 } 1316 }
1315 Global::statusMessage( i18n("Copying mails on server...") ); 1317 Global::statusMessage( i18n("Copying mails on server...") );
1316 int last = m_imap->imap_selection_info->sel_exists; 1318 int last = m_imap->imap_selection_info->sel_exists;
1317 set = mailimap_set_new_interval( 1, last ); 1319 set = mailimap_set_new_interval( 1, last );
1318 err = mailimap_copy(m_imap,set,targetFolder.latin1()); 1320 err = mailimap_copy(m_imap,set,targetFolder.latin1());
1319 mailimap_set_free( set ); 1321 mailimap_set_free( set );
1320 if ( err != MAILIMAP_NO_ERROR ) { 1322 if ( err != MAILIMAP_NO_ERROR ) {
1321 QString error_msg = i18n("Error copy mails: %1").arg(m_imap->imap_response); 1323 QString error_msg = i18n("Error copy mails: %1").arg(m_imap->imap_response);
1322 Global::statusMessage(error_msg); 1324 Global::statusMessage(error_msg);
1323 // odebug << error_msg << oendl; 1325 // odebug << error_msg << oendl;
1324 return; 1326 return;
1325 } 1327 }
1326 if (moveit) { 1328 if (moveit) {
1327 deleteAllMail(fromFolder); 1329 deleteAllMail(fromFolder);
1328 } 1330 }
1329} 1331}
1330 1332
1331void IMAPwrapper::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 1333void IMAPwrapper::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
1332{ 1334{
1333 if (targetWrapper != this) { 1335 if (targetWrapper != this) {
1334 // odebug << "Using generic" << oendl; 1336 // odebug << "Using generic" << oendl;
1335 AbstractMail::mvcpMail(mail,targetFolder,targetWrapper,moveit); 1337 AbstractMail::mvcpMail(mail,targetFolder,targetWrapper,moveit);
1336 return; 1338 return;
1337 } 1339 }
1338 mailimap_set *set = 0; 1340 mailimap_set *set = 0;
1339 login(); 1341 login();
1340 if (!m_imap) { 1342 if (!m_imap) {
1341 return; 1343 return;
1342 } 1344 }
1343 int err = selectMbox(mail->getMbox()); 1345 int err = selectMbox(mail->getMbox());
1344 if ( err != MAILIMAP_NO_ERROR ) { 1346 if ( err != MAILIMAP_NO_ERROR ) {
1345 return; 1347 return;
1346 } 1348 }
1347 set = mailimap_set_new_single(mail->getNumber()); 1349 set = mailimap_set_new_single(mail->getNumber());
1348 err = mailimap_copy(m_imap,set,targetFolder.latin1()); 1350 err = mailimap_copy(m_imap,set,targetFolder.latin1());
1349 mailimap_set_free( set ); 1351 mailimap_set_free( set );
1350 if ( err != MAILIMAP_NO_ERROR ) { 1352 if ( err != MAILIMAP_NO_ERROR ) {
1351 QString error_msg = i18n("error copy mail: %1").arg(m_imap->imap_response); 1353 QString error_msg = i18n("error copy mail: %1").arg(m_imap->imap_response);
1352 Global::statusMessage(error_msg); 1354 Global::statusMessage(error_msg);
1353 // odebug << error_msg << oendl; 1355 // odebug << error_msg << oendl;
1354 return; 1356 return;
1355 } 1357 }
1356 if (moveit) { 1358 if (moveit) {
1357 deleteMail(mail); 1359 deleteMail(mail);
1358 } 1360 }
1359} 1361}