summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/imapwrapper.cpp4
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.cpp4
-rw-r--r--noncore/net/mail/libmailwrapper/mailwrapper.cpp12
-rw-r--r--noncore/net/mail/libmailwrapper/mailwrapper.h4
-rw-r--r--noncore/net/mail/mailwrapper.cpp12
-rw-r--r--noncore/net/mail/mailwrapper.h4
6 files changed, 32 insertions, 8 deletions
diff --git a/noncore/net/mail/imapwrapper.cpp b/noncore/net/mail/imapwrapper.cpp
index b253b49..0ce2c6c 100644
--- a/noncore/net/mail/imapwrapper.cpp
+++ b/noncore/net/mail/imapwrapper.cpp
@@ -107,197 +107,199 @@ void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
107 107
108 result = clist_new(); 108 result = clist_new();
109 /* the range has to start at 1!!! not with 0!!!! */ 109 /* the range has to start at 1!!! not with 0!!!! */
110 set = mailimap_set_new_interval( 1, last ); 110 set = mailimap_set_new_interval( 1, last );
111 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 111 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
112 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope()); 112 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope());
113 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags()); 113 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags());
114 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate()); 114 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate());
115 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size()); 115 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size());
116 116
117 err = mailimap_fetch( m_imap, set, fetchType, &result ); 117 err = mailimap_fetch( m_imap, set, fetchType, &result );
118 mailimap_set_free( set ); 118 mailimap_set_free( set );
119 mailimap_fetch_type_free( fetchType ); 119 mailimap_fetch_type_free( fetchType );
120 120
121 QString date,subject,from; 121 QString date,subject,from;
122 122
123 if ( err == MAILIMAP_NO_ERROR ) { 123 if ( err == MAILIMAP_NO_ERROR ) {
124 124
125 mailimap_msg_att * msg_att; 125 mailimap_msg_att * msg_att;
126 int i = 0; 126 int i = 0;
127 for (current = clist_begin(result); current != 0; current=clist_next(current)) { 127 for (current = clist_begin(result); current != 0; current=clist_next(current)) {
128 ++i; 128 ++i;
129 msg_att = (mailimap_msg_att*)current->data; 129 msg_att = (mailimap_msg_att*)current->data;
130 RecMail*m = parse_list_result(msg_att); 130 RecMail*m = parse_list_result(msg_att);
131 if (m) { 131 if (m) {
132 m->setNumber(i); 132 m->setNumber(i);
133 m->setMbox(mailbox); 133 m->setMbox(mailbox);
134 m->setWrapper(this); 134 m->setWrapper(this);
135 target.append(m); 135 target.append(m);
136 } 136 }
137 } 137 }
138 } else { 138 } else {
139 qDebug("Error fetching headers: %s",m_imap->imap_response); 139 qDebug("Error fetching headers: %s",m_imap->imap_response);
140 } 140 }
141 mailimap_fetch_list_free(result); 141 mailimap_fetch_list_free(result);
142} 142}
143 143
144QList<Folder>* IMAPwrapper::listFolders() 144QList<Folder>* IMAPwrapper::listFolders()
145{ 145{
146 const char *path, *mask; 146 const char *path, *mask;
147 int err = MAILIMAP_NO_ERROR; 147 int err = MAILIMAP_NO_ERROR;
148 clist *result; 148 clist *result;
149 clistcell *current; 149 clistcell *current;
150 150
151 QList<Folder> * folders = new QList<Folder>(); 151 QList<Folder> * folders = new QList<Folder>();
152 folders->setAutoDelete( false ); 152 folders->setAutoDelete( false );
153 login(); 153 login();
154 if (!m_imap) { 154 if (!m_imap) {
155 return folders; 155 return folders;
156 } 156 }
157 157
158/* 158/*
159 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 159 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
160 * We must not forget to filter them out in next loop! 160 * We must not forget to filter them out in next loop!
161 * it seems like ugly code. and yes - it is ugly code. but the best way. 161 * it seems like ugly code. and yes - it is ugly code. but the best way.
162 */ 162 */
163 QString temp; 163 QString temp;
164 mask = "INBOX" ; 164 mask = "INBOX" ;
165 result = clist_new(); 165 result = clist_new();
166 mailimap_mailbox_list *list; 166 mailimap_mailbox_list *list;
167 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); 167 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result );
168 if ( err == MAILIMAP_NO_ERROR ) { 168 if ( err == MAILIMAP_NO_ERROR ) {
169 current = result->first; 169 current = result->first;
170 for ( int i = result->count; i > 0; i-- ) { 170 for ( int i = result->count; i > 0; i-- ) {
171 list = (mailimap_mailbox_list *) current->data; 171 list = (mailimap_mailbox_list *) current->data;
172 // it is better use the deep copy mechanism of qt itself 172 // it is better use the deep copy mechanism of qt itself
173 // instead of using strdup! 173 // instead of using strdup!
174 temp = list->mb_name; 174 temp = list->mb_name;
175 folders->append( new IMAPFolder(temp)); 175 folders->append( new IMAPFolder(temp));
176 current = current->next; 176 current = current->next;
177 } 177 }
178 } else { 178 } else {
179 qDebug("error fetching folders: %s",m_imap->imap_response); 179 qDebug("error fetching folders: %s",m_imap->imap_response);
180 } 180 }
181 mailimap_list_result_free( result ); 181 mailimap_list_result_free( result );
182 182
183/* 183/*
184 * second stage - get the other then inbox folders 184 * second stage - get the other then inbox folders
185 */ 185 */
186 mask = "*" ; 186 mask = "*" ;
187 path = account->getPrefix().latin1(); 187 path = account->getPrefix().latin1();
188 if (!path) path = ""; 188 if (!path) path = "";
189 result = clist_new(); 189 result = clist_new();
190 qDebug(path); 190 qDebug(path);
191 bool selectable = true; 191 bool selectable = true;
192 mailimap_mbx_list_flags*bflags; 192 mailimap_mbx_list_flags*bflags;
193 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result ); 193 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result );
194 if ( err == MAILIMAP_NO_ERROR ) { 194 if ( err == MAILIMAP_NO_ERROR ) {
195 current = result->first; 195 current = result->first;
196 for ( current=clist_begin(result);current!=NULL;current=clist_next(current)) { 196 for ( current=clist_begin(result);current!=NULL;current=clist_next(current)) {
197 list = (mailimap_mailbox_list *) current->data; 197 list = (mailimap_mailbox_list *) current->data;
198 // it is better use the deep copy mechanism of qt itself 198 // it is better use the deep copy mechanism of qt itself
199 // instead of using strdup! 199 // instead of using strdup!
200 temp = list->mb_name; 200 temp = list->mb_name;
201 if (temp.lower()=="inbox") 201 if (temp.lower()=="inbox")
202 continue; 202 continue;
203 if (temp.lower()==account->getPrefix().lower())
204 continue;
203 if ( (bflags = list->mb_flag) ) { 205 if ( (bflags = list->mb_flag) ) {
204 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& 206 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&&
205 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); 207 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT);
206 } 208 }
207 folders->append(new IMAPFolder(temp,selectable)); 209 folders->append(new IMAPFolder(temp,selectable,account->getPrefix()));
208 } 210 }
209 } else { 211 } else {
210 qDebug("error fetching folders %s",m_imap->imap_response); 212 qDebug("error fetching folders %s",m_imap->imap_response);
211 } 213 }
212 mailimap_list_result_free( result ); 214 mailimap_list_result_free( result );
213 return folders; 215 return folders;
214} 216}
215 217
216RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att) 218RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
217{ 219{
218 RecMail * m = 0; 220 RecMail * m = 0;
219 mailimap_msg_att_item *item=0; 221 mailimap_msg_att_item *item=0;
220 clistcell *current,*c,*cf; 222 clistcell *current,*c,*cf;
221 mailimap_msg_att_dynamic*flist; 223 mailimap_msg_att_dynamic*flist;
222 mailimap_flag_fetch*cflag; 224 mailimap_flag_fetch*cflag;
223 int size; 225 int size;
224 QBitArray mFlags(7); 226 QBitArray mFlags(7);
225 QStringList addresslist; 227 QStringList addresslist;
226 228
227 if (!m_att) { 229 if (!m_att) {
228 return m; 230 return m;
229 } 231 }
230 m = new RecMail(); 232 m = new RecMail();
231 for (c = clist_begin(m_att->att_list); c!=NULL;c=clist_next(c) ) { 233 for (c = clist_begin(m_att->att_list); c!=NULL;c=clist_next(c) ) {
232 current = c; 234 current = c;
233 size = 0; 235 size = 0;
234 item = (mailimap_msg_att_item*)current->data; 236 item = (mailimap_msg_att_item*)current->data;
235 if (item->att_type!=MAILIMAP_MSG_ATT_ITEM_STATIC) { 237 if (item->att_type!=MAILIMAP_MSG_ATT_ITEM_STATIC) {
236 flist = (mailimap_msg_att_dynamic*)item->att_data.att_dyn; 238 flist = (mailimap_msg_att_dynamic*)item->att_data.att_dyn;
237 if (!flist->att_list) { 239 if (!flist->att_list) {
238 continue; 240 continue;
239 } 241 }
240 cf = flist->att_list->first; 242 cf = flist->att_list->first;
241 for (cf = clist_begin(flist->att_list); cf!=NULL; cf = clist_next(cf)) { 243 for (cf = clist_begin(flist->att_list); cf!=NULL; cf = clist_next(cf)) {
242 cflag = (mailimap_flag_fetch*)cf->data; 244 cflag = (mailimap_flag_fetch*)cf->data;
243 if (cflag->fl_type==MAILIMAP_FLAG_FETCH_OTHER && cflag->fl_flag!=0) { 245 if (cflag->fl_type==MAILIMAP_FLAG_FETCH_OTHER && cflag->fl_flag!=0) {
244 switch (cflag->fl_flag->fl_type) { 246 switch (cflag->fl_flag->fl_type) {
245 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */ 247 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */
246 mFlags.setBit(FLAG_ANSWERED); 248 mFlags.setBit(FLAG_ANSWERED);
247 break; 249 break;
248 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */ 250 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */
249 mFlags.setBit(FLAG_FLAGGED); 251 mFlags.setBit(FLAG_FLAGGED);
250 break; 252 break;
251 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */ 253 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */
252 mFlags.setBit(FLAG_DELETED); 254 mFlags.setBit(FLAG_DELETED);
253 break; 255 break;
254 case MAILIMAP_FLAG_SEEN: /* \Seen flag */ 256 case MAILIMAP_FLAG_SEEN: /* \Seen flag */
255 mFlags.setBit(FLAG_SEEN); 257 mFlags.setBit(FLAG_SEEN);
256 break; 258 break;
257 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */ 259 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */
258 mFlags.setBit(FLAG_DRAFT); 260 mFlags.setBit(FLAG_DRAFT);
259 break; 261 break;
260 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */ 262 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */
261 break; 263 break;
262 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */ 264 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */
263 break; 265 break;
264 default: 266 default:
265 break; 267 break;
266 } 268 }
267 } else if (cflag->fl_type==MAILIMAP_FLAG_FETCH_RECENT) { 269 } else if (cflag->fl_type==MAILIMAP_FLAG_FETCH_RECENT) {
268 mFlags.setBit(FLAG_RECENT); 270 mFlags.setBit(FLAG_RECENT);
269 } 271 }
270 } 272 }
271 continue; 273 continue;
272 } 274 }
273 if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_ENVELOPE) { 275 if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_ENVELOPE) {
274 mailimap_envelope * head = item->att_data.att_static->att_data.att_env; 276 mailimap_envelope * head = item->att_data.att_static->att_data.att_env;
275 m->setDate(head->env_date); 277 m->setDate(head->env_date);
276 m->setSubject(head->env_subject); 278 m->setSubject(head->env_subject);
277 if (head->env_from!=NULL) { 279 if (head->env_from!=NULL) {
278 addresslist = address_list_to_stringlist(head->env_from->frm_list); 280 addresslist = address_list_to_stringlist(head->env_from->frm_list);
279 if (addresslist.count()) { 281 if (addresslist.count()) {
280 m->setFrom(addresslist.first()); 282 m->setFrom(addresslist.first());
281 } 283 }
282 } 284 }
283 if (head->env_to!=NULL) { 285 if (head->env_to!=NULL) {
284 addresslist = address_list_to_stringlist(head->env_to->to_list); 286 addresslist = address_list_to_stringlist(head->env_to->to_list);
285 m->setTo(addresslist); 287 m->setTo(addresslist);
286 } 288 }
287 if (head->env_cc!=NULL) { 289 if (head->env_cc!=NULL) {
288 addresslist = address_list_to_stringlist(head->env_cc->cc_list); 290 addresslist = address_list_to_stringlist(head->env_cc->cc_list);
289 m->setCC(addresslist); 291 m->setCC(addresslist);
290 } 292 }
291 if (head->env_bcc!=NULL) { 293 if (head->env_bcc!=NULL) {
292 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list); 294 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list);
293 m->setBcc(addresslist); 295 m->setBcc(addresslist);
294 } 296 }
295 if (head->env_reply_to!=NULL) { 297 if (head->env_reply_to!=NULL) {
296 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list); 298 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list);
297 if (addresslist.count()) { 299 if (addresslist.count()) {
298 m->setReplyto(addresslist.first()); 300 m->setReplyto(addresslist.first());
299 } 301 }
300 } 302 }
301 m->setMsgid(QString(head->env_message_id)); 303 m->setMsgid(QString(head->env_message_id));
302 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) { 304 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) {
303 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date; 305 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date;
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
index b253b49..0ce2c6c 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
@@ -107,197 +107,199 @@ void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
107 107
108 result = clist_new(); 108 result = clist_new();
109 /* the range has to start at 1!!! not with 0!!!! */ 109 /* the range has to start at 1!!! not with 0!!!! */
110 set = mailimap_set_new_interval( 1, last ); 110 set = mailimap_set_new_interval( 1, last );
111 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 111 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
112 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope()); 112 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope());
113 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags()); 113 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags());
114 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate()); 114 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate());
115 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size()); 115 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size());
116 116
117 err = mailimap_fetch( m_imap, set, fetchType, &result ); 117 err = mailimap_fetch( m_imap, set, fetchType, &result );
118 mailimap_set_free( set ); 118 mailimap_set_free( set );
119 mailimap_fetch_type_free( fetchType ); 119 mailimap_fetch_type_free( fetchType );
120 120
121 QString date,subject,from; 121 QString date,subject,from;
122 122
123 if ( err == MAILIMAP_NO_ERROR ) { 123 if ( err == MAILIMAP_NO_ERROR ) {
124 124
125 mailimap_msg_att * msg_att; 125 mailimap_msg_att * msg_att;
126 int i = 0; 126 int i = 0;
127 for (current = clist_begin(result); current != 0; current=clist_next(current)) { 127 for (current = clist_begin(result); current != 0; current=clist_next(current)) {
128 ++i; 128 ++i;
129 msg_att = (mailimap_msg_att*)current->data; 129 msg_att = (mailimap_msg_att*)current->data;
130 RecMail*m = parse_list_result(msg_att); 130 RecMail*m = parse_list_result(msg_att);
131 if (m) { 131 if (m) {
132 m->setNumber(i); 132 m->setNumber(i);
133 m->setMbox(mailbox); 133 m->setMbox(mailbox);
134 m->setWrapper(this); 134 m->setWrapper(this);
135 target.append(m); 135 target.append(m);
136 } 136 }
137 } 137 }
138 } else { 138 } else {
139 qDebug("Error fetching headers: %s",m_imap->imap_response); 139 qDebug("Error fetching headers: %s",m_imap->imap_response);
140 } 140 }
141 mailimap_fetch_list_free(result); 141 mailimap_fetch_list_free(result);
142} 142}
143 143
144QList<Folder>* IMAPwrapper::listFolders() 144QList<Folder>* IMAPwrapper::listFolders()
145{ 145{
146 const char *path, *mask; 146 const char *path, *mask;
147 int err = MAILIMAP_NO_ERROR; 147 int err = MAILIMAP_NO_ERROR;
148 clist *result; 148 clist *result;
149 clistcell *current; 149 clistcell *current;
150 150
151 QList<Folder> * folders = new QList<Folder>(); 151 QList<Folder> * folders = new QList<Folder>();
152 folders->setAutoDelete( false ); 152 folders->setAutoDelete( false );
153 login(); 153 login();
154 if (!m_imap) { 154 if (!m_imap) {
155 return folders; 155 return folders;
156 } 156 }
157 157
158/* 158/*
159 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 159 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
160 * We must not forget to filter them out in next loop! 160 * We must not forget to filter them out in next loop!
161 * it seems like ugly code. and yes - it is ugly code. but the best way. 161 * it seems like ugly code. and yes - it is ugly code. but the best way.
162 */ 162 */
163 QString temp; 163 QString temp;
164 mask = "INBOX" ; 164 mask = "INBOX" ;
165 result = clist_new(); 165 result = clist_new();
166 mailimap_mailbox_list *list; 166 mailimap_mailbox_list *list;
167 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); 167 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result );
168 if ( err == MAILIMAP_NO_ERROR ) { 168 if ( err == MAILIMAP_NO_ERROR ) {
169 current = result->first; 169 current = result->first;
170 for ( int i = result->count; i > 0; i-- ) { 170 for ( int i = result->count; i > 0; i-- ) {
171 list = (mailimap_mailbox_list *) current->data; 171 list = (mailimap_mailbox_list *) current->data;
172 // it is better use the deep copy mechanism of qt itself 172 // it is better use the deep copy mechanism of qt itself
173 // instead of using strdup! 173 // instead of using strdup!
174 temp = list->mb_name; 174 temp = list->mb_name;
175 folders->append( new IMAPFolder(temp)); 175 folders->append( new IMAPFolder(temp));
176 current = current->next; 176 current = current->next;
177 } 177 }
178 } else { 178 } else {
179 qDebug("error fetching folders: %s",m_imap->imap_response); 179 qDebug("error fetching folders: %s",m_imap->imap_response);
180 } 180 }
181 mailimap_list_result_free( result ); 181 mailimap_list_result_free( result );
182 182
183/* 183/*
184 * second stage - get the other then inbox folders 184 * second stage - get the other then inbox folders
185 */ 185 */
186 mask = "*" ; 186 mask = "*" ;
187 path = account->getPrefix().latin1(); 187 path = account->getPrefix().latin1();
188 if (!path) path = ""; 188 if (!path) path = "";
189 result = clist_new(); 189 result = clist_new();
190 qDebug(path); 190 qDebug(path);
191 bool selectable = true; 191 bool selectable = true;
192 mailimap_mbx_list_flags*bflags; 192 mailimap_mbx_list_flags*bflags;
193 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result ); 193 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result );
194 if ( err == MAILIMAP_NO_ERROR ) { 194 if ( err == MAILIMAP_NO_ERROR ) {
195 current = result->first; 195 current = result->first;
196 for ( current=clist_begin(result);current!=NULL;current=clist_next(current)) { 196 for ( current=clist_begin(result);current!=NULL;current=clist_next(current)) {
197 list = (mailimap_mailbox_list *) current->data; 197 list = (mailimap_mailbox_list *) current->data;
198 // it is better use the deep copy mechanism of qt itself 198 // it is better use the deep copy mechanism of qt itself
199 // instead of using strdup! 199 // instead of using strdup!
200 temp = list->mb_name; 200 temp = list->mb_name;
201 if (temp.lower()=="inbox") 201 if (temp.lower()=="inbox")
202 continue; 202 continue;
203 if (temp.lower()==account->getPrefix().lower())
204 continue;
203 if ( (bflags = list->mb_flag) ) { 205 if ( (bflags = list->mb_flag) ) {
204 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& 206 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&&
205 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); 207 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT);
206 } 208 }
207 folders->append(new IMAPFolder(temp,selectable)); 209 folders->append(new IMAPFolder(temp,selectable,account->getPrefix()));
208 } 210 }
209 } else { 211 } else {
210 qDebug("error fetching folders %s",m_imap->imap_response); 212 qDebug("error fetching folders %s",m_imap->imap_response);
211 } 213 }
212 mailimap_list_result_free( result ); 214 mailimap_list_result_free( result );
213 return folders; 215 return folders;
214} 216}
215 217
216RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att) 218RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
217{ 219{
218 RecMail * m = 0; 220 RecMail * m = 0;
219 mailimap_msg_att_item *item=0; 221 mailimap_msg_att_item *item=0;
220 clistcell *current,*c,*cf; 222 clistcell *current,*c,*cf;
221 mailimap_msg_att_dynamic*flist; 223 mailimap_msg_att_dynamic*flist;
222 mailimap_flag_fetch*cflag; 224 mailimap_flag_fetch*cflag;
223 int size; 225 int size;
224 QBitArray mFlags(7); 226 QBitArray mFlags(7);
225 QStringList addresslist; 227 QStringList addresslist;
226 228
227 if (!m_att) { 229 if (!m_att) {
228 return m; 230 return m;
229 } 231 }
230 m = new RecMail(); 232 m = new RecMail();
231 for (c = clist_begin(m_att->att_list); c!=NULL;c=clist_next(c) ) { 233 for (c = clist_begin(m_att->att_list); c!=NULL;c=clist_next(c) ) {
232 current = c; 234 current = c;
233 size = 0; 235 size = 0;
234 item = (mailimap_msg_att_item*)current->data; 236 item = (mailimap_msg_att_item*)current->data;
235 if (item->att_type!=MAILIMAP_MSG_ATT_ITEM_STATIC) { 237 if (item->att_type!=MAILIMAP_MSG_ATT_ITEM_STATIC) {
236 flist = (mailimap_msg_att_dynamic*)item->att_data.att_dyn; 238 flist = (mailimap_msg_att_dynamic*)item->att_data.att_dyn;
237 if (!flist->att_list) { 239 if (!flist->att_list) {
238 continue; 240 continue;
239 } 241 }
240 cf = flist->att_list->first; 242 cf = flist->att_list->first;
241 for (cf = clist_begin(flist->att_list); cf!=NULL; cf = clist_next(cf)) { 243 for (cf = clist_begin(flist->att_list); cf!=NULL; cf = clist_next(cf)) {
242 cflag = (mailimap_flag_fetch*)cf->data; 244 cflag = (mailimap_flag_fetch*)cf->data;
243 if (cflag->fl_type==MAILIMAP_FLAG_FETCH_OTHER && cflag->fl_flag!=0) { 245 if (cflag->fl_type==MAILIMAP_FLAG_FETCH_OTHER && cflag->fl_flag!=0) {
244 switch (cflag->fl_flag->fl_type) { 246 switch (cflag->fl_flag->fl_type) {
245 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */ 247 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */
246 mFlags.setBit(FLAG_ANSWERED); 248 mFlags.setBit(FLAG_ANSWERED);
247 break; 249 break;
248 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */ 250 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */
249 mFlags.setBit(FLAG_FLAGGED); 251 mFlags.setBit(FLAG_FLAGGED);
250 break; 252 break;
251 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */ 253 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */
252 mFlags.setBit(FLAG_DELETED); 254 mFlags.setBit(FLAG_DELETED);
253 break; 255 break;
254 case MAILIMAP_FLAG_SEEN: /* \Seen flag */ 256 case MAILIMAP_FLAG_SEEN: /* \Seen flag */
255 mFlags.setBit(FLAG_SEEN); 257 mFlags.setBit(FLAG_SEEN);
256 break; 258 break;
257 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */ 259 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */
258 mFlags.setBit(FLAG_DRAFT); 260 mFlags.setBit(FLAG_DRAFT);
259 break; 261 break;
260 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */ 262 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */
261 break; 263 break;
262 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */ 264 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */
263 break; 265 break;
264 default: 266 default:
265 break; 267 break;
266 } 268 }
267 } else if (cflag->fl_type==MAILIMAP_FLAG_FETCH_RECENT) { 269 } else if (cflag->fl_type==MAILIMAP_FLAG_FETCH_RECENT) {
268 mFlags.setBit(FLAG_RECENT); 270 mFlags.setBit(FLAG_RECENT);
269 } 271 }
270 } 272 }
271 continue; 273 continue;
272 } 274 }
273 if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_ENVELOPE) { 275 if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_ENVELOPE) {
274 mailimap_envelope * head = item->att_data.att_static->att_data.att_env; 276 mailimap_envelope * head = item->att_data.att_static->att_data.att_env;
275 m->setDate(head->env_date); 277 m->setDate(head->env_date);
276 m->setSubject(head->env_subject); 278 m->setSubject(head->env_subject);
277 if (head->env_from!=NULL) { 279 if (head->env_from!=NULL) {
278 addresslist = address_list_to_stringlist(head->env_from->frm_list); 280 addresslist = address_list_to_stringlist(head->env_from->frm_list);
279 if (addresslist.count()) { 281 if (addresslist.count()) {
280 m->setFrom(addresslist.first()); 282 m->setFrom(addresslist.first());
281 } 283 }
282 } 284 }
283 if (head->env_to!=NULL) { 285 if (head->env_to!=NULL) {
284 addresslist = address_list_to_stringlist(head->env_to->to_list); 286 addresslist = address_list_to_stringlist(head->env_to->to_list);
285 m->setTo(addresslist); 287 m->setTo(addresslist);
286 } 288 }
287 if (head->env_cc!=NULL) { 289 if (head->env_cc!=NULL) {
288 addresslist = address_list_to_stringlist(head->env_cc->cc_list); 290 addresslist = address_list_to_stringlist(head->env_cc->cc_list);
289 m->setCC(addresslist); 291 m->setCC(addresslist);
290 } 292 }
291 if (head->env_bcc!=NULL) { 293 if (head->env_bcc!=NULL) {
292 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list); 294 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list);
293 m->setBcc(addresslist); 295 m->setBcc(addresslist);
294 } 296 }
295 if (head->env_reply_to!=NULL) { 297 if (head->env_reply_to!=NULL) {
296 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list); 298 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list);
297 if (addresslist.count()) { 299 if (addresslist.count()) {
298 m->setReplyto(addresslist.first()); 300 m->setReplyto(addresslist.first());
299 } 301 }
300 } 302 }
301 m->setMsgid(QString(head->env_message_id)); 303 m->setMsgid(QString(head->env_message_id));
302 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) { 304 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) {
303 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date; 305 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date;
diff --git a/noncore/net/mail/libmailwrapper/mailwrapper.cpp b/noncore/net/mail/libmailwrapper/mailwrapper.cpp
index 3ffc274..96602c2 100644
--- a/noncore/net/mail/libmailwrapper/mailwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/mailwrapper.cpp
@@ -1,136 +1,146 @@
1#include <stdlib.h> 1#include <stdlib.h>
2#include <sys/stat.h> 2#include <sys/stat.h>
3#include <sys/types.h> 3#include <sys/types.h>
4#include <unistd.h> 4#include <unistd.h>
5#include <fcntl.h> 5#include <fcntl.h>
6#include <string.h> 6#include <string.h>
7#include <qdir.h> 7#include <qdir.h>
8 8
9#include "mailwrapper.h" 9#include "mailwrapper.h"
10#include "logindialog.h" 10#include "logindialog.h"
11//#include "mail.h" 11//#include "mail.h"
12#include "defines.h" 12#include "defines.h"
13 13
14Attachment::Attachment( DocLnk lnk ) 14Attachment::Attachment( DocLnk lnk )
15{ 15{
16 doc = lnk; 16 doc = lnk;
17 size = QFileInfo( doc.file() ).size(); 17 size = QFileInfo( doc.file() ).size();
18} 18}
19 19
20Folder::Folder(const QString&tmp_name ) 20Folder::Folder(const QString&tmp_name )
21{ 21{
22 name = tmp_name; 22 name = tmp_name;
23 nameDisplay = name; 23 nameDisplay = name;
24 24
25 for ( int pos = nameDisplay.find( '&' ); pos != -1; 25 for ( int pos = nameDisplay.find( '&' ); pos != -1;
26 pos = nameDisplay.find( '&' ) ) { 26 pos = nameDisplay.find( '&' ) ) {
27 int end = nameDisplay.find( '-' ); 27 int end = nameDisplay.find( '-' );
28 if ( end == -1 || end <= pos ) break; 28 if ( end == -1 || end <= pos ) break;
29 QString str64 = nameDisplay.mid( pos + 1, end - pos - 1 ); 29 QString str64 = nameDisplay.mid( pos + 1, end - pos - 1 );
30 // TODO: do real base64 decoding here ! 30 // TODO: do real base64 decoding here !
31 if ( str64.compare( "APw" ) == 0 ) { 31 if ( str64.compare( "APw" ) == 0 ) {
32 nameDisplay = nameDisplay.replace( pos, end - pos + 1, "ue" ); 32 nameDisplay = nameDisplay.replace( pos, end - pos + 1, "ue" );
33 } else if ( str64.compare( "APY" ) == 0 ) { 33 } else if ( str64.compare( "APY" ) == 0 ) {
34 nameDisplay = nameDisplay.replace( pos, end - pos + 1, "oe" ); 34 nameDisplay = nameDisplay.replace( pos, end - pos + 1, "oe" );
35 } 35 }
36 } 36 }
37
38 qDebug( "folder " + name + " - displayed as " + nameDisplay ); 37 qDebug( "folder " + name + " - displayed as " + nameDisplay );
39} 38}
40 39
40
41IMAPFolder::IMAPFolder(const QString&name,bool select,const QString&prefix )
42 : Folder( name ),m_MaySelect(select)
43{
44 if (prefix.length()>0) {
45 if (nameDisplay.startsWith(prefix) && nameDisplay.length()>prefix.length()) {
46 nameDisplay=nameDisplay.right(nameDisplay.length()-prefix.length());
47 }
48 }
49}
50
41MailWrapper::MailWrapper( Settings *s ) 51MailWrapper::MailWrapper( Settings *s )
42 : QObject() 52 : QObject()
43{ 53{
44 settings = s; 54 settings = s;
45} 55}
46 56
47QString MailWrapper::mailsmtpError( int errnum ) 57QString MailWrapper::mailsmtpError( int errnum )
48{ 58{
49 switch ( errnum ) { 59 switch ( errnum ) {
50 case MAILSMTP_NO_ERROR: 60 case MAILSMTP_NO_ERROR:
51 return tr( "No error" ); 61 return tr( "No error" );
52 case MAILSMTP_ERROR_UNEXPECTED_CODE: 62 case MAILSMTP_ERROR_UNEXPECTED_CODE:
53 return tr( "Unexpected error code" ); 63 return tr( "Unexpected error code" );
54 case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE: 64 case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE:
55 return tr( "Service not available" ); 65 return tr( "Service not available" );
56 case MAILSMTP_ERROR_STREAM: 66 case MAILSMTP_ERROR_STREAM:
57 return tr( "Stream error" ); 67 return tr( "Stream error" );
58 case MAILSMTP_ERROR_HOSTNAME: 68 case MAILSMTP_ERROR_HOSTNAME:
59 return tr( "gethostname() failed" ); 69 return tr( "gethostname() failed" );
60 case MAILSMTP_ERROR_NOT_IMPLEMENTED: 70 case MAILSMTP_ERROR_NOT_IMPLEMENTED:
61 return tr( "Not implemented" ); 71 return tr( "Not implemented" );
62 case MAILSMTP_ERROR_ACTION_NOT_TAKEN: 72 case MAILSMTP_ERROR_ACTION_NOT_TAKEN:
63 return tr( "Error, action not taken" ); 73 return tr( "Error, action not taken" );
64 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION: 74 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION:
65 return tr( "Data exceeds storage allocation" ); 75 return tr( "Data exceeds storage allocation" );
66 case MAILSMTP_ERROR_IN_PROCESSING: 76 case MAILSMTP_ERROR_IN_PROCESSING:
67 return tr( "Error in processing" ); 77 return tr( "Error in processing" );
68 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE: 78 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE:
69 // return tr( "Insufficient system storage" ); 79 // return tr( "Insufficient system storage" );
70 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE: 80 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE:
71 return tr( "Mailbox unavailable" ); 81 return tr( "Mailbox unavailable" );
72 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED: 82 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED:
73 return tr( "Mailbox name not allowed" ); 83 return tr( "Mailbox name not allowed" );
74 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND: 84 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND:
75 return tr( "Bad command sequence" ); 85 return tr( "Bad command sequence" );
76 case MAILSMTP_ERROR_USER_NOT_LOCAL: 86 case MAILSMTP_ERROR_USER_NOT_LOCAL:
77 return tr( "User not local" ); 87 return tr( "User not local" );
78 case MAILSMTP_ERROR_TRANSACTION_FAILED: 88 case MAILSMTP_ERROR_TRANSACTION_FAILED:
79 return tr( "Transaction failed" ); 89 return tr( "Transaction failed" );
80 case MAILSMTP_ERROR_MEMORY: 90 case MAILSMTP_ERROR_MEMORY:
81 return tr( "Memory error" ); 91 return tr( "Memory error" );
82 case MAILSMTP_ERROR_CONNECTION_REFUSED: 92 case MAILSMTP_ERROR_CONNECTION_REFUSED:
83 return tr( "Connection refused" ); 93 return tr( "Connection refused" );
84 default: 94 default:
85 return tr( "Unknown error code" ); 95 return tr( "Unknown error code" );
86 } 96 }
87} 97}
88 98
89mailimf_mailbox *MailWrapper::newMailbox(const QString&name, const QString&mail ) 99mailimf_mailbox *MailWrapper::newMailbox(const QString&name, const QString&mail )
90{ 100{
91 return mailimf_mailbox_new( strdup( name.latin1() ), 101 return mailimf_mailbox_new( strdup( name.latin1() ),
92 strdup( mail.latin1() ) ); 102 strdup( mail.latin1() ) );
93} 103}
94 104
95mailimf_address_list *MailWrapper::parseAddresses(const QString&addr ) 105mailimf_address_list *MailWrapper::parseAddresses(const QString&addr )
96{ 106{
97 mailimf_address_list *addresses; 107 mailimf_address_list *addresses;
98 108
99 if ( addr.isEmpty() ) return NULL; 109 if ( addr.isEmpty() ) return NULL;
100 110
101 addresses = mailimf_address_list_new_empty(); 111 addresses = mailimf_address_list_new_empty();
102 112
103 QStringList list = QStringList::split( ',', addr ); 113 QStringList list = QStringList::split( ',', addr );
104 QStringList::Iterator it; 114 QStringList::Iterator it;
105 for ( it = list.begin(); it != list.end(); it++ ) { 115 for ( it = list.begin(); it != list.end(); it++ ) {
106 char *str = strdup( (*it).latin1() ); 116 char *str = strdup( (*it).latin1() );
107 int err = mailimf_address_list_add_parse( addresses, str ); 117 int err = mailimf_address_list_add_parse( addresses, str );
108 if ( err != MAILIMF_NO_ERROR ) { 118 if ( err != MAILIMF_NO_ERROR ) {
109 qDebug( "Error parsing" ); 119 qDebug( "Error parsing" );
110 qDebug( *it ); 120 qDebug( *it );
111 free( str ); 121 free( str );
112 } else { 122 } else {
113 qDebug( "Parse success! :)" ); 123 qDebug( "Parse success! :)" );
114 } 124 }
115 } 125 }
116 126
117 return addresses; 127 return addresses;
118} 128}
119 129
120mailimf_fields *MailWrapper::createImfFields( Mail *mail ) 130mailimf_fields *MailWrapper::createImfFields( Mail *mail )
121{ 131{
122 mailimf_fields *fields; 132 mailimf_fields *fields;
123 mailimf_field *xmailer; 133 mailimf_field *xmailer;
124 mailimf_mailbox *sender, *fromBox; 134 mailimf_mailbox *sender, *fromBox;
125 mailimf_mailbox_list *from; 135 mailimf_mailbox_list *from;
126 mailimf_address_list *to, *cc, *bcc, *reply; 136 mailimf_address_list *to, *cc, *bcc, *reply;
127 char *subject = strdup( mail->getSubject().latin1() ); 137 char *subject = strdup( mail->getSubject().latin1() );
128 int err; 138 int err;
129 139
130 sender = newMailbox( mail->getName(), mail->getMail() ); 140 sender = newMailbox( mail->getName(), mail->getMail() );
131 if ( sender == NULL ) goto err_free; 141 if ( sender == NULL ) goto err_free;
132 142
133 fromBox = newMailbox( mail->getName(), mail->getMail() ); 143 fromBox = newMailbox( mail->getName(), mail->getMail() );
134 if ( fromBox == NULL ) goto err_free_sender; 144 if ( fromBox == NULL ) goto err_free_sender;
135 145
136 from = mailimf_mailbox_list_new_empty(); 146 from = mailimf_mailbox_list_new_empty();
diff --git a/noncore/net/mail/libmailwrapper/mailwrapper.h b/noncore/net/mail/libmailwrapper/mailwrapper.h
index 34fd5c5..6994dd8 100644
--- a/noncore/net/mail/libmailwrapper/mailwrapper.h
+++ b/noncore/net/mail/libmailwrapper/mailwrapper.h
@@ -1,123 +1,123 @@
1#ifndef MAILWRAPPER_H 1#ifndef MAILWRAPPER_H
2#define MAILWRAPPER_H 2#define MAILWRAPPER_H
3 3
4#include <qpe/applnk.h> 4#include <qpe/applnk.h>
5 5
6#include <libetpan/mailmime.h> 6#include <libetpan/mailmime.h>
7#include <libetpan/mailimf.h> 7#include <libetpan/mailimf.h>
8#include <libetpan/mailsmtp.h> 8#include <libetpan/mailsmtp.h>
9#include <libetpan/mailstorage.h> 9#include <libetpan/mailstorage.h>
10#include <libetpan/maildriver.h> 10#include <libetpan/maildriver.h>
11#include <qbitarray.h> 11#include <qbitarray.h>
12#include <qdatetime.h> 12#include <qdatetime.h>
13 13
14#include "settings.h" 14#include "settings.h"
15 15
16class Attachment 16class Attachment
17{ 17{
18public: 18public:
19 Attachment( DocLnk lnk ); 19 Attachment( DocLnk lnk );
20 virtual ~Attachment(){} 20 virtual ~Attachment(){}
21 const QString getFileName()const{ return doc.file(); } 21 const QString getFileName()const{ return doc.file(); }
22 const QString getName()const{ return doc.name(); } 22 const QString getName()const{ return doc.name(); }
23 const QString getMimeType()const{ return doc.type(); } 23 const QString getMimeType()const{ return doc.type(); }
24 const QPixmap getPixmap()const{ return doc.pixmap(); } 24 const QPixmap getPixmap()const{ return doc.pixmap(); }
25 const int getSize()const { return size; } 25 const int getSize()const { return size; }
26 DocLnk getDocLnk() { return doc; } 26 DocLnk getDocLnk() { return doc; }
27 27
28protected: 28protected:
29 DocLnk doc; 29 DocLnk doc;
30 int size; 30 int size;
31 31
32}; 32};
33 33
34class Mail 34class Mail
35{ 35{
36public: 36public:
37 Mail(); 37 Mail();
38 /* Possible that this destructor must not be declared virtual 38 /* Possible that this destructor must not be declared virtual
39 * 'cause it seems that it will never have some child classes. 39 * 'cause it seems that it will never have some child classes.
40 * in this case this object will not get a virtual table -> memory and 40 * in this case this object will not get a virtual table -> memory and
41 * speed will be a little bit better? 41 * speed will be a little bit better?
42 */ 42 */
43 virtual ~Mail(){} 43 virtual ~Mail(){}
44 void addAttachment( Attachment *att ) { attList.append( att ); } 44 void addAttachment( Attachment *att ) { attList.append( att ); }
45 const QList<Attachment>& getAttachments()const { return attList; } 45 const QList<Attachment>& getAttachments()const { return attList; }
46 void removeAttachment( Attachment *att ) { attList.remove( att ); } 46 void removeAttachment( Attachment *att ) { attList.remove( att ); }
47 const QString&getName()const { return name; } 47 const QString&getName()const { return name; }
48 void setName( QString s ) { name = s; } 48 void setName( QString s ) { name = s; }
49 const QString&getMail()const{ return mail; } 49 const QString&getMail()const{ return mail; }
50 void setMail( const QString&s ) { mail = s; } 50 void setMail( const QString&s ) { mail = s; }
51 const QString&getTo()const{ return to; } 51 const QString&getTo()const{ return to; }
52 void setTo( const QString&s ) { to = s; } 52 void setTo( const QString&s ) { to = s; }
53 const QString&getCC()const{ return cc; } 53 const QString&getCC()const{ return cc; }
54 void setCC( const QString&s ) { cc = s; } 54 void setCC( const QString&s ) { cc = s; }
55 const QString&getBCC()const { return bcc; } 55 const QString&getBCC()const { return bcc; }
56 void setBCC( const QString&s ) { bcc = s; } 56 void setBCC( const QString&s ) { bcc = s; }
57 const QString&getMessage()const { return message; } 57 const QString&getMessage()const { return message; }
58 void setMessage( const QString&s ) { message = s; } 58 void setMessage( const QString&s ) { message = s; }
59 const QString&getSubject()const { return subject; } 59 const QString&getSubject()const { return subject; }
60 void setSubject( const QString&s ) { subject = s; } 60 void setSubject( const QString&s ) { subject = s; }
61 const QString&getReply()const{ return reply; } 61 const QString&getReply()const{ return reply; }
62 void setReply( const QString&a ) { reply = a; } 62 void setReply( const QString&a ) { reply = a; }
63 63
64private: 64private:
65 QList<Attachment> attList; 65 QList<Attachment> attList;
66 QString name, mail, to, cc, bcc, reply, subject, message; 66 QString name, mail, to, cc, bcc, reply, subject, message;
67}; 67};
68 68
69class Folder : public QObject 69class Folder : public QObject
70{ 70{
71 Q_OBJECT 71 Q_OBJECT
72 72
73public: 73public:
74 Folder( const QString&init_name ); 74 Folder( const QString&init_name );
75 const QString&getDisplayName()const { return nameDisplay; } 75 const QString&getDisplayName()const { return nameDisplay; }
76 const QString&getName()const { return name; } 76 const QString&getName()const { return name; }
77 virtual bool may_select()const{return true;}; 77 virtual bool may_select()const{return true;};
78 78
79private: 79protected:
80 QString nameDisplay, name; 80 QString nameDisplay, name;
81 81
82}; 82};
83 83
84class IMAPFolder : public Folder 84class IMAPFolder : public Folder
85{ 85{
86 public: 86 public:
87 IMAPFolder( QString name,bool select=true ) : Folder( name ),m_MaySelect(select) {} 87 IMAPFolder(const QString&name,bool select=true,const QString&prefix="" );
88 virtual bool may_select()const{return m_MaySelect;} 88 virtual bool may_select()const{return m_MaySelect;}
89 private: 89 private:
90 bool m_MaySelect; 90 bool m_MaySelect;
91}; 91};
92 92
93class MailWrapper : public QObject 93class MailWrapper : public QObject
94{ 94{
95 Q_OBJECT 95 Q_OBJECT
96 96
97public: 97public:
98 MailWrapper( Settings *s ); 98 MailWrapper( Settings *s );
99 void sendMail( Mail mail ); 99 void sendMail( Mail mail );
100 100
101private: 101private:
102 mailimf_mailbox *newMailbox(const QString&name,const QString&mail ); 102 mailimf_mailbox *newMailbox(const QString&name,const QString&mail );
103 mailimf_address_list *parseAddresses(const QString&addr ); 103 mailimf_address_list *parseAddresses(const QString&addr );
104 mailimf_fields *createImfFields( Mail *mail ); 104 mailimf_fields *createImfFields( Mail *mail );
105 mailmime *buildTxtPart( QString str ); 105 mailmime *buildTxtPart( QString str );
106 mailmime *buildFilePart( QString filename, QString mimetype ); 106 mailmime *buildFilePart( QString filename, QString mimetype );
107 void addFileParts( mailmime *message, QList<Attachment> files ); 107 void addFileParts( mailmime *message, QList<Attachment> files );
108 mailmime *createMimeMail( Mail *mail ); 108 mailmime *createMimeMail( Mail *mail );
109 void smtpSend( mailmime *mail ); 109 void smtpSend( mailmime *mail );
110 mailimf_field *getField( mailimf_fields *fields, int type ); 110 mailimf_field *getField( mailimf_fields *fields, int type );
111 clist *createRcptList( mailimf_fields *fields ); 111 clist *createRcptList( mailimf_fields *fields );
112 char *getFrom( mailmime *mail ); 112 char *getFrom( mailmime *mail );
113 SMTPaccount *getAccount( QString from ); 113 SMTPaccount *getAccount( QString from );
114 void writeToFile( QString file, mailmime *mail ); 114 void writeToFile( QString file, mailmime *mail );
115 void readFromFile( QString file, char **data, size_t *size ); 115 void readFromFile( QString file, char **data, size_t *size );
116 static QString mailsmtpError( int err ); 116 static QString mailsmtpError( int err );
117 static QString getTmpFile(); 117 static QString getTmpFile();
118 118
119 Settings *settings; 119 Settings *settings;
120 120
121}; 121};
122 122
123#endif 123#endif
diff --git a/noncore/net/mail/mailwrapper.cpp b/noncore/net/mail/mailwrapper.cpp
index 3ffc274..96602c2 100644
--- a/noncore/net/mail/mailwrapper.cpp
+++ b/noncore/net/mail/mailwrapper.cpp
@@ -1,136 +1,146 @@
1#include <stdlib.h> 1#include <stdlib.h>
2#include <sys/stat.h> 2#include <sys/stat.h>
3#include <sys/types.h> 3#include <sys/types.h>
4#include <unistd.h> 4#include <unistd.h>
5#include <fcntl.h> 5#include <fcntl.h>
6#include <string.h> 6#include <string.h>
7#include <qdir.h> 7#include <qdir.h>
8 8
9#include "mailwrapper.h" 9#include "mailwrapper.h"
10#include "logindialog.h" 10#include "logindialog.h"
11//#include "mail.h" 11//#include "mail.h"
12#include "defines.h" 12#include "defines.h"
13 13
14Attachment::Attachment( DocLnk lnk ) 14Attachment::Attachment( DocLnk lnk )
15{ 15{
16 doc = lnk; 16 doc = lnk;
17 size = QFileInfo( doc.file() ).size(); 17 size = QFileInfo( doc.file() ).size();
18} 18}
19 19
20Folder::Folder(const QString&tmp_name ) 20Folder::Folder(const QString&tmp_name )
21{ 21{
22 name = tmp_name; 22 name = tmp_name;
23 nameDisplay = name; 23 nameDisplay = name;
24 24
25 for ( int pos = nameDisplay.find( '&' ); pos != -1; 25 for ( int pos = nameDisplay.find( '&' ); pos != -1;
26 pos = nameDisplay.find( '&' ) ) { 26 pos = nameDisplay.find( '&' ) ) {
27 int end = nameDisplay.find( '-' ); 27 int end = nameDisplay.find( '-' );
28 if ( end == -1 || end <= pos ) break; 28 if ( end == -1 || end <= pos ) break;
29 QString str64 = nameDisplay.mid( pos + 1, end - pos - 1 ); 29 QString str64 = nameDisplay.mid( pos + 1, end - pos - 1 );
30 // TODO: do real base64 decoding here ! 30 // TODO: do real base64 decoding here !
31 if ( str64.compare( "APw" ) == 0 ) { 31 if ( str64.compare( "APw" ) == 0 ) {
32 nameDisplay = nameDisplay.replace( pos, end - pos + 1, "ue" ); 32 nameDisplay = nameDisplay.replace( pos, end - pos + 1, "ue" );
33 } else if ( str64.compare( "APY" ) == 0 ) { 33 } else if ( str64.compare( "APY" ) == 0 ) {
34 nameDisplay = nameDisplay.replace( pos, end - pos + 1, "oe" ); 34 nameDisplay = nameDisplay.replace( pos, end - pos + 1, "oe" );
35 } 35 }
36 } 36 }
37
38 qDebug( "folder " + name + " - displayed as " + nameDisplay ); 37 qDebug( "folder " + name + " - displayed as " + nameDisplay );
39} 38}
40 39
40
41IMAPFolder::IMAPFolder(const QString&name,bool select,const QString&prefix )
42 : Folder( name ),m_MaySelect(select)
43{
44 if (prefix.length()>0) {
45 if (nameDisplay.startsWith(prefix) && nameDisplay.length()>prefix.length()) {
46 nameDisplay=nameDisplay.right(nameDisplay.length()-prefix.length());
47 }
48 }
49}
50
41MailWrapper::MailWrapper( Settings *s ) 51MailWrapper::MailWrapper( Settings *s )
42 : QObject() 52 : QObject()
43{ 53{
44 settings = s; 54 settings = s;
45} 55}
46 56
47QString MailWrapper::mailsmtpError( int errnum ) 57QString MailWrapper::mailsmtpError( int errnum )
48{ 58{
49 switch ( errnum ) { 59 switch ( errnum ) {
50 case MAILSMTP_NO_ERROR: 60 case MAILSMTP_NO_ERROR:
51 return tr( "No error" ); 61 return tr( "No error" );
52 case MAILSMTP_ERROR_UNEXPECTED_CODE: 62 case MAILSMTP_ERROR_UNEXPECTED_CODE:
53 return tr( "Unexpected error code" ); 63 return tr( "Unexpected error code" );
54 case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE: 64 case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE:
55 return tr( "Service not available" ); 65 return tr( "Service not available" );
56 case MAILSMTP_ERROR_STREAM: 66 case MAILSMTP_ERROR_STREAM:
57 return tr( "Stream error" ); 67 return tr( "Stream error" );
58 case MAILSMTP_ERROR_HOSTNAME: 68 case MAILSMTP_ERROR_HOSTNAME:
59 return tr( "gethostname() failed" ); 69 return tr( "gethostname() failed" );
60 case MAILSMTP_ERROR_NOT_IMPLEMENTED: 70 case MAILSMTP_ERROR_NOT_IMPLEMENTED:
61 return tr( "Not implemented" ); 71 return tr( "Not implemented" );
62 case MAILSMTP_ERROR_ACTION_NOT_TAKEN: 72 case MAILSMTP_ERROR_ACTION_NOT_TAKEN:
63 return tr( "Error, action not taken" ); 73 return tr( "Error, action not taken" );
64 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION: 74 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION:
65 return tr( "Data exceeds storage allocation" ); 75 return tr( "Data exceeds storage allocation" );
66 case MAILSMTP_ERROR_IN_PROCESSING: 76 case MAILSMTP_ERROR_IN_PROCESSING:
67 return tr( "Error in processing" ); 77 return tr( "Error in processing" );
68 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE: 78 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE:
69 // return tr( "Insufficient system storage" ); 79 // return tr( "Insufficient system storage" );
70 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE: 80 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE:
71 return tr( "Mailbox unavailable" ); 81 return tr( "Mailbox unavailable" );
72 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED: 82 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED:
73 return tr( "Mailbox name not allowed" ); 83 return tr( "Mailbox name not allowed" );
74 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND: 84 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND:
75 return tr( "Bad command sequence" ); 85 return tr( "Bad command sequence" );
76 case MAILSMTP_ERROR_USER_NOT_LOCAL: 86 case MAILSMTP_ERROR_USER_NOT_LOCAL:
77 return tr( "User not local" ); 87 return tr( "User not local" );
78 case MAILSMTP_ERROR_TRANSACTION_FAILED: 88 case MAILSMTP_ERROR_TRANSACTION_FAILED:
79 return tr( "Transaction failed" ); 89 return tr( "Transaction failed" );
80 case MAILSMTP_ERROR_MEMORY: 90 case MAILSMTP_ERROR_MEMORY:
81 return tr( "Memory error" ); 91 return tr( "Memory error" );
82 case MAILSMTP_ERROR_CONNECTION_REFUSED: 92 case MAILSMTP_ERROR_CONNECTION_REFUSED:
83 return tr( "Connection refused" ); 93 return tr( "Connection refused" );
84 default: 94 default:
85 return tr( "Unknown error code" ); 95 return tr( "Unknown error code" );
86 } 96 }
87} 97}
88 98
89mailimf_mailbox *MailWrapper::newMailbox(const QString&name, const QString&mail ) 99mailimf_mailbox *MailWrapper::newMailbox(const QString&name, const QString&mail )
90{ 100{
91 return mailimf_mailbox_new( strdup( name.latin1() ), 101 return mailimf_mailbox_new( strdup( name.latin1() ),
92 strdup( mail.latin1() ) ); 102 strdup( mail.latin1() ) );
93} 103}
94 104
95mailimf_address_list *MailWrapper::parseAddresses(const QString&addr ) 105mailimf_address_list *MailWrapper::parseAddresses(const QString&addr )
96{ 106{
97 mailimf_address_list *addresses; 107 mailimf_address_list *addresses;
98 108
99 if ( addr.isEmpty() ) return NULL; 109 if ( addr.isEmpty() ) return NULL;
100 110
101 addresses = mailimf_address_list_new_empty(); 111 addresses = mailimf_address_list_new_empty();
102 112
103 QStringList list = QStringList::split( ',', addr ); 113 QStringList list = QStringList::split( ',', addr );
104 QStringList::Iterator it; 114 QStringList::Iterator it;
105 for ( it = list.begin(); it != list.end(); it++ ) { 115 for ( it = list.begin(); it != list.end(); it++ ) {
106 char *str = strdup( (*it).latin1() ); 116 char *str = strdup( (*it).latin1() );
107 int err = mailimf_address_list_add_parse( addresses, str ); 117 int err = mailimf_address_list_add_parse( addresses, str );
108 if ( err != MAILIMF_NO_ERROR ) { 118 if ( err != MAILIMF_NO_ERROR ) {
109 qDebug( "Error parsing" ); 119 qDebug( "Error parsing" );
110 qDebug( *it ); 120 qDebug( *it );
111 free( str ); 121 free( str );
112 } else { 122 } else {
113 qDebug( "Parse success! :)" ); 123 qDebug( "Parse success! :)" );
114 } 124 }
115 } 125 }
116 126
117 return addresses; 127 return addresses;
118} 128}
119 129
120mailimf_fields *MailWrapper::createImfFields( Mail *mail ) 130mailimf_fields *MailWrapper::createImfFields( Mail *mail )
121{ 131{
122 mailimf_fields *fields; 132 mailimf_fields *fields;
123 mailimf_field *xmailer; 133 mailimf_field *xmailer;
124 mailimf_mailbox *sender, *fromBox; 134 mailimf_mailbox *sender, *fromBox;
125 mailimf_mailbox_list *from; 135 mailimf_mailbox_list *from;
126 mailimf_address_list *to, *cc, *bcc, *reply; 136 mailimf_address_list *to, *cc, *bcc, *reply;
127 char *subject = strdup( mail->getSubject().latin1() ); 137 char *subject = strdup( mail->getSubject().latin1() );
128 int err; 138 int err;
129 139
130 sender = newMailbox( mail->getName(), mail->getMail() ); 140 sender = newMailbox( mail->getName(), mail->getMail() );
131 if ( sender == NULL ) goto err_free; 141 if ( sender == NULL ) goto err_free;
132 142
133 fromBox = newMailbox( mail->getName(), mail->getMail() ); 143 fromBox = newMailbox( mail->getName(), mail->getMail() );
134 if ( fromBox == NULL ) goto err_free_sender; 144 if ( fromBox == NULL ) goto err_free_sender;
135 145
136 from = mailimf_mailbox_list_new_empty(); 146 from = mailimf_mailbox_list_new_empty();
diff --git a/noncore/net/mail/mailwrapper.h b/noncore/net/mail/mailwrapper.h
index 34fd5c5..6994dd8 100644
--- a/noncore/net/mail/mailwrapper.h
+++ b/noncore/net/mail/mailwrapper.h
@@ -1,123 +1,123 @@
1#ifndef MAILWRAPPER_H 1#ifndef MAILWRAPPER_H
2#define MAILWRAPPER_H 2#define MAILWRAPPER_H
3 3
4#include <qpe/applnk.h> 4#include <qpe/applnk.h>
5 5
6#include <libetpan/mailmime.h> 6#include <libetpan/mailmime.h>
7#include <libetpan/mailimf.h> 7#include <libetpan/mailimf.h>
8#include <libetpan/mailsmtp.h> 8#include <libetpan/mailsmtp.h>
9#include <libetpan/mailstorage.h> 9#include <libetpan/mailstorage.h>
10#include <libetpan/maildriver.h> 10#include <libetpan/maildriver.h>
11#include <qbitarray.h> 11#include <qbitarray.h>
12#include <qdatetime.h> 12#include <qdatetime.h>
13 13
14#include "settings.h" 14#include "settings.h"
15 15
16class Attachment 16class Attachment
17{ 17{
18public: 18public:
19 Attachment( DocLnk lnk ); 19 Attachment( DocLnk lnk );
20 virtual ~Attachment(){} 20 virtual ~Attachment(){}
21 const QString getFileName()const{ return doc.file(); } 21 const QString getFileName()const{ return doc.file(); }
22 const QString getName()const{ return doc.name(); } 22 const QString getName()const{ return doc.name(); }
23 const QString getMimeType()const{ return doc.type(); } 23 const QString getMimeType()const{ return doc.type(); }
24 const QPixmap getPixmap()const{ return doc.pixmap(); } 24 const QPixmap getPixmap()const{ return doc.pixmap(); }
25 const int getSize()const { return size; } 25 const int getSize()const { return size; }
26 DocLnk getDocLnk() { return doc; } 26 DocLnk getDocLnk() { return doc; }
27 27
28protected: 28protected:
29 DocLnk doc; 29 DocLnk doc;
30 int size; 30 int size;
31 31
32}; 32};
33 33
34class Mail 34class Mail
35{ 35{
36public: 36public:
37 Mail(); 37 Mail();
38 /* Possible that this destructor must not be declared virtual 38 /* Possible that this destructor must not be declared virtual
39 * 'cause it seems that it will never have some child classes. 39 * 'cause it seems that it will never have some child classes.
40 * in this case this object will not get a virtual table -> memory and 40 * in this case this object will not get a virtual table -> memory and
41 * speed will be a little bit better? 41 * speed will be a little bit better?
42 */ 42 */
43 virtual ~Mail(){} 43 virtual ~Mail(){}
44 void addAttachment( Attachment *att ) { attList.append( att ); } 44 void addAttachment( Attachment *att ) { attList.append( att ); }
45 const QList<Attachment>& getAttachments()const { return attList; } 45 const QList<Attachment>& getAttachments()const { return attList; }
46 void removeAttachment( Attachment *att ) { attList.remove( att ); } 46 void removeAttachment( Attachment *att ) { attList.remove( att ); }
47 const QString&getName()const { return name; } 47 const QString&getName()const { return name; }
48 void setName( QString s ) { name = s; } 48 void setName( QString s ) { name = s; }
49 const QString&getMail()const{ return mail; } 49 const QString&getMail()const{ return mail; }
50 void setMail( const QString&s ) { mail = s; } 50 void setMail( const QString&s ) { mail = s; }
51 const QString&getTo()const{ return to; } 51 const QString&getTo()const{ return to; }
52 void setTo( const QString&s ) { to = s; } 52 void setTo( const QString&s ) { to = s; }
53 const QString&getCC()const{ return cc; } 53 const QString&getCC()const{ return cc; }
54 void setCC( const QString&s ) { cc = s; } 54 void setCC( const QString&s ) { cc = s; }
55 const QString&getBCC()const { return bcc; } 55 const QString&getBCC()const { return bcc; }
56 void setBCC( const QString&s ) { bcc = s; } 56 void setBCC( const QString&s ) { bcc = s; }
57 const QString&getMessage()const { return message; } 57 const QString&getMessage()const { return message; }
58 void setMessage( const QString&s ) { message = s; } 58 void setMessage( const QString&s ) { message = s; }
59 const QString&getSubject()const { return subject; } 59 const QString&getSubject()const { return subject; }
60 void setSubject( const QString&s ) { subject = s; } 60 void setSubject( const QString&s ) { subject = s; }
61 const QString&getReply()const{ return reply; } 61 const QString&getReply()const{ return reply; }
62 void setReply( const QString&a ) { reply = a; } 62 void setReply( const QString&a ) { reply = a; }
63 63
64private: 64private:
65 QList<Attachment> attList; 65 QList<Attachment> attList;
66 QString name, mail, to, cc, bcc, reply, subject, message; 66 QString name, mail, to, cc, bcc, reply, subject, message;
67}; 67};
68 68
69class Folder : public QObject 69class Folder : public QObject
70{ 70{
71 Q_OBJECT 71 Q_OBJECT
72 72
73public: 73public:
74 Folder( const QString&init_name ); 74 Folder( const QString&init_name );
75 const QString&getDisplayName()const { return nameDisplay; } 75 const QString&getDisplayName()const { return nameDisplay; }
76 const QString&getName()const { return name; } 76 const QString&getName()const { return name; }
77 virtual bool may_select()const{return true;}; 77 virtual bool may_select()const{return true;};
78 78
79private: 79protected:
80 QString nameDisplay, name; 80 QString nameDisplay, name;
81 81
82}; 82};
83 83
84class IMAPFolder : public Folder 84class IMAPFolder : public Folder
85{ 85{
86 public: 86 public:
87 IMAPFolder( QString name,bool select=true ) : Folder( name ),m_MaySelect(select) {} 87 IMAPFolder(const QString&name,bool select=true,const QString&prefix="" );
88 virtual bool may_select()const{return m_MaySelect;} 88 virtual bool may_select()const{return m_MaySelect;}
89 private: 89 private:
90 bool m_MaySelect; 90 bool m_MaySelect;
91}; 91};
92 92
93class MailWrapper : public QObject 93class MailWrapper : public QObject
94{ 94{
95 Q_OBJECT 95 Q_OBJECT
96 96
97public: 97public:
98 MailWrapper( Settings *s ); 98 MailWrapper( Settings *s );
99 void sendMail( Mail mail ); 99 void sendMail( Mail mail );
100 100
101private: 101private:
102 mailimf_mailbox *newMailbox(const QString&name,const QString&mail ); 102 mailimf_mailbox *newMailbox(const QString&name,const QString&mail );
103 mailimf_address_list *parseAddresses(const QString&addr ); 103 mailimf_address_list *parseAddresses(const QString&addr );
104 mailimf_fields *createImfFields( Mail *mail ); 104 mailimf_fields *createImfFields( Mail *mail );
105 mailmime *buildTxtPart( QString str ); 105 mailmime *buildTxtPart( QString str );
106 mailmime *buildFilePart( QString filename, QString mimetype ); 106 mailmime *buildFilePart( QString filename, QString mimetype );
107 void addFileParts( mailmime *message, QList<Attachment> files ); 107 void addFileParts( mailmime *message, QList<Attachment> files );
108 mailmime *createMimeMail( Mail *mail ); 108 mailmime *createMimeMail( Mail *mail );
109 void smtpSend( mailmime *mail ); 109 void smtpSend( mailmime *mail );
110 mailimf_field *getField( mailimf_fields *fields, int type ); 110 mailimf_field *getField( mailimf_fields *fields, int type );
111 clist *createRcptList( mailimf_fields *fields ); 111 clist *createRcptList( mailimf_fields *fields );
112 char *getFrom( mailmime *mail ); 112 char *getFrom( mailmime *mail );
113 SMTPaccount *getAccount( QString from ); 113 SMTPaccount *getAccount( QString from );
114 void writeToFile( QString file, mailmime *mail ); 114 void writeToFile( QString file, mailmime *mail );
115 void readFromFile( QString file, char **data, size_t *size ); 115 void readFromFile( QString file, char **data, size_t *size );
116 static QString mailsmtpError( int err ); 116 static QString mailsmtpError( int err );
117 static QString getTmpFile(); 117 static QString getTmpFile();
118 118
119 Settings *settings; 119 Settings *settings;
120 120
121}; 121};
122 122
123#endif 123#endif