summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.cpp2
-rw-r--r--noncore/net/mail/libmailwrapper/nntpwrapper.cpp4
-rw-r--r--noncore/net/mail/libmailwrapper/pop3wrapper.cpp6
3 files changed, 12 insertions, 0 deletions
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
index 230cf53..657c2ba 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
@@ -1,553 +1,555 @@
1#include <stdlib.h> 1#include <stdlib.h>
2#include <libetpan/libetpan.h> 2#include <libetpan/libetpan.h>
3#include <qpe/global.h> 3#include <qpe/global.h>
4#include <opie2/oapplication.h>
4 5
5#include "imapwrapper.h" 6#include "imapwrapper.h"
6#include "mailtypes.h" 7#include "mailtypes.h"
7#include "logindialog.h" 8#include "logindialog.h"
8 9
9using namespace Opie::Core; 10using namespace Opie::Core;
10IMAPwrapper::IMAPwrapper( IMAPaccount *a ) 11IMAPwrapper::IMAPwrapper( IMAPaccount *a )
11 : AbstractMail() 12 : AbstractMail()
12{ 13{
13 account = a; 14 account = a;
14 m_imap = 0; 15 m_imap = 0;
15 m_Lastmbox = ""; 16 m_Lastmbox = "";
16} 17}
17 18
18IMAPwrapper::~IMAPwrapper() 19IMAPwrapper::~IMAPwrapper()
19{ 20{
20 logout(); 21 logout();
21} 22}
22 23
23/* to avoid to often select statements in loops etc. 24/* to avoid to often select statements in loops etc.
24 we trust that we are logged in and connection is established!*/ 25 we trust that we are logged in and connection is established!*/
25int IMAPwrapper::selectMbox(const QString&mbox) 26int IMAPwrapper::selectMbox(const QString&mbox)
26{ 27{
27 if (mbox == m_Lastmbox) { 28 if (mbox == m_Lastmbox) {
28 return MAILIMAP_NO_ERROR; 29 return MAILIMAP_NO_ERROR;
29 } 30 }
30 int err = mailimap_select( m_imap, (char*)mbox.latin1()); 31 int err = mailimap_select( m_imap, (char*)mbox.latin1());
31 if ( err != MAILIMAP_NO_ERROR ) { 32 if ( err != MAILIMAP_NO_ERROR ) {
32 qDebug("error selecting mailbox: %s",m_imap->imap_response); 33 qDebug("error selecting mailbox: %s",m_imap->imap_response);
33 m_Lastmbox = ""; 34 m_Lastmbox = "";
34 return err; 35 return err;
35 } 36 }
36 m_Lastmbox = mbox; 37 m_Lastmbox = mbox;
37 return err; 38 return err;
38} 39}
39 40
40void IMAPwrapper::imap_progress( size_t current, size_t maximum ) 41void IMAPwrapper::imap_progress( size_t current, size_t maximum )
41{ 42{
43 qApp->processEvents();
42 qDebug( "IMAP: %i of %i", current, maximum ); 44 qDebug( "IMAP: %i of %i", current, maximum );
43} 45}
44 46
45bool IMAPwrapper::start_tls(bool force_tls) 47bool IMAPwrapper::start_tls(bool force_tls)
46{ 48{
47 int err; 49 int err;
48 bool try_tls; 50 bool try_tls;
49 mailimap_capability_data * cap_data = 0; 51 mailimap_capability_data * cap_data = 0;
50 52
51 err = mailimap_capability(m_imap,&cap_data); 53 err = mailimap_capability(m_imap,&cap_data);
52 if (err != MAILIMAP_NO_ERROR) { 54 if (err != MAILIMAP_NO_ERROR) {
53 Global::statusMessage("error getting capabilities!"); 55 Global::statusMessage("error getting capabilities!");
54 qDebug("error getting capabilities!"); 56 qDebug("error getting capabilities!");
55 return false; 57 return false;
56 } 58 }
57 clistiter * cur; 59 clistiter * cur;
58 for(cur = clist_begin(cap_data->cap_list) ; cur != NULL;cur = clist_next(cur)) { 60 for(cur = clist_begin(cap_data->cap_list) ; cur != NULL;cur = clist_next(cur)) {
59 struct mailimap_capability * cap; 61 struct mailimap_capability * cap;
60 cap = (struct mailimap_capability *)clist_content(cur); 62 cap = (struct mailimap_capability *)clist_content(cur);
61 if (cap->cap_type == MAILIMAP_CAPABILITY_NAME) { 63 if (cap->cap_type == MAILIMAP_CAPABILITY_NAME) {
62 if (strcasecmp(cap->cap_data.cap_name, "STARTTLS") == 0) { 64 if (strcasecmp(cap->cap_data.cap_name, "STARTTLS") == 0) {
63 try_tls = true; 65 try_tls = true;
64 break; 66 break;
65 } 67 }
66 } 68 }
67 } 69 }
68 if (cap_data) { 70 if (cap_data) {
69 mailimap_capability_data_free(cap_data); 71 mailimap_capability_data_free(cap_data);
70 } 72 }
71 if (try_tls) { 73 if (try_tls) {
72 err = mailimap_starttls(m_imap); 74 err = mailimap_starttls(m_imap);
73 if (err != MAILIMAP_NO_ERROR && force_tls) { 75 if (err != MAILIMAP_NO_ERROR && force_tls) {
74 Global::statusMessage(tr("Server has no TLS support!")); 76 Global::statusMessage(tr("Server has no TLS support!"));
75 qDebug("Server has no TLS support!"); 77 qDebug("Server has no TLS support!");
76 try_tls = false; 78 try_tls = false;
77 } else { 79 } else {
78 mailstream_low * low; 80 mailstream_low * low;
79 mailstream_low * new_low; 81 mailstream_low * new_low;
80 low = mailstream_get_low(m_imap->imap_stream); 82 low = mailstream_get_low(m_imap->imap_stream);
81 if (!low) { 83 if (!low) {
82 try_tls = false; 84 try_tls = false;
83 } else { 85 } else {
84 int fd = mailstream_low_get_fd(low); 86 int fd = mailstream_low_get_fd(low);
85 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) { 87 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) {
86 mailstream_low_free(low); 88 mailstream_low_free(low);
87 mailstream_set_low(m_imap->imap_stream, new_low); 89 mailstream_set_low(m_imap->imap_stream, new_low);
88 } else { 90 } else {
89 try_tls = false; 91 try_tls = false;
90 } 92 }
91 } 93 }
92 } 94 }
93 } 95 }
94 return try_tls; 96 return try_tls;
95} 97}
96 98
97void IMAPwrapper::login() 99void IMAPwrapper::login()
98{ 100{
99 const char *server, *user, *pass; 101 const char *server, *user, *pass;
100 uint16_t port; 102 uint16_t port;
101 int err = MAILIMAP_NO_ERROR; 103 int err = MAILIMAP_NO_ERROR;
102 104
103 if (account->getOffline()) return; 105 if (account->getOffline()) return;
104 /* we are connected this moment */ 106 /* we are connected this moment */
105 /* TODO: setup a timer holding the line or if connection closed - delete the value */ 107 /* TODO: setup a timer holding the line or if connection closed - delete the value */
106 if (m_imap) { 108 if (m_imap) {
107 err = mailimap_noop(m_imap); 109 err = mailimap_noop(m_imap);
108 if (err!=MAILIMAP_NO_ERROR) { 110 if (err!=MAILIMAP_NO_ERROR) {
109 logout(); 111 logout();
110 } else { 112 } else {
111 mailstream_flush(m_imap->imap_stream); 113 mailstream_flush(m_imap->imap_stream);
112 return; 114 return;
113 } 115 }
114 } 116 }
115 server = account->getServer().latin1(); 117 server = account->getServer().latin1();
116 port = account->getPort().toUInt(); 118 port = account->getPort().toUInt();
117 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) { 119 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) {
118 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true ); 120 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true );
119 login.show(); 121 login.show();
120 if ( QDialog::Accepted == login.exec() ) { 122 if ( QDialog::Accepted == login.exec() ) {
121 // ok 123 // ok
122 user = login.getUser().latin1(); 124 user = login.getUser().latin1();
123 pass = login.getPassword().latin1(); 125 pass = login.getPassword().latin1();
124 } else { 126 } else {
125 // cancel 127 // cancel
126 qDebug( "IMAP: Login canceled" ); 128 qDebug( "IMAP: Login canceled" );
127 return; 129 return;
128 } 130 }
129 } else { 131 } else {
130 user = account->getUser().latin1(); 132 user = account->getUser().latin1();
131 pass = account->getPassword().latin1(); 133 pass = account->getPassword().latin1();
132 } 134 }
133 135
134 m_imap = mailimap_new( 20, &imap_progress ); 136 m_imap = mailimap_new( 20, &imap_progress );
135 137
136 /* connect */ 138 /* connect */
137 bool ssl = false; 139 bool ssl = false;
138 bool try_tls = false; 140 bool try_tls = false;
139 bool force_tls = false; 141 bool force_tls = false;
140 142
141 if ( account->ConnectionType() == 2 ) { 143 if ( account->ConnectionType() == 2 ) {
142 ssl = true; 144 ssl = true;
143 } 145 }
144 if (account->ConnectionType()==1) { 146 if (account->ConnectionType()==1) {
145 force_tls = true; 147 force_tls = true;
146 } 148 }
147 149
148 if ( ssl ) { 150 if ( ssl ) {
149 qDebug( "using ssl" ); 151 qDebug( "using ssl" );
150 err = mailimap_ssl_connect( m_imap, (char*)server, port ); 152 err = mailimap_ssl_connect( m_imap, (char*)server, port );
151 } else { 153 } else {
152 err = mailimap_socket_connect( m_imap, (char*)server, port ); 154 err = mailimap_socket_connect( m_imap, (char*)server, port );
153 } 155 }
154 156
155 if ( err != MAILIMAP_NO_ERROR && 157 if ( err != MAILIMAP_NO_ERROR &&
156 err != MAILIMAP_NO_ERROR_AUTHENTICATED && 158 err != MAILIMAP_NO_ERROR_AUTHENTICATED &&
157 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { 159 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) {
158 QString failure = ""; 160 QString failure = "";
159 if (err == MAILIMAP_ERROR_CONNECTION_REFUSED) { 161 if (err == MAILIMAP_ERROR_CONNECTION_REFUSED) {
160 failure="Connection refused"; 162 failure="Connection refused";
161 } else { 163 } else {
162 failure="Unknown failure"; 164 failure="Unknown failure";
163 } 165 }
164 Global::statusMessage(tr("error connecting imap server: %1").arg(failure)); 166 Global::statusMessage(tr("error connecting imap server: %1").arg(failure));
165 mailimap_free( m_imap ); 167 mailimap_free( m_imap );
166 m_imap = 0; 168 m_imap = 0;
167 return; 169 return;
168 } 170 }
169 171
170 if (!ssl) { 172 if (!ssl) {
171 try_tls = start_tls(force_tls); 173 try_tls = start_tls(force_tls);
172 } 174 }
173 175
174 bool ok = true; 176 bool ok = true;
175 if (force_tls && !try_tls) { 177 if (force_tls && !try_tls) {
176 Global::statusMessage(tr("Server has no TLS support!")); 178 Global::statusMessage(tr("Server has no TLS support!"));
177 qDebug("Server has no TLS support!"); 179 qDebug("Server has no TLS support!");
178 ok = false; 180 ok = false;
179 } 181 }
180 182
181 183
182 /* login */ 184 /* login */
183 185
184 if (ok) { 186 if (ok) {
185 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass ); 187 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass );
186 if ( err != MAILIMAP_NO_ERROR ) { 188 if ( err != MAILIMAP_NO_ERROR ) {
187 Global::statusMessage(tr("error logging in imap server: %1").arg(m_imap->imap_response)); 189 Global::statusMessage(tr("error logging in imap server: %1").arg(m_imap->imap_response));
188 ok = false; 190 ok = false;
189 } 191 }
190 } 192 }
191 if (!ok) { 193 if (!ok) {
192 err = mailimap_close( m_imap ); 194 err = mailimap_close( m_imap );
193 mailimap_free( m_imap ); 195 mailimap_free( m_imap );
194 m_imap = 0; 196 m_imap = 0;
195 } 197 }
196} 198}
197 199
198void IMAPwrapper::logout() 200void IMAPwrapper::logout()
199{ 201{
200 int err = MAILIMAP_NO_ERROR; 202 int err = MAILIMAP_NO_ERROR;
201 if (!m_imap) return; 203 if (!m_imap) return;
202 err = mailimap_logout( m_imap ); 204 err = mailimap_logout( m_imap );
203 err = mailimap_close( m_imap ); 205 err = mailimap_close( m_imap );
204 mailimap_free( m_imap ); 206 mailimap_free( m_imap );
205 m_imap = 0; 207 m_imap = 0;
206 m_Lastmbox = ""; 208 m_Lastmbox = "";
207} 209}
208 210
209void IMAPwrapper::listMessages(const QString&mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> > &target ) 211void IMAPwrapper::listMessages(const QString&mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> > &target )
210{ 212{
211 int err = MAILIMAP_NO_ERROR; 213 int err = MAILIMAP_NO_ERROR;
212 clist *result = 0; 214 clist *result = 0;
213 clistcell *current; 215 clistcell *current;
214 mailimap_fetch_type *fetchType = 0; 216 mailimap_fetch_type *fetchType = 0;
215 mailimap_set *set = 0; 217 mailimap_set *set = 0;
216 218
217 login(); 219 login();
218 if (!m_imap) { 220 if (!m_imap) {
219 return; 221 return;
220 } 222 }
221 /* select mailbox READONLY for operations */ 223 /* select mailbox READONLY for operations */
222 err = selectMbox(mailbox); 224 err = selectMbox(mailbox);
223 if ( err != MAILIMAP_NO_ERROR ) { 225 if ( err != MAILIMAP_NO_ERROR ) {
224 return; 226 return;
225 } 227 }
226 228
227 int last = m_imap->imap_selection_info->sel_exists; 229 int last = m_imap->imap_selection_info->sel_exists;
228 230
229 if (last == 0) { 231 if (last == 0) {
230 Global::statusMessage(tr("Mailbox has no mails")); 232 Global::statusMessage(tr("Mailbox has no mails"));
231 return; 233 return;
232 } else { 234 } else {
233 } 235 }
234 236
235 /* the range has to start at 1!!! not with 0!!!! */ 237 /* the range has to start at 1!!! not with 0!!!! */
236 set = mailimap_set_new_interval( 1, last ); 238 set = mailimap_set_new_interval( 1, last );
237 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 239 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
238 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope()); 240 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope());
239 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags()); 241 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags());
240 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate()); 242 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate());
241 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size()); 243 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size());
242 244
243 err = mailimap_fetch( m_imap, set, fetchType, &result ); 245 err = mailimap_fetch( m_imap, set, fetchType, &result );
244 mailimap_set_free( set ); 246 mailimap_set_free( set );
245 mailimap_fetch_type_free( fetchType ); 247 mailimap_fetch_type_free( fetchType );
246 248
247 QString date,subject,from; 249 QString date,subject,from;
248 250
249 if ( err == MAILIMAP_NO_ERROR ) { 251 if ( err == MAILIMAP_NO_ERROR ) {
250 mailimap_msg_att * msg_att; 252 mailimap_msg_att * msg_att;
251 int i = 0; 253 int i = 0;
252 for (current = clist_begin(result); current != 0; current=clist_next(current)) { 254 for (current = clist_begin(result); current != 0; current=clist_next(current)) {
253 ++i; 255 ++i;
254 msg_att = (mailimap_msg_att*)current->data; 256 msg_att = (mailimap_msg_att*)current->data;
255 RecMail*m = parse_list_result(msg_att); 257 RecMail*m = parse_list_result(msg_att);
256 if (m) { 258 if (m) {
257 m->setNumber(i); 259 m->setNumber(i);
258 m->setMbox(mailbox); 260 m->setMbox(mailbox);
259 m->setWrapper(this); 261 m->setWrapper(this);
260 target.append(m); 262 target.append(m);
261 } 263 }
262 } 264 }
263 Global::statusMessage(tr("Mailbox has %1 mails").arg(target.count())); 265 Global::statusMessage(tr("Mailbox has %1 mails").arg(target.count()));
264 } else { 266 } else {
265 Global::statusMessage(tr("Error fetching headers: %1").arg(m_imap->imap_response)); 267 Global::statusMessage(tr("Error fetching headers: %1").arg(m_imap->imap_response));
266 } 268 }
267 if (result) mailimap_fetch_list_free(result); 269 if (result) mailimap_fetch_list_free(result);
268} 270}
269 271
270QValueList<Opie::Core::OSmartPointer<Folder> >* IMAPwrapper::listFolders() 272QValueList<Opie::Core::OSmartPointer<Folder> >* IMAPwrapper::listFolders()
271{ 273{
272 const char *path, *mask; 274 const char *path, *mask;
273 int err = MAILIMAP_NO_ERROR; 275 int err = MAILIMAP_NO_ERROR;
274 clist *result = 0; 276 clist *result = 0;
275 clistcell *current = 0; 277 clistcell *current = 0;
276 clistcell*cur_flag = 0; 278 clistcell*cur_flag = 0;
277 mailimap_mbx_list_flags*bflags = 0; 279 mailimap_mbx_list_flags*bflags = 0;
278 280
279 QValueList<FolderP>* folders = new QValueList<FolderP>(); 281 QValueList<FolderP>* folders = new QValueList<FolderP>();
280 login(); 282 login();
281 if (!m_imap) { 283 if (!m_imap) {
282 return folders; 284 return folders;
283 } 285 }
284 286
285/* 287/*
286 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 288 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
287 * We must not forget to filter them out in next loop! 289 * We must not forget to filter them out in next loop!
288 * it seems like ugly code. and yes - it is ugly code. but the best way. 290 * it seems like ugly code. and yes - it is ugly code. but the best way.
289 */ 291 */
290 QString temp; 292 QString temp;
291 mask = "INBOX" ; 293 mask = "INBOX" ;
292 mailimap_mailbox_list *list; 294 mailimap_mailbox_list *list;
293 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); 295 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result );
294 QString del; 296 QString del;
295 bool selectable = true; 297 bool selectable = true;
296 bool no_inferiors = false; 298 bool no_inferiors = false;
297 if ( err == MAILIMAP_NO_ERROR ) { 299 if ( err == MAILIMAP_NO_ERROR ) {
298 current = result->first; 300 current = result->first;
299 for ( int i = result->count; i > 0; i-- ) { 301 for ( int i = result->count; i > 0; i-- ) {
300 list = (mailimap_mailbox_list *) current->data; 302 list = (mailimap_mailbox_list *) current->data;
301 // it is better use the deep copy mechanism of qt itself 303 // it is better use the deep copy mechanism of qt itself
302 // instead of using strdup! 304 // instead of using strdup!
303 temp = list->mb_name; 305 temp = list->mb_name;
304 del = list->mb_delimiter; 306 del = list->mb_delimiter;
305 current = current->next; 307 current = current->next;
306 if ( (bflags = list->mb_flag) ) { 308 if ( (bflags = list->mb_flag) ) {
307 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& 309 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&&
308 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); 310 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT);
309 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) { 311 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) {
310 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) { 312 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) {
311 no_inferiors = true; 313 no_inferiors = true;
312 } 314 }
313 } 315 }
314 } 316 }
315 folders->append( new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix())); 317 folders->append( new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix()));
316 } 318 }
317 } else { 319 } else {
318 qDebug("error fetching folders: %s",m_imap->imap_response); 320 qDebug("error fetching folders: %s",m_imap->imap_response);
319 } 321 }
320 mailimap_list_result_free( result ); 322 mailimap_list_result_free( result );
321 323
322/* 324/*
323 * second stage - get the other then inbox folders 325 * second stage - get the other then inbox folders
324 */ 326 */
325 mask = "*" ; 327 mask = "*" ;
326 path = account->getPrefix().latin1(); 328 path = account->getPrefix().latin1();
327 if (!path) path = ""; 329 if (!path) path = "";
328 qDebug(path); 330 qDebug(path);
329 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result ); 331 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result );
330 if ( err == MAILIMAP_NO_ERROR ) { 332 if ( err == MAILIMAP_NO_ERROR ) {
331 current = result->first; 333 current = result->first;
332 for ( current=clist_begin(result);current!=NULL;current=clist_next(current)) { 334 for ( current=clist_begin(result);current!=NULL;current=clist_next(current)) {
333 no_inferiors = false; 335 no_inferiors = false;
334 list = (mailimap_mailbox_list *) current->data; 336 list = (mailimap_mailbox_list *) current->data;
335 // it is better use the deep copy mechanism of qt itself 337 // it is better use the deep copy mechanism of qt itself
336 // instead of using strdup! 338 // instead of using strdup!
337 temp = list->mb_name; 339 temp = list->mb_name;
338 if (temp.lower()=="inbox") 340 if (temp.lower()=="inbox")
339 continue; 341 continue;
340 if (temp.lower()==account->getPrefix().lower()) 342 if (temp.lower()==account->getPrefix().lower())
341 continue; 343 continue;
342 if ( (bflags = list->mb_flag) ) { 344 if ( (bflags = list->mb_flag) ) {
343 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& 345 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&&
344 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); 346 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT);
345 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) { 347 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) {
346 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) { 348 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) {
347 no_inferiors = true; 349 no_inferiors = true;
348 } 350 }
349 } 351 }
350 } 352 }
351 del = list->mb_delimiter; 353 del = list->mb_delimiter;
352 folders->append(new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix())); 354 folders->append(new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix()));
353 } 355 }
354 } else { 356 } else {
355 qDebug("error fetching folders %s",m_imap->imap_response); 357 qDebug("error fetching folders %s",m_imap->imap_response);
356 } 358 }
357 if (result) mailimap_list_result_free( result ); 359 if (result) mailimap_list_result_free( result );
358 return folders; 360 return folders;
359} 361}
360 362
361RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att) 363RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
362{ 364{
363 RecMail * m = 0; 365 RecMail * m = 0;
364 mailimap_msg_att_item *item=0; 366 mailimap_msg_att_item *item=0;
365 clistcell *current,*c,*cf; 367 clistcell *current,*c,*cf;
366 mailimap_msg_att_dynamic*flist; 368 mailimap_msg_att_dynamic*flist;
367 mailimap_flag_fetch*cflag; 369 mailimap_flag_fetch*cflag;
368 int size; 370 int size;
369 QBitArray mFlags(7); 371 QBitArray mFlags(7);
370 QStringList addresslist; 372 QStringList addresslist;
371 373
372 if (!m_att) { 374 if (!m_att) {
373 return m; 375 return m;
374 } 376 }
375 m = new RecMail(); 377 m = new RecMail();
376 for (c = clist_begin(m_att->att_list); c!=NULL;c=clist_next(c) ) { 378 for (c = clist_begin(m_att->att_list); c!=NULL;c=clist_next(c) ) {
377 current = c; 379 current = c;
378 size = 0; 380 size = 0;
379 item = (mailimap_msg_att_item*)current->data; 381 item = (mailimap_msg_att_item*)current->data;
380 if (item->att_type!=MAILIMAP_MSG_ATT_ITEM_STATIC) { 382 if (item->att_type!=MAILIMAP_MSG_ATT_ITEM_STATIC) {
381 flist = (mailimap_msg_att_dynamic*)item->att_data.att_dyn; 383 flist = (mailimap_msg_att_dynamic*)item->att_data.att_dyn;
382 if (!flist->att_list) { 384 if (!flist->att_list) {
383 continue; 385 continue;
384 } 386 }
385 cf = flist->att_list->first; 387 cf = flist->att_list->first;
386 for (cf = clist_begin(flist->att_list); cf!=NULL; cf = clist_next(cf)) { 388 for (cf = clist_begin(flist->att_list); cf!=NULL; cf = clist_next(cf)) {
387 cflag = (mailimap_flag_fetch*)cf->data; 389 cflag = (mailimap_flag_fetch*)cf->data;
388 if (cflag->fl_type==MAILIMAP_FLAG_FETCH_OTHER && cflag->fl_flag!=0) { 390 if (cflag->fl_type==MAILIMAP_FLAG_FETCH_OTHER && cflag->fl_flag!=0) {
389 switch (cflag->fl_flag->fl_type) { 391 switch (cflag->fl_flag->fl_type) {
390 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */ 392 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */
391 mFlags.setBit(FLAG_ANSWERED); 393 mFlags.setBit(FLAG_ANSWERED);
392 break; 394 break;
393 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */ 395 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */
394 mFlags.setBit(FLAG_FLAGGED); 396 mFlags.setBit(FLAG_FLAGGED);
395 break; 397 break;
396 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */ 398 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */
397 mFlags.setBit(FLAG_DELETED); 399 mFlags.setBit(FLAG_DELETED);
398 break; 400 break;
399 case MAILIMAP_FLAG_SEEN: /* \Seen flag */ 401 case MAILIMAP_FLAG_SEEN: /* \Seen flag */
400 mFlags.setBit(FLAG_SEEN); 402 mFlags.setBit(FLAG_SEEN);
401 break; 403 break;
402 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */ 404 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */
403 mFlags.setBit(FLAG_DRAFT); 405 mFlags.setBit(FLAG_DRAFT);
404 break; 406 break;
405 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */ 407 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */
406 break; 408 break;
407 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */ 409 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */
408 break; 410 break;
409 default: 411 default:
410 break; 412 break;
411 } 413 }
412 } else if (cflag->fl_type==MAILIMAP_FLAG_FETCH_RECENT) { 414 } else if (cflag->fl_type==MAILIMAP_FLAG_FETCH_RECENT) {
413 mFlags.setBit(FLAG_RECENT); 415 mFlags.setBit(FLAG_RECENT);
414 } 416 }
415 } 417 }
416 continue; 418 continue;
417 } 419 }
418 if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_ENVELOPE) { 420 if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_ENVELOPE) {
419 mailimap_envelope * head = item->att_data.att_static->att_data.att_env; 421 mailimap_envelope * head = item->att_data.att_static->att_data.att_env;
420 m->setDate(head->env_date); 422 m->setDate(head->env_date);
421 m->setSubject(convert_String((const char*)head->env_subject)); 423 m->setSubject(convert_String((const char*)head->env_subject));
422 //m->setSubject(head->env_subject); 424 //m->setSubject(head->env_subject);
423 if (head->env_from!=NULL) { 425 if (head->env_from!=NULL) {
424 addresslist = address_list_to_stringlist(head->env_from->frm_list); 426 addresslist = address_list_to_stringlist(head->env_from->frm_list);
425 if (addresslist.count()) { 427 if (addresslist.count()) {
426 m->setFrom(addresslist.first()); 428 m->setFrom(addresslist.first());
427 } 429 }
428 } 430 }
429 if (head->env_to!=NULL) { 431 if (head->env_to!=NULL) {
430 addresslist = address_list_to_stringlist(head->env_to->to_list); 432 addresslist = address_list_to_stringlist(head->env_to->to_list);
431 m->setTo(addresslist); 433 m->setTo(addresslist);
432 } 434 }
433 if (head->env_cc!=NULL) { 435 if (head->env_cc!=NULL) {
434 addresslist = address_list_to_stringlist(head->env_cc->cc_list); 436 addresslist = address_list_to_stringlist(head->env_cc->cc_list);
435 m->setCC(addresslist); 437 m->setCC(addresslist);
436 } 438 }
437 if (head->env_bcc!=NULL) { 439 if (head->env_bcc!=NULL) {
438 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list); 440 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list);
439 m->setBcc(addresslist); 441 m->setBcc(addresslist);
440 } 442 }
441 /* reply to address, eg. email. */ 443 /* reply to address, eg. email. */
442 if (head->env_reply_to!=NULL) { 444 if (head->env_reply_to!=NULL) {
443 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list); 445 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list);
444 if (addresslist.count()) { 446 if (addresslist.count()) {
445 m->setReplyto(addresslist.first()); 447 m->setReplyto(addresslist.first());
446 } 448 }
447 } 449 }
448 if (head->env_in_reply_to!=NULL) { 450 if (head->env_in_reply_to!=NULL) {
449 QString h(head->env_in_reply_to); 451 QString h(head->env_in_reply_to);
450 while (h.length()>0 && h[0]=='<') { 452 while (h.length()>0 && h[0]=='<') {
451 h.remove(0,1); 453 h.remove(0,1);
452 } 454 }
453 while (h.length()>0 && h[h.length()-1]=='>') { 455 while (h.length()>0 && h[h.length()-1]=='>') {
454 h.remove(h.length()-1,1); 456 h.remove(h.length()-1,1);
455 } 457 }
456 if (h.length()>0) { 458 if (h.length()>0) {
457 m->setInreply(QStringList(h)); 459 m->setInreply(QStringList(h));
458 } 460 }
459 } 461 }
460 if (head->env_message_id) { 462 if (head->env_message_id) {
461 m->setMsgid(QString(head->env_message_id)); 463 m->setMsgid(QString(head->env_message_id));
462 } 464 }
463 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) { 465 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) {
464#if 0 466#if 0
465 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date; 467 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date;
466 QDateTime da(QDate(d->dt_year,d->dt_month,d->dt_day),QTime(d->dt_hour,d->dt_min,d->dt_sec)); 468 QDateTime da(QDate(d->dt_year,d->dt_month,d->dt_day),QTime(d->dt_hour,d->dt_min,d->dt_sec));
467 qDebug("%i %i %i - %i %i %i",d->dt_year,d->dt_month,d->dt_day,d->dt_hour,d->dt_min,d->dt_sec); 469 qDebug("%i %i %i - %i %i %i",d->dt_year,d->dt_month,d->dt_day,d->dt_hour,d->dt_min,d->dt_sec);
468 qDebug(da.toString()); 470 qDebug(da.toString());
469#endif 471#endif
470 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_RFC822_SIZE) { 472 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_RFC822_SIZE) {
471 size = item->att_data.att_static->att_data.att_rfc822_size; 473 size = item->att_data.att_static->att_data.att_rfc822_size;
472 } 474 }
473 } 475 }
474 /* msg is already deleted */ 476 /* msg is already deleted */
475 if (mFlags.testBit(FLAG_DELETED) && m) { 477 if (mFlags.testBit(FLAG_DELETED) && m) {
476 delete m; 478 delete m;
477 m = 0; 479 m = 0;
478 } 480 }
479 if (m) { 481 if (m) {
480 m->setFlags(mFlags); 482 m->setFlags(mFlags);
481 m->setMsgsize(size); 483 m->setMsgsize(size);
482 } 484 }
483 return m; 485 return m;
484} 486}
485 487
486RecBodyP IMAPwrapper::fetchBody(const RecMailP&mail) 488RecBodyP IMAPwrapper::fetchBody(const RecMailP&mail)
487{ 489{
488 RecBodyP body = new RecBody(); 490 RecBodyP body = new RecBody();
489 const char *mb; 491 const char *mb;
490 int err = MAILIMAP_NO_ERROR; 492 int err = MAILIMAP_NO_ERROR;
491 clist *result = 0; 493 clist *result = 0;
492 clistcell *current; 494 clistcell *current;
493 mailimap_fetch_att *fetchAtt = 0; 495 mailimap_fetch_att *fetchAtt = 0;
494 mailimap_fetch_type *fetchType = 0; 496 mailimap_fetch_type *fetchType = 0;
495 mailimap_set *set = 0; 497 mailimap_set *set = 0;
496 mailimap_body*body_desc = 0; 498 mailimap_body*body_desc = 0;
497 499
498 mb = mail->getMbox().latin1(); 500 mb = mail->getMbox().latin1();
499 501
500 login(); 502 login();
501 if (!m_imap) { 503 if (!m_imap) {
502 return body; 504 return body;
503 } 505 }
504 err = selectMbox(mail->getMbox()); 506 err = selectMbox(mail->getMbox());
505 if ( err != MAILIMAP_NO_ERROR ) { 507 if ( err != MAILIMAP_NO_ERROR ) {
506 return body; 508 return body;
507 } 509 }
508 510
509 /* the range has to start at 1!!! not with 0!!!! */ 511 /* the range has to start at 1!!! not with 0!!!! */
510 set = mailimap_set_new_interval( mail->getNumber(),mail->getNumber() ); 512 set = mailimap_set_new_interval( mail->getNumber(),mail->getNumber() );
511 fetchAtt = mailimap_fetch_att_new_bodystructure(); 513 fetchAtt = mailimap_fetch_att_new_bodystructure();
512 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 514 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
513 err = mailimap_fetch( m_imap, set, fetchType, &result ); 515 err = mailimap_fetch( m_imap, set, fetchType, &result );
514 mailimap_set_free( set ); 516 mailimap_set_free( set );
515 mailimap_fetch_type_free( fetchType ); 517 mailimap_fetch_type_free( fetchType );
516 518
517 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 519 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
518 mailimap_msg_att * msg_att; 520 mailimap_msg_att * msg_att;
519 msg_att = (mailimap_msg_att*)current->data; 521 msg_att = (mailimap_msg_att*)current->data;
520 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->att_list->first->data; 522 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->att_list->first->data;
521 QValueList<int> path; 523 QValueList<int> path;
522 body_desc = item->att_data.att_static->att_data.att_body; 524 body_desc = item->att_data.att_static->att_data.att_body;
523 traverseBody(mail,body_desc,body,0,path); 525 traverseBody(mail,body_desc,body,0,path);
524 } else { 526 } else {
525 qDebug("error fetching body: %s",m_imap->imap_response); 527 qDebug("error fetching body: %s",m_imap->imap_response);
526 } 528 }
527 if (result) mailimap_fetch_list_free(result); 529 if (result) mailimap_fetch_list_free(result);
528 return body; 530 return body;
529} 531}
530 532
531QStringList IMAPwrapper::address_list_to_stringlist(clist*list) 533QStringList IMAPwrapper::address_list_to_stringlist(clist*list)
532{ 534{
533 QStringList l; 535 QStringList l;
534 QString from; 536 QString from;
535 bool named_from; 537 bool named_from;
536 clistcell *current = NULL; 538 clistcell *current = NULL;
537 mailimap_address * current_address=NULL; 539 mailimap_address * current_address=NULL;
538 if (!list) { 540 if (!list) {
539 return l; 541 return l;
540 } 542 }
541 unsigned int count = 0; 543 unsigned int count = 0;
542 for (current=clist_begin(list);current!= NULL;current=clist_next(current)) { 544 for (current=clist_begin(list);current!= NULL;current=clist_next(current)) {
543 from = ""; 545 from = "";
544 named_from = false; 546 named_from = false;
545 current_address=(mailimap_address*)current->data; 547 current_address=(mailimap_address*)current->data;
546 if (current_address->ad_personal_name){ 548 if (current_address->ad_personal_name){
547 from+=convert_String((const char*)current_address->ad_personal_name); 549 from+=convert_String((const char*)current_address->ad_personal_name);
548 from+=" "; 550 from+=" ";
549 named_from = true; 551 named_from = true;
550 } 552 }
551 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) { 553 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) {
552 from+="<"; 554 from+="<";
553 } 555 }
diff --git a/noncore/net/mail/libmailwrapper/nntpwrapper.cpp b/noncore/net/mail/libmailwrapper/nntpwrapper.cpp
index cc36f32..cfded43 100644
--- a/noncore/net/mail/libmailwrapper/nntpwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/nntpwrapper.cpp
@@ -1,284 +1,288 @@
1#include "nntpwrapper.h" 1#include "nntpwrapper.h"
2#include "logindialog.h" 2#include "logindialog.h"
3#include "mailtypes.h" 3#include "mailtypes.h"
4 4
5#include <qfile.h> 5#include <qfile.h>
6 6
7#include <stdlib.h> 7#include <stdlib.h>
8 8
9#include <libetpan/libetpan.h> 9#include <libetpan/libetpan.h>
10 10
11 11
12#define HARD_MSG_SIZE_LIMIT 5242880 12#define HARD_MSG_SIZE_LIMIT 5242880
13 13
14using namespace Opie::Core; 14using namespace Opie::Core;
15NNTPwrapper::NNTPwrapper( NNTPaccount *a ) 15NNTPwrapper::NNTPwrapper( NNTPaccount *a )
16: Genericwrapper() { 16: Genericwrapper() {
17 account = a; 17 account = a;
18 m_nntp = NULL; 18 m_nntp = NULL;
19 msgTempName = a->getFileName()+"_msg_cache"; 19 msgTempName = a->getFileName()+"_msg_cache";
20 last_msg_id = 0; 20 last_msg_id = 0;
21} 21}
22 22
23NNTPwrapper::~NNTPwrapper() { 23NNTPwrapper::~NNTPwrapper() {
24 logout(); 24 logout();
25 QFile msg_cache(msgTempName); 25 QFile msg_cache(msgTempName);
26 if (msg_cache.exists()) { 26 if (msg_cache.exists()) {
27 msg_cache.remove(); 27 msg_cache.remove();
28 } 28 }
29} 29}
30 30
31void NNTPwrapper::nntp_progress( size_t current, size_t maximum ) { 31void NNTPwrapper::nntp_progress( size_t current, size_t maximum ) {
32 qDebug( "NNTP: %i of %i", current, maximum ); 32 qDebug( "NNTP: %i of %i", current, maximum );
33} 33}
34 34
35 35
36RecBodyP NNTPwrapper::fetchBody( const RecMailP &mail ) { 36RecBodyP NNTPwrapper::fetchBody( const RecMailP &mail ) {
37 int err = NEWSNNTP_NO_ERROR; 37 int err = NEWSNNTP_NO_ERROR;
38 char *message = 0; 38 char *message = 0;
39 size_t length = 0; 39 size_t length = 0;
40 40
41 RecBodyP body = new RecBody(); 41 RecBodyP body = new RecBody();
42 login(); 42 login();
43 if ( !m_nntp ) { 43 if ( !m_nntp ) {
44 return body; 44 return body;
45 } 45 }
46 46
47 mailmessage * mailmsg; 47 mailmessage * mailmsg;
48 if (mail->Msgsize()>HARD_MSG_SIZE_LIMIT) { 48 if (mail->Msgsize()>HARD_MSG_SIZE_LIMIT) {
49 qDebug("Message to large: %i",mail->Msgsize()); 49 qDebug("Message to large: %i",mail->Msgsize());
50 return body; 50 return body;
51 } 51 }
52 52
53 QFile msg_cache(msgTempName); 53 QFile msg_cache(msgTempName);
54 54
55 cleanMimeCache(); 55 cleanMimeCache();
56 56
57 if (mail->getNumber()!=last_msg_id) { 57 if (mail->getNumber()!=last_msg_id) {
58 if (msg_cache.exists()) { 58 if (msg_cache.exists()) {
59 msg_cache.remove(); 59 msg_cache.remove();
60 } 60 }
61 msg_cache.open(IO_ReadWrite|IO_Truncate); 61 msg_cache.open(IO_ReadWrite|IO_Truncate);
62 last_msg_id = mail->getNumber(); 62 last_msg_id = mail->getNumber();
63 err = mailsession_get_message(m_nntp->sto_session, mail->getNumber(), &mailmsg); 63 err = mailsession_get_message(m_nntp->sto_session, mail->getNumber(), &mailmsg);
64 err = mailmessage_fetch(mailmsg,&message,&length); 64 err = mailmessage_fetch(mailmsg,&message,&length);
65 msg_cache.writeBlock(message,length); 65 msg_cache.writeBlock(message,length);
66 } else { 66 } else {
67 QString msg=""; 67 QString msg="";
68 msg_cache.open(IO_ReadOnly); 68 msg_cache.open(IO_ReadOnly);
69 message = new char[4096]; 69 message = new char[4096];
70 memset(message,0,4096); 70 memset(message,0,4096);
71 while (msg_cache.readBlock(message,4095)>0) { 71 while (msg_cache.readBlock(message,4095)>0) {
72 msg+=message; 72 msg+=message;
73 memset(message,0,4096); 73 memset(message,0,4096);
74 } 74 }
75 delete message; 75 delete message;
76 message = (char*)malloc(msg.length()+1*sizeof(char)); 76 message = (char*)malloc(msg.length()+1*sizeof(char));
77 memset(message,0,msg.length()+1); 77 memset(message,0,msg.length()+1);
78 memcpy(message,msg.latin1(),msg.length()); 78 memcpy(message,msg.latin1(),msg.length());
79 /* transform to libetpan stuff */ 79 /* transform to libetpan stuff */
80 mailmsg = mailmessage_new(); 80 mailmsg = mailmessage_new();
81 mailmessage_init(mailmsg, NULL, data_message_driver, 0, strlen(message)); 81 mailmessage_init(mailmsg, NULL, data_message_driver, 0, strlen(message));
82 generic_message_t * msg_data; 82 generic_message_t * msg_data;
83 msg_data = (generic_message_t *)mailmsg->msg_data; 83 msg_data = (generic_message_t *)mailmsg->msg_data;
84 msg_data->msg_fetched = 1; 84 msg_data->msg_fetched = 1;
85 msg_data->msg_message = message; 85 msg_data->msg_message = message;
86 msg_data->msg_length = strlen(message); 86 msg_data->msg_length = strlen(message);
87 } 87 }
88 body = parseMail(mailmsg); 88 body = parseMail(mailmsg);
89 89
90 /* clean up */ 90 /* clean up */
91 if (mailmsg) 91 if (mailmsg)
92 mailmessage_free(mailmsg); 92 mailmessage_free(mailmsg);
93 if (message) 93 if (message)
94 free(message); 94 free(message);
95 95
96 return body; 96 return body;
97} 97}
98 98
99 99
100void NNTPwrapper::listMessages(const QString & which, QValueList<Opie::Core::OSmartPointer<RecMail> > &target ) 100void NNTPwrapper::listMessages(const QString & which, QValueList<Opie::Core::OSmartPointer<RecMail> > &target )
101{ 101{
102 login(); 102 login();
103 if (!m_nntp) 103 if (!m_nntp)
104 return; 104 return;
105 uint32_t res_messages,res_recent,res_unseen; 105 uint32_t res_messages,res_recent,res_unseen;
106 mailsession_status_folder(m_nntp->sto_session,(char*)which.latin1(),&res_messages,&res_recent,&res_unseen); 106 mailsession_status_folder(m_nntp->sto_session,(char*)which.latin1(),&res_messages,&res_recent,&res_unseen);
107 parseList(target,m_nntp->sto_session,which,true); 107 parseList(target,m_nntp->sto_session,which,true);
108} 108}
109 109
110void NNTPwrapper::login() 110void NNTPwrapper::login()
111{ 111{
112 if (account->getOffline()) 112 if (account->getOffline())
113 return; 113 return;
114 /* we'll hold the line */ 114 /* we'll hold the line */
115 if ( m_nntp != NULL ) 115 if ( m_nntp != NULL )
116 return; 116 return;
117 117
118 const char *server, *user, *pass; 118 const char *server, *user, *pass;
119 QString User,Pass; 119 QString User,Pass;
120 uint16_t port; 120 uint16_t port;
121 int err = NEWSNNTP_NO_ERROR; 121 int err = NEWSNNTP_NO_ERROR;
122 122
123 server = account->getServer().latin1(); 123 server = account->getServer().latin1();
124 port = account->getPort().toUInt(); 124 port = account->getPort().toUInt();
125 125
126 user = pass = 0; 126 user = pass = 0;
127 127
128 if ( ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) && account->getLogin() ) { 128 if ( ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) && account->getLogin() ) {
129 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true ); 129 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true );
130 login.show(); 130 login.show();
131 if ( QDialog::Accepted == login.exec() ) { 131 if ( QDialog::Accepted == login.exec() ) {
132 // ok 132 // ok
133 User = login.getUser().latin1(); 133 User = login.getUser().latin1();
134 Pass = login.getPassword().latin1(); 134 Pass = login.getPassword().latin1();
135 } else { 135 } else {
136 // cancel 136 // cancel
137 qDebug( "NNTP: Login canceled" ); 137 qDebug( "NNTP: Login canceled" );
138 return; 138 return;
139 } 139 }
140 } else { 140 } else {
141 User = account->getUser().latin1(); 141 User = account->getUser().latin1();
142 Pass = account->getPassword().latin1(); 142 Pass = account->getPassword().latin1();
143 } 143 }
144 144
145 if (User.isEmpty()) { 145 if (User.isEmpty()) {
146 user=0; 146 user=0;
147 pass = 0; 147 pass = 0;
148 } else { 148 } else {
149 user=User.latin1(); 149 user=User.latin1();
150 pass=Pass.latin1(); 150 pass=Pass.latin1();
151 } 151 }
152 // bool ssl = account->getSSL(); 152 // bool ssl = account->getSSL();
153 153
154 m_nntp=mailstorage_new(NULL); 154 m_nntp=mailstorage_new(NULL);
155 155
156 int conntypeset = account->ConnectionType(); 156 int conntypeset = account->ConnectionType();
157 int conntype = 0; 157 int conntype = 0;
158 if ( conntypeset == 3 ) { 158 if ( conntypeset == 3 ) {
159 conntype = CONNECTION_TYPE_COMMAND; 159 conntype = CONNECTION_TYPE_COMMAND;
160 } else if ( conntypeset == 2 ) { 160 } else if ( conntypeset == 2 ) {
161 conntype = CONNECTION_TYPE_TLS; 161 conntype = CONNECTION_TYPE_TLS;
162 } else if ( conntypeset == 1 ) { 162 } else if ( conntypeset == 1 ) {
163 conntype = CONNECTION_TYPE_STARTTLS; 163 conntype = CONNECTION_TYPE_STARTTLS;
164 } else if ( conntypeset == 0 ) { 164 } else if ( conntypeset == 0 ) {
165 conntype = CONNECTION_TYPE_TRY_STARTTLS; 165 conntype = CONNECTION_TYPE_TRY_STARTTLS;
166 } 166 }
167 167
168 nntp_mailstorage_init(m_nntp,(char*)server, port, NULL, CONNECTION_TYPE_PLAIN, NNTP_AUTH_TYPE_PLAIN, 168 nntp_mailstorage_init(m_nntp,(char*)server, port, NULL, CONNECTION_TYPE_PLAIN, NNTP_AUTH_TYPE_PLAIN,
169 (char*)user,(char*)pass,0,0,0); 169 (char*)user,(char*)pass,0,0,0);
170 170
171 err = mailstorage_connect( m_nntp ); 171 err = mailstorage_connect( m_nntp );
172 172
173 if (err != NEWSNNTP_NO_ERROR) { 173 if (err != NEWSNNTP_NO_ERROR) {
174 qDebug( QString( "FEHLERNUMMER %1" ).arg( err ) ); 174 qDebug( QString( "FEHLERNUMMER %1" ).arg( err ) );
175 // Global::statusMessage(tr("Error initializing folder")); 175 // Global::statusMessage(tr("Error initializing folder"));
176 mailstorage_free(m_nntp); 176 mailstorage_free(m_nntp);
177 m_nntp = 0; 177 m_nntp = 0;
178 178
179 } else {
180 mailsession * session = m_nntp->sto_session;
181 newsnntp * news = ( ( nntp_session_state_data * )session->sess_data )->nntp_session;
182 news->nntp_progr_fun = &nntp_progress;
179 } 183 }
180 184
181} 185}
182 186
183void NNTPwrapper::logout() 187void NNTPwrapper::logout()
184{ 188{
185 int err = NEWSNNTP_NO_ERROR; 189 int err = NEWSNNTP_NO_ERROR;
186 if ( m_nntp == NULL ) 190 if ( m_nntp == NULL )
187 return; 191 return;
188 mailstorage_free(m_nntp); 192 mailstorage_free(m_nntp);
189 m_nntp = 0; 193 m_nntp = 0;
190} 194}
191 195
192QValueList<Opie::Core::OSmartPointer<Folder> >* NNTPwrapper::listFolders() { 196QValueList<Opie::Core::OSmartPointer<Folder> >* NNTPwrapper::listFolders() {
193 197
194 QValueList<Opie::Core::OSmartPointer<Folder> >* folders = new QValueList<Opie::Core::OSmartPointer<Folder> >(); 198 QValueList<Opie::Core::OSmartPointer<Folder> >* folders = new QValueList<Opie::Core::OSmartPointer<Folder> >();
195 QStringList groups; 199 QStringList groups;
196 if (account) { 200 if (account) {
197 groups = account->getGroups(); 201 groups = account->getGroups();
198 } 202 }
199 for ( QStringList::Iterator it = groups.begin(); it != groups.end(); ++it ) { 203 for ( QStringList::Iterator it = groups.begin(); it != groups.end(); ++it ) {
200 folders->append(new Folder((*it),".")); 204 folders->append(new Folder((*it),"."));
201 } 205 }
202 return folders; 206 return folders;
203} 207}
204 208
205/* we made this method in raw nntp access of etpan and not via generic interface 209/* we made this method in raw nntp access of etpan and not via generic interface
206 * 'cause in that case there will be doubled copy operations. eg. the etpan would 210 * 'cause in that case there will be doubled copy operations. eg. the etpan would
207 * copy that stuff into its own structures and we must copy it into useable c++ 211 * copy that stuff into its own structures and we must copy it into useable c++
208 * structures for our frontend. this would not make sense, so it is better to reimplement 212 * structures for our frontend. this would not make sense, so it is better to reimplement
209 * the stuff from generic interface of etpan but copy it direct to qt classes. 213 * the stuff from generic interface of etpan but copy it direct to qt classes.
210 */ 214 */
211QStringList NNTPwrapper::listAllNewsgroups(const QString&mask) { 215QStringList NNTPwrapper::listAllNewsgroups(const QString&mask) {
212 login(); 216 login();
213 QStringList res; 217 QStringList res;
214 clist *result = 0; 218 clist *result = 0;
215 clistcell *current = 0; 219 clistcell *current = 0;
216 newsnntp_group_description *group; 220 newsnntp_group_description *group;
217 221
218 if ( m_nntp ) { 222 if ( m_nntp ) {
219 mailsession * session = m_nntp->sto_session; 223 mailsession * session = m_nntp->sto_session;
220 newsnntp * news = ( ( nntp_session_state_data * )session->sess_data )->nntp_session; 224 newsnntp * news = ( ( nntp_session_state_data * )session->sess_data )->nntp_session;
221 int err = NEWSNNTP_NO_ERROR; 225 int err = NEWSNNTP_NO_ERROR;
222 if (mask.isEmpty()) { 226 if (mask.isEmpty()) {
223 err = newsnntp_list(news, &result); 227 err = newsnntp_list(news, &result);
224 } else { 228 } else {
225 /* taken from generic wrapper of etpan */ 229 /* taken from generic wrapper of etpan */
226 QString nmask = mask+".*"; 230 QString nmask = mask+".*";
227 err = newsnntp_list_active(news, nmask.latin1(), &result); 231 err = newsnntp_list_active(news, nmask.latin1(), &result);
228 } 232 }
229 if ( err == NEWSNNTP_NO_ERROR && result) { 233 if ( err == NEWSNNTP_NO_ERROR && result) {
230 for ( current=clist_begin(result);current!=NULL;current=clist_next(current) ) { 234 for ( current=clist_begin(result);current!=NULL;current=clist_next(current) ) {
231 group = ( newsnntp_group_description* ) current->data; 235 group = ( newsnntp_group_description* ) current->data;
232 if (!group||!group->grp_name||strlen(group->grp_name)==0) continue; 236 if (!group||!group->grp_name||strlen(group->grp_name)==0) continue;
233 res.append(group->grp_name); 237 res.append(group->grp_name);
234 } 238 }
235 } 239 }
236 } 240 }
237 if (result) { 241 if (result) {
238 newsnntp_list_free(result); 242 newsnntp_list_free(result);
239 } 243 }
240 return res; 244 return res;
241} 245}
242 246
243void NNTPwrapper::answeredMail(const RecMailP&) {} 247void NNTPwrapper::answeredMail(const RecMailP&) {}
244 248
245void NNTPwrapper::statusFolder(folderStat&target_stat,const QString&) { 249void NNTPwrapper::statusFolder(folderStat&target_stat,const QString&) {
246 login(); 250 login();
247 target_stat.message_count = 0; 251 target_stat.message_count = 0;
248 target_stat.message_unseen = 0; 252 target_stat.message_unseen = 0;
249 target_stat.message_recent = 0; 253 target_stat.message_recent = 0;
250 if (!m_nntp) 254 if (!m_nntp)
251 return; 255 return;
252 int r = mailsession_status_folder(m_nntp->sto_session,0,&target_stat.message_count, 256 int r = mailsession_status_folder(m_nntp->sto_session,0,&target_stat.message_count,
253 &target_stat.message_recent,&target_stat.message_unseen); 257 &target_stat.message_recent,&target_stat.message_unseen);
254} 258}
255 259
256 260
257encodedString* NNTPwrapper::fetchRawBody(const RecMailP&mail) { 261encodedString* NNTPwrapper::fetchRawBody(const RecMailP&mail) {
258 char*target=0; 262 char*target=0;
259 size_t length=0; 263 size_t length=0;
260 encodedString*res = 0; 264 encodedString*res = 0;
261 mailmessage * mailmsg = 0; 265 mailmessage * mailmsg = 0;
262 int err = mailsession_get_message(m_nntp->sto_session, mail->getNumber(), &mailmsg); 266 int err = mailsession_get_message(m_nntp->sto_session, mail->getNumber(), &mailmsg);
263 err = mailmessage_fetch(mailmsg,&target,&length); 267 err = mailmessage_fetch(mailmsg,&target,&length);
264 if (mailmsg) 268 if (mailmsg)
265 mailmessage_free(mailmsg); 269 mailmessage_free(mailmsg);
266 if (target) { 270 if (target) {
267 res = new encodedString(target,length); 271 res = new encodedString(target,length);
268 } 272 }
269 return res; 273 return res;
270} 274}
271 275
272MAILLIB::ATYPE NNTPwrapper::getType()const { 276MAILLIB::ATYPE NNTPwrapper::getType()const {
273 return account->getType(); 277 return account->getType();
274} 278}
275 279
276const QString&NNTPwrapper::getName()const{ 280const QString&NNTPwrapper::getName()const{
277 return account->getAccountName(); 281 return account->getAccountName();
278} 282}
279 283
280void NNTPwrapper::deleteMail(const RecMailP&) { 284void NNTPwrapper::deleteMail(const RecMailP&) {
281} 285}
282 286
283int NNTPwrapper::deleteAllMail(const FolderP&) { 287int NNTPwrapper::deleteAllMail(const FolderP&) {
284} 288}
diff --git a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
index 1b7a1b4..5467547 100644
--- a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
@@ -1,258 +1,264 @@
1#include <stdlib.h> 1#include <stdlib.h>
2#include "pop3wrapper.h" 2#include "pop3wrapper.h"
3#include "mailtypes.h" 3#include "mailtypes.h"
4#include "logindialog.h" 4#include "logindialog.h"
5#include <libetpan/libetpan.h> 5#include <libetpan/libetpan.h>
6#include <qpe/global.h> 6#include <qpe/global.h>
7#include <qfile.h> 7#include <qfile.h>
8//#include <qstring.h> 8//#include <qstring.h>
9 9
10/* we don't fetch messages larger than 5 MB */ 10/* we don't fetch messages larger than 5 MB */
11#define HARD_MSG_SIZE_LIMIT 5242880 11#define HARD_MSG_SIZE_LIMIT 5242880
12 12
13using namespace Opie::Core; 13using namespace Opie::Core;
14POP3wrapper::POP3wrapper( POP3account *a ) 14POP3wrapper::POP3wrapper( POP3account *a )
15: Genericwrapper() { 15: Genericwrapper() {
16 account = a; 16 account = a;
17 m_pop3 = NULL; 17 m_pop3 = NULL;
18 msgTempName = a->getFileName()+"_msg_cache"; 18 msgTempName = a->getFileName()+"_msg_cache";
19 last_msg_id = 0; 19 last_msg_id = 0;
20} 20}
21 21
22POP3wrapper::~POP3wrapper() { 22POP3wrapper::~POP3wrapper() {
23 logout(); 23 logout();
24 QFile msg_cache(msgTempName); 24 QFile msg_cache(msgTempName);
25 if (msg_cache.exists()) { 25 if (msg_cache.exists()) {
26 msg_cache.remove(); 26 msg_cache.remove();
27 } 27 }
28} 28}
29 29
30void POP3wrapper::pop3_progress( size_t current, size_t maximum ) { 30void POP3wrapper::pop3_progress( size_t current, size_t maximum ) {
31 qDebug( "POP3: %i of %i", current, maximum ); 31 qDebug( "POP3: %i of %i", current, maximum );
32} 32}
33 33
34RecBodyP POP3wrapper::fetchBody( const RecMailP &mail ) { 34RecBodyP POP3wrapper::fetchBody( const RecMailP &mail ) {
35 int err = MAILPOP3_NO_ERROR; 35 int err = MAILPOP3_NO_ERROR;
36 char *message = 0; 36 char *message = 0;
37 size_t length = 0; 37 size_t length = 0;
38 38
39 RecBodyP body = new RecBody(); 39 RecBodyP body = new RecBody();
40 40
41 login(); 41 login();
42 if ( !m_pop3 ) { 42 if ( !m_pop3 ) {
43 return body; 43 return body;
44 } 44 }
45 45
46 mailmessage * mailmsg; 46 mailmessage * mailmsg;
47 if (mail->Msgsize()>HARD_MSG_SIZE_LIMIT) { 47 if (mail->Msgsize()>HARD_MSG_SIZE_LIMIT) {
48 qDebug("Message to large: %i",mail->Msgsize()); 48 qDebug("Message to large: %i",mail->Msgsize());
49 return body; 49 return body;
50 } 50 }
51 51
52 QFile msg_cache(msgTempName); 52 QFile msg_cache(msgTempName);
53 53
54 cleanMimeCache(); 54 cleanMimeCache();
55 55
56 if (mail->getNumber()!=last_msg_id) { 56 if (mail->getNumber()!=last_msg_id) {
57 if (msg_cache.exists()) { 57 if (msg_cache.exists()) {
58 msg_cache.remove(); 58 msg_cache.remove();
59 } 59 }
60 msg_cache.open(IO_ReadWrite|IO_Truncate); 60 msg_cache.open(IO_ReadWrite|IO_Truncate);
61 last_msg_id = mail->getNumber(); 61 last_msg_id = mail->getNumber();
62 err = mailsession_get_message(m_pop3->sto_session, mail->getNumber(), &mailmsg); 62 err = mailsession_get_message(m_pop3->sto_session, mail->getNumber(), &mailmsg);
63 err = mailmessage_fetch(mailmsg,&message,&length); 63 err = mailmessage_fetch(mailmsg,&message,&length);
64 msg_cache.writeBlock(message,length); 64 msg_cache.writeBlock(message,length);
65 } else { 65 } else {
66 QString msg=""; 66 QString msg="";
67 msg_cache.open(IO_ReadOnly); 67 msg_cache.open(IO_ReadOnly);
68 message = new char[4096]; 68 message = new char[4096];
69 memset(message,0,4096); 69 memset(message,0,4096);
70 while (msg_cache.readBlock(message,4095)>0) { 70 while (msg_cache.readBlock(message,4095)>0) {
71 msg+=message; 71 msg+=message;
72 memset(message,0,4096); 72 memset(message,0,4096);
73 } 73 }
74 delete message; 74 delete message;
75 message = (char*)malloc(msg.length()+1*sizeof(char)); 75 message = (char*)malloc(msg.length()+1*sizeof(char));
76 memset(message,0,msg.length()+1); 76 memset(message,0,msg.length()+1);
77 memcpy(message,msg.latin1(),msg.length()); 77 memcpy(message,msg.latin1(),msg.length());
78 /* transform to libetpan stuff */ 78 /* transform to libetpan stuff */
79 mailmsg = mailmessage_new(); 79 mailmsg = mailmessage_new();
80 mailmessage_init(mailmsg, NULL, data_message_driver, 0, strlen(message)); 80 mailmessage_init(mailmsg, NULL, data_message_driver, 0, strlen(message));
81 generic_message_t * msg_data; 81 generic_message_t * msg_data;
82 msg_data = (generic_message_t *)mailmsg->msg_data; 82 msg_data = (generic_message_t *)mailmsg->msg_data;
83 msg_data->msg_fetched = 1; 83 msg_data->msg_fetched = 1;
84 msg_data->msg_message = message; 84 msg_data->msg_message = message;
85 msg_data->msg_length = strlen(message); 85 msg_data->msg_length = strlen(message);
86 } 86 }
87 body = parseMail(mailmsg); 87 body = parseMail(mailmsg);
88 88
89 /* clean up */ 89 /* clean up */
90 if (mailmsg) 90 if (mailmsg)
91 mailmessage_free(mailmsg); 91 mailmessage_free(mailmsg);
92 if (message) 92 if (message)
93 free(message); 93 free(message);
94 94
95 return body; 95 return body;
96} 96}
97 97
98void POP3wrapper::listMessages(const QString &, QValueList<Opie::Core::OSmartPointer<RecMail> > &target ) 98void POP3wrapper::listMessages(const QString &, QValueList<Opie::Core::OSmartPointer<RecMail> > &target )
99{ 99{
100 login(); 100 login();
101 if (!m_pop3) 101 if (!m_pop3)
102 return; 102 return;
103 uint32_t res_messages,res_recent,res_unseen; 103 uint32_t res_messages,res_recent,res_unseen;
104 mailsession_status_folder(m_pop3->sto_session,"INBOX",&res_messages,&res_recent,&res_unseen); 104 mailsession_status_folder(m_pop3->sto_session,"INBOX",&res_messages,&res_recent,&res_unseen);
105 parseList(target,m_pop3->sto_session,"INBOX"); 105 parseList(target,m_pop3->sto_session,"INBOX");
106 Global::statusMessage( tr("Mailbox contains %1 mail(s)").arg(res_messages)); 106 Global::statusMessage( tr("Mailbox contains %1 mail(s)").arg(res_messages));
107} 107}
108 108
109void POP3wrapper::login() 109void POP3wrapper::login()
110{ 110{
111 if (account->getOffline()) 111 if (account->getOffline())
112 return; 112 return;
113 /* we'll hold the line */ 113 /* we'll hold the line */
114 if ( m_pop3 != NULL ) 114 if ( m_pop3 != NULL )
115 return; 115 return;
116 116
117 const char *server, *user, *pass; 117 const char *server, *user, *pass;
118 uint16_t port; 118 uint16_t port;
119 int err = MAILPOP3_NO_ERROR; 119 int err = MAILPOP3_NO_ERROR;
120 120
121 server = account->getServer().latin1(); 121 server = account->getServer().latin1();
122 port = account->getPort().toUInt(); 122 port = account->getPort().toUInt();
123 123
124 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) { 124 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) {
125 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true ); 125 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true );
126 login.show(); 126 login.show();
127 if ( QDialog::Accepted == login.exec() ) { 127 if ( QDialog::Accepted == login.exec() ) {
128 // ok 128 // ok
129 user = login.getUser().latin1(); 129 user = login.getUser().latin1();
130 pass = login.getPassword().latin1(); 130 pass = login.getPassword().latin1();
131 } else { 131 } else {
132 // cancel 132 // cancel
133 qDebug( "POP3: Login canceled" ); 133 qDebug( "POP3: Login canceled" );
134 return; 134 return;
135 } 135 }
136 } else { 136 } else {
137 user = account->getUser().latin1(); 137 user = account->getUser().latin1();
138 pass = account->getPassword().latin1(); 138 pass = account->getPassword().latin1();
139 } 139 }
140 140
141 // bool ssl = account->getSSL(); 141 // bool ssl = account->getSSL();
142 142
143 m_pop3=mailstorage_new(NULL); 143 m_pop3=mailstorage_new(NULL);
144 144
145 int conntypeset = account->ConnectionType(); 145 int conntypeset = account->ConnectionType();
146 int conntype = 0; 146 int conntype = 0;
147 if ( conntypeset == 3 ) { 147 if ( conntypeset == 3 ) {
148 conntype = CONNECTION_TYPE_COMMAND; 148 conntype = CONNECTION_TYPE_COMMAND;
149 } else if ( conntypeset == 2 ) { 149 } else if ( conntypeset == 2 ) {
150 conntype = CONNECTION_TYPE_TLS; 150 conntype = CONNECTION_TYPE_TLS;
151 } else if ( conntypeset == 1 ) { 151 } else if ( conntypeset == 1 ) {
152 conntype = CONNECTION_TYPE_STARTTLS; 152 conntype = CONNECTION_TYPE_STARTTLS;
153 } else if ( conntypeset == 0 ) { 153 } else if ( conntypeset == 0 ) {
154 conntype = CONNECTION_TYPE_TRY_STARTTLS; 154 conntype = CONNECTION_TYPE_TRY_STARTTLS;
155 } 155 }
156 156
157 //(ssl?CONNECTION_TYPE_TLS:CONNECTION_TYPE_PLAIN); 157 //(ssl?CONNECTION_TYPE_TLS:CONNECTION_TYPE_PLAIN);
158 158
159 pop3_mailstorage_init(m_pop3,(char*)server, port, NULL, conntype, POP3_AUTH_TYPE_PLAIN, 159 pop3_mailstorage_init(m_pop3,(char*)server, port, NULL, conntype, POP3_AUTH_TYPE_PLAIN,
160 (char*)user,(char*)pass,0,0,0); 160 (char*)user,(char*)pass,0,0,0);
161 161
162 162
163 err = mailstorage_connect(m_pop3); 163 err = mailstorage_connect(m_pop3);
164 if (err != MAIL_NO_ERROR) { 164 if (err != MAIL_NO_ERROR) {
165 qDebug( QString( "FEHLERNUMMER %1" ).arg( err ) ); 165 qDebug( QString( "FEHLERNUMMER %1" ).arg( err ) );
166 Global::statusMessage(tr("Error initializing folder")); 166 Global::statusMessage(tr("Error initializing folder"));
167 mailstorage_free(m_pop3); 167 mailstorage_free(m_pop3);
168 m_pop3 = 0; 168 m_pop3 = 0;
169 } else {
170 mailsession * session = m_pop3->sto_session;
171 mailpop3 * mail = ( ( pop3_session_state_data * )session->sess_data )->pop3_session;
172 if (mail) {
173 mail->pop3_progr_fun = &pop3_progress;
174 }
169 } 175 }
170} 176}
171 177
172void POP3wrapper::logout() 178void POP3wrapper::logout()
173{ 179{
174 if ( m_pop3 == NULL ) 180 if ( m_pop3 == NULL )
175 return; 181 return;
176 mailstorage_free(m_pop3); 182 mailstorage_free(m_pop3);
177 m_pop3 = 0; 183 m_pop3 = 0;
178} 184}
179 185
180 186
181QValueList<Opie::Core::OSmartPointer<Folder> >* POP3wrapper::listFolders() { 187QValueList<Opie::Core::OSmartPointer<Folder> >* POP3wrapper::listFolders() {
182 QValueList<Opie::Core::OSmartPointer<Folder> >* folders = new QValueList<FolderP>(); 188 QValueList<Opie::Core::OSmartPointer<Folder> >* folders = new QValueList<FolderP>();
183 FolderP inb=new Folder("INBOX","/"); 189 FolderP inb=new Folder("INBOX","/");
184 folders->append(inb); 190 folders->append(inb);
185 return folders; 191 return folders;
186} 192}
187 193
188void POP3wrapper::deleteMail(const RecMailP&mail) { 194void POP3wrapper::deleteMail(const RecMailP&mail) {
189 login(); 195 login();
190 if (!m_pop3) 196 if (!m_pop3)
191 return; 197 return;
192 int err = mailsession_remove_message(m_pop3->sto_session,mail->getNumber()); 198 int err = mailsession_remove_message(m_pop3->sto_session,mail->getNumber());
193 if (err != MAIL_NO_ERROR) { 199 if (err != MAIL_NO_ERROR) {
194 Global::statusMessage(tr("error deleting mail")); 200 Global::statusMessage(tr("error deleting mail"));
195 } 201 }
196} 202}
197 203
198void POP3wrapper::answeredMail(const RecMailP&) {} 204void POP3wrapper::answeredMail(const RecMailP&) {}
199 205
200int POP3wrapper::deleteAllMail(const FolderP&) { 206int POP3wrapper::deleteAllMail(const FolderP&) {
201 login(); 207 login();
202 if (!m_pop3) 208 if (!m_pop3)
203 return 0; 209 return 0;
204 int res = 1; 210 int res = 1;
205 211
206 uint32_t result = 0; 212 uint32_t result = 0;
207 int err = mailsession_messages_number(m_pop3->sto_session,NULL,&result); 213 int err = mailsession_messages_number(m_pop3->sto_session,NULL,&result);
208 if (err != MAIL_NO_ERROR) { 214 if (err != MAIL_NO_ERROR) {
209 Global::statusMessage(tr("Error getting folder info")); 215 Global::statusMessage(tr("Error getting folder info"));
210 return 0; 216 return 0;
211 } 217 }
212 for (unsigned int i = 0; i < result; ++i) { 218 for (unsigned int i = 0; i < result; ++i) {
213 err = mailsession_remove_message(m_pop3->sto_session,i+1); 219 err = mailsession_remove_message(m_pop3->sto_session,i+1);
214 if (err != MAIL_NO_ERROR) { 220 if (err != MAIL_NO_ERROR) {
215 Global::statusMessage(tr("Error deleting mail %1").arg(i+1)); 221 Global::statusMessage(tr("Error deleting mail %1").arg(i+1));
216 res=0; 222 res=0;
217 } 223 }
218 break; 224 break;
219 } 225 }
220 return res; 226 return res;
221} 227}
222 228
223void POP3wrapper::statusFolder(folderStat&target_stat,const QString&) { 229void POP3wrapper::statusFolder(folderStat&target_stat,const QString&) {
224 login(); 230 login();
225 target_stat.message_count = 0; 231 target_stat.message_count = 0;
226 target_stat.message_unseen = 0; 232 target_stat.message_unseen = 0;
227 target_stat.message_recent = 0; 233 target_stat.message_recent = 0;
228 if (!m_pop3) 234 if (!m_pop3)
229 return; 235 return;
230 int r = mailsession_status_folder(m_pop3->sto_session,0,&target_stat.message_count, 236 int r = mailsession_status_folder(m_pop3->sto_session,0,&target_stat.message_count,
231 &target_stat.message_recent,&target_stat.message_unseen); 237 &target_stat.message_recent,&target_stat.message_unseen);
232 if (r != MAIL_NO_ERROR) { 238 if (r != MAIL_NO_ERROR) {
233 qDebug("error getting folter status."); 239 qDebug("error getting folter status.");
234 } 240 }
235} 241}
236 242
237encodedString* POP3wrapper::fetchRawBody(const RecMailP&mail) { 243encodedString* POP3wrapper::fetchRawBody(const RecMailP&mail) {
238 char*target=0; 244 char*target=0;
239 size_t length=0; 245 size_t length=0;
240 encodedString*res = 0; 246 encodedString*res = 0;
241 mailmessage * mailmsg = 0; 247 mailmessage * mailmsg = 0;
242 int err = mailsession_get_message(m_pop3->sto_session, mail->getNumber(), &mailmsg); 248 int err = mailsession_get_message(m_pop3->sto_session, mail->getNumber(), &mailmsg);
243 err = mailmessage_fetch(mailmsg,&target,&length); 249 err = mailmessage_fetch(mailmsg,&target,&length);
244 if (mailmsg) 250 if (mailmsg)
245 mailmessage_free(mailmsg); 251 mailmessage_free(mailmsg);
246 if (target) { 252 if (target) {
247 res = new encodedString(target,length); 253 res = new encodedString(target,length);
248 } 254 }
249 return res; 255 return res;
250} 256}
251 257
252MAILLIB::ATYPE POP3wrapper::getType()const { 258MAILLIB::ATYPE POP3wrapper::getType()const {
253 return account->getType(); 259 return account->getType();
254} 260}
255 261
256const QString&POP3wrapper::getName()const{ 262const QString&POP3wrapper::getName()const{
257 return account->getAccountName(); 263 return account->getAccountName();
258} 264}