summaryrefslogtreecommitdiffabout
path: root/kmicromail/libmailwrapper
Unidiff
Diffstat (limited to 'kmicromail/libmailwrapper') (more/less context) (ignore whitespace changes)
-rw-r--r--kmicromail/libmailwrapper/imapwrapper.cpp4
-rw-r--r--kmicromail/libmailwrapper/mhwrapper.cpp2
-rw-r--r--kmicromail/libmailwrapper/settings.cpp4
3 files changed, 3 insertions, 7 deletions
diff --git a/kmicromail/libmailwrapper/imapwrapper.cpp b/kmicromail/libmailwrapper/imapwrapper.cpp
index 5441a9b..91332c3 100644
--- a/kmicromail/libmailwrapper/imapwrapper.cpp
+++ b/kmicromail/libmailwrapper/imapwrapper.cpp
@@ -1,558 +1,558 @@
1// CHANGED 2004-09-31 Lutz Rogowski 1// CHANGED 2004-09-31 Lutz Rogowski
2#include <stdlib.h> 2#include <stdlib.h>
3#include <libetpan/libetpan.h> 3#include <libetpan/libetpan.h>
4#include <qpe/global.h> 4#include <qpe/global.h>
5#include <qapplication.h> 5#include <qapplication.h>
6#include "imapwrapper.h" 6#include "imapwrapper.h"
7#include "mailtypes.h" 7#include "mailtypes.h"
8#include "logindialog.h" 8#include "logindialog.h"
9#include <qprogressbar.h> 9#include <qprogressbar.h>
10#include "genericwrapper.h" 10#include "genericwrapper.h"
11 11
12using namespace Opie::Core; 12using namespace Opie::Core;
13int IMAPwrapper::mMax = 0; 13int IMAPwrapper::mMax = 0;
14int IMAPwrapper::mCurrent = 0; 14int IMAPwrapper::mCurrent = 0;
15 15
16IMAPwrapper::IMAPwrapper( IMAPaccount *a ) 16IMAPwrapper::IMAPwrapper( IMAPaccount *a )
17 : AbstractMail() 17 : AbstractMail()
18{ 18{
19 account = a; 19 account = a;
20 m_imap = 0; 20 m_imap = 0;
21 m_Lastmbox = ""; 21 m_Lastmbox = "";
22 mCurrent = 0; 22 mCurrent = 0;
23 mMax = 0; 23 mMax = 0;
24} 24}
25 25
26IMAPwrapper::~IMAPwrapper() 26IMAPwrapper::~IMAPwrapper()
27{ 27{
28 logout(); 28 logout();
29} 29}
30 30
31/* to avoid to often select statements in loops etc. 31/* to avoid to often select statements in loops etc.
32 we trust that we are logged in and connection is established!*/ 32 we trust that we are logged in and connection is established!*/
33int IMAPwrapper::selectMbox(const QString&mbox) 33int IMAPwrapper::selectMbox(const QString&mbox)
34{ 34{
35 if (mbox == m_Lastmbox) { 35 if (mbox == m_Lastmbox) {
36 return MAILIMAP_NO_ERROR; 36 return MAILIMAP_NO_ERROR;
37 } 37 }
38 int err = mailimap_select( m_imap, (char*)mbox.latin1()); 38 int err = mailimap_select( m_imap, (char*)mbox.latin1());
39 if ( err != MAILIMAP_NO_ERROR ) { 39 if ( err != MAILIMAP_NO_ERROR ) {
40 m_Lastmbox = ""; 40 m_Lastmbox = "";
41 return err; 41 return err;
42 } 42 }
43 m_Lastmbox = mbox; 43 m_Lastmbox = mbox;
44 return err; 44 return err;
45} 45}
46 46
47void IMAPwrapper::imap_progress( size_t current, size_t maximum ) 47void IMAPwrapper::imap_progress( size_t current, size_t maximum )
48{ 48{
49 //qDebug("imap progress %d of %d ",current,maximum ); 49 //qDebug("imap progress %d of %d ",current,maximum );
50 //Global::statusMessage(tr("Downloading message %1 of %2").arg( current).arg(maximum)); 50 //Global::statusMessage(tr("Downloading message %1 of %2").arg( current).arg(maximum));
51 //qApp->processEvents() 51 //qApp->processEvents()
52 static int last = 0; 52 static int last = 0;
53 if ( last != current ) 53 if ( last != current )
54 IMAPwrapper::progress(); 54 IMAPwrapper::progress();
55 last = current; 55 last = current;
56} 56}
57void IMAPwrapper::progress( QString m ) 57void IMAPwrapper::progress( QString m )
58{ 58{
59 59
60 static QString mProgrMess; 60 static QString mProgrMess;
61 if ( m != QString::null ) { 61 if ( m != QString::null ) {
62 mProgrMess = m; 62 mProgrMess = m;
63 mCurrent = 0; 63 mCurrent = 0;
64 return; 64 return;
65 } 65 }
66 QString mess; 66 QString mess;
67 //qDebug("progress "); 67 //qDebug("progress ");
68 if ( mMax ) mess = mProgrMess +tr(" message %1 of %2").arg( mCurrent++).arg(mMax); 68 if ( mMax ) mess = mProgrMess +tr(" message %1 of %2").arg( mCurrent++).arg(mMax);
69 else mess = mProgrMess +tr(" message %1").arg( mCurrent++); 69 else mess = mProgrMess +tr(" message %1").arg( mCurrent++);
70 Global::statusMessage(mess); 70 Global::statusMessage(mess);
71 qApp->processEvents(); 71 qApp->processEvents();
72} 72}
73bool IMAPwrapper::start_tls(bool force_tls) 73bool IMAPwrapper::start_tls(bool force_tls)
74{ 74{
75 int err; 75 int err;
76 bool try_tls; 76 bool try_tls;
77 mailimap_capability_data * cap_data = 0; 77 mailimap_capability_data * cap_data = 0;
78 78
79 err = mailimap_capability(m_imap,&cap_data); 79 err = mailimap_capability(m_imap,&cap_data);
80 if (err != MAILIMAP_NO_ERROR) { 80 if (err != MAILIMAP_NO_ERROR) {
81 Global::statusMessage("error getting capabilities!"); 81 Global::statusMessage("error getting capabilities!");
82 return false; 82 return false;
83 } 83 }
84 clistiter * cur; 84 clistiter * cur;
85 for(cur = clist_begin(cap_data->cap_list) ; cur != NULL;cur = clist_next(cur)) { 85 for(cur = clist_begin(cap_data->cap_list) ; cur != NULL;cur = clist_next(cur)) {
86 struct mailimap_capability * cap; 86 struct mailimap_capability * cap;
87 cap = (struct mailimap_capability *)clist_content(cur); 87 cap = (struct mailimap_capability *)clist_content(cur);
88 if (cap->cap_type == MAILIMAP_CAPABILITY_NAME) { 88 if (cap->cap_type == MAILIMAP_CAPABILITY_NAME) {
89 if (strcasecmp(cap->cap_data.cap_name, "STARTTLS") == 0) { 89 if (strcasecmp(cap->cap_data.cap_name, "STARTTLS") == 0) {
90 try_tls = true; 90 try_tls = true;
91 break; 91 break;
92 } 92 }
93 } 93 }
94 } 94 }
95 if (cap_data) { 95 if (cap_data) {
96 mailimap_capability_data_free(cap_data); 96 mailimap_capability_data_free(cap_data);
97 } 97 }
98 if (try_tls) { 98 if (try_tls) {
99 err = mailimap_starttls(m_imap); 99 err = mailimap_starttls(m_imap);
100 if (err != MAILIMAP_NO_ERROR && force_tls) { 100 if (err != MAILIMAP_NO_ERROR && force_tls) {
101 Global::statusMessage(tr("Server has no TLS support!")); 101 Global::statusMessage(tr("Server has no TLS support!"));
102 try_tls = false; 102 try_tls = false;
103 } else { 103 } else {
104 mailstream_low * low; 104 mailstream_low * low;
105 mailstream_low * new_low; 105 mailstream_low * new_low;
106 low = mailstream_get_low(m_imap->imap_stream); 106 low = mailstream_get_low(m_imap->imap_stream);
107 if (!low) { 107 if (!low) {
108 try_tls = false; 108 try_tls = false;
109 } else { 109 } else {
110 int fd = mailstream_low_get_fd(low); 110 int fd = mailstream_low_get_fd(low);
111 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) { 111 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) {
112 mailstream_low_free(low); 112 mailstream_low_free(low);
113 mailstream_set_low(m_imap->imap_stream, new_low); 113 mailstream_set_low(m_imap->imap_stream, new_low);
114 } else { 114 } else {
115 try_tls = false; 115 try_tls = false;
116 } 116 }
117 } 117 }
118 } 118 }
119 } 119 }
120 return try_tls; 120 return try_tls;
121} 121}
122 122
123void IMAPwrapper::login() 123void IMAPwrapper::login()
124{ 124{
125 QString server, user, pass; 125 QString server, user, pass;
126 uint16_t port; 126 uint16_t port;
127 int err = MAILIMAP_NO_ERROR; 127 int err = MAILIMAP_NO_ERROR;
128 128
129 if (account->getOffline()) return; 129 if (account->getOffline()) return;
130 /* we are connected this moment */ 130 /* we are connected this moment */
131 /* TODO: setup a timer holding the line or if connection closed - delete the value */ 131 /* TODO: setup a timer holding the line or if connection closed - delete the value */
132 if (m_imap) { 132 if (m_imap) {
133 err = mailimap_noop(m_imap); 133 err = mailimap_noop(m_imap);
134 if (err!=MAILIMAP_NO_ERROR) { 134 if (err!=MAILIMAP_NO_ERROR) {
135 logout(); 135 logout();
136 } else { 136 } else {
137 mailstream_flush(m_imap->imap_stream); 137 mailstream_flush(m_imap->imap_stream);
138 return; 138 return;
139 } 139 }
140 } 140 }
141 server = account->getServer(); 141 server = account->getServer();
142 port = account->getPort().toUInt(); 142 port = account->getPort().toUInt();
143 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) { 143 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) {
144 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true ); 144 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true );
145 login.show(); 145 login.show();
146 if ( QDialog::Accepted == login.exec() ) { 146 if ( QDialog::Accepted == login.exec() ) {
147 // ok 147 // ok
148 user = login.getUser(); 148 user = login.getUser();
149 pass = login.getPassword(); 149 pass = login.getPassword();
150 } else { 150 } else {
151 // cancel 151 // cancel
152 return; 152 return;
153 } 153 }
154 } else { 154 } else {
155 user = account->getUser(); 155 user = account->getUser();
156 pass = account->getPassword(); 156 pass = account->getPassword();
157 } 157 }
158 158
159 m_imap = mailimap_new( 20, &imap_progress ); 159 m_imap = mailimap_new( 20, &imap_progress );
160 160
161 /* connect */ 161 /* connect */
162 bool ssl = false; 162 bool ssl = false;
163 bool try_tls = false; 163 bool try_tls = false;
164 bool force_tls = false; 164 bool force_tls = false;
165 165
166 if ( account->ConnectionType() == 2 ) { 166 if ( account->ConnectionType() == 2 ) {
167 ssl = true; 167 ssl = true;
168 } 168 }
169 if (account->ConnectionType()==1) { 169 if (account->ConnectionType()==1) {
170 force_tls = true; 170 force_tls = true;
171 } 171 }
172 172
173 if ( ssl ) { 173 if ( ssl ) {
174 qDebug("using ssl "); 174 //qDebug("using ssl ");
175 err = mailimap_ssl_connect( m_imap, (char*)server.latin1(), port ); 175 err = mailimap_ssl_connect( m_imap, (char*)server.latin1(), port );
176 } else { 176 } else {
177 err = mailimap_socket_connect( m_imap, (char*)server.latin1(), port ); 177 err = mailimap_socket_connect( m_imap, (char*)server.latin1(), port );
178 } 178 }
179 179
180 if ( err != MAILIMAP_NO_ERROR && 180 if ( err != MAILIMAP_NO_ERROR &&
181 err != MAILIMAP_NO_ERROR_AUTHENTICATED && 181 err != MAILIMAP_NO_ERROR_AUTHENTICATED &&
182 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { 182 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) {
183 QString failure = ""; 183 QString failure = "";
184 if (err == MAILIMAP_ERROR_CONNECTION_REFUSED) { 184 if (err == MAILIMAP_ERROR_CONNECTION_REFUSED) {
185 failure="Connection refused"; 185 failure="Connection refused";
186 } else { 186 } else {
187 failure="Unknown failure"; 187 failure="Unknown failure";
188 } 188 }
189 Global::statusMessage(tr("error connecting imap server: %1").arg(failure)); 189 Global::statusMessage(tr("error connecting imap server: %1").arg(failure));
190 mailimap_free( m_imap ); 190 mailimap_free( m_imap );
191 m_imap = 0; 191 m_imap = 0;
192 return; 192 return;
193 } 193 }
194 194
195 if (!ssl) { 195 if (!ssl) {
196 try_tls = start_tls(force_tls); 196 try_tls = start_tls(force_tls);
197 } 197 }
198 198
199 bool ok = true; 199 bool ok = true;
200 if (force_tls && !try_tls) { 200 if (force_tls && !try_tls) {
201 Global::statusMessage(tr("Server has no TLS support!")); 201 Global::statusMessage(tr("Server has no TLS support!"));
202 ok = false; 202 ok = false;
203 } 203 }
204 204
205 205
206 /* login */ 206 /* login */
207 207
208 if (ok) { 208 if (ok) {
209 err = mailimap_login_simple( m_imap, (char*)user.latin1(), (char*)pass.latin1() ); 209 err = mailimap_login_simple( m_imap, (char*)user.latin1(), (char*)pass.latin1() );
210 if ( err != MAILIMAP_NO_ERROR ) { 210 if ( err != MAILIMAP_NO_ERROR ) {
211 Global::statusMessage(tr("error logging in imap server: %1").arg(m_imap->imap_response)); 211 Global::statusMessage(tr("error logging in imap server: %1").arg(m_imap->imap_response));
212 ok = false; 212 ok = false;
213 } 213 }
214 } 214 }
215 if (!ok) { 215 if (!ok) {
216 err = mailimap_close( m_imap ); 216 err = mailimap_close( m_imap );
217 mailimap_free( m_imap ); 217 mailimap_free( m_imap );
218 m_imap = 0; 218 m_imap = 0;
219 } 219 }
220} 220}
221 221
222void IMAPwrapper::logout() 222void IMAPwrapper::logout()
223{ 223{
224 int err = MAILIMAP_NO_ERROR; 224 int err = MAILIMAP_NO_ERROR;
225 if (!m_imap) return; 225 if (!m_imap) return;
226 err = mailimap_logout( m_imap ); 226 err = mailimap_logout( m_imap );
227 err = mailimap_close( m_imap ); 227 err = mailimap_close( m_imap );
228 mailimap_free( m_imap ); 228 mailimap_free( m_imap );
229 m_imap = 0; 229 m_imap = 0;
230 m_Lastmbox = ""; 230 m_Lastmbox = "";
231} 231}
232 232
233void IMAPwrapper::listMessages(const QString&mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> > &target , int maxSizeInKb) 233void IMAPwrapper::listMessages(const QString&mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> > &target , int maxSizeInKb)
234{ 234{
235 int err = MAILIMAP_NO_ERROR; 235 int err = MAILIMAP_NO_ERROR;
236 clist *result = 0; 236 clist *result = 0;
237 clistcell *current; 237 clistcell *current;
238 mailimap_fetch_type *fetchType = 0; 238 mailimap_fetch_type *fetchType = 0;
239 mailimap_set *set = 0; 239 mailimap_set *set = 0;
240 240
241 login(); 241 login();
242 if (!m_imap) { 242 if (!m_imap) {
243 return; 243 return;
244 } 244 }
245 /* select mailbox READONLY for operations */ 245 /* select mailbox READONLY for operations */
246 err = selectMbox(mailbox); 246 err = selectMbox(mailbox);
247 if ( err != MAILIMAP_NO_ERROR ) { 247 if ( err != MAILIMAP_NO_ERROR ) {
248 return; 248 return;
249 } 249 }
250 250
251 int last = m_imap->imap_selection_info->sel_exists; 251 int last = m_imap->imap_selection_info->sel_exists;
252 252
253 if (last == 0) { 253 if (last == 0) {
254 Global::statusMessage(tr("Mailbox has no mails")); 254 Global::statusMessage(tr("Mailbox has no mails"));
255 return; 255 return;
256 } else { 256 } else {
257 } 257 }
258 258
259 Global::statusMessage(tr("Fetching header list")); 259 Global::statusMessage(tr("Fetching header list"));
260 qApp->processEvents(); 260 qApp->processEvents();
261 /* the range has to start at 1!!! not with 0!!!! */ 261 /* the range has to start at 1!!! not with 0!!!! */
262 set = mailimap_set_new_interval( 1, last ); 262 set = mailimap_set_new_interval( 1, last );
263 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 263 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
264 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope()); 264 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope());
265 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags()); 265 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags());
266 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate()); 266 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate());
267 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size()); 267 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size());
268 268
269 err = mailimap_fetch( m_imap, set, fetchType, &result ); 269 err = mailimap_fetch( m_imap, set, fetchType, &result );
270 mailimap_set_free( set ); 270 mailimap_set_free( set );
271 mailimap_fetch_type_free( fetchType ); 271 mailimap_fetch_type_free( fetchType );
272 272
273 QString date,subject,from; 273 QString date,subject,from;
274 274
275 if ( err == MAILIMAP_NO_ERROR ) { 275 if ( err == MAILIMAP_NO_ERROR ) {
276 mailimap_msg_att * msg_att; 276 mailimap_msg_att * msg_att;
277 int i = 0; 277 int i = 0;
278 for (current = clist_begin(result); current != 0; current=clist_next(current)) { 278 for (current = clist_begin(result); current != 0; current=clist_next(current)) {
279 ++i; 279 ++i;
280 msg_att = (mailimap_msg_att*)current->data; 280 msg_att = (mailimap_msg_att*)current->data;
281 RecMail*m = parse_list_result(msg_att); 281 RecMail*m = parse_list_result(msg_att);
282 if (m) { 282 if (m) {
283 if ( maxSizeInKb == 0 || m->Msgsize()<=maxSizeInKb*1024 ) { 283 if ( maxSizeInKb == 0 || m->Msgsize()<=maxSizeInKb*1024 ) {
284 m->setNumber(i); 284 m->setNumber(i);
285 m->setMbox(mailbox); 285 m->setMbox(mailbox);
286 m->setWrapper(this); 286 m->setWrapper(this);
287 target.append(m); 287 target.append(m);
288 } 288 }
289 } 289 }
290 } 290 }
291 Global::statusMessage(tr("Mailbox has %1 mails").arg(target.count())); 291 Global::statusMessage(tr("Mailbox has %1 mails").arg(target.count()));
292 } else { 292 } else {
293 Global::statusMessage(tr("Error fetching headers: %1").arg(m_imap->imap_response)); 293 Global::statusMessage(tr("Error fetching headers: %1").arg(m_imap->imap_response));
294 } 294 }
295 if (result) mailimap_fetch_list_free(result); 295 if (result) mailimap_fetch_list_free(result);
296} 296}
297 297
298QValueList<Opie::Core::OSmartPointer<Folder> >* IMAPwrapper::listFolders() 298QValueList<Opie::Core::OSmartPointer<Folder> >* IMAPwrapper::listFolders()
299{ 299{
300 const char *path, *mask; 300 const char *path, *mask;
301 int err = MAILIMAP_NO_ERROR; 301 int err = MAILIMAP_NO_ERROR;
302 clist *result = 0; 302 clist *result = 0;
303 clistcell *current = 0; 303 clistcell *current = 0;
304 clistcell*cur_flag = 0; 304 clistcell*cur_flag = 0;
305 mailimap_mbx_list_flags*bflags = 0; 305 mailimap_mbx_list_flags*bflags = 0;
306 306
307 QValueList<FolderP>* folders = new QValueList<FolderP>(); 307 QValueList<FolderP>* folders = new QValueList<FolderP>();
308 login(); 308 login();
309 if (!m_imap) { 309 if (!m_imap) {
310 return folders; 310 return folders;
311 } 311 }
312 312
313/* 313/*
314 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 314 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
315 * We must not forget to filter them out in next loop! 315 * We must not forget to filter them out in next loop!
316 * it seems like ugly code. and yes - it is ugly code. but the best way. 316 * it seems like ugly code. and yes - it is ugly code. but the best way.
317 */ 317 */
318 Global::statusMessage(tr("Fetching folder list")); 318 Global::statusMessage(tr("Fetching folder list"));
319 qApp->processEvents(); 319 qApp->processEvents();
320 QString temp; 320 QString temp;
321 mask = "INBOX" ; 321 mask = "INBOX" ;
322 mailimap_mailbox_list *list; 322 mailimap_mailbox_list *list;
323 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); 323 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result );
324 QString del; 324 QString del;
325 bool selectable = true; 325 bool selectable = true;
326 bool no_inferiors = false; 326 bool no_inferiors = false;
327 if ( err == MAILIMAP_NO_ERROR ) { 327 if ( err == MAILIMAP_NO_ERROR ) {
328 current = result->first; 328 current = result->first;
329 for ( int i = result->count; i > 0; i-- ) { 329 for ( int i = result->count; i > 0; i-- ) {
330 list = (mailimap_mailbox_list *) current->data; 330 list = (mailimap_mailbox_list *) current->data;
331 // it is better use the deep copy mechanism of qt itself 331 // it is better use the deep copy mechanism of qt itself
332 // instead of using strdup! 332 // instead of using strdup!
333 temp = list->mb_name; 333 temp = list->mb_name;
334 del = list->mb_delimiter; 334 del = list->mb_delimiter;
335 current = current->next; 335 current = current->next;
336 if ( (bflags = list->mb_flag) ) { 336 if ( (bflags = list->mb_flag) ) {
337 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& 337 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&&
338 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); 338 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT);
339 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) { 339 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) {
340 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) { 340 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) {
341 no_inferiors = true; 341 no_inferiors = true;
342 } 342 }
343 } 343 }
344 } 344 }
345 folders->append( new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix())); 345 folders->append( new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix()));
346 } 346 }
347 } else { 347 } else {
348 qDebug("error fetching folders: "); 348 qDebug("error fetching folders: ");
349 349
350 } 350 }
351 mailimap_list_result_free( result ); 351 mailimap_list_result_free( result );
352 352
353/* 353/*
354 * second stage - get the other then inbox folders 354 * second stage - get the other then inbox folders
355 */ 355 */
356 mask = "*" ; 356 mask = "*" ;
357 path = account->getPrefix().latin1(); 357 path = account->getPrefix().latin1();
358 if (!path) path = ""; 358 if (!path) path = "";
359 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result ); 359 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result );
360 if ( err == MAILIMAP_NO_ERROR ) { 360 if ( err == MAILIMAP_NO_ERROR ) {
361 current = result->first; 361 current = result->first;
362 for ( current=clist_begin(result);current!=NULL;current=clist_next(current)) { 362 for ( current=clist_begin(result);current!=NULL;current=clist_next(current)) {
363 no_inferiors = false; 363 no_inferiors = false;
364 list = (mailimap_mailbox_list *) current->data; 364 list = (mailimap_mailbox_list *) current->data;
365 // it is better use the deep copy mechanism of qt itself 365 // it is better use the deep copy mechanism of qt itself
366 // instead of using strdup! 366 // instead of using strdup!
367 temp = list->mb_name; 367 temp = list->mb_name;
368 if (temp.lower()=="inbox") 368 if (temp.lower()=="inbox")
369 continue; 369 continue;
370 if (temp.lower()==account->getPrefix().lower()) 370 if (temp.lower()==account->getPrefix().lower())
371 continue; 371 continue;
372 if ( (bflags = list->mb_flag) ) { 372 if ( (bflags = list->mb_flag) ) {
373 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& 373 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&&
374 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); 374 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT);
375 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) { 375 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) {
376 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) { 376 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) {
377 no_inferiors = true; 377 no_inferiors = true;
378 } 378 }
379 } 379 }
380 } 380 }
381 del = list->mb_delimiter; 381 del = list->mb_delimiter;
382 folders->append(new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix())); 382 folders->append(new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix()));
383 } 383 }
384 } else { 384 } else {
385 qDebug("error fetching folders "); 385 qDebug("error fetching folders ");
386 386
387 } 387 }
388 if (result) mailimap_list_result_free( result ); 388 if (result) mailimap_list_result_free( result );
389 return folders; 389 return folders;
390} 390}
391 391
392RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att) 392RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
393{ 393{
394 RecMail * m = 0; 394 RecMail * m = 0;
395 mailimap_msg_att_item *item=0; 395 mailimap_msg_att_item *item=0;
396 clistcell *current,*c,*cf; 396 clistcell *current,*c,*cf;
397 mailimap_msg_att_dynamic*flist; 397 mailimap_msg_att_dynamic*flist;
398 mailimap_flag_fetch*cflag; 398 mailimap_flag_fetch*cflag;
399 int size; 399 int size;
400 QBitArray mFlags(7); 400 QBitArray mFlags(7);
401 QStringList addresslist; 401 QStringList addresslist;
402 402
403 if (!m_att) { 403 if (!m_att) {
404 return m; 404 return m;
405 } 405 }
406 m = new RecMail(); 406 m = new RecMail();
407 for (c = clist_begin(m_att->att_list); c!=NULL;c=clist_next(c) ) { 407 for (c = clist_begin(m_att->att_list); c!=NULL;c=clist_next(c) ) {
408 current = c; 408 current = c;
409 size = 0; 409 size = 0;
410 item = (mailimap_msg_att_item*)current->data; 410 item = (mailimap_msg_att_item*)current->data;
411 if ( !item ) 411 if ( !item )
412 continue; 412 continue;
413 if (item->att_type!=MAILIMAP_MSG_ATT_ITEM_STATIC) { 413 if (item->att_type!=MAILIMAP_MSG_ATT_ITEM_STATIC) {
414 flist = (mailimap_msg_att_dynamic*)item->att_data.att_dyn; 414 flist = (mailimap_msg_att_dynamic*)item->att_data.att_dyn;
415 if (!flist || !flist->att_list) { 415 if (!flist || !flist->att_list) {
416 continue; 416 continue;
417 } 417 }
418 cf = flist->att_list->first; 418 cf = flist->att_list->first;
419 if( ! cf ) 419 if( ! cf )
420 for (cf = clist_begin(flist->att_list); cf!=NULL; cf = clist_next(cf)) { 420 for (cf = clist_begin(flist->att_list); cf!=NULL; cf = clist_next(cf)) {
421 cflag = (mailimap_flag_fetch*)cf->data; 421 cflag = (mailimap_flag_fetch*)cf->data;
422 if( ! cflag ) 422 if( ! cflag )
423 qDebug("imap:not cflag "); 423 qDebug("imap:not cflag ");
424 if (cflag->fl_type==MAILIMAP_FLAG_FETCH_OTHER && cflag->fl_flag!=0) { 424 if (cflag->fl_type==MAILIMAP_FLAG_FETCH_OTHER && cflag->fl_flag!=0) {
425 switch (cflag->fl_flag->fl_type) { 425 switch (cflag->fl_flag->fl_type) {
426 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */ 426 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */
427 mFlags.setBit(FLAG_ANSWERED); 427 mFlags.setBit(FLAG_ANSWERED);
428 break; 428 break;
429 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */ 429 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */
430 mFlags.setBit(FLAG_FLAGGED); 430 mFlags.setBit(FLAG_FLAGGED);
431 break; 431 break;
432 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */ 432 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */
433 mFlags.setBit(FLAG_DELETED); 433 mFlags.setBit(FLAG_DELETED);
434 break; 434 break;
435 case MAILIMAP_FLAG_SEEN: /* \Seen flag */ 435 case MAILIMAP_FLAG_SEEN: /* \Seen flag */
436 mFlags.setBit(FLAG_SEEN); 436 mFlags.setBit(FLAG_SEEN);
437 break; 437 break;
438 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */ 438 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */
439 mFlags.setBit(FLAG_DRAFT); 439 mFlags.setBit(FLAG_DRAFT);
440 break; 440 break;
441 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */ 441 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */
442 break; 442 break;
443 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */ 443 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */
444 break; 444 break;
445 default: 445 default:
446 break; 446 break;
447 } 447 }
448 } else if (cflag->fl_type==MAILIMAP_FLAG_FETCH_RECENT) { 448 } else if (cflag->fl_type==MAILIMAP_FLAG_FETCH_RECENT) {
449 mFlags.setBit(FLAG_RECENT); 449 mFlags.setBit(FLAG_RECENT);
450 } 450 }
451 } 451 }
452 continue; 452 continue;
453 } 453 }
454 if ( item->att_data.att_static == NULL ) 454 if ( item->att_data.att_static == NULL )
455 continue; 455 continue;
456 if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_ENVELOPE) { 456 if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_ENVELOPE) {
457 mailimap_envelope * head = item->att_data.att_static->att_data.att_env; 457 mailimap_envelope * head = item->att_data.att_static->att_data.att_env;
458 if ( head == NULL ) 458 if ( head == NULL )
459 continue; 459 continue;
460 if ( head->env_date != NULL ) { 460 if ( head->env_date != NULL ) {
461 m->setDate(head->env_date); 461 m->setDate(head->env_date);
462 struct mailimf_date_time result; 462 struct mailimf_date_time result;
463 struct mailimf_date_time* date = &result; 463 struct mailimf_date_time* date = &result;
464 struct mailimf_date_time **re = &date; 464 struct mailimf_date_time **re = &date;
465 size_t length = m->getDate().length(); 465 size_t length = m->getDate().length();
466 size_t index = 0; 466 size_t index = 0;
467 if ( mailimf_date_time_parse(head->env_date, length,&index, re ) == MAILIMF_NO_ERROR ) { 467 if ( mailimf_date_time_parse(head->env_date, length,&index, re ) == MAILIMF_NO_ERROR ) {
468 m->setDate( Genericwrapper::parseDateTime( date ) ); 468 m->setDate( Genericwrapper::parseDateTime( date ) );
469 char tmp[23]; 469 char tmp[23];
470 snprintf( tmp, 23, "%04i-%02i-%02i %02i:%02i:%02i %05i", 470 snprintf( tmp, 23, "%04i-%02i-%02i %02i:%02i:%02i %05i",
471 date->dt_year,date->dt_month, date->dt_day, date->dt_hour, date->dt_min, date->dt_sec, date->dt_zone ); 471 date->dt_year,date->dt_month, date->dt_day, date->dt_hour, date->dt_min, date->dt_sec, date->dt_zone );
472 m->setIsoDate( QString( tmp ) ); 472 m->setIsoDate( QString( tmp ) );
473 } else { 473 } else {
474 m->setIsoDate(head->env_date); 474 m->setIsoDate(head->env_date);
475 } 475 }
476 } 476 }
477 if ( head->env_subject != NULL ) 477 if ( head->env_subject != NULL )
478 m->setSubject(convert_String((const char*)head->env_subject)); 478 m->setSubject(convert_String((const char*)head->env_subject));
479 //m->setSubject(head->env_subject); 479 //m->setSubject(head->env_subject);
480 if (head->env_from!=NULL) { 480 if (head->env_from!=NULL) {
481 addresslist = address_list_to_stringlist(head->env_from->frm_list); 481 addresslist = address_list_to_stringlist(head->env_from->frm_list);
482 if (addresslist.count()) { 482 if (addresslist.count()) {
483 m->setFrom(addresslist.first()); 483 m->setFrom(addresslist.first());
484 } 484 }
485 } 485 }
486 if (head->env_to!=NULL) { 486 if (head->env_to!=NULL) {
487 addresslist = address_list_to_stringlist(head->env_to->to_list); 487 addresslist = address_list_to_stringlist(head->env_to->to_list);
488 m->setTo(addresslist); 488 m->setTo(addresslist);
489 } 489 }
490 if (head->env_cc!=NULL) { 490 if (head->env_cc!=NULL) {
491 addresslist = address_list_to_stringlist(head->env_cc->cc_list); 491 addresslist = address_list_to_stringlist(head->env_cc->cc_list);
492 m->setCC(addresslist); 492 m->setCC(addresslist);
493 } 493 }
494 if (head->env_bcc!=NULL) { 494 if (head->env_bcc!=NULL) {
495 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list); 495 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list);
496 m->setBcc(addresslist); 496 m->setBcc(addresslist);
497 } 497 }
498 /* reply to address, eg. email. */ 498 /* reply to address, eg. email. */
499 if (head->env_reply_to!=NULL) { 499 if (head->env_reply_to!=NULL) {
500 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list); 500 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list);
501 if (addresslist.count()) { 501 if (addresslist.count()) {
502 m->setReplyto(addresslist.first()); 502 m->setReplyto(addresslist.first());
503 } 503 }
504 } 504 }
505 if (head->env_in_reply_to!=NULL) { 505 if (head->env_in_reply_to!=NULL) {
506 QString h(head->env_in_reply_to); 506 QString h(head->env_in_reply_to);
507 while (h.length()>0 && h[0]=='<') { 507 while (h.length()>0 && h[0]=='<') {
508 h.remove(0,1); 508 h.remove(0,1);
509 } 509 }
510 while (h.length()>0 && h[h.length()-1]=='>') { 510 while (h.length()>0 && h[h.length()-1]=='>') {
511 h.remove(h.length()-1,1); 511 h.remove(h.length()-1,1);
512 } 512 }
513 if (h.length()>0) { 513 if (h.length()>0) {
514 m->setInreply(QStringList(h)); 514 m->setInreply(QStringList(h));
515 } 515 }
516 } 516 }
517 if (head->env_message_id != NULL) { 517 if (head->env_message_id != NULL) {
518 m->setMsgid(QString(head->env_message_id)); 518 m->setMsgid(QString(head->env_message_id));
519 } 519 }
520 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) { 520 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) {
521#if 0 521#if 0
522 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date; 522 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date;
523 QDateTime da(QDate(d->dt_year,d->dt_month,d->dt_day),QTime(d->dt_hour,d->dt_min,d->dt_sec)); 523 QDateTime da(QDate(d->dt_year,d->dt_month,d->dt_day),QTime(d->dt_hour,d->dt_min,d->dt_sec));
524 qDebug("time %s ",da.toString().latin1() ); 524 qDebug("time %s ",da.toString().latin1() );
525#endif 525#endif
526 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_RFC822_SIZE) { 526 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_RFC822_SIZE) {
527 size = item->att_data.att_static->att_data.att_rfc822_size; 527 size = item->att_data.att_static->att_data.att_rfc822_size;
528 } 528 }
529 } 529 }
530 /* msg is already deleted */ 530 /* msg is already deleted */
531 if (mFlags.testBit(FLAG_DELETED) && m) { 531 if (mFlags.testBit(FLAG_DELETED) && m) {
532 delete m; 532 delete m;
533 m = 0; 533 m = 0;
534 } 534 }
535 if (m) { 535 if (m) {
536 m->setFlags(mFlags); 536 m->setFlags(mFlags);
537 m->setMsgsize(size); 537 m->setMsgsize(size);
538 } 538 }
539 return m; 539 return m;
540} 540}
541 541
542RecBodyP IMAPwrapper::fetchBody(const RecMailP&mail) 542RecBodyP IMAPwrapper::fetchBody(const RecMailP&mail)
543{ 543{
544 RecBodyP body = new RecBody(); 544 RecBodyP body = new RecBody();
545 const char *mb; 545 const char *mb;
546 int err = MAILIMAP_NO_ERROR; 546 int err = MAILIMAP_NO_ERROR;
547 clist *result = 0; 547 clist *result = 0;
548 clistcell *current; 548 clistcell *current;
549 mailimap_fetch_att *fetchAtt = 0; 549 mailimap_fetch_att *fetchAtt = 0;
550 mailimap_fetch_type *fetchType = 0; 550 mailimap_fetch_type *fetchType = 0;
551 mailimap_set *set = 0; 551 mailimap_set *set = 0;
552 mailimap_body*body_desc = 0; 552 mailimap_body*body_desc = 0;
553 553
554 mb = mail->getMbox().latin1(); 554 mb = mail->getMbox().latin1();
555 555
556 login(); 556 login();
557 if (!m_imap) { 557 if (!m_imap) {
558 return body; 558 return body;
@@ -866,442 +866,442 @@ void IMAPwrapper::fillSingleBasicPart(RecPartP&target_part,mailimap_body_type_ba
866 } else { 866 } else {
867 type = ""; 867 type = "";
868 } 868 }
869 break; 869 break;
870 } 870 }
871 if (which->bd_media_basic->med_subtype) { 871 if (which->bd_media_basic->med_subtype) {
872 sub = which->bd_media_basic->med_subtype; 872 sub = which->bd_media_basic->med_subtype;
873 } else { 873 } else {
874 sub = ""; 874 sub = "";
875 } 875 }
876 // odebug << "Type = " << type.latin1() << "/" << sub.latin1() << "" << oendl; 876 // odebug << "Type = " << type.latin1() << "/" << sub.latin1() << "" << oendl;
877 target_part->setType(type.lower()); 877 target_part->setType(type.lower());
878 target_part->setSubtype(sub.lower()); 878 target_part->setSubtype(sub.lower());
879 fillBodyFields(target_part,which->bd_fields); 879 fillBodyFields(target_part,which->bd_fields);
880} 880}
881 881
882void IMAPwrapper::fillBodyFields(RecPartP&target_part,mailimap_body_fields*which) 882void IMAPwrapper::fillBodyFields(RecPartP&target_part,mailimap_body_fields*which)
883{ 883{
884 if (!which) return; 884 if (!which) return;
885 if (which->bd_parameter && which->bd_parameter->pa_list && which->bd_parameter->pa_list->count>0) { 885 if (which->bd_parameter && which->bd_parameter->pa_list && which->bd_parameter->pa_list->count>0) {
886 clistcell*cur; 886 clistcell*cur;
887 mailimap_single_body_fld_param*param=0; 887 mailimap_single_body_fld_param*param=0;
888 for (cur = clist_begin(which->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) { 888 for (cur = clist_begin(which->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) {
889 param = (mailimap_single_body_fld_param*)cur->data; 889 param = (mailimap_single_body_fld_param*)cur->data;
890 if (param) { 890 if (param) {
891 target_part->addParameter(QString(param->pa_name).lower(),QString(param->pa_value)); 891 target_part->addParameter(QString(param->pa_name).lower(),QString(param->pa_value));
892 } 892 }
893 } 893 }
894 } 894 }
895 mailimap_body_fld_enc*enc = which->bd_encoding; 895 mailimap_body_fld_enc*enc = which->bd_encoding;
896 QString encoding(""); 896 QString encoding("");
897 switch (enc->enc_type) { 897 switch (enc->enc_type) {
898 case MAILIMAP_BODY_FLD_ENC_7BIT: 898 case MAILIMAP_BODY_FLD_ENC_7BIT:
899 encoding = "7bit"; 899 encoding = "7bit";
900 break; 900 break;
901 case MAILIMAP_BODY_FLD_ENC_8BIT: 901 case MAILIMAP_BODY_FLD_ENC_8BIT:
902 encoding = "8bit"; 902 encoding = "8bit";
903 break; 903 break;
904 case MAILIMAP_BODY_FLD_ENC_BINARY: 904 case MAILIMAP_BODY_FLD_ENC_BINARY:
905 encoding="binary"; 905 encoding="binary";
906 break; 906 break;
907 case MAILIMAP_BODY_FLD_ENC_BASE64: 907 case MAILIMAP_BODY_FLD_ENC_BASE64:
908 encoding="base64"; 908 encoding="base64";
909 break; 909 break;
910 case MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE: 910 case MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE:
911 encoding="quoted-printable"; 911 encoding="quoted-printable";
912 break; 912 break;
913 case MAILIMAP_BODY_FLD_ENC_OTHER: 913 case MAILIMAP_BODY_FLD_ENC_OTHER:
914 default: 914 default:
915 if (enc->enc_value) { 915 if (enc->enc_value) {
916 char*t=enc->enc_value; 916 char*t=enc->enc_value;
917 encoding=QString(enc->enc_value); 917 encoding=QString(enc->enc_value);
918 enc->enc_value=0L; 918 enc->enc_value=0L;
919 free(t); 919 free(t);
920 } 920 }
921 } 921 }
922 if (which->bd_description) { 922 if (which->bd_description) {
923 target_part->setDescription(QString(which->bd_description)); 923 target_part->setDescription(QString(which->bd_description));
924 } 924 }
925 target_part->setEncoding(encoding); 925 target_part->setEncoding(encoding);
926 target_part->setSize(which->bd_size); 926 target_part->setSize(which->bd_size);
927} 927}
928void IMAPwrapper::deleteMailList(const QValueList<RecMailP>&target) 928void IMAPwrapper::deleteMailList(const QValueList<RecMailP>&target)
929{ 929{
930 //#if 0 930 //#if 0
931 mailimap_flag_list*flist; 931 mailimap_flag_list*flist;
932 mailimap_set *set; 932 mailimap_set *set;
933 mailimap_store_att_flags * store_flags; 933 mailimap_store_att_flags * store_flags;
934 int err; 934 int err;
935 login(); 935 login();
936 //#endif 936 //#endif
937 if (!m_imap) { 937 if (!m_imap) {
938 return; 938 return;
939 } 939 }
940 int iii = 0; 940 int iii = 0;
941 int count = target.count(); 941 int count = target.count();
942 // qDebug("imap remove count %d ", count); 942 // qDebug("imap remove count %d ", count);
943 943
944 944
945 mMax = count; 945 mMax = count;
946 //progress( tr("Delete")); 946 //progress( tr("Delete"));
947 QWidget wid; 947 QWidget wid;
948 wid.show(); 948 wid.show();
949 while (iii < count ) { 949 while (iii < count ) {
950 Global::statusMessage(tr("Delete message %1 of %2").arg(iii).arg(count)); 950 Global::statusMessage(tr("Delete message %1 of %2").arg(iii).arg(count));
951 wid.raise(); 951 wid.raise();
952 qApp->processEvents(); 952 qApp->processEvents();
953 RecMailP mail = (*target.at( iii )); 953 RecMailP mail = (*target.at( iii ));
954 //#if 0 954 //#if 0
955 //qDebug("IMAP remove %d %d ", iii, mail->getNumber() ); 955 //qDebug("IMAP remove %d %d ", iii, mail->getNumber() );
956 err = selectMbox(mail->getMbox()); 956 err = selectMbox(mail->getMbox());
957 if ( err != MAILIMAP_NO_ERROR ) { 957 if ( err != MAILIMAP_NO_ERROR ) {
958 return; 958 return;
959 } 959 }
960 flist = mailimap_flag_list_new_empty(); 960 flist = mailimap_flag_list_new_empty();
961 mailimap_flag_list_add(flist,mailimap_flag_new_deleted()); 961 mailimap_flag_list_add(flist,mailimap_flag_new_deleted());
962 store_flags = mailimap_store_att_flags_new_set_flags(flist); 962 store_flags = mailimap_store_att_flags_new_set_flags(flist);
963 set = mailimap_set_new_single(mail->getNumber()); 963 set = mailimap_set_new_single(mail->getNumber());
964 err = mailimap_store(m_imap,set,store_flags); 964 err = mailimap_store(m_imap,set,store_flags);
965 mailimap_set_free( set ); 965 mailimap_set_free( set );
966 mailimap_store_att_flags_free(store_flags); 966 mailimap_store_att_flags_free(store_flags);
967 967
968 if (err != MAILIMAP_NO_ERROR) { 968 if (err != MAILIMAP_NO_ERROR) {
969 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl; 969 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl;
970 return; 970 return;
971 } 971 }
972 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl; 972 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl;
973 /* should we realy do that at this moment? */ 973 /* should we realy do that at this moment? */
974 974
975 // err = mailimap_expunge(m_imap); 975 // err = mailimap_expunge(m_imap);
976 //if (err != MAILIMAP_NO_ERROR) { 976 //if (err != MAILIMAP_NO_ERROR) {
977 // Global::statusMessage(tr("Error deleting mails: %s").arg(m_imap->imap_response)); 977 // Global::statusMessage(tr("Error deleting mails: %s").arg(m_imap->imap_response));
978 // } 978 // }
979 //#endif 979 //#endif
980 //deleteMail( mail); 980 //deleteMail( mail);
981 ++iii; 981 ++iii;
982 } 982 }
983 //qDebug("Deleting imap mails... "); 983 //qDebug("Deleting imap mails... ");
984 err = mailimap_expunge(m_imap); 984 err = mailimap_expunge(m_imap);
985 if (err != MAILIMAP_NO_ERROR) { 985 if (err != MAILIMAP_NO_ERROR) {
986 Global::statusMessage(tr("Error deleting mails: %s").arg(m_imap->imap_response)); 986 Global::statusMessage(tr("Error deleting mails: %s").arg(m_imap->imap_response));
987 } 987 }
988} 988}
989void IMAPwrapper::deleteMail(const RecMailP&mail) 989void IMAPwrapper::deleteMail(const RecMailP&mail)
990{ 990{
991 mailimap_flag_list*flist; 991 mailimap_flag_list*flist;
992 mailimap_set *set; 992 mailimap_set *set;
993 mailimap_store_att_flags * store_flags; 993 mailimap_store_att_flags * store_flags;
994 int err; 994 int err;
995 login(); 995 login();
996 if (!m_imap) { 996 if (!m_imap) {
997 return; 997 return;
998 } 998 }
999 err = selectMbox(mail->getMbox()); 999 err = selectMbox(mail->getMbox());
1000 if ( err != MAILIMAP_NO_ERROR ) { 1000 if ( err != MAILIMAP_NO_ERROR ) {
1001 return; 1001 return;
1002 } 1002 }
1003 flist = mailimap_flag_list_new_empty(); 1003 flist = mailimap_flag_list_new_empty();
1004 mailimap_flag_list_add(flist,mailimap_flag_new_deleted()); 1004 mailimap_flag_list_add(flist,mailimap_flag_new_deleted());
1005 store_flags = mailimap_store_att_flags_new_set_flags(flist); 1005 store_flags = mailimap_store_att_flags_new_set_flags(flist);
1006 set = mailimap_set_new_single(mail->getNumber()); 1006 set = mailimap_set_new_single(mail->getNumber());
1007 err = mailimap_store(m_imap,set,store_flags); 1007 err = mailimap_store(m_imap,set,store_flags);
1008 mailimap_set_free( set ); 1008 mailimap_set_free( set );
1009 mailimap_store_att_flags_free(store_flags); 1009 mailimap_store_att_flags_free(store_flags);
1010 1010
1011 if (err != MAILIMAP_NO_ERROR) { 1011 if (err != MAILIMAP_NO_ERROR) {
1012 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl; 1012 // odebug << "error deleting mail: " << m_imap->imap_response << "" << oendl;
1013 return; 1013 return;
1014 } 1014 }
1015 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl; 1015 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl;
1016 /* should we realy do that at this moment? */ 1016 /* should we realy do that at this moment? */
1017 1017
1018 err = mailimap_expunge(m_imap); 1018 err = mailimap_expunge(m_imap);
1019 if (err != MAILIMAP_NO_ERROR) { 1019 if (err != MAILIMAP_NO_ERROR) {
1020 Global::statusMessage(tr("error deleting mail: %s").arg(m_imap->imap_response)); 1020 Global::statusMessage(tr("error deleting mail: %s").arg(m_imap->imap_response));
1021 } 1021 }
1022 //qDebug("IMAPwrapper::deleteMail 2"); 1022 //qDebug("IMAPwrapper::deleteMail 2");
1023 1023
1024} 1024}
1025 1025
1026void IMAPwrapper::answeredMail(const RecMailP&mail) 1026void IMAPwrapper::answeredMail(const RecMailP&mail)
1027{ 1027{
1028 mailimap_flag_list*flist; 1028 mailimap_flag_list*flist;
1029 mailimap_set *set; 1029 mailimap_set *set;
1030 mailimap_store_att_flags * store_flags; 1030 mailimap_store_att_flags * store_flags;
1031 int err; 1031 int err;
1032 login(); 1032 login();
1033 if (!m_imap) { 1033 if (!m_imap) {
1034 return; 1034 return;
1035 } 1035 }
1036 err = selectMbox(mail->getMbox()); 1036 err = selectMbox(mail->getMbox());
1037 if ( err != MAILIMAP_NO_ERROR ) { 1037 if ( err != MAILIMAP_NO_ERROR ) {
1038 return; 1038 return;
1039 } 1039 }
1040 flist = mailimap_flag_list_new_empty(); 1040 flist = mailimap_flag_list_new_empty();
1041 mailimap_flag_list_add(flist,mailimap_flag_new_answered()); 1041 mailimap_flag_list_add(flist,mailimap_flag_new_answered());
1042 store_flags = mailimap_store_att_flags_new_add_flags(flist); 1042 store_flags = mailimap_store_att_flags_new_add_flags(flist);
1043 set = mailimap_set_new_single(mail->getNumber()); 1043 set = mailimap_set_new_single(mail->getNumber());
1044 err = mailimap_store(m_imap,set,store_flags); 1044 err = mailimap_store(m_imap,set,store_flags);
1045 mailimap_set_free( set ); 1045 mailimap_set_free( set );
1046 mailimap_store_att_flags_free(store_flags); 1046 mailimap_store_att_flags_free(store_flags);
1047 1047
1048 if (err != MAILIMAP_NO_ERROR) { 1048 if (err != MAILIMAP_NO_ERROR) {
1049 // odebug << "error marking mail: " << m_imap->imap_response << "" << oendl; 1049 // odebug << "error marking mail: " << m_imap->imap_response << "" << oendl;
1050 return; 1050 return;
1051 } 1051 }
1052} 1052}
1053 1053
1054QString IMAPwrapper::fetchTextPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call,const QString&enc) 1054QString IMAPwrapper::fetchTextPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call,const QString&enc)
1055{ 1055{
1056 QString body(""); 1056 QString body("");
1057 encodedString*res = fetchRawPart(mail,path,internal_call); 1057 encodedString*res = fetchRawPart(mail,path,internal_call);
1058 encodedString*r = decode_String(res,enc); 1058 encodedString*r = decode_String(res,enc);
1059 delete res; 1059 delete res;
1060 if (r) { 1060 if (r) {
1061 if (r->Length()>0) { 1061 if (r->Length()>0) {
1062 body = r->Content(); 1062 body = r->Content();
1063 } 1063 }
1064 delete r; 1064 delete r;
1065 } 1065 }
1066 return body; 1066 return body;
1067} 1067}
1068 1068
1069QString IMAPwrapper::fetchTextPart(const RecMailP&mail,const RecPartP&part) 1069QString IMAPwrapper::fetchTextPart(const RecMailP&mail,const RecPartP&part)
1070{ 1070{
1071 return fetchTextPart(mail,part->Positionlist(),false,part->Encoding()); 1071 return fetchTextPart(mail,part->Positionlist(),false,part->Encoding());
1072} 1072}
1073 1073
1074encodedString* IMAPwrapper::fetchDecodedPart(const RecMailP&mail,const RecPartP&part) 1074encodedString* IMAPwrapper::fetchDecodedPart(const RecMailP&mail,const RecPartP&part)
1075{ 1075{
1076 encodedString*res = fetchRawPart(mail,part->Positionlist(),false); 1076 encodedString*res = fetchRawPart(mail,part->Positionlist(),false);
1077 encodedString*r = decode_String(res,part->Encoding()); 1077 encodedString*r = decode_String(res,part->Encoding());
1078 delete res; 1078 delete res;
1079 return r; 1079 return r;
1080} 1080}
1081 1081
1082encodedString* IMAPwrapper::fetchRawPart(const RecMailP&mail,const RecPartP&part) 1082encodedString* IMAPwrapper::fetchRawPart(const RecMailP&mail,const RecPartP&part)
1083{ 1083{
1084 return fetchRawPart(mail,part->Positionlist(),false); 1084 return fetchRawPart(mail,part->Positionlist(),false);
1085} 1085}
1086 1086
1087int IMAPwrapper::deleteAllMail(const FolderP&folder) 1087int IMAPwrapper::deleteAllMail(const FolderP&folder)
1088{ 1088{
1089 login(); 1089 login();
1090 if (!m_imap) { 1090 if (!m_imap) {
1091 return 0; 1091 return 0;
1092 } 1092 }
1093 mailimap_flag_list*flist; 1093 mailimap_flag_list*flist;
1094 mailimap_set *set; 1094 mailimap_set *set;
1095 mailimap_store_att_flags * store_flags; 1095 mailimap_store_att_flags * store_flags;
1096 int err = selectMbox(folder->getName()); 1096 int err = selectMbox(folder->getName());
1097 if ( err != MAILIMAP_NO_ERROR ) { 1097 if ( err != MAILIMAP_NO_ERROR ) {
1098 return 0; 1098 return 0;
1099 } 1099 }
1100 1100
1101 int last = m_imap->imap_selection_info->sel_exists; 1101 int last = m_imap->imap_selection_info->sel_exists;
1102 if (last == 0) { 1102 if (last == 0) {
1103 Global::statusMessage(tr("Mailbox has no mails!")); 1103 Global::statusMessage(tr("Mailbox has no mails!"));
1104 return 0; 1104 return 0;
1105 } 1105 }
1106 flist = mailimap_flag_list_new_empty(); 1106 flist = mailimap_flag_list_new_empty();
1107 mailimap_flag_list_add(flist,mailimap_flag_new_deleted()); 1107 mailimap_flag_list_add(flist,mailimap_flag_new_deleted());
1108 store_flags = mailimap_store_att_flags_new_set_flags(flist); 1108 store_flags = mailimap_store_att_flags_new_set_flags(flist);
1109 set = mailimap_set_new_interval( 1, last ); 1109 set = mailimap_set_new_interval( 1, last );
1110 err = mailimap_store(m_imap,set,store_flags); 1110 err = mailimap_store(m_imap,set,store_flags);
1111 mailimap_set_free( set ); 1111 mailimap_set_free( set );
1112 mailimap_store_att_flags_free(store_flags); 1112 mailimap_store_att_flags_free(store_flags);
1113 if (err != MAILIMAP_NO_ERROR) { 1113 if (err != MAILIMAP_NO_ERROR) {
1114 Global::statusMessage(tr("error deleting mail: %s").arg(m_imap->imap_response)); 1114 Global::statusMessage(tr("error deleting mail: %s").arg(m_imap->imap_response));
1115 return 0; 1115 return 0;
1116 } 1116 }
1117 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl; 1117 // odebug << "deleting mail: " << m_imap->imap_response << "" << oendl;
1118 /* should we realy do that at this moment? */ 1118 /* should we realy do that at this moment? */
1119 err = mailimap_expunge(m_imap); 1119 err = mailimap_expunge(m_imap);
1120 if (err != MAILIMAP_NO_ERROR) { 1120 if (err != MAILIMAP_NO_ERROR) {
1121 Global::statusMessage(tr("error deleting mail: %s").arg(m_imap->imap_response)); 1121 Global::statusMessage(tr("error deleting mail: %s").arg(m_imap->imap_response));
1122 return 0; 1122 return 0;
1123 } 1123 }
1124 // odebug << "Delete successfull " << m_imap->imap_response << "" << oendl; 1124 // odebug << "Delete successfull " << m_imap->imap_response << "" << oendl;
1125 return 1; 1125 return 1;
1126} 1126}
1127 1127
1128int IMAPwrapper::createMbox(const QString&folder,const FolderP&parentfolder,const QString& delemiter,bool getsubfolder) 1128int IMAPwrapper::createMbox(const QString&folder,const FolderP&parentfolder,const QString& delemiter,bool getsubfolder)
1129{ 1129{
1130 if (folder.length()==0) return 0; 1130 if (folder.length()==0) return 0;
1131 login(); 1131 login();
1132 if (!m_imap) {return 0;} 1132 if (!m_imap) {return 0;}
1133 QString pre = account->getPrefix(); 1133 QString pre = account->getPrefix();
1134 if (delemiter.length()>0 && pre.findRev(delemiter)!=pre.length()-1) { 1134 if (delemiter.length()>0 && pre.findRev(delemiter)!=pre.length()-1) {
1135 pre+=delemiter; 1135 pre+=delemiter;
1136 } 1136 }
1137 if (parentfolder) { 1137 if (parentfolder) {
1138 pre += parentfolder->getDisplayName()+delemiter; 1138 pre += parentfolder->getDisplayName()+delemiter;
1139 } 1139 }
1140 pre+=folder; 1140 pre+=folder;
1141 if (getsubfolder) { 1141 if (getsubfolder) {
1142 if (delemiter.length()>0) { 1142 if (delemiter.length()>0) {
1143 pre+=delemiter; 1143 pre+=delemiter;
1144 } else { 1144 } else {
1145 Global::statusMessage(tr("Cannot create folder %1 for holding subfolders").arg(pre)); 1145 Global::statusMessage(tr("Cannot create folder %1 for holding subfolders").arg(pre));
1146 return 0; 1146 return 0;
1147 } 1147 }
1148 } 1148 }
1149 // odebug << "Creating " << pre.latin1() << "" << oendl; 1149 // odebug << "Creating " << pre.latin1() << "" << oendl;
1150 int res = mailimap_create(m_imap,pre.latin1()); 1150 int res = mailimap_create(m_imap,pre.latin1());
1151 if (res != MAILIMAP_NO_ERROR) { 1151 if (res != MAILIMAP_NO_ERROR) {
1152 Global::statusMessage(tr("%1").arg(m_imap->imap_response)); 1152 Global::statusMessage(tr("%1").arg(m_imap->imap_response));
1153 return 0; 1153 return 0;
1154 } 1154 }
1155 return 1; 1155 return 1;
1156} 1156}
1157 1157
1158int IMAPwrapper::deleteMbox(const FolderP&folder) 1158int IMAPwrapper::deleteMbox(const FolderP&folder)
1159{ 1159{
1160 if (!folder) return 0; 1160 if (!folder) return 0;
1161 login(); 1161 login();
1162 if (!m_imap) {return 0;} 1162 if (!m_imap) {return 0;}
1163 int res = mailimap_delete(m_imap,folder->getName()); 1163 int res = mailimap_delete(m_imap,folder->getName());
1164 if (res != MAILIMAP_NO_ERROR) { 1164 if (res != MAILIMAP_NO_ERROR) {
1165 Global::statusMessage(tr("%1").arg(m_imap->imap_response)); 1165 Global::statusMessage(tr("%1").arg(m_imap->imap_response));
1166 return 0; 1166 return 0;
1167 } 1167 }
1168 return 1; 1168 return 1;
1169} 1169}
1170 1170
1171void IMAPwrapper::statusFolder(folderStat&target_stat,const QString & mailbox) 1171void IMAPwrapper::statusFolder(folderStat&target_stat,const QString & mailbox)
1172{ 1172{
1173 mailimap_status_att_list * att_list =0; 1173 mailimap_status_att_list * att_list =0;
1174 mailimap_mailbox_data_status * status=0; 1174 mailimap_mailbox_data_status * status=0;
1175 clistiter * cur = 0; 1175 clistiter * cur = 0;
1176 int r = 0; 1176 int r = 0;
1177 target_stat.message_count = 0; 1177 target_stat.message_count = 0;
1178 target_stat.message_unseen = 0; 1178 target_stat.message_unseen = 0;
1179 target_stat.message_recent = 0; 1179 target_stat.message_recent = 0;
1180 login(); 1180 login();
1181 if (!m_imap) { 1181 if (!m_imap) {
1182 return; 1182 return;
1183 } 1183 }
1184 att_list = mailimap_status_att_list_new_empty(); 1184 att_list = mailimap_status_att_list_new_empty();
1185 if (!att_list) return; 1185 if (!att_list) return;
1186 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_MESSAGES); 1186 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_MESSAGES);
1187 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_RECENT); 1187 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_RECENT);
1188 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_UNSEEN); 1188 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_UNSEEN);
1189 r = mailimap_status(m_imap, mailbox.latin1(), att_list, &status); 1189 r = mailimap_status(m_imap, mailbox.latin1(), att_list, &status);
1190 if (r==MAILIMAP_NO_ERROR&&status->st_info_list!=0) { 1190 if (r==MAILIMAP_NO_ERROR&&status->st_info_list!=0) {
1191 for (cur = clist_begin(status->st_info_list); 1191 for (cur = clist_begin(status->st_info_list);
1192 cur != NULL ; cur = clist_next(cur)) { 1192 cur != NULL ; cur = clist_next(cur)) {
1193 mailimap_status_info * status_info; 1193 mailimap_status_info * status_info;
1194 status_info = (mailimap_status_info *)clist_content(cur); 1194 status_info = (mailimap_status_info *)clist_content(cur);
1195 switch (status_info->st_att) { 1195 switch (status_info->st_att) {
1196 case MAILIMAP_STATUS_ATT_MESSAGES: 1196 case MAILIMAP_STATUS_ATT_MESSAGES:
1197 target_stat.message_count = status_info->st_value; 1197 target_stat.message_count = status_info->st_value;
1198 break; 1198 break;
1199 case MAILIMAP_STATUS_ATT_RECENT: 1199 case MAILIMAP_STATUS_ATT_RECENT:
1200 target_stat.message_recent = status_info->st_value; 1200 target_stat.message_recent = status_info->st_value;
1201 break; 1201 break;
1202 case MAILIMAP_STATUS_ATT_UNSEEN: 1202 case MAILIMAP_STATUS_ATT_UNSEEN:
1203 target_stat.message_unseen = status_info->st_value; 1203 target_stat.message_unseen = status_info->st_value;
1204 break; 1204 break;
1205 } 1205 }
1206 } 1206 }
1207 } else { 1207 } else {
1208 // odebug << "Error retrieving status" << oendl; 1208 // odebug << "Error retrieving status" << oendl;
1209 } 1209 }
1210 if (status) mailimap_mailbox_data_status_free(status); 1210 if (status) mailimap_mailbox_data_status_free(status);
1211 if (att_list) mailimap_status_att_list_free(att_list); 1211 if (att_list) mailimap_status_att_list_free(att_list);
1212} 1212}
1213 1213
1214void IMAPwrapper::storeMessage(const char*msg,size_t length, const QString&folder) 1214void IMAPwrapper::storeMessage(const char*msg,size_t length, const QString&folder)
1215{ 1215{
1216 login(); 1216 login();
1217 if (!m_imap) return; 1217 if (!m_imap) return;
1218 if (!msg) return; 1218 if (!msg) return;
1219 int r = mailimap_append(m_imap,(char*)folder.latin1(),0,0,msg,length); 1219 int r = mailimap_append(m_imap,(char*)folder.latin1(),0,0,msg,length);
1220 if (r != MAILIMAP_NO_ERROR) { 1220 if (r != MAILIMAP_NO_ERROR) {
1221 Global::statusMessage("Error storing mail!"); 1221 Global::statusMessage("Error storing mail!");
1222 } 1222 }
1223} 1223}
1224 1224
1225MAILLIB::ATYPE IMAPwrapper::getType()const 1225MAILLIB::ATYPE IMAPwrapper::getType()const
1226{ 1226{
1227 return account->getType(); 1227 return account->getType();
1228} 1228}
1229 1229
1230const QString&IMAPwrapper::getName()const 1230const QString&IMAPwrapper::getName()const
1231{ 1231{
1232 // odebug << "Get name: " << account->getAccountName().latin1() << "" << oendl; 1232 // odebug << "Get name: " << account->getAccountName().latin1() << "" << oendl;
1233 return account->getAccountName(); 1233 return account->getAccountName();
1234} 1234}
1235 1235
1236encodedString* IMAPwrapper::fetchRawBody(const RecMailP&mail) 1236encodedString* IMAPwrapper::fetchRawBody(const RecMailP&mail)
1237{ 1237{
1238 // dummy 1238 // dummy
1239 QValueList<int> path; 1239 QValueList<int> path;
1240 return fetchRawPart(mail,path,false); 1240 return fetchRawPart(mail,path,false);
1241} 1241}
1242 1242
1243void IMAPwrapper::mvcpAllMails(const FolderP&fromFolder, 1243void IMAPwrapper::mvcpAllMails(const FolderP&fromFolder,
1244 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit, int maxSizeInKb) 1244 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit, int maxSizeInKb)
1245{ 1245{
1246 if (targetWrapper != this || maxSizeInKb > 0 ) { 1246 if (targetWrapper != this || maxSizeInKb > 0 ) {
1247 mMax = 0; 1247 mMax = 0;
1248 progress( tr("Copy")); 1248 progress( tr("Copy"));
1249 AbstractMail::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit, maxSizeInKb); 1249 AbstractMail::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit, maxSizeInKb);
1250 qDebug("IMAPwrapper::mvcpAllMails::Using generic"); 1250 //qDebug("IMAPwrapper::mvcpAllMails::Using generic");
1251 // odebug << "Using generic" << oendl; 1251 // odebug << "Using generic" << oendl;
1252 return; 1252 return;
1253 } 1253 }
1254 mailimap_set *set = 0; 1254 mailimap_set *set = 0;
1255 login(); 1255 login();
1256 if (!m_imap) { 1256 if (!m_imap) {
1257 return; 1257 return;
1258 } 1258 }
1259 int err = selectMbox(fromFolder->getName()); 1259 int err = selectMbox(fromFolder->getName());
1260 if ( err != MAILIMAP_NO_ERROR ) { 1260 if ( err != MAILIMAP_NO_ERROR ) {
1261 return; 1261 return;
1262 } 1262 }
1263 Global::statusMessage( tr("Copying mails on server...") ); 1263 Global::statusMessage( tr("Copying mails on server...") );
1264 int last = m_imap->imap_selection_info->sel_exists; 1264 int last = m_imap->imap_selection_info->sel_exists;
1265 set = mailimap_set_new_interval( 1, last ); 1265 set = mailimap_set_new_interval( 1, last );
1266 err = mailimap_copy(m_imap,set,targetFolder.latin1()); 1266 err = mailimap_copy(m_imap,set,targetFolder.latin1());
1267 mailimap_set_free( set ); 1267 mailimap_set_free( set );
1268 if ( err != MAILIMAP_NO_ERROR ) { 1268 if ( err != MAILIMAP_NO_ERROR ) {
1269 QString error_msg = tr("Error copy mails: %1").arg(m_imap->imap_response); 1269 QString error_msg = tr("Error copy mails: %1").arg(m_imap->imap_response);
1270 Global::statusMessage(error_msg); 1270 Global::statusMessage(error_msg);
1271 // odebug << error_msg << oendl; 1271 // odebug << error_msg << oendl;
1272 return; 1272 return;
1273 } 1273 }
1274 if (moveit) { 1274 if (moveit) {
1275 deleteAllMail(fromFolder); 1275 deleteAllMail(fromFolder);
1276 } 1276 }
1277} 1277}
1278 1278
1279void IMAPwrapper::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 1279void IMAPwrapper::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
1280{ 1280{
1281 if (targetWrapper != this) { 1281 if (targetWrapper != this) {
1282 // odebug << "Using generic" << oendl; 1282 // odebug << "Using generic" << oendl;
1283 AbstractMail::mvcpMail(mail,targetFolder,targetWrapper,moveit); 1283 AbstractMail::mvcpMail(mail,targetFolder,targetWrapper,moveit);
1284 return; 1284 return;
1285 } 1285 }
1286 mailimap_set *set = 0; 1286 mailimap_set *set = 0;
1287 login(); 1287 login();
1288 if (!m_imap) { 1288 if (!m_imap) {
1289 return; 1289 return;
1290 } 1290 }
1291 int err = selectMbox(mail->getMbox()); 1291 int err = selectMbox(mail->getMbox());
1292 if ( err != MAILIMAP_NO_ERROR ) { 1292 if ( err != MAILIMAP_NO_ERROR ) {
1293 return; 1293 return;
1294 } 1294 }
1295 set = mailimap_set_new_single(mail->getNumber()); 1295 set = mailimap_set_new_single(mail->getNumber());
1296 err = mailimap_copy(m_imap,set,targetFolder.latin1()); 1296 err = mailimap_copy(m_imap,set,targetFolder.latin1());
1297 mailimap_set_free( set ); 1297 mailimap_set_free( set );
1298 if ( err != MAILIMAP_NO_ERROR ) { 1298 if ( err != MAILIMAP_NO_ERROR ) {
1299 QString error_msg = tr("error copy mail: %1").arg(m_imap->imap_response); 1299 QString error_msg = tr("error copy mail: %1").arg(m_imap->imap_response);
1300 Global::statusMessage(error_msg); 1300 Global::statusMessage(error_msg);
1301 // odebug << error_msg << oendl; 1301 // odebug << error_msg << oendl;
1302 return; 1302 return;
1303 } 1303 }
1304 if (moveit) { 1304 if (moveit) {
1305 deleteMail(mail); 1305 deleteMail(mail);
1306 } 1306 }
1307} 1307}
diff --git a/kmicromail/libmailwrapper/mhwrapper.cpp b/kmicromail/libmailwrapper/mhwrapper.cpp
index 962dac0..641d4d9 100644
--- a/kmicromail/libmailwrapper/mhwrapper.cpp
+++ b/kmicromail/libmailwrapper/mhwrapper.cpp
@@ -1,448 +1,446 @@
1// CHANGED 2004-09-31 Lutz Rogowski 1// CHANGED 2004-09-31 Lutz Rogowski
2#include "mhwrapper.h" 2#include "mhwrapper.h"
3#include "mailtypes.h" 3#include "mailtypes.h"
4#include "mailwrapper.h" 4#include "mailwrapper.h"
5#include <libetpan/libetpan.h> 5#include <libetpan/libetpan.h>
6#include <qdir.h> 6#include <qdir.h>
7#include <qmessagebox.h> 7#include <qmessagebox.h>
8#include <stdlib.h> 8#include <stdlib.h>
9#include <qpe/global.h> 9#include <qpe/global.h>
10#include <oprocess.h> 10#include <oprocess.h>
11//#include <opie2/odebug.h> 11//#include <opie2/odebug.h>
12 12
13using namespace Opie::Core; 13using namespace Opie::Core;
14MHwrapper::MHwrapper(const QString & mbox_dir,const QString&mbox_name) 14MHwrapper::MHwrapper(const QString & mbox_dir,const QString&mbox_name)
15 : Genericwrapper(),MHPath(mbox_dir),MHName(mbox_name) 15 : Genericwrapper(),MHPath(mbox_dir),MHName(mbox_name)
16{ 16{
17 if (MHPath.length()>0) { 17 if (MHPath.length()>0) {
18 if (MHPath[MHPath.length()-1]=='/') { 18 if (MHPath[MHPath.length()-1]=='/') {
19 MHPath=MHPath.left(MHPath.length()-1); 19 MHPath=MHPath.left(MHPath.length()-1);
20 } 20 }
21 //odebug << MHPath << oendl; 21 //odebug << MHPath << oendl;
22 QDir dir(MHPath); 22 QDir dir(MHPath);
23 if (!dir.exists()) { 23 if (!dir.exists()) {
24 dir.mkdir(MHPath); 24 dir.mkdir(MHPath);
25 } 25 }
26 init_storage(); 26 init_storage();
27 } 27 }
28} 28}
29 29
30void MHwrapper::init_storage() 30void MHwrapper::init_storage()
31{ 31{
32 int r; 32 int r;
33 QString pre = MHPath; 33 QString pre = MHPath;
34 if (!m_storage) { 34 if (!m_storage) {
35 m_storage = mailstorage_new(NULL); 35 m_storage = mailstorage_new(NULL);
36 r = mh_mailstorage_init(m_storage,(char*)pre.latin1(),0,0,0); 36 r = mh_mailstorage_init(m_storage,(char*)pre.latin1(),0,0,0);
37 if (r != MAIL_NO_ERROR) { 37 if (r != MAIL_NO_ERROR) {
38 qDebug(" error init storage "); 38 qDebug(" error init storage ");
39 mailstorage_free(m_storage); 39 mailstorage_free(m_storage);
40 m_storage = 0; 40 m_storage = 0;
41 return; 41 return;
42 } 42 }
43 } 43 }
44 r = mailstorage_connect(m_storage); 44 r = mailstorage_connect(m_storage);
45 if (r!=MAIL_NO_ERROR) { 45 if (r!=MAIL_NO_ERROR) {
46 qDebug("error connecting storage "); 46 qDebug("error connecting storage ");
47 mailstorage_free(m_storage); 47 mailstorage_free(m_storage);
48 m_storage = 0; 48 m_storage = 0;
49 } 49 }
50} 50}
51 51
52void MHwrapper::clean_storage() 52void MHwrapper::clean_storage()
53{ 53{
54 if (m_storage) { 54 if (m_storage) {
55 mailstorage_disconnect(m_storage); 55 mailstorage_disconnect(m_storage);
56 mailstorage_free(m_storage); 56 mailstorage_free(m_storage);
57 m_storage = 0; 57 m_storage = 0;
58 } 58 }
59} 59}
60 60
61MHwrapper::~MHwrapper() 61MHwrapper::~MHwrapper()
62{ 62{
63 clean_storage(); 63 clean_storage();
64} 64}
65 65
66void MHwrapper::listMessages(const QString & mailbox, QValueList<Opie::Core::OSmartPointer<RecMail> > &target, int maxSizeInKb ) 66void MHwrapper::listMessages(const QString & mailbox, QValueList<Opie::Core::OSmartPointer<RecMail> > &target, int maxSizeInKb )
67{ 67{
68 qDebug("MHwrapper::listMessages ");
69 init_storage(); 68 init_storage();
70 if (!m_storage) { 69 if (!m_storage) {
71 return; 70 return;
72 } 71 }
73 QString f = buildPath(mailbox); 72 QString f = buildPath(mailbox);
74 int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1()); 73 int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1());
75 if (r!=MAIL_NO_ERROR) { 74 if (r!=MAIL_NO_ERROR) {
76 qDebug("listMessages: error selecting folder! "); 75 qDebug("listMessages: error selecting folder! ");
77 return; 76 return;
78 } 77 }
79 parseList(target,m_storage->sto_session,f, false, maxSizeInKb ); 78 parseList(target,m_storage->sto_session,f, false, maxSizeInKb );
80 Global::statusMessage(tr("Mailbox has %1 mail(s)").arg(target.count())); 79 Global::statusMessage(tr("Mailbox has %1 mail(s)").arg(target.count()));
81} 80}
82 81
83QValueList<Opie::Core::OSmartPointer<Folder> >* MHwrapper::listFolders() 82QValueList<Opie::Core::OSmartPointer<Folder> >* MHwrapper::listFolders()
84{ 83{
85 QValueList<Opie::Core::OSmartPointer<Folder> >* folders = new QValueList<Opie::Core::OSmartPointer<Folder> >(); 84 QValueList<Opie::Core::OSmartPointer<Folder> >* folders = new QValueList<Opie::Core::OSmartPointer<Folder> >();
86 /* this is needed! */ 85 /* this is needed! */
87 if (m_storage) mailstorage_disconnect(m_storage); 86 if (m_storage) mailstorage_disconnect(m_storage);
88 init_storage(); 87 init_storage();
89 if (!m_storage) { 88 if (!m_storage) {
90 return folders; 89 return folders;
91 } 90 }
92 mail_list*flist = 0; 91 mail_list*flist = 0;
93 clistcell*current=0; 92 clistcell*current=0;
94 int r = mailsession_list_folders(m_storage->sto_session,NULL,&flist); 93 int r = mailsession_list_folders(m_storage->sto_session,NULL,&flist);
95 if (r != MAIL_NO_ERROR || !flist) { 94 if (r != MAIL_NO_ERROR || !flist) {
96 qDebug("error getting folder list "); 95 qDebug("error getting folder list ");
97 return folders; 96 return folders;
98 } 97 }
99 for (current=clist_begin(flist->mb_list);current!=0;current=clist_next(current)) { 98 for (current=clist_begin(flist->mb_list);current!=0;current=clist_next(current)) {
100 QString t = (char*)current->data; 99 QString t = (char*)current->data;
101 t.replace(0,MHPath.length(),""); 100 t.replace(0,MHPath.length(),"");
102 folders->append(new MHFolder(t,MHPath)); 101 folders->append(new MHFolder(t,MHPath));
103 } 102 }
104 mail_list_free(flist); 103 mail_list_free(flist);
105 return folders; 104 return folders;
106} 105}
107 106
108void MHwrapper::deleteMail(const RecMailP&mail) 107void MHwrapper::deleteMail(const RecMailP&mail)
109{ 108{
110 init_storage(); 109 init_storage();
111 if (!m_storage) { 110 if (!m_storage) {
112 return; 111 return;
113 } 112 }
114 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail->getMbox().latin1()); 113 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail->getMbox().latin1());
115 if (r!=MAIL_NO_ERROR) { 114 if (r!=MAIL_NO_ERROR) {
116 qDebug("error selecting folder! "); 115 qDebug("error selecting folder! ");
117 return; 116 return;
118 } 117 }
119 r = mailsession_remove_message(m_storage->sto_session,mail->getNumber()); 118 r = mailsession_remove_message(m_storage->sto_session,mail->getNumber());
120 if (r != MAIL_NO_ERROR) { 119 if (r != MAIL_NO_ERROR) {
121 qDebug("error deleting mail "); 120 qDebug("error deleting mail ");
122 } 121 }
123} 122}
124 123
125void MHwrapper::answeredMail(const RecMailP&) 124void MHwrapper::answeredMail(const RecMailP&)
126{ 125{
127} 126}
128 127
129RecBodyP MHwrapper::fetchBody( const RecMailP &mail ) 128RecBodyP MHwrapper::fetchBody( const RecMailP &mail )
130{ 129{
131 RecBodyP body = new RecBody(); 130 RecBodyP body = new RecBody();
132 init_storage(); 131 init_storage();
133 if (!m_storage) { 132 if (!m_storage) {
134 return body; 133 return body;
135 } 134 }
136 mailmessage * msg; 135 mailmessage * msg;
137 char*data=0; 136 char*data=0;
138 137
139 /* mail should hold the complete path! */ 138 /* mail should hold the complete path! */
140 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail->getMbox().latin1()); 139 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail->getMbox().latin1());
141 if (r != MAIL_NO_ERROR) { 140 if (r != MAIL_NO_ERROR) {
142 return body; 141 return body;
143 } 142 }
144 r = mailsession_get_message(m_storage->sto_session, mail->getNumber(), &msg); 143 r = mailsession_get_message(m_storage->sto_session, mail->getNumber(), &msg);
145 if (r != MAIL_NO_ERROR) { 144 if (r != MAIL_NO_ERROR) {
146 qDebug("Error fetching mail "); 145 qDebug("Error fetching mail ");
147 146
148 return body; 147 return body;
149 } 148 }
150 body = parseMail(msg); 149 body = parseMail(msg);
151 mailmessage_fetch_result_free(msg,data); 150 mailmessage_fetch_result_free(msg,data);
152 return body; 151 return body;
153} 152}
154 153
155void MHwrapper::mbox_progress( size_t current, size_t maximum ) 154void MHwrapper::mbox_progress( size_t current, size_t maximum )
156{ 155{
157 qDebug("MBox Progress %d of %d",current,maximum ); 156 qDebug("MBox Progress %d of %d",current,maximum );
158 //odebug << "MH " << current << " von " << maximum << "" << oendl; 157 //odebug << "MH " << current << " von " << maximum << "" << oendl;
159} 158}
160 159
161QString MHwrapper::buildPath(const QString&p) 160QString MHwrapper::buildPath(const QString&p)
162{ 161{
163 QString f=""; 162 QString f="";
164 if (p.length()==0||p=="/") 163 if (p.length()==0||p=="/")
165 return MHPath; 164 return MHPath;
166 if (!p.startsWith(MHPath)) { 165 if (!p.startsWith(MHPath)) {
167 f+=MHPath; 166 f+=MHPath;
168 } 167 }
169 if (!p.startsWith("/")) { 168 if (!p.startsWith("/")) {
170 f+="/"; 169 f+="/";
171 } 170 }
172 f+=p; 171 f+=p;
173 return f; 172 return f;
174} 173}
175 174
176int MHwrapper::createMbox(const QString&folder,const FolderP&pfolder,const QString&,bool ) 175int MHwrapper::createMbox(const QString&folder,const FolderP&pfolder,const QString&,bool )
177{ 176{
178 init_storage(); 177 init_storage();
179 if (!m_storage) { 178 if (!m_storage) {
180 return 0; 179 return 0;
181 } 180 }
182 QString f; 181 QString f;
183 if (!pfolder) { 182 if (!pfolder) {
184 // toplevel folder 183 // toplevel folder
185 f = buildPath(folder); 184 f = buildPath(folder);
186 } else { 185 } else {
187 f = pfolder->getName(); 186 f = pfolder->getName();
188 f+="/"; 187 f+="/";
189 f+=folder; 188 f+=folder;
190 } 189 }
191 190
192 int r = mailsession_create_folder(m_storage->sto_session,(char*)f.latin1()); 191 int r = mailsession_create_folder(m_storage->sto_session,(char*)f.latin1());
193 if (r != MAIL_NO_ERROR) { 192 if (r != MAIL_NO_ERROR) {
194 qDebug("error creating folder "); 193 qDebug("error creating folder ");
195 return 0; 194 return 0;
196 } 195 }
197 qDebug("Folder created ");
198 return 1; 196 return 1;
199} 197}
200 198
201void MHwrapper::storeMessage(const char*msg,size_t length, const QString&Folder) 199void MHwrapper::storeMessage(const char*msg,size_t length, const QString&Folder)
202{ 200{
203 init_storage(); 201 init_storage();
204 if (!m_storage) { 202 if (!m_storage) {
205 return; 203 return;
206 } 204 }
207 QString f = buildPath(Folder); 205 QString f = buildPath(Folder);
208 int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1()); 206 int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1());
209 if (r!=MAIL_NO_ERROR) { 207 if (r!=MAIL_NO_ERROR) {
210 qDebug("error selecting folder! "); 208 qDebug("error selecting folder! ");
211 return; 209 return;
212 } 210 }
213 r = mailsession_append_message(m_storage->sto_session,(char*)msg,length); 211 r = mailsession_append_message(m_storage->sto_session,(char*)msg,length);
214 if (r!=MAIL_NO_ERROR) { 212 if (r!=MAIL_NO_ERROR) {
215 qDebug("error storing mail "); 213 qDebug("error storing mail ");
216 } 214 }
217 return; 215 return;
218} 216}
219 217
220encodedString* MHwrapper::fetchRawBody(const RecMailP&mail) 218encodedString* MHwrapper::fetchRawBody(const RecMailP&mail)
221{ 219{
222 encodedString*result = 0; 220 encodedString*result = 0;
223 init_storage(); 221 init_storage();
224 if (!m_storage) { 222 if (!m_storage) {
225 return result; 223 return result;
226 } 224 }
227 mailmessage * msg = 0; 225 mailmessage * msg = 0;
228 char*data=0; 226 char*data=0;
229 size_t size; 227 size_t size;
230 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail->getMbox().latin1()); 228 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail->getMbox().latin1());
231 if (r!=MAIL_NO_ERROR) { 229 if (r!=MAIL_NO_ERROR) {
232 qDebug("error selecting folder! "); 230 qDebug("error selecting folder! ");
233 return result; 231 return result;
234 } 232 }
235 r = mailsession_get_message(m_storage->sto_session, mail->getNumber(), &msg); 233 r = mailsession_get_message(m_storage->sto_session, mail->getNumber(), &msg);
236 if (r != MAIL_NO_ERROR) { 234 if (r != MAIL_NO_ERROR) {
237 Global::statusMessage(tr("Error fetching mail %i").arg(mail->getNumber())); 235 Global::statusMessage(tr("Error fetching mail %i").arg(mail->getNumber()));
238 return 0; 236 return 0;
239 } 237 }
240 r = mailmessage_fetch(msg,&data,&size); 238 r = mailmessage_fetch(msg,&data,&size);
241 if (r != MAIL_NO_ERROR) { 239 if (r != MAIL_NO_ERROR) {
242 Global::statusMessage(tr("Error fetching mail %i").arg(mail->getNumber())); 240 Global::statusMessage(tr("Error fetching mail %i").arg(mail->getNumber()));
243 if (msg) mailmessage_free(msg); 241 if (msg) mailmessage_free(msg);
244 return 0; 242 return 0;
245 } 243 }
246 result = new encodedString(data,size); 244 result = new encodedString(data,size);
247 if (msg) mailmessage_free(msg); 245 if (msg) mailmessage_free(msg);
248 return result; 246 return result;
249} 247}
250 248
251void MHwrapper::deleteMails(const QString & mailbox,const QValueList<RecMailP> &target) 249void MHwrapper::deleteMails(const QString & mailbox,const QValueList<RecMailP> &target)
252{ 250{
253 QString f = buildPath(mailbox); 251 QString f = buildPath(mailbox);
254 int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1()); 252 int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1());
255 if (r!=MAIL_NO_ERROR) { 253 if (r!=MAIL_NO_ERROR) {
256 qDebug("deleteMails: error selecting folder! "); 254 qDebug("deleteMails: error selecting folder! ");
257 return; 255 return;
258 } 256 }
259 QValueList<RecMailP>::ConstIterator it; 257 QValueList<RecMailP>::ConstIterator it;
260 for (it=target.begin(); it!=target.end();++it) { 258 for (it=target.begin(); it!=target.end();++it) {
261 r = mailsession_remove_message(m_storage->sto_session,(*it)->getNumber()); 259 r = mailsession_remove_message(m_storage->sto_session,(*it)->getNumber());
262 if (r != MAIL_NO_ERROR) { 260 if (r != MAIL_NO_ERROR) {
263 qDebug("error deleting mail "); 261 qDebug("error deleting mail ");
264 break; 262 break;
265 } 263 }
266 } 264 }
267} 265}
268 266
269int MHwrapper::deleteAllMail(const FolderP&tfolder) 267int MHwrapper::deleteAllMail(const FolderP&tfolder)
270{ 268{
271 init_storage(); 269 init_storage();
272 if (!m_storage) { 270 if (!m_storage) {
273 return 0; 271 return 0;
274 } 272 }
275 int res = 1; 273 int res = 1;
276 if (!tfolder) return 0; 274 if (!tfolder) return 0;
277 int r = mailsession_select_folder(m_storage->sto_session,(char*)tfolder->getName().latin1()); 275 int r = mailsession_select_folder(m_storage->sto_session,(char*)tfolder->getName().latin1());
278 if (r!=MAIL_NO_ERROR) { 276 if (r!=MAIL_NO_ERROR) {
279 qDebug("error selecting folder! "); 277 qDebug("error selecting folder! ");
280 return 0; 278 return 0;
281 } 279 }
282 mailmessage_list*l=0; 280 mailmessage_list*l=0;
283 r = mailsession_get_messages_list(m_storage->sto_session,&l); 281 r = mailsession_get_messages_list(m_storage->sto_session,&l);
284 if (r != MAIL_NO_ERROR) { 282 if (r != MAIL_NO_ERROR) {
285 qDebug("Error message list "); 283 qDebug("Error message list ");
286 res = 0; 284 res = 0;
287 } 285 }
288 unsigned j = 0; 286 unsigned j = 0;
289 for(unsigned int i = 0 ; l!= 0 && res==1 && i < carray_count(l->msg_tab) ; ++i) { 287 for(unsigned int i = 0 ; l!= 0 && res==1 && i < carray_count(l->msg_tab) ; ++i) {
290 mailmessage * msg; 288 mailmessage * msg;
291 msg = (mailmessage*)carray_get(l->msg_tab, i); 289 msg = (mailmessage*)carray_get(l->msg_tab, i);
292 j = msg->msg_index; 290 j = msg->msg_index;
293 r = mailsession_remove_message(m_storage->sto_session,j); 291 r = mailsession_remove_message(m_storage->sto_session,j);
294 if (r != MAIL_NO_ERROR) { 292 if (r != MAIL_NO_ERROR) {
295 Global::statusMessage(tr("Error deleting mail %1").arg(i+1)); 293 Global::statusMessage(tr("Error deleting mail %1").arg(i+1));
296 res = 0; 294 res = 0;
297 break; 295 break;
298 } 296 }
299 } 297 }
300 if (l) mailmessage_list_free(l); 298 if (l) mailmessage_list_free(l);
301 return res; 299 return res;
302} 300}
303 301
304int MHwrapper::deleteMbox(const FolderP&tfolder) 302int MHwrapper::deleteMbox(const FolderP&tfolder)
305{ 303{
306 init_storage(); 304 init_storage();
307 if (!m_storage) { 305 if (!m_storage) {
308 return 0; 306 return 0;
309 } 307 }
310 if (!tfolder) return 0; 308 if (!tfolder) return 0;
311 if (tfolder->getName()=="/" || tfolder->getName().isEmpty()) return 0; 309 if (tfolder->getName()=="/" || tfolder->getName().isEmpty()) return 0;
312 310
313 int r = mailsession_delete_folder(m_storage->sto_session,(char*)tfolder->getName().latin1()); 311 int r = mailsession_delete_folder(m_storage->sto_session,(char*)tfolder->getName().latin1());
314 312
315 if (r != MAIL_NO_ERROR) { 313 if (r != MAIL_NO_ERROR) {
316 qDebug("error deleting mail box "); 314 qDebug("error deleting mail box ");
317 return 0; 315 return 0;
318 } 316 }
319 QString cmd = "rm -rf "+tfolder->getName(); 317 QString cmd = "rm -rf "+tfolder->getName();
320 QStringList command; 318 QStringList command;
321 command << "/bin/sh"; 319 command << "/bin/sh";
322 command << "-c"; 320 command << "-c";
323 command << cmd.latin1(); 321 command << cmd.latin1();
324 OProcess *process = new OProcess(); 322 OProcess *process = new OProcess();
325 323
326 connect(process, SIGNAL(processExited(Opie::Core::OProcess*)), 324 connect(process, SIGNAL(processExited(Opie::Core::OProcess*)),
327 this, SLOT( processEnded(Opie::Core::OProcess*))); 325 this, SLOT( processEnded(Opie::Core::OProcess*)));
328 connect(process, SIGNAL( receivedStderr(Opie::Core::OProcess*,char*,int)), 326 connect(process, SIGNAL( receivedStderr(Opie::Core::OProcess*,char*,int)),
329 this, SLOT( oprocessStderr(Opie::Core::OProcess*,char*,int))); 327 this, SLOT( oprocessStderr(Opie::Core::OProcess*,char*,int)));
330 328
331 *process << command; 329 *process << command;
332 removeMboxfailed = false; 330 removeMboxfailed = false;
333 if(!process->start(OProcess::Block, OProcess::All) ) { 331 if(!process->start(OProcess::Block, OProcess::All) ) {
334 qDebug("could not start process "); 332 qDebug("could not start process ");
335 return 0; 333 return 0;
336 } 334 }
337 qDebug("mail box deleted "); 335 qDebug("mail box deleted ");
338 return 1; 336 return 1;
339} 337}
340 338
341void MHwrapper::processEnded(OProcess *p) 339void MHwrapper::processEnded(OProcess *p)
342{ 340{
343 if (p) delete p; 341 if (p) delete p;
344} 342}
345 343
346void MHwrapper::oprocessStderr(OProcess*, char *buffer, int ) 344void MHwrapper::oprocessStderr(OProcess*, char *buffer, int )
347{ 345{
348 QString lineStr = buffer; 346 QString lineStr = buffer;
349 QMessageBox::warning( 0, tr("Error"), lineStr ,tr("Ok") ); 347 QMessageBox::warning( 0, tr("Error"), lineStr ,tr("Ok") );
350 removeMboxfailed = true; 348 removeMboxfailed = true;
351} 349}
352 350
353void MHwrapper::statusFolder(folderStat&target_stat,const QString & mailbox) 351void MHwrapper::statusFolder(folderStat&target_stat,const QString & mailbox)
354{ 352{
355 init_storage(); 353 init_storage();
356 if (!m_storage) { 354 if (!m_storage) {
357 return; 355 return;
358 } 356 }
359 target_stat.message_count = 0; 357 target_stat.message_count = 0;
360 target_stat.message_unseen = 0; 358 target_stat.message_unseen = 0;
361 target_stat.message_recent = 0; 359 target_stat.message_recent = 0;
362 QString f = buildPath(mailbox); 360 QString f = buildPath(mailbox);
363 int r = mailsession_status_folder(m_storage->sto_session,(char*)f.latin1(),&target_stat.message_count, 361 int r = mailsession_status_folder(m_storage->sto_session,(char*)f.latin1(),&target_stat.message_count,
364 &target_stat.message_recent,&target_stat.message_unseen); 362 &target_stat.message_recent,&target_stat.message_unseen);
365 if (r != MAIL_NO_ERROR) { 363 if (r != MAIL_NO_ERROR) {
366 Global::statusMessage(tr("Error retrieving status")); 364 Global::statusMessage(tr("Error retrieving status"));
367 } 365 }
368} 366}
369 367
370MAILLIB::ATYPE MHwrapper::getType()const 368MAILLIB::ATYPE MHwrapper::getType()const
371{ 369{
372 return MAILLIB::A_MH; 370 return MAILLIB::A_MH;
373} 371}
374 372
375const QString&MHwrapper::getName()const 373const QString&MHwrapper::getName()const
376{ 374{
377 return MHName; 375 return MHName;
378} 376}
379void MHwrapper::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 377void MHwrapper::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
380{ 378{
381 init_storage(); 379 init_storage();
382 if (!m_storage) { 380 if (!m_storage) {
383 return; 381 return;
384 } 382 }
385 if (targetWrapper != this) { 383 if (targetWrapper != this) {
386 qDebug("Using generic "); 384 qDebug("Using generic ");
387 Genericwrapper::mvcpMail(mail,targetFolder,targetWrapper,moveit); 385 Genericwrapper::mvcpMail(mail,targetFolder,targetWrapper,moveit);
388 return; 386 return;
389 } 387 }
390 qDebug("Using internal routines for move/copy "); 388 qDebug("Using internal routines for move/copy ");
391 QString tf = buildPath(targetFolder); 389 QString tf = buildPath(targetFolder);
392 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail->getMbox().latin1()); 390 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail->getMbox().latin1());
393 if (r != MAIL_NO_ERROR) { 391 if (r != MAIL_NO_ERROR) {
394 qDebug("Error selecting source mailbox "); 392 qDebug("Error selecting source mailbox ");
395 return; 393 return;
396 } 394 }
397 if (moveit) { 395 if (moveit) {
398 r = mailsession_move_message(m_storage->sto_session,mail->getNumber(),(char*)tf.latin1()); 396 r = mailsession_move_message(m_storage->sto_session,mail->getNumber(),(char*)tf.latin1());
399 } else { 397 } else {
400 r = mailsession_copy_message(m_storage->sto_session,mail->getNumber(),(char*)tf.latin1()); 398 r = mailsession_copy_message(m_storage->sto_session,mail->getNumber(),(char*)tf.latin1());
401 } 399 }
402 if (r != MAIL_NO_ERROR) { 400 if (r != MAIL_NO_ERROR) {
403 qDebug("Error copy/moving mail internal "); 401 qDebug("Error copy/moving mail internal ");
404 } 402 }
405} 403}
406 404
407void MHwrapper::mvcpAllMails(const FolderP&fromFolder, 405void MHwrapper::mvcpAllMails(const FolderP&fromFolder,
408 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 406 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
409{ 407{
410 init_storage(); 408 init_storage();
411 if (!m_storage) { 409 if (!m_storage) {
412 return; 410 return;
413 } 411 }
414 if (targetWrapper != this) { 412 if (targetWrapper != this) {
415 qDebug("Using generic "); 413 qDebug("Using generic ");
416 Genericwrapper::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit); 414 Genericwrapper::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit);
417 return; 415 return;
418 } 416 }
419 if (!fromFolder) return; 417 if (!fromFolder) return;
420 int r = mailsession_select_folder(m_storage->sto_session,(char*)fromFolder->getName().latin1()); 418 int r = mailsession_select_folder(m_storage->sto_session,(char*)fromFolder->getName().latin1());
421 if (r!=MAIL_NO_ERROR) { 419 if (r!=MAIL_NO_ERROR) {
422 qDebug("error selecting source folder! "); 420 qDebug("error selecting source folder! ");
423 return; 421 return;
424 } 422 }
425 QString tf = buildPath(targetFolder); 423 QString tf = buildPath(targetFolder);
426 mailmessage_list*l=0; 424 mailmessage_list*l=0;
427 r = mailsession_get_messages_list(m_storage->sto_session,&l); 425 r = mailsession_get_messages_list(m_storage->sto_session,&l);
428 if (r != MAIL_NO_ERROR) { 426 if (r != MAIL_NO_ERROR) {
429 qDebug("Error message list "); 427 qDebug("Error message list ");
430 } 428 }
431 unsigned j = 0; 429 unsigned j = 0;
432 for(unsigned int i = 0 ; l!= 0 && i < carray_count(l->msg_tab) ; ++i) { 430 for(unsigned int i = 0 ; l!= 0 && i < carray_count(l->msg_tab) ; ++i) {
433 mailmessage * msg; 431 mailmessage * msg;
434 msg = (mailmessage*)carray_get(l->msg_tab, i); 432 msg = (mailmessage*)carray_get(l->msg_tab, i);
435 j = msg->msg_index; 433 j = msg->msg_index;
436 if (moveit) { 434 if (moveit) {
437 r = mailsession_move_message(m_storage->sto_session,j,(char*)tf.latin1()); 435 r = mailsession_move_message(m_storage->sto_session,j,(char*)tf.latin1());
438 } else { 436 } else {
439 r = mailsession_copy_message(m_storage->sto_session,j,(char*)tf.latin1()); 437 r = mailsession_copy_message(m_storage->sto_session,j,(char*)tf.latin1());
440 } 438 }
441 if (r != MAIL_NO_ERROR) { 439 if (r != MAIL_NO_ERROR) {
442 qDebug("Error copy/moving mail interna "); 440 qDebug("Error copy/moving mail interna ");
443 441
444 break; 442 break;
445 } 443 }
446 } 444 }
447 if (l) mailmessage_list_free(l); 445 if (l) mailmessage_list_free(l);
448} 446}
diff --git a/kmicromail/libmailwrapper/settings.cpp b/kmicromail/libmailwrapper/settings.cpp
index 766eba0..40b5591 100644
--- a/kmicromail/libmailwrapper/settings.cpp
+++ b/kmicromail/libmailwrapper/settings.cpp
@@ -1,501 +1,499 @@
1#include <stdlib.h> 1#include <stdlib.h>
2#include <qdir.h> 2#include <qdir.h>
3 3
4//#include <opie2/odebug.h> 4//#include <opie2/odebug.h>
5#include <kconfig.h> 5#include <kconfig.h>
6 6
7#include <kstandarddirs.h> 7#include <kstandarddirs.h>
8#include "settings.h" 8#include "settings.h"
9//#include "defines.h" 9//#include "defines.h"
10 10
11#define IMAP_PORT "143" 11#define IMAP_PORT "143"
12#define IMAP_SSL_PORT "993" 12#define IMAP_SSL_PORT "993"
13#define SMTP_PORT "25" 13#define SMTP_PORT "25"
14#define SMTP_SSL_PORT "465" 14#define SMTP_SSL_PORT "465"
15#define POP3_PORT "110" 15#define POP3_PORT "110"
16#define POP3_SSL_PORT "995" 16#define POP3_SSL_PORT "995"
17#define NNTP_PORT "119" 17#define NNTP_PORT "119"
18#define NNTP_SSL_PORT "563" 18#define NNTP_SSL_PORT "563"
19 19
20 20
21Settings::Settings() 21Settings::Settings()
22 : QObject() 22 : QObject()
23{ 23{
24 updateAccounts(); 24 updateAccounts();
25} 25}
26 26
27void Settings::checkDirectory() 27void Settings::checkDirectory()
28{ 28{
29 qDebug("Settings::checkDirectory() ");
30 return; 29 return;
31 locateLocal("data", "kopiemail" ); 30 locateLocal("data", "kopiemail" );
32 /* 31 /*
33 if ( !QDir( (QString) getenv( "HOME" ) + "/Applications/opiemail/" ).exists() ) { 32 if ( !QDir( (QString) getenv( "HOME" ) + "/Applications/opiemail/" ).exists() ) {
34 system( "mkdir -p $HOME/Applications/opiemail" ); 33 system( "mkdir -p $HOME/Applications/opiemail" );
35 qDebug("$HOME/Applications/opiemail created "); 34 qDebug("$HOME/Applications/opiemail created ");
36 } 35 }
37 */ 36 */
38} 37}
39 38
40QList<Account> Settings::getAccounts() 39QList<Account> Settings::getAccounts()
41{ 40{
42 return accounts; 41 return accounts;
43} 42}
44 43
45void Settings::addAccount( Account *account ) 44void Settings::addAccount( Account *account )
46{ 45{
47 accounts.append( account ); 46 accounts.append( account );
48} 47}
49 48
50void Settings::delAccount( Account *account ) 49void Settings::delAccount( Account *account )
51{ 50{
52 accounts.remove( account ); 51 accounts.remove( account );
53 account->remove(); 52 account->remove();
54} 53}
55 54
56void Settings::updateAccounts() 55void Settings::updateAccounts()
57{ 56{
58 accounts.clear(); 57 accounts.clear();
59 QDir dir( locateLocal("data", "kopiemail" ) ); 58 QDir dir( locateLocal("data", "kopiemail" ) );
60 QStringList::Iterator it; 59 QStringList::Iterator it;
61 60
62 QStringList imap = dir.entryList( "imap-*" ); 61 QStringList imap = dir.entryList( "imap-*" );
63 for ( it = imap.begin(); it != imap.end(); it++ ) { 62 for ( it = imap.begin(); it != imap.end(); it++ ) {
64 IMAPaccount *account = new IMAPaccount( (*it).replace(0, 5, "") ); 63 IMAPaccount *account = new IMAPaccount( (*it).replace(0, 5, "") );
65 accounts.append( account ); 64 accounts.append( account );
66 } 65 }
67 66
68 QStringList pop3 = dir.entryList( "pop3-*" ); 67 QStringList pop3 = dir.entryList( "pop3-*" );
69 for ( it = pop3.begin(); it != pop3.end(); it++ ) { 68 for ( it = pop3.begin(); it != pop3.end(); it++ ) {
70 POP3account *account = new POP3account( (*it).replace(0, 5, "") ); 69 POP3account *account = new POP3account( (*it).replace(0, 5, "") );
71 accounts.append( account ); 70 accounts.append( account );
72 } 71 }
73 72
74 QStringList smtp = dir.entryList( "smtp-*" ); 73 QStringList smtp = dir.entryList( "smtp-*" );
75 for ( it = smtp.begin(); it != smtp.end(); it++ ) { 74 for ( it = smtp.begin(); it != smtp.end(); it++ ) {
76 SMTPaccount *account = new SMTPaccount( (*it).replace(0, 5, "") ); 75 SMTPaccount *account = new SMTPaccount( (*it).replace(0, 5, "") );
77 accounts.append( account ); 76 accounts.append( account );
78 } 77 }
79 78
80 QStringList nntp = dir.entryList( "nntp-*" ); 79 QStringList nntp = dir.entryList( "nntp-*" );
81 for ( it = nntp.begin(); it != nntp.end(); it++ ) { 80 for ( it = nntp.begin(); it != nntp.end(); it++ ) {
82 NNTPaccount *account = new NNTPaccount( (*it).replace(0, 5, "") ); 81 NNTPaccount *account = new NNTPaccount( (*it).replace(0, 5, "") );
83 accounts.append( account ); 82 accounts.append( account );
84 } 83 }
85 84
86 readAccounts(); 85 readAccounts();
87} 86}
88 87
89void Settings::saveAccounts() 88void Settings::saveAccounts()
90{ 89{
91 checkDirectory(); 90 checkDirectory();
92 Account *it; 91 Account *it;
93 92
94 for ( it = accounts.first(); it; it = accounts.next() ) { 93 for ( it = accounts.first(); it; it = accounts.next() ) {
95 it->save(); 94 it->save();
96 } 95 }
97} 96}
98 97
99void Settings::readAccounts() 98void Settings::readAccounts()
100{ 99{
101 checkDirectory(); 100 checkDirectory();
102 Account *it; 101 Account *it;
103 102
104 for ( it = accounts.first(); it; it = accounts.next() ) { 103 for ( it = accounts.first(); it; it = accounts.next() ) {
105 it->read(); 104 it->read();
106 } 105 }
107} 106}
108 107
109Account::Account() 108Account::Account()
110{ 109{
111 accountName = "changeMe"; 110 accountName = "changeMe";
112 type = MAILLIB::A_UNDEFINED; 111 type = MAILLIB::A_UNDEFINED;
113 ssl = false; 112 ssl = false;
114 connectionType = 1; 113 connectionType = 1;
115 offline = false; 114 offline = false;
116 maxMailSize = 0; 115 maxMailSize = 0;
117 lastFetch; 116 lastFetch;
118 leaveOnServer = false; 117 leaveOnServer = false;
119} 118}
120 119
121void Account::remove() 120void Account::remove()
122{ 121{
123 QFile file( getFileName() ); 122 QFile file( getFileName() );
124 file.remove(); 123 file.remove();
125} 124}
126 125
127void Account::setPasswordList(const QStringList &str) 126void Account::setPasswordList(const QStringList &str)
128{ 127{
129 password = ""; 128 password = "";
130 int i; 129 int i;
131 for ( i = 0; i < str.count() ; ++i ) { 130 for ( i = 0; i < str.count() ; ++i ) {
132 QChar c ( (str[i].toUInt()-131)/(str.count()- (i%3))); 131 QChar c ( (str[i].toUInt()-131)/(str.count()- (i%3)));
133 password.append( c ); 132 password.append( c );
134 } 133 }
135 //qDebug("password %s ", password.latin1()); 134 //qDebug("password %s ", password.latin1());
136} 135}
137QStringList Account::getPasswordList() 136QStringList Account::getPasswordList()
138{ 137{
139 int i; 138 int i;
140 int len = password.length(); 139 int len = password.length();
141 QStringList str; 140 QStringList str;
142 141
143 for ( i = 0; i < len ; ++i ) { 142 for ( i = 0; i < len ; ++i ) {
144 int val = password.at(i).unicode()*(len-(i%3))+131; 143 int val = password.at(i).unicode()*(len-(i%3))+131;
145 str.append( QString::number( val ) ); 144 str.append( QString::number( val ) );
146 // qDebug("append %s ", str[i].latin1()); 145 // qDebug("append %s ", str[i].latin1());
147 } 146 }
148 return str; 147 return str;
149} 148}
150 149
151IMAPaccount::IMAPaccount() 150IMAPaccount::IMAPaccount()
152 : Account() 151 : Account()
153{ 152{
154 file = IMAPaccount::getUniqueFileName(); 153 file = IMAPaccount::getUniqueFileName();
155 accountName = "New IMAP Account"; 154 accountName = "New IMAP Account";
156 ssl = false; 155 ssl = false;
157 connectionType = 1; 156 connectionType = 1;
158 type = MAILLIB::A_IMAP; 157 type = MAILLIB::A_IMAP;
159 port = IMAP_PORT; 158 port = IMAP_PORT;
160} 159}
161 160
162IMAPaccount::IMAPaccount( QString filename ) 161IMAPaccount::IMAPaccount( QString filename )
163 : Account() 162 : Account()
164{ 163{
165 file = filename; 164 file = filename;
166 accountName = "New IMAP Account"; 165 accountName = "New IMAP Account";
167 ssl = false; 166 ssl = false;
168 connectionType = 1; 167 connectionType = 1;
169 type = MAILLIB::A_IMAP; 168 type = MAILLIB::A_IMAP;
170 port = IMAP_PORT; 169 port = IMAP_PORT;
171} 170}
172 171
173QString IMAPaccount::getUniqueFileName() 172QString IMAPaccount::getUniqueFileName()
174{ 173{
175 int num = 0; 174 int num = 0;
176 QString unique; 175 QString unique;
177 176
178 QDir dir( locateLocal("data", "kopiemail" ) ); 177 QDir dir( locateLocal("data", "kopiemail" ) );
179 178
180 QStringList imap = dir.entryList( "imap-*" ); 179 QStringList imap = dir.entryList( "imap-*" );
181 do { 180 do {
182 unique.setNum( num++ ); 181 unique.setNum( num++ );
183 } while ( imap.contains( "imap-" + unique ) > 0 ); 182 } while ( imap.contains( "imap-" + unique ) > 0 );
184 183
185 return unique; 184 return unique;
186} 185}
187 186
188void IMAPaccount::read() 187void IMAPaccount::read()
189{ 188{
190 KConfig *conf = new KConfig( getFileName() ); 189 KConfig *conf = new KConfig( getFileName() );
191 conf->setGroup( "IMAP Account" ); 190 conf->setGroup( "IMAP Account" );
192 accountName = conf->readEntry( "Account","" ); 191 accountName = conf->readEntry( "Account","" );
193 if (accountName.isNull()) accountName = ""; 192 if (accountName.isNull()) accountName = "";
194 server = conf->readEntry( "Server","" ); 193 server = conf->readEntry( "Server","" );
195 if (server.isNull()) server=""; 194 if (server.isNull()) server="";
196 port = conf->readEntry( "Port","" ); 195 port = conf->readEntry( "Port","" );
197 if (port.isNull()) port="143"; 196 if (port.isNull()) port="143";
198 connectionType = conf->readNumEntry( "ConnectionType" ); 197 connectionType = conf->readNumEntry( "ConnectionType" );
199 ssl = conf->readBoolEntry( "SSL",false ); 198 ssl = conf->readBoolEntry( "SSL",false );
200 user = conf->readEntry( "User","" ); 199 user = conf->readEntry( "User","" );
201 if (user.isNull()) user = ""; 200 if (user.isNull()) user = "";
202 //password = conf->readEntryCrypt( "Password","" ); 201 //password = conf->readEntryCrypt( "Password","" );
203 setPasswordList( conf->readListEntry( "FolderHistory")); 202 setPasswordList( conf->readListEntry( "FolderHistory"));
204 if (password.isNull()) password = ""; 203 if (password.isNull()) password = "";
205 prefix = conf->readEntry("MailPrefix",""); 204 prefix = conf->readEntry("MailPrefix","");
206 if (prefix.isNull()) prefix = ""; 205 if (prefix.isNull()) prefix = "";
207 offline = conf->readBoolEntry("Offline",false); 206 offline = conf->readBoolEntry("Offline",false);
208 localFolder = conf->readEntry( "LocalFolder" ); 207 localFolder = conf->readEntry( "LocalFolder" );
209 maxMailSize = conf->readNumEntry( "MaxSize",0 ); 208 maxMailSize = conf->readNumEntry( "MaxSize",0 );
210 int lf = conf->readNumEntry( "LastFetch",0 ); 209 int lf = conf->readNumEntry( "LastFetch",0 );
211 QDateTime dt ( QDate ( 2004, 1, 1 ), QTime( 0,0,0) ); 210 QDateTime dt ( QDate ( 2004, 1, 1 ), QTime( 0,0,0) );
212 leaveOnServer = conf->readBoolEntry("LeaveOnServer",false); 211 leaveOnServer = conf->readBoolEntry("LeaveOnServer",false);
213 qDebug("reading last fetch: %d ", lf);
214 if ( lf < 0 ) lf = 0; 212 if ( lf < 0 ) lf = 0;
215 lastFetch = dt.addSecs( lf ); 213 lastFetch = dt.addSecs( lf );
216 delete conf; 214 delete conf;
217} 215}
218 216
219void IMAPaccount::save() 217void IMAPaccount::save()
220{ 218{
221 qDebug("saving %s ",getFileName().latin1() ); 219
222 Settings::checkDirectory(); 220 Settings::checkDirectory();
223 221
224 KConfig *conf = new KConfig( getFileName() ); 222 KConfig *conf = new KConfig( getFileName() );
225 conf->setGroup( "IMAP Account" ); 223 conf->setGroup( "IMAP Account" );
226 conf->writeEntry( "Account", accountName ); 224 conf->writeEntry( "Account", accountName );
227 conf->writeEntry( "Server", server ); 225 conf->writeEntry( "Server", server );
228 conf->writeEntry( "Port", port ); 226 conf->writeEntry( "Port", port );
229 conf->writeEntry( "SSL", ssl ); 227 conf->writeEntry( "SSL", ssl );
230 conf->writeEntry( "ConnectionType", connectionType ); 228 conf->writeEntry( "ConnectionType", connectionType );
231 conf->writeEntry( "User", user ); 229 conf->writeEntry( "User", user );
232 //conf->writeEntryCrypt( "Password", password ); 230 //conf->writeEntryCrypt( "Password", password );
233 conf->writeEntry( "FolderHistory",getPasswordList() ); 231 conf->writeEntry( "FolderHistory",getPasswordList() );
234 conf->writeEntry( "MailPrefix",prefix); 232 conf->writeEntry( "MailPrefix",prefix);
235 conf->writeEntry( "Offline",offline); 233 conf->writeEntry( "Offline",offline);
236 conf->writeEntry( "LocalFolder", localFolder ); 234 conf->writeEntry( "LocalFolder", localFolder );
237 conf->writeEntry( "MaxSize", maxMailSize ); 235 conf->writeEntry( "MaxSize", maxMailSize );
238 QDateTime dt ( QDate ( 2004, 1, 1 ), QTime( 0,0,0) ); 236 QDateTime dt ( QDate ( 2004, 1, 1 ), QTime( 0,0,0) );
239 int lf = dt.secsTo ( lastFetch ); 237 int lf = dt.secsTo ( lastFetch );
240 conf->writeEntry( "LastFetch", lf ); 238 conf->writeEntry( "LastFetch", lf );
241 conf->writeEntry( "LeaveOnServer", leaveOnServer); 239 conf->writeEntry( "LeaveOnServer", leaveOnServer);
242 conf->sync(); 240 conf->sync();
243 delete conf; 241 delete conf;
244} 242}
245 243
246 244
247QString IMAPaccount::getFileName() 245QString IMAPaccount::getFileName()
248{ 246{
249 return locateLocal("data", "kopiemail" ) +"/imap-" + file; 247 return locateLocal("data", "kopiemail" ) +"/imap-" + file;
250} 248}
251 249
252POP3account::POP3account() 250POP3account::POP3account()
253 : Account() 251 : Account()
254{ 252{
255 file = POP3account::getUniqueFileName(); 253 file = POP3account::getUniqueFileName();
256 accountName = "New POP3 Account"; 254 accountName = "New POP3 Account";
257 ssl = false; 255 ssl = false;
258 connectionType = 1; 256 connectionType = 1;
259 type = MAILLIB::A_POP3; 257 type = MAILLIB::A_POP3;
260 port = POP3_PORT; 258 port = POP3_PORT;
261} 259}
262 260
263POP3account::POP3account( QString filename ) 261POP3account::POP3account( QString filename )
264 : Account() 262 : Account()
265{ 263{
266 file = filename; 264 file = filename;
267 accountName = "New POP3 Account"; 265 accountName = "New POP3 Account";
268 ssl = false; 266 ssl = false;
269 connectionType = 1; 267 connectionType = 1;
270 type = MAILLIB::A_POP3; 268 type = MAILLIB::A_POP3;
271 port = POP3_PORT; 269 port = POP3_PORT;
272} 270}
273 271
274QString POP3account::getUniqueFileName() 272QString POP3account::getUniqueFileName()
275{ 273{
276 int num = 0; 274 int num = 0;
277 QString unique; 275 QString unique;
278 276
279 QDir dir( locateLocal("data", "kopiemail" ) ); 277 QDir dir( locateLocal("data", "kopiemail" ) );
280 278
281 QStringList imap = dir.entryList( "pop3-*" ); 279 QStringList imap = dir.entryList( "pop3-*" );
282 do { 280 do {
283 unique.setNum( num++ ); 281 unique.setNum( num++ );
284 } while ( imap.contains( "pop3-" + unique ) > 0 ); 282 } while ( imap.contains( "pop3-" + unique ) > 0 );
285 283
286 return unique; 284 return unique;
287} 285}
288 286
289void POP3account::read() 287void POP3account::read()
290{ 288{
291 KConfig *conf = new KConfig( getFileName()); 289 KConfig *conf = new KConfig( getFileName());
292 conf->setGroup( "POP3 Account" ); 290 conf->setGroup( "POP3 Account" );
293 accountName = conf->readEntry( "Account" ); 291 accountName = conf->readEntry( "Account" );
294 server = conf->readEntry( "Server" ); 292 server = conf->readEntry( "Server" );
295 port = conf->readEntry( "Port" ); 293 port = conf->readEntry( "Port" );
296 ssl = conf->readBoolEntry( "SSL" ); 294 ssl = conf->readBoolEntry( "SSL" );
297 connectionType = conf->readNumEntry( "ConnectionType" ); 295 connectionType = conf->readNumEntry( "ConnectionType" );
298 user = conf->readEntry( "User" ); 296 user = conf->readEntry( "User" );
299 //password = conf->readEntryCrypt( "Password" ); 297 //password = conf->readEntryCrypt( "Password" );
300 setPasswordList( conf->readListEntry( "FolderHistory")); 298 setPasswordList( conf->readListEntry( "FolderHistory"));
301 offline = conf->readBoolEntry("Offline",false); 299 offline = conf->readBoolEntry("Offline",false);
302 localFolder = conf->readEntry( "LocalFolder" ); 300 localFolder = conf->readEntry( "LocalFolder" );
303 maxMailSize = conf->readNumEntry( "MaxSize",0 ); 301 maxMailSize = conf->readNumEntry( "MaxSize",0 );
304 int lf = conf->readNumEntry( "LastFetch",0 ); 302 int lf = conf->readNumEntry( "LastFetch",0 );
305 QDateTime dt ( QDate ( 2004, 1, 1 ), QTime( 0,0,0) ); 303 QDateTime dt ( QDate ( 2004, 1, 1 ), QTime( 0,0,0) );
306 leaveOnServer = conf->readBoolEntry("LeaveOnServer",false); 304 leaveOnServer = conf->readBoolEntry("LeaveOnServer",false);
307 lastFetch = dt.addSecs( lf ); 305 lastFetch = dt.addSecs( lf );
308 delete conf; 306 delete conf;
309} 307}
310 308
311void POP3account::save() 309void POP3account::save()
312{ 310{
313 Settings::checkDirectory(); 311 Settings::checkDirectory();
314 312
315 KConfig *conf = new KConfig( getFileName() ); 313 KConfig *conf = new KConfig( getFileName() );
316 conf->setGroup( "POP3 Account" ); 314 conf->setGroup( "POP3 Account" );
317 conf->writeEntry( "Account", accountName ); 315 conf->writeEntry( "Account", accountName );
318 conf->writeEntry( "Server", server ); 316 conf->writeEntry( "Server", server );
319 conf->writeEntry( "Port", port ); 317 conf->writeEntry( "Port", port );
320 conf->writeEntry( "SSL", ssl ); 318 conf->writeEntry( "SSL", ssl );
321 conf->writeEntry( "ConnectionType", connectionType ); 319 conf->writeEntry( "ConnectionType", connectionType );
322 conf->writeEntry( "User", user ); 320 conf->writeEntry( "User", user );
323 //conf->writeEntryCrypt( "Password", password ); 321 //conf->writeEntryCrypt( "Password", password );
324 conf->writeEntry( "FolderHistory",getPasswordList() ); 322 conf->writeEntry( "FolderHistory",getPasswordList() );
325 conf->writeEntry( "Offline",offline); 323 conf->writeEntry( "Offline",offline);
326 conf->writeEntry( "LocalFolder", localFolder ); 324 conf->writeEntry( "LocalFolder", localFolder );
327 conf->writeEntry( "MaxSize", maxMailSize ); 325 conf->writeEntry( "MaxSize", maxMailSize );
328 QDateTime dt ( QDate ( 2004, 1, 1 ), QTime( 0,0,0) ); 326 QDateTime dt ( QDate ( 2004, 1, 1 ), QTime( 0,0,0) );
329 int lf = dt.secsTo ( lastFetch ); 327 int lf = dt.secsTo ( lastFetch );
330 conf->writeEntry( "LastFetch", lf ); 328 conf->writeEntry( "LastFetch", lf );
331 conf->writeEntry( "LeaveOnServer", leaveOnServer); 329 conf->writeEntry( "LeaveOnServer", leaveOnServer);
332 conf->sync(); 330 conf->sync();
333 delete conf; 331 delete conf;
334} 332}
335 333
336 334
337QString POP3account::getFileName() 335QString POP3account::getFileName()
338{ 336{
339 return locateLocal("data", "kopiemail" ) +"/pop3-" + file; 337 return locateLocal("data", "kopiemail" ) +"/pop3-" + file;
340} 338}
341 339
342SMTPaccount::SMTPaccount() 340SMTPaccount::SMTPaccount()
343 : Account() 341 : Account()
344{ 342{
345 file = SMTPaccount::getUniqueFileName(); 343 file = SMTPaccount::getUniqueFileName();
346 accountName = "New SMTP Account"; 344 accountName = "New SMTP Account";
347 ssl = false; 345 ssl = false;
348 connectionType = 1; 346 connectionType = 1;
349 login = false; 347 login = false;
350 useCC = false; 348 useCC = false;
351 useBCC = false; 349 useBCC = false;
352 useReply = false; 350 useReply = false;
353 type = MAILLIB::A_SMTP; 351 type = MAILLIB::A_SMTP;
354 port = SMTP_PORT; 352 port = SMTP_PORT;
355} 353}
356 354
357SMTPaccount::SMTPaccount( QString filename ) 355SMTPaccount::SMTPaccount( QString filename )
358 : Account() 356 : Account()
359{ 357{
360 file = filename; 358 file = filename;
361 accountName = "New SMTP Account"; 359 accountName = "New SMTP Account";
362 ssl = false; 360 ssl = false;
363 connectionType = 1; 361 connectionType = 1;
364 login = false; 362 login = false;
365 type = MAILLIB::A_SMTP; 363 type = MAILLIB::A_SMTP;
366 port = SMTP_PORT; 364 port = SMTP_PORT;
367} 365}
368 366
369QString SMTPaccount::getUniqueFileName() 367QString SMTPaccount::getUniqueFileName()
370{ 368{
371 int num = 0; 369 int num = 0;
372 QString unique; 370 QString unique;
373 371
374 QDir dir( locateLocal("data", "kopiemail" ) ); 372 QDir dir( locateLocal("data", "kopiemail" ) );
375 373
376 QStringList imap = dir.entryList( "smtp-*" ); 374 QStringList imap = dir.entryList( "smtp-*" );
377 do { 375 do {
378 unique.setNum( num++ ); 376 unique.setNum( num++ );
379 } while ( imap.contains( "smtp-" + unique ) > 0 ); 377 } while ( imap.contains( "smtp-" + unique ) > 0 );
380 378
381 return unique; 379 return unique;
382} 380}
383 381
384void SMTPaccount::read() 382void SMTPaccount::read()
385{ 383{
386 KConfig *conf = new KConfig( getFileName() ); 384 KConfig *conf = new KConfig( getFileName() );
387 conf->setGroup( "SMTP Account" ); 385 conf->setGroup( "SMTP Account" );
388 accountName = conf->readEntry( "Account" ); 386 accountName = conf->readEntry( "Account" );
389 server = conf->readEntry( "Server" ); 387 server = conf->readEntry( "Server" );
390 port = conf->readEntry( "Port" ); 388 port = conf->readEntry( "Port" );
391 ssl = conf->readBoolEntry( "SSL" ); 389 ssl = conf->readBoolEntry( "SSL" );
392 connectionType = conf->readNumEntry( "ConnectionType" ); 390 connectionType = conf->readNumEntry( "ConnectionType" );
393 login = conf->readBoolEntry( "Login" ); 391 login = conf->readBoolEntry( "Login" );
394 user = conf->readEntry( "User" ); 392 user = conf->readEntry( "User" );
395 //password = conf->readEntryCrypt( "Password" ); 393 //password = conf->readEntryCrypt( "Password" );
396 setPasswordList( conf->readListEntry( "FolderHistory")); 394 setPasswordList( conf->readListEntry( "FolderHistory"));
397 delete conf; 395 delete conf;
398} 396}
399 397
400void SMTPaccount::save() 398void SMTPaccount::save()
401{ 399{
402 Settings::checkDirectory(); 400 Settings::checkDirectory();
403 401
404 KConfig *conf = new KConfig( getFileName() ); 402 KConfig *conf = new KConfig( getFileName() );
405 conf->setGroup( "SMTP Account" ); 403 conf->setGroup( "SMTP Account" );
406 conf->writeEntry( "Account", accountName ); 404 conf->writeEntry( "Account", accountName );
407 conf->writeEntry( "Server", server ); 405 conf->writeEntry( "Server", server );
408 conf->writeEntry( "Port", port ); 406 conf->writeEntry( "Port", port );
409 conf->writeEntry( "SSL", ssl ); 407 conf->writeEntry( "SSL", ssl );
410 conf->writeEntry( "ConnectionType", connectionType ); 408 conf->writeEntry( "ConnectionType", connectionType );
411 conf->writeEntry( "Login", login ); 409 conf->writeEntry( "Login", login );
412 conf->writeEntry( "User", user ); 410 conf->writeEntry( "User", user );
413 //conf->writeEntryCrypt( "Password", password ); 411 //conf->writeEntryCrypt( "Password", password );
414 conf->writeEntry( "FolderHistory",getPasswordList() ); 412 conf->writeEntry( "FolderHistory",getPasswordList() );
415 conf->sync(); 413 conf->sync();
416 delete conf; 414 delete conf;
417} 415}
418 416
419 417
420QString SMTPaccount::getFileName() 418QString SMTPaccount::getFileName()
421{ 419{
422 return locateLocal("data", "kopiemail" ) +"/smtp-" + file; 420 return locateLocal("data", "kopiemail" ) +"/smtp-" + file;
423} 421}
424 422
425NNTPaccount::NNTPaccount() 423NNTPaccount::NNTPaccount()
426 : Account() 424 : Account()
427{ 425{
428 file = NNTPaccount::getUniqueFileName(); 426 file = NNTPaccount::getUniqueFileName();
429 accountName = "New NNTP Account"; 427 accountName = "New NNTP Account";
430 ssl = false; 428 ssl = false;
431 login = false; 429 login = false;
432 type = MAILLIB::A_NNTP; 430 type = MAILLIB::A_NNTP;
433 port = NNTP_PORT; 431 port = NNTP_PORT;
434} 432}
435 433
436NNTPaccount::NNTPaccount( QString filename ) 434NNTPaccount::NNTPaccount( QString filename )
437 : Account() 435 : Account()
438{ 436{
439 file = filename; 437 file = filename;
440 accountName = "New NNTP Account"; 438 accountName = "New NNTP Account";
441 ssl = false; 439 ssl = false;
442 login = false; 440 login = false;
443 type = MAILLIB::A_NNTP; 441 type = MAILLIB::A_NNTP;
444 port = NNTP_PORT; 442 port = NNTP_PORT;
445} 443}
446 444
447QString NNTPaccount::getUniqueFileName() 445QString NNTPaccount::getUniqueFileName()
448{ 446{
449 int num = 0; 447 int num = 0;
450 QString unique; 448 QString unique;
451 449
452 QDir dir( locateLocal("data", "kopiemail" ) ); 450 QDir dir( locateLocal("data", "kopiemail" ) );
453 451
454 QStringList imap = dir.entryList( "nntp-*" ); 452 QStringList imap = dir.entryList( "nntp-*" );
455 do { 453 do {
456 unique.setNum( num++ ); 454 unique.setNum( num++ );
457 } while ( imap.contains( "nntp-" + unique ) > 0 ); 455 } while ( imap.contains( "nntp-" + unique ) > 0 );
458 456
459 return unique; 457 return unique;
460} 458}
461 459
462void NNTPaccount::read() 460void NNTPaccount::read()
463{ 461{
464 KConfig *conf = new KConfig( getFileName() ); 462 KConfig *conf = new KConfig( getFileName() );
465 conf->setGroup( "NNTP Account" ); 463 conf->setGroup( "NNTP Account" );
466 accountName = conf->readEntry( "Account" ); 464 accountName = conf->readEntry( "Account" );
467 server = conf->readEntry( "Server" ); 465 server = conf->readEntry( "Server" );
468 port = conf->readEntry( "Port" ); 466 port = conf->readEntry( "Port" );
469 ssl = conf->readBoolEntry( "SSL" ); 467 ssl = conf->readBoolEntry( "SSL" );
470 login = conf->readBoolEntry( "Login" ); 468 login = conf->readBoolEntry( "Login" );
471 user = conf->readEntry( "User" ); 469 user = conf->readEntry( "User" );
472 //password = conf->readEntryCrypt( "Password" ); 470 //password = conf->readEntryCrypt( "Password" );
473 setPasswordList( conf->readListEntry( "FolderHistory")); 471 setPasswordList( conf->readListEntry( "FolderHistory"));
474 subscribedGroups = conf->readListEntry( "Subscribed"); 472 subscribedGroups = conf->readListEntry( "Subscribed");
475 delete conf; 473 delete conf;
476} 474}
477 475
478void NNTPaccount::save() 476void NNTPaccount::save()
479{ 477{
480 Settings::checkDirectory(); 478 Settings::checkDirectory();
481 479
482 KConfig *conf = new KConfig( getFileName() ); 480 KConfig *conf = new KConfig( getFileName() );
483 conf->setGroup( "NNTP Account" ); 481 conf->setGroup( "NNTP Account" );
484 conf->writeEntry( "Account", accountName ); 482 conf->writeEntry( "Account", accountName );
485 conf->writeEntry( "Server", server ); 483 conf->writeEntry( "Server", server );
486 conf->writeEntry( "Port", port ); 484 conf->writeEntry( "Port", port );
487 conf->writeEntry( "SSL", ssl ); 485 conf->writeEntry( "SSL", ssl );
488 conf->writeEntry( "Login", login ); 486 conf->writeEntry( "Login", login );
489 conf->writeEntry( "User", user ); 487 conf->writeEntry( "User", user );
490 //conf->writeEntryCrypt( "Password", password ); 488 //conf->writeEntryCrypt( "Password", password );
491 conf->writeEntry( "FolderHistory",getPasswordList() ); 489 conf->writeEntry( "FolderHistory",getPasswordList() );
492 conf->writeEntry( "Subscribed" , subscribedGroups ); 490 conf->writeEntry( "Subscribed" , subscribedGroups );
493 conf->sync(); 491 conf->sync();
494 delete conf; 492 delete conf;
495} 493}
496 494
497 495
498QString NNTPaccount::getFileName() 496QString NNTPaccount::getFileName()
499{ 497{
500 return locateLocal("data", "kopiemail" ) +"/nntp-" + file; 498 return locateLocal("data", "kopiemail" ) +"/nntp-" + file;
501} 499}