summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/imapwrapper.cpp7
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.cpp7
2 files changed, 6 insertions, 8 deletions
diff --git a/noncore/net/mail/imapwrapper.cpp b/noncore/net/mail/imapwrapper.cpp
index 7b75ffa..3941cec 100644
--- a/noncore/net/mail/imapwrapper.cpp
+++ b/noncore/net/mail/imapwrapper.cpp
@@ -1,695 +1,694 @@
1 1
2#include <stdlib.h> 2#include <stdlib.h>
3 3
4#include "imapwrapper.h" 4#include "imapwrapper.h"
5#include "mailtypes.h" 5#include "mailtypes.h"
6#include <libetpan/mailimap.h> 6#include <libetpan/mailimap.h>
7 7
8IMAPwrapper::IMAPwrapper( IMAPaccount *a ) 8IMAPwrapper::IMAPwrapper( IMAPaccount *a )
9{ 9{
10 account = a; 10 account = a;
11 m_imap = 0; 11 m_imap = 0;
12} 12}
13 13
14IMAPwrapper::~IMAPwrapper() 14IMAPwrapper::~IMAPwrapper()
15{ 15{
16 logout(); 16 logout();
17} 17}
18 18
19void IMAPwrapper::imap_progress( size_t current, size_t maximum ) 19void IMAPwrapper::imap_progress( size_t current, size_t maximum )
20{ 20{
21 qDebug( "IMAP: %i of %i", current, maximum ); 21 qDebug( "IMAP: %i of %i", current, maximum );
22} 22}
23 23
24void IMAPwrapper::login() 24void IMAPwrapper::login()
25{ 25{
26 const char *server, *user, *pass; 26 const char *server, *user, *pass;
27 uint16_t port; 27 uint16_t port;
28 int err = MAILIMAP_NO_ERROR; 28 int err = MAILIMAP_NO_ERROR;
29 29
30 /* we are connected this moment */ 30 /* we are connected this moment */
31 /* TODO: setup a timer holding the line or if connection closed - delete the value */ 31 /* TODO: setup a timer holding the line or if connection closed - delete the value */
32 if (m_imap) { 32 if (m_imap) {
33 return; 33 return;
34 } 34 }
35 server = account->getServer().latin1(); 35 server = account->getServer().latin1();
36 port = account->getPort().toUInt(); 36 port = account->getPort().toUInt();
37 user = account->getUser().latin1(); 37 user = account->getUser().latin1();
38 pass = account->getPassword().latin1(); 38 pass = account->getPassword().latin1();
39 39
40 m_imap = mailimap_new( 20, &imap_progress ); 40 m_imap = mailimap_new( 20, &imap_progress );
41 /* connect */ 41 /* connect */
42 if (account->getSSL()) { 42 if (account->getSSL()) {
43 err = mailimap_ssl_connect( m_imap, (char*)server, port ); 43 err = mailimap_ssl_connect( m_imap, (char*)server, port );
44 } else { 44 } else {
45 err = mailimap_socket_connect( m_imap, (char*)server, port ); 45 err = mailimap_socket_connect( m_imap, (char*)server, port );
46 } 46 }
47 47
48 if ( err != MAILIMAP_NO_ERROR && 48 if ( err != MAILIMAP_NO_ERROR &&
49 err != MAILIMAP_NO_ERROR_AUTHENTICATED && 49 err != MAILIMAP_NO_ERROR_AUTHENTICATED &&
50 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { 50 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) {
51 qDebug("error connecting server: %s",m_imap->imap_response); 51 qDebug("error connecting server: %s",m_imap->imap_response);
52 mailimap_free( m_imap ); 52 mailimap_free( m_imap );
53 m_imap = 0; 53 m_imap = 0;
54 return; 54 return;
55 } 55 }
56 56
57 /* login */ 57 /* login */
58 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass ); 58 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass );
59 if ( err != MAILIMAP_NO_ERROR ) { 59 if ( err != MAILIMAP_NO_ERROR ) {
60 qDebug("error logging in imap: %s",m_imap->imap_response); 60 qDebug("error logging in imap: %s",m_imap->imap_response);
61 err = mailimap_close( m_imap ); 61 err = mailimap_close( m_imap );
62 mailimap_free( m_imap ); 62 mailimap_free( m_imap );
63 m_imap = 0; 63 m_imap = 0;
64 } 64 }
65} 65}
66 66
67void IMAPwrapper::logout() 67void IMAPwrapper::logout()
68{ 68{
69 int err = MAILIMAP_NO_ERROR; 69 int err = MAILIMAP_NO_ERROR;
70 if (!m_imap) return; 70 if (!m_imap) return;
71 err = mailimap_logout( m_imap ); 71 err = mailimap_logout( m_imap );
72 err = mailimap_close( m_imap ); 72 err = mailimap_close( m_imap );
73 mailimap_free( m_imap ); 73 mailimap_free( m_imap );
74 m_imap = 0; 74 m_imap = 0;
75} 75}
76 76
77void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target ) 77void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
78{ 78{
79 const char *mb; 79 const char *mb;
80 int err = MAILIMAP_NO_ERROR; 80 int err = MAILIMAP_NO_ERROR;
81 clist *result; 81 clist *result;
82 clistcell *current; 82 clistcell *current;
83// mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate,*fetchAttSize; 83// mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate,*fetchAttSize;
84 mailimap_fetch_type *fetchType; 84 mailimap_fetch_type *fetchType;
85 mailimap_set *set; 85 mailimap_set *set;
86 86
87 mb = mailbox.latin1(); 87 mb = mailbox.latin1();
88 login(); 88 login();
89 if (!m_imap) { 89 if (!m_imap) {
90 return; 90 return;
91 } 91 }
92 /* select mailbox READONLY for operations */ 92 /* select mailbox READONLY for operations */
93 err = mailimap_examine( m_imap, (char*)mb); 93 err = mailimap_examine( m_imap, (char*)mb);
94 if ( err != MAILIMAP_NO_ERROR ) { 94 if ( err != MAILIMAP_NO_ERROR ) {
95 qDebug("error selecting mailbox: %s",m_imap->imap_response); 95 qDebug("error selecting mailbox: %s",m_imap->imap_response);
96 return; 96 return;
97 } 97 }
98 98
99 int last = m_imap->imap_selection_info->sel_exists; 99 int last = m_imap->imap_selection_info->sel_exists;
100 100
101 if (last == 0) { 101 if (last == 0) {
102 qDebug("mailbox has no mails"); 102 qDebug("mailbox has no mails");
103 return; 103 return;
104 } 104 }
105 105
106 result = clist_new(); 106 result = clist_new();
107 /* the range has to start at 1!!! not with 0!!!! */ 107 /* the range has to start at 1!!! not with 0!!!! */
108 set = mailimap_set_new_interval( 1, last ); 108 set = mailimap_set_new_interval( 1, last );
109 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 109 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
110 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope()); 110 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope());
111 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags()); 111 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags());
112 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate()); 112 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate());
113 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size()); 113 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size());
114 114
115 err = mailimap_fetch( m_imap, set, fetchType, &result ); 115 err = mailimap_fetch( m_imap, set, fetchType, &result );
116 mailimap_set_free( set ); 116 mailimap_set_free( set );
117 mailimap_fetch_type_free( fetchType ); 117 mailimap_fetch_type_free( fetchType );
118 118
119 QString date,subject,from; 119 QString date,subject,from;
120 120
121 if ( err == MAILIMAP_NO_ERROR ) { 121 if ( err == MAILIMAP_NO_ERROR ) {
122 122
123 mailimap_msg_att * msg_att; 123 mailimap_msg_att * msg_att;
124 int i = 0; 124 int i = 0;
125 for (current = clist_begin(result); current != 0; current=clist_next(current)) { 125 for (current = clist_begin(result); current != 0; current=clist_next(current)) {
126 ++i; 126 ++i;
127 msg_att = (mailimap_msg_att*)current->data; 127 msg_att = (mailimap_msg_att*)current->data;
128 RecMail*m = parse_list_result(msg_att); 128 RecMail*m = parse_list_result(msg_att);
129 if (m) { 129 if (m) {
130 m->setNumber(i); 130 m->setNumber(i);
131 m->setMbox(mailbox); 131 m->setMbox(mailbox);
132 target.append(m); 132 target.append(m);
133 } 133 }
134 } 134 }
135 } else { 135 } else {
136 qDebug("Error fetching headers: %s",m_imap->imap_response); 136 qDebug("Error fetching headers: %s",m_imap->imap_response);
137 } 137 }
138 mailimap_fetch_list_free(result); 138 mailimap_fetch_list_free(result);
139} 139}
140 140
141QList<IMAPFolder>* IMAPwrapper::listFolders() 141QList<IMAPFolder>* IMAPwrapper::listFolders()
142{ 142{
143 const char *path, *mask; 143 const char *path, *mask;
144 int err = MAILIMAP_NO_ERROR; 144 int err = MAILIMAP_NO_ERROR;
145 clist *result; 145 clist *result;
146 clistcell *current; 146 clistcell *current;
147 147
148 QList<IMAPFolder> * folders = new QList<IMAPFolder>(); 148 QList<IMAPFolder> * folders = new QList<IMAPFolder>();
149 folders->setAutoDelete( true ); 149 folders->setAutoDelete( true );
150 login(); 150 login();
151 if (!m_imap) { 151 if (!m_imap) {
152 return folders; 152 return folders;
153 } 153 }
154 154
155/* 155/*
156 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 156 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
157 * We must not forget to filter them out in next loop! 157 * We must not forget to filter them out in next loop!
158 * it seems like ugly code. and yes - it is ugly code. but the best way. 158 * it seems like ugly code. and yes - it is ugly code. but the best way.
159 */ 159 */
160 QString temp; 160 QString temp;
161 mask = "INBOX" ; 161 mask = "INBOX" ;
162 result = clist_new(); 162 result = clist_new();
163 mailimap_mailbox_list *list; 163 mailimap_mailbox_list *list;
164 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); 164 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result );
165 if ( err == MAILIMAP_NO_ERROR ) { 165 if ( err == MAILIMAP_NO_ERROR ) {
166 current = result->first; 166 current = result->first;
167 for ( int i = result->count; i > 0; i-- ) { 167 for ( int i = result->count; i > 0; i-- ) {
168 list = (mailimap_mailbox_list *) current->data; 168 list = (mailimap_mailbox_list *) current->data;
169 // it is better use the deep copy mechanism of qt itself 169 // it is better use the deep copy mechanism of qt itself
170 // instead of using strdup! 170 // instead of using strdup!
171 temp = list->mb_name; 171 temp = list->mb_name;
172 folders->append( new IMAPFolder(temp)); 172 folders->append( new IMAPFolder(temp));
173 current = current->next; 173 current = current->next;
174 } 174 }
175 } else { 175 } else {
176 qDebug("error fetching folders: %s",m_imap->imap_response); 176 qDebug("error fetching folders: %s",m_imap->imap_response);
177 } 177 }
178 mailimap_list_result_free( result ); 178 mailimap_list_result_free( result );
179 179
180/* 180/*
181 * second stage - get the other then inbox folders 181 * second stage - get the other then inbox folders
182 */ 182 */
183 mask = "*" ; 183 mask = "*" ;
184 path = account->getPrefix().latin1(); 184 path = account->getPrefix().latin1();
185 if (!path) path = ""; 185 if (!path) path = "";
186 result = clist_new(); 186 result = clist_new();
187 qDebug(path); 187 qDebug(path);
188 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result ); 188 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result );
189 if ( err == MAILIMAP_NO_ERROR ) { 189 if ( err == MAILIMAP_NO_ERROR ) {
190 current = result->first; 190 current = result->first;
191 for ( int i = result->count; i > 0; i-- ) { 191 for ( int i = result->count; i > 0; i-- ) {
192 list = (mailimap_mailbox_list *) current->data; 192 list = (mailimap_mailbox_list *) current->data;
193 // it is better use the deep copy mechanism of qt itself 193 // it is better use the deep copy mechanism of qt itself
194 // instead of using strdup! 194 // instead of using strdup!
195 temp = list->mb_name; 195 temp = list->mb_name;
196 current = current->next; 196 current = current->next;
197 if (temp.lower()=="inbox") 197 if (temp.lower()=="inbox")
198 continue; 198 continue;
199 folders->append(new IMAPFolder(temp)); 199 folders->append(new IMAPFolder(temp));
200 200
201 } 201 }
202 } else { 202 } else {
203 qDebug("error fetching folders %s",m_imap->imap_response); 203 qDebug("error fetching folders %s",m_imap->imap_response);
204 } 204 }
205 mailimap_list_result_free( result ); 205 mailimap_list_result_free( result );
206 return folders; 206 return folders;
207} 207}
208 208
209RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att) 209RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
210{ 210{
211 RecMail * m = 0; 211 RecMail * m = 0;
212 mailimap_msg_att_item *item=0; 212 mailimap_msg_att_item *item=0;
213 clistcell *current,*c,*cf; 213 clistcell *current,*c,*cf;
214 mailimap_msg_att_dynamic*flist; 214 mailimap_msg_att_dynamic*flist;
215 mailimap_flag_fetch*cflag; 215 mailimap_flag_fetch*cflag;
216 int size; 216 int size;
217 QBitArray mFlags(7); 217 QBitArray mFlags(7);
218 QStringList addresslist; 218 QStringList addresslist;
219 219
220 if (!m_att) { 220 if (!m_att) {
221 return m; 221 return m;
222 } 222 }
223 m = new RecMail(); 223 m = new RecMail();
224 for (c = clist_begin(m_att->att_list); c!=NULL;c=clist_next(c) ) { 224 for (c = clist_begin(m_att->att_list); c!=NULL;c=clist_next(c) ) {
225 current = c; 225 current = c;
226 size = 0; 226 size = 0;
227 item = (mailimap_msg_att_item*)current->data; 227 item = (mailimap_msg_att_item*)current->data;
228 if (item->att_type!=MAILIMAP_MSG_ATT_ITEM_STATIC) { 228 if (item->att_type!=MAILIMAP_MSG_ATT_ITEM_STATIC) {
229 flist = (mailimap_msg_att_dynamic*)item->att_data.att_dyn; 229 flist = (mailimap_msg_att_dynamic*)item->att_data.att_dyn;
230 if (!flist->att_list) { 230 if (!flist->att_list) {
231 continue; 231 continue;
232 } 232 }
233 cf = flist->att_list->first; 233 cf = flist->att_list->first;
234 for (cf = clist_begin(flist->att_list); cf!=NULL; cf = clist_next(cf)) { 234 for (cf = clist_begin(flist->att_list); cf!=NULL; cf = clist_next(cf)) {
235 cflag = (mailimap_flag_fetch*)cf->data; 235 cflag = (mailimap_flag_fetch*)cf->data;
236 if (cflag->fl_type==MAILIMAP_FLAG_FETCH_OTHER && cflag->fl_flag!=0) { 236 if (cflag->fl_type==MAILIMAP_FLAG_FETCH_OTHER && cflag->fl_flag!=0) {
237 switch (cflag->fl_flag->fl_type) { 237 switch (cflag->fl_flag->fl_type) {
238 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */ 238 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */
239 mFlags.setBit(FLAG_ANSWERED); 239 mFlags.setBit(FLAG_ANSWERED);
240 break; 240 break;
241 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */ 241 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */
242 mFlags.setBit(FLAG_FLAGGED); 242 mFlags.setBit(FLAG_FLAGGED);
243 break; 243 break;
244 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */ 244 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */
245 mFlags.setBit(FLAG_DELETED); 245 mFlags.setBit(FLAG_DELETED);
246 break; 246 break;
247 case MAILIMAP_FLAG_SEEN: /* \Seen flag */ 247 case MAILIMAP_FLAG_SEEN: /* \Seen flag */
248 mFlags.setBit(FLAG_SEEN); 248 mFlags.setBit(FLAG_SEEN);
249 break; 249 break;
250 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */ 250 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */
251 mFlags.setBit(FLAG_DRAFT); 251 mFlags.setBit(FLAG_DRAFT);
252 break; 252 break;
253 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */ 253 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */
254 break; 254 break;
255 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */ 255 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */
256 break; 256 break;
257 default: 257 default:
258 break; 258 break;
259 } 259 }
260 } else if (cflag->fl_type==MAILIMAP_FLAG_FETCH_RECENT) { 260 } else if (cflag->fl_type==MAILIMAP_FLAG_FETCH_RECENT) {
261 mFlags.setBit(FLAG_RECENT); 261 mFlags.setBit(FLAG_RECENT);
262 } 262 }
263 } 263 }
264 continue; 264 continue;
265 } 265 }
266 if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_ENVELOPE) { 266 if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_ENVELOPE) {
267 mailimap_envelope * head = item->att_data.att_static->att_data.att_env; 267 mailimap_envelope * head = item->att_data.att_static->att_data.att_env;
268 m->setDate(head->env_date); 268 m->setDate(head->env_date);
269 m->setSubject(head->env_subject); 269 m->setSubject(head->env_subject);
270 if (head->env_from!=NULL) { 270 if (head->env_from!=NULL) {
271 addresslist = address_list_to_stringlist(head->env_from->frm_list); 271 addresslist = address_list_to_stringlist(head->env_from->frm_list);
272 if (addresslist.count()) { 272 if (addresslist.count()) {
273 m->setFrom(addresslist.first()); 273 m->setFrom(addresslist.first());
274 } 274 }
275 } 275 }
276 if (head->env_to!=NULL) { 276 if (head->env_to!=NULL) {
277 addresslist = address_list_to_stringlist(head->env_to->to_list); 277 addresslist = address_list_to_stringlist(head->env_to->to_list);
278 m->setTo(addresslist); 278 m->setTo(addresslist);
279 } 279 }
280 if (head->env_cc!=NULL) { 280 if (head->env_cc!=NULL) {
281 addresslist = address_list_to_stringlist(head->env_cc->cc_list); 281 addresslist = address_list_to_stringlist(head->env_cc->cc_list);
282 m->setCC(addresslist); 282 m->setCC(addresslist);
283 } 283 }
284 if (head->env_bcc!=NULL) { 284 if (head->env_bcc!=NULL) {
285 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list); 285 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list);
286 m->setBcc(addresslist); 286 m->setBcc(addresslist);
287 } 287 }
288 if (head->env_reply_to!=NULL) { 288 if (head->env_reply_to!=NULL) {
289 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list); 289 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list);
290 if (addresslist.count()) { 290 if (addresslist.count()) {
291 m->setReplyto(addresslist.first()); 291 m->setReplyto(addresslist.first());
292 } 292 }
293 } 293 }
294 m->setMsgid(QString(head->env_message_id)); 294 m->setMsgid(QString(head->env_message_id));
295 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) { 295 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) {
296 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date; 296 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date;
297 QDateTime da(QDate(d->dt_year,d->dt_month,d->dt_day),QTime(d->dt_hour,d->dt_min,d->dt_sec)); 297 QDateTime da(QDate(d->dt_year,d->dt_month,d->dt_day),QTime(d->dt_hour,d->dt_min,d->dt_sec));
298 qDebug("%i %i %i - %i %i %i",d->dt_year,d->dt_month,d->dt_day,d->dt_hour,d->dt_min,d->dt_sec); 298 qDebug("%i %i %i - %i %i %i",d->dt_year,d->dt_month,d->dt_day,d->dt_hour,d->dt_min,d->dt_sec);
299 qDebug(da.toString()); 299 qDebug(da.toString());
300 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_RFC822_SIZE) { 300 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_RFC822_SIZE) {
301 size = item->att_data.att_static->att_data.att_rfc822_size; 301 size = item->att_data.att_static->att_data.att_rfc822_size;
302 } 302 }
303 } 303 }
304 /* msg is already deleted */ 304 /* msg is already deleted */
305 if (mFlags.testBit(FLAG_DELETED) && m) { 305 if (mFlags.testBit(FLAG_DELETED) && m) {
306 delete m; 306 delete m;
307 m = 0; 307 m = 0;
308 } 308 }
309 if (m) { 309 if (m) {
310 m->setFlags(mFlags); 310 m->setFlags(mFlags);
311 m->setMsgsize(size); 311 m->setMsgsize(size);
312 } 312 }
313 return m; 313 return m;
314} 314}
315 315
316RecBody IMAPwrapper::fetchBody(const RecMail&mail) 316RecBody IMAPwrapper::fetchBody(const RecMail&mail)
317{ 317{
318 RecBody body; 318 RecBody body;
319 const char *mb; 319 const char *mb;
320 int err = MAILIMAP_NO_ERROR; 320 int err = MAILIMAP_NO_ERROR;
321 clist *result; 321 clist *result;
322 clistcell *current; 322 clistcell *current;
323 mailimap_fetch_att *fetchAtt; 323 mailimap_fetch_att *fetchAtt;
324 mailimap_fetch_type *fetchType; 324 mailimap_fetch_type *fetchType;
325 mailimap_set *set; 325 mailimap_set *set;
326 mailimap_body*body_desc; 326 mailimap_body*body_desc;
327 327
328 mb = mail.getMbox().latin1(); 328 mb = mail.getMbox().latin1();
329 329
330 login(); 330 login();
331 if (!m_imap) { 331 if (!m_imap) {
332 return body; 332 return body;
333 } 333 }
334 /* select mailbox READONLY for operations */ 334
335 err = mailimap_examine( m_imap, (char*)mb); 335 err = mailimap_select( m_imap, (char*)mb);
336 if ( err != MAILIMAP_NO_ERROR ) { 336 if ( err != MAILIMAP_NO_ERROR ) {
337 qDebug("error selecting mailbox: %s",m_imap->imap_response); 337 qDebug("error selecting mailbox: %s",m_imap->imap_response);
338 return body; 338 return body;
339 } 339 }
340 340
341 result = clist_new(); 341 result = clist_new();
342 /* the range has to start at 1!!! not with 0!!!! */ 342 /* the range has to start at 1!!! not with 0!!!! */
343 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); 343 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() );
344 fetchAtt = mailimap_fetch_att_new_bodystructure(); 344 fetchAtt = mailimap_fetch_att_new_bodystructure();
345 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 345 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
346 err = mailimap_fetch( m_imap, set, fetchType, &result ); 346 err = mailimap_fetch( m_imap, set, fetchType, &result );
347 mailimap_set_free( set ); 347 mailimap_set_free( set );
348 mailimap_fetch_type_free( fetchType ); 348 mailimap_fetch_type_free( fetchType );
349 349
350 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 350 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
351 mailimap_msg_att * msg_att; 351 mailimap_msg_att * msg_att;
352 msg_att = (mailimap_msg_att*)current->data; 352 msg_att = (mailimap_msg_att*)current->data;
353 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->att_list->first->data; 353 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->att_list->first->data;
354 body_desc = item->att_data.att_static->att_data.att_body; 354 body_desc = item->att_data.att_static->att_data.att_body;
355 if (body_desc->bd_type==MAILIMAP_BODY_1PART) { 355 if (body_desc->bd_type==MAILIMAP_BODY_1PART) {
356 searchBodyText(mail,body_desc->bd_data.bd_body_1part,body); 356 searchBodyText(mail,body_desc->bd_data.bd_body_1part,body);
357 } else if (body_desc->bd_type==MAILIMAP_BODY_MPART) { 357 } else if (body_desc->bd_type==MAILIMAP_BODY_MPART) {
358 qDebug("Mulitpart mail"); 358 qDebug("Mulitpart mail");
359 searchBodyText(mail,body_desc->bd_data.bd_body_mpart,body); 359 searchBodyText(mail,body_desc->bd_data.bd_body_mpart,body);
360 } 360 }
361 } else { 361 } else {
362 qDebug("error fetching body: %s",m_imap->imap_response); 362 qDebug("error fetching body: %s",m_imap->imap_response);
363 } 363 }
364 mailimap_fetch_list_free(result); 364 mailimap_fetch_list_free(result);
365 return body; 365 return body;
366} 366}
367 367
368/* this routine is just called when the mail has only ONE part. 368/* this routine is just called when the mail has only ONE part.
369 for filling the parts of a multi-part-message there are other 369 for filling the parts of a multi-part-message there are other
370 routines 'cause we can not simply fetch the whole body. */ 370 routines 'cause we can not simply fetch the whole body. */
371void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body) 371void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body)
372{ 372{
373 if (!mailDescription) { 373 if (!mailDescription) {
374 return; 374 return;
375 } 375 }
376 QString sub,body_text; 376 QString sub,body_text;
377 RecPart singlePart; 377 RecPart singlePart;
378 QValueList<int> path; 378 QValueList<int> path;
379 fillSinglePart(singlePart,mailDescription); 379 fillSinglePart(singlePart,mailDescription);
380 switch (mailDescription->bd_type) { 380 switch (mailDescription->bd_type) {
381 case MAILIMAP_BODY_TYPE_1PART_MSG: 381 case MAILIMAP_BODY_TYPE_1PART_MSG:
382 path.append(1); 382 path.append(1);
383 body_text = fetchPart(mail,path,true); 383 body_text = fetchPart(mail,path,true);
384 target_body.setBodytext(body_text); 384 target_body.setBodytext(body_text);
385 target_body.setDescription(singlePart); 385 target_body.setDescription(singlePart);
386 break; 386 break;
387 case MAILIMAP_BODY_TYPE_1PART_TEXT: 387 case MAILIMAP_BODY_TYPE_1PART_TEXT:
388 qDebug("Mediatype single: %s",mailDescription->bd_data.bd_type_text->bd_media_text); 388 qDebug("Mediatype single: %s",mailDescription->bd_data.bd_type_text->bd_media_text);
389 path.append(1); 389 path.append(1);
390 body_text = fetchPart(mail,path,true); 390 body_text = fetchPart(mail,path,true);
391 target_body.setBodytext(body_text); 391 target_body.setBodytext(body_text);
392 target_body.setDescription(singlePart); 392 target_body.setDescription(singlePart);
393 break; 393 break;
394 case MAILIMAP_BODY_TYPE_1PART_BASIC: 394 case MAILIMAP_BODY_TYPE_1PART_BASIC:
395 qDebug("Single attachment"); 395 qDebug("Single attachment");
396 target_body.setBodytext(""); 396 target_body.setBodytext("");
397 target_body.addPart(singlePart); 397 target_body.addPart(singlePart);
398 break; 398 break;
399 default: 399 default:
400 break; 400 break;
401 } 401 }
402 402
403 return; 403 return;
404} 404}
405 405
406QStringList IMAPwrapper::address_list_to_stringlist(clist*list) 406QStringList IMAPwrapper::address_list_to_stringlist(clist*list)
407{ 407{
408 QStringList l; 408 QStringList l;
409 QString from; 409 QString from;
410 bool named_from; 410 bool named_from;
411 clistcell *current = NULL; 411 clistcell *current = NULL;
412 mailimap_address * current_address=NULL; 412 mailimap_address * current_address=NULL;
413 if (!list) { 413 if (!list) {
414 return l; 414 return l;
415 } 415 }
416 unsigned int count = 0; 416 unsigned int count = 0;
417 for (current=clist_begin(list);current!= NULL;current=clist_next(current)) { 417 for (current=clist_begin(list);current!= NULL;current=clist_next(current)) {
418 from = ""; 418 from = "";
419 named_from = false; 419 named_from = false;
420 current_address=(mailimap_address*)current->data; 420 current_address=(mailimap_address*)current->data;
421 if (current_address->ad_personal_name){ 421 if (current_address->ad_personal_name){
422 from+=QString(current_address->ad_personal_name); 422 from+=QString(current_address->ad_personal_name);
423 from+=" "; 423 from+=" ";
424 named_from = true; 424 named_from = true;
425 } 425 }
426 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) { 426 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) {
427 from+="<"; 427 from+="<";
428 } 428 }
429 if (current_address->ad_mailbox_name) { 429 if (current_address->ad_mailbox_name) {
430 from+=QString(current_address->ad_mailbox_name); 430 from+=QString(current_address->ad_mailbox_name);
431 from+="@"; 431 from+="@";
432 } 432 }
433 if (current_address->ad_host_name) { 433 if (current_address->ad_host_name) {
434 from+=QString(current_address->ad_host_name); 434 from+=QString(current_address->ad_host_name);
435 } 435 }
436 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) { 436 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) {
437 from+=">"; 437 from+=">";
438 } 438 }
439 l.append(QString(from)); 439 l.append(QString(from));
440 if (++count > 99) { 440 if (++count > 99) {
441 break; 441 break;
442 } 442 }
443 } 443 }
444 return l; 444 return l;
445} 445}
446 446
447QString IMAPwrapper::fetchPart(const RecMail&mail,const QValueList<int>&path,bool internal_call) 447QString IMAPwrapper::fetchPart(const RecMail&mail,const QValueList<int>&path,bool internal_call)
448{ 448{
449 QString body(""); 449 QString body("");
450 const char*mb; 450 const char*mb;
451 int err; 451 int err;
452 mailimap_fetch_type *fetchType; 452 mailimap_fetch_type *fetchType;
453 mailimap_set *set; 453 mailimap_set *set;
454 clistcell*current,*cur; 454 clistcell*current,*cur;
455 455
456 login(); 456 login();
457 if (!m_imap) { 457 if (!m_imap) {
458 return body; 458 return body;
459 } 459 }
460 if (!internal_call) { 460 if (!internal_call) {
461 mb = mail.getMbox().latin1(); 461 mb = mail.getMbox().latin1();
462 /* select mailbox READONLY for operations */ 462 err = mailimap_select( m_imap, (char*)mb);
463 err = mailimap_examine( m_imap, (char*)mb);
464 if ( err != MAILIMAP_NO_ERROR ) { 463 if ( err != MAILIMAP_NO_ERROR ) {
465 qDebug("error selecting mailbox: %s",m_imap->imap_response); 464 qDebug("error selecting mailbox: %s",m_imap->imap_response);
466 return body; 465 return body;
467 } 466 }
468 } 467 }
469 set = mailimap_set_new_single(mail.getNumber()); 468 set = mailimap_set_new_single(mail.getNumber());
470 clist*id_list=clist_new(); 469 clist*id_list=clist_new();
471 for (unsigned j=0; j < path.count();++j) { 470 for (unsigned j=0; j < path.count();++j) {
472 uint32_t * p_id = (uint32_t *)malloc(sizeof(*p_id)); 471 uint32_t * p_id = (uint32_t *)malloc(sizeof(*p_id));
473 *p_id = path[j]; 472 *p_id = path[j];
474 clist_append(id_list,p_id); 473 clist_append(id_list,p_id);
475 } 474 }
476 mailimap_section_part * section_part = mailimap_section_part_new(id_list); 475 mailimap_section_part * section_part = mailimap_section_part_new(id_list);
477 mailimap_section_spec * section_spec = mailimap_section_spec_new(MAILIMAP_SECTION_SPEC_SECTION_PART, NULL, section_part, NULL); 476 mailimap_section_spec * section_spec = mailimap_section_spec_new(MAILIMAP_SECTION_SPEC_SECTION_PART, NULL, section_part, NULL);
478 mailimap_section * section = mailimap_section_new(section_spec); 477 mailimap_section * section = mailimap_section_new(section_spec);
479 mailimap_fetch_att * fetch_att = mailimap_fetch_att_new_body_section(section); 478 mailimap_fetch_att * fetch_att = mailimap_fetch_att_new_body_section(section);
480 479
481 fetchType = mailimap_fetch_type_new_fetch_att(fetch_att); 480 fetchType = mailimap_fetch_type_new_fetch_att(fetch_att);
482 481
483 clist*result = clist_new(); 482 clist*result = clist_new();
484 483
485 err = mailimap_fetch( m_imap, set, fetchType, &result ); 484 err = mailimap_fetch( m_imap, set, fetchType, &result );
486 mailimap_set_free( set ); 485 mailimap_set_free( set );
487 mailimap_fetch_type_free( fetchType ); 486 mailimap_fetch_type_free( fetchType );
488 487
489 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 488 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
490 mailimap_msg_att * msg_att; 489 mailimap_msg_att * msg_att;
491 msg_att = (mailimap_msg_att*)current->data; 490 msg_att = (mailimap_msg_att*)current->data;
492 mailimap_msg_att_item*msg_att_item; 491 mailimap_msg_att_item*msg_att_item;
493 for(cur = clist_begin(msg_att->att_list) ; cur != NULL ; cur = clist_next(cur)) { 492 for(cur = clist_begin(msg_att->att_list) ; cur != NULL ; cur = clist_next(cur)) {
494 msg_att_item = (mailimap_msg_att_item*)clist_content(cur); 493 msg_att_item = (mailimap_msg_att_item*)clist_content(cur);
495 if (msg_att_item->att_type == MAILIMAP_MSG_ATT_ITEM_STATIC) { 494 if (msg_att_item->att_type == MAILIMAP_MSG_ATT_ITEM_STATIC) {
496 if (msg_att_item->att_data.att_static->att_type == MAILIMAP_MSG_ATT_BODY_SECTION) { 495 if (msg_att_item->att_data.att_static->att_type == MAILIMAP_MSG_ATT_BODY_SECTION) {
497 char*text = msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part; 496 char*text = msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part;
498 msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part = 0L; 497 msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part = 0L;
499 if (text) { 498 if (text) {
500 body = QString(text); 499 body = QString(text);
501 free(text); 500 free(text);
502 } else { 501 } else {
503 body = ""; 502 body = "";
504 } 503 }
505 } 504 }
506 } 505 }
507 } 506 }
508 507
509 } else { 508 } else {
510 qDebug("error fetching text: %s",m_imap->imap_response); 509 qDebug("error fetching text: %s",m_imap->imap_response);
511 } 510 }
512 mailimap_fetch_list_free(result); 511 mailimap_fetch_list_free(result);
513 return body; 512 return body;
514} 513}
515 514
516void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_mpart*mailDescription,RecBody&target_body,int current_recursion,QValueList<int>recList) 515void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_mpart*mailDescription,RecBody&target_body,int current_recursion,QValueList<int>recList)
517{ 516{
518 /* current_recursion is for avoiding ugly mails which has a to deep body-structure */ 517 /* current_recursion is for avoiding ugly mails which has a to deep body-structure */
519 if (!mailDescription||current_recursion==10) { 518 if (!mailDescription||current_recursion==10) {
520 return; 519 return;
521 } 520 }
522 clistcell*current; 521 clistcell*current;
523 mailimap_body*current_body; 522 mailimap_body*current_body;
524 unsigned int count = 0; 523 unsigned int count = 0;
525 for (current=clist_begin(mailDescription->bd_list);current!=0;current=clist_next(current)) { 524 for (current=clist_begin(mailDescription->bd_list);current!=0;current=clist_next(current)) {
526 /* the point in the message */ 525 /* the point in the message */
527 ++count; 526 ++count;
528 current_body = (mailimap_body*)current->data; 527 current_body = (mailimap_body*)current->data;
529 if (current_body->bd_type==MAILIMAP_BODY_MPART) { 528 if (current_body->bd_type==MAILIMAP_BODY_MPART) {
530 QValueList<int>clist = recList; 529 QValueList<int>clist = recList;
531 clist.append(count); 530 clist.append(count);
532 searchBodyText(mail,current_body->bd_data.bd_body_mpart,target_body,current_recursion+1,clist); 531 searchBodyText(mail,current_body->bd_data.bd_body_mpart,target_body,current_recursion+1,clist);
533 } else if (current_body->bd_type==MAILIMAP_BODY_1PART){ 532 } else if (current_body->bd_type==MAILIMAP_BODY_1PART){
534 RecPart currentPart; 533 RecPart currentPart;
535 fillSinglePart(currentPart,current_body->bd_data.bd_body_1part); 534 fillSinglePart(currentPart,current_body->bd_data.bd_body_1part);
536 QValueList<int>clist = recList; 535 QValueList<int>clist = recList;
537 clist.append(count); 536 clist.append(count);
538 /* important: Check for is NULL 'cause a body can be empty! */ 537 /* important: Check for is NULL 'cause a body can be empty! */
539 if (currentPart.Type()=="text" && target_body.Bodytext().isNull() ) { 538 if (currentPart.Type()=="text" && target_body.Bodytext().isNull() ) {
540 QString body_text = fetchPart(mail,clist,true); 539 QString body_text = fetchPart(mail,clist,true);
541 target_body.setDescription(currentPart); 540 target_body.setDescription(currentPart);
542 target_body.setBodytext(body_text); 541 target_body.setBodytext(body_text);
543 } else { 542 } else {
544 QString id(""); 543 QString id("");
545 for (unsigned int j = 0; j < clist.count();++j) { 544 for (unsigned int j = 0; j < clist.count();++j) {
546 id+=(j>0?" ":""); 545 id+=(j>0?" ":"");
547 id+=QString("%1").arg(clist[j]); 546 id+=QString("%1").arg(clist[j]);
548 } 547 }
549 qDebug("ID= %s",id.latin1()); 548 qDebug("ID= %s",id.latin1());
550 currentPart.setIdentifier(id); 549 currentPart.setIdentifier(id);
551 currentPart.setPositionlist(clist); 550 currentPart.setPositionlist(clist);
552 target_body.addPart(currentPart); 551 target_body.addPart(currentPart);
553 } 552 }
554 } 553 }
555 } 554 }
556} 555}
557 556
558void IMAPwrapper::fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description) 557void IMAPwrapper::fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description)
559{ 558{
560 if (!Description) { 559 if (!Description) {
561 return; 560 return;
562 } 561 }
563 switch (Description->bd_type) { 562 switch (Description->bd_type) {
564 case MAILIMAP_BODY_TYPE_1PART_TEXT: 563 case MAILIMAP_BODY_TYPE_1PART_TEXT:
565 target_part.setType("text"); 564 target_part.setType("text");
566 fillSingleTextPart(target_part,Description->bd_data.bd_type_text); 565 fillSingleTextPart(target_part,Description->bd_data.bd_type_text);
567 break; 566 break;
568 case MAILIMAP_BODY_TYPE_1PART_BASIC: 567 case MAILIMAP_BODY_TYPE_1PART_BASIC:
569 fillSingleBasicPart(target_part,Description->bd_data.bd_type_basic); 568 fillSingleBasicPart(target_part,Description->bd_data.bd_type_basic);
570 break; 569 break;
571 case MAILIMAP_BODY_TYPE_1PART_MSG: 570 case MAILIMAP_BODY_TYPE_1PART_MSG:
572 fillSingleMsgPart(target_part,Description->bd_data.bd_type_msg); 571 fillSingleMsgPart(target_part,Description->bd_data.bd_type_msg);
573 break; 572 break;
574 default: 573 default:
575 break; 574 break;
576 } 575 }
577} 576}
578 577
579void IMAPwrapper::fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which) 578void IMAPwrapper::fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which)
580{ 579{
581 if (!which) { 580 if (!which) {
582 return; 581 return;
583 } 582 }
584 QString sub; 583 QString sub;
585 sub = which->bd_media_text; 584 sub = which->bd_media_text;
586 target_part.setSubtype(sub.lower()); 585 target_part.setSubtype(sub.lower());
587 target_part.setLines(which->bd_lines); 586 target_part.setLines(which->bd_lines);
588 fillBodyFields(target_part,which->bd_fields); 587 fillBodyFields(target_part,which->bd_fields);
589} 588}
590 589
591void IMAPwrapper::fillSingleMsgPart(RecPart&target_part,mailimap_body_type_msg*which) 590void IMAPwrapper::fillSingleMsgPart(RecPart&target_part,mailimap_body_type_msg*which)
592{ 591{
593 if (!which) { 592 if (!which) {
594 return; 593 return;
595 } 594 }
596// QString sub; 595// QString sub;
597// sub = which->bd_media_text; 596// sub = which->bd_media_text;
598// target_part.setSubtype(sub.lower()); 597// target_part.setSubtype(sub.lower());
599 qDebug("Message part"); 598 qDebug("Message part");
600 /* we set this type to text/plain */ 599 /* we set this type to text/plain */
601 target_part.setType("text"); 600 target_part.setType("text");
602 target_part.setSubtype("plain"); 601 target_part.setSubtype("plain");
603 target_part.setLines(which->bd_lines); 602 target_part.setLines(which->bd_lines);
604 fillBodyFields(target_part,which->bd_fields); 603 fillBodyFields(target_part,which->bd_fields);
605} 604}
606 605
607void IMAPwrapper::fillSingleBasicPart(RecPart&target_part,mailimap_body_type_basic*which) 606void IMAPwrapper::fillSingleBasicPart(RecPart&target_part,mailimap_body_type_basic*which)
608{ 607{
609 if (!which) { 608 if (!which) {
610 return; 609 return;
611 } 610 }
612 QString type,sub; 611 QString type,sub;
613 switch (which->bd_media_basic->med_type) { 612 switch (which->bd_media_basic->med_type) {
614 case MAILIMAP_MEDIA_BASIC_APPLICATION: 613 case MAILIMAP_MEDIA_BASIC_APPLICATION:
615 type = "application"; 614 type = "application";
616 break; 615 break;
617 case MAILIMAP_MEDIA_BASIC_AUDIO: 616 case MAILIMAP_MEDIA_BASIC_AUDIO:
618 type = "audio"; 617 type = "audio";
619 break; 618 break;
620 case MAILIMAP_MEDIA_BASIC_IMAGE: 619 case MAILIMAP_MEDIA_BASIC_IMAGE:
621 type = "image"; 620 type = "image";
622 break; 621 break;
623 case MAILIMAP_MEDIA_BASIC_MESSAGE: 622 case MAILIMAP_MEDIA_BASIC_MESSAGE:
624 type = "message"; 623 type = "message";
625 break; 624 break;
626 case MAILIMAP_MEDIA_BASIC_VIDEO: 625 case MAILIMAP_MEDIA_BASIC_VIDEO:
627 type = "video"; 626 type = "video";
628 break; 627 break;
629 case MAILIMAP_MEDIA_BASIC_OTHER: 628 case MAILIMAP_MEDIA_BASIC_OTHER:
630 default: 629 default:
631 if (which->bd_media_basic->med_basic_type) { 630 if (which->bd_media_basic->med_basic_type) {
632 type = which->bd_media_basic->med_basic_type; 631 type = which->bd_media_basic->med_basic_type;
633 } else { 632 } else {
634 type = ""; 633 type = "";
635 } 634 }
636 break; 635 break;
637 } 636 }
638 if (which->bd_media_basic->med_subtype) { 637 if (which->bd_media_basic->med_subtype) {
639 sub = which->bd_media_basic->med_subtype; 638 sub = which->bd_media_basic->med_subtype;
640 } else { 639 } else {
641 sub = ""; 640 sub = "";
642 } 641 }
643 qDebug("Type = %s/%s",type.latin1(),sub.latin1()); 642 qDebug("Type = %s/%s",type.latin1(),sub.latin1());
644 target_part.setType(type.lower()); 643 target_part.setType(type.lower());
645 target_part.setSubtype(sub.lower()); 644 target_part.setSubtype(sub.lower());
646 fillBodyFields(target_part,which->bd_fields); 645 fillBodyFields(target_part,which->bd_fields);
647} 646}
648 647
649void IMAPwrapper::fillBodyFields(RecPart&target_part,mailimap_body_fields*which) 648void IMAPwrapper::fillBodyFields(RecPart&target_part,mailimap_body_fields*which)
650{ 649{
651 if (!which) return; 650 if (!which) return;
652 if (which->bd_parameter && which->bd_parameter->pa_list && which->bd_parameter->pa_list->count>0) { 651 if (which->bd_parameter && which->bd_parameter->pa_list && which->bd_parameter->pa_list->count>0) {
653 clistcell*cur; 652 clistcell*cur;
654 mailimap_single_body_fld_param*param=0; 653 mailimap_single_body_fld_param*param=0;
655 for (cur = clist_begin(which->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) { 654 for (cur = clist_begin(which->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) {
656 param = (mailimap_single_body_fld_param*)cur->data; 655 param = (mailimap_single_body_fld_param*)cur->data;
657 if (param) { 656 if (param) {
658 target_part.addParameter(QString(param->pa_name).lower(),QString(param->pa_value)); 657 target_part.addParameter(QString(param->pa_name).lower(),QString(param->pa_value));
659 } 658 }
660 } 659 }
661 } 660 }
662 mailimap_body_fld_enc*enc = which->bd_encoding; 661 mailimap_body_fld_enc*enc = which->bd_encoding;
663 QString encoding(""); 662 QString encoding("");
664 switch (enc->enc_type) { 663 switch (enc->enc_type) {
665 case MAILIMAP_BODY_FLD_ENC_7BIT: 664 case MAILIMAP_BODY_FLD_ENC_7BIT:
666 encoding = "7bit"; 665 encoding = "7bit";
667 break; 666 break;
668 case MAILIMAP_BODY_FLD_ENC_8BIT: 667 case MAILIMAP_BODY_FLD_ENC_8BIT:
669 encoding = "8bit"; 668 encoding = "8bit";
670 break; 669 break;
671 case MAILIMAP_BODY_FLD_ENC_BINARY: 670 case MAILIMAP_BODY_FLD_ENC_BINARY:
672 encoding="binary"; 671 encoding="binary";
673 break; 672 break;
674 case MAILIMAP_BODY_FLD_ENC_BASE64: 673 case MAILIMAP_BODY_FLD_ENC_BASE64:
675 encoding="base64"; 674 encoding="base64";
676 break; 675 break;
677 case MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE: 676 case MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE:
678 encoding="quoted-printable"; 677 encoding="quoted-printable";
679 break; 678 break;
680 case MAILIMAP_BODY_FLD_ENC_OTHER: 679 case MAILIMAP_BODY_FLD_ENC_OTHER:
681 default: 680 default:
682 if (enc->enc_value) { 681 if (enc->enc_value) {
683 char*t=enc->enc_value; 682 char*t=enc->enc_value;
684 encoding=QString(enc->enc_value); 683 encoding=QString(enc->enc_value);
685 enc->enc_value=0L; 684 enc->enc_value=0L;
686 free(t); 685 free(t);
687 } 686 }
688 } 687 }
689 target_part.setEncoding(encoding); 688 target_part.setEncoding(encoding);
690} 689}
691 690
692QString IMAPwrapper::fetchPart(const RecMail&mail,const RecPart&part) 691QString IMAPwrapper::fetchPart(const RecMail&mail,const RecPart&part)
693{ 692{
694 return fetchPart(mail,part.Positionlist(),false); 693 return fetchPart(mail,part.Positionlist(),false);
695} 694}
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
index 7b75ffa..3941cec 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
@@ -1,695 +1,694 @@
1 1
2#include <stdlib.h> 2#include <stdlib.h>
3 3
4#include "imapwrapper.h" 4#include "imapwrapper.h"
5#include "mailtypes.h" 5#include "mailtypes.h"
6#include <libetpan/mailimap.h> 6#include <libetpan/mailimap.h>
7 7
8IMAPwrapper::IMAPwrapper( IMAPaccount *a ) 8IMAPwrapper::IMAPwrapper( IMAPaccount *a )
9{ 9{
10 account = a; 10 account = a;
11 m_imap = 0; 11 m_imap = 0;
12} 12}
13 13
14IMAPwrapper::~IMAPwrapper() 14IMAPwrapper::~IMAPwrapper()
15{ 15{
16 logout(); 16 logout();
17} 17}
18 18
19void IMAPwrapper::imap_progress( size_t current, size_t maximum ) 19void IMAPwrapper::imap_progress( size_t current, size_t maximum )
20{ 20{
21 qDebug( "IMAP: %i of %i", current, maximum ); 21 qDebug( "IMAP: %i of %i", current, maximum );
22} 22}
23 23
24void IMAPwrapper::login() 24void IMAPwrapper::login()
25{ 25{
26 const char *server, *user, *pass; 26 const char *server, *user, *pass;
27 uint16_t port; 27 uint16_t port;
28 int err = MAILIMAP_NO_ERROR; 28 int err = MAILIMAP_NO_ERROR;
29 29
30 /* we are connected this moment */ 30 /* we are connected this moment */
31 /* TODO: setup a timer holding the line or if connection closed - delete the value */ 31 /* TODO: setup a timer holding the line or if connection closed - delete the value */
32 if (m_imap) { 32 if (m_imap) {
33 return; 33 return;
34 } 34 }
35 server = account->getServer().latin1(); 35 server = account->getServer().latin1();
36 port = account->getPort().toUInt(); 36 port = account->getPort().toUInt();
37 user = account->getUser().latin1(); 37 user = account->getUser().latin1();
38 pass = account->getPassword().latin1(); 38 pass = account->getPassword().latin1();
39 39
40 m_imap = mailimap_new( 20, &imap_progress ); 40 m_imap = mailimap_new( 20, &imap_progress );
41 /* connect */ 41 /* connect */
42 if (account->getSSL()) { 42 if (account->getSSL()) {
43 err = mailimap_ssl_connect( m_imap, (char*)server, port ); 43 err = mailimap_ssl_connect( m_imap, (char*)server, port );
44 } else { 44 } else {
45 err = mailimap_socket_connect( m_imap, (char*)server, port ); 45 err = mailimap_socket_connect( m_imap, (char*)server, port );
46 } 46 }
47 47
48 if ( err != MAILIMAP_NO_ERROR && 48 if ( err != MAILIMAP_NO_ERROR &&
49 err != MAILIMAP_NO_ERROR_AUTHENTICATED && 49 err != MAILIMAP_NO_ERROR_AUTHENTICATED &&
50 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { 50 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) {
51 qDebug("error connecting server: %s",m_imap->imap_response); 51 qDebug("error connecting server: %s",m_imap->imap_response);
52 mailimap_free( m_imap ); 52 mailimap_free( m_imap );
53 m_imap = 0; 53 m_imap = 0;
54 return; 54 return;
55 } 55 }
56 56
57 /* login */ 57 /* login */
58 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass ); 58 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass );
59 if ( err != MAILIMAP_NO_ERROR ) { 59 if ( err != MAILIMAP_NO_ERROR ) {
60 qDebug("error logging in imap: %s",m_imap->imap_response); 60 qDebug("error logging in imap: %s",m_imap->imap_response);
61 err = mailimap_close( m_imap ); 61 err = mailimap_close( m_imap );
62 mailimap_free( m_imap ); 62 mailimap_free( m_imap );
63 m_imap = 0; 63 m_imap = 0;
64 } 64 }
65} 65}
66 66
67void IMAPwrapper::logout() 67void IMAPwrapper::logout()
68{ 68{
69 int err = MAILIMAP_NO_ERROR; 69 int err = MAILIMAP_NO_ERROR;
70 if (!m_imap) return; 70 if (!m_imap) return;
71 err = mailimap_logout( m_imap ); 71 err = mailimap_logout( m_imap );
72 err = mailimap_close( m_imap ); 72 err = mailimap_close( m_imap );
73 mailimap_free( m_imap ); 73 mailimap_free( m_imap );
74 m_imap = 0; 74 m_imap = 0;
75} 75}
76 76
77void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target ) 77void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
78{ 78{
79 const char *mb; 79 const char *mb;
80 int err = MAILIMAP_NO_ERROR; 80 int err = MAILIMAP_NO_ERROR;
81 clist *result; 81 clist *result;
82 clistcell *current; 82 clistcell *current;
83// mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate,*fetchAttSize; 83// mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate,*fetchAttSize;
84 mailimap_fetch_type *fetchType; 84 mailimap_fetch_type *fetchType;
85 mailimap_set *set; 85 mailimap_set *set;
86 86
87 mb = mailbox.latin1(); 87 mb = mailbox.latin1();
88 login(); 88 login();
89 if (!m_imap) { 89 if (!m_imap) {
90 return; 90 return;
91 } 91 }
92 /* select mailbox READONLY for operations */ 92 /* select mailbox READONLY for operations */
93 err = mailimap_examine( m_imap, (char*)mb); 93 err = mailimap_examine( m_imap, (char*)mb);
94 if ( err != MAILIMAP_NO_ERROR ) { 94 if ( err != MAILIMAP_NO_ERROR ) {
95 qDebug("error selecting mailbox: %s",m_imap->imap_response); 95 qDebug("error selecting mailbox: %s",m_imap->imap_response);
96 return; 96 return;
97 } 97 }
98 98
99 int last = m_imap->imap_selection_info->sel_exists; 99 int last = m_imap->imap_selection_info->sel_exists;
100 100
101 if (last == 0) { 101 if (last == 0) {
102 qDebug("mailbox has no mails"); 102 qDebug("mailbox has no mails");
103 return; 103 return;
104 } 104 }
105 105
106 result = clist_new(); 106 result = clist_new();
107 /* the range has to start at 1!!! not with 0!!!! */ 107 /* the range has to start at 1!!! not with 0!!!! */
108 set = mailimap_set_new_interval( 1, last ); 108 set = mailimap_set_new_interval( 1, last );
109 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 109 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
110 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope()); 110 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope());
111 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags()); 111 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags());
112 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate()); 112 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate());
113 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size()); 113 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size());
114 114
115 err = mailimap_fetch( m_imap, set, fetchType, &result ); 115 err = mailimap_fetch( m_imap, set, fetchType, &result );
116 mailimap_set_free( set ); 116 mailimap_set_free( set );
117 mailimap_fetch_type_free( fetchType ); 117 mailimap_fetch_type_free( fetchType );
118 118
119 QString date,subject,from; 119 QString date,subject,from;
120 120
121 if ( err == MAILIMAP_NO_ERROR ) { 121 if ( err == MAILIMAP_NO_ERROR ) {
122 122
123 mailimap_msg_att * msg_att; 123 mailimap_msg_att * msg_att;
124 int i = 0; 124 int i = 0;
125 for (current = clist_begin(result); current != 0; current=clist_next(current)) { 125 for (current = clist_begin(result); current != 0; current=clist_next(current)) {
126 ++i; 126 ++i;
127 msg_att = (mailimap_msg_att*)current->data; 127 msg_att = (mailimap_msg_att*)current->data;
128 RecMail*m = parse_list_result(msg_att); 128 RecMail*m = parse_list_result(msg_att);
129 if (m) { 129 if (m) {
130 m->setNumber(i); 130 m->setNumber(i);
131 m->setMbox(mailbox); 131 m->setMbox(mailbox);
132 target.append(m); 132 target.append(m);
133 } 133 }
134 } 134 }
135 } else { 135 } else {
136 qDebug("Error fetching headers: %s",m_imap->imap_response); 136 qDebug("Error fetching headers: %s",m_imap->imap_response);
137 } 137 }
138 mailimap_fetch_list_free(result); 138 mailimap_fetch_list_free(result);
139} 139}
140 140
141QList<IMAPFolder>* IMAPwrapper::listFolders() 141QList<IMAPFolder>* IMAPwrapper::listFolders()
142{ 142{
143 const char *path, *mask; 143 const char *path, *mask;
144 int err = MAILIMAP_NO_ERROR; 144 int err = MAILIMAP_NO_ERROR;
145 clist *result; 145 clist *result;
146 clistcell *current; 146 clistcell *current;
147 147
148 QList<IMAPFolder> * folders = new QList<IMAPFolder>(); 148 QList<IMAPFolder> * folders = new QList<IMAPFolder>();
149 folders->setAutoDelete( true ); 149 folders->setAutoDelete( true );
150 login(); 150 login();
151 if (!m_imap) { 151 if (!m_imap) {
152 return folders; 152 return folders;
153 } 153 }
154 154
155/* 155/*
156 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 156 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
157 * We must not forget to filter them out in next loop! 157 * We must not forget to filter them out in next loop!
158 * it seems like ugly code. and yes - it is ugly code. but the best way. 158 * it seems like ugly code. and yes - it is ugly code. but the best way.
159 */ 159 */
160 QString temp; 160 QString temp;
161 mask = "INBOX" ; 161 mask = "INBOX" ;
162 result = clist_new(); 162 result = clist_new();
163 mailimap_mailbox_list *list; 163 mailimap_mailbox_list *list;
164 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); 164 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result );
165 if ( err == MAILIMAP_NO_ERROR ) { 165 if ( err == MAILIMAP_NO_ERROR ) {
166 current = result->first; 166 current = result->first;
167 for ( int i = result->count; i > 0; i-- ) { 167 for ( int i = result->count; i > 0; i-- ) {
168 list = (mailimap_mailbox_list *) current->data; 168 list = (mailimap_mailbox_list *) current->data;
169 // it is better use the deep copy mechanism of qt itself 169 // it is better use the deep copy mechanism of qt itself
170 // instead of using strdup! 170 // instead of using strdup!
171 temp = list->mb_name; 171 temp = list->mb_name;
172 folders->append( new IMAPFolder(temp)); 172 folders->append( new IMAPFolder(temp));
173 current = current->next; 173 current = current->next;
174 } 174 }
175 } else { 175 } else {
176 qDebug("error fetching folders: %s",m_imap->imap_response); 176 qDebug("error fetching folders: %s",m_imap->imap_response);
177 } 177 }
178 mailimap_list_result_free( result ); 178 mailimap_list_result_free( result );
179 179
180/* 180/*
181 * second stage - get the other then inbox folders 181 * second stage - get the other then inbox folders
182 */ 182 */
183 mask = "*" ; 183 mask = "*" ;
184 path = account->getPrefix().latin1(); 184 path = account->getPrefix().latin1();
185 if (!path) path = ""; 185 if (!path) path = "";
186 result = clist_new(); 186 result = clist_new();
187 qDebug(path); 187 qDebug(path);
188 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result ); 188 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result );
189 if ( err == MAILIMAP_NO_ERROR ) { 189 if ( err == MAILIMAP_NO_ERROR ) {
190 current = result->first; 190 current = result->first;
191 for ( int i = result->count; i > 0; i-- ) { 191 for ( int i = result->count; i > 0; i-- ) {
192 list = (mailimap_mailbox_list *) current->data; 192 list = (mailimap_mailbox_list *) current->data;
193 // it is better use the deep copy mechanism of qt itself 193 // it is better use the deep copy mechanism of qt itself
194 // instead of using strdup! 194 // instead of using strdup!
195 temp = list->mb_name; 195 temp = list->mb_name;
196 current = current->next; 196 current = current->next;
197 if (temp.lower()=="inbox") 197 if (temp.lower()=="inbox")
198 continue; 198 continue;
199 folders->append(new IMAPFolder(temp)); 199 folders->append(new IMAPFolder(temp));
200 200
201 } 201 }
202 } else { 202 } else {
203 qDebug("error fetching folders %s",m_imap->imap_response); 203 qDebug("error fetching folders %s",m_imap->imap_response);
204 } 204 }
205 mailimap_list_result_free( result ); 205 mailimap_list_result_free( result );
206 return folders; 206 return folders;
207} 207}
208 208
209RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att) 209RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
210{ 210{
211 RecMail * m = 0; 211 RecMail * m = 0;
212 mailimap_msg_att_item *item=0; 212 mailimap_msg_att_item *item=0;
213 clistcell *current,*c,*cf; 213 clistcell *current,*c,*cf;
214 mailimap_msg_att_dynamic*flist; 214 mailimap_msg_att_dynamic*flist;
215 mailimap_flag_fetch*cflag; 215 mailimap_flag_fetch*cflag;
216 int size; 216 int size;
217 QBitArray mFlags(7); 217 QBitArray mFlags(7);
218 QStringList addresslist; 218 QStringList addresslist;
219 219
220 if (!m_att) { 220 if (!m_att) {
221 return m; 221 return m;
222 } 222 }
223 m = new RecMail(); 223 m = new RecMail();
224 for (c = clist_begin(m_att->att_list); c!=NULL;c=clist_next(c) ) { 224 for (c = clist_begin(m_att->att_list); c!=NULL;c=clist_next(c) ) {
225 current = c; 225 current = c;
226 size = 0; 226 size = 0;
227 item = (mailimap_msg_att_item*)current->data; 227 item = (mailimap_msg_att_item*)current->data;
228 if (item->att_type!=MAILIMAP_MSG_ATT_ITEM_STATIC) { 228 if (item->att_type!=MAILIMAP_MSG_ATT_ITEM_STATIC) {
229 flist = (mailimap_msg_att_dynamic*)item->att_data.att_dyn; 229 flist = (mailimap_msg_att_dynamic*)item->att_data.att_dyn;
230 if (!flist->att_list) { 230 if (!flist->att_list) {
231 continue; 231 continue;
232 } 232 }
233 cf = flist->att_list->first; 233 cf = flist->att_list->first;
234 for (cf = clist_begin(flist->att_list); cf!=NULL; cf = clist_next(cf)) { 234 for (cf = clist_begin(flist->att_list); cf!=NULL; cf = clist_next(cf)) {
235 cflag = (mailimap_flag_fetch*)cf->data; 235 cflag = (mailimap_flag_fetch*)cf->data;
236 if (cflag->fl_type==MAILIMAP_FLAG_FETCH_OTHER && cflag->fl_flag!=0) { 236 if (cflag->fl_type==MAILIMAP_FLAG_FETCH_OTHER && cflag->fl_flag!=0) {
237 switch (cflag->fl_flag->fl_type) { 237 switch (cflag->fl_flag->fl_type) {
238 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */ 238 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */
239 mFlags.setBit(FLAG_ANSWERED); 239 mFlags.setBit(FLAG_ANSWERED);
240 break; 240 break;
241 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */ 241 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */
242 mFlags.setBit(FLAG_FLAGGED); 242 mFlags.setBit(FLAG_FLAGGED);
243 break; 243 break;
244 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */ 244 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */
245 mFlags.setBit(FLAG_DELETED); 245 mFlags.setBit(FLAG_DELETED);
246 break; 246 break;
247 case MAILIMAP_FLAG_SEEN: /* \Seen flag */ 247 case MAILIMAP_FLAG_SEEN: /* \Seen flag */
248 mFlags.setBit(FLAG_SEEN); 248 mFlags.setBit(FLAG_SEEN);
249 break; 249 break;
250 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */ 250 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */
251 mFlags.setBit(FLAG_DRAFT); 251 mFlags.setBit(FLAG_DRAFT);
252 break; 252 break;
253 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */ 253 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */
254 break; 254 break;
255 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */ 255 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */
256 break; 256 break;
257 default: 257 default:
258 break; 258 break;
259 } 259 }
260 } else if (cflag->fl_type==MAILIMAP_FLAG_FETCH_RECENT) { 260 } else if (cflag->fl_type==MAILIMAP_FLAG_FETCH_RECENT) {
261 mFlags.setBit(FLAG_RECENT); 261 mFlags.setBit(FLAG_RECENT);
262 } 262 }
263 } 263 }
264 continue; 264 continue;
265 } 265 }
266 if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_ENVELOPE) { 266 if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_ENVELOPE) {
267 mailimap_envelope * head = item->att_data.att_static->att_data.att_env; 267 mailimap_envelope * head = item->att_data.att_static->att_data.att_env;
268 m->setDate(head->env_date); 268 m->setDate(head->env_date);
269 m->setSubject(head->env_subject); 269 m->setSubject(head->env_subject);
270 if (head->env_from!=NULL) { 270 if (head->env_from!=NULL) {
271 addresslist = address_list_to_stringlist(head->env_from->frm_list); 271 addresslist = address_list_to_stringlist(head->env_from->frm_list);
272 if (addresslist.count()) { 272 if (addresslist.count()) {
273 m->setFrom(addresslist.first()); 273 m->setFrom(addresslist.first());
274 } 274 }
275 } 275 }
276 if (head->env_to!=NULL) { 276 if (head->env_to!=NULL) {
277 addresslist = address_list_to_stringlist(head->env_to->to_list); 277 addresslist = address_list_to_stringlist(head->env_to->to_list);
278 m->setTo(addresslist); 278 m->setTo(addresslist);
279 } 279 }
280 if (head->env_cc!=NULL) { 280 if (head->env_cc!=NULL) {
281 addresslist = address_list_to_stringlist(head->env_cc->cc_list); 281 addresslist = address_list_to_stringlist(head->env_cc->cc_list);
282 m->setCC(addresslist); 282 m->setCC(addresslist);
283 } 283 }
284 if (head->env_bcc!=NULL) { 284 if (head->env_bcc!=NULL) {
285 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list); 285 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list);
286 m->setBcc(addresslist); 286 m->setBcc(addresslist);
287 } 287 }
288 if (head->env_reply_to!=NULL) { 288 if (head->env_reply_to!=NULL) {
289 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list); 289 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list);
290 if (addresslist.count()) { 290 if (addresslist.count()) {
291 m->setReplyto(addresslist.first()); 291 m->setReplyto(addresslist.first());
292 } 292 }
293 } 293 }
294 m->setMsgid(QString(head->env_message_id)); 294 m->setMsgid(QString(head->env_message_id));
295 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) { 295 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) {
296 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date; 296 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date;
297 QDateTime da(QDate(d->dt_year,d->dt_month,d->dt_day),QTime(d->dt_hour,d->dt_min,d->dt_sec)); 297 QDateTime da(QDate(d->dt_year,d->dt_month,d->dt_day),QTime(d->dt_hour,d->dt_min,d->dt_sec));
298 qDebug("%i %i %i - %i %i %i",d->dt_year,d->dt_month,d->dt_day,d->dt_hour,d->dt_min,d->dt_sec); 298 qDebug("%i %i %i - %i %i %i",d->dt_year,d->dt_month,d->dt_day,d->dt_hour,d->dt_min,d->dt_sec);
299 qDebug(da.toString()); 299 qDebug(da.toString());
300 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_RFC822_SIZE) { 300 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_RFC822_SIZE) {
301 size = item->att_data.att_static->att_data.att_rfc822_size; 301 size = item->att_data.att_static->att_data.att_rfc822_size;
302 } 302 }
303 } 303 }
304 /* msg is already deleted */ 304 /* msg is already deleted */
305 if (mFlags.testBit(FLAG_DELETED) && m) { 305 if (mFlags.testBit(FLAG_DELETED) && m) {
306 delete m; 306 delete m;
307 m = 0; 307 m = 0;
308 } 308 }
309 if (m) { 309 if (m) {
310 m->setFlags(mFlags); 310 m->setFlags(mFlags);
311 m->setMsgsize(size); 311 m->setMsgsize(size);
312 } 312 }
313 return m; 313 return m;
314} 314}
315 315
316RecBody IMAPwrapper::fetchBody(const RecMail&mail) 316RecBody IMAPwrapper::fetchBody(const RecMail&mail)
317{ 317{
318 RecBody body; 318 RecBody body;
319 const char *mb; 319 const char *mb;
320 int err = MAILIMAP_NO_ERROR; 320 int err = MAILIMAP_NO_ERROR;
321 clist *result; 321 clist *result;
322 clistcell *current; 322 clistcell *current;
323 mailimap_fetch_att *fetchAtt; 323 mailimap_fetch_att *fetchAtt;
324 mailimap_fetch_type *fetchType; 324 mailimap_fetch_type *fetchType;
325 mailimap_set *set; 325 mailimap_set *set;
326 mailimap_body*body_desc; 326 mailimap_body*body_desc;
327 327
328 mb = mail.getMbox().latin1(); 328 mb = mail.getMbox().latin1();
329 329
330 login(); 330 login();
331 if (!m_imap) { 331 if (!m_imap) {
332 return body; 332 return body;
333 } 333 }
334 /* select mailbox READONLY for operations */ 334
335 err = mailimap_examine( m_imap, (char*)mb); 335 err = mailimap_select( m_imap, (char*)mb);
336 if ( err != MAILIMAP_NO_ERROR ) { 336 if ( err != MAILIMAP_NO_ERROR ) {
337 qDebug("error selecting mailbox: %s",m_imap->imap_response); 337 qDebug("error selecting mailbox: %s",m_imap->imap_response);
338 return body; 338 return body;
339 } 339 }
340 340
341 result = clist_new(); 341 result = clist_new();
342 /* the range has to start at 1!!! not with 0!!!! */ 342 /* the range has to start at 1!!! not with 0!!!! */
343 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); 343 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() );
344 fetchAtt = mailimap_fetch_att_new_bodystructure(); 344 fetchAtt = mailimap_fetch_att_new_bodystructure();
345 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 345 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
346 err = mailimap_fetch( m_imap, set, fetchType, &result ); 346 err = mailimap_fetch( m_imap, set, fetchType, &result );
347 mailimap_set_free( set ); 347 mailimap_set_free( set );
348 mailimap_fetch_type_free( fetchType ); 348 mailimap_fetch_type_free( fetchType );
349 349
350 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 350 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
351 mailimap_msg_att * msg_att; 351 mailimap_msg_att * msg_att;
352 msg_att = (mailimap_msg_att*)current->data; 352 msg_att = (mailimap_msg_att*)current->data;
353 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->att_list->first->data; 353 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->att_list->first->data;
354 body_desc = item->att_data.att_static->att_data.att_body; 354 body_desc = item->att_data.att_static->att_data.att_body;
355 if (body_desc->bd_type==MAILIMAP_BODY_1PART) { 355 if (body_desc->bd_type==MAILIMAP_BODY_1PART) {
356 searchBodyText(mail,body_desc->bd_data.bd_body_1part,body); 356 searchBodyText(mail,body_desc->bd_data.bd_body_1part,body);
357 } else if (body_desc->bd_type==MAILIMAP_BODY_MPART) { 357 } else if (body_desc->bd_type==MAILIMAP_BODY_MPART) {
358 qDebug("Mulitpart mail"); 358 qDebug("Mulitpart mail");
359 searchBodyText(mail,body_desc->bd_data.bd_body_mpart,body); 359 searchBodyText(mail,body_desc->bd_data.bd_body_mpart,body);
360 } 360 }
361 } else { 361 } else {
362 qDebug("error fetching body: %s",m_imap->imap_response); 362 qDebug("error fetching body: %s",m_imap->imap_response);
363 } 363 }
364 mailimap_fetch_list_free(result); 364 mailimap_fetch_list_free(result);
365 return body; 365 return body;
366} 366}
367 367
368/* this routine is just called when the mail has only ONE part. 368/* this routine is just called when the mail has only ONE part.
369 for filling the parts of a multi-part-message there are other 369 for filling the parts of a multi-part-message there are other
370 routines 'cause we can not simply fetch the whole body. */ 370 routines 'cause we can not simply fetch the whole body. */
371void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body) 371void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body)
372{ 372{
373 if (!mailDescription) { 373 if (!mailDescription) {
374 return; 374 return;
375 } 375 }
376 QString sub,body_text; 376 QString sub,body_text;
377 RecPart singlePart; 377 RecPart singlePart;
378 QValueList<int> path; 378 QValueList<int> path;
379 fillSinglePart(singlePart,mailDescription); 379 fillSinglePart(singlePart,mailDescription);
380 switch (mailDescription->bd_type) { 380 switch (mailDescription->bd_type) {
381 case MAILIMAP_BODY_TYPE_1PART_MSG: 381 case MAILIMAP_BODY_TYPE_1PART_MSG:
382 path.append(1); 382 path.append(1);
383 body_text = fetchPart(mail,path,true); 383 body_text = fetchPart(mail,path,true);
384 target_body.setBodytext(body_text); 384 target_body.setBodytext(body_text);
385 target_body.setDescription(singlePart); 385 target_body.setDescription(singlePart);
386 break; 386 break;
387 case MAILIMAP_BODY_TYPE_1PART_TEXT: 387 case MAILIMAP_BODY_TYPE_1PART_TEXT:
388 qDebug("Mediatype single: %s",mailDescription->bd_data.bd_type_text->bd_media_text); 388 qDebug("Mediatype single: %s",mailDescription->bd_data.bd_type_text->bd_media_text);
389 path.append(1); 389 path.append(1);
390 body_text = fetchPart(mail,path,true); 390 body_text = fetchPart(mail,path,true);
391 target_body.setBodytext(body_text); 391 target_body.setBodytext(body_text);
392 target_body.setDescription(singlePart); 392 target_body.setDescription(singlePart);
393 break; 393 break;
394 case MAILIMAP_BODY_TYPE_1PART_BASIC: 394 case MAILIMAP_BODY_TYPE_1PART_BASIC:
395 qDebug("Single attachment"); 395 qDebug("Single attachment");
396 target_body.setBodytext(""); 396 target_body.setBodytext("");
397 target_body.addPart(singlePart); 397 target_body.addPart(singlePart);
398 break; 398 break;
399 default: 399 default:
400 break; 400 break;
401 } 401 }
402 402
403 return; 403 return;
404} 404}
405 405
406QStringList IMAPwrapper::address_list_to_stringlist(clist*list) 406QStringList IMAPwrapper::address_list_to_stringlist(clist*list)
407{ 407{
408 QStringList l; 408 QStringList l;
409 QString from; 409 QString from;
410 bool named_from; 410 bool named_from;
411 clistcell *current = NULL; 411 clistcell *current = NULL;
412 mailimap_address * current_address=NULL; 412 mailimap_address * current_address=NULL;
413 if (!list) { 413 if (!list) {
414 return l; 414 return l;
415 } 415 }
416 unsigned int count = 0; 416 unsigned int count = 0;
417 for (current=clist_begin(list);current!= NULL;current=clist_next(current)) { 417 for (current=clist_begin(list);current!= NULL;current=clist_next(current)) {
418 from = ""; 418 from = "";
419 named_from = false; 419 named_from = false;
420 current_address=(mailimap_address*)current->data; 420 current_address=(mailimap_address*)current->data;
421 if (current_address->ad_personal_name){ 421 if (current_address->ad_personal_name){
422 from+=QString(current_address->ad_personal_name); 422 from+=QString(current_address->ad_personal_name);
423 from+=" "; 423 from+=" ";
424 named_from = true; 424 named_from = true;
425 } 425 }
426 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) { 426 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) {
427 from+="<"; 427 from+="<";
428 } 428 }
429 if (current_address->ad_mailbox_name) { 429 if (current_address->ad_mailbox_name) {
430 from+=QString(current_address->ad_mailbox_name); 430 from+=QString(current_address->ad_mailbox_name);
431 from+="@"; 431 from+="@";
432 } 432 }
433 if (current_address->ad_host_name) { 433 if (current_address->ad_host_name) {
434 from+=QString(current_address->ad_host_name); 434 from+=QString(current_address->ad_host_name);
435 } 435 }
436 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) { 436 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) {
437 from+=">"; 437 from+=">";
438 } 438 }
439 l.append(QString(from)); 439 l.append(QString(from));
440 if (++count > 99) { 440 if (++count > 99) {
441 break; 441 break;
442 } 442 }
443 } 443 }
444 return l; 444 return l;
445} 445}
446 446
447QString IMAPwrapper::fetchPart(const RecMail&mail,const QValueList<int>&path,bool internal_call) 447QString IMAPwrapper::fetchPart(const RecMail&mail,const QValueList<int>&path,bool internal_call)
448{ 448{
449 QString body(""); 449 QString body("");
450 const char*mb; 450 const char*mb;
451 int err; 451 int err;
452 mailimap_fetch_type *fetchType; 452 mailimap_fetch_type *fetchType;
453 mailimap_set *set; 453 mailimap_set *set;
454 clistcell*current,*cur; 454 clistcell*current,*cur;
455 455
456 login(); 456 login();
457 if (!m_imap) { 457 if (!m_imap) {
458 return body; 458 return body;
459 } 459 }
460 if (!internal_call) { 460 if (!internal_call) {
461 mb = mail.getMbox().latin1(); 461 mb = mail.getMbox().latin1();
462 /* select mailbox READONLY for operations */ 462 err = mailimap_select( m_imap, (char*)mb);
463 err = mailimap_examine( m_imap, (char*)mb);
464 if ( err != MAILIMAP_NO_ERROR ) { 463 if ( err != MAILIMAP_NO_ERROR ) {
465 qDebug("error selecting mailbox: %s",m_imap->imap_response); 464 qDebug("error selecting mailbox: %s",m_imap->imap_response);
466 return body; 465 return body;
467 } 466 }
468 } 467 }
469 set = mailimap_set_new_single(mail.getNumber()); 468 set = mailimap_set_new_single(mail.getNumber());
470 clist*id_list=clist_new(); 469 clist*id_list=clist_new();
471 for (unsigned j=0; j < path.count();++j) { 470 for (unsigned j=0; j < path.count();++j) {
472 uint32_t * p_id = (uint32_t *)malloc(sizeof(*p_id)); 471 uint32_t * p_id = (uint32_t *)malloc(sizeof(*p_id));
473 *p_id = path[j]; 472 *p_id = path[j];
474 clist_append(id_list,p_id); 473 clist_append(id_list,p_id);
475 } 474 }
476 mailimap_section_part * section_part = mailimap_section_part_new(id_list); 475 mailimap_section_part * section_part = mailimap_section_part_new(id_list);
477 mailimap_section_spec * section_spec = mailimap_section_spec_new(MAILIMAP_SECTION_SPEC_SECTION_PART, NULL, section_part, NULL); 476 mailimap_section_spec * section_spec = mailimap_section_spec_new(MAILIMAP_SECTION_SPEC_SECTION_PART, NULL, section_part, NULL);
478 mailimap_section * section = mailimap_section_new(section_spec); 477 mailimap_section * section = mailimap_section_new(section_spec);
479 mailimap_fetch_att * fetch_att = mailimap_fetch_att_new_body_section(section); 478 mailimap_fetch_att * fetch_att = mailimap_fetch_att_new_body_section(section);
480 479
481 fetchType = mailimap_fetch_type_new_fetch_att(fetch_att); 480 fetchType = mailimap_fetch_type_new_fetch_att(fetch_att);
482 481
483 clist*result = clist_new(); 482 clist*result = clist_new();
484 483
485 err = mailimap_fetch( m_imap, set, fetchType, &result ); 484 err = mailimap_fetch( m_imap, set, fetchType, &result );
486 mailimap_set_free( set ); 485 mailimap_set_free( set );
487 mailimap_fetch_type_free( fetchType ); 486 mailimap_fetch_type_free( fetchType );
488 487
489 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 488 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
490 mailimap_msg_att * msg_att; 489 mailimap_msg_att * msg_att;
491 msg_att = (mailimap_msg_att*)current->data; 490 msg_att = (mailimap_msg_att*)current->data;
492 mailimap_msg_att_item*msg_att_item; 491 mailimap_msg_att_item*msg_att_item;
493 for(cur = clist_begin(msg_att->att_list) ; cur != NULL ; cur = clist_next(cur)) { 492 for(cur = clist_begin(msg_att->att_list) ; cur != NULL ; cur = clist_next(cur)) {
494 msg_att_item = (mailimap_msg_att_item*)clist_content(cur); 493 msg_att_item = (mailimap_msg_att_item*)clist_content(cur);
495 if (msg_att_item->att_type == MAILIMAP_MSG_ATT_ITEM_STATIC) { 494 if (msg_att_item->att_type == MAILIMAP_MSG_ATT_ITEM_STATIC) {
496 if (msg_att_item->att_data.att_static->att_type == MAILIMAP_MSG_ATT_BODY_SECTION) { 495 if (msg_att_item->att_data.att_static->att_type == MAILIMAP_MSG_ATT_BODY_SECTION) {
497 char*text = msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part; 496 char*text = msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part;
498 msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part = 0L; 497 msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part = 0L;
499 if (text) { 498 if (text) {
500 body = QString(text); 499 body = QString(text);
501 free(text); 500 free(text);
502 } else { 501 } else {
503 body = ""; 502 body = "";
504 } 503 }
505 } 504 }
506 } 505 }
507 } 506 }
508 507
509 } else { 508 } else {
510 qDebug("error fetching text: %s",m_imap->imap_response); 509 qDebug("error fetching text: %s",m_imap->imap_response);
511 } 510 }
512 mailimap_fetch_list_free(result); 511 mailimap_fetch_list_free(result);
513 return body; 512 return body;
514} 513}
515 514
516void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_mpart*mailDescription,RecBody&target_body,int current_recursion,QValueList<int>recList) 515void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_mpart*mailDescription,RecBody&target_body,int current_recursion,QValueList<int>recList)
517{ 516{
518 /* current_recursion is for avoiding ugly mails which has a to deep body-structure */ 517 /* current_recursion is for avoiding ugly mails which has a to deep body-structure */
519 if (!mailDescription||current_recursion==10) { 518 if (!mailDescription||current_recursion==10) {
520 return; 519 return;
521 } 520 }
522 clistcell*current; 521 clistcell*current;
523 mailimap_body*current_body; 522 mailimap_body*current_body;
524 unsigned int count = 0; 523 unsigned int count = 0;
525 for (current=clist_begin(mailDescription->bd_list);current!=0;current=clist_next(current)) { 524 for (current=clist_begin(mailDescription->bd_list);current!=0;current=clist_next(current)) {
526 /* the point in the message */ 525 /* the point in the message */
527 ++count; 526 ++count;
528 current_body = (mailimap_body*)current->data; 527 current_body = (mailimap_body*)current->data;
529 if (current_body->bd_type==MAILIMAP_BODY_MPART) { 528 if (current_body->bd_type==MAILIMAP_BODY_MPART) {
530 QValueList<int>clist = recList; 529 QValueList<int>clist = recList;
531 clist.append(count); 530 clist.append(count);
532 searchBodyText(mail,current_body->bd_data.bd_body_mpart,target_body,current_recursion+1,clist); 531 searchBodyText(mail,current_body->bd_data.bd_body_mpart,target_body,current_recursion+1,clist);
533 } else if (current_body->bd_type==MAILIMAP_BODY_1PART){ 532 } else if (current_body->bd_type==MAILIMAP_BODY_1PART){
534 RecPart currentPart; 533 RecPart currentPart;
535 fillSinglePart(currentPart,current_body->bd_data.bd_body_1part); 534 fillSinglePart(currentPart,current_body->bd_data.bd_body_1part);
536 QValueList<int>clist = recList; 535 QValueList<int>clist = recList;
537 clist.append(count); 536 clist.append(count);
538 /* important: Check for is NULL 'cause a body can be empty! */ 537 /* important: Check for is NULL 'cause a body can be empty! */
539 if (currentPart.Type()=="text" && target_body.Bodytext().isNull() ) { 538 if (currentPart.Type()=="text" && target_body.Bodytext().isNull() ) {
540 QString body_text = fetchPart(mail,clist,true); 539 QString body_text = fetchPart(mail,clist,true);
541 target_body.setDescription(currentPart); 540 target_body.setDescription(currentPart);
542 target_body.setBodytext(body_text); 541 target_body.setBodytext(body_text);
543 } else { 542 } else {
544 QString id(""); 543 QString id("");
545 for (unsigned int j = 0; j < clist.count();++j) { 544 for (unsigned int j = 0; j < clist.count();++j) {
546 id+=(j>0?" ":""); 545 id+=(j>0?" ":"");
547 id+=QString("%1").arg(clist[j]); 546 id+=QString("%1").arg(clist[j]);
548 } 547 }
549 qDebug("ID= %s",id.latin1()); 548 qDebug("ID= %s",id.latin1());
550 currentPart.setIdentifier(id); 549 currentPart.setIdentifier(id);
551 currentPart.setPositionlist(clist); 550 currentPart.setPositionlist(clist);
552 target_body.addPart(currentPart); 551 target_body.addPart(currentPart);
553 } 552 }
554 } 553 }
555 } 554 }
556} 555}
557 556
558void IMAPwrapper::fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description) 557void IMAPwrapper::fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description)
559{ 558{
560 if (!Description) { 559 if (!Description) {
561 return; 560 return;
562 } 561 }
563 switch (Description->bd_type) { 562 switch (Description->bd_type) {
564 case MAILIMAP_BODY_TYPE_1PART_TEXT: 563 case MAILIMAP_BODY_TYPE_1PART_TEXT:
565 target_part.setType("text"); 564 target_part.setType("text");
566 fillSingleTextPart(target_part,Description->bd_data.bd_type_text); 565 fillSingleTextPart(target_part,Description->bd_data.bd_type_text);
567 break; 566 break;
568 case MAILIMAP_BODY_TYPE_1PART_BASIC: 567 case MAILIMAP_BODY_TYPE_1PART_BASIC:
569 fillSingleBasicPart(target_part,Description->bd_data.bd_type_basic); 568 fillSingleBasicPart(target_part,Description->bd_data.bd_type_basic);
570 break; 569 break;
571 case MAILIMAP_BODY_TYPE_1PART_MSG: 570 case MAILIMAP_BODY_TYPE_1PART_MSG:
572 fillSingleMsgPart(target_part,Description->bd_data.bd_type_msg); 571 fillSingleMsgPart(target_part,Description->bd_data.bd_type_msg);
573 break; 572 break;
574 default: 573 default:
575 break; 574 break;
576 } 575 }
577} 576}
578 577
579void IMAPwrapper::fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which) 578void IMAPwrapper::fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which)
580{ 579{
581 if (!which) { 580 if (!which) {
582 return; 581 return;
583 } 582 }
584 QString sub; 583 QString sub;
585 sub = which->bd_media_text; 584 sub = which->bd_media_text;
586 target_part.setSubtype(sub.lower()); 585 target_part.setSubtype(sub.lower());
587 target_part.setLines(which->bd_lines); 586 target_part.setLines(which->bd_lines);
588 fillBodyFields(target_part,which->bd_fields); 587 fillBodyFields(target_part,which->bd_fields);
589} 588}
590 589
591void IMAPwrapper::fillSingleMsgPart(RecPart&target_part,mailimap_body_type_msg*which) 590void IMAPwrapper::fillSingleMsgPart(RecPart&target_part,mailimap_body_type_msg*which)
592{ 591{
593 if (!which) { 592 if (!which) {
594 return; 593 return;
595 } 594 }
596// QString sub; 595// QString sub;
597// sub = which->bd_media_text; 596// sub = which->bd_media_text;
598// target_part.setSubtype(sub.lower()); 597// target_part.setSubtype(sub.lower());
599 qDebug("Message part"); 598 qDebug("Message part");
600 /* we set this type to text/plain */ 599 /* we set this type to text/plain */
601 target_part.setType("text"); 600 target_part.setType("text");
602 target_part.setSubtype("plain"); 601 target_part.setSubtype("plain");
603 target_part.setLines(which->bd_lines); 602 target_part.setLines(which->bd_lines);
604 fillBodyFields(target_part,which->bd_fields); 603 fillBodyFields(target_part,which->bd_fields);
605} 604}
606 605
607void IMAPwrapper::fillSingleBasicPart(RecPart&target_part,mailimap_body_type_basic*which) 606void IMAPwrapper::fillSingleBasicPart(RecPart&target_part,mailimap_body_type_basic*which)
608{ 607{
609 if (!which) { 608 if (!which) {
610 return; 609 return;
611 } 610 }
612 QString type,sub; 611 QString type,sub;
613 switch (which->bd_media_basic->med_type) { 612 switch (which->bd_media_basic->med_type) {
614 case MAILIMAP_MEDIA_BASIC_APPLICATION: 613 case MAILIMAP_MEDIA_BASIC_APPLICATION:
615 type = "application"; 614 type = "application";
616 break; 615 break;
617 case MAILIMAP_MEDIA_BASIC_AUDIO: 616 case MAILIMAP_MEDIA_BASIC_AUDIO:
618 type = "audio"; 617 type = "audio";
619 break; 618 break;
620 case MAILIMAP_MEDIA_BASIC_IMAGE: 619 case MAILIMAP_MEDIA_BASIC_IMAGE:
621 type = "image"; 620 type = "image";
622 break; 621 break;
623 case MAILIMAP_MEDIA_BASIC_MESSAGE: 622 case MAILIMAP_MEDIA_BASIC_MESSAGE:
624 type = "message"; 623 type = "message";
625 break; 624 break;
626 case MAILIMAP_MEDIA_BASIC_VIDEO: 625 case MAILIMAP_MEDIA_BASIC_VIDEO:
627 type = "video"; 626 type = "video";
628 break; 627 break;
629 case MAILIMAP_MEDIA_BASIC_OTHER: 628 case MAILIMAP_MEDIA_BASIC_OTHER:
630 default: 629 default:
631 if (which->bd_media_basic->med_basic_type) { 630 if (which->bd_media_basic->med_basic_type) {
632 type = which->bd_media_basic->med_basic_type; 631 type = which->bd_media_basic->med_basic_type;
633 } else { 632 } else {
634 type = ""; 633 type = "";
635 } 634 }
636 break; 635 break;
637 } 636 }
638 if (which->bd_media_basic->med_subtype) { 637 if (which->bd_media_basic->med_subtype) {
639 sub = which->bd_media_basic->med_subtype; 638 sub = which->bd_media_basic->med_subtype;
640 } else { 639 } else {
641 sub = ""; 640 sub = "";
642 } 641 }
643 qDebug("Type = %s/%s",type.latin1(),sub.latin1()); 642 qDebug("Type = %s/%s",type.latin1(),sub.latin1());
644 target_part.setType(type.lower()); 643 target_part.setType(type.lower());
645 target_part.setSubtype(sub.lower()); 644 target_part.setSubtype(sub.lower());
646 fillBodyFields(target_part,which->bd_fields); 645 fillBodyFields(target_part,which->bd_fields);
647} 646}
648 647
649void IMAPwrapper::fillBodyFields(RecPart&target_part,mailimap_body_fields*which) 648void IMAPwrapper::fillBodyFields(RecPart&target_part,mailimap_body_fields*which)
650{ 649{
651 if (!which) return; 650 if (!which) return;
652 if (which->bd_parameter && which->bd_parameter->pa_list && which->bd_parameter->pa_list->count>0) { 651 if (which->bd_parameter && which->bd_parameter->pa_list && which->bd_parameter->pa_list->count>0) {
653 clistcell*cur; 652 clistcell*cur;
654 mailimap_single_body_fld_param*param=0; 653 mailimap_single_body_fld_param*param=0;
655 for (cur = clist_begin(which->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) { 654 for (cur = clist_begin(which->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) {
656 param = (mailimap_single_body_fld_param*)cur->data; 655 param = (mailimap_single_body_fld_param*)cur->data;
657 if (param) { 656 if (param) {
658 target_part.addParameter(QString(param->pa_name).lower(),QString(param->pa_value)); 657 target_part.addParameter(QString(param->pa_name).lower(),QString(param->pa_value));
659 } 658 }
660 } 659 }
661 } 660 }
662 mailimap_body_fld_enc*enc = which->bd_encoding; 661 mailimap_body_fld_enc*enc = which->bd_encoding;
663 QString encoding(""); 662 QString encoding("");
664 switch (enc->enc_type) { 663 switch (enc->enc_type) {
665 case MAILIMAP_BODY_FLD_ENC_7BIT: 664 case MAILIMAP_BODY_FLD_ENC_7BIT:
666 encoding = "7bit"; 665 encoding = "7bit";
667 break; 666 break;
668 case MAILIMAP_BODY_FLD_ENC_8BIT: 667 case MAILIMAP_BODY_FLD_ENC_8BIT:
669 encoding = "8bit"; 668 encoding = "8bit";
670 break; 669 break;
671 case MAILIMAP_BODY_FLD_ENC_BINARY: 670 case MAILIMAP_BODY_FLD_ENC_BINARY:
672 encoding="binary"; 671 encoding="binary";
673 break; 672 break;
674 case MAILIMAP_BODY_FLD_ENC_BASE64: 673 case MAILIMAP_BODY_FLD_ENC_BASE64:
675 encoding="base64"; 674 encoding="base64";
676 break; 675 break;
677 case MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE: 676 case MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE:
678 encoding="quoted-printable"; 677 encoding="quoted-printable";
679 break; 678 break;
680 case MAILIMAP_BODY_FLD_ENC_OTHER: 679 case MAILIMAP_BODY_FLD_ENC_OTHER:
681 default: 680 default:
682 if (enc->enc_value) { 681 if (enc->enc_value) {
683 char*t=enc->enc_value; 682 char*t=enc->enc_value;
684 encoding=QString(enc->enc_value); 683 encoding=QString(enc->enc_value);
685 enc->enc_value=0L; 684 enc->enc_value=0L;
686 free(t); 685 free(t);
687 } 686 }
688 } 687 }
689 target_part.setEncoding(encoding); 688 target_part.setEncoding(encoding);
690} 689}
691 690
692QString IMAPwrapper::fetchPart(const RecMail&mail,const RecPart&part) 691QString IMAPwrapper::fetchPart(const RecMail&mail,const RecPart&part)
693{ 692{
694 return fetchPart(mail,part.Positionlist(),false); 693 return fetchPart(mail,part.Positionlist(),false);
695} 694}