summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/imapwrapper.cpp60
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.cpp60
-rw-r--r--noncore/net/mail/mainwindow.cpp2
3 files changed, 67 insertions, 55 deletions
diff --git a/noncore/net/mail/imapwrapper.cpp b/noncore/net/mail/imapwrapper.cpp
index eae85a7..dc02780 100644
--- a/noncore/net/mail/imapwrapper.cpp
+++ b/noncore/net/mail/imapwrapper.cpp
@@ -14,114 +14,120 @@ IMAPwrapper::IMAPwrapper( IMAPaccount *a )
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 logout(); 26 logout();
27 const char *server, *user, *pass; 27 const char *server, *user, *pass;
28 uint16_t port; 28 uint16_t port;
29 int err = MAILIMAP_NO_ERROR; 29 int err = MAILIMAP_NO_ERROR;
30 30
31 server = account->getServer().latin1(); 31 server = account->getServer().latin1();
32 port = account->getPort().toUInt(); 32 port = account->getPort().toUInt();
33 user = account->getUser().latin1(); 33 user = account->getUser().latin1();
34 pass = account->getPassword().latin1(); 34 pass = account->getPassword().latin1();
35 35
36 m_imap = mailimap_new( 20, &imap_progress ); 36 m_imap = mailimap_new( 20, &imap_progress );
37 /* connect */ 37 /* connect */
38 err = mailimap_socket_connect( m_imap, (char*)server, port ); 38 // err = mailimap_socket_connect( m_imap, (char*)server, port );
39 if ( err != MAILIMAP_NO_ERROR && 39 if (account->getSSL()) {
40 err = mailimap_ssl_connect( m_imap, (char*)server, port );
41 } else {
42 err = mailimap_socket_connect( m_imap, (char*)server, port );
43 }
44
45 if ( err != MAILIMAP_NO_ERROR &&
40 err != MAILIMAP_NO_ERROR_AUTHENTICATED && 46 err != MAILIMAP_NO_ERROR_AUTHENTICATED &&
41 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { 47 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) {
42 qDebug("error connecting server: %s",m_imap->response); 48 qDebug("error connecting server: %s",m_imap->response);
43 mailimap_free( m_imap ); 49 mailimap_free( m_imap );
44 m_imap = 0; 50 m_imap = 0;
45 return; 51 return;
46 } 52 }
47 53
48 /* login */ 54 /* login */
49 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass ); 55 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass );
50 if ( err != MAILIMAP_NO_ERROR ) { 56 if ( err != MAILIMAP_NO_ERROR ) {
51 qDebug("error logging in imap: %s",m_imap->response); 57 qDebug("error logging in imap: %s",m_imap->response);
52 err = mailimap_close( m_imap ); 58 err = mailimap_close( m_imap );
53 mailimap_free( m_imap ); 59 mailimap_free( m_imap );
54 m_imap = 0; 60 m_imap = 0;
55 } 61 }
56} 62}
57 63
58void IMAPwrapper::logout() 64void IMAPwrapper::logout()
59{ 65{
60 int err = MAILIMAP_NO_ERROR; 66 int err = MAILIMAP_NO_ERROR;
61 if (!m_imap) return; 67 if (!m_imap) return;
62 err = mailimap_logout( m_imap ); 68 err = mailimap_logout( m_imap );
63 err = mailimap_close( m_imap ); 69 err = mailimap_close( m_imap );
64 mailimap_free( m_imap ); 70 mailimap_free( m_imap );
65 m_imap = 0; 71 m_imap = 0;
66} 72}
67 73
68void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target ) 74void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
69{ 75{
70 const char *mb; 76 const char *mb;
71 int err = MAILIMAP_NO_ERROR; 77 int err = MAILIMAP_NO_ERROR;
72 clist *result; 78 clist *result;
73 clistcell *current; 79 clistcell *current;
74 mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate; 80 mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate;
75 mailimap_fetch_type *fetchType; 81 mailimap_fetch_type *fetchType;
76 mailimap_set *set; 82 mailimap_set *set;
77 83
78 mb = mailbox.latin1(); 84 mb = mailbox.latin1();
79 login(); 85 login();
80 if (!m_imap) { 86 if (!m_imap) {
81 return; 87 return;
82 } 88 }
83 /* select mailbox READONLY for operations */ 89 /* select mailbox READONLY for operations */
84 err = mailimap_examine( m_imap, (char*)mb); 90 err = mailimap_examine( m_imap, (char*)mb);
85 if ( err != MAILIMAP_NO_ERROR ) { 91 if ( err != MAILIMAP_NO_ERROR ) {
86 qDebug("error selecting mailbox: %s",m_imap->response); 92 qDebug("error selecting mailbox: %s",m_imap->response);
87 logout(); 93 logout();
88 return; 94 return;
89 } 95 }
90 96
91 int last = m_imap->selection_info->exists; 97 int last = m_imap->selection_info->exists;
92 98
93 if (last == 0) { 99 if (last == 0) {
94 qDebug("mailbox has no mails"); 100 qDebug("mailbox has no mails");
95 logout(); 101 logout();
96 return; 102 return;
97 } 103 }
98 104
99 result = clist_new(); 105 result = clist_new();
100 /* the range has to start at 1!!! not with 0!!!! */ 106 /* the range has to start at 1!!! not with 0!!!! */
101 set = mailimap_set_new_interval( 1, last ); 107 set = mailimap_set_new_interval( 1, last );
102 fetchAtt = mailimap_fetch_att_new_envelope(); 108 fetchAtt = mailimap_fetch_att_new_envelope();
103 fetchAttFlags = mailimap_fetch_att_new_flags(); 109 fetchAttFlags = mailimap_fetch_att_new_flags();
104 fetchAttDate = mailimap_fetch_att_new_internaldate(); 110 fetchAttDate = mailimap_fetch_att_new_internaldate();
105 111
106 //fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 112 //fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
107 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 113 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
108 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAtt); 114 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAtt);
109 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttFlags); 115 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttFlags);
110 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttDate); 116 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttDate);
111 117
112 err = mailimap_fetch( m_imap, set, fetchType, &result ); 118 err = mailimap_fetch( m_imap, set, fetchType, &result );
113 mailimap_set_free( set ); 119 mailimap_set_free( set );
114 /* cleans up the fetch_att's too! */ 120 /* cleans up the fetch_att's too! */
115 mailimap_fetch_type_free( fetchType ); 121 mailimap_fetch_type_free( fetchType );
116 122
117 QString date,subject,from; 123 QString date,subject,from;
118 124
119 if ( err == MAILIMAP_NO_ERROR ) { 125 if ( err == MAILIMAP_NO_ERROR ) {
120 current = clist_begin(result); 126 current = clist_begin(result);
121 mailimap_msg_att * msg_att; 127 mailimap_msg_att * msg_att;
122 int i = 0; 128 int i = 0;
123 while ( current != 0 ) { 129 while ( current != 0 ) {
124 ++i; 130 ++i;
125 msg_att = (mailimap_msg_att*)current->data; 131 msg_att = (mailimap_msg_att*)current->data;
126 RecMail*m = parse_list_result(msg_att); 132 RecMail*m = parse_list_result(msg_att);
127 if (m) { 133 if (m) {
@@ -131,103 +137,103 @@ void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
131 } 137 }
132 current = current->next; 138 current = current->next;
133 } 139 }
134 } else { 140 } else {
135 qDebug("Error fetching headers: %s",m_imap->response); 141 qDebug("Error fetching headers: %s",m_imap->response);
136 } 142 }
137 logout(); 143 logout();
138 clist_free(result); 144 clist_free(result);
139} 145}
140 146
141QList<IMAPFolder>* IMAPwrapper::listFolders() 147QList<IMAPFolder>* IMAPwrapper::listFolders()
142{ 148{
143 const char *path, *mask; 149 const char *path, *mask;
144 int err = MAILIMAP_NO_ERROR; 150 int err = MAILIMAP_NO_ERROR;
145 clist *result; 151 clist *result;
146 clistcell *current; 152 clistcell *current;
147 153
148 QList<IMAPFolder> * folders = new QList<IMAPFolder>(); 154 QList<IMAPFolder> * folders = new QList<IMAPFolder>();
149 folders->setAutoDelete( true ); 155 folders->setAutoDelete( true );
150 login(); 156 login();
151 if (!m_imap) { 157 if (!m_imap) {
152 return folders; 158 return folders;
153 } 159 }
154 160
155/* 161/*
156 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 162 * 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! 163 * 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. 164 * it seems like ugly code. and yes - it is ugly code. but the best way.
159 */ 165 */
160 QString temp; 166 QString temp;
161 mask = "INBOX" ; 167 mask = "INBOX" ;
162 result = clist_new(); 168 result = clist_new();
163 mailimap_mailbox_list *list; 169 mailimap_mailbox_list *list;
164 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); 170 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result );
165 if ( err == MAILIMAP_NO_ERROR ) { 171 if ( err == MAILIMAP_NO_ERROR ) {
166 current = result->first; 172 current = result->first;
167 for ( int i = result->count; i > 0; i-- ) { 173 for ( int i = result->count; i > 0; i-- ) {
168 list = (mailimap_mailbox_list *) current->data; 174 list = (mailimap_mailbox_list *) current->data;
169 // it is better use the deep copy mechanism of qt itself 175 // it is better use the deep copy mechanism of qt itself
170 // instead of using strdup! 176 // instead of using strdup!
171 temp = list->mb; 177 temp = list->mb;
172 folders->append( new IMAPFolder(temp)); 178 folders->append( new IMAPFolder(temp));
173 current = current->next; 179 current = current->next;
174 } 180 }
175 } else { 181 } else {
176 qDebug("error fetching folders: %s",m_imap->response); 182 qDebug("error fetching folders: %s",m_imap->response);
177 } 183 }
178 mailimap_list_result_free( result ); 184 mailimap_list_result_free( result );
179 185
180/* 186/*
181 * second stage - get the other then inbox folders 187 * second stage - get the other then inbox folders
182 */ 188 */
183 mask = "*" ; 189 mask = "*" ;
184 path = account->getPrefix().latin1(); 190 path = account->getPrefix().latin1();
185 result = clist_new(); 191 result = clist_new();
186 qDebug(path); 192 qDebug(path);
187 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result ); 193 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result );
188 if ( err == MAILIMAP_NO_ERROR ) { 194 if ( err == MAILIMAP_NO_ERROR ) {
189 current = result->first; 195 current = result->first;
190 for ( int i = result->count; i > 0; i-- ) { 196 for ( int i = result->count; i > 0; i-- ) {
191 list = (mailimap_mailbox_list *) current->data; 197 list = (mailimap_mailbox_list *) current->data;
192 // it is better use the deep copy mechanism of qt itself 198 // it is better use the deep copy mechanism of qt itself
193 // instead of using strdup! 199 // instead of using strdup!
194 temp = list->mb; 200 temp = list->mb;
195 current = current->next; 201 current = current->next;
196 if (temp.lower()=="inbox") 202 if (temp.lower()=="inbox")
197 continue; 203 continue;
198 folders->append(new IMAPFolder(temp)); 204 folders->append(new IMAPFolder(temp));
199 205
200 } 206 }
201 } else { 207 } else {
202 qDebug("error fetching folders %s",m_imap->response); 208 qDebug("error fetching folders %s",m_imap->response);
203 } 209 }
204 mailimap_list_result_free( result ); 210 mailimap_list_result_free( result );
205 return folders; 211 return folders;
206} 212}
207 213
208RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att) 214RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
209{ 215{
210 RecMail * m = 0; 216 RecMail * m = 0;
211 mailimap_msg_att_item *item=0; 217 mailimap_msg_att_item *item=0;
212 clistcell *current,*c,*cf; 218 clistcell *current,*c,*cf;
213 mailimap_msg_att_dynamic*flist; 219 mailimap_msg_att_dynamic*flist;
214 mailimap_flag_fetch*cflag; 220 mailimap_flag_fetch*cflag;
215 QBitArray mFlags(7); 221 QBitArray mFlags(7);
216 QStringList addresslist; 222 QStringList addresslist;
217 223
218 if (!m_att) { 224 if (!m_att) {
219 return m; 225 return m;
220 } 226 }
221 227
222 c = clist_begin(m_att->list); 228 c = clist_begin(m_att->list);
223 while ( c ) { 229 while ( c ) {
224 current = c; 230 current = c;
225 c = c->next; 231 c = c->next;
226 item = (mailimap_msg_att_item*)current->data; 232 item = (mailimap_msg_att_item*)current->data;
227 if (item->type!=MAILIMAP_MSG_ATT_ITEM_STATIC) { 233 if (item->type!=MAILIMAP_MSG_ATT_ITEM_STATIC) {
228 flist = (mailimap_msg_att_dynamic*)item->msg_att_dyn; 234 flist = (mailimap_msg_att_dynamic*)item->msg_att_dyn;
229 if (!flist->list) { 235 if (!flist->list) {
230 continue; 236 continue;
231 } 237 }
232 cf = flist->list->first; 238 cf = flist->list->first;
233 while (cf) { 239 while (cf) {
@@ -316,115 +322,115 @@ RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
316 m->setFlags(mFlags); 322 m->setFlags(mFlags);
317 } 323 }
318 return m; 324 return m;
319} 325}
320 326
321RecBody IMAPwrapper::fetchBody(const RecMail&mail) 327RecBody IMAPwrapper::fetchBody(const RecMail&mail)
322{ 328{
323 RecBody body; 329 RecBody body;
324 const char *mb; 330 const char *mb;
325 int err = MAILIMAP_NO_ERROR; 331 int err = MAILIMAP_NO_ERROR;
326 clist *result; 332 clist *result;
327 clistcell *current; 333 clistcell *current;
328 mailimap_fetch_att *fetchAtt; 334 mailimap_fetch_att *fetchAtt;
329 mailimap_fetch_type *fetchType; 335 mailimap_fetch_type *fetchType;
330 mailimap_set *set; 336 mailimap_set *set;
331 mailimap_body*body_desc; 337 mailimap_body*body_desc;
332 338
333 mb = mail.getMbox().latin1(); 339 mb = mail.getMbox().latin1();
334 340
335 login(); 341 login();
336 if (!m_imap) { 342 if (!m_imap) {
337 return body; 343 return body;
338 } 344 }
339 /* select mailbox READONLY for operations */ 345 /* select mailbox READONLY for operations */
340 err = mailimap_examine( m_imap, (char*)mb); 346 err = mailimap_examine( m_imap, (char*)mb);
341 if ( err != MAILIMAP_NO_ERROR ) { 347 if ( err != MAILIMAP_NO_ERROR ) {
342 qDebug("error selecting mailbox: %s",m_imap->response); 348 qDebug("error selecting mailbox: %s",m_imap->response);
343 logout(); 349 logout();
344 return body; 350 return body;
345 } 351 }
346 result = clist_new(); 352 result = clist_new();
347 /* the range has to start at 1!!! not with 0!!!! */ 353 /* the range has to start at 1!!! not with 0!!!! */
348 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); 354 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() );
349 fetchAtt = mailimap_fetch_att_new_body(); 355 fetchAtt = mailimap_fetch_att_new_body();
350 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 356 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
351 err = mailimap_fetch( m_imap, set, fetchType, &result ); 357 err = mailimap_fetch( m_imap, set, fetchType, &result );
352 mailimap_set_free( set ); 358 mailimap_set_free( set );
353 mailimap_fetch_type_free( fetchType ); 359 mailimap_fetch_type_free( fetchType );
354 360
355 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 361 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
356 mailimap_msg_att * msg_att; 362 mailimap_msg_att * msg_att;
357 msg_att = (mailimap_msg_att*)current->data; 363 msg_att = (mailimap_msg_att*)current->data;
358 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data; 364 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data;
359 body_desc = item->msg_att_static->body; 365 body_desc = item->msg_att_static->body;
360 if (body_desc->type==MAILIMAP_BODY_1PART) { 366 if (body_desc->type==MAILIMAP_BODY_1PART) {
361 searchBodyText(mail,body_desc->body_1part,body); 367 searchBodyText(mail,body_desc->body_1part,body);
362 } else { 368 } else {
363 } 369 }
364 370
365 } else { 371 } else {
366 qDebug("error fetching body: %s",m_imap->response); 372 qDebug("error fetching body: %s",m_imap->response);
367 } 373 }
368 374
369 clist_free(result); 375 clist_free(result);
370 logout(); 376 logout();
371 return body; 377 return body;
372} 378}
373 379
374void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body) 380void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body)
375{ 381{
376 if (!mailDescription) { 382 if (!mailDescription) {
377 return; 383 return;
378 } 384 }
379 switch (mailDescription->type) { 385 switch (mailDescription->type) {
380 case MAILIMAP_BODY_TYPE_1PART_TEXT: 386 case MAILIMAP_BODY_TYPE_1PART_TEXT:
381 fillPlainBody(mail,target_body,mailDescription->body_type_text); 387 fillPlainBody(mail,target_body,mailDescription->body_type_text);
382 break; 388 break;
383 default: 389 default:
384 break; 390 break;
385 } 391 }
386 return; 392 return;
387} 393}
388 394
389void IMAPwrapper::fillPlainBody(const RecMail&mail,RecBody&target_body, mailimap_body_type_text * text_body) 395void IMAPwrapper::fillPlainBody(const RecMail&mail,RecBody&target_body, mailimap_body_type_text * text_body)
390{ 396{
391 const char *mb; 397 const char *mb;
392 QString body=""; 398 QString body="";
393 int err = MAILIMAP_NO_ERROR; 399 int err = MAILIMAP_NO_ERROR;
394 clist *result; 400 clist *result;
395 clistcell *current; 401 clistcell *current;
396 mailimap_fetch_att *fetchAtt; 402 mailimap_fetch_att *fetchAtt;
397 mailimap_fetch_type *fetchType; 403 mailimap_fetch_type *fetchType;
398 mailimap_set *set; 404 mailimap_set *set;
399 405
400 mb = mail.getMbox().latin1(); 406 mb = mail.getMbox().latin1();
401 407
402 if (!m_imap) { 408 if (!m_imap) {
403 return; 409 return;
404 } 410 }
405 411
406 result = clist_new(); 412 result = clist_new();
407 /* the range has to start at 1!!! not with 0!!!! */ 413 /* the range has to start at 1!!! not with 0!!!! */
408 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); 414 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() );
409 fetchAtt = mailimap_fetch_att_new_rfc822_text(); 415 fetchAtt = mailimap_fetch_att_new_rfc822_text();
410 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 416 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
411 err = mailimap_fetch( m_imap, set, fetchType, &result ); 417 err = mailimap_fetch( m_imap, set, fetchType, &result );
412 mailimap_set_free( set ); 418 mailimap_set_free( set );
413 mailimap_fetch_type_free( fetchType ); 419 mailimap_fetch_type_free( fetchType );
414 420
415 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 421 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
416 mailimap_msg_att * msg_att; 422 mailimap_msg_att * msg_att;
417 msg_att = (mailimap_msg_att*)current->data; 423 msg_att = (mailimap_msg_att*)current->data;
418 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data; 424 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data;
419 if (item->msg_att_static && item->msg_att_static->rfc822_text) { 425 if (item->msg_att_static && item->msg_att_static->rfc822_text) {
420 body = item->msg_att_static->rfc822_text; 426 body = item->msg_att_static->rfc822_text;
421 } 427 }
422 } else { 428 } else {
423 qDebug("error fetching text: %s",m_imap->response); 429 qDebug("error fetching text: %s",m_imap->response);
424 } 430 }
425 clist_free(result); 431 clist_free(result);
426 target_body.setBodytext(body); 432 target_body.setBodytext(body);
427 return; 433 return;
428} 434}
429 435
430QStringList IMAPwrapper::address_list_to_stringlist(clist*list) 436QStringList IMAPwrapper::address_list_to_stringlist(clist*list)
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
index eae85a7..dc02780 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
@@ -14,114 +14,120 @@ IMAPwrapper::IMAPwrapper( IMAPaccount *a )
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 logout(); 26 logout();
27 const char *server, *user, *pass; 27 const char *server, *user, *pass;
28 uint16_t port; 28 uint16_t port;
29 int err = MAILIMAP_NO_ERROR; 29 int err = MAILIMAP_NO_ERROR;
30 30
31 server = account->getServer().latin1(); 31 server = account->getServer().latin1();
32 port = account->getPort().toUInt(); 32 port = account->getPort().toUInt();
33 user = account->getUser().latin1(); 33 user = account->getUser().latin1();
34 pass = account->getPassword().latin1(); 34 pass = account->getPassword().latin1();
35 35
36 m_imap = mailimap_new( 20, &imap_progress ); 36 m_imap = mailimap_new( 20, &imap_progress );
37 /* connect */ 37 /* connect */
38 err = mailimap_socket_connect( m_imap, (char*)server, port ); 38 // err = mailimap_socket_connect( m_imap, (char*)server, port );
39 if ( err != MAILIMAP_NO_ERROR && 39 if (account->getSSL()) {
40 err = mailimap_ssl_connect( m_imap, (char*)server, port );
41 } else {
42 err = mailimap_socket_connect( m_imap, (char*)server, port );
43 }
44
45 if ( err != MAILIMAP_NO_ERROR &&
40 err != MAILIMAP_NO_ERROR_AUTHENTICATED && 46 err != MAILIMAP_NO_ERROR_AUTHENTICATED &&
41 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { 47 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) {
42 qDebug("error connecting server: %s",m_imap->response); 48 qDebug("error connecting server: %s",m_imap->response);
43 mailimap_free( m_imap ); 49 mailimap_free( m_imap );
44 m_imap = 0; 50 m_imap = 0;
45 return; 51 return;
46 } 52 }
47 53
48 /* login */ 54 /* login */
49 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass ); 55 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass );
50 if ( err != MAILIMAP_NO_ERROR ) { 56 if ( err != MAILIMAP_NO_ERROR ) {
51 qDebug("error logging in imap: %s",m_imap->response); 57 qDebug("error logging in imap: %s",m_imap->response);
52 err = mailimap_close( m_imap ); 58 err = mailimap_close( m_imap );
53 mailimap_free( m_imap ); 59 mailimap_free( m_imap );
54 m_imap = 0; 60 m_imap = 0;
55 } 61 }
56} 62}
57 63
58void IMAPwrapper::logout() 64void IMAPwrapper::logout()
59{ 65{
60 int err = MAILIMAP_NO_ERROR; 66 int err = MAILIMAP_NO_ERROR;
61 if (!m_imap) return; 67 if (!m_imap) return;
62 err = mailimap_logout( m_imap ); 68 err = mailimap_logout( m_imap );
63 err = mailimap_close( m_imap ); 69 err = mailimap_close( m_imap );
64 mailimap_free( m_imap ); 70 mailimap_free( m_imap );
65 m_imap = 0; 71 m_imap = 0;
66} 72}
67 73
68void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target ) 74void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
69{ 75{
70 const char *mb; 76 const char *mb;
71 int err = MAILIMAP_NO_ERROR; 77 int err = MAILIMAP_NO_ERROR;
72 clist *result; 78 clist *result;
73 clistcell *current; 79 clistcell *current;
74 mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate; 80 mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate;
75 mailimap_fetch_type *fetchType; 81 mailimap_fetch_type *fetchType;
76 mailimap_set *set; 82 mailimap_set *set;
77 83
78 mb = mailbox.latin1(); 84 mb = mailbox.latin1();
79 login(); 85 login();
80 if (!m_imap) { 86 if (!m_imap) {
81 return; 87 return;
82 } 88 }
83 /* select mailbox READONLY for operations */ 89 /* select mailbox READONLY for operations */
84 err = mailimap_examine( m_imap, (char*)mb); 90 err = mailimap_examine( m_imap, (char*)mb);
85 if ( err != MAILIMAP_NO_ERROR ) { 91 if ( err != MAILIMAP_NO_ERROR ) {
86 qDebug("error selecting mailbox: %s",m_imap->response); 92 qDebug("error selecting mailbox: %s",m_imap->response);
87 logout(); 93 logout();
88 return; 94 return;
89 } 95 }
90 96
91 int last = m_imap->selection_info->exists; 97 int last = m_imap->selection_info->exists;
92 98
93 if (last == 0) { 99 if (last == 0) {
94 qDebug("mailbox has no mails"); 100 qDebug("mailbox has no mails");
95 logout(); 101 logout();
96 return; 102 return;
97 } 103 }
98 104
99 result = clist_new(); 105 result = clist_new();
100 /* the range has to start at 1!!! not with 0!!!! */ 106 /* the range has to start at 1!!! not with 0!!!! */
101 set = mailimap_set_new_interval( 1, last ); 107 set = mailimap_set_new_interval( 1, last );
102 fetchAtt = mailimap_fetch_att_new_envelope(); 108 fetchAtt = mailimap_fetch_att_new_envelope();
103 fetchAttFlags = mailimap_fetch_att_new_flags(); 109 fetchAttFlags = mailimap_fetch_att_new_flags();
104 fetchAttDate = mailimap_fetch_att_new_internaldate(); 110 fetchAttDate = mailimap_fetch_att_new_internaldate();
105 111
106 //fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 112 //fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
107 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 113 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
108 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAtt); 114 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAtt);
109 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttFlags); 115 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttFlags);
110 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttDate); 116 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttDate);
111 117
112 err = mailimap_fetch( m_imap, set, fetchType, &result ); 118 err = mailimap_fetch( m_imap, set, fetchType, &result );
113 mailimap_set_free( set ); 119 mailimap_set_free( set );
114 /* cleans up the fetch_att's too! */ 120 /* cleans up the fetch_att's too! */
115 mailimap_fetch_type_free( fetchType ); 121 mailimap_fetch_type_free( fetchType );
116 122
117 QString date,subject,from; 123 QString date,subject,from;
118 124
119 if ( err == MAILIMAP_NO_ERROR ) { 125 if ( err == MAILIMAP_NO_ERROR ) {
120 current = clist_begin(result); 126 current = clist_begin(result);
121 mailimap_msg_att * msg_att; 127 mailimap_msg_att * msg_att;
122 int i = 0; 128 int i = 0;
123 while ( current != 0 ) { 129 while ( current != 0 ) {
124 ++i; 130 ++i;
125 msg_att = (mailimap_msg_att*)current->data; 131 msg_att = (mailimap_msg_att*)current->data;
126 RecMail*m = parse_list_result(msg_att); 132 RecMail*m = parse_list_result(msg_att);
127 if (m) { 133 if (m) {
@@ -131,103 +137,103 @@ void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
131 } 137 }
132 current = current->next; 138 current = current->next;
133 } 139 }
134 } else { 140 } else {
135 qDebug("Error fetching headers: %s",m_imap->response); 141 qDebug("Error fetching headers: %s",m_imap->response);
136 } 142 }
137 logout(); 143 logout();
138 clist_free(result); 144 clist_free(result);
139} 145}
140 146
141QList<IMAPFolder>* IMAPwrapper::listFolders() 147QList<IMAPFolder>* IMAPwrapper::listFolders()
142{ 148{
143 const char *path, *mask; 149 const char *path, *mask;
144 int err = MAILIMAP_NO_ERROR; 150 int err = MAILIMAP_NO_ERROR;
145 clist *result; 151 clist *result;
146 clistcell *current; 152 clistcell *current;
147 153
148 QList<IMAPFolder> * folders = new QList<IMAPFolder>(); 154 QList<IMAPFolder> * folders = new QList<IMAPFolder>();
149 folders->setAutoDelete( true ); 155 folders->setAutoDelete( true );
150 login(); 156 login();
151 if (!m_imap) { 157 if (!m_imap) {
152 return folders; 158 return folders;
153 } 159 }
154 160
155/* 161/*
156 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 162 * 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! 163 * 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. 164 * it seems like ugly code. and yes - it is ugly code. but the best way.
159 */ 165 */
160 QString temp; 166 QString temp;
161 mask = "INBOX" ; 167 mask = "INBOX" ;
162 result = clist_new(); 168 result = clist_new();
163 mailimap_mailbox_list *list; 169 mailimap_mailbox_list *list;
164 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); 170 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result );
165 if ( err == MAILIMAP_NO_ERROR ) { 171 if ( err == MAILIMAP_NO_ERROR ) {
166 current = result->first; 172 current = result->first;
167 for ( int i = result->count; i > 0; i-- ) { 173 for ( int i = result->count; i > 0; i-- ) {
168 list = (mailimap_mailbox_list *) current->data; 174 list = (mailimap_mailbox_list *) current->data;
169 // it is better use the deep copy mechanism of qt itself 175 // it is better use the deep copy mechanism of qt itself
170 // instead of using strdup! 176 // instead of using strdup!
171 temp = list->mb; 177 temp = list->mb;
172 folders->append( new IMAPFolder(temp)); 178 folders->append( new IMAPFolder(temp));
173 current = current->next; 179 current = current->next;
174 } 180 }
175 } else { 181 } else {
176 qDebug("error fetching folders: %s",m_imap->response); 182 qDebug("error fetching folders: %s",m_imap->response);
177 } 183 }
178 mailimap_list_result_free( result ); 184 mailimap_list_result_free( result );
179 185
180/* 186/*
181 * second stage - get the other then inbox folders 187 * second stage - get the other then inbox folders
182 */ 188 */
183 mask = "*" ; 189 mask = "*" ;
184 path = account->getPrefix().latin1(); 190 path = account->getPrefix().latin1();
185 result = clist_new(); 191 result = clist_new();
186 qDebug(path); 192 qDebug(path);
187 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result ); 193 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result );
188 if ( err == MAILIMAP_NO_ERROR ) { 194 if ( err == MAILIMAP_NO_ERROR ) {
189 current = result->first; 195 current = result->first;
190 for ( int i = result->count; i > 0; i-- ) { 196 for ( int i = result->count; i > 0; i-- ) {
191 list = (mailimap_mailbox_list *) current->data; 197 list = (mailimap_mailbox_list *) current->data;
192 // it is better use the deep copy mechanism of qt itself 198 // it is better use the deep copy mechanism of qt itself
193 // instead of using strdup! 199 // instead of using strdup!
194 temp = list->mb; 200 temp = list->mb;
195 current = current->next; 201 current = current->next;
196 if (temp.lower()=="inbox") 202 if (temp.lower()=="inbox")
197 continue; 203 continue;
198 folders->append(new IMAPFolder(temp)); 204 folders->append(new IMAPFolder(temp));
199 205
200 } 206 }
201 } else { 207 } else {
202 qDebug("error fetching folders %s",m_imap->response); 208 qDebug("error fetching folders %s",m_imap->response);
203 } 209 }
204 mailimap_list_result_free( result ); 210 mailimap_list_result_free( result );
205 return folders; 211 return folders;
206} 212}
207 213
208RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att) 214RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
209{ 215{
210 RecMail * m = 0; 216 RecMail * m = 0;
211 mailimap_msg_att_item *item=0; 217 mailimap_msg_att_item *item=0;
212 clistcell *current,*c,*cf; 218 clistcell *current,*c,*cf;
213 mailimap_msg_att_dynamic*flist; 219 mailimap_msg_att_dynamic*flist;
214 mailimap_flag_fetch*cflag; 220 mailimap_flag_fetch*cflag;
215 QBitArray mFlags(7); 221 QBitArray mFlags(7);
216 QStringList addresslist; 222 QStringList addresslist;
217 223
218 if (!m_att) { 224 if (!m_att) {
219 return m; 225 return m;
220 } 226 }
221 227
222 c = clist_begin(m_att->list); 228 c = clist_begin(m_att->list);
223 while ( c ) { 229 while ( c ) {
224 current = c; 230 current = c;
225 c = c->next; 231 c = c->next;
226 item = (mailimap_msg_att_item*)current->data; 232 item = (mailimap_msg_att_item*)current->data;
227 if (item->type!=MAILIMAP_MSG_ATT_ITEM_STATIC) { 233 if (item->type!=MAILIMAP_MSG_ATT_ITEM_STATIC) {
228 flist = (mailimap_msg_att_dynamic*)item->msg_att_dyn; 234 flist = (mailimap_msg_att_dynamic*)item->msg_att_dyn;
229 if (!flist->list) { 235 if (!flist->list) {
230 continue; 236 continue;
231 } 237 }
232 cf = flist->list->first; 238 cf = flist->list->first;
233 while (cf) { 239 while (cf) {
@@ -316,115 +322,115 @@ RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
316 m->setFlags(mFlags); 322 m->setFlags(mFlags);
317 } 323 }
318 return m; 324 return m;
319} 325}
320 326
321RecBody IMAPwrapper::fetchBody(const RecMail&mail) 327RecBody IMAPwrapper::fetchBody(const RecMail&mail)
322{ 328{
323 RecBody body; 329 RecBody body;
324 const char *mb; 330 const char *mb;
325 int err = MAILIMAP_NO_ERROR; 331 int err = MAILIMAP_NO_ERROR;
326 clist *result; 332 clist *result;
327 clistcell *current; 333 clistcell *current;
328 mailimap_fetch_att *fetchAtt; 334 mailimap_fetch_att *fetchAtt;
329 mailimap_fetch_type *fetchType; 335 mailimap_fetch_type *fetchType;
330 mailimap_set *set; 336 mailimap_set *set;
331 mailimap_body*body_desc; 337 mailimap_body*body_desc;
332 338
333 mb = mail.getMbox().latin1(); 339 mb = mail.getMbox().latin1();
334 340
335 login(); 341 login();
336 if (!m_imap) { 342 if (!m_imap) {
337 return body; 343 return body;
338 } 344 }
339 /* select mailbox READONLY for operations */ 345 /* select mailbox READONLY for operations */
340 err = mailimap_examine( m_imap, (char*)mb); 346 err = mailimap_examine( m_imap, (char*)mb);
341 if ( err != MAILIMAP_NO_ERROR ) { 347 if ( err != MAILIMAP_NO_ERROR ) {
342 qDebug("error selecting mailbox: %s",m_imap->response); 348 qDebug("error selecting mailbox: %s",m_imap->response);
343 logout(); 349 logout();
344 return body; 350 return body;
345 } 351 }
346 result = clist_new(); 352 result = clist_new();
347 /* the range has to start at 1!!! not with 0!!!! */ 353 /* the range has to start at 1!!! not with 0!!!! */
348 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); 354 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() );
349 fetchAtt = mailimap_fetch_att_new_body(); 355 fetchAtt = mailimap_fetch_att_new_body();
350 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 356 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
351 err = mailimap_fetch( m_imap, set, fetchType, &result ); 357 err = mailimap_fetch( m_imap, set, fetchType, &result );
352 mailimap_set_free( set ); 358 mailimap_set_free( set );
353 mailimap_fetch_type_free( fetchType ); 359 mailimap_fetch_type_free( fetchType );
354 360
355 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 361 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
356 mailimap_msg_att * msg_att; 362 mailimap_msg_att * msg_att;
357 msg_att = (mailimap_msg_att*)current->data; 363 msg_att = (mailimap_msg_att*)current->data;
358 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data; 364 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data;
359 body_desc = item->msg_att_static->body; 365 body_desc = item->msg_att_static->body;
360 if (body_desc->type==MAILIMAP_BODY_1PART) { 366 if (body_desc->type==MAILIMAP_BODY_1PART) {
361 searchBodyText(mail,body_desc->body_1part,body); 367 searchBodyText(mail,body_desc->body_1part,body);
362 } else { 368 } else {
363 } 369 }
364 370
365 } else { 371 } else {
366 qDebug("error fetching body: %s",m_imap->response); 372 qDebug("error fetching body: %s",m_imap->response);
367 } 373 }
368 374
369 clist_free(result); 375 clist_free(result);
370 logout(); 376 logout();
371 return body; 377 return body;
372} 378}
373 379
374void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body) 380void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body)
375{ 381{
376 if (!mailDescription) { 382 if (!mailDescription) {
377 return; 383 return;
378 } 384 }
379 switch (mailDescription->type) { 385 switch (mailDescription->type) {
380 case MAILIMAP_BODY_TYPE_1PART_TEXT: 386 case MAILIMAP_BODY_TYPE_1PART_TEXT:
381 fillPlainBody(mail,target_body,mailDescription->body_type_text); 387 fillPlainBody(mail,target_body,mailDescription->body_type_text);
382 break; 388 break;
383 default: 389 default:
384 break; 390 break;
385 } 391 }
386 return; 392 return;
387} 393}
388 394
389void IMAPwrapper::fillPlainBody(const RecMail&mail,RecBody&target_body, mailimap_body_type_text * text_body) 395void IMAPwrapper::fillPlainBody(const RecMail&mail,RecBody&target_body, mailimap_body_type_text * text_body)
390{ 396{
391 const char *mb; 397 const char *mb;
392 QString body=""; 398 QString body="";
393 int err = MAILIMAP_NO_ERROR; 399 int err = MAILIMAP_NO_ERROR;
394 clist *result; 400 clist *result;
395 clistcell *current; 401 clistcell *current;
396 mailimap_fetch_att *fetchAtt; 402 mailimap_fetch_att *fetchAtt;
397 mailimap_fetch_type *fetchType; 403 mailimap_fetch_type *fetchType;
398 mailimap_set *set; 404 mailimap_set *set;
399 405
400 mb = mail.getMbox().latin1(); 406 mb = mail.getMbox().latin1();
401 407
402 if (!m_imap) { 408 if (!m_imap) {
403 return; 409 return;
404 } 410 }
405 411
406 result = clist_new(); 412 result = clist_new();
407 /* the range has to start at 1!!! not with 0!!!! */ 413 /* the range has to start at 1!!! not with 0!!!! */
408 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); 414 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() );
409 fetchAtt = mailimap_fetch_att_new_rfc822_text(); 415 fetchAtt = mailimap_fetch_att_new_rfc822_text();
410 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 416 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
411 err = mailimap_fetch( m_imap, set, fetchType, &result ); 417 err = mailimap_fetch( m_imap, set, fetchType, &result );
412 mailimap_set_free( set ); 418 mailimap_set_free( set );
413 mailimap_fetch_type_free( fetchType ); 419 mailimap_fetch_type_free( fetchType );
414 420
415 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 421 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
416 mailimap_msg_att * msg_att; 422 mailimap_msg_att * msg_att;
417 msg_att = (mailimap_msg_att*)current->data; 423 msg_att = (mailimap_msg_att*)current->data;
418 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data; 424 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data;
419 if (item->msg_att_static && item->msg_att_static->rfc822_text) { 425 if (item->msg_att_static && item->msg_att_static->rfc822_text) {
420 body = item->msg_att_static->rfc822_text; 426 body = item->msg_att_static->rfc822_text;
421 } 427 }
422 } else { 428 } else {
423 qDebug("error fetching text: %s",m_imap->response); 429 qDebug("error fetching text: %s",m_imap->response);
424 } 430 }
425 clist_free(result); 431 clist_free(result);
426 target_body.setBodytext(body); 432 target_body.setBodytext(body);
427 return; 433 return;
428} 434}
429 435
430QStringList IMAPwrapper::address_list_to_stringlist(clist*list) 436QStringList IMAPwrapper::address_list_to_stringlist(clist*list)
diff --git a/noncore/net/mail/mainwindow.cpp b/noncore/net/mail/mainwindow.cpp
index 3edfff1..6d13a8b 100644
--- a/noncore/net/mail/mainwindow.cpp
+++ b/noncore/net/mail/mainwindow.cpp
@@ -2,33 +2,33 @@
2#include <qvbox.h> 2#include <qvbox.h>
3#include <qheader.h> 3#include <qheader.h>
4#include <qtimer.h> 4#include <qtimer.h>
5#include <qlayout.h> 5#include <qlayout.h>
6 6
7#include <qpe/qpeapplication.h> 7#include <qpe/qpeapplication.h>
8 8
9#include "defines.h" 9#include "defines.h"
10#include "mainwindow.h" 10#include "mainwindow.h"
11#include "viewmail.h" 11#include "viewmail.h"
12#include "mailtypes.h" 12#include "mailtypes.h"
13#include "mailistviewitem.h" 13#include "mailistviewitem.h"
14 14
15MainWindow::MainWindow( QWidget *parent, const char *name, WFlags flags ) 15MainWindow::MainWindow( QWidget *parent, const char *name, WFlags flags )
16 : QMainWindow( parent, name, flags ) 16 : QMainWindow( parent, name, flags )
17{ 17{
18 setCaption( tr( "Opie-Mail" ) ); 18 setCaption( tr( "Mail" ) );
19 setToolBarsMovable( false ); 19 setToolBarsMovable( false );
20 20
21 toolBar = new QToolBar( this ); 21 toolBar = new QToolBar( this );
22 menuBar = new QMenuBar( toolBar ); 22 menuBar = new QMenuBar( toolBar );
23 mailMenu = new QPopupMenu( menuBar ); 23 mailMenu = new QPopupMenu( menuBar );
24 menuBar->insertItem( tr( "Mail" ), mailMenu ); 24 menuBar->insertItem( tr( "Mail" ), mailMenu );
25 settingsMenu = new QPopupMenu( menuBar ); 25 settingsMenu = new QPopupMenu( menuBar );
26 menuBar->insertItem( tr( "Settings" ), settingsMenu ); 26 menuBar->insertItem( tr( "Settings" ), settingsMenu );
27 27
28 addToolBar( toolBar ); 28 addToolBar( toolBar );
29 toolBar->setHorizontalStretchable( true ); 29 toolBar->setHorizontalStretchable( true );
30 30
31 QLabel *spacer = new QLabel( toolBar ); 31 QLabel *spacer = new QLabel( toolBar );
32 spacer->setBackgroundMode( QWidget::PaletteButton ); 32 spacer->setBackgroundMode( QWidget::PaletteButton );
33 toolBar->setStretchableWidget( spacer ); 33 toolBar->setStretchableWidget( spacer );
34 34