summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/accountitem.cpp115
-rw-r--r--noncore/net/mail/accountitem.h23
-rw-r--r--noncore/net/mail/accountview.cpp2
-rw-r--r--noncore/net/mail/accountview.h7
-rw-r--r--noncore/net/mail/libmailwrapper/abstractmail.cpp5
-rw-r--r--noncore/net/mail/libmailwrapper/abstractmail.h16
-rw-r--r--noncore/net/mail/libmailwrapper/genericwrapper.h2
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.cpp14
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.h20
-rw-r--r--noncore/net/mail/libmailwrapper/mailtypes.h1
-rw-r--r--noncore/net/mail/libmailwrapper/mailwrapper.cpp12
-rw-r--r--noncore/net/mail/libmailwrapper/mailwrapper.h16
-rw-r--r--noncore/net/mail/libmailwrapper/mboxwrapper.cpp39
-rw-r--r--noncore/net/mail/libmailwrapper/mboxwrapper.h13
-rw-r--r--noncore/net/mail/libmailwrapper/mhwrapper.cpp24
-rw-r--r--noncore/net/mail/libmailwrapper/mhwrapper.h20
-rw-r--r--noncore/net/mail/libmailwrapper/nntpwrapper.cpp9
-rw-r--r--noncore/net/mail/libmailwrapper/nntpwrapper.h4
-rw-r--r--noncore/net/mail/libmailwrapper/pop3wrapper.cpp9
-rw-r--r--noncore/net/mail/libmailwrapper/pop3wrapper.h4
-rw-r--r--noncore/net/mail/viewmail.cpp7
21 files changed, 190 insertions, 172 deletions
diff --git a/noncore/net/mail/accountitem.cpp b/noncore/net/mail/accountitem.cpp
index 396dcb7..3e12563 100644
--- a/noncore/net/mail/accountitem.cpp
+++ b/noncore/net/mail/accountitem.cpp
@@ -1,664 +1,655 @@
1 1
2#include "accountitem.h" 2#include "accountitem.h"
3#include "accountview.h" 3#include "accountview.h"
4#include "newmaildir.h" 4#include "newmaildir.h"
5#include "nntpgroupsdlg.h" 5#include "nntpgroupsdlg.h"
6#include "defines.h" 6#include "defines.h"
7 7
8/* OPIE */ 8/* OPIE */
9#include <libmailwrapper/mailtypes.h> 9#include <libmailwrapper/mailtypes.h>
10#include <libmailwrapper/abstractmail.h> 10#include <libmailwrapper/abstractmail.h>
11#include <libmailwrapper/mailwrapper.h> 11#include <libmailwrapper/mailwrapper.h>
12#include <qpe/qpeapplication.h> 12#include <qpe/qpeapplication.h>
13 13
14/* QT */ 14/* QT */
15#include <qpopupmenu.h> 15#include <qpopupmenu.h>
16#include <qmessagebox.h> 16#include <qmessagebox.h>
17 17
18#define SETPIX(x) if (!account->getOffline()) {setPixmap( 0,x);} else {setPixmap( 0, PIXMAP_OFFLINE );} 18#define SETPIX(x) if (!account->getOffline()) {setPixmap( 0,x);} else {setPixmap( 0, PIXMAP_OFFLINE );}
19/** 19/**
20 * POP3 Account stuff 20 * POP3 Account stuff
21 */ 21 */
22POP3viewItem::POP3viewItem( POP3account *a, AccountView *parent ) 22POP3viewItem::POP3viewItem( POP3account *a, AccountView *parent )
23 : AccountViewItem( parent ) 23 : AccountViewItem( parent )
24{ 24{
25 account = a; 25 account = a;
26 wrapper = AbstractMail::getWrapper( account ); 26 wrapper = AbstractMail::getWrapper( account );
27 SETPIX(PIXMAP_POP3FOLDER); 27 SETPIX(PIXMAP_POP3FOLDER);
28#if 0 28#if 0
29 if (!account->getOffline()) 29 if (!account->getOffline())
30 { 30 {
31 setPixmap( 0, ); 31 setPixmap( 0, );
32 } 32 }
33 else 33 else
34 { 34 {
35 setPixmap( 0, PIXMAP_OFFLINE ); 35 setPixmap( 0, PIXMAP_OFFLINE );
36 } 36 }
37#endif 37#endif
38 setText( 0, account->getAccountName() ); 38 setText( 0, account->getAccountName() );
39 setOpen( true ); 39 setOpen( true );
40} 40}
41 41
42POP3viewItem::~POP3viewItem() 42POP3viewItem::~POP3viewItem()
43{ 43{
44 delete wrapper; 44 delete wrapper;
45} 45}
46 46
47AbstractMail *POP3viewItem::getWrapper() 47AbstractMail *POP3viewItem::getWrapper()
48{ 48{
49 return wrapper; 49 return wrapper;
50} 50}
51 51
52void POP3viewItem::refresh( QList<RecMail> & ) 52void POP3viewItem::refresh( QList<RecMail> & )
53{ 53{
54 refresh(); 54 refresh();
55} 55}
56 56
57void POP3viewItem::refresh() 57void POP3viewItem::refresh()
58{ 58{
59 if (account->getOffline()) return; 59 if (account->getOffline()) return;
60 QList<Folder> *folders = wrapper->listFolders(); 60 QValueList<FolderP> *folders = wrapper->listFolders();
61 QListViewItem *child = firstChild(); 61 QListViewItem *child = firstChild();
62 while ( child ) 62 while ( child )
63 { 63 {
64 QListViewItem *tmp = child; 64 QListViewItem *tmp = child;
65 child = child->nextSibling(); 65 child = child->nextSibling();
66 delete tmp; 66 delete tmp;
67 } 67 }
68 Folder *it; 68 QValueList<FolderP>::ConstIterator it;
69 QListViewItem*item = 0; 69 QListViewItem*item = 0;
70 for ( it = folders->first(); it; it = folders->next() ) 70 for ( it = folders->begin(); it!=folders->end(); ++it)
71 { 71 {
72 item = new POP3folderItem( it, this , item ); 72 item = new POP3folderItem( (*it), this , item );
73 item->setSelectable(it->may_select()); 73 item->setSelectable( (*it)->may_select());
74 } 74 }
75 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
76 folders->setAutoDelete(false);
77 delete folders; 75 delete folders;
78} 76}
79 77
80RecBody POP3viewItem::fetchBody( const RecMail &mail ) 78RecBody POP3viewItem::fetchBody( const RecMail &mail )
81{ 79{
82 qDebug( "POP3 fetchBody" ); 80 qDebug( "POP3 fetchBody" );
83 return wrapper->fetchBody( mail ); 81 return wrapper->fetchBody( mail );
84} 82}
85 83
86QPopupMenu * POP3viewItem::getContextMenu() 84QPopupMenu * POP3viewItem::getContextMenu()
87{ 85{
88 QPopupMenu *m = new QPopupMenu(0); 86 QPopupMenu *m = new QPopupMenu(0);
89 if (m) 87 if (m)
90 { 88 {
91 if (!account->getOffline()) 89 if (!account->getOffline())
92 { 90 {
93 m->insertItem(QObject::tr("Disconnect",contextName),0); 91 m->insertItem(QObject::tr("Disconnect",contextName),0);
94 m->insertItem(QObject::tr("Set offline",contextName),1); 92 m->insertItem(QObject::tr("Set offline",contextName),1);
95 } 93 }
96 else 94 else
97 { 95 {
98 m->insertItem(QObject::tr("Set online",contextName),1); 96 m->insertItem(QObject::tr("Set online",contextName),1);
99 } 97 }
100 } 98 }
101 return m; 99 return m;
102} 100}
103 101
104void POP3viewItem::disconnect() 102void POP3viewItem::disconnect()
105{ 103{
106 QListViewItem *child = firstChild(); 104 QListViewItem *child = firstChild();
107 while ( child ) 105 while ( child )
108 { 106 {
109 QListViewItem *tmp = child; 107 QListViewItem *tmp = child;
110 child = child->nextSibling(); 108 child = child->nextSibling();
111 delete tmp; 109 delete tmp;
112 } 110 }
113 wrapper->logout(); 111 wrapper->logout();
114} 112}
115 113
116void POP3viewItem::setOnOffline() 114void POP3viewItem::setOnOffline()
117{ 115{
118 if (!account->getOffline()) 116 if (!account->getOffline())
119 { 117 {
120 disconnect(); 118 disconnect();
121 } 119 }
122 account->setOffline(!account->getOffline()); 120 account->setOffline(!account->getOffline());
123 account->save(); 121 account->save();
124 SETPIX(PIXMAP_POP3FOLDER); 122 SETPIX(PIXMAP_POP3FOLDER);
125 refresh(); 123 refresh();
126} 124}
127 125
128void POP3viewItem::contextMenuSelected(int which) 126void POP3viewItem::contextMenuSelected(int which)
129{ 127{
130 switch (which) 128 switch (which)
131 { 129 {
132 case 0: 130 case 0:
133 disconnect(); 131 disconnect();
134 break; 132 break;
135 case 1: 133 case 1:
136 setOnOffline(); 134 setOnOffline();
137 break; 135 break;
138 } 136 }
139} 137}
140 138
141POP3folderItem::~POP3folderItem() 139POP3folderItem::~POP3folderItem()
142{} 140{}
143 141
144POP3folderItem::POP3folderItem( Folder *folderInit, POP3viewItem *parent , QListViewItem*after ) 142POP3folderItem::POP3folderItem( const FolderP&folderInit, POP3viewItem *parent , QListViewItem*after )
145 : AccountViewItem( parent,after ) 143 : AccountViewItem(folderInit,parent,after )
146{ 144{
147 folder = folderInit;
148 pop3 = parent; 145 pop3 = parent;
149 if (folder->getDisplayName().lower()!="inbox") 146 if (folder->getDisplayName().lower()!="inbox")
150 { 147 {
151 setPixmap( 0, PIXMAP_POP3FOLDER ); 148 setPixmap( 0, PIXMAP_POP3FOLDER );
152 } 149 }
153 else 150 else
154 { 151 {
155 setPixmap( 0, PIXMAP_INBOXFOLDER); 152 setPixmap( 0, PIXMAP_INBOXFOLDER);
156 } 153 }
157 setText( 0, folder->getDisplayName() ); 154 setText( 0, folder->getDisplayName() );
158} 155}
159 156
160void POP3folderItem::refresh(QList<RecMail>&target) 157void POP3folderItem::refresh(QList<RecMail>&target)
161{ 158{
162 if (folder->may_select()) 159 if (folder->may_select())
163 pop3->getWrapper()->listMessages( folder->getName(),target ); 160 pop3->getWrapper()->listMessages( folder->getName(),target );
164} 161}
165 162
166RecBody POP3folderItem::fetchBody(const RecMail&aMail) 163RecBody POP3folderItem::fetchBody(const RecMail&aMail)
167{ 164{
168 return pop3->getWrapper()->fetchBody(aMail); 165 return pop3->getWrapper()->fetchBody(aMail);
169} 166}
170 167
171QPopupMenu * POP3folderItem::getContextMenu() 168QPopupMenu * POP3folderItem::getContextMenu()
172{ 169{
173 QPopupMenu *m = new QPopupMenu(0); 170 QPopupMenu *m = new QPopupMenu(0);
174 if (m) 171 if (m)
175 { 172 {
176 m->insertItem(QObject::tr("Refresh header list",contextName),0); 173 m->insertItem(QObject::tr("Refresh header list",contextName),0);
177 m->insertItem(QObject::tr("Delete all mails",contextName),1); 174 m->insertItem(QObject::tr("Delete all mails",contextName),1);
178 m->insertItem(QObject::tr("Move/Copie all mails",contextName),2); 175 m->insertItem(QObject::tr("Move/Copie all mails",contextName),2);
179 } 176 }
180 return m; 177 return m;
181} 178}
182 179
183void POP3folderItem::downloadMails() 180void POP3folderItem::downloadMails()
184{ 181{
185 AccountView*bl = pop3->accountView(); 182 AccountView*bl = pop3->accountView();
186 if (!bl) return; 183 if (!bl) return;
187 bl->downloadMails(folder,pop3->getWrapper()); 184 bl->downloadMails(folder,pop3->getWrapper());
188} 185}
189 186
190void POP3folderItem::contextMenuSelected(int which) 187void POP3folderItem::contextMenuSelected(int which)
191{ 188{
192 AccountView * view = (AccountView*)listView(); 189 AccountView * view = (AccountView*)listView();
193 switch (which) 190 switch (which)
194 { 191 {
195 case 0: 192 case 0:
196 /* must be 'cause pop3 lists are cached */ 193 /* must be 'cause pop3 lists are cached */
197 pop3->getWrapper()->logout(); 194 pop3->getWrapper()->logout();
198 view->refreshCurrent(); 195 view->refreshCurrent();
199 break; 196 break;
200 case 1: 197 case 1:
201 deleteAllMail(pop3->getWrapper(),folder); 198 deleteAllMail(pop3->getWrapper(),folder);
202 break; 199 break;
203 case 2: 200 case 2:
204 downloadMails(); 201 downloadMails();
205 break; 202 break;
206 default: 203 default:
207 break; 204 break;
208 } 205 }
209} 206}
210 207
211/** 208/**
212 * NNTP Account stuff 209 * NNTP Account stuff
213 */ 210 */
214NNTPviewItem::NNTPviewItem( NNTPaccount *a, AccountView *parent ) 211NNTPviewItem::NNTPviewItem( NNTPaccount *a, AccountView *parent )
215 : AccountViewItem( parent ) 212 : AccountViewItem( parent )
216{ 213{
217 account = a; 214 account = a;
218 wrapper = AbstractMail::getWrapper( account ); 215 wrapper = AbstractMail::getWrapper( account );
219 //FIXME 216 //FIXME
220 SETPIX(PIXMAP_POP3FOLDER); 217 SETPIX(PIXMAP_POP3FOLDER);
221#if 0 218#if 0
222 if (!account->getOffline()) 219 if (!account->getOffline())
223 { 220 {
224 setPixmap( 0, ); 221 setPixmap( 0, );
225 } 222 }
226 else 223 else
227 { 224 {
228 setPixmap( 0, PIXMAP_OFFLINE ); 225 setPixmap( 0, PIXMAP_OFFLINE );
229 } 226 }
230#endif 227#endif
231 setText( 0, account->getAccountName() ); 228 setText( 0, account->getAccountName() );
232 setOpen( true ); 229 setOpen( true );
233} 230}
234 231
235NNTPviewItem::~NNTPviewItem() 232NNTPviewItem::~NNTPviewItem()
236{ 233{
237 delete wrapper; 234 delete wrapper;
238} 235}
239 236
240AbstractMail *NNTPviewItem::getWrapper() 237AbstractMail *NNTPviewItem::getWrapper()
241{ 238{
242 return wrapper; 239 return wrapper;
243} 240}
244 241
245void NNTPviewItem::refresh( QList<RecMail> & ) 242void NNTPviewItem::refresh( QList<RecMail> & )
246{ 243{
247 refresh(); 244 refresh();
248} 245}
249 246
250void NNTPviewItem::refresh() 247void NNTPviewItem::refresh()
251{ 248{
252 if (account->getOffline()) return; 249 if (account->getOffline()) return;
253 QList<Folder> *folders = wrapper->listFolders(); 250 QValueList<FolderP> *folders = wrapper->listFolders();
251
254 QListViewItem *child = firstChild(); 252 QListViewItem *child = firstChild();
255 while ( child ) 253 while ( child )
256 { 254 {
257 QListViewItem *tmp = child; 255 QListViewItem *tmp = child;
258 child = child->nextSibling(); 256 child = child->nextSibling();
259 delete tmp; 257 delete tmp;
260 } 258 }
261 Folder *it; 259 QValueList<FolderP>::ConstIterator it;
262 QListViewItem*item = 0; 260 QListViewItem*item = 0;
263 for ( it = folders->first(); it; it = folders->next() ) 261 for ( it = folders->begin(); it!=folders->end(); ++it)
264 { 262 {
265 item = new NNTPfolderItem( it, this , item ); 263 item = new NNTPfolderItem( (*it), this , item );
266 item->setSelectable(it->may_select()); 264 item->setSelectable( (*it)->may_select());
267 } 265 }
268 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
269 folders->setAutoDelete(false);
270 delete folders; 266 delete folders;
271} 267}
272 268
273RecBody NNTPviewItem::fetchBody( const RecMail &mail ) 269RecBody NNTPviewItem::fetchBody( const RecMail &mail )
274{ 270{
275 qDebug( "NNTP fetchBody" ); 271 qDebug( "NNTP fetchBody" );
276 return wrapper->fetchBody( mail ); 272 return wrapper->fetchBody( mail );
277} 273}
278 274
279QPopupMenu * NNTPviewItem::getContextMenu() 275QPopupMenu * NNTPviewItem::getContextMenu()
280{ 276{
281 QPopupMenu *m = new QPopupMenu(0); 277 QPopupMenu *m = new QPopupMenu(0);
282 if (m) 278 if (m)
283 { 279 {
284 if (!account->getOffline()) 280 if (!account->getOffline())
285 { 281 {
286 m->insertItem(QObject::tr("Disconnect",contextName),0); 282 m->insertItem(QObject::tr("Disconnect",contextName),0);
287 m->insertItem(QObject::tr("Set offline",contextName),1); 283 m->insertItem(QObject::tr("Set offline",contextName),1);
288 m->insertItem(QObject::tr("(Un-)Subscribe groups",contextName),2); 284 m->insertItem(QObject::tr("(Un-)Subscribe groups",contextName),2);
289 } 285 }
290 else 286 else
291 { 287 {
292 m->insertItem(QObject::tr("Set online",contextName),1); 288 m->insertItem(QObject::tr("Set online",contextName),1);
293 } 289 }
294 } 290 }
295 return m; 291 return m;
296} 292}
297 293
298void NNTPviewItem::subscribeGroups() 294void NNTPviewItem::subscribeGroups()
299{ 295{
300 NNTPGroupsDlg dlg(account); 296 NNTPGroupsDlg dlg(account);
301 if (QPEApplication::execDialog(&dlg)== QDialog::Accepted ){ 297 if (QPEApplication::execDialog(&dlg)== QDialog::Accepted ){
302 refresh(); 298 refresh();
303 } 299 }
304} 300}
305 301
306void NNTPviewItem::disconnect() 302void NNTPviewItem::disconnect()
307{ 303{
308 QListViewItem *child = firstChild(); 304 QListViewItem *child = firstChild();
309 while ( child ) 305 while ( child )
310 { 306 {
311 QListViewItem *tmp = child; 307 QListViewItem *tmp = child;
312 child = child->nextSibling(); 308 child = child->nextSibling();
313 delete tmp; 309 delete tmp;
314 } 310 }
315 wrapper->logout(); 311 wrapper->logout();
316} 312}
317 313
318void NNTPviewItem::setOnOffline() 314void NNTPviewItem::setOnOffline()
319{ 315{
320 if (!account->getOffline()) 316 if (!account->getOffline())
321 { 317 {
322 disconnect(); 318 disconnect();
323 } 319 }
324 account->setOffline(!account->getOffline()); 320 account->setOffline(!account->getOffline());
325 account->save(); 321 account->save();
326 //FIXME 322 //FIXME
327 SETPIX(PIXMAP_POP3FOLDER); 323 SETPIX(PIXMAP_POP3FOLDER);
328 refresh(); 324 refresh();
329} 325}
330 326
331void NNTPviewItem::contextMenuSelected(int which) 327void NNTPviewItem::contextMenuSelected(int which)
332{ 328{
333 switch (which) 329 switch (which)
334 { 330 {
335 case 0: 331 case 0:
336 disconnect(); 332 disconnect();
337 break; 333 break;
338 case 1: 334 case 1:
339 setOnOffline(); 335 setOnOffline();
340 break; 336 break;
341 case 2: 337 case 2:
342 subscribeGroups(); 338 subscribeGroups();
343 break; 339 break;
344 } 340 }
345} 341}
346 342
347NNTPfolderItem::~NNTPfolderItem() 343NNTPfolderItem::~NNTPfolderItem()
348{} 344{}
349 345
350NNTPfolderItem::NNTPfolderItem( Folder *folderInit, NNTPviewItem *parent , QListViewItem*after ) 346NNTPfolderItem::NNTPfolderItem( const FolderP &folderInit, NNTPviewItem *parent , QListViewItem*after )
351 : AccountViewItem( parent,after ) 347 : AccountViewItem( folderInit, parent,after )
352{ 348{
353 folder = folderInit;
354 nntp = parent; 349 nntp = parent;
355 if (folder->getDisplayName().lower()!="inbox") 350 if (folder->getDisplayName().lower()!="inbox")
356 { 351 {
357 setPixmap( 0, PIXMAP_POP3FOLDER ); 352 setPixmap( 0, PIXMAP_POP3FOLDER );
358 } 353 }
359 else 354 else
360 { 355 {
361 setPixmap( 0, PIXMAP_INBOXFOLDER); 356 setPixmap( 0, PIXMAP_INBOXFOLDER);
362 } 357 }
363 setText( 0, folder->getDisplayName() ); 358 setText( 0, folder->getDisplayName() );
364} 359}
365 360
366void NNTPfolderItem::refresh(QList<RecMail>&target) 361void NNTPfolderItem::refresh(QList<RecMail>&target)
367{ 362{
368 if (folder->may_select()) 363 if (folder->may_select())
369 nntp->getWrapper()->listMessages( folder->getName(),target ); 364 nntp->getWrapper()->listMessages( folder->getName(),target );
370} 365}
371 366
372RecBody NNTPfolderItem::fetchBody(const RecMail&aMail) 367RecBody NNTPfolderItem::fetchBody(const RecMail&aMail)
373{ 368{
374 return nntp->getWrapper()->fetchBody(aMail); 369 return nntp->getWrapper()->fetchBody(aMail);
375} 370}
376 371
377QPopupMenu * NNTPfolderItem::getContextMenu() 372QPopupMenu * NNTPfolderItem::getContextMenu()
378{ 373{
379 QPopupMenu *m = new QPopupMenu(0); 374 QPopupMenu *m = new QPopupMenu(0);
380 if (m) 375 if (m)
381 { 376 {
382 m->insertItem(QObject::tr("Refresh header list",contextName),0); 377 m->insertItem(QObject::tr("Refresh header list",contextName),0);
383 m->insertItem(QObject::tr("Copy all postings",contextName),1); 378 m->insertItem(QObject::tr("Copy all postings",contextName),1);
384 } 379 }
385 return m; 380 return m;
386} 381}
387 382
388void NNTPfolderItem::downloadMails() 383void NNTPfolderItem::downloadMails()
389{ 384{
390 AccountView*bl = nntp->accountView(); 385 AccountView*bl = nntp->accountView();
391 if (!bl) return; 386 if (!bl) return;
392 bl->downloadMails(folder,nntp->getWrapper()); 387 bl->downloadMails(folder,nntp->getWrapper());
393} 388}
394 389
395void NNTPfolderItem::contextMenuSelected(int which) 390void NNTPfolderItem::contextMenuSelected(int which)
396{ 391{
397 AccountView * view = (AccountView*)listView(); 392 AccountView * view = (AccountView*)listView();
398 switch (which) 393 switch (which)
399 { 394 {
400 case 0: 395 case 0:
401 /* must be 'cause pop3 lists are cached */ 396 /* must be 'cause pop3 lists are cached */
402 nntp->getWrapper()->logout(); 397 nntp->getWrapper()->logout();
403 view->refreshCurrent(); 398 view->refreshCurrent();
404 break; 399 break;
405 case 1: 400 case 1:
406 downloadMails(); 401 downloadMails();
407 break; 402 break;
408 default: 403 default:
409 break; 404 break;
410 } 405 }
411} 406}
412 407
413/** 408/**
414 * IMAP Account stuff 409 * IMAP Account stuff
415 */ 410 */
416IMAPviewItem::IMAPviewItem( IMAPaccount *a, AccountView *parent ) 411IMAPviewItem::IMAPviewItem( IMAPaccount *a, AccountView *parent )
417 : AccountViewItem( parent ) 412 : AccountViewItem( parent )
418{ 413{
419 account = a; 414 account = a;
420 wrapper = AbstractMail::getWrapper( account ); 415 wrapper = AbstractMail::getWrapper( account );
421 SETPIX(PIXMAP_IMAPFOLDER); 416 SETPIX(PIXMAP_IMAPFOLDER);
422 setText( 0, account->getAccountName() ); 417 setText( 0, account->getAccountName() );
423 setOpen( true ); 418 setOpen( true );
424} 419}
425 420
426IMAPviewItem::~IMAPviewItem() 421IMAPviewItem::~IMAPviewItem()
427{ 422{
428 delete wrapper; 423 delete wrapper;
429} 424}
430 425
431AbstractMail *IMAPviewItem::getWrapper() 426AbstractMail *IMAPviewItem::getWrapper()
432{ 427{
433 return wrapper; 428 return wrapper;
434} 429}
435 430
436void IMAPviewItem::refresh(QList<RecMail>&) 431void IMAPviewItem::refresh(QList<RecMail>&)
437{ 432{
438 refreshFolders(false); 433 refreshFolders(false);
439} 434}
440 435
441const QStringList&IMAPviewItem::subFolders() 436const QStringList&IMAPviewItem::subFolders()
442{ 437{
443 return currentFolders; 438 return currentFolders;
444} 439}
445 440
446void IMAPviewItem::refreshFolders(bool force) 441void IMAPviewItem::refreshFolders(bool force)
447{ 442{
448 if (childCount()>0 && force==false) return; 443 if (childCount()>0 && force==false) return;
449 if (account->getOffline()) return; 444 if (account->getOffline()) return;
450 445
451 removeChilds(); 446 removeChilds();
452 currentFolders.clear(); 447 currentFolders.clear();
453 QList<Folder> *folders = wrapper->listFolders(); 448 QValueList<FolderP> * folders = wrapper->listFolders();
454 449
455 Folder *it; 450 QValueList<FolderP>::Iterator it;
456 QListViewItem*item = 0; 451 QListViewItem*item = 0;
457 QListViewItem*titem = 0; 452 QListViewItem*titem = 0;
458 QString fname,del,search; 453 QString fname,del,search;
459 int pos; 454 int pos;
460 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
461 folders->setAutoDelete(false);
462 455
463 for ( it = folders->first(); it; it = folders->next() ) 456 for ( it = folders->begin(); it!=folders->end(); ++it)
464 { 457 {
465 if (it->getDisplayName().lower()=="inbox") 458 if ((*it)->getDisplayName().lower()=="inbox")
466 { 459 {
467 item = new IMAPfolderItem( it, this , item ); 460 item = new IMAPfolderItem( (*it), this , item );
468 folders->remove(it); 461 folders->remove(it);
469 qDebug("inbox found"); 462 qDebug("inbox found");
470 break; 463 break;
471 } 464 }
472 } 465 }
473 for ( it = folders->first(); it; it = folders->next() ) 466 for ( it = folders->begin(); it!=folders->end(); ++it)
474 { 467 {
475 fname = it->getDisplayName(); 468 fname = (*it)->getDisplayName();
476 currentFolders.append(it->getName()); 469 currentFolders.append((*it)->getName());
477 pos = fname.findRev(it->Separator()); 470 pos = fname.findRev((*it)->Separator());
478 if (pos != -1) 471 if (pos != -1)
479 { 472 {
480 fname = fname.left(pos); 473 fname = fname.left(pos);
481 } 474 }
482 IMAPfolderItem*pitem = (IMAPfolderItem*)findSubItem(fname); 475 IMAPfolderItem*pitem = (IMAPfolderItem*)findSubItem(fname);
483 if (pitem) 476 if (pitem)
484 { 477 {
485 titem = item; 478 titem = item;
486 item = new IMAPfolderItem(it,pitem,pitem->firstChild(),this); 479 item = new IMAPfolderItem( (*it),pitem,pitem->firstChild(),this);
487 /* setup the short name */ 480 /* setup the short name */
488 item->setText(0,it->getDisplayName().right(it->getDisplayName().length()-pos-1)); 481 item->setText(0,(*it)->getDisplayName().right((*it)->getDisplayName().length()-pos-1));
489 item = titem; 482 item = titem;
490 } 483 }
491 else 484 else
492 { 485 {
493 item = new IMAPfolderItem( it, this , item ); 486 item = new IMAPfolderItem( (*it), this , item );
494 } 487 }
495 } 488 }
496 delete folders; 489 delete folders;
497} 490}
498 491
499QPopupMenu * IMAPviewItem::getContextMenu() 492QPopupMenu * IMAPviewItem::getContextMenu()
500{ 493{
501 QPopupMenu *m = new QPopupMenu(0); 494 QPopupMenu *m = new QPopupMenu(0);
502 if (m) 495 if (m)
503 { 496 {
504 if (!account->getOffline()) 497 if (!account->getOffline())
505 { 498 {
506 m->insertItem(QObject::tr("Refresh folder list",contextName),0); 499 m->insertItem(QObject::tr("Refresh folder list",contextName),0);
507 m->insertItem(QObject::tr("Create new folder",contextName),1); 500 m->insertItem(QObject::tr("Create new folder",contextName),1);
508 m->insertSeparator(); 501 m->insertSeparator();
509 m->insertItem(QObject::tr("Disconnect",contextName),2); 502 m->insertItem(QObject::tr("Disconnect",contextName),2);
510 m->insertItem(QObject::tr("Set offline",contextName),3); 503 m->insertItem(QObject::tr("Set offline",contextName),3);
511 } 504 }
512 else 505 else
513 { 506 {
514 m->insertItem(QObject::tr("Set online",contextName),3); 507 m->insertItem(QObject::tr("Set online",contextName),3);
515 } 508 }
516 } 509 }
517 return m; 510 return m;
518} 511}
519 512
520void IMAPviewItem::createNewFolder() 513void IMAPviewItem::createNewFolder()
521{ 514{
522 Newmdirdlg ndirdlg; 515 Newmdirdlg ndirdlg;
523 if ( QPEApplication::execDialog( &ndirdlg )) 516 if ( QPEApplication::execDialog( &ndirdlg ))
524 { 517 {
525 QString ndir = ndirdlg.Newdir(); 518 QString ndir = ndirdlg.Newdir();
526 bool makesubs = ndirdlg.subpossible(); 519 bool makesubs = ndirdlg.subpossible();
527 QString delemiter = "/"; 520 QString delemiter = "/";
528 IMAPfolderItem*item = (IMAPfolderItem*)firstChild(); 521 IMAPfolderItem*item = (IMAPfolderItem*)firstChild();
529 if (item) 522 if (item)
530 { 523 {
531 delemiter = item->Delemiter(); 524 delemiter = item->Delemiter();
532 } 525 }
533 if (wrapper->createMbox(ndir,0,delemiter,makesubs)) 526 if (wrapper->createMbox(ndir,0,delemiter,makesubs))
534 { 527 {
535 refreshFolders(true); 528 refreshFolders(true);
536 } 529 }
537 } 530 }
538} 531}
539 532
540void IMAPviewItem::contextMenuSelected(int id) 533void IMAPviewItem::contextMenuSelected(int id)
541{ 534{
542 qDebug("Id selected: %i",id); 535 qDebug("Id selected: %i",id);
543 switch (id) 536 switch (id)
544 { 537 {
545 case 0: 538 case 0:
546 refreshFolders(true); 539 refreshFolders(true);
547 break; 540 break;
548 case 1: 541 case 1:
549 createNewFolder(); 542 createNewFolder();
550 break; 543 break;
551 case 2: 544 case 2:
552 removeChilds(); 545 removeChilds();
553 wrapper->logout(); 546 wrapper->logout();
554 break; 547 break;
555 case 3: 548 case 3:
556 if (account->getOffline()==false) 549 if (account->getOffline()==false)
557 { 550 {
558 removeChilds(); 551 removeChilds();
559 wrapper->logout(); 552 wrapper->logout();
560 } 553 }
561 account->setOffline(!account->getOffline()); 554 account->setOffline(!account->getOffline());
562 account->save(); 555 account->save();
563 SETPIX(PIXMAP_IMAPFOLDER); 556 SETPIX(PIXMAP_IMAPFOLDER);
564 refreshFolders(false); 557 refreshFolders(false);
565 break; 558 break;
566 default: 559 default:
567 break; 560 break;
568 } 561 }
569} 562}
570 563
571RecBody IMAPviewItem::fetchBody(const RecMail&) 564RecBody IMAPviewItem::fetchBody(const RecMail&)
572{ 565{
573 return RecBody(); 566 return RecBody();
574} 567}
575 568
576bool IMAPviewItem::offline() 569bool IMAPviewItem::offline()
577{ 570{
578 return account->getOffline(); 571 return account->getOffline();
579} 572}
580 573
581IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPviewItem *parent , QListViewItem*after ) 574IMAPfolderItem::IMAPfolderItem( const FolderP& folderInit, IMAPviewItem *parent , QListViewItem*after )
582 : AccountViewItem( parent , after ) 575 : AccountViewItem( folderInit, parent , after )
583{ 576{
584 folder = folderInit;
585 imap = parent; 577 imap = parent;
586 if (folder->getDisplayName().lower()!="inbox") 578 if (folder->getDisplayName().lower()!="inbox")
587 { 579 {
588 setPixmap( 0, PIXMAP_IMAPFOLDER ); 580 setPixmap( 0, PIXMAP_IMAPFOLDER );
589 } 581 }
590 else 582 else
591 { 583 {
592 setPixmap( 0, PIXMAP_INBOXFOLDER); 584 setPixmap( 0, PIXMAP_INBOXFOLDER);
593 } 585 }
594 setText( 0, folder->getDisplayName() ); 586 setText( 0, folder->getDisplayName() );
595} 587}
596 588
597IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master ) 589IMAPfolderItem::IMAPfolderItem(const FolderP &folderInit, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master )
598 : AccountViewItem( parent,after ) 590 : AccountViewItem(folderInit, parent,after )
599{ 591{
600 folder = folderInit;
601 imap = master; 592 imap = master;
602 if (folder->getDisplayName().lower()!="inbox") 593 if (folder->getDisplayName().lower()!="inbox")
603 { 594 {
604 setPixmap( 0, PIXMAP_IMAPFOLDER ); 595 setPixmap( 0, PIXMAP_IMAPFOLDER );
605 } 596 }
606 else 597 else
607 { 598 {
608 setPixmap( 0, PIXMAP_INBOXFOLDER); 599 setPixmap( 0, PIXMAP_INBOXFOLDER);
609 } 600 }
610 setText( 0, folder->getDisplayName() ); 601 setText( 0, folder->getDisplayName() );
611} 602}
612 603
613IMAPfolderItem::~IMAPfolderItem() 604IMAPfolderItem::~IMAPfolderItem()
614{} 605{}
615 606
616const QString& IMAPfolderItem::Delemiter()const 607const QString& IMAPfolderItem::Delemiter()const
617{ 608{
618 return folder->Separator(); 609 return folder->Separator();
619} 610}
620 611
621void IMAPfolderItem::refresh(QList<RecMail>&target) 612void IMAPfolderItem::refresh(QList<RecMail>&target)
622{ 613{
623 if (folder->may_select()) 614 if (folder->may_select())
624 { 615 {
625 imap->getWrapper()->listMessages( folder->getName(),target ); 616 imap->getWrapper()->listMessages( folder->getName(),target );
626 } 617 }
627 else 618 else
628 { 619 {
629 target.clear(); 620 target.clear();
630 } 621 }
631} 622}
632 623
633RecBody IMAPfolderItem::fetchBody(const RecMail&aMail) 624RecBody IMAPfolderItem::fetchBody(const RecMail&aMail)
634{ 625{
635 return imap->getWrapper()->fetchBody(aMail); 626 return imap->getWrapper()->fetchBody(aMail);
636} 627}
637 628
638QPopupMenu * IMAPfolderItem::getContextMenu() 629QPopupMenu * IMAPfolderItem::getContextMenu()
639{ 630{
640 QPopupMenu *m = new QPopupMenu(0); 631 QPopupMenu *m = new QPopupMenu(0);
641 if (m) 632 if (m)
642 { 633 {
643 if (folder->may_select()) 634 if (folder->may_select())
644 { 635 {
645 m->insertItem(QObject::tr("Refresh header list",contextName),0); 636 m->insertItem(QObject::tr("Refresh header list",contextName),0);
646 m->insertItem(QObject::tr("Move/Copie all mails",contextName),4); 637 m->insertItem(QObject::tr("Move/Copie all mails",contextName),4);
647 m->insertItem(QObject::tr("Delete all mails",contextName),1); 638 m->insertItem(QObject::tr("Delete all mails",contextName),1);
648 } 639 }
649 if (folder->no_inferior()==false) 640 if (folder->no_inferior()==false)
650 { 641 {
651 m->insertItem(QObject::tr("Create new subfolder",contextName),2); 642 m->insertItem(QObject::tr("Create new subfolder",contextName),2);
652 } 643 }
653 if (folder->getDisplayName().lower()!="inbox") 644 if (folder->getDisplayName().lower()!="inbox")
654 { 645 {
655 m->insertItem(QObject::tr("Delete folder",contextName),3); 646 m->insertItem(QObject::tr("Delete folder",contextName),3);
656 } 647 }
657 } 648 }
658 return m; 649 return m;
659} 650}
660 651
661void IMAPfolderItem::createNewFolder() 652void IMAPfolderItem::createNewFolder()
662{ 653{
663 Newmdirdlg ndirdlg; 654 Newmdirdlg ndirdlg;
664 if ( QPEApplication::execDialog( &ndirdlg ) ) 655 if ( QPEApplication::execDialog( &ndirdlg ) )
@@ -707,431 +698,433 @@ void IMAPfolderItem::downloadMails()
707void IMAPfolderItem::contextMenuSelected(int id) 698void IMAPfolderItem::contextMenuSelected(int id)
708{ 699{
709 qDebug("Selected id: %i",id); 700 qDebug("Selected id: %i",id);
710 AccountView * view = (AccountView*)listView(); 701 AccountView * view = (AccountView*)listView();
711 switch(id) 702 switch(id)
712 { 703 {
713 case 0: 704 case 0:
714 view->refreshCurrent(); 705 view->refreshCurrent();
715 break; 706 break;
716 case 1: 707 case 1:
717 deleteAllMail(imap->getWrapper(),folder); 708 deleteAllMail(imap->getWrapper(),folder);
718 break; 709 break;
719 case 2: 710 case 2:
720 createNewFolder(); 711 createNewFolder();
721 break; 712 break;
722 case 3: 713 case 3:
723 deleteFolder(); 714 deleteFolder();
724 break; 715 break;
725 case 4: 716 case 4:
726 downloadMails(); 717 downloadMails();
727 break; 718 break;
728 default: 719 default:
729 break; 720 break;
730 } 721 }
731} 722}
732 723
733/** 724/**
734 * MH Account stuff 725 * MH Account stuff
735 */ 726 */
736/* MH is a little bit different - the top folder can contains messages other than in IMAP and 727/* MH is a little bit different - the top folder can contains messages other than in IMAP and
737 POP3 and MBOX */ 728 POP3 and MBOX */
738MHviewItem::MHviewItem( const QString&aPath, AccountView *parent ) 729MHviewItem::MHviewItem( const QString&aPath, AccountView *parent )
739 : AccountViewItem( parent ) 730 : AccountViewItem( parent )
740{ 731{
741 m_Path = aPath; 732 m_Path = aPath;
742 /* be carefull - the space within settext is wanted - thats why the string twice */ 733 /* be carefull - the space within settext is wanted - thats why the string twice */
743 wrapper = AbstractMail::getWrapper( m_Path,"Local Folders"); 734 wrapper = AbstractMail::getWrapper( m_Path,"Local Folders");
744 setPixmap( 0, PIXMAP_LOCALFOLDER ); 735 setPixmap( 0, PIXMAP_LOCALFOLDER );
745 setText( 0, " Local Folders" ); 736 setText( 0, " Local Folders" );
746 setOpen( true ); 737 setOpen( true );
747 folder = 0; 738 folder = 0;
748} 739}
749 740
750MHviewItem::~MHviewItem() 741MHviewItem::~MHviewItem()
751{ 742{
752 delete wrapper; 743 delete wrapper;
753} 744}
754 745
755AbstractMail *MHviewItem::getWrapper() 746AbstractMail *MHviewItem::getWrapper()
756{ 747{
757 return wrapper; 748 return wrapper;
758} 749}
759 750
760void MHviewItem::refresh( QList<RecMail> & target) 751void MHviewItem::refresh( QList<RecMail> & target)
761{ 752{
762 refresh(false); 753 refresh(false);
763 getWrapper()->listMessages( "",target ); 754 getWrapper()->listMessages( "",target );
764} 755}
765 756
766void MHviewItem::refresh(bool force) 757void MHviewItem::refresh(bool force)
767{ 758{
768 if (childCount()>0 && force==false) return; 759 if (childCount()>0 && force==false) return;
769 removeChilds(); 760 removeChilds();
770 currentFolders.clear(); 761 currentFolders.clear();
771 QList<Folder> *folders = wrapper->listFolders(); 762 QValueList<FolderP> *folders = wrapper->listFolders();
772 Folder *it; 763 QValueList<FolderP>::ConstIterator it;
773 MHfolderItem*item = 0; 764 MHfolderItem*item = 0;
774 MHfolderItem*pmaster = 0; 765 MHfolderItem*pmaster = 0;
775 QString fname = ""; 766 QString fname = "";
776 int pos; 767 int pos;
777 for ( it = folders->first(); it; it = folders->next() ) 768 for ( it = folders->begin(); it!=folders->end(); ++it)
778 { 769 {
779 fname = it->getDisplayName(); 770 fname = (*it)->getDisplayName();
780 /* this folder itself */ 771 /* this folder itself */
781 if (fname=="/") 772 if (fname=="/")
782 { 773 {
783 currentFolders.append(fname); 774 currentFolders.append(fname);
784 folder = it; 775 folder = (*it);
785 continue; 776 continue;
786 } 777 }
787 currentFolders.append(fname); 778 currentFolders.append(fname);
788 pos = fname.findRev("/"); 779 pos = fname.findRev("/");
789 if (pos > 0) 780 if (pos > 0)
790 { 781 {
791 fname = fname.left(pos); 782 fname = fname.left(pos);
792 pmaster = (MHfolderItem*)findSubItem(fname); 783 pmaster = (MHfolderItem*)findSubItem(fname);
793 } 784 }
794 else 785 else
795 { 786 {
796 pmaster = 0; 787 pmaster = 0;
797 } 788 }
798 if (pmaster) 789 if (pmaster)
799 { 790 {
800 item = new MHfolderItem( it, pmaster, item, this ); 791 item = new MHfolderItem( (*it), pmaster, item, this );
801 } 792 }
802 else 793 else
803 { 794 {
804 item = new MHfolderItem( it, this , item ); 795 item = new MHfolderItem( (*it), this , item );
805 } 796 }
806 item->setSelectable(it->may_select()); 797 item->setSelectable((*it)->may_select());
807 } 798 }
808 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
809 folders->setAutoDelete(false);
810 delete folders; 799 delete folders;
811} 800}
812 801
813RecBody MHviewItem::fetchBody( const RecMail &mail ) 802RecBody MHviewItem::fetchBody( const RecMail &mail )
814{ 803{
815 qDebug( "MH fetchBody" ); 804 qDebug( "MH fetchBody" );
816 return wrapper->fetchBody( mail ); 805 return wrapper->fetchBody( mail );
817} 806}
818 807
819QPopupMenu * MHviewItem::getContextMenu() 808QPopupMenu * MHviewItem::getContextMenu()
820{ 809{
821 QPopupMenu *m = new QPopupMenu(0); 810 QPopupMenu *m = new QPopupMenu(0);
822 if (m) 811 if (m)
823 { 812 {
824 m->insertItem(QObject::tr("Refresh folder list",contextName),0); 813 m->insertItem(QObject::tr("Refresh folder list",contextName),0);
825 m->insertItem(QObject::tr("Create new folder",contextName),1); 814 m->insertItem(QObject::tr("Create new folder",contextName),1);
826 m->insertItem(QObject::tr("Delete all mails",contextName),2); 815 m->insertItem(QObject::tr("Delete all mails",contextName),2);
827 m->insertItem(QObject::tr("Move/Copie all mails",contextName),3); 816 m->insertItem(QObject::tr("Move/Copie all mails",contextName),3);
828 } 817 }
829 return m; 818 return m;
830} 819}
831 820
832void MHviewItem::createFolder() 821void MHviewItem::createFolder()
833{ 822{
834 Newmdirdlg ndirdlg(0,0,true); 823 Newmdirdlg ndirdlg(0,0,true);
835 if ( QPEApplication::execDialog( &ndirdlg ) ) 824 if ( QPEApplication::execDialog( &ndirdlg ) )
836 { 825 {
837 QString ndir = ndirdlg.Newdir(); 826 QString ndir = ndirdlg.Newdir();
838 if (wrapper->createMbox(ndir)) 827 if (wrapper->createMbox(ndir))
839 { 828 {
840 refresh(true); 829 refresh(true);
841 } 830 }
842 } 831 }
843} 832}
844 833
845void MHviewItem::downloadMails() 834void MHviewItem::downloadMails()
846{ 835{
847 AccountView*bl = accountView(); 836 AccountView*bl = accountView();
848 if (!bl) return; 837 if (!bl) return;
849 bl->downloadMails(folder,getWrapper()); 838 bl->downloadMails(folder,getWrapper());
850} 839}
851 840
852QStringList MHviewItem::subFolders() 841QStringList MHviewItem::subFolders()
853{ 842{
854 return currentFolders; 843 return currentFolders;
855} 844}
856 845
857void MHviewItem::contextMenuSelected(int which) 846void MHviewItem::contextMenuSelected(int which)
858{ 847{
859 switch (which) 848 switch (which)
860 { 849 {
861 case 0: 850 case 0:
862 refresh(true); 851 refresh(true);
863 break; 852 break;
864 case 1: 853 case 1:
865 createFolder(); 854 createFolder();
866 break; 855 break;
867 case 2: 856 case 2:
868 deleteAllMail(getWrapper(),folder); 857 deleteAllMail(getWrapper(),folder);
869 break; 858 break;
870 case 3: 859 case 3:
871 downloadMails(); 860 downloadMails();
872 break; 861 break;
873 default: 862 default:
874 break; 863 break;
875 } 864 }
876} 865}
877 866
878MHfolderItem::~MHfolderItem() 867MHfolderItem::~MHfolderItem()
879{} 868{}
880 869
881MHfolderItem::MHfolderItem( Folder *folderInit, MHviewItem *parent , QListViewItem*after ) 870MHfolderItem::MHfolderItem( const FolderP &folderInit, MHviewItem *parent , QListViewItem*after )
882 : AccountViewItem( parent,after ) 871 : AccountViewItem(folderInit, parent,after )
883{ 872{
884 folder = folderInit;
885 mbox = parent; 873 mbox = parent;
886 initName(); 874 initName();
887} 875}
888 876
889MHfolderItem::MHfolderItem( Folder *folderInit, MHfolderItem *parent, QListViewItem*after, MHviewItem*master) 877MHfolderItem::MHfolderItem(const FolderP& folderInit, MHfolderItem *parent, QListViewItem*after, MHviewItem*master)
890 : AccountViewItem( parent,after ) 878 : AccountViewItem(folderInit, parent,after )
891{ 879{
892 folder = folderInit; 880 folder = folderInit;
893 mbox = master; 881 mbox = master;
894 initName(); 882 initName();
895} 883}
896 884
897void MHfolderItem::initName() 885void MHfolderItem::initName()
898{ 886{
899 QString bName = folder->getDisplayName(); 887 QString bName = folder->getDisplayName();
900 if (bName.startsWith("/")&&bName.length()>1) 888 if (bName.startsWith("/")&&bName.length()>1)
901 { 889 {
902 bName.replace(0,1,""); 890 bName.replace(0,1,"");
903 } 891 }
904 int pos = bName.findRev("/"); 892 int pos = bName.findRev("/");
905 if (pos > 0) 893 if (pos > 0)
906 { 894 {
907 bName.replace(0,pos+1,""); 895 bName.replace(0,pos+1,"");
908 } 896 }
909 if (bName.lower() == "outgoing") 897 if (bName.lower() == "outgoing")
910 { 898 {
911 setPixmap( 0, PIXMAP_OUTBOXFOLDER ); 899 setPixmap( 0, PIXMAP_OUTBOXFOLDER );
912 } 900 }
913 else if (bName.lower() == "inbox") 901 else if (bName.lower() == "inbox")
914 { 902 {
915 setPixmap( 0, PIXMAP_INBOXFOLDER); 903 setPixmap( 0, PIXMAP_INBOXFOLDER);
916 } else if (bName.lower() == "drafts") { 904 } else if (bName.lower() == "drafts") {
917 setPixmap(0, Resource::loadPixmap("inline/edit")); 905 setPixmap(0, Resource::loadPixmap("inline/edit"));
918 } else { 906 } else {
919 setPixmap( 0, PIXMAP_MBOXFOLDER ); 907 setPixmap( 0, PIXMAP_MBOXFOLDER );
920 } 908 }
921 setText( 0, bName ); 909 setText( 0, bName );
922} 910}
923 911
924Folder*MHfolderItem::getFolder() 912const FolderP&MHfolderItem::getFolder()const
925{ 913{
926 return folder; 914 return folder;
927} 915}
928 916
929void MHfolderItem::refresh(QList<RecMail>&target) 917void MHfolderItem::refresh(QList<RecMail>&target)
930{ 918{
931 if (folder->may_select()) 919 if (folder->may_select())
932 mbox->getWrapper()->listMessages( folder->getName(),target ); 920 mbox->getWrapper()->listMessages( folder->getName(),target );
933} 921}
934 922
935RecBody MHfolderItem::fetchBody(const RecMail&aMail) 923RecBody MHfolderItem::fetchBody(const RecMail&aMail)
936{ 924{
937 return mbox->getWrapper()->fetchBody(aMail); 925 return mbox->getWrapper()->fetchBody(aMail);
938} 926}
939 927
940void MHfolderItem::deleteFolder() 928void MHfolderItem::deleteFolder()
941{ 929{
942 int yesno = QMessageBox::warning(0,QObject::tr("Delete folder",contextName), 930 int yesno = QMessageBox::warning(0,QObject::tr("Delete folder",contextName),
943 QObject::tr("<center>Realy delete folder <br><b>%1</b><br>and all if it content?</center>",contextName).arg(folder->getDisplayName()), 931 QObject::tr("<center>Realy delete folder <br><b>%1</b><br>and all if it content?</center>",contextName).arg(folder->getDisplayName()),
944 QObject::tr("Yes",contextName), 932 QObject::tr("Yes",contextName),
945 QObject::tr("No",contextName),QString::null,1,1); 933 QObject::tr("No",contextName),QString::null,1,1);
946 qDebug("Auswahl: %i",yesno); 934 qDebug("Auswahl: %i",yesno);
947 if (yesno == 0) 935 if (yesno == 0)
948 { 936 {
949 if (mbox->getWrapper()->deleteMbox(folder)) 937 if (mbox->getWrapper()->deleteMbox(folder))
950 { 938 {
951 QListView*v=listView(); 939 QListView*v=listView();
952 MHviewItem * box = mbox; 940 MHviewItem * box = mbox;
953 /* be carefull - after that this object is destroyd so don't use 941 /* be carefull - after that this object is destroyd so don't use
954 * any member of it after that call!!*/ 942 * any member of it after that call!!*/
955 mbox->refresh(true); 943 mbox->refresh(true);
956 if (v) 944 if (v)
957 { 945 {
958 v->setSelected(box,true); 946 v->setSelected(box,true);
959 } 947 }
960 } 948 }
961 } 949 }
962} 950}
963 951
964QPopupMenu * MHfolderItem::getContextMenu() 952QPopupMenu * MHfolderItem::getContextMenu()
965{ 953{
966 QPopupMenu *m = new QPopupMenu(0); 954 QPopupMenu *m = new QPopupMenu(0);
967 if (m) 955 if (m)
968 { 956 {
969 m->insertItem(QObject::tr("Move/Copie all mails",contextName),2); 957 m->insertItem(QObject::tr("Move/Copie all mails",contextName),2);
970 m->insertItem(QObject::tr("Delete all mails",contextName),0); 958 m->insertItem(QObject::tr("Delete all mails",contextName),0);
971 m->insertItem(QObject::tr("Create new subfolder",contextName),3); 959 m->insertItem(QObject::tr("Create new subfolder",contextName),3);
972 m->insertItem(QObject::tr("Delete folder",contextName),1); 960 m->insertItem(QObject::tr("Delete folder",contextName),1);
973 } 961 }
974 return m; 962 return m;
975} 963}
976 964
977void MHfolderItem::downloadMails() 965void MHfolderItem::downloadMails()
978{ 966{
979 AccountView*bl = mbox->accountView(); 967 AccountView*bl = mbox->accountView();
980 if (!bl) return; 968 if (!bl) return;
981 bl->downloadMails(folder,mbox->getWrapper()); 969 bl->downloadMails(folder,mbox->getWrapper());
982} 970}
983 971
984void MHfolderItem::createFolder() 972void MHfolderItem::createFolder()
985{ 973{
986 Newmdirdlg ndirdlg(0,0,true); 974 Newmdirdlg ndirdlg(0,0,true);
987 if ( QPEApplication::execDialog( &ndirdlg ) ) 975 if ( QPEApplication::execDialog( &ndirdlg ) )
988 { 976 {
989 QString ndir = ndirdlg.Newdir(); 977 QString ndir = ndirdlg.Newdir();
990 if (mbox->getWrapper()->createMbox(ndir,folder)) 978 if (mbox->getWrapper()->createMbox(ndir,folder))
991 { 979 {
992 QListView*v=listView(); 980 QListView*v=listView();
993 MHviewItem * box = mbox; 981 MHviewItem * box = mbox;
994 /* be carefull - after that this object is destroyd so don't use 982 /* be carefull - after that this object is destroyd so don't use
995 * any member of it after that call!!*/ 983 * any member of it after that call!!*/
996 mbox->refresh(true); 984 mbox->refresh(true);
997 if (v) 985 if (v)
998 { 986 {
999 v->setSelected(box,true); 987 v->setSelected(box,true);
1000 } 988 }
1001 } 989 }
1002 } 990 }
1003} 991}
1004 992
1005void MHfolderItem::contextMenuSelected(int which) 993void MHfolderItem::contextMenuSelected(int which)
1006{ 994{
1007 switch(which) 995 switch(which)
1008 { 996 {
1009 case 0: 997 case 0:
1010 deleteAllMail(mbox->getWrapper(),folder); 998 deleteAllMail(mbox->getWrapper(),folder);
1011 break; 999 break;
1012 case 1: 1000 case 1:
1013 deleteFolder(); 1001 deleteFolder();
1014 break; 1002 break;
1015 case 2: 1003 case 2:
1016 downloadMails(); 1004 downloadMails();
1017 break; 1005 break;
1018 case 3: 1006 case 3:
1019 createFolder(); 1007 createFolder();
1020 break; 1008 break;
1021 default: 1009 default:
1022 break; 1010 break;
1023 } 1011 }
1024} 1012}
1025 1013
1026bool MHfolderItem::isDraftfolder() 1014bool MHfolderItem::isDraftfolder()
1027{ 1015{
1028 if (folder && folder->getName()==AbstractMail::defaultLocalfolder()+"/"+AbstractMail::draftFolder()) return true; 1016 if (folder && folder->getName()==AbstractMail::defaultLocalfolder()+"/"+AbstractMail::draftFolder()) return true;
1029 return false; 1017 return false;
1030} 1018}
1031 1019
1032/** 1020/**
1033 * Generic stuff 1021 * Generic stuff
1034 */ 1022 */
1035 1023
1036const QString AccountViewItem::contextName="AccountViewItem"; 1024const QString AccountViewItem::contextName="AccountViewItem";
1037 1025
1038AccountViewItem::AccountViewItem( AccountView *parent ) 1026AccountViewItem::AccountViewItem( AccountView *parent )
1039 : QListViewItem( parent ) 1027 : QListViewItem( parent )
1040{ 1028{
1041 init(); 1029 init();
1042 m_Backlink = parent; 1030 m_Backlink = parent;
1043} 1031}
1044 1032
1045AccountViewItem::AccountViewItem( QListViewItem *parent) 1033AccountViewItem::AccountViewItem( QListViewItem *parent)
1046 : QListViewItem( parent) 1034 : QListViewItem( parent),folder(0)
1047{ 1035{
1048 init(); 1036 init();
1049} 1037}
1050 1038
1051AccountViewItem::AccountViewItem( QListViewItem *parent , QListViewItem*after ) 1039AccountViewItem::AccountViewItem( QListViewItem *parent , QListViewItem*after )
1052 :QListViewItem( parent,after ) 1040 :QListViewItem( parent,after ),folder(0)
1041{
1042 init();
1043}
1044
1045AccountViewItem::AccountViewItem( const Opie::osmart_pointer<Folder>&folderInit,QListViewItem *parent , QListViewItem*after )
1046 :QListViewItem( parent,after ),folder(folderInit)
1053{ 1047{
1054 init(); 1048 init();
1055} 1049}
1056 1050
1057void AccountViewItem::init() 1051void AccountViewItem::init()
1058{ 1052{
1059 m_Backlink = 0; 1053 m_Backlink = 0;
1060 folder = 0;
1061} 1054}
1062 1055
1063AccountViewItem::~AccountViewItem() 1056AccountViewItem::~AccountViewItem()
1064{ 1057{
1065 if (folder) delete folder; 1058 folder = 0;
1066} 1059}
1067 1060
1068AccountView*AccountViewItem::accountView() 1061AccountView*AccountViewItem::accountView()
1069{ 1062{
1070 return m_Backlink; 1063 return m_Backlink;
1071} 1064}
1072 1065
1073void AccountViewItem::deleteAllMail(AbstractMail*wrapper,Folder*folder) 1066void AccountViewItem::deleteAllMail(AbstractMail*wrapper,const FolderP&folder)
1074{ 1067{
1075 if (!wrapper) return; 1068 if (!wrapper) return;
1076 QString fname=""; 1069 QString fname="";
1077 if (folder) fname = folder->getDisplayName(); 1070 if (folder) fname = folder->getDisplayName();
1078 int yesno = QMessageBox::warning(0,QObject::tr("Delete all mails",contextName), 1071 int yesno = QMessageBox::warning(0,QObject::tr("Delete all mails",contextName),
1079 QObject::tr("<center>Realy delete all mails in box <br>%1</center>",contextName). 1072 QObject::tr("<center>Realy delete all mails in box <br>%1</center>",contextName).
1080 arg(fname), 1073 arg(fname),
1081 QObject::tr("Yes",contextName), 1074 QObject::tr("Yes",contextName),
1082 QObject::tr("No",contextName),QString::null,1,1); 1075 QObject::tr("No",contextName),QString::null,1,1);
1083 qDebug("Auswahl: %i",yesno); 1076 qDebug("Auswahl: %i",yesno);
1084 if (yesno == 0) 1077 if (yesno == 0)
1085 { 1078 {
1086 if (wrapper->deleteAllMail(folder)) 1079 if (wrapper->deleteAllMail(folder))
1087 { 1080 {
1088 AccountView * view = (AccountView*)listView(); 1081 AccountView * view = (AccountView*)listView();
1089 if (view) view->refreshCurrent(); 1082 if (view) view->refreshCurrent();
1090 } 1083 }
1091 } 1084 }
1092} 1085}
1093 1086
1094void AccountViewItem::removeChilds() 1087void AccountViewItem::removeChilds()
1095{ 1088{
1096 QListViewItem *child = firstChild(); 1089 QListViewItem *child = firstChild();
1097 while ( child ) 1090 while ( child )
1098 { 1091 {
1099 QListViewItem *tmp = child; 1092 QListViewItem *tmp = child;
1100 child = child->nextSibling(); 1093 child = child->nextSibling();
1101 delete tmp; 1094 delete tmp;
1102 } 1095 }
1103} 1096}
1104 1097
1105bool AccountViewItem::matchName(const QString&name)const 1098bool AccountViewItem::matchName(const QString&name)const
1106{ 1099{
1107 if (!folder) return false; 1100 if (!folder) return false;
1108 return folder->getDisplayName()==name; 1101 return folder->getDisplayName()==name;
1109} 1102}
1110 1103
1111 1104
1112AccountViewItem*AccountViewItem::findSubItem(const QString&path,AccountViewItem*start) 1105AccountViewItem*AccountViewItem::findSubItem(const QString&path,AccountViewItem*start)
1113{ 1106{
1114 AccountViewItem*pitem,*sitem; 1107 AccountViewItem*pitem,*sitem;
1115 if (!start) pitem = (AccountViewItem*)firstChild(); 1108 if (!start) pitem = (AccountViewItem*)firstChild();
1116 else pitem = (AccountViewItem*)start->firstChild(); 1109 else pitem = (AccountViewItem*)start->firstChild();
1117 while (pitem) 1110 while (pitem)
1118 { 1111 {
1119 if (pitem->matchName(path)) 1112 if (pitem->matchName(path))
1120 { 1113 {
1121 break; 1114 break;
1122 } 1115 }
1123 if (pitem->childCount()>0) 1116 if (pitem->childCount()>0)
1124 { 1117 {
1125 sitem = findSubItem(path,pitem); 1118 sitem = findSubItem(path,pitem);
1126 if (sitem) 1119 if (sitem)
1127 { 1120 {
1128 pitem = sitem; 1121 pitem = sitem;
1129 break; 1122 break;
1130 } 1123 }
1131 } 1124 }
1132 pitem=(AccountViewItem*)pitem->nextSibling(); 1125 pitem=(AccountViewItem*)pitem->nextSibling();
1133 } 1126 }
1134 return pitem; 1127 return pitem;
1135} 1128}
1136 1129
1137bool AccountViewItem::isDraftfolder() 1130bool AccountViewItem::isDraftfolder()
diff --git a/noncore/net/mail/accountitem.h b/noncore/net/mail/accountitem.h
index eb3baa3..8f712f5 100644
--- a/noncore/net/mail/accountitem.h
+++ b/noncore/net/mail/accountitem.h
@@ -1,207 +1,210 @@
1#ifndef __ACCOUNT_ITEM 1#ifndef __ACCOUNT_ITEM
2#define __ACCOUNT_ITEM 2#define __ACCOUNT_ITEM
3 3
4#include <qlistview.h> 4#include <qlistview.h>
5#include <qlist.h> 5#include <qlist.h>
6#include <opie2/osmart_pointer.h>
6 7
7class POP3wrapper; 8class POP3wrapper;
8class RecMail; 9class RecMail;
9class RecBody; 10class RecBody;
10class QPopupMenu; 11class QPopupMenu;
11class Selectstore; 12class Selectstore;
12class AccountView; 13class AccountView;
13class POP3account; 14class POP3account;
14class NNTPaccount; 15class NNTPaccount;
15class IMAPaccount; 16class IMAPaccount;
16class AbstractMail; 17class AbstractMail;
17class Folder; 18class Folder;
18 19
19class AccountViewItem : public QListViewItem 20class AccountViewItem : public QListViewItem
20{ 21{
21 22
22public: 23public:
23 AccountViewItem( AccountView *parent ); 24 AccountViewItem( AccountView *parent );
24 AccountViewItem( QListViewItem *parent); 25 AccountViewItem( QListViewItem *parent);
25 AccountViewItem( QListViewItem *parent , QListViewItem*after ); 26 AccountViewItem( QListViewItem *parent , QListViewItem*after );
27 AccountViewItem( const Opie::osmart_pointer<Folder>&folderInit,QListViewItem *parent , QListViewItem*after );
28
26 virtual ~AccountViewItem(); 29 virtual ~AccountViewItem();
27 virtual void refresh(QList<RecMail>&)=0; 30 virtual void refresh(QList<RecMail>&)=0;
28 virtual RecBody fetchBody(const RecMail&)=0; 31 virtual RecBody fetchBody(const RecMail&)=0;
29 virtual QPopupMenu * getContextMenu(){return 0;}; 32 virtual QPopupMenu * getContextMenu(){return 0;};
30 virtual void contextMenuSelected(int){} 33 virtual void contextMenuSelected(int){}
31 virtual AccountView*accountView(); 34 virtual AccountView*accountView();
32 virtual bool matchName(const QString&name)const; 35 virtual bool matchName(const QString&name)const;
33 virtual bool isDraftfolder(); 36 virtual bool isDraftfolder();
34 37
35protected: 38protected:
36 AccountViewItem*findSubItem(const QString&path,AccountViewItem*start=0); 39 AccountViewItem*findSubItem(const QString&path,AccountViewItem*start=0);
37 virtual void init(); 40 virtual void init();
38 virtual void removeChilds(); 41 virtual void removeChilds();
39 virtual void deleteAllMail(AbstractMail*wrapper,Folder*f); 42 virtual void deleteAllMail(AbstractMail*wrapper,const Opie::osmart_pointer<Folder>&f);
40 static const QString contextName; 43 static const QString contextName;
41 AccountView*m_Backlink; 44 AccountView*m_Backlink;
42 Folder *folder; 45 Opie::osmart_pointer<Folder> folder;
43}; 46};
44 47
45class POP3viewItem : public AccountViewItem 48class POP3viewItem : public AccountViewItem
46{ 49{
47 50
48public: 51public:
49 POP3viewItem( POP3account *a, AccountView *parent ); 52 POP3viewItem( POP3account *a, AccountView *parent );
50 virtual ~POP3viewItem(); 53 virtual ~POP3viewItem();
51 virtual void refresh( QList<RecMail> &target ); 54 virtual void refresh( QList<RecMail> &target );
52 virtual RecBody fetchBody( const RecMail &mail ); 55 virtual RecBody fetchBody( const RecMail &mail );
53 AbstractMail *getWrapper(); 56 AbstractMail *getWrapper();
54 virtual QPopupMenu * getContextMenu(); 57 virtual QPopupMenu * getContextMenu();
55 virtual void contextMenuSelected(int); 58 virtual void contextMenuSelected(int);
56 59
57protected: 60protected:
58 POP3account *account; 61 POP3account *account;
59 virtual void refresh(); 62 virtual void refresh();
60 AbstractMail *wrapper; 63 AbstractMail *wrapper;
61 void disconnect(); 64 void disconnect();
62 void setOnOffline(); 65 void setOnOffline();
63}; 66};
64 67
65class POP3folderItem : public AccountViewItem 68class POP3folderItem : public AccountViewItem
66{ 69{
67 70
68public: 71public:
69 POP3folderItem( Folder *folder, POP3viewItem *parent , QListViewItem*after ); 72 POP3folderItem( const Opie::osmart_pointer<Folder>&folder, POP3viewItem *parent , QListViewItem*after );
70 virtual ~POP3folderItem(); 73 virtual ~POP3folderItem();
71 virtual void refresh(QList<RecMail>&); 74 virtual void refresh(QList<RecMail>&);
72 virtual RecBody fetchBody(const RecMail&); 75 virtual RecBody fetchBody(const RecMail&);
73 virtual QPopupMenu * getContextMenu(); 76 virtual QPopupMenu * getContextMenu();
74 virtual void contextMenuSelected(int); 77 virtual void contextMenuSelected(int);
75 78
76protected: 79protected:
77 void downloadMails(); 80 void downloadMails();
78 POP3viewItem *pop3; 81 POP3viewItem *pop3;
79}; 82};
80 83
81 84
82class NNTPviewItem : public AccountViewItem 85class NNTPviewItem : public AccountViewItem
83{ 86{
84 87
85public: 88public:
86 NNTPviewItem( NNTPaccount *a, AccountView *parent ); 89 NNTPviewItem( NNTPaccount *a, AccountView *parent );
87 virtual ~NNTPviewItem(); 90 virtual ~NNTPviewItem();
88 virtual void refresh( QList<RecMail> &target ); 91 virtual void refresh( QList<RecMail> &target );
89 virtual RecBody fetchBody( const RecMail &mail ); 92 virtual RecBody fetchBody( const RecMail &mail );
90 AbstractMail *getWrapper(); 93 AbstractMail *getWrapper();
91 virtual QPopupMenu * getContextMenu(); 94 virtual QPopupMenu * getContextMenu();
92 virtual void contextMenuSelected(int); 95 virtual void contextMenuSelected(int);
93 96
94protected: 97protected:
95 NNTPaccount *account; 98 NNTPaccount *account;
96 virtual void refresh(); 99 virtual void refresh();
97 AbstractMail *wrapper; 100 AbstractMail *wrapper;
98 void disconnect(); 101 void disconnect();
99 void setOnOffline(); 102 void setOnOffline();
100 void subscribeGroups(); 103 void subscribeGroups();
101}; 104};
102 105
103class NNTPfolderItem : public AccountViewItem 106class NNTPfolderItem : public AccountViewItem
104{ 107{
105 108
106public: 109public:
107 NNTPfolderItem( Folder *folder, NNTPviewItem *parent , QListViewItem*after ); 110 NNTPfolderItem(const Opie::osmart_pointer<Folder>&folder, NNTPviewItem *parent , QListViewItem*after );
108 virtual ~NNTPfolderItem(); 111 virtual ~NNTPfolderItem();
109 virtual void refresh(QList<RecMail>&); 112 virtual void refresh(QList<RecMail>&);
110 virtual RecBody fetchBody(const RecMail&); 113 virtual RecBody fetchBody(const RecMail&);
111 virtual QPopupMenu * getContextMenu(); 114 virtual QPopupMenu * getContextMenu();
112 virtual void contextMenuSelected(int); 115 virtual void contextMenuSelected(int);
113 116
114protected: 117protected:
115 void downloadMails(); 118 void downloadMails();
116 NNTPviewItem *nntp; 119 NNTPviewItem *nntp;
117}; 120};
118 121
119 122
120 123
121class IMAPviewItem : public AccountViewItem 124class IMAPviewItem : public AccountViewItem
122{ 125{
123 friend class IMAPfolderItem; 126 friend class IMAPfolderItem;
124public: 127public:
125 IMAPviewItem( IMAPaccount *a, AccountView *parent ); 128 IMAPviewItem( IMAPaccount *a, AccountView *parent );
126 virtual ~IMAPviewItem(); 129 virtual ~IMAPviewItem();
127 virtual void refresh(QList<RecMail>&); 130 virtual void refresh(QList<RecMail>&);
128 virtual RecBody fetchBody(const RecMail&); 131 virtual RecBody fetchBody(const RecMail&);
129 AbstractMail *getWrapper(); 132 AbstractMail *getWrapper();
130 virtual QPopupMenu * getContextMenu(); 133 virtual QPopupMenu * getContextMenu();
131 virtual void contextMenuSelected(int); 134 virtual void contextMenuSelected(int);
132 const QStringList&subFolders(); 135 const QStringList&subFolders();
133 virtual void refreshFolders(bool force=false); 136 virtual void refreshFolders(bool force=false);
134 bool offline(); 137 bool offline();
135 138
136protected: 139protected:
137 virtual void createNewFolder(); 140 virtual void createNewFolder();
138 IMAPaccount *account; 141 IMAPaccount *account;
139 AbstractMail *wrapper; 142 AbstractMail *wrapper;
140 QStringList currentFolders; 143 QStringList currentFolders;
141}; 144};
142 145
143class IMAPfolderItem : public AccountViewItem 146class IMAPfolderItem : public AccountViewItem
144{ 147{
145 148
146public: 149public:
147 IMAPfolderItem( Folder *folder, IMAPviewItem *parent , QListViewItem*after ); 150 IMAPfolderItem( const Opie::osmart_pointer<Folder>&folder, IMAPviewItem *parent , QListViewItem*after );
148 IMAPfolderItem( Folder *folder, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master ); 151 IMAPfolderItem( const Opie::osmart_pointer<Folder>&folder, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master );
149 virtual ~IMAPfolderItem(); 152 virtual ~IMAPfolderItem();
150 virtual void refresh(QList<RecMail>&); 153 virtual void refresh(QList<RecMail>&);
151 virtual RecBody fetchBody(const RecMail&); 154 virtual RecBody fetchBody(const RecMail&);
152 virtual QPopupMenu * getContextMenu(); 155 virtual QPopupMenu * getContextMenu();
153 virtual void contextMenuSelected(int); 156 virtual void contextMenuSelected(int);
154 virtual const QString& Delemiter()const; 157 virtual const QString& Delemiter()const;
155protected: 158protected:
156 virtual void createNewFolder(); 159 virtual void createNewFolder();
157 virtual void deleteFolder(); 160 virtual void deleteFolder();
158 virtual void downloadMails(); 161 virtual void downloadMails();
159 IMAPviewItem *imap; 162 IMAPviewItem *imap;
160}; 163};
161 164
162class MHviewItem : public AccountViewItem 165class MHviewItem : public AccountViewItem
163{ 166{
164 friend class MHfolderItem; 167 friend class MHfolderItem;
165 168
166public: 169public:
167 MHviewItem( const QString&aMboxPath, AccountView *parent ); 170 MHviewItem( const QString&aMboxPath, AccountView *parent );
168 virtual ~MHviewItem(); 171 virtual ~MHviewItem();
169 virtual void refresh( QList<RecMail> &target ); 172 virtual void refresh( QList<RecMail> &target );
170 virtual RecBody fetchBody( const RecMail &mail ); 173 virtual RecBody fetchBody( const RecMail &mail );
171 AbstractMail *getWrapper(); 174 AbstractMail *getWrapper();
172 virtual QPopupMenu * getContextMenu(); 175 virtual QPopupMenu * getContextMenu();
173 virtual void contextMenuSelected(int); 176 virtual void contextMenuSelected(int);
174 QStringList subFolders(); 177 QStringList subFolders();
175 virtual void refresh(bool force=false); 178 virtual void refresh(bool force=false);
176 179
177protected: 180protected:
178 void downloadMails(); 181 void downloadMails();
179 virtual void createFolder(); 182 virtual void createFolder();
180 QString m_Path; 183 QString m_Path;
181 AbstractMail *wrapper; 184 AbstractMail *wrapper;
182 QStringList currentFolders; 185 QStringList currentFolders;
183}; 186};
184 187
185class MHfolderItem : public AccountViewItem 188class MHfolderItem : public AccountViewItem
186{ 189{
187 190
188public: 191public:
189 MHfolderItem( Folder *folder, MHviewItem *parent , QListViewItem*after ); 192 MHfolderItem( const Opie::osmart_pointer<Folder>&folder, MHviewItem *parent , QListViewItem*after );
190 MHfolderItem( Folder *folder, MHfolderItem *parent, QListViewItem*after, MHviewItem*master); 193 MHfolderItem( const Opie::osmart_pointer<Folder>&folder, MHfolderItem *parent, QListViewItem*after, MHviewItem*master);
191 virtual ~MHfolderItem(); 194 virtual ~MHfolderItem();
192 virtual void refresh(QList<RecMail>&); 195 virtual void refresh(QList<RecMail>&);
193 virtual RecBody fetchBody(const RecMail&); 196 virtual RecBody fetchBody(const RecMail&);
194 virtual QPopupMenu * getContextMenu(); 197 virtual QPopupMenu * getContextMenu();
195 virtual void contextMenuSelected(int); 198 virtual void contextMenuSelected(int);
196 virtual Folder*getFolder(); 199 virtual const Opie::osmart_pointer<Folder>&getFolder()const;
197 virtual bool isDraftfolder(); 200 virtual bool isDraftfolder();
198 201
199protected: 202protected:
200 void downloadMails(); 203 void downloadMails();
201 virtual void createFolder(); 204 virtual void createFolder();
202 virtual void deleteFolder(); 205 virtual void deleteFolder();
203 void initName(); 206 void initName();
204 MHviewItem *mbox; 207 MHviewItem *mbox;
205}; 208};
206 209
207#endif 210#endif
diff --git a/noncore/net/mail/accountview.cpp b/noncore/net/mail/accountview.cpp
index 7938d4f..297f553 100644
--- a/noncore/net/mail/accountview.cpp
+++ b/noncore/net/mail/accountview.cpp
@@ -82,96 +82,96 @@ void AccountView::populate( QList<Account> list )
82 /* must not be hold 'cause it isn't required */ 82 /* must not be hold 'cause it isn't required */
83 (void) new NNTPviewItem( nntp, this ); 83 (void) new NNTPviewItem( nntp, this );
84 } 84 }
85 } 85 }
86} 86}
87 87
88void AccountView::refresh(QListViewItem *item) 88void AccountView::refresh(QListViewItem *item)
89{ 89{
90 90
91 qDebug("AccountView refresh..."); 91 qDebug("AccountView refresh...");
92 if ( item ) 92 if ( item )
93 { 93 {
94 m_currentItem = item; 94 m_currentItem = item;
95 QList<RecMail> headerlist; 95 QList<RecMail> headerlist;
96 headerlist.setAutoDelete(true); 96 headerlist.setAutoDelete(true);
97 AccountViewItem *view = static_cast<AccountViewItem *>(item); 97 AccountViewItem *view = static_cast<AccountViewItem *>(item);
98 view->refresh(headerlist); 98 view->refresh(headerlist);
99 emit refreshMailview(&headerlist); 99 emit refreshMailview(&headerlist);
100 } 100 }
101} 101}
102 102
103void AccountView::refreshCurrent() 103void AccountView::refreshCurrent()
104{ 104{
105 m_currentItem = currentItem(); 105 m_currentItem = currentItem();
106 if ( !m_currentItem ) return; 106 if ( !m_currentItem ) return;
107 QList<RecMail> headerlist; 107 QList<RecMail> headerlist;
108 headerlist.setAutoDelete(true); 108 headerlist.setAutoDelete(true);
109 AccountViewItem *view = static_cast<AccountViewItem *>(m_currentItem); 109 AccountViewItem *view = static_cast<AccountViewItem *>(m_currentItem);
110 view->refresh(headerlist); 110 view->refresh(headerlist);
111 emit refreshMailview(&headerlist); 111 emit refreshMailview(&headerlist);
112} 112}
113 113
114void AccountView::refreshAll() 114void AccountView::refreshAll()
115{ 115{
116} 116}
117 117
118RecBody AccountView::fetchBody(const RecMail&aMail) 118RecBody AccountView::fetchBody(const RecMail&aMail)
119{ 119{
120 QListViewItem*item = selectedItem (); 120 QListViewItem*item = selectedItem ();
121 if (!item) return RecBody(); 121 if (!item) return RecBody();
122 AccountViewItem *view = static_cast<AccountViewItem *>(item); 122 AccountViewItem *view = static_cast<AccountViewItem *>(item);
123 return view->fetchBody(aMail); 123 return view->fetchBody(aMail);
124} 124}
125 125
126void AccountView::setupFolderselect(Selectstore*sels) 126void AccountView::setupFolderselect(Selectstore*sels)
127{ 127{
128 QPEApplication::showDialog( sels ); 128 QPEApplication::showDialog( sels );
129 QStringList sFolders; 129 QStringList sFolders;
130 unsigned int i = 0; 130 unsigned int i = 0;
131 for (i=0; i < mhAccounts.count();++i) 131 for (i=0; i < mhAccounts.count();++i)
132 { 132 {
133 mhAccounts[i]->refresh(false); 133 mhAccounts[i]->refresh(false);
134 sFolders = mhAccounts[i]->subFolders(); 134 sFolders = mhAccounts[i]->subFolders();
135 sels->addAccounts(mhAccounts[i]->getWrapper(),sFolders); 135 sels->addAccounts(mhAccounts[i]->getWrapper(),sFolders);
136 } 136 }
137 for (i=0; i < imapAccounts.count();++i) 137 for (i=0; i < imapAccounts.count();++i)
138 { 138 {
139 if (imapAccounts[i]->offline()) 139 if (imapAccounts[i]->offline())
140 continue; 140 continue;
141 imapAccounts[i]->refreshFolders(false); 141 imapAccounts[i]->refreshFolders(false);
142 sels->addAccounts(imapAccounts[i]->getWrapper(),imapAccounts[i]->subFolders()); 142 sels->addAccounts(imapAccounts[i]->getWrapper(),imapAccounts[i]->subFolders());
143 } 143 }
144} 144}
145 145
146void AccountView::downloadMails(Folder*fromFolder,AbstractMail*fromWrapper) 146void AccountView::downloadMails(const FolderP&fromFolder,AbstractMail*fromWrapper)
147{ 147{
148 AbstractMail*targetMail = 0; 148 AbstractMail*targetMail = 0;
149 QString targetFolder = ""; 149 QString targetFolder = "";
150 Selectstore sels; 150 Selectstore sels;
151 setupFolderselect(&sels); 151 setupFolderselect(&sels);
152 if (!sels.exec()) return; 152 if (!sels.exec()) return;
153 targetMail = sels.currentMail(); 153 targetMail = sels.currentMail();
154 targetFolder = sels.currentFolder(); 154 targetFolder = sels.currentFolder();
155 if ( (fromWrapper==targetMail && fromFolder->getName()==targetFolder) || 155 if ( (fromWrapper==targetMail && fromFolder->getName()==targetFolder) ||
156 targetFolder.isEmpty()) 156 targetFolder.isEmpty())
157 { 157 {
158 return; 158 return;
159 } 159 }
160 if (sels.newFolder() && !targetMail->createMbox(targetFolder)) 160 if (sels.newFolder() && !targetMail->createMbox(targetFolder))
161 { 161 {
162 QMessageBox::critical(0,tr("Error creating new Folder"), 162 QMessageBox::critical(0,tr("Error creating new Folder"),
163 tr("<center>Error while creating<br>new folder - breaking.</center>")); 163 tr("<center>Error while creating<br>new folder - breaking.</center>"));
164 return; 164 return;
165 } 165 }
166 qDebug("Targetfolder: %s",targetFolder.latin1()); 166 qDebug("Targetfolder: %s",targetFolder.latin1());
167 qDebug("Fromfolder: %s",fromFolder->getName().latin1()); 167 qDebug("Fromfolder: %s",fromFolder->getName().latin1());
168 fromWrapper->mvcpAllMails(fromFolder,targetFolder,targetMail,sels.moveMails()); 168 fromWrapper->mvcpAllMails(fromFolder,targetFolder,targetMail,sels.moveMails());
169 refreshCurrent(); 169 refreshCurrent();
170} 170}
171 171
172bool AccountView::currentisDraft() 172bool AccountView::currentisDraft()
173{ 173{
174 AccountViewItem *view = static_cast<AccountViewItem *>(currentItem()); 174 AccountViewItem *view = static_cast<AccountViewItem *>(currentItem());
175 if (!view) return false; 175 if (!view) return false;
176 return view->isDraftfolder(); 176 return view->isDraftfolder();
177} 177}
diff --git a/noncore/net/mail/accountview.h b/noncore/net/mail/accountview.h
index 5000202..3478c0b 100644
--- a/noncore/net/mail/accountview.h
+++ b/noncore/net/mail/accountview.h
@@ -1,45 +1,46 @@
1#ifndef ACCOUNTVIEW_H 1#ifndef ACCOUNTVIEW_H
2#define ACCOUNTVIEW_H 2#define ACCOUNTVIEW_H
3 3
4#include <qlistview.h> 4#include <qlistview.h>
5#include <qlist.h> 5#include <qlist.h>
6#include <opie2/osmart_pointer.h>
6 7
7class Selectstore; 8class Selectstore;
8class RecMail; 9class RecMail;
9class RecBody; 10class RecBody;
10class Folder; 11class Folder;
11class AbstractMail; 12class AbstractMail;
12class Account; 13class Account;
13class IMAPviewItem; 14class IMAPviewItem;
14class MHviewItem; 15class MHviewItem;
15 16
16class AccountView : public QListView 17class AccountView : public QListView
17{ 18{
18 Q_OBJECT 19 Q_OBJECT
19 20
20public: 21public:
21 AccountView( QWidget *parent = 0, const char *name = 0, WFlags flags = 0 ); 22 AccountView( QWidget *parent = 0, const char *name = 0, WFlags flags = 0 );
22 virtual ~AccountView(); 23 virtual ~AccountView();
23 virtual void populate( QList<Account> list ); 24 virtual void populate( QList<Account> list );
24 virtual RecBody fetchBody(const RecMail&aMail); 25 virtual RecBody fetchBody(const RecMail&aMail);
25 virtual void downloadMails(Folder*fromFolder,AbstractMail*fromWrapper); 26 virtual void downloadMails(const Opie::osmart_pointer<Folder>&fromFolder,AbstractMail*fromWrapper);
26 virtual bool currentisDraft(); 27 virtual bool currentisDraft();
27 28
28public slots: 29public slots:
29 virtual void refreshAll(); 30 virtual void refreshAll();
30 virtual void refresh(QListViewItem *item); 31 virtual void refresh(QListViewItem *item);
31 virtual void refreshCurrent(); 32 virtual void refreshCurrent();
32 virtual void slotHold(int, QListViewItem *,const QPoint&,int); 33 virtual void slotHold(int, QListViewItem *,const QPoint&,int);
33 virtual void slotContextMenu(int id); 34 virtual void slotContextMenu(int id);
34 void setupFolderselect(Selectstore*sels); 35 void setupFolderselect(Selectstore*sels);
35 36
36signals: 37signals:
37 void refreshMailview(QList<RecMail>*); 38 void refreshMailview(QList<RecMail>*);
38 39
39protected: 40protected:
40 QListViewItem* m_currentItem; 41 QListViewItem* m_currentItem;
41 QValueList<IMAPviewItem*> imapAccounts; 42 QValueList<IMAPviewItem*> imapAccounts;
42 QValueList<MHviewItem*> mhAccounts; 43 QValueList<MHviewItem*> mhAccounts;
43}; 44};
44 45
45#endif 46#endif
diff --git a/noncore/net/mail/libmailwrapper/abstractmail.cpp b/noncore/net/mail/libmailwrapper/abstractmail.cpp
index ac6f380..7e6d383 100644
--- a/noncore/net/mail/libmailwrapper/abstractmail.cpp
+++ b/noncore/net/mail/libmailwrapper/abstractmail.cpp
@@ -50,117 +50,118 @@ AbstractMail* AbstractMail::getWrapper(Account*a)
50} 50}
51 51
52encodedString* AbstractMail::decode_String(const encodedString*text,const QString&enc) 52encodedString* AbstractMail::decode_String(const encodedString*text,const QString&enc)
53{ 53{
54 qDebug("Decode string start"); 54 qDebug("Decode string start");
55 char*result_text; 55 char*result_text;
56 size_t index = 0; 56 size_t index = 0;
57 /* reset for recursive use! */ 57 /* reset for recursive use! */
58 size_t target_length = 0; 58 size_t target_length = 0;
59 result_text = 0; 59 result_text = 0;
60 int mimetype = MAILMIME_MECHANISM_7BIT; 60 int mimetype = MAILMIME_MECHANISM_7BIT;
61 if (enc.lower()=="quoted-printable") { 61 if (enc.lower()=="quoted-printable") {
62 mimetype = MAILMIME_MECHANISM_QUOTED_PRINTABLE; 62 mimetype = MAILMIME_MECHANISM_QUOTED_PRINTABLE;
63 } else if (enc.lower()=="base64") { 63 } else if (enc.lower()=="base64") {
64 mimetype = MAILMIME_MECHANISM_BASE64; 64 mimetype = MAILMIME_MECHANISM_BASE64;
65 } else if (enc.lower()=="8bit") { 65 } else if (enc.lower()=="8bit") {
66 mimetype = MAILMIME_MECHANISM_8BIT; 66 mimetype = MAILMIME_MECHANISM_8BIT;
67 } else if (enc.lower()=="binary") { 67 } else if (enc.lower()=="binary") {
68 mimetype = MAILMIME_MECHANISM_BINARY; 68 mimetype = MAILMIME_MECHANISM_BINARY;
69 } 69 }
70 70
71 int err = mailmime_part_parse(text->Content(),text->Length(),&index,mimetype, 71 int err = mailmime_part_parse(text->Content(),text->Length(),&index,mimetype,
72 &result_text,&target_length); 72 &result_text,&target_length);
73 73
74 encodedString* result = new encodedString(); 74 encodedString* result = new encodedString();
75 if (err == MAILIMF_NO_ERROR) { 75 if (err == MAILIMF_NO_ERROR) {
76 result->setContent(result_text,target_length); 76 result->setContent(result_text,target_length);
77 } 77 }
78 qDebug("Decode string finished"); 78 qDebug("Decode string finished");
79 return result; 79 return result;
80} 80}
81 81
82QString AbstractMail::convert_String(const char*text) 82QString AbstractMail::convert_String(const char*text)
83{ 83{
84 size_t index = 0; 84 size_t index = 0;
85 char*res = 0; 85 char*res = 0;
86 int err = MAILIMF_NO_ERROR; 86 int err = MAILIMF_NO_ERROR;
87 87
88 QString result(text); 88 QString result(text);
89 89
90 /* due a bug in libetpan it isn't usable this moment */ 90 /* due a bug in libetpan it isn't usable this moment */
91/* int err = mailmime_encoded_phrase_parse("iso-8859-1", 91/* int err = mailmime_encoded_phrase_parse("iso-8859-1",
92 text, strlen(text),&index, "iso-8859-1",&res);*/ 92 text, strlen(text),&index, "iso-8859-1",&res);*/
93 //qDebug("Input: %s",text); 93 //qDebug("Input: %s",text);
94 if (err == MAILIMF_NO_ERROR && res && strlen(res)) { 94 if (err == MAILIMF_NO_ERROR && res && strlen(res)) {
95// result = QString(res); 95// result = QString(res);
96// qDebug("Res: %s, length: %i",res,strlen(res)); 96// qDebug("Res: %s, length: %i",res,strlen(res));
97 } 97 }
98 if (res) free(res); 98 if (res) free(res);
99 return result; 99 return result;
100} 100}
101 101
102/* cp & paste from launcher */ 102/* cp & paste from launcher */
103QString AbstractMail::gen_attachment_id() 103QString AbstractMail::gen_attachment_id()
104{ 104{
105 QFile file( "/proc/sys/kernel/random/uuid" ); 105 QFile file( "/proc/sys/kernel/random/uuid" );
106 if (!file.open(IO_ReadOnly ) ) 106 if (!file.open(IO_ReadOnly ) )
107 return QString::null; 107 return QString::null;
108 108
109 QTextStream stream(&file); 109 QTextStream stream(&file);
110 110
111 return "{" + stream.read().stripWhiteSpace() + "}"; 111 return "{" + stream.read().stripWhiteSpace() + "}";
112} 112}
113 113
114int AbstractMail::createMbox(const QString&,const Folder*,const QString& delemiter,bool) 114int AbstractMail::createMbox(const QString&,const FolderP&,const QString& delemiter,bool)
115{ 115{
116 return 0; 116 return 0;
117} 117}
118 118
119QString AbstractMail::defaultLocalfolder() 119QString AbstractMail::defaultLocalfolder()
120{ 120{
121 QString f = getenv( "HOME" ); 121 QString f = getenv( "HOME" );
122 f += "/Applications/opiemail/localmail"; 122 f += "/Applications/opiemail/localmail";
123 return f; 123 return f;
124} 124}
125 125
126QString AbstractMail::draftFolder() 126QString AbstractMail::draftFolder()
127{ 127{
128 return QString("Drafts"); 128 return QString("Drafts");
129} 129}
130 130
131/* temporary - will be removed when implemented in all classes */ 131/* temporary - will be removed when implemented in all classes */
132void AbstractMail::deleteMails(const QString &,QList<RecMail> &) 132void AbstractMail::deleteMails(const QString &,QList<RecMail> &)
133{ 133{
134} 134}
135 135
136void AbstractMail::mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 136void AbstractMail::mvcpAllMails(const FolderP&fromFolder,
137 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
137{ 138{
138 QList<RecMail> t; 139 QList<RecMail> t;
139 listMessages(fromFolder->getName(),t); 140 listMessages(fromFolder->getName(),t);
140 encodedString*st = 0; 141 encodedString*st = 0;
141 while (t.count()>0) { 142 while (t.count()>0) {
142 RecMail*r = t.at(0); 143 RecMail*r = t.at(0);
143 st = fetchRawBody(*r); 144 st = fetchRawBody(*r);
144 if (st) { 145 if (st) {
145 targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder); 146 targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder);
146 delete st; 147 delete st;
147 } 148 }
148 t.removeFirst(); 149 t.removeFirst();
149 } 150 }
150 if (moveit) { 151 if (moveit) {
151 deleteAllMail(fromFolder); 152 deleteAllMail(fromFolder);
152 } 153 }
153} 154}
154 155
155void AbstractMail::mvcpMail(const RecMail&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 156void AbstractMail::mvcpMail(const RecMail&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
156{ 157{
157 encodedString*st = 0; 158 encodedString*st = 0;
158 st = fetchRawBody(mail); 159 st = fetchRawBody(mail);
159 if (st) { 160 if (st) {
160 targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder); 161 targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder);
161 delete st; 162 delete st;
162 } 163 }
163 if (moveit) { 164 if (moveit) {
164 deleteMail(mail); 165 deleteMail(mail);
165 } 166 }
166} 167}
diff --git a/noncore/net/mail/libmailwrapper/abstractmail.h b/noncore/net/mail/libmailwrapper/abstractmail.h
index d377452..d911468 100644
--- a/noncore/net/mail/libmailwrapper/abstractmail.h
+++ b/noncore/net/mail/libmailwrapper/abstractmail.h
@@ -1,70 +1,74 @@
1#ifndef __abstract_mail_ 1#ifndef __abstract_mail_
2#define __abstract_mail_ 2#define __abstract_mail_
3 3
4#include "maildefines.h" 4#include "maildefines.h"
5 5
6#include <qobject.h>
7#include "settings.h" 6#include "settings.h"
8 7
8#include <qobject.h>
9#include <opie2/osmart_pointer.h>
10
9class RecMail; 11class RecMail;
10class RecBody; 12class RecBody;
11class RecPart; 13class RecPart;
12class IMAPwrapper; 14class IMAPwrapper;
13class POP3wrapper; 15class POP3wrapper;
14class Folder; 16class Folder;
15class encodedString; 17class encodedString;
16struct folderStat; 18struct folderStat;
17 19
18class AbstractMail:public QObject 20class AbstractMail:public QObject
19{ 21{
20 Q_OBJECT 22 Q_OBJECT
21public: 23public:
22 AbstractMail(){}; 24 AbstractMail(){};
23 virtual ~AbstractMail(){} 25 virtual ~AbstractMail(){}
24 virtual QList<Folder>* listFolders()=0; 26 virtual QValueList<Opie::osmart_pointer<Folder> >* listFolders()=0;
25 virtual void listMessages(const QString & mailbox,QList<RecMail>&target )=0; 27 virtual void listMessages(const QString & mailbox,QList<RecMail>&target )=0;
26 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX")=0; 28 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX")=0;
27 virtual RecBody fetchBody(const RecMail&mail)=0; 29 virtual RecBody fetchBody(const RecMail&mail)=0;
28 virtual QString fetchTextPart(const RecMail&mail,const RecPart&part)=0; 30 virtual QString fetchTextPart(const RecMail&mail,const RecPart&part)=0;
29 virtual encodedString* fetchDecodedPart(const RecMail&mail,const RecPart&part)=0; 31 virtual encodedString* fetchDecodedPart(const RecMail&mail,const RecPart&part)=0;
30 virtual encodedString* fetchRawPart(const RecMail&mail,const RecPart&part)=0; 32 virtual encodedString* fetchRawPart(const RecMail&mail,const RecPart&part)=0;
31 virtual encodedString* fetchRawBody(const RecMail&mail)=0; 33 virtual encodedString* fetchRawBody(const RecMail&mail)=0;
32 34
33 virtual void deleteMail(const RecMail&mail)=0; 35 virtual void deleteMail(const RecMail&mail)=0;
34 virtual void answeredMail(const RecMail&mail)=0; 36 virtual void answeredMail(const RecMail&mail)=0;
35 virtual int deleteAllMail(const Folder*)=0; 37 virtual int deleteAllMail(const Opie::osmart_pointer<Folder>&)=0;
36 virtual void deleteMails(const QString & FolderName,QList<RecMail> &target); 38 virtual void deleteMails(const QString & FolderName,QList<RecMail> &target);
37 virtual int deleteMbox(const Folder*)=0; 39 virtual int deleteMbox(const Opie::osmart_pointer<Folder>&)=0;
38 virtual void storeMessage(const char*msg,size_t length, const QString&folder)=0; 40 virtual void storeMessage(const char*msg,size_t length, const QString&folder)=0;
39 41
40 virtual void mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit); 42 virtual void mvcpAllMails(const Opie::osmart_pointer<Folder>&fromFolder,
43 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit);
41 virtual void mvcpMail(const RecMail&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit); 44 virtual void mvcpMail(const RecMail&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit);
42 45
43 virtual void cleanMimeCache(){}; 46 virtual void cleanMimeCache(){};
44 /* mail box methods */ 47 /* mail box methods */
45 /* parameter is the box to create. 48 /* parameter is the box to create.
46 * if the implementing subclass has prefixes, 49 * if the implementing subclass has prefixes,
47 * them has to be appended automatic. 50 * them has to be appended automatic.
48 */ 51 */
49 virtual int createMbox(const QString&,const Folder*parentfolder=0,const QString& delemiter="/",bool getsubfolder=false); 52 virtual int createMbox(const QString&,const Opie::osmart_pointer<Folder>&parentfolder=0,
53 const QString& delemiter="/",bool getsubfolder=false);
50 virtual void logout()=0; 54 virtual void logout()=0;
51 55
52 static AbstractMail* getWrapper(IMAPaccount *a); 56 static AbstractMail* getWrapper(IMAPaccount *a);
53 static AbstractMail* getWrapper(POP3account *a); 57 static AbstractMail* getWrapper(POP3account *a);
54 static AbstractMail* getWrapper(NNTPaccount *a); 58 static AbstractMail* getWrapper(NNTPaccount *a);
55 /* mbox only! */ 59 /* mbox only! */
56 static AbstractMail* getWrapper(const QString&a,const QString&name="Local Folders"); 60 static AbstractMail* getWrapper(const QString&a,const QString&name="Local Folders");
57 static AbstractMail* getWrapper(Account*a); 61 static AbstractMail* getWrapper(Account*a);
58 62
59 static QString defaultLocalfolder(); 63 static QString defaultLocalfolder();
60 static QString draftFolder(); 64 static QString draftFolder();
61 65
62 virtual MAILLIB::ATYPE getType()const=0; 66 virtual MAILLIB::ATYPE getType()const=0;
63 virtual const QString&getName()const=0; 67 virtual const QString&getName()const=0;
64 68
65protected: 69protected:
66 static encodedString*decode_String(const encodedString*text,const QString&enc); 70 static encodedString*decode_String(const encodedString*text,const QString&enc);
67 static QString convert_String(const char*text); 71 static QString convert_String(const char*text);
68 static QString gen_attachment_id(); 72 static QString gen_attachment_id();
69}; 73};
70#endif 74#endif
diff --git a/noncore/net/mail/libmailwrapper/genericwrapper.h b/noncore/net/mail/libmailwrapper/genericwrapper.h
index b3cd4fe..d0db45a 100644
--- a/noncore/net/mail/libmailwrapper/genericwrapper.h
+++ b/noncore/net/mail/libmailwrapper/genericwrapper.h
@@ -1,67 +1,67 @@
1#ifndef __GENERIC_WRAPPER_H 1#ifndef __GENERIC_WRAPPER_H
2#define __GENERIC_WRAPPER_H 2#define __GENERIC_WRAPPER_H
3 3
4#include "abstractmail.h" 4#include "abstractmail.h"
5#include <qmap.h> 5#include <qmap.h>
6#include <qstring.h> 6#include <qstring.h>
7#include <libetpan/clist.h> 7#include <libetpan/clist.h>
8 8
9class RecMail; 9class RecMail;
10class RecBody; 10class RecBody;
11class encodedString; 11class encodedString;
12struct mailpop3; 12struct mailpop3;
13struct mailmessage; 13struct mailmessage;
14struct mailmime; 14struct mailmime;
15struct mailmime_mechanism; 15struct mailmime_mechanism;
16struct mailimf_mailbox_list; 16struct mailimf_mailbox_list;
17struct mailimf_mailbox; 17struct mailimf_mailbox;
18struct mailimf_date_time; 18struct mailimf_date_time;
19struct mailimf_group; 19struct mailimf_group;
20struct mailimf_address_list; 20struct mailimf_address_list;
21struct mailsession; 21struct mailsession;
22struct mailstorage; 22struct mailstorage;
23struct mailfolder; 23struct mailfolder;
24struct mailimf_in_reply_to; 24struct mailimf_in_reply_to;
25 25
26/* this class hold just the funs shared between 26/* this class hold just the funs shared between
27 * mbox and pop3 (later mh, too) mail access. 27 * mbox and pop3 (later mh, too) mail access.
28 * it is not desigend to make a instance of it! 28 * it is not desigend to make a instance of it!
29 */ 29 */
30class Genericwrapper : public AbstractMail 30class Genericwrapper : public AbstractMail
31{ 31{
32 Q_OBJECT 32 Q_OBJECT
33public: 33public:
34 Genericwrapper(); 34 Genericwrapper();
35 virtual ~Genericwrapper(); 35 virtual ~Genericwrapper();
36 36
37 virtual encodedString* fetchDecodedPart(const RecMail&mail,const RecPart&part); 37 virtual encodedString* fetchDecodedPart(const RecMail&mail,const RecPart&part);
38 virtual encodedString* fetchRawPart(const RecMail&mail,const RecPart&part); 38 virtual encodedString* fetchRawPart(const RecMail&mail,const RecPart&part);
39 virtual QString fetchTextPart(const RecMail&mail,const RecPart&part); 39 virtual QString fetchTextPart(const RecMail&mail,const RecPart&part);
40 virtual void cleanMimeCache(); 40 virtual void cleanMimeCache();
41 virtual int deleteMbox(const Folder*){return 1;} 41 virtual int deleteMbox(const Opie::osmart_pointer<Folder>&){return 1;}
42 virtual void logout(){}; 42 virtual void logout(){};
43 virtual void storeMessage(const char*msg,size_t length, const QString&folder){}; 43 virtual void storeMessage(const char*msg,size_t length, const QString&folder){};
44 44
45protected: 45protected:
46 RecBody parseMail( mailmessage * msg ); 46 RecBody parseMail( mailmessage * msg );
47 QString parseMailboxList( mailimf_mailbox_list *list ); 47 QString parseMailboxList( mailimf_mailbox_list *list );
48 QString parseMailbox( mailimf_mailbox *box ); 48 QString parseMailbox( mailimf_mailbox *box );
49 QString parseGroup( mailimf_group *group ); 49 QString parseGroup( mailimf_group *group );
50 QString parseAddressList( mailimf_address_list *list ); 50 QString parseAddressList( mailimf_address_list *list );
51 QString parseDateTime( mailimf_date_time *date ); 51 QString parseDateTime( mailimf_date_time *date );
52 52
53 void traverseBody(RecBody&target,mailmessage*message,mailmime*mime,QValueList<int>recList,unsigned int current_rek=0,int current_count=1); 53 void traverseBody(RecBody&target,mailmessage*message,mailmime*mime,QValueList<int>recList,unsigned int current_rek=0,int current_count=1);
54 static void fillSingleBody(RecPart&target,mailmessage*message,mailmime*mime); 54 static void fillSingleBody(RecPart&target,mailmessage*message,mailmime*mime);
55 static void fillParameters(RecPart&target,clist*parameters); 55 static void fillParameters(RecPart&target,clist*parameters);
56 static QString getencoding(mailmime_mechanism*aEnc); 56 static QString getencoding(mailmime_mechanism*aEnc);
57 virtual void parseList(QList<RecMail> &target,mailsession*session,const QString&mailbox,bool mbox_as_to=false); 57 virtual void parseList(QList<RecMail> &target,mailsession*session,const QString&mailbox,bool mbox_as_to=false);
58 QStringList parseInreplies(mailimf_in_reply_to * in_replies); 58 QStringList parseInreplies(mailimf_in_reply_to * in_replies);
59 59
60 QString msgTempName; 60 QString msgTempName;
61 unsigned int last_msg_id; 61 unsigned int last_msg_id;
62 QMap<QString,encodedString*> bodyCache; 62 QMap<QString,encodedString*> bodyCache;
63 mailstorage * m_storage; 63 mailstorage * m_storage;
64 mailfolder*m_folder; 64 mailfolder*m_folder;
65}; 65};
66 66
67#endif 67#endif
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
index e29a0a0..3b3be0f 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
@@ -205,139 +205,138 @@ void IMAPwrapper::logout()
205 m_Lastmbox = ""; 205 m_Lastmbox = "";
206} 206}
207 207
208void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target ) 208void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
209{ 209{
210 int err = MAILIMAP_NO_ERROR; 210 int err = MAILIMAP_NO_ERROR;
211 clist *result = 0; 211 clist *result = 0;
212 clistcell *current; 212 clistcell *current;
213 mailimap_fetch_type *fetchType = 0; 213 mailimap_fetch_type *fetchType = 0;
214 mailimap_set *set = 0; 214 mailimap_set *set = 0;
215 215
216 login(); 216 login();
217 if (!m_imap) { 217 if (!m_imap) {
218 return; 218 return;
219 } 219 }
220 /* select mailbox READONLY for operations */ 220 /* select mailbox READONLY for operations */
221 err = selectMbox(mailbox); 221 err = selectMbox(mailbox);
222 if ( err != MAILIMAP_NO_ERROR ) { 222 if ( err != MAILIMAP_NO_ERROR ) {
223 return; 223 return;
224 } 224 }
225 225
226 int last = m_imap->imap_selection_info->sel_exists; 226 int last = m_imap->imap_selection_info->sel_exists;
227 227
228 if (last == 0) { 228 if (last == 0) {
229 Global::statusMessage(tr("Mailbox has no mails")); 229 Global::statusMessage(tr("Mailbox has no mails"));
230 return; 230 return;
231 } else { 231 } else {
232 } 232 }
233 233
234 /* the range has to start at 1!!! not with 0!!!! */ 234 /* the range has to start at 1!!! not with 0!!!! */
235 set = mailimap_set_new_interval( 1, last ); 235 set = mailimap_set_new_interval( 1, last );
236 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 236 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
237 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope()); 237 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope());
238 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags()); 238 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags());
239 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate()); 239 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate());
240 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size()); 240 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size());
241 241
242 err = mailimap_fetch( m_imap, set, fetchType, &result ); 242 err = mailimap_fetch( m_imap, set, fetchType, &result );
243 mailimap_set_free( set ); 243 mailimap_set_free( set );
244 mailimap_fetch_type_free( fetchType ); 244 mailimap_fetch_type_free( fetchType );
245 245
246 QString date,subject,from; 246 QString date,subject,from;
247 247
248 if ( err == MAILIMAP_NO_ERROR ) { 248 if ( err == MAILIMAP_NO_ERROR ) {
249 mailimap_msg_att * msg_att; 249 mailimap_msg_att * msg_att;
250 int i = 0; 250 int i = 0;
251 for (current = clist_begin(result); current != 0; current=clist_next(current)) { 251 for (current = clist_begin(result); current != 0; current=clist_next(current)) {
252 ++i; 252 ++i;
253 msg_att = (mailimap_msg_att*)current->data; 253 msg_att = (mailimap_msg_att*)current->data;
254 RecMail*m = parse_list_result(msg_att); 254 RecMail*m = parse_list_result(msg_att);
255 if (m) { 255 if (m) {
256 m->setNumber(i); 256 m->setNumber(i);
257 m->setMbox(mailbox); 257 m->setMbox(mailbox);
258 m->setWrapper(this); 258 m->setWrapper(this);
259 target.append(m); 259 target.append(m);
260 } 260 }
261 } 261 }
262 Global::statusMessage(tr("Mailbox has %1 mails").arg(target.count())); 262 Global::statusMessage(tr("Mailbox has %1 mails").arg(target.count()));
263 } else { 263 } else {
264 Global::statusMessage(tr("Error fetching headers: %1").arg(m_imap->imap_response)); 264 Global::statusMessage(tr("Error fetching headers: %1").arg(m_imap->imap_response));
265 } 265 }
266 if (result) mailimap_fetch_list_free(result); 266 if (result) mailimap_fetch_list_free(result);
267} 267}
268 268
269QList<Folder>* IMAPwrapper::listFolders() 269QValueList<Opie::osmart_pointer<Folder> >* IMAPwrapper::listFolders()
270{ 270{
271 const char *path, *mask; 271 const char *path, *mask;
272 int err = MAILIMAP_NO_ERROR; 272 int err = MAILIMAP_NO_ERROR;
273 clist *result = 0; 273 clist *result = 0;
274 clistcell *current = 0; 274 clistcell *current = 0;
275 clistcell*cur_flag = 0; 275 clistcell*cur_flag = 0;
276 mailimap_mbx_list_flags*bflags = 0; 276 mailimap_mbx_list_flags*bflags = 0;
277 277
278 QList<Folder> * folders = new QList<Folder>(); 278 QValueList<FolderP>* folders = new QValueList<FolderP>();
279 folders->setAutoDelete( false );
280 login(); 279 login();
281 if (!m_imap) { 280 if (!m_imap) {
282 return folders; 281 return folders;
283 } 282 }
284 283
285/* 284/*
286 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 285 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
287 * We must not forget to filter them out in next loop! 286 * We must not forget to filter them out in next loop!
288 * it seems like ugly code. and yes - it is ugly code. but the best way. 287 * it seems like ugly code. and yes - it is ugly code. but the best way.
289 */ 288 */
290 QString temp; 289 QString temp;
291 mask = "INBOX" ; 290 mask = "INBOX" ;
292 mailimap_mailbox_list *list; 291 mailimap_mailbox_list *list;
293 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); 292 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result );
294 QString del; 293 QString del;
295 bool selectable = true; 294 bool selectable = true;
296 bool no_inferiors = false; 295 bool no_inferiors = false;
297 if ( err == MAILIMAP_NO_ERROR ) { 296 if ( err == MAILIMAP_NO_ERROR ) {
298 current = result->first; 297 current = result->first;
299 for ( int i = result->count; i > 0; i-- ) { 298 for ( int i = result->count; i > 0; i-- ) {
300 list = (mailimap_mailbox_list *) current->data; 299 list = (mailimap_mailbox_list *) current->data;
301 // it is better use the deep copy mechanism of qt itself 300 // it is better use the deep copy mechanism of qt itself
302 // instead of using strdup! 301 // instead of using strdup!
303 temp = list->mb_name; 302 temp = list->mb_name;
304 del = list->mb_delimiter; 303 del = list->mb_delimiter;
305 current = current->next; 304 current = current->next;
306 if ( (bflags = list->mb_flag) ) { 305 if ( (bflags = list->mb_flag) ) {
307 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& 306 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&&
308 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); 307 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT);
309 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) { 308 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) {
310 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) { 309 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) {
311 no_inferiors = true; 310 no_inferiors = true;
312 } 311 }
313 } 312 }
314 } 313 }
315 folders->append( new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix())); 314 folders->append( new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix()));
316 } 315 }
317 } else { 316 } else {
318 qDebug("error fetching folders: %s",m_imap->imap_response); 317 qDebug("error fetching folders: %s",m_imap->imap_response);
319 } 318 }
320 mailimap_list_result_free( result ); 319 mailimap_list_result_free( result );
321 320
322/* 321/*
323 * second stage - get the other then inbox folders 322 * second stage - get the other then inbox folders
324 */ 323 */
325 mask = "*" ; 324 mask = "*" ;
326 path = account->getPrefix().latin1(); 325 path = account->getPrefix().latin1();
327 if (!path) path = ""; 326 if (!path) path = "";
328 qDebug(path); 327 qDebug(path);
329 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result ); 328 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result );
330 if ( err == MAILIMAP_NO_ERROR ) { 329 if ( err == MAILIMAP_NO_ERROR ) {
331 current = result->first; 330 current = result->first;
332 for ( current=clist_begin(result);current!=NULL;current=clist_next(current)) { 331 for ( current=clist_begin(result);current!=NULL;current=clist_next(current)) {
333 no_inferiors = false; 332 no_inferiors = false;
334 list = (mailimap_mailbox_list *) current->data; 333 list = (mailimap_mailbox_list *) current->data;
335 // it is better use the deep copy mechanism of qt itself 334 // it is better use the deep copy mechanism of qt itself
336 // instead of using strdup! 335 // instead of using strdup!
337 temp = list->mb_name; 336 temp = list->mb_name;
338 if (temp.lower()=="inbox") 337 if (temp.lower()=="inbox")
339 continue; 338 continue;
340 if (temp.lower()==account->getPrefix().lower()) 339 if (temp.lower()==account->getPrefix().lower())
341 continue; 340 continue;
342 if ( (bflags = list->mb_flag) ) { 341 if ( (bflags = list->mb_flag) ) {
343 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& 342 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&&
@@ -905,281 +904,282 @@ void IMAPwrapper::deleteMail(const RecMail&mail)
905 qDebug("Delete successfull %s",m_imap->imap_response); 904 qDebug("Delete successfull %s",m_imap->imap_response);
906} 905}
907 906
908void IMAPwrapper::answeredMail(const RecMail&mail) 907void IMAPwrapper::answeredMail(const RecMail&mail)
909{ 908{
910 mailimap_flag_list*flist; 909 mailimap_flag_list*flist;
911 mailimap_set *set; 910 mailimap_set *set;
912 mailimap_store_att_flags * store_flags; 911 mailimap_store_att_flags * store_flags;
913 int err; 912 int err;
914 login(); 913 login();
915 if (!m_imap) { 914 if (!m_imap) {
916 return; 915 return;
917 } 916 }
918 err = selectMbox(mail.getMbox()); 917 err = selectMbox(mail.getMbox());
919 if ( err != MAILIMAP_NO_ERROR ) { 918 if ( err != MAILIMAP_NO_ERROR ) {
920 return; 919 return;
921 } 920 }
922 flist = mailimap_flag_list_new_empty(); 921 flist = mailimap_flag_list_new_empty();
923 mailimap_flag_list_add(flist,mailimap_flag_new_answered()); 922 mailimap_flag_list_add(flist,mailimap_flag_new_answered());
924 store_flags = mailimap_store_att_flags_new_add_flags(flist); 923 store_flags = mailimap_store_att_flags_new_add_flags(flist);
925 set = mailimap_set_new_single(mail.getNumber()); 924 set = mailimap_set_new_single(mail.getNumber());
926 err = mailimap_store(m_imap,set,store_flags); 925 err = mailimap_store(m_imap,set,store_flags);
927 mailimap_set_free( set ); 926 mailimap_set_free( set );
928 mailimap_store_att_flags_free(store_flags); 927 mailimap_store_att_flags_free(store_flags);
929 928
930 if (err != MAILIMAP_NO_ERROR) { 929 if (err != MAILIMAP_NO_ERROR) {
931 qDebug("error marking mail: %s",m_imap->imap_response); 930 qDebug("error marking mail: %s",m_imap->imap_response);
932 return; 931 return;
933 } 932 }
934} 933}
935 934
936QString IMAPwrapper::fetchTextPart(const RecMail&mail,const QValueList<int>&path,bool internal_call,const QString&enc) 935QString IMAPwrapper::fetchTextPart(const RecMail&mail,const QValueList<int>&path,bool internal_call,const QString&enc)
937{ 936{
938 QString body(""); 937 QString body("");
939 encodedString*res = fetchRawPart(mail,path,internal_call); 938 encodedString*res = fetchRawPart(mail,path,internal_call);
940 encodedString*r = decode_String(res,enc); 939 encodedString*r = decode_String(res,enc);
941 delete res; 940 delete res;
942 if (r) { 941 if (r) {
943 if (r->Length()>0) { 942 if (r->Length()>0) {
944 body = r->Content(); 943 body = r->Content();
945 } 944 }
946 delete r; 945 delete r;
947 } 946 }
948 return body; 947 return body;
949} 948}
950 949
951QString IMAPwrapper::fetchTextPart(const RecMail&mail,const RecPart&part) 950QString IMAPwrapper::fetchTextPart(const RecMail&mail,const RecPart&part)
952{ 951{
953 return fetchTextPart(mail,part.Positionlist(),false,part.Encoding()); 952 return fetchTextPart(mail,part.Positionlist(),false,part.Encoding());
954} 953}
955 954
956encodedString* IMAPwrapper::fetchDecodedPart(const RecMail&mail,const RecPart&part) 955encodedString* IMAPwrapper::fetchDecodedPart(const RecMail&mail,const RecPart&part)
957{ 956{
958 encodedString*res = fetchRawPart(mail,part.Positionlist(),false); 957 encodedString*res = fetchRawPart(mail,part.Positionlist(),false);
959 encodedString*r = decode_String(res,part.Encoding()); 958 encodedString*r = decode_String(res,part.Encoding());
960 delete res; 959 delete res;
961 return r; 960 return r;
962} 961}
963 962
964encodedString* IMAPwrapper::fetchRawPart(const RecMail&mail,const RecPart&part) 963encodedString* IMAPwrapper::fetchRawPart(const RecMail&mail,const RecPart&part)
965{ 964{
966 return fetchRawPart(mail,part.Positionlist(),false); 965 return fetchRawPart(mail,part.Positionlist(),false);
967} 966}
968 967
969int IMAPwrapper::deleteAllMail(const Folder*folder) 968int IMAPwrapper::deleteAllMail(const FolderP&folder)
970{ 969{
971 login(); 970 login();
972 if (!m_imap) { 971 if (!m_imap) {
973 return 0; 972 return 0;
974 } 973 }
975 mailimap_flag_list*flist; 974 mailimap_flag_list*flist;
976 mailimap_set *set; 975 mailimap_set *set;
977 mailimap_store_att_flags * store_flags; 976 mailimap_store_att_flags * store_flags;
978 int err = selectMbox(folder->getName()); 977 int err = selectMbox(folder->getName());
979 if ( err != MAILIMAP_NO_ERROR ) { 978 if ( err != MAILIMAP_NO_ERROR ) {
980 return 0; 979 return 0;
981 } 980 }
982 981
983 int last = m_imap->imap_selection_info->sel_exists; 982 int last = m_imap->imap_selection_info->sel_exists;
984 if (last == 0) { 983 if (last == 0) {
985 Global::statusMessage(tr("Mailbox has no mails!")); 984 Global::statusMessage(tr("Mailbox has no mails!"));
986 return 0; 985 return 0;
987 } 986 }
988 flist = mailimap_flag_list_new_empty(); 987 flist = mailimap_flag_list_new_empty();
989 mailimap_flag_list_add(flist,mailimap_flag_new_deleted()); 988 mailimap_flag_list_add(flist,mailimap_flag_new_deleted());
990 store_flags = mailimap_store_att_flags_new_set_flags(flist); 989 store_flags = mailimap_store_att_flags_new_set_flags(flist);
991 set = mailimap_set_new_interval( 1, last ); 990 set = mailimap_set_new_interval( 1, last );
992 err = mailimap_store(m_imap,set,store_flags); 991 err = mailimap_store(m_imap,set,store_flags);
993 mailimap_set_free( set ); 992 mailimap_set_free( set );
994 mailimap_store_att_flags_free(store_flags); 993 mailimap_store_att_flags_free(store_flags);
995 if (err != MAILIMAP_NO_ERROR) { 994 if (err != MAILIMAP_NO_ERROR) {
996 Global::statusMessage(tr("error deleting mail: %s").arg(m_imap->imap_response)); 995 Global::statusMessage(tr("error deleting mail: %s").arg(m_imap->imap_response));
997 return 0; 996 return 0;
998 } 997 }
999 qDebug("deleting mail: %s",m_imap->imap_response); 998 qDebug("deleting mail: %s",m_imap->imap_response);
1000 /* should we realy do that at this moment? */ 999 /* should we realy do that at this moment? */
1001 err = mailimap_expunge(m_imap); 1000 err = mailimap_expunge(m_imap);
1002 if (err != MAILIMAP_NO_ERROR) { 1001 if (err != MAILIMAP_NO_ERROR) {
1003 Global::statusMessage(tr("error deleting mail: %s").arg(m_imap->imap_response)); 1002 Global::statusMessage(tr("error deleting mail: %s").arg(m_imap->imap_response));
1004 return 0; 1003 return 0;
1005 } 1004 }
1006 qDebug("Delete successfull %s",m_imap->imap_response); 1005 qDebug("Delete successfull %s",m_imap->imap_response);
1007 return 1; 1006 return 1;
1008} 1007}
1009 1008
1010int IMAPwrapper::createMbox(const QString&folder,const Folder*parentfolder,const QString& delemiter,bool getsubfolder) 1009int IMAPwrapper::createMbox(const QString&folder,const FolderP&parentfolder,const QString& delemiter,bool getsubfolder)
1011{ 1010{
1012 if (folder.length()==0) return 0; 1011 if (folder.length()==0) return 0;
1013 login(); 1012 login();
1014 if (!m_imap) {return 0;} 1013 if (!m_imap) {return 0;}
1015 QString pre = account->getPrefix(); 1014 QString pre = account->getPrefix();
1016 if (delemiter.length()>0 && pre.findRev(delemiter)!=pre.length()-1) { 1015 if (delemiter.length()>0 && pre.findRev(delemiter)!=pre.length()-1) {
1017 pre+=delemiter; 1016 pre+=delemiter;
1018 } 1017 }
1019 if (parentfolder) { 1018 if (parentfolder) {
1020 pre += parentfolder->getDisplayName()+delemiter; 1019 pre += parentfolder->getDisplayName()+delemiter;
1021 } 1020 }
1022 pre+=folder; 1021 pre+=folder;
1023 if (getsubfolder) { 1022 if (getsubfolder) {
1024 if (delemiter.length()>0) { 1023 if (delemiter.length()>0) {
1025 pre+=delemiter; 1024 pre+=delemiter;
1026 } else { 1025 } else {
1027 Global::statusMessage(tr("Cannot create folder %1 for holding subfolders").arg(pre)); 1026 Global::statusMessage(tr("Cannot create folder %1 for holding subfolders").arg(pre));
1028 return 0; 1027 return 0;
1029 } 1028 }
1030 } 1029 }
1031 qDebug("Creating %s",pre.latin1()); 1030 qDebug("Creating %s",pre.latin1());
1032 int res = mailimap_create(m_imap,pre.latin1()); 1031 int res = mailimap_create(m_imap,pre.latin1());
1033 if (res != MAILIMAP_NO_ERROR) { 1032 if (res != MAILIMAP_NO_ERROR) {
1034 Global::statusMessage(tr("%1").arg(m_imap->imap_response)); 1033 Global::statusMessage(tr("%1").arg(m_imap->imap_response));
1035 return 0; 1034 return 0;
1036 } 1035 }
1037 return 1; 1036 return 1;
1038} 1037}
1039 1038
1040int IMAPwrapper::deleteMbox(const Folder*folder) 1039int IMAPwrapper::deleteMbox(const FolderP&folder)
1041{ 1040{
1042 if (!folder) return 0; 1041 if (!folder) return 0;
1043 login(); 1042 login();
1044 if (!m_imap) {return 0;} 1043 if (!m_imap) {return 0;}
1045 int res = mailimap_delete(m_imap,folder->getName()); 1044 int res = mailimap_delete(m_imap,folder->getName());
1046 if (res != MAILIMAP_NO_ERROR) { 1045 if (res != MAILIMAP_NO_ERROR) {
1047 Global::statusMessage(tr("%1").arg(m_imap->imap_response)); 1046 Global::statusMessage(tr("%1").arg(m_imap->imap_response));
1048 return 0; 1047 return 0;
1049 } 1048 }
1050 return 1; 1049 return 1;
1051} 1050}
1052 1051
1053void IMAPwrapper::statusFolder(folderStat&target_stat,const QString & mailbox) 1052void IMAPwrapper::statusFolder(folderStat&target_stat,const QString & mailbox)
1054{ 1053{
1055 mailimap_status_att_list * att_list =0; 1054 mailimap_status_att_list * att_list =0;
1056 mailimap_mailbox_data_status * status=0; 1055 mailimap_mailbox_data_status * status=0;
1057 clistiter * cur = 0; 1056 clistiter * cur = 0;
1058 int r = 0; 1057 int r = 0;
1059 int res = 0; 1058 int res = 0;
1060 target_stat.message_count = 0; 1059 target_stat.message_count = 0;
1061 target_stat.message_unseen = 0; 1060 target_stat.message_unseen = 0;
1062 target_stat.message_recent = 0; 1061 target_stat.message_recent = 0;
1063 login(); 1062 login();
1064 if (!m_imap) { 1063 if (!m_imap) {
1065 return; 1064 return;
1066 } 1065 }
1067 att_list = mailimap_status_att_list_new_empty(); 1066 att_list = mailimap_status_att_list_new_empty();
1068 if (!att_list) return; 1067 if (!att_list) return;
1069 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_MESSAGES); 1068 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_MESSAGES);
1070 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_RECENT); 1069 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_RECENT);
1071 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_UNSEEN); 1070 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_UNSEEN);
1072 r = mailimap_status(m_imap, mailbox.latin1(), att_list, &status); 1071 r = mailimap_status(m_imap, mailbox.latin1(), att_list, &status);
1073 if (r==MAILIMAP_NO_ERROR&&status->st_info_list!=0) { 1072 if (r==MAILIMAP_NO_ERROR&&status->st_info_list!=0) {
1074 for (cur = clist_begin(status->st_info_list); 1073 for (cur = clist_begin(status->st_info_list);
1075 cur != NULL ; cur = clist_next(cur)) { 1074 cur != NULL ; cur = clist_next(cur)) {
1076 mailimap_status_info * status_info; 1075 mailimap_status_info * status_info;
1077 status_info = (mailimap_status_info *)clist_content(cur); 1076 status_info = (mailimap_status_info *)clist_content(cur);
1078 switch (status_info->st_att) { 1077 switch (status_info->st_att) {
1079 case MAILIMAP_STATUS_ATT_MESSAGES: 1078 case MAILIMAP_STATUS_ATT_MESSAGES:
1080 target_stat.message_count = status_info->st_value; 1079 target_stat.message_count = status_info->st_value;
1081 break; 1080 break;
1082 case MAILIMAP_STATUS_ATT_RECENT: 1081 case MAILIMAP_STATUS_ATT_RECENT:
1083 target_stat.message_recent = status_info->st_value; 1082 target_stat.message_recent = status_info->st_value;
1084 break; 1083 break;
1085 case MAILIMAP_STATUS_ATT_UNSEEN: 1084 case MAILIMAP_STATUS_ATT_UNSEEN:
1086 target_stat.message_unseen = status_info->st_value; 1085 target_stat.message_unseen = status_info->st_value;
1087 break; 1086 break;
1088 } 1087 }
1089 } 1088 }
1090 } else { 1089 } else {
1091 qDebug("Error retrieving status"); 1090 qDebug("Error retrieving status");
1092 } 1091 }
1093 if (status) mailimap_mailbox_data_status_free(status); 1092 if (status) mailimap_mailbox_data_status_free(status);
1094 if (att_list) mailimap_status_att_list_free(att_list); 1093 if (att_list) mailimap_status_att_list_free(att_list);
1095} 1094}
1096 1095
1097void IMAPwrapper::storeMessage(const char*msg,size_t length, const QString&folder) 1096void IMAPwrapper::storeMessage(const char*msg,size_t length, const QString&folder)
1098{ 1097{
1099 login(); 1098 login();
1100 if (!m_imap) return; 1099 if (!m_imap) return;
1101 if (!msg) return; 1100 if (!msg) return;
1102 int r = mailimap_append(m_imap,(char*)folder.latin1(),0,0,msg,length); 1101 int r = mailimap_append(m_imap,(char*)folder.latin1(),0,0,msg,length);
1103 if (r != MAILIMAP_NO_ERROR) { 1102 if (r != MAILIMAP_NO_ERROR) {
1104 Global::statusMessage("Error storing mail!"); 1103 Global::statusMessage("Error storing mail!");
1105 } 1104 }
1106} 1105}
1107 1106
1108MAILLIB::ATYPE IMAPwrapper::getType()const 1107MAILLIB::ATYPE IMAPwrapper::getType()const
1109{ 1108{
1110 return account->getType(); 1109 return account->getType();
1111} 1110}
1112 1111
1113const QString&IMAPwrapper::getName()const 1112const QString&IMAPwrapper::getName()const
1114{ 1113{
1115 qDebug("Get name: %s",account->getAccountName().latin1()); 1114 qDebug("Get name: %s",account->getAccountName().latin1());
1116 return account->getAccountName(); 1115 return account->getAccountName();
1117} 1116}
1118 1117
1119encodedString* IMAPwrapper::fetchRawBody(const RecMail&mail) 1118encodedString* IMAPwrapper::fetchRawBody(const RecMail&mail)
1120{ 1119{
1121 // dummy 1120 // dummy
1122 QValueList<int> path; 1121 QValueList<int> path;
1123 return fetchRawPart(mail,path,false); 1122 return fetchRawPart(mail,path,false);
1124} 1123}
1125 1124
1126void IMAPwrapper::mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 1125void IMAPwrapper::mvcpAllMails(const FolderP&fromFolder,
1126 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
1127{ 1127{
1128 if (targetWrapper != this) { 1128 if (targetWrapper != this) {
1129 AbstractMail::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit); 1129 AbstractMail::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit);
1130 qDebug("Using generic"); 1130 qDebug("Using generic");
1131 return; 1131 return;
1132 } 1132 }
1133 mailimap_set *set = 0; 1133 mailimap_set *set = 0;
1134 login(); 1134 login();
1135 if (!m_imap) { 1135 if (!m_imap) {
1136 return; 1136 return;
1137 } 1137 }
1138 int err = selectMbox(fromFolder->getName()); 1138 int err = selectMbox(fromFolder->getName());
1139 if ( err != MAILIMAP_NO_ERROR ) { 1139 if ( err != MAILIMAP_NO_ERROR ) {
1140 return; 1140 return;
1141 } 1141 }
1142 int last = m_imap->imap_selection_info->sel_exists; 1142 int last = m_imap->imap_selection_info->sel_exists;
1143 set = mailimap_set_new_interval( 1, last ); 1143 set = mailimap_set_new_interval( 1, last );
1144 err = mailimap_copy(m_imap,set,targetFolder.latin1()); 1144 err = mailimap_copy(m_imap,set,targetFolder.latin1());
1145 mailimap_set_free( set ); 1145 mailimap_set_free( set );
1146 if ( err != MAILIMAP_NO_ERROR ) { 1146 if ( err != MAILIMAP_NO_ERROR ) {
1147 QString error_msg = tr("error copy mails: %1").arg(m_imap->imap_response); 1147 QString error_msg = tr("error copy mails: %1").arg(m_imap->imap_response);
1148 Global::statusMessage(error_msg); 1148 Global::statusMessage(error_msg);
1149 qDebug(error_msg); 1149 qDebug(error_msg);
1150 return; 1150 return;
1151 } 1151 }
1152 if (moveit) { 1152 if (moveit) {
1153 deleteAllMail(fromFolder); 1153 deleteAllMail(fromFolder);
1154 } 1154 }
1155} 1155}
1156 1156
1157void IMAPwrapper::mvcpMail(const RecMail&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 1157void IMAPwrapper::mvcpMail(const RecMail&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
1158{ 1158{
1159 if (targetWrapper != this) { 1159 if (targetWrapper != this) {
1160 qDebug("Using generic"); 1160 qDebug("Using generic");
1161 AbstractMail::mvcpMail(mail,targetFolder,targetWrapper,moveit); 1161 AbstractMail::mvcpMail(mail,targetFolder,targetWrapper,moveit);
1162 return; 1162 return;
1163 } 1163 }
1164 mailimap_set *set = 0; 1164 mailimap_set *set = 0;
1165 login(); 1165 login();
1166 if (!m_imap) { 1166 if (!m_imap) {
1167 return; 1167 return;
1168 } 1168 }
1169 int err = selectMbox(mail.getMbox()); 1169 int err = selectMbox(mail.getMbox());
1170 if ( err != MAILIMAP_NO_ERROR ) { 1170 if ( err != MAILIMAP_NO_ERROR ) {
1171 return; 1171 return;
1172 } 1172 }
1173 set = mailimap_set_new_single(mail.getNumber()); 1173 set = mailimap_set_new_single(mail.getNumber());
1174 err = mailimap_copy(m_imap,set,targetFolder.latin1()); 1174 err = mailimap_copy(m_imap,set,targetFolder.latin1());
1175 mailimap_set_free( set ); 1175 mailimap_set_free( set );
1176 if ( err != MAILIMAP_NO_ERROR ) { 1176 if ( err != MAILIMAP_NO_ERROR ) {
1177 QString error_msg = tr("error copy mail: %1").arg(m_imap->imap_response); 1177 QString error_msg = tr("error copy mail: %1").arg(m_imap->imap_response);
1178 Global::statusMessage(error_msg); 1178 Global::statusMessage(error_msg);
1179 qDebug(error_msg); 1179 qDebug(error_msg);
1180 return; 1180 return;
1181 } 1181 }
1182 if (moveit) { 1182 if (moveit) {
1183 deleteMail(mail); 1183 deleteMail(mail);
1184 } 1184 }
1185} 1185}
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.h b/noncore/net/mail/libmailwrapper/imapwrapper.h
index 2623725..15f049f 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.h
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.h
@@ -1,78 +1,80 @@
1#ifndef __IMAPWRAPPER 1#ifndef __IMAPWRAPPER
2#define __IMAPWRAPPER 2#define __IMAPWRAPPER
3 3
4#include <qlist.h> 4#include <qlist.h>
5#include "mailwrapper.h" 5#include "mailwrapper.h"
6#include "abstractmail.h" 6#include "abstractmail.h"
7#include <libetpan/clist.h> 7#include <libetpan/clist.h>
8 8
9struct mailimap; 9struct mailimap;
10struct mailimap_body; 10struct mailimap_body;
11struct mailimap_body_type_1part; 11struct mailimap_body_type_1part;
12struct mailimap_body_type_text; 12struct mailimap_body_type_text;
13struct mailimap_body_type_basic; 13struct mailimap_body_type_basic;
14struct mailimap_body_type_msg; 14struct mailimap_body_type_msg;
15struct mailimap_body_type_mpart; 15struct mailimap_body_type_mpart;
16struct mailimap_body_fields; 16struct mailimap_body_fields;
17struct mailimap_msg_att; 17struct mailimap_msg_att;
18class encodedString; 18class encodedString;
19 19
20class IMAPwrapper : public AbstractMail 20class IMAPwrapper : public AbstractMail
21{ 21{
22 Q_OBJECT 22 Q_OBJECT
23public: 23public:
24 IMAPwrapper( IMAPaccount *a ); 24 IMAPwrapper( IMAPaccount *a );
25 virtual ~IMAPwrapper(); 25 virtual ~IMAPwrapper();
26 virtual QList<Folder>* listFolders(); 26 virtual QValueList<Opie::osmart_pointer<Folder> >* listFolders();
27 virtual void listMessages(const QString & mailbox,QList<RecMail>&target ); 27 virtual void listMessages(const QString & mailbox,QList<RecMail>&target );
28 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX"); 28 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX");
29 29
30 virtual void deleteMail(const RecMail&mail); 30 virtual void deleteMail(const RecMail&mail);
31 virtual void answeredMail(const RecMail&mail); 31 virtual void answeredMail(const RecMail&mail);
32 virtual int deleteAllMail(const Folder*folder); 32 virtual int deleteAllMail(const Opie::osmart_pointer<Folder>&folder);
33 virtual void storeMessage(const char*msg,size_t length, const QString&folder); 33 virtual void storeMessage(const char*msg,size_t length, const QString&folder);
34 virtual void mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit); 34 virtual void mvcpAllMails(const Opie::osmart_pointer<Folder>&fromFolder,
35 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit);
35 virtual void mvcpMail(const RecMail&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit); 36 virtual void mvcpMail(const RecMail&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit);
36 37
37 virtual RecBody fetchBody(const RecMail&mail); 38 virtual RecBody fetchBody(const RecMail&mail);
38 virtual QString fetchTextPart(const RecMail&mail,const RecPart&part); 39 virtual QString fetchTextPart(const RecMail&mail,const RecPart&part);
39 virtual encodedString* fetchDecodedPart(const RecMail&mail,const RecPart&part); 40 virtual encodedString* fetchDecodedPart(const RecMail&mail,const RecPart&part);
40 virtual encodedString* fetchRawPart(const RecMail&mail,const RecPart&part); 41 virtual encodedString* fetchRawPart(const RecMail&mail,const RecPart&part);
41 virtual encodedString* fetchRawBody(const RecMail&mail); 42 virtual encodedString* fetchRawBody(const RecMail&mail);
42 43
43 virtual int createMbox(const QString&,const Folder*parentfolder=0,const QString& delemiter="/",bool getsubfolder=false); 44 virtual int createMbox(const QString&,const Opie::osmart_pointer<Folder>&parentfolder=0,
44 virtual int deleteMbox(const Folder*folder); 45 const QString& delemiter="/",bool getsubfolder=false);
45 46 virtual int deleteMbox(const Opie::osmart_pointer<Folder>&folder);
47
46 static void imap_progress( size_t current, size_t maximum ); 48 static void imap_progress( size_t current, size_t maximum );
47 49
48 virtual void logout(); 50 virtual void logout();
49 virtual MAILLIB::ATYPE getType()const; 51 virtual MAILLIB::ATYPE getType()const;
50 virtual const QString&getName()const; 52 virtual const QString&getName()const;
51 53
52protected: 54protected:
53 RecMail*parse_list_result(mailimap_msg_att*); 55 RecMail*parse_list_result(mailimap_msg_att*);
54 void login(); 56 void login();
55 bool start_tls(bool force=true); 57 bool start_tls(bool force=true);
56 58
57 virtual QString fetchTextPart(const RecMail&mail,const QValueList<int>&path,bool internal_call=false,const QString&enc=""); 59 virtual QString fetchTextPart(const RecMail&mail,const QValueList<int>&path,bool internal_call=false,const QString&enc="");
58 virtual encodedString*fetchRawPart(const RecMail&mail,const QValueList<int>&path,bool internal_call); 60 virtual encodedString*fetchRawPart(const RecMail&mail,const QValueList<int>&path,bool internal_call);
59 int selectMbox(const QString&mbox); 61 int selectMbox(const QString&mbox);
60 62
61 void fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description); 63 void fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description);
62 void fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which); 64 void fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which);
63 void fillSingleBasicPart(RecPart&target_part,mailimap_body_type_basic*which); 65 void fillSingleBasicPart(RecPart&target_part,mailimap_body_type_basic*which);
64 void fillSingleMsgPart(RecPart&target_part,mailimap_body_type_msg*which); 66 void fillSingleMsgPart(RecPart&target_part,mailimap_body_type_msg*which);
65 void fillMultiPart(RecPart&target_part,mailimap_body_type_mpart*which); 67 void fillMultiPart(RecPart&target_part,mailimap_body_type_mpart*which);
66 void traverseBody(const RecMail&mail,mailimap_body*body,RecBody&target_body,int current_recursion,QValueList<int>recList,int current_count=1); 68 void traverseBody(const RecMail&mail,mailimap_body*body,RecBody&target_body,int current_recursion,QValueList<int>recList,int current_count=1);
67 69
68 /* just helpers */ 70 /* just helpers */
69 static void fillBodyFields(RecPart&target_part,mailimap_body_fields*which); 71 static void fillBodyFields(RecPart&target_part,mailimap_body_fields*which);
70 static QStringList address_list_to_stringlist(clist*list); 72 static QStringList address_list_to_stringlist(clist*list);
71 73
72 74
73 IMAPaccount *account; 75 IMAPaccount *account;
74 mailimap *m_imap; 76 mailimap *m_imap;
75 QString m_Lastmbox; 77 QString m_Lastmbox;
76}; 78};
77 79
78#endif 80#endif
diff --git a/noncore/net/mail/libmailwrapper/mailtypes.h b/noncore/net/mail/libmailwrapper/mailtypes.h
index 17c6db9..10d367f 100644
--- a/noncore/net/mail/libmailwrapper/mailtypes.h
+++ b/noncore/net/mail/libmailwrapper/mailtypes.h
@@ -1,75 +1,74 @@
1#ifndef __MAIL_TYPES_H 1#ifndef __MAIL_TYPES_H
2#define __MAIL_TYPES_H 2#define __MAIL_TYPES_H
3 3
4#define FLAG_ANSWERED 0 4#define FLAG_ANSWERED 0
5#define FLAG_FLAGGED 1 5#define FLAG_FLAGGED 1
6#define FLAG_DELETED 2 6#define FLAG_DELETED 2
7#define FLAG_SEEN 3 7#define FLAG_SEEN 3
8#define FLAG_DRAFT 4 8#define FLAG_DRAFT 4
9#define FLAG_RECENT 5 9#define FLAG_RECENT 5
10 10
11#include <qlist.h>
12#include <qbitarray.h> 11#include <qbitarray.h>
13#include <qstring.h> 12#include <qstring.h>
14#include <qstringlist.h> 13#include <qstringlist.h>
15#include <qmap.h> 14#include <qmap.h>
16#include <qvaluelist.h> 15#include <qvaluelist.h>
17 16
18class AbstractMail; 17class AbstractMail;
19/* a class to describe mails in a mailbox */ 18/* a class to describe mails in a mailbox */
20/* Attention! 19/* Attention!
21 From programmers point of view it would make sense to 20 From programmers point of view it would make sense to
22 store the mail body into this class, too. 21 store the mail body into this class, too.
23 But: not from the point of view of the device. 22 But: not from the point of view of the device.
24 Mailbodies can be real large. So we request them when 23 Mailbodies can be real large. So we request them when
25 needed from the mail-wrapper class direct from the server itself 24 needed from the mail-wrapper class direct from the server itself
26 (imap) or from a file-based cache (pop3?) 25 (imap) or from a file-based cache (pop3?)
27 So there is no interface "const QString&body()" but you should 26 So there is no interface "const QString&body()" but you should
28 make a request to the mailwrapper with this class as parameter to 27 make a request to the mailwrapper with this class as parameter to
29 get the body. Same words for the attachments. 28 get the body. Same words for the attachments.
30*/ 29*/
31class RecMail 30class RecMail
32{ 31{
33public: 32public:
34 RecMail(); 33 RecMail();
35 RecMail(const RecMail&old); 34 RecMail(const RecMail&old);
36 virtual ~RecMail(); 35 virtual ~RecMail();
37 36
38 const int getNumber()const{return msg_number;} 37 const int getNumber()const{return msg_number;}
39 void setNumber(int number){msg_number=number;} 38 void setNumber(int number){msg_number=number;}
40 const QString&getDate()const{ return date; } 39 const QString&getDate()const{ return date; }
41 void setDate( const QString&a ) { date = a; } 40 void setDate( const QString&a ) { date = a; }
42 const QString&getFrom()const{ return from; } 41 const QString&getFrom()const{ return from; }
43 void setFrom( const QString&a ) { from = a; } 42 void setFrom( const QString&a ) { from = a; }
44 const QString&getSubject()const { return subject; } 43 const QString&getSubject()const { return subject; }
45 void setSubject( const QString&s ) { subject = s; } 44 void setSubject( const QString&s ) { subject = s; }
46 const QString&getMbox()const{return mbox;} 45 const QString&getMbox()const{return mbox;}
47 void setMbox(const QString&box){mbox = box;} 46 void setMbox(const QString&box){mbox = box;}
48 void setMsgid(const QString&id){msg_id=id;} 47 void setMsgid(const QString&id){msg_id=id;}
49 const QString&Msgid()const{return msg_id;} 48 const QString&Msgid()const{return msg_id;}
50 void setReplyto(const QString&reply){replyto=reply;} 49 void setReplyto(const QString&reply){replyto=reply;}
51 const QString&Replyto()const{return replyto;} 50 const QString&Replyto()const{return replyto;}
52 void setMsgsize(int size){msg_size = size;} 51 void setMsgsize(int size){msg_size = size;}
53 const int Msgsize()const{return msg_size;} 52 const int Msgsize()const{return msg_size;}
54 53
55 54
56 void setTo(const QStringList&list); 55 void setTo(const QStringList&list);
57 const QStringList&To()const; 56 const QStringList&To()const;
58 void setCC(const QStringList&list); 57 void setCC(const QStringList&list);
59 const QStringList&CC()const; 58 const QStringList&CC()const;
60 void setBcc(const QStringList&list); 59 void setBcc(const QStringList&list);
61 const QStringList&Bcc()const; 60 const QStringList&Bcc()const;
62 void setInreply(const QStringList&list); 61 void setInreply(const QStringList&list);
63 const QStringList&Inreply()const; 62 const QStringList&Inreply()const;
64 void setReferences(const QStringList&list); 63 void setReferences(const QStringList&list);
65 const QStringList&References()const; 64 const QStringList&References()const;
66 65
67 const QBitArray&getFlags()const{return msg_flags;} 66 const QBitArray&getFlags()const{return msg_flags;}
68 void setFlags(const QBitArray&flags){msg_flags = flags;} 67 void setFlags(const QBitArray&flags){msg_flags = flags;}
69 68
70 void setWrapper(AbstractMail*wrapper); 69 void setWrapper(AbstractMail*wrapper);
71 AbstractMail* Wrapper(); 70 AbstractMail* Wrapper();
72 71
73protected: 72protected:
74 QString subject,date,from,mbox,msg_id,replyto; 73 QString subject,date,from,mbox,msg_id,replyto;
75 int msg_number,msg_size; 74 int msg_number,msg_size;
diff --git a/noncore/net/mail/libmailwrapper/mailwrapper.cpp b/noncore/net/mail/libmailwrapper/mailwrapper.cpp
index 6bd98f6..c71d69f 100644
--- a/noncore/net/mail/libmailwrapper/mailwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/mailwrapper.cpp
@@ -1,166 +1,178 @@
1#include <stdlib.h> 1#include <stdlib.h>
2#include <sys/stat.h> 2#include <sys/stat.h>
3#include <sys/types.h> 3#include <sys/types.h>
4#include <unistd.h> 4#include <unistd.h>
5#include <fcntl.h> 5#include <fcntl.h>
6#include <string.h> 6#include <string.h>
7#include <qdir.h> 7#include <qdir.h>
8 8
9#include "mailwrapper.h" 9#include "mailwrapper.h"
10//#include "logindialog.h" 10//#include "logindialog.h"
11//#include "defines.h" 11//#include "defines.h"
12 12
13#define UNDEFINED 64 13#define UNDEFINED 64
14#define MAXLINE 76 14#define MAXLINE 76
15#define UTF16MASK 0x03FFUL 15#define UTF16MASK 0x03FFUL
16#define UTF16SHIFT 10 16#define UTF16SHIFT 10
17#define UTF16BASE 0x10000UL 17#define UTF16BASE 0x10000UL
18#define UTF16HIGHSTART 0xD800UL 18#define UTF16HIGHSTART 0xD800UL
19#define UTF16HIGHEND 0xDBFFUL 19#define UTF16HIGHEND 0xDBFFUL
20#define UTF16LOSTART 0xDC00UL 20#define UTF16LOSTART 0xDC00UL
21#define UTF16LOEND 0xDFFFUL 21#define UTF16LOEND 0xDFFFUL
22 22
23 23
24Attachment::Attachment( DocLnk lnk ) 24Attachment::Attachment( DocLnk lnk )
25{ 25{
26 doc = lnk; 26 doc = lnk;
27 size = QFileInfo( doc.file() ).size(); 27 size = QFileInfo( doc.file() ).size();
28} 28}
29 29
30Folder::Folder(const QString&tmp_name, const QString&sep ) 30Folder::Folder(const QString&tmp_name, const QString&sep )
31{ 31{
32 name = tmp_name; 32 name = tmp_name;
33 nameDisplay = name; 33 nameDisplay = name;
34 separator = sep; 34 separator = sep;
35 prefix = ""; 35 prefix = "";
36} 36}
37 37
38Folder::~Folder()
39{
40}
41
38const QString& Folder::Separator()const 42const QString& Folder::Separator()const
39{ 43{
40 return separator; 44 return separator;
41} 45}
42 46
43IMAPFolder::IMAPFolder(const QString&name,const QString&sep, bool select,bool no_inf, const QString&aprefix ) 47IMAPFolder::IMAPFolder(const QString&name,const QString&sep, bool select,bool no_inf, const QString&aprefix )
44 : Folder( name,sep ),m_MaySelect(select),m_NoInferior(no_inf) 48 : Folder( name,sep ),m_MaySelect(select),m_NoInferior(no_inf)
45{ 49{
46 // Decode IMAP foldername 50 // Decode IMAP foldername
47 nameDisplay = IMAPFolder::decodeFolderName( name ); 51 nameDisplay = IMAPFolder::decodeFolderName( name );
48 /* 52 /*
49 qDebug( "folder " + name + " - displayed as " + nameDisplay ); 53 qDebug( "folder " + name + " - displayed as " + nameDisplay );
50 */ 54 */
51 prefix = aprefix; 55 prefix = aprefix;
52 56
53 if (prefix.length()>0) { 57 if (prefix.length()>0) {
54 if (nameDisplay.startsWith(prefix) && nameDisplay.length()>prefix.length()) { 58 if (nameDisplay.startsWith(prefix) && nameDisplay.length()>prefix.length()) {
55 nameDisplay=nameDisplay.right(nameDisplay.length()-prefix.length()); 59 nameDisplay=nameDisplay.right(nameDisplay.length()-prefix.length());
56 } 60 }
57 } 61 }
58} 62}
59 63
64IMAPFolder::~IMAPFolder()
65{
66}
67
60static unsigned char base64chars[] = 68static unsigned char base64chars[] =
61 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,"; 69 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,";
62 70
63/** 71/**
64 * Decodes base64 encoded parts of the imapfolder name 72 * Decodes base64 encoded parts of the imapfolder name
65 * Code taken from kde cvs: kdebase/kioslave/imap4/rfcdecoder.cc 73 * Code taken from kde cvs: kdebase/kioslave/imap4/rfcdecoder.cc
66 */ 74 */
67QString IMAPFolder::decodeFolderName( const QString &name ) 75QString IMAPFolder::decodeFolderName( const QString &name )
68{ 76{
69 unsigned char c, i, bitcount; 77 unsigned char c, i, bitcount;
70 unsigned long ucs4, utf16, bitbuf; 78 unsigned long ucs4, utf16, bitbuf;
71 unsigned char base64[256], utf8[6]; 79 unsigned char base64[256], utf8[6];
72 unsigned long srcPtr = 0; 80 unsigned long srcPtr = 0;
73 QCString dst = ""; 81 QCString dst = "";
74 QCString src = name.ascii(); 82 QCString src = name.ascii();
75 83
76 /* initialize modified base64 decoding table */ 84 /* initialize modified base64 decoding table */
77 memset(base64, UNDEFINED, sizeof(base64)); 85 memset(base64, UNDEFINED, sizeof(base64));
78 for (i = 0; i < sizeof(base64chars); ++i) { 86 for (i = 0; i < sizeof(base64chars); ++i) {
79 base64[(int)base64chars[i]] = i; 87 base64[(int)base64chars[i]] = i;
80 } 88 }
81 89
82 /* loop until end of string */ 90 /* loop until end of string */
83 while (srcPtr < src.length ()) { 91 while (srcPtr < src.length ()) {
84 c = src[srcPtr++]; 92 c = src[srcPtr++];
85 /* deal with literal characters and &- */ 93 /* deal with literal characters and &- */
86 if (c != '&' || src[srcPtr] == '-') { 94 if (c != '&' || src[srcPtr] == '-') {
87 /* encode literally */ 95 /* encode literally */
88 dst += c; 96 dst += c;
89 /* skip over the '-' if this is an &- sequence */ 97 /* skip over the '-' if this is an &- sequence */
90 if (c == '&') 98 if (c == '&')
91 srcPtr++; 99 srcPtr++;
92 } else { 100 } else {
93 /* convert modified UTF-7 -> UTF-16 -> UCS-4 -> UTF-8 -> HEX */ 101 /* convert modified UTF-7 -> UTF-16 -> UCS-4 -> UTF-8 -> HEX */
94 bitbuf = 0; 102 bitbuf = 0;
95 bitcount = 0; 103 bitcount = 0;
96 ucs4 = 0; 104 ucs4 = 0;
97 while ((c = base64[(unsigned char) src[srcPtr]]) != UNDEFINED) { 105 while ((c = base64[(unsigned char) src[srcPtr]]) != UNDEFINED) {
98 ++srcPtr; 106 ++srcPtr;
99 bitbuf = (bitbuf << 6) | c; 107 bitbuf = (bitbuf << 6) | c;
100 bitcount += 6; 108 bitcount += 6;
101 /* enough bits for a UTF-16 character? */ 109 /* enough bits for a UTF-16 character? */
102 if (bitcount >= 16) { 110 if (bitcount >= 16) {
103 bitcount -= 16; 111 bitcount -= 16;
104 utf16 = (bitcount ? bitbuf >> bitcount : bitbuf) & 0xffff; 112 utf16 = (bitcount ? bitbuf >> bitcount : bitbuf) & 0xffff;
105 /* convert UTF16 to UCS4 */ 113 /* convert UTF16 to UCS4 */
106 if (utf16 >= UTF16HIGHSTART && utf16 <= UTF16HIGHEND) { 114 if (utf16 >= UTF16HIGHSTART && utf16 <= UTF16HIGHEND) {
107 ucs4 = (utf16 - UTF16HIGHSTART) << UTF16SHIFT; 115 ucs4 = (utf16 - UTF16HIGHSTART) << UTF16SHIFT;
108 continue; 116 continue;
109 } else if (utf16 >= UTF16LOSTART && utf16 <= UTF16LOEND) { 117 } else if (utf16 >= UTF16LOSTART && utf16 <= UTF16LOEND) {
110 ucs4 += utf16 - UTF16LOSTART + UTF16BASE; 118 ucs4 += utf16 - UTF16LOSTART + UTF16BASE;
111 } else { 119 } else {
112 ucs4 = utf16; 120 ucs4 = utf16;
113 } 121 }
114 /* convert UTF-16 range of UCS4 to UTF-8 */ 122 /* convert UTF-16 range of UCS4 to UTF-8 */
115 if (ucs4 <= 0x7fUL) { 123 if (ucs4 <= 0x7fUL) {
116 utf8[0] = ucs4; 124 utf8[0] = ucs4;
117 i = 1; 125 i = 1;
118 } else if (ucs4 <= 0x7ffUL) { 126 } else if (ucs4 <= 0x7ffUL) {
119 utf8[0] = 0xc0 | (ucs4 >> 6); 127 utf8[0] = 0xc0 | (ucs4 >> 6);
120 utf8[1] = 0x80 | (ucs4 & 0x3f); 128 utf8[1] = 0x80 | (ucs4 & 0x3f);
121 i = 2; 129 i = 2;
122 } else if (ucs4 <= 0xffffUL) { 130 } else if (ucs4 <= 0xffffUL) {
123 utf8[0] = 0xe0 | (ucs4 >> 12); 131 utf8[0] = 0xe0 | (ucs4 >> 12);
124 utf8[1] = 0x80 | ((ucs4 >> 6) & 0x3f); 132 utf8[1] = 0x80 | ((ucs4 >> 6) & 0x3f);
125 utf8[2] = 0x80 | (ucs4 & 0x3f); 133 utf8[2] = 0x80 | (ucs4 & 0x3f);
126 i = 3; 134 i = 3;
127 } else { 135 } else {
128 utf8[0] = 0xf0 | (ucs4 >> 18); 136 utf8[0] = 0xf0 | (ucs4 >> 18);
129 utf8[1] = 0x80 | ((ucs4 >> 12) & 0x3f); 137 utf8[1] = 0x80 | ((ucs4 >> 12) & 0x3f);
130 utf8[2] = 0x80 | ((ucs4 >> 6) & 0x3f); 138 utf8[2] = 0x80 | ((ucs4 >> 6) & 0x3f);
131 utf8[3] = 0x80 | (ucs4 & 0x3f); 139 utf8[3] = 0x80 | (ucs4 & 0x3f);
132 i = 4; 140 i = 4;
133 } 141 }
134 /* copy it */ 142 /* copy it */
135 for (c = 0; c < i; ++c) { 143 for (c = 0; c < i; ++c) {
136 dst += utf8[c]; 144 dst += utf8[c];
137 } 145 }
138 } 146 }
139 } 147 }
140 /* skip over trailing '-' in modified UTF-7 encoding */ 148 /* skip over trailing '-' in modified UTF-7 encoding */
141 if (src[srcPtr] == '-') 149 if (src[srcPtr] == '-')
142 ++srcPtr; 150 ++srcPtr;
143 } 151 }
144 } 152 }
145 153
146 return QString::fromUtf8( dst.data() ); 154 return QString::fromUtf8( dst.data() );
147} 155}
148 156
149Mail::Mail() 157Mail::Mail()
150 :Opie::oref_count(),name(""), mail(""), to(""), cc(""), bcc(""), reply(""), subject(""), message("") 158 :Opie::oref_count(),name(""), mail(""), to(""), cc(""), bcc(""), reply(""), subject(""), message("")
151{ 159{
152} 160}
153 161
154MHFolder::MHFolder(const QString&disp_name,const QString&mbox) 162MHFolder::MHFolder(const QString&disp_name,const QString&mbox)
155 : Folder( disp_name,"/" ) 163 : Folder( disp_name,"/" )
156{ 164{
157 separator = "/"; 165 separator = "/";
158 name = mbox; 166 name = mbox;
159 if (!disp_name.startsWith("/") && disp_name.length()>0) 167 if (!disp_name.startsWith("/") && disp_name.length()>0)
160 name+="/"; 168 name+="/";
161 name+=disp_name; 169 name+=disp_name;
162 if (disp_name.length()==0) { 170 if (disp_name.length()==0) {
163 nameDisplay = separator; 171 nameDisplay = separator;
164 } 172 }
165 prefix = mbox; 173 prefix = mbox;
166} 174}
175
176MHFolder::~MHFolder()
177{
178}
diff --git a/noncore/net/mail/libmailwrapper/mailwrapper.h b/noncore/net/mail/libmailwrapper/mailwrapper.h
index c66572c..3b3bb32 100644
--- a/noncore/net/mail/libmailwrapper/mailwrapper.h
+++ b/noncore/net/mail/libmailwrapper/mailwrapper.h
@@ -1,104 +1,106 @@
1#ifndef MAILWRAPPER_H 1#ifndef MAILWRAPPER_H
2#define MAILWRAPPER_H 2#define MAILWRAPPER_H
3 3
4#include <qpe/applnk.h> 4#include <qpe/applnk.h>
5 5
6#include <qbitarray.h> 6#include <qbitarray.h>
7#include <qdatetime.h> 7#include <qdatetime.h>
8 8
9#include "settings.h" 9#include "settings.h"
10 10
11#include <opie2/osmart_pointer.h> 11#include <opie2/osmart_pointer.h>
12 12
13class Attachment 13class Attachment
14{ 14{
15public: 15public:
16 Attachment( DocLnk lnk ); 16 Attachment( DocLnk lnk );
17 virtual ~Attachment(){} 17 virtual ~Attachment(){}
18 const QString getFileName()const{ return doc.file(); } 18 const QString getFileName()const{ return doc.file(); }
19 const QString getName()const{ return doc.name(); } 19 const QString getName()const{ return doc.name(); }
20 const QString getMimeType()const{ return doc.type(); } 20 const QString getMimeType()const{ return doc.type(); }
21 const QPixmap getPixmap()const{ return doc.pixmap(); } 21 const QPixmap getPixmap()const{ return doc.pixmap(); }
22 const int getSize()const { return size; } 22 const int getSize()const { return size; }
23 DocLnk getDocLnk() { return doc; } 23 DocLnk getDocLnk() { return doc; }
24 24
25protected: 25protected:
26 DocLnk doc; 26 DocLnk doc;
27 int size; 27 int size;
28 28
29}; 29};
30 30
31class Mail:public Opie::oref_count 31class Mail:public Opie::oref_count
32{ 32{
33public: 33public:
34 Mail(); 34 Mail();
35 /* Possible that this destructor must not be declared virtual 35 /* Possible that this destructor must not be declared virtual
36 * 'cause it seems that it will never have some child classes. 36 * 'cause it seems that it will never have some child classes.
37 * in this case this object will not get a virtual table -> memory and 37 * in this case this object will not get a virtual table -> memory and
38 * speed will be a little bit better? 38 * speed will be a little bit better?
39 */ 39 */
40 virtual ~Mail(){} 40 virtual ~Mail(){}
41 void addAttachment( Attachment *att ) { attList.append( att ); } 41 void addAttachment( Attachment *att ) { attList.append( att ); }
42 const QList<Attachment>& getAttachments()const { return attList; } 42 const QList<Attachment>& getAttachments()const { return attList; }
43 void removeAttachment( Attachment *att ) { attList.remove( att ); } 43 void removeAttachment( Attachment *att ) { attList.remove( att ); }
44 const QString&getName()const { return name; } 44 const QString&getName()const { return name; }
45 void setName( QString s ) { name = s; } 45 void setName( QString s ) { name = s; }
46 const QString&getMail()const{ return mail; } 46 const QString&getMail()const{ return mail; }
47 void setMail( const QString&s ) { mail = s; } 47 void setMail( const QString&s ) { mail = s; }
48 const QString&getTo()const{ return to; } 48 const QString&getTo()const{ return to; }
49 void setTo( const QString&s ) { to = s; } 49 void setTo( const QString&s ) { to = s; }
50 const QString&getCC()const{ return cc; } 50 const QString&getCC()const{ return cc; }
51 void setCC( const QString&s ) { cc = s; } 51 void setCC( const QString&s ) { cc = s; }
52 const QString&getBCC()const { return bcc; } 52 const QString&getBCC()const { return bcc; }
53 void setBCC( const QString&s ) { bcc = s; } 53 void setBCC( const QString&s ) { bcc = s; }
54 const QString&getMessage()const { return message; } 54 const QString&getMessage()const { return message; }
55 void setMessage( const QString&s ) { message = s; } 55 void setMessage( const QString&s ) { message = s; }
56 const QString&getSubject()const { return subject; } 56 const QString&getSubject()const { return subject; }
57 void setSubject( const QString&s ) { subject = s; } 57 void setSubject( const QString&s ) { subject = s; }
58 const QString&getReply()const{ return reply; } 58 const QString&getReply()const{ return reply; }
59 void setReply( const QString&a ) { reply = a; } 59 void setReply( const QString&a ) { reply = a; }
60 void setInreply(const QStringList&list){m_in_reply_to = list;} 60 void setInreply(const QStringList&list){m_in_reply_to = list;}
61 const QStringList&Inreply()const{return m_in_reply_to;} 61 const QStringList&Inreply()const{return m_in_reply_to;}
62 62
63private: 63private:
64 QList<Attachment> attList; 64 QList<Attachment> attList;
65 QString name, mail, to, cc, bcc, reply, subject, message; 65 QString name, mail, to, cc, bcc, reply, subject, message;
66 QStringList m_in_reply_to; 66 QStringList m_in_reply_to;
67}; 67};
68 68
69class Folder : public QObject 69class Folder:public Opie::oref_count
70{ 70{
71 Q_OBJECT
72
73public: 71public:
74 Folder( const QString&init_name,const QString&sep ); 72 Folder( const QString&init_name,const QString&sep );
73 virtual ~Folder();
75 const QString&getDisplayName()const { return nameDisplay; } 74 const QString&getDisplayName()const { return nameDisplay; }
76 const QString&getName()const { return name; } 75 const QString&getName()const { return name; }
77 const QString&getPrefix()const{return prefix; } 76 const QString&getPrefix()const{return prefix; }
78 virtual bool may_select()const{return true;} 77 virtual bool may_select()const{return true;}
79 virtual bool no_inferior()const{return true;} 78 virtual bool no_inferior()const{return true;}
80 const QString&Separator()const; 79 const QString&Separator()const;
81 80
82protected: 81protected:
83 QString nameDisplay, name, separator,prefix; 82 QString nameDisplay, name, separator,prefix;
84}; 83};
85 84
85typedef Opie::osmart_pointer<Folder> FolderP;
86
86class MHFolder : public Folder 87class MHFolder : public Folder
87{ 88{
88 Q_OBJECT
89public: 89public:
90 MHFolder(const QString&disp_name,const QString&mbox); 90 MHFolder(const QString&disp_name,const QString&mbox);
91 virtual ~MHFolder();
91}; 92};
92 93
93class IMAPFolder : public Folder 94class IMAPFolder : public Folder
94{ 95{
95 public: 96 public:
96 IMAPFolder(const QString&name, const QString&sep, bool select=true,bool noinf=false,const QString&prefix="" ); 97 IMAPFolder(const QString&name, const QString&sep, bool select=true,bool noinf=false,const QString&prefix="" );
98 virtual ~IMAPFolder();
97 virtual bool may_select()const{return m_MaySelect;} 99 virtual bool may_select()const{return m_MaySelect;}
98 virtual bool no_inferior()const{return m_NoInferior;} 100 virtual bool no_inferior()const{return m_NoInferior;}
99 private: 101 private:
100 static QString decodeFolderName( const QString &name ); 102 static QString decodeFolderName( const QString &name );
101 bool m_MaySelect,m_NoInferior; 103 bool m_MaySelect,m_NoInferior;
102}; 104};
103 105
104#endif 106#endif
diff --git a/noncore/net/mail/libmailwrapper/mboxwrapper.cpp b/noncore/net/mail/libmailwrapper/mboxwrapper.cpp
index abe4bb6..9ff3de2 100644
--- a/noncore/net/mail/libmailwrapper/mboxwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/mboxwrapper.cpp
@@ -1,335 +1,334 @@
1#include "mboxwrapper.h" 1#include "mboxwrapper.h"
2#include "mailtypes.h" 2#include "mailtypes.h"
3#include "mailwrapper.h" 3#include "mailwrapper.h"
4#include <libetpan/libetpan.h> 4#include <libetpan/libetpan.h>
5#include <qdir.h> 5#include <qdir.h>
6#include <stdlib.h> 6#include <stdlib.h>
7#include <qpe/global.h> 7#include <qpe/global.h>
8 8
9MBOXwrapper::MBOXwrapper(const QString & mbox_dir,const QString&mbox_name) 9MBOXwrapper::MBOXwrapper(const QString & mbox_dir,const QString&mbox_name)
10 : Genericwrapper(),MBOXPath(mbox_dir),MBOXName(mbox_name) 10 : Genericwrapper(),MBOXPath(mbox_dir),MBOXName(mbox_name)
11{ 11{
12 QDir dir(MBOXPath); 12 QDir dir(MBOXPath);
13 if (!dir.exists()) { 13 if (!dir.exists()) {
14 dir.mkdir(MBOXPath); 14 dir.mkdir(MBOXPath);
15 } 15 }
16} 16}
17 17
18MBOXwrapper::~MBOXwrapper() 18MBOXwrapper::~MBOXwrapper()
19{ 19{
20} 20}
21 21
22void MBOXwrapper::listMessages(const QString & mailbox, QList<RecMail> &target ) 22void MBOXwrapper::listMessages(const QString & mailbox, QList<RecMail> &target )
23{ 23{
24 mailstorage*storage = mailstorage_new(NULL); 24 mailstorage*storage = mailstorage_new(NULL);
25 QString p = MBOXPath+"/"; 25 QString p = MBOXPath+"/";
26 p+=mailbox; 26 p+=mailbox;
27 27
28 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0); 28 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
29 mailfolder*folder; 29 mailfolder*folder;
30 folder = mailfolder_new( storage,(char*)p.latin1(),NULL); 30 folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
31 r = mailfolder_connect(folder); 31 r = mailfolder_connect(folder);
32 if (r != MAIL_NO_ERROR) { 32 if (r != MAIL_NO_ERROR) {
33 qDebug("Error initializing mbox"); 33 qDebug("Error initializing mbox");
34 mailfolder_free(folder); 34 mailfolder_free(folder);
35 mailstorage_free(storage); 35 mailstorage_free(storage);
36 return; 36 return;
37 } 37 }
38 38
39 parseList(target,folder->fld_session,mailbox); 39 parseList(target,folder->fld_session,mailbox);
40 40
41 mailfolder_disconnect(folder); 41 mailfolder_disconnect(folder);
42 mailfolder_free(folder); 42 mailfolder_free(folder);
43 mailstorage_free(storage); 43 mailstorage_free(storage);
44 Global::statusMessage(tr("Mailbox has %1 mail(s)").arg(target.count())); 44 Global::statusMessage(tr("Mailbox has %1 mail(s)").arg(target.count()));
45} 45}
46 46
47QList<Folder>* MBOXwrapper::listFolders() 47QValueList<Opie::osmart_pointer<Folder> >* MBOXwrapper::listFolders()
48{ 48{
49 QList<Folder> * folders = new QList<Folder>(); 49 QValueList<Opie::osmart_pointer<Folder> >* folders = new QValueList<Opie::osmart_pointer<Folder> >();
50 folders->setAutoDelete( false );
51 QDir dir(MBOXPath); 50 QDir dir(MBOXPath);
52 if (!dir.exists()) return folders; 51 if (!dir.exists()) return folders;
53 dir.setFilter(QDir::Files|QDir::Writable|QDir::Readable); 52 dir.setFilter(QDir::Files|QDir::Writable|QDir::Readable);
54 QStringList entries = dir.entryList(); 53 QStringList entries = dir.entryList();
55 QStringList::ConstIterator it = entries.begin(); 54 QStringList::ConstIterator it = entries.begin();
56 for (;it!=entries.end();++it) { 55 for (;it!=entries.end();++it) {
57 Folder*inb=new Folder(*it,"/"); 56 FolderP inb=new Folder(*it,"/");
58 folders->append(inb); 57 folders->append(inb);
59 } 58 }
60 return folders; 59 return folders;
61} 60}
62 61
63void MBOXwrapper::deleteMail(const RecMail&mail) 62void MBOXwrapper::deleteMail(const RecMail&mail)
64{ 63{
65 mailstorage*storage = mailstorage_new(NULL); 64 mailstorage*storage = mailstorage_new(NULL);
66 QString p = MBOXPath+"/"; 65 QString p = MBOXPath+"/";
67 p+=mail.getMbox(); 66 p+=mail.getMbox();
68 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0); 67 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
69 mailfolder*folder; 68 mailfolder*folder;
70 folder = mailfolder_new( storage,(char*)p.latin1(),NULL); 69 folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
71 r = mailfolder_connect(folder); 70 r = mailfolder_connect(folder);
72 if (r != MAIL_NO_ERROR) { 71 if (r != MAIL_NO_ERROR) {
73 qDebug("Error initializing mbox"); 72 qDebug("Error initializing mbox");
74 mailfolder_free(folder); 73 mailfolder_free(folder);
75 mailstorage_free(storage); 74 mailstorage_free(storage);
76 return; 75 return;
77 } 76 }
78 r = mailsession_remove_message(folder->fld_session,mail.getNumber()); 77 r = mailsession_remove_message(folder->fld_session,mail.getNumber());
79 if (r != MAIL_NO_ERROR) { 78 if (r != MAIL_NO_ERROR) {
80 qDebug("error deleting mail"); 79 qDebug("error deleting mail");
81 } 80 }
82 mailfolder_free(folder); 81 mailfolder_free(folder);
83 mailstorage_free(storage); 82 mailstorage_free(storage);
84} 83}
85 84
86void MBOXwrapper::answeredMail(const RecMail&) 85void MBOXwrapper::answeredMail(const RecMail&)
87{ 86{
88} 87}
89 88
90RecBody MBOXwrapper::fetchBody( const RecMail &mail ) 89RecBody MBOXwrapper::fetchBody( const RecMail &mail )
91{ 90{
92 RecBody body; 91 RecBody body;
93 mailstorage*storage = mailstorage_new(NULL); 92 mailstorage*storage = mailstorage_new(NULL);
94 QString p = MBOXPath+"/"; 93 QString p = MBOXPath+"/";
95 p+=mail.getMbox(); 94 p+=mail.getMbox();
96 mailmessage * msg; 95 mailmessage * msg;
97 char*data=0; 96 char*data=0;
98 size_t size; 97 size_t size;
99 98
100 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0); 99 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
101 mailfolder*folder; 100 mailfolder*folder;
102 folder = mailfolder_new( storage,(char*)p.latin1(),NULL); 101 folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
103 r = mailfolder_connect(folder); 102 r = mailfolder_connect(folder);
104 if (r != MAIL_NO_ERROR) { 103 if (r != MAIL_NO_ERROR) {
105 qDebug("Error initializing mbox"); 104 qDebug("Error initializing mbox");
106 mailfolder_free(folder); 105 mailfolder_free(folder);
107 mailstorage_free(storage); 106 mailstorage_free(storage);
108 return body; 107 return body;
109 } 108 }
110 r = mailsession_get_message(folder->fld_session, mail.getNumber(), &msg); 109 r = mailsession_get_message(folder->fld_session, mail.getNumber(), &msg);
111 if (r != MAIL_NO_ERROR) { 110 if (r != MAIL_NO_ERROR) {
112 qDebug("Error fetching mail %i",mail.getNumber()); 111 qDebug("Error fetching mail %i",mail.getNumber());
113 mailfolder_free(folder); 112 mailfolder_free(folder);
114 mailstorage_free(storage); 113 mailstorage_free(storage);
115 return body; 114 return body;
116 } 115 }
117 r = mailmessage_fetch(msg,&data,&size); 116 r = mailmessage_fetch(msg,&data,&size);
118 if (r != MAIL_NO_ERROR) { 117 if (r != MAIL_NO_ERROR) {
119 qDebug("Error fetching mail %i",mail.getNumber()); 118 qDebug("Error fetching mail %i",mail.getNumber());
120 mailfolder_free(folder); 119 mailfolder_free(folder);
121 mailstorage_free(storage); 120 mailstorage_free(storage);
122 mailmessage_free(msg); 121 mailmessage_free(msg);
123 return body; 122 return body;
124 } 123 }
125 body = parseMail(msg); 124 body = parseMail(msg);
126 mailmessage_fetch_result_free(msg,data); 125 mailmessage_fetch_result_free(msg,data);
127 mailfolder_free(folder); 126 mailfolder_free(folder);
128 mailstorage_free(storage); 127 mailstorage_free(storage);
129 128
130 return body; 129 return body;
131} 130}
132 131
133void MBOXwrapper::mbox_progress( size_t current, size_t maximum ) 132void MBOXwrapper::mbox_progress( size_t current, size_t maximum )
134{ 133{
135 qDebug("MBOX %i von %i",current,maximum); 134 qDebug("MBOX %i von %i",current,maximum);
136} 135}
137 136
138int MBOXwrapper::createMbox(const QString&folder,const Folder*,const QString&,bool ) 137int MBOXwrapper::createMbox(const QString&folder,const FolderP&,const QString&,bool )
139{ 138{
140 QString p = MBOXPath+"/"; 139 QString p = MBOXPath+"/";
141 p+=folder; 140 p+=folder;
142 QFileInfo fi(p); 141 QFileInfo fi(p);
143 if (fi.exists()) { 142 if (fi.exists()) {
144 Global::statusMessage(tr("Mailbox exists.")); 143 Global::statusMessage(tr("Mailbox exists."));
145 return 0; 144 return 0;
146 } 145 }
147 mailmbox_folder*f = 0; 146 mailmbox_folder*f = 0;
148 if (mailmbox_init(p.latin1(),0,1,0,&f) != MAIL_NO_ERROR) { 147 if (mailmbox_init(p.latin1(),0,1,0,&f) != MAIL_NO_ERROR) {
149 Global::statusMessage(tr("Error init folder")); 148 Global::statusMessage(tr("Error init folder"));
150 return 0; 149 return 0;
151 } 150 }
152 if (f) mailmbox_done(f); 151 if (f) mailmbox_done(f);
153 return 1; 152 return 1;
154} 153}
155 154
156void MBOXwrapper::storeMessage(const char*msg,size_t length, const QString&folder) 155void MBOXwrapper::storeMessage(const char*msg,size_t length, const QString&folder)
157{ 156{
158 QString p = MBOXPath+"/"; 157 QString p = MBOXPath+"/";
159 p+=folder; 158 p+=folder;
160 mailmbox_folder*f = 0; 159 mailmbox_folder*f = 0;
161 int r = mailmbox_init(p.latin1(),0,1,0,&f); 160 int r = mailmbox_init(p.latin1(),0,1,0,&f);
162 if (r != MAIL_NO_ERROR) { 161 if (r != MAIL_NO_ERROR) {
163 Global::statusMessage(tr("Error init folder")); 162 Global::statusMessage(tr("Error init folder"));
164 return; 163 return;
165 } 164 }
166 r = mailmbox_append_message(f,msg,length); 165 r = mailmbox_append_message(f,msg,length);
167 if (r != MAIL_NO_ERROR) { 166 if (r != MAIL_NO_ERROR) {
168 Global::statusMessage(tr("Error writing to message folder")); 167 Global::statusMessage(tr("Error writing to message folder"));
169 } 168 }
170 mailmbox_done(f); 169 mailmbox_done(f);
171} 170}
172 171
173encodedString* MBOXwrapper::fetchRawBody(const RecMail&mail) 172encodedString* MBOXwrapper::fetchRawBody(const RecMail&mail)
174{ 173{
175 RecBody body; 174 RecBody body;
176 mailstorage*storage = mailstorage_new(NULL); 175 mailstorage*storage = mailstorage_new(NULL);
177 QString p = MBOXPath+"/"; 176 QString p = MBOXPath+"/";
178 p+=mail.getMbox(); 177 p+=mail.getMbox();
179 mailmessage * msg; 178 mailmessage * msg;
180 char*data=0; 179 char*data=0;
181 size_t size; 180 size_t size;
182 181
183 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0); 182 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
184 mailfolder*folder; 183 mailfolder*folder;
185 folder = mailfolder_new( storage,(char*)p.latin1(),NULL); 184 folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
186 r = mailfolder_connect(folder); 185 r = mailfolder_connect(folder);
187 if (r != MAIL_NO_ERROR) { 186 if (r != MAIL_NO_ERROR) {
188 Global::statusMessage(tr("Error initializing mbox")); 187 Global::statusMessage(tr("Error initializing mbox"));
189 mailfolder_free(folder); 188 mailfolder_free(folder);
190 mailstorage_free(storage); 189 mailstorage_free(storage);
191 return 0; 190 return 0;
192 } 191 }
193 r = mailsession_get_message(folder->fld_session, mail.getNumber(), &msg); 192 r = mailsession_get_message(folder->fld_session, mail.getNumber(), &msg);
194 if (r != MAIL_NO_ERROR) { 193 if (r != MAIL_NO_ERROR) {
195 Global::statusMessage(tr("Error fetching mail %i").arg(mail.getNumber())); 194 Global::statusMessage(tr("Error fetching mail %i").arg(mail.getNumber()));
196 mailfolder_free(folder); 195 mailfolder_free(folder);
197 mailstorage_free(storage); 196 mailstorage_free(storage);
198 return 0; 197 return 0;
199 } 198 }
200 r = mailmessage_fetch(msg,&data,&size); 199 r = mailmessage_fetch(msg,&data,&size);
201 if (r != MAIL_NO_ERROR) { 200 if (r != MAIL_NO_ERROR) {
202 Global::statusMessage(tr("Error fetching mail %i").arg(mail.getNumber())); 201 Global::statusMessage(tr("Error fetching mail %i").arg(mail.getNumber()));
203 mailfolder_free(folder); 202 mailfolder_free(folder);
204 mailstorage_free(storage); 203 mailstorage_free(storage);
205 mailmessage_free(msg); 204 mailmessage_free(msg);
206 return 0; 205 return 0;
207 } 206 }
208 encodedString*result = new encodedString(data,size); 207 encodedString*result = new encodedString(data,size);
209 208
210 mailfolder_free(folder); 209 mailfolder_free(folder);
211 mailstorage_free(storage); 210 mailstorage_free(storage);
212 mailmessage_free(msg); 211 mailmessage_free(msg);
213 return result; 212 return result;
214} 213}
215 214
216void MBOXwrapper::deleteMails(const QString & mailbox,QList<RecMail> &target) 215void MBOXwrapper::deleteMails(const QString & mailbox,QList<RecMail> &target)
217{ 216{
218 QString p = MBOXPath+"/"; 217 QString p = MBOXPath+"/";
219 p+=mailbox; 218 p+=mailbox;
220 mailmbox_folder*f = 0; 219 mailmbox_folder*f = 0;
221 int r = mailmbox_init(p.latin1(),0,1,0,&f); 220 int r = mailmbox_init(p.latin1(),0,1,0,&f);
222 if (r != MAIL_NO_ERROR) { 221 if (r != MAIL_NO_ERROR) {
223 qDebug("Error init folder"); 222 qDebug("Error init folder");
224 return; 223 return;
225 } 224 }
226 deleteMails(f,target); 225 deleteMails(f,target);
227 mailmbox_done(f); 226 mailmbox_done(f);
228} 227}
229 228
230void MBOXwrapper::deleteMails(mailmbox_folder*f,QList<RecMail> &target) 229void MBOXwrapper::deleteMails(mailmbox_folder*f,QList<RecMail> &target)
231{ 230{
232 if (!f) return; 231 if (!f) return;
233 int r; 232 int r;
234 for (unsigned int i=0; i < target.count();++i) { 233 for (unsigned int i=0; i < target.count();++i) {
235 r = mailmbox_delete_msg(f,target.at(i)->getNumber()); 234 r = mailmbox_delete_msg(f,target.at(i)->getNumber());
236 if (r!=MAILMBOX_NO_ERROR) { 235 if (r!=MAILMBOX_NO_ERROR) {
237 qDebug("error delete mail"); 236 qDebug("error delete mail");
238 } 237 }
239 } 238 }
240 r = mailmbox_expunge(f); 239 r = mailmbox_expunge(f);
241 if (r != MAILMBOX_NO_ERROR) { 240 if (r != MAILMBOX_NO_ERROR) {
242 qDebug("error expunge mailbox"); 241 qDebug("error expunge mailbox");
243 } 242 }
244} 243}
245 244
246int MBOXwrapper::deleteAllMail(const Folder*tfolder) 245int MBOXwrapper::deleteAllMail(const FolderP&tfolder)
247{ 246{
248 if (!tfolder) return 0; 247 if (!tfolder) return 0;
249 QString p = MBOXPath+"/"+tfolder->getDisplayName(); 248 QString p = MBOXPath+"/"+tfolder->getDisplayName();
250 int res = 1; 249 int res = 1;
251 250
252 mailfolder*folder = 0; 251 mailfolder*folder = 0;
253 mailmessage_list*l=0; 252 mailmessage_list*l=0;
254 mailstorage*storage = mailstorage_new(NULL); 253 mailstorage*storage = mailstorage_new(NULL);
255 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0); 254 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
256 if (r != MAIL_NO_ERROR) { 255 if (r != MAIL_NO_ERROR) {
257 Global::statusMessage(tr("Error initializing mbox")); 256 Global::statusMessage(tr("Error initializing mbox"));
258 res = 0; 257 res = 0;
259 } 258 }
260 if (res) { 259 if (res) {
261 folder = mailfolder_new( storage,(char*)p.latin1(),NULL); 260 folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
262 r = mailfolder_connect(folder); 261 r = mailfolder_connect(folder);
263 if (r != MAIL_NO_ERROR) { 262 if (r != MAIL_NO_ERROR) {
264 Global::statusMessage(tr("Error initializing mbox")); 263 Global::statusMessage(tr("Error initializing mbox"));
265 res = 0; 264 res = 0;
266 } 265 }
267 } 266 }
268 if (res) { 267 if (res) {
269 r = mailsession_get_messages_list(folder->fld_session,&l); 268 r = mailsession_get_messages_list(folder->fld_session,&l);
270 if (r != MAIL_NO_ERROR) { 269 if (r != MAIL_NO_ERROR) {
271 qDebug("Error message list"); 270 qDebug("Error message list");
272 res=0; 271 res=0;
273 } 272 }
274 } 273 }
275 for(unsigned int i = 0 ; l!= 0 && res==1 && i < carray_count(l->msg_tab) ; ++i) { 274 for(unsigned int i = 0 ; l!= 0 && res==1 && i < carray_count(l->msg_tab) ; ++i) {
276 r = mailsession_remove_message(folder->fld_session,i+1); 275 r = mailsession_remove_message(folder->fld_session,i+1);
277 if (r != MAIL_NO_ERROR) { 276 if (r != MAIL_NO_ERROR) {
278 Global::statusMessage(tr("Error deleting mail %1").arg(i+1)); 277 Global::statusMessage(tr("Error deleting mail %1").arg(i+1));
279 res = 0; 278 res = 0;
280 break; 279 break;
281 } 280 }
282 } 281 }
283 if (l) mailmessage_list_free(l); 282 if (l) mailmessage_list_free(l);
284 if (folder) mailfolder_free(folder); 283 if (folder) mailfolder_free(folder);
285 if (storage) mailstorage_free(storage); 284 if (storage) mailstorage_free(storage);
286 return res; 285 return res;
287} 286}
288 287
289int MBOXwrapper::deleteMbox(const Folder*tfolder) 288int MBOXwrapper::deleteMbox(const FolderP&tfolder)
290{ 289{
291 if (!tfolder) return 0; 290 if (!tfolder) return 0;
292 QString p = MBOXPath+"/"+tfolder->getDisplayName(); 291 QString p = MBOXPath+"/"+tfolder->getDisplayName();
293 QFile fi(p); 292 QFile fi(p);
294 if (!fi.exists()) { 293 if (!fi.exists()) {
295 Global::statusMessage(tr("Mailbox doesn't exist.")); 294 Global::statusMessage(tr("Mailbox doesn't exist."));
296 return 0; 295 return 0;
297 } 296 }
298 if (!fi.remove()) { 297 if (!fi.remove()) {
299 Global::statusMessage(tr("Error deleting Mailbox.")); 298 Global::statusMessage(tr("Error deleting Mailbox."));
300 return 0; 299 return 0;
301 } 300 }
302 return 1; 301 return 1;
303} 302}
304 303
305void MBOXwrapper::statusFolder(folderStat&target_stat,const QString & mailbox) 304void MBOXwrapper::statusFolder(folderStat&target_stat,const QString & mailbox)
306{ 305{
307 mailfolder*folder = 0; 306 mailfolder*folder = 0;
308 mailstorage*storage = mailstorage_new(NULL); 307 mailstorage*storage = mailstorage_new(NULL);
309 target_stat.message_count = 0; 308 target_stat.message_count = 0;
310 target_stat.message_unseen = 0; 309 target_stat.message_unseen = 0;
311 target_stat.message_recent = 0; 310 target_stat.message_recent = 0;
312 QString p = MBOXPath+"/"+mailbox; 311 QString p = MBOXPath+"/"+mailbox;
313 QFile fi(p); 312 QFile fi(p);
314 if (!fi.exists()) { 313 if (!fi.exists()) {
315 Global::statusMessage(tr("Mailbox doesn't exist.")); 314 Global::statusMessage(tr("Mailbox doesn't exist."));
316 return; 315 return;
317 } 316 }
318 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0); 317 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
319 folder = mailfolder_new( storage,(char*)p.latin1(),NULL); 318 folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
320 r = mailfolder_connect(folder); 319 r = mailfolder_connect(folder);
321 r = mailsession_status_folder(folder->fld_session,(char*)mailbox.latin1(),&target_stat.message_count, 320 r = mailsession_status_folder(folder->fld_session,(char*)mailbox.latin1(),&target_stat.message_count,
322 &target_stat.message_recent,&target_stat.message_unseen); 321 &target_stat.message_recent,&target_stat.message_unseen);
323 if (folder) mailfolder_free(folder); 322 if (folder) mailfolder_free(folder);
324 if (storage) mailstorage_free(storage); 323 if (storage) mailstorage_free(storage);
325} 324}
326 325
327MAILLIB::ATYPE MBOXwrapper::getType()const 326MAILLIB::ATYPE MBOXwrapper::getType()const
328{ 327{
329 return MAILLIB::A_MBOX; 328 return MAILLIB::A_MBOX;
330} 329}
331 330
332const QString&MBOXwrapper::getName()const 331const QString&MBOXwrapper::getName()const
333{ 332{
334 return MBOXName; 333 return MBOXName;
335} 334}
diff --git a/noncore/net/mail/libmailwrapper/mboxwrapper.h b/noncore/net/mail/libmailwrapper/mboxwrapper.h
index 7e7f359..c3d9b50 100644
--- a/noncore/net/mail/libmailwrapper/mboxwrapper.h
+++ b/noncore/net/mail/libmailwrapper/mboxwrapper.h
@@ -1,47 +1,48 @@
1#ifndef __MBOX_WRAPPER_H 1#ifndef __MBOX_WRAPPER_H
2#define __MBOX_WRAPPER_H 2#define __MBOX_WRAPPER_H
3 3
4#include "genericwrapper.h" 4#include "genericwrapper.h"
5#include <qstring.h> 5#include <qstring.h>
6 6
7class RecMail; 7class RecMail;
8class RecBody; 8class RecBody;
9class encodedString; 9class encodedString;
10struct mailmbox_folder; 10struct mailmbox_folder;
11 11
12class MBOXwrapper : public Genericwrapper 12class MBOXwrapper : public Genericwrapper
13{ 13{
14 Q_OBJECT 14 Q_OBJECT
15 15
16public: 16public:
17 MBOXwrapper(const QString & dir,const QString&name); 17 MBOXwrapper(const QString & dir,const QString&name);
18 virtual ~MBOXwrapper(); 18 virtual ~MBOXwrapper();
19 19
20 virtual void listMessages(const QString & mailbox, QList<RecMail> &target ); 20 virtual void listMessages(const QString & mailbox, QList<RecMail> &target );
21 virtual QList<Folder>* listFolders(); 21 virtual QValueList<Opie::osmart_pointer<Folder> >* listFolders();
22 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX"); 22 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX");
23 23
24 virtual void deleteMail(const RecMail&mail); 24 virtual void deleteMail(const RecMail&mail);
25 virtual void answeredMail(const RecMail&mail); 25 virtual void answeredMail(const RecMail&mail);
26 26
27 virtual int createMbox(const QString&folder,const Folder*f=0,const QString&d="",bool s=false); 27 virtual int createMbox(const QString&folder,const Opie::osmart_pointer<Folder>&f=0,
28 virtual int deleteMbox(const Folder*); 28 const QString&d="",bool s=false);
29 virtual int deleteMbox(const Opie::osmart_pointer<Folder>&);
29 30
30 virtual void storeMessage(const char*msg,size_t length, const QString&folder); 31 virtual void storeMessage(const char*msg,size_t length, const QString&folder);
31 32
32 virtual RecBody fetchBody( const RecMail &mail ); 33 virtual RecBody fetchBody( const RecMail &mail );
33 static void mbox_progress( size_t current, size_t maximum ); 34 static void mbox_progress( size_t current, size_t maximum );
34 35
35 virtual encodedString* fetchRawBody(const RecMail&mail); 36 virtual encodedString* fetchRawBody(const RecMail&mail);
36 virtual void deleteMails(const QString & FolderName,QList<RecMail> &target); 37 virtual void deleteMails(const QString & FolderName,QList<RecMail> &target);
37 virtual int deleteAllMail(const Folder*); 38 virtual int deleteAllMail(const Opie::osmart_pointer<Folder>&);
38 virtual MAILLIB::ATYPE getType()const; 39 virtual MAILLIB::ATYPE getType()const;
39 virtual const QString&getName()const; 40 virtual const QString&getName()const;
40 41
41protected: 42protected:
42 static void deleteMails(mailmbox_folder*f,QList<RecMail> &target); 43 static void deleteMails(mailmbox_folder*f,QList<RecMail> &target);
43 QString MBOXPath; 44 QString MBOXPath;
44 QString MBOXName; 45 QString MBOXName;
45}; 46};
46 47
47#endif 48#endif
diff --git a/noncore/net/mail/libmailwrapper/mhwrapper.cpp b/noncore/net/mail/libmailwrapper/mhwrapper.cpp
index 560eab0..aaaa20a 100644
--- a/noncore/net/mail/libmailwrapper/mhwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/mhwrapper.cpp
@@ -15,429 +15,429 @@ MHwrapper::MHwrapper(const QString & mbox_dir,const QString&mbox_name)
15 if (MHPath[MHPath.length()-1]=='/') { 15 if (MHPath[MHPath.length()-1]=='/') {
16 MHPath=MHPath.left(MHPath.length()-1); 16 MHPath=MHPath.left(MHPath.length()-1);
17 } 17 }
18 qDebug(MHPath); 18 qDebug(MHPath);
19 QDir dir(MHPath); 19 QDir dir(MHPath);
20 if (!dir.exists()) { 20 if (!dir.exists()) {
21 dir.mkdir(MHPath); 21 dir.mkdir(MHPath);
22 } 22 }
23 init_storage(); 23 init_storage();
24 } 24 }
25} 25}
26 26
27void MHwrapper::init_storage() 27void MHwrapper::init_storage()
28{ 28{
29 int r; 29 int r;
30 QString pre = MHPath; 30 QString pre = MHPath;
31 if (!m_storage) { 31 if (!m_storage) {
32 m_storage = mailstorage_new(NULL); 32 m_storage = mailstorage_new(NULL);
33 r = mh_mailstorage_init(m_storage,(char*)pre.latin1(),0,0,0); 33 r = mh_mailstorage_init(m_storage,(char*)pre.latin1(),0,0,0);
34 if (r != MAIL_NO_ERROR) { 34 if (r != MAIL_NO_ERROR) {
35 qDebug("error initializing storage"); 35 qDebug("error initializing storage");
36 mailstorage_free(m_storage); 36 mailstorage_free(m_storage);
37 m_storage = 0; 37 m_storage = 0;
38 return; 38 return;
39 } 39 }
40 } 40 }
41 r = mailstorage_connect(m_storage); 41 r = mailstorage_connect(m_storage);
42 if (r!=MAIL_NO_ERROR) { 42 if (r!=MAIL_NO_ERROR) {
43 qDebug("error connecting storage"); 43 qDebug("error connecting storage");
44 mailstorage_free(m_storage); 44 mailstorage_free(m_storage);
45 m_storage = 0; 45 m_storage = 0;
46 } 46 }
47} 47}
48 48
49void MHwrapper::clean_storage() 49void MHwrapper::clean_storage()
50{ 50{
51 if (m_storage) { 51 if (m_storage) {
52 mailstorage_disconnect(m_storage); 52 mailstorage_disconnect(m_storage);
53 mailstorage_free(m_storage); 53 mailstorage_free(m_storage);
54 m_storage = 0; 54 m_storage = 0;
55 } 55 }
56} 56}
57 57
58MHwrapper::~MHwrapper() 58MHwrapper::~MHwrapper()
59{ 59{
60 clean_storage(); 60 clean_storage();
61} 61}
62 62
63void MHwrapper::listMessages(const QString & mailbox, QList<RecMail> &target ) 63void MHwrapper::listMessages(const QString & mailbox, QList<RecMail> &target )
64{ 64{
65 init_storage(); 65 init_storage();
66 if (!m_storage) { 66 if (!m_storage) {
67 return; 67 return;
68 } 68 }
69 QString f = buildPath(mailbox); 69 QString f = buildPath(mailbox);
70 int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1()); 70 int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1());
71 if (r!=MAIL_NO_ERROR) { 71 if (r!=MAIL_NO_ERROR) {
72 qDebug("listMessages: error selecting folder!"); 72 qDebug("listMessages: error selecting folder!");
73 return; 73 return;
74 } 74 }
75 parseList(target,m_storage->sto_session,f); 75 parseList(target,m_storage->sto_session,f);
76 Global::statusMessage(tr("Mailbox has %1 mail(s)").arg(target.count())); 76 Global::statusMessage(tr("Mailbox has %1 mail(s)").arg(target.count()));
77} 77}
78 78
79QList<Folder>* MHwrapper::listFolders() 79QValueList<Opie::osmart_pointer<Folder> >* MHwrapper::listFolders()
80{ 80{
81 QList<Folder> * folders = new QList<Folder>(); 81 QValueList<Opie::osmart_pointer<Folder> >* folders = new QValueList<Opie::osmart_pointer<Folder> >();
82 folders->setAutoDelete( false );
83 /* this is needed! */ 82 /* this is needed! */
84 if (m_storage) mailstorage_disconnect(m_storage); 83 if (m_storage) mailstorage_disconnect(m_storage);
85 init_storage(); 84 init_storage();
86 if (!m_storage) { 85 if (!m_storage) {
87 return folders; 86 return folders;
88 } 87 }
89 mail_list*flist = 0; 88 mail_list*flist = 0;
90 clistcell*current=0; 89 clistcell*current=0;
91 int r = mailsession_list_folders(m_storage->sto_session,NULL,&flist); 90 int r = mailsession_list_folders(m_storage->sto_session,NULL,&flist);
92 if (r != MAIL_NO_ERROR || !flist) { 91 if (r != MAIL_NO_ERROR || !flist) {
93 qDebug("error getting folder list"); 92 qDebug("error getting folder list");
94 return folders; 93 return folders;
95 } 94 }
96 for (current=clist_begin(flist->mb_list);current!=0;current=clist_next(current)) { 95 for (current=clist_begin(flist->mb_list);current!=0;current=clist_next(current)) {
97 QString t = (char*)current->data; 96 QString t = (char*)current->data;
98 t.replace(0,MHPath.length(),""); 97 t.replace(0,MHPath.length(),"");
99 folders->append(new MHFolder(t,MHPath)); 98 folders->append(new MHFolder(t,MHPath));
100 } 99 }
101 mail_list_free(flist); 100 mail_list_free(flist);
102 return folders; 101 return folders;
103} 102}
104 103
105void MHwrapper::deleteMail(const RecMail&mail) 104void MHwrapper::deleteMail(const RecMail&mail)
106{ 105{
107 init_storage(); 106 init_storage();
108 if (!m_storage) { 107 if (!m_storage) {
109 return; 108 return;
110 } 109 }
111 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail.getMbox().latin1()); 110 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail.getMbox().latin1());
112 if (r!=MAIL_NO_ERROR) { 111 if (r!=MAIL_NO_ERROR) {
113 qDebug("error selecting folder!"); 112 qDebug("error selecting folder!");
114 return; 113 return;
115 } 114 }
116 r = mailsession_remove_message(m_storage->sto_session,mail.getNumber()); 115 r = mailsession_remove_message(m_storage->sto_session,mail.getNumber());
117 if (r != MAIL_NO_ERROR) { 116 if (r != MAIL_NO_ERROR) {
118 qDebug("error deleting mail"); 117 qDebug("error deleting mail");
119 } 118 }
120} 119}
121 120
122void MHwrapper::answeredMail(const RecMail&) 121void MHwrapper::answeredMail(const RecMail&)
123{ 122{
124} 123}
125 124
126RecBody MHwrapper::fetchBody( const RecMail &mail ) 125RecBody MHwrapper::fetchBody( const RecMail &mail )
127{ 126{
128 RecBody body; 127 RecBody body;
129 init_storage(); 128 init_storage();
130 if (!m_storage) { 129 if (!m_storage) {
131 return body; 130 return body;
132 } 131 }
133 mailmessage * msg; 132 mailmessage * msg;
134 char*data=0; 133 char*data=0;
135 size_t size; 134 size_t size;
136 135
137 /* mail should hold the complete path! */ 136 /* mail should hold the complete path! */
138 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail.getMbox().latin1()); 137 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail.getMbox().latin1());
139 if (r != MAIL_NO_ERROR) { 138 if (r != MAIL_NO_ERROR) {
140 return body; 139 return body;
141 } 140 }
142 r = mailsession_get_message(m_storage->sto_session, mail.getNumber(), &msg); 141 r = mailsession_get_message(m_storage->sto_session, mail.getNumber(), &msg);
143 if (r != MAIL_NO_ERROR) { 142 if (r != MAIL_NO_ERROR) {
144 qDebug("Error fetching mail %i",mail.getNumber()); 143 qDebug("Error fetching mail %i",mail.getNumber());
145 return body; 144 return body;
146 } 145 }
147 body = parseMail(msg); 146 body = parseMail(msg);
148 mailmessage_fetch_result_free(msg,data); 147 mailmessage_fetch_result_free(msg,data);
149 return body; 148 return body;
150} 149}
151 150
152void MHwrapper::mbox_progress( size_t current, size_t maximum ) 151void MHwrapper::mbox_progress( size_t current, size_t maximum )
153{ 152{
154 qDebug("MH %i von %i",current,maximum); 153 qDebug("MH %i von %i",current,maximum);
155} 154}
156 155
157QString MHwrapper::buildPath(const QString&p) 156QString MHwrapper::buildPath(const QString&p)
158{ 157{
159 QString f=""; 158 QString f="";
160 if (p.length()==0||p=="/") 159 if (p.length()==0||p=="/")
161 return MHPath; 160 return MHPath;
162 if (!p.startsWith(MHPath)) { 161 if (!p.startsWith(MHPath)) {
163 f+=MHPath; 162 f+=MHPath;
164 } 163 }
165 if (!p.startsWith("/")) { 164 if (!p.startsWith("/")) {
166 f+="/"; 165 f+="/";
167 } 166 }
168 f+=p; 167 f+=p;
169 return f; 168 return f;
170} 169}
171 170
172int MHwrapper::createMbox(const QString&folder,const Folder*pfolder,const QString&,bool ) 171int MHwrapper::createMbox(const QString&folder,const FolderP&pfolder,const QString&,bool )
173{ 172{
174 init_storage(); 173 init_storage();
175 if (!m_storage) { 174 if (!m_storage) {
176 return 0; 175 return 0;
177 } 176 }
178 QString f; 177 QString f;
179 if (!pfolder) { 178 if (!pfolder) {
180 // toplevel folder 179 // toplevel folder
181 f = buildPath(folder); 180 f = buildPath(folder);
182 } else { 181 } else {
183 f = pfolder->getName(); 182 f = pfolder->getName();
184 f+="/"; 183 f+="/";
185 f+=folder; 184 f+=folder;
186 } 185 }
187 qDebug(f); 186 qDebug(f);
188 int r = mailsession_create_folder(m_storage->sto_session,(char*)f.latin1()); 187 int r = mailsession_create_folder(m_storage->sto_session,(char*)f.latin1());
189 if (r != MAIL_NO_ERROR) { 188 if (r != MAIL_NO_ERROR) {
190 qDebug("error creating folder %i",r); 189 qDebug("error creating folder %i",r);
191 return 0; 190 return 0;
192 } 191 }
193 qDebug("Folder created"); 192 qDebug("Folder created");
194 return 1; 193 return 1;
195} 194}
196 195
197void MHwrapper::storeMessage(const char*msg,size_t length, const QString&Folder) 196void MHwrapper::storeMessage(const char*msg,size_t length, const QString&Folder)
198{ 197{
199 init_storage(); 198 init_storage();
200 if (!m_storage) { 199 if (!m_storage) {
201 return; 200 return;
202 } 201 }
203 QString f = buildPath(Folder); 202 QString f = buildPath(Folder);
204 int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1()); 203 int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1());
205 if (r!=MAIL_NO_ERROR) { 204 if (r!=MAIL_NO_ERROR) {
206 qDebug("error selecting folder!"); 205 qDebug("error selecting folder!");
207 return; 206 return;
208 } 207 }
209 r = mailsession_append_message(m_storage->sto_session,(char*)msg,length); 208 r = mailsession_append_message(m_storage->sto_session,(char*)msg,length);
210 if (r!=MAIL_NO_ERROR) { 209 if (r!=MAIL_NO_ERROR) {
211 qDebug("error storing mail"); 210 qDebug("error storing mail");
212 } 211 }
213 return; 212 return;
214} 213}
215 214
216encodedString* MHwrapper::fetchRawBody(const RecMail&mail) 215encodedString* MHwrapper::fetchRawBody(const RecMail&mail)
217{ 216{
218 encodedString*result = 0; 217 encodedString*result = 0;
219 init_storage(); 218 init_storage();
220 if (!m_storage) { 219 if (!m_storage) {
221 return result; 220 return result;
222 } 221 }
223 mailmessage * msg = 0; 222 mailmessage * msg = 0;
224 char*data=0; 223 char*data=0;
225 size_t size; 224 size_t size;
226 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail.getMbox().latin1()); 225 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail.getMbox().latin1());
227 if (r!=MAIL_NO_ERROR) { 226 if (r!=MAIL_NO_ERROR) {
228 qDebug("error selecting folder!"); 227 qDebug("error selecting folder!");
229 return result; 228 return result;
230 } 229 }
231 r = mailsession_get_message(m_storage->sto_session, mail.getNumber(), &msg); 230 r = mailsession_get_message(m_storage->sto_session, mail.getNumber(), &msg);
232 if (r != MAIL_NO_ERROR) { 231 if (r != MAIL_NO_ERROR) {
233 Global::statusMessage(tr("Error fetching mail %i").arg(mail.getNumber())); 232 Global::statusMessage(tr("Error fetching mail %i").arg(mail.getNumber()));
234 return 0; 233 return 0;
235 } 234 }
236 r = mailmessage_fetch(msg,&data,&size); 235 r = mailmessage_fetch(msg,&data,&size);
237 if (r != MAIL_NO_ERROR) { 236 if (r != MAIL_NO_ERROR) {
238 Global::statusMessage(tr("Error fetching mail %i").arg(mail.getNumber())); 237 Global::statusMessage(tr("Error fetching mail %i").arg(mail.getNumber()));
239 if (msg) mailmessage_free(msg); 238 if (msg) mailmessage_free(msg);
240 return 0; 239 return 0;
241 } 240 }
242 result = new encodedString(data,size); 241 result = new encodedString(data,size);
243 if (msg) mailmessage_free(msg); 242 if (msg) mailmessage_free(msg);
244 return result; 243 return result;
245} 244}
246 245
247void MHwrapper::deleteMails(const QString & mailbox,QList<RecMail> &target) 246void MHwrapper::deleteMails(const QString & mailbox,QList<RecMail> &target)
248{ 247{
249 QString f = buildPath(mailbox); 248 QString f = buildPath(mailbox);
250 int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1()); 249 int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1());
251 if (r!=MAIL_NO_ERROR) { 250 if (r!=MAIL_NO_ERROR) {
252 qDebug("deleteMails: error selecting folder!"); 251 qDebug("deleteMails: error selecting folder!");
253 return; 252 return;
254 } 253 }
255 RecMail*c = 0; 254 RecMail*c = 0;
256 for (unsigned int i=0; i < target.count();++i) { 255 for (unsigned int i=0; i < target.count();++i) {
257 c = target.at(i); 256 c = target.at(i);
258 r = mailsession_remove_message(m_storage->sto_session,c->getNumber()); 257 r = mailsession_remove_message(m_storage->sto_session,c->getNumber());
259 if (r != MAIL_NO_ERROR) { 258 if (r != MAIL_NO_ERROR) {
260 qDebug("error deleting mail"); 259 qDebug("error deleting mail");
261 break; 260 break;
262 } 261 }
263 } 262 }
264} 263}
265 264
266int MHwrapper::deleteAllMail(const Folder*tfolder) 265int MHwrapper::deleteAllMail(const FolderP&tfolder)
267{ 266{
268 init_storage(); 267 init_storage();
269 if (!m_storage) { 268 if (!m_storage) {
270 return 0; 269 return 0;
271 } 270 }
272 int res = 1; 271 int res = 1;
273 if (!tfolder) return 0; 272 if (!tfolder) return 0;
274 int r = mailsession_select_folder(m_storage->sto_session,(char*)tfolder->getName().latin1()); 273 int r = mailsession_select_folder(m_storage->sto_session,(char*)tfolder->getName().latin1());
275 if (r!=MAIL_NO_ERROR) { 274 if (r!=MAIL_NO_ERROR) {
276 qDebug("error selecting folder!"); 275 qDebug("error selecting folder!");
277 return 0; 276 return 0;
278 } 277 }
279 mailmessage_list*l=0; 278 mailmessage_list*l=0;
280 r = mailsession_get_messages_list(m_storage->sto_session,&l); 279 r = mailsession_get_messages_list(m_storage->sto_session,&l);
281 if (r != MAIL_NO_ERROR) { 280 if (r != MAIL_NO_ERROR) {
282 qDebug("Error message list"); 281 qDebug("Error message list");
283 res = 0; 282 res = 0;
284 } 283 }
285 unsigned j = 0; 284 unsigned j = 0;
286 for(unsigned int i = 0 ; l!= 0 && res==1 && i < carray_count(l->msg_tab) ; ++i) { 285 for(unsigned int i = 0 ; l!= 0 && res==1 && i < carray_count(l->msg_tab) ; ++i) {
287 mailmessage * msg; 286 mailmessage * msg;
288 msg = (mailmessage*)carray_get(l->msg_tab, i); 287 msg = (mailmessage*)carray_get(l->msg_tab, i);
289 j = msg->msg_index; 288 j = msg->msg_index;
290 r = mailsession_remove_message(m_storage->sto_session,j); 289 r = mailsession_remove_message(m_storage->sto_session,j);
291 if (r != MAIL_NO_ERROR) { 290 if (r != MAIL_NO_ERROR) {
292 Global::statusMessage(tr("Error deleting mail %1").arg(i+1)); 291 Global::statusMessage(tr("Error deleting mail %1").arg(i+1));
293 res = 0; 292 res = 0;
294 break; 293 break;
295 } 294 }
296 } 295 }
297 if (l) mailmessage_list_free(l); 296 if (l) mailmessage_list_free(l);
298 return res; 297 return res;
299} 298}
300 299
301int MHwrapper::deleteMbox(const Folder*tfolder) 300int MHwrapper::deleteMbox(const FolderP&tfolder)
302{ 301{
303 init_storage(); 302 init_storage();
304 if (!m_storage) { 303 if (!m_storage) {
305 return 0; 304 return 0;
306 } 305 }
307 if (!tfolder) return 0; 306 if (!tfolder) return 0;
308 if (tfolder->getName()=="/" || tfolder->getName().isEmpty()) return 0; 307 if (tfolder->getName()=="/" || tfolder->getName().isEmpty()) return 0;
309 308
310 int r = mailsession_delete_folder(m_storage->sto_session,(char*)tfolder->getName().latin1()); 309 int r = mailsession_delete_folder(m_storage->sto_session,(char*)tfolder->getName().latin1());
311 310
312 if (r != MAIL_NO_ERROR) { 311 if (r != MAIL_NO_ERROR) {
313 qDebug("error deleting mail box"); 312 qDebug("error deleting mail box");
314 return 0; 313 return 0;
315 } 314 }
316 QString cmd = "rm -rf "+tfolder->getName(); 315 QString cmd = "rm -rf "+tfolder->getName();
317 QStringList command; 316 QStringList command;
318 command << "/bin/sh"; 317 command << "/bin/sh";
319 command << "-c"; 318 command << "-c";
320 command << cmd.latin1(); 319 command << cmd.latin1();
321 OProcess *process = new OProcess(); 320 OProcess *process = new OProcess();
322 321
323 connect(process, SIGNAL(processExited(OProcess*)), 322 connect(process, SIGNAL(processExited(OProcess*)),
324 this, SLOT( processEnded(OProcess*))); 323 this, SLOT( processEnded(OProcess*)));
325 connect(process, SIGNAL( receivedStderr(OProcess*,char*,int)), 324 connect(process, SIGNAL( receivedStderr(OProcess*,char*,int)),
326 this, SLOT( oprocessStderr(OProcess*,char*,int))); 325 this, SLOT( oprocessStderr(OProcess*,char*,int)));
327 326
328 *process << command; 327 *process << command;
329 removeMboxfailed = false; 328 removeMboxfailed = false;
330 if(!process->start(OProcess::Block, OProcess::All) ) { 329 if(!process->start(OProcess::Block, OProcess::All) ) {
331 qDebug("could not start process"); 330 qDebug("could not start process");
332 return 0; 331 return 0;
333 } 332 }
334 qDebug("mail box deleted"); 333 qDebug("mail box deleted");
335 return 1; 334 return 1;
336} 335}
337 336
338void MHwrapper::processEnded(OProcess *p) 337void MHwrapper::processEnded(OProcess *p)
339{ 338{
340 if (p) delete p; 339 if (p) delete p;
341} 340}
342 341
343void MHwrapper::oprocessStderr(OProcess*, char *buffer, int ) 342void MHwrapper::oprocessStderr(OProcess*, char *buffer, int )
344{ 343{
345 QString lineStr = buffer; 344 QString lineStr = buffer;
346 QMessageBox::warning( 0, tr("Error"), lineStr ,tr("Ok") ); 345 QMessageBox::warning( 0, tr("Error"), lineStr ,tr("Ok") );
347 removeMboxfailed = true; 346 removeMboxfailed = true;
348} 347}
349 348
350void MHwrapper::statusFolder(folderStat&target_stat,const QString & mailbox) 349void MHwrapper::statusFolder(folderStat&target_stat,const QString & mailbox)
351{ 350{
352 init_storage(); 351 init_storage();
353 if (!m_storage) { 352 if (!m_storage) {
354 return; 353 return;
355 } 354 }
356 target_stat.message_count = 0; 355 target_stat.message_count = 0;
357 target_stat.message_unseen = 0; 356 target_stat.message_unseen = 0;
358 target_stat.message_recent = 0; 357 target_stat.message_recent = 0;
359 QString f = buildPath(mailbox); 358 QString f = buildPath(mailbox);
360 int r = mailsession_status_folder(m_storage->sto_session,(char*)f.latin1(),&target_stat.message_count, 359 int r = mailsession_status_folder(m_storage->sto_session,(char*)f.latin1(),&target_stat.message_count,
361 &target_stat.message_recent,&target_stat.message_unseen); 360 &target_stat.message_recent,&target_stat.message_unseen);
362 if (r != MAIL_NO_ERROR) { 361 if (r != MAIL_NO_ERROR) {
363 Global::statusMessage(tr("Error retrieving status")); 362 Global::statusMessage(tr("Error retrieving status"));
364 } 363 }
365} 364}
366 365
367MAILLIB::ATYPE MHwrapper::getType()const 366MAILLIB::ATYPE MHwrapper::getType()const
368{ 367{
369 return MAILLIB::A_MH; 368 return MAILLIB::A_MH;
370} 369}
371 370
372const QString&MHwrapper::getName()const 371const QString&MHwrapper::getName()const
373{ 372{
374 return MHName; 373 return MHName;
375} 374}
376void MHwrapper::mvcpMail(const RecMail&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 375void MHwrapper::mvcpMail(const RecMail&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
377{ 376{
378 init_storage(); 377 init_storage();
379 if (!m_storage) { 378 if (!m_storage) {
380 return; 379 return;
381 } 380 }
382 if (targetWrapper != this) { 381 if (targetWrapper != this) {
383 qDebug("Using generic"); 382 qDebug("Using generic");
384 Genericwrapper::mvcpMail(mail,targetFolder,targetWrapper,moveit); 383 Genericwrapper::mvcpMail(mail,targetFolder,targetWrapper,moveit);
385 return; 384 return;
386 } 385 }
387 qDebug("Using internal routines for move/copy"); 386 qDebug("Using internal routines for move/copy");
388 QString tf = buildPath(targetFolder); 387 QString tf = buildPath(targetFolder);
389 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail.getMbox().latin1()); 388 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail.getMbox().latin1());
390 if (r != MAIL_NO_ERROR) { 389 if (r != MAIL_NO_ERROR) {
391 qDebug("Error selecting source mailbox"); 390 qDebug("Error selecting source mailbox");
392 return; 391 return;
393 } 392 }
394 if (moveit) { 393 if (moveit) {
395 r = mailsession_move_message(m_storage->sto_session,mail.getNumber(),(char*)tf.latin1()); 394 r = mailsession_move_message(m_storage->sto_session,mail.getNumber(),(char*)tf.latin1());
396 } else { 395 } else {
397 r = mailsession_copy_message(m_storage->sto_session,mail.getNumber(),(char*)tf.latin1()); 396 r = mailsession_copy_message(m_storage->sto_session,mail.getNumber(),(char*)tf.latin1());
398 } 397 }
399 if (r != MAIL_NO_ERROR) { 398 if (r != MAIL_NO_ERROR) {
400 qDebug("Error copy/moving mail internal (%i)",r); 399 qDebug("Error copy/moving mail internal (%i)",r);
401 } 400 }
402} 401}
403 402
404void MHwrapper::mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) 403void MHwrapper::mvcpAllMails(const FolderP&fromFolder,
404 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
405{ 405{
406 init_storage(); 406 init_storage();
407 if (!m_storage) { 407 if (!m_storage) {
408 return; 408 return;
409 } 409 }
410 if (targetWrapper != this) { 410 if (targetWrapper != this) {
411 qDebug("Using generic"); 411 qDebug("Using generic");
412 Genericwrapper::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit); 412 Genericwrapper::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit);
413 return; 413 return;
414 } 414 }
415 if (!fromFolder) return; 415 if (!fromFolder) return;
416 int r = mailsession_select_folder(m_storage->sto_session,(char*)fromFolder->getName().latin1()); 416 int r = mailsession_select_folder(m_storage->sto_session,(char*)fromFolder->getName().latin1());
417 if (r!=MAIL_NO_ERROR) { 417 if (r!=MAIL_NO_ERROR) {
418 qDebug("error selecting source folder!"); 418 qDebug("error selecting source folder!");
419 return; 419 return;
420 } 420 }
421 QString tf = buildPath(targetFolder); 421 QString tf = buildPath(targetFolder);
422 mailmessage_list*l=0; 422 mailmessage_list*l=0;
423 r = mailsession_get_messages_list(m_storage->sto_session,&l); 423 r = mailsession_get_messages_list(m_storage->sto_session,&l);
424 if (r != MAIL_NO_ERROR) { 424 if (r != MAIL_NO_ERROR) {
425 qDebug("Error message list"); 425 qDebug("Error message list");
426 } 426 }
427 unsigned j = 0; 427 unsigned j = 0;
428 for(unsigned int i = 0 ; l!= 0 && i < carray_count(l->msg_tab) ; ++i) { 428 for(unsigned int i = 0 ; l!= 0 && i < carray_count(l->msg_tab) ; ++i) {
429 mailmessage * msg; 429 mailmessage * msg;
430 msg = (mailmessage*)carray_get(l->msg_tab, i); 430 msg = (mailmessage*)carray_get(l->msg_tab, i);
431 j = msg->msg_index; 431 j = msg->msg_index;
432 if (moveit) { 432 if (moveit) {
433 r = mailsession_move_message(m_storage->sto_session,j,(char*)tf.latin1()); 433 r = mailsession_move_message(m_storage->sto_session,j,(char*)tf.latin1());
434 } else { 434 } else {
435 r = mailsession_copy_message(m_storage->sto_session,j,(char*)tf.latin1()); 435 r = mailsession_copy_message(m_storage->sto_session,j,(char*)tf.latin1());
436 } 436 }
437 if (r != MAIL_NO_ERROR) { 437 if (r != MAIL_NO_ERROR) {
438 qDebug("Error copy/moving mail internal (%i)",r); 438 qDebug("Error copy/moving mail internal (%i)",r);
439 break; 439 break;
440 } 440 }
441 } 441 }
442 if (l) mailmessage_list_free(l); 442 if (l) mailmessage_list_free(l);
443} 443}
diff --git a/noncore/net/mail/libmailwrapper/mhwrapper.h b/noncore/net/mail/libmailwrapper/mhwrapper.h
index b7c23af..c7c8183 100644
--- a/noncore/net/mail/libmailwrapper/mhwrapper.h
+++ b/noncore/net/mail/libmailwrapper/mhwrapper.h
@@ -1,60 +1,62 @@
1#ifndef __MH_WRAPPER_H 1#ifndef __MH_WRAPPER_H
2#define __MH_WRAPPER_H 2#define __MH_WRAPPER_H
3 3
4#include "maildefines.h" 4#include "maildefines.h"
5 5
6#include "genericwrapper.h" 6#include "genericwrapper.h"
7#include <qstring.h> 7#include <qstring.h>
8 8
9class RecMail; 9class RecMail;
10class RecBody; 10class RecBody;
11class encodedString; 11class encodedString;
12struct mailmbox_folder; 12struct mailmbox_folder;
13class OProcess; 13class OProcess;
14 14
15class MHwrapper : public Genericwrapper 15class MHwrapper : public Genericwrapper
16{ 16{
17 Q_OBJECT 17 Q_OBJECT
18public: 18public:
19 MHwrapper(const QString & dir,const QString&name); 19 MHwrapper(const QString & dir,const QString&name);
20 virtual ~MHwrapper(); 20 virtual ~MHwrapper();
21 21
22 virtual void listMessages(const QString & mailbox, QList<RecMail> &target ); 22 virtual void listMessages(const QString & mailbox, QList<RecMail> &target );
23 virtual QList<Folder>* listFolders(); 23 virtual QValueList<Opie::osmart_pointer<Folder> >* listFolders();
24 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX"); 24 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX");
25 25
26 virtual void deleteMail(const RecMail&mail); 26 virtual void deleteMail(const RecMail&mail);
27 virtual void answeredMail(const RecMail&mail); 27 virtual void answeredMail(const RecMail&mail);
28 virtual void mvcpMail(const RecMail&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit); 28 virtual void mvcpMail(const RecMail&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit);
29 virtual void mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit); 29 virtual void mvcpAllMails(const Opie::osmart_pointer<Folder>&fromFolder,
30 30 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit);
31 virtual int createMbox(const QString&folder,const Folder*f=0,const QString&d="",bool s=false); 31
32 virtual int deleteMbox(const Folder*); 32 virtual int createMbox(const QString&folder,const Opie::osmart_pointer<Folder>&f=0,
33 const QString&d="",bool s=false);
34 virtual int deleteMbox(const Opie::osmart_pointer<Folder>&);
33 35
34 virtual void storeMessage(const char*msg,size_t length, const QString&folder); 36 virtual void storeMessage(const char*msg,size_t length, const QString&folder);
35 37
36 virtual RecBody fetchBody( const RecMail &mail ); 38 virtual RecBody fetchBody( const RecMail &mail );
37 static void mbox_progress( size_t current, size_t maximum ); 39 static void mbox_progress( size_t current, size_t maximum );
38 40
39 virtual encodedString* fetchRawBody(const RecMail&mail); 41 virtual encodedString* fetchRawBody(const RecMail&mail);
40 virtual void deleteMails(const QString & FolderName,QList<RecMail> &target); 42 virtual void deleteMails(const QString & FolderName,QList<RecMail> &target);
41 virtual int deleteAllMail(const Folder*); 43 virtual int deleteAllMail(const Opie::osmart_pointer<Folder>&);
42 virtual MAILLIB::ATYPE getType()const; 44 virtual MAILLIB::ATYPE getType()const;
43 virtual const QString&getName()const; 45 virtual const QString&getName()const;
44 46
45public slots: 47public slots:
46 /* for deleting maildirs we are using a system call */ 48 /* for deleting maildirs we are using a system call */
47 virtual void oprocessStderr(OProcess*, char *buffer, int ); 49 virtual void oprocessStderr(OProcess*, char *buffer, int );
48 virtual void processEnded(OProcess *); 50 virtual void processEnded(OProcess *);
49protected: 51protected:
50 QString buildPath(const QString&p); 52 QString buildPath(const QString&p);
51 QString MHPath; 53 QString MHPath;
52 QString MHName; 54 QString MHName;
53 55
54 void init_storage(); 56 void init_storage();
55 void clean_storage(); 57 void clean_storage();
56 58
57 bool removeMboxfailed; 59 bool removeMboxfailed;
58}; 60};
59 61
60#endif 62#endif
diff --git a/noncore/net/mail/libmailwrapper/nntpwrapper.cpp b/noncore/net/mail/libmailwrapper/nntpwrapper.cpp
index 1956c61..2ec052c 100644
--- a/noncore/net/mail/libmailwrapper/nntpwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/nntpwrapper.cpp
@@ -127,158 +127,157 @@ void NNTPwrapper::login()
127 if ( ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) && account->getLogin() ) { 127 if ( ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) && account->getLogin() ) {
128 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true ); 128 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true );
129 login.show(); 129 login.show();
130 if ( QDialog::Accepted == login.exec() ) { 130 if ( QDialog::Accepted == login.exec() ) {
131 // ok 131 // ok
132 User = login.getUser().latin1(); 132 User = login.getUser().latin1();
133 Pass = login.getPassword().latin1(); 133 Pass = login.getPassword().latin1();
134 } else { 134 } else {
135 // cancel 135 // cancel
136 qDebug( "NNTP: Login canceled" ); 136 qDebug( "NNTP: Login canceled" );
137 return; 137 return;
138 } 138 }
139 } else { 139 } else {
140 User = account->getUser().latin1(); 140 User = account->getUser().latin1();
141 Pass = account->getPassword().latin1(); 141 Pass = account->getPassword().latin1();
142 } 142 }
143 143
144 if (User.isEmpty()) { 144 if (User.isEmpty()) {
145 user=0; 145 user=0;
146 pass = 0; 146 pass = 0;
147 } else { 147 } else {
148 user=User.latin1(); 148 user=User.latin1();
149 pass=Pass.latin1(); 149 pass=Pass.latin1();
150 } 150 }
151 // bool ssl = account->getSSL(); 151 // bool ssl = account->getSSL();
152 152
153 m_nntp=mailstorage_new(NULL); 153 m_nntp=mailstorage_new(NULL);
154 154
155 int conntypeset = account->ConnectionType(); 155 int conntypeset = account->ConnectionType();
156 int conntype = 0; 156 int conntype = 0;
157 if ( conntypeset == 3 ) { 157 if ( conntypeset == 3 ) {
158 conntype = CONNECTION_TYPE_COMMAND; 158 conntype = CONNECTION_TYPE_COMMAND;
159 } else if ( conntypeset == 2 ) { 159 } else if ( conntypeset == 2 ) {
160 conntype = CONNECTION_TYPE_TLS; 160 conntype = CONNECTION_TYPE_TLS;
161 } else if ( conntypeset == 1 ) { 161 } else if ( conntypeset == 1 ) {
162 conntype = CONNECTION_TYPE_STARTTLS; 162 conntype = CONNECTION_TYPE_STARTTLS;
163 } else if ( conntypeset == 0 ) { 163 } else if ( conntypeset == 0 ) {
164 conntype = CONNECTION_TYPE_TRY_STARTTLS; 164 conntype = CONNECTION_TYPE_TRY_STARTTLS;
165 } 165 }
166 166
167 nntp_mailstorage_init(m_nntp,(char*)server, port, NULL, CONNECTION_TYPE_PLAIN, NNTP_AUTH_TYPE_PLAIN, 167 nntp_mailstorage_init(m_nntp,(char*)server, port, NULL, CONNECTION_TYPE_PLAIN, NNTP_AUTH_TYPE_PLAIN,
168 (char*)user,(char*)pass,0,0,0); 168 (char*)user,(char*)pass,0,0,0);
169 169
170 err = mailstorage_connect( m_nntp ); 170 err = mailstorage_connect( m_nntp );
171 171
172 if (err != NEWSNNTP_NO_ERROR) { 172 if (err != NEWSNNTP_NO_ERROR) {
173 qDebug( QString( "FEHLERNUMMER %1" ).arg( err ) ); 173 qDebug( QString( "FEHLERNUMMER %1" ).arg( err ) );
174 // Global::statusMessage(tr("Error initializing folder")); 174 // Global::statusMessage(tr("Error initializing folder"));
175 mailstorage_free(m_nntp); 175 mailstorage_free(m_nntp);
176 m_nntp = 0; 176 m_nntp = 0;
177 177
178 } 178 }
179 179
180} 180}
181 181
182void NNTPwrapper::logout() 182void NNTPwrapper::logout()
183{ 183{
184 int err = NEWSNNTP_NO_ERROR; 184 int err = NEWSNNTP_NO_ERROR;
185 if ( m_nntp == NULL ) 185 if ( m_nntp == NULL )
186 return; 186 return;
187 mailstorage_free(m_nntp); 187 mailstorage_free(m_nntp);
188 m_nntp = 0; 188 m_nntp = 0;
189} 189}
190 190
191QList<Folder>* NNTPwrapper::listFolders() { 191QValueList<Opie::osmart_pointer<Folder> >* NNTPwrapper::listFolders() {
192 192
193 QList<Folder> * folders = new QList<Folder>(); 193 QValueList<Opie::osmart_pointer<Folder> >* folders = new QValueList<Opie::osmart_pointer<Folder> >();
194 folders->setAutoDelete( false );
195 QStringList groups; 194 QStringList groups;
196 if (account) { 195 if (account) {
197 groups = account->getGroups(); 196 groups = account->getGroups();
198 } 197 }
199 for ( QStringList::Iterator it = groups.begin(); it != groups.end(); ++it ) { 198 for ( QStringList::Iterator it = groups.begin(); it != groups.end(); ++it ) {
200 folders->append(new Folder((*it),".")); 199 folders->append(new Folder((*it),"."));
201 } 200 }
202 return folders; 201 return folders;
203} 202}
204 203
205/* we made this method in raw nntp access of etpan and not via generic interface 204/* we made this method in raw nntp access of etpan and not via generic interface
206 * 'cause in that case there will be doubled copy operations. eg. the etpan would 205 * 'cause in that case there will be doubled copy operations. eg. the etpan would
207 * copy that stuff into its own structures and we must copy it into useable c++ 206 * copy that stuff into its own structures and we must copy it into useable c++
208 * structures for our frontend. this would not make sense, so it is better to reimplement 207 * structures for our frontend. this would not make sense, so it is better to reimplement
209 * the stuff from generic interface of etpan but copy it direct to qt classes. 208 * the stuff from generic interface of etpan but copy it direct to qt classes.
210 */ 209 */
211QStringList NNTPwrapper::listAllNewsgroups(const QString&mask) { 210QStringList NNTPwrapper::listAllNewsgroups(const QString&mask) {
212 login(); 211 login();
213 QStringList res; 212 QStringList res;
214 clist *result = 0; 213 clist *result = 0;
215 clistcell *current = 0; 214 clistcell *current = 0;
216 newsnntp_group_description *group; 215 newsnntp_group_description *group;
217 216
218 if ( m_nntp ) { 217 if ( m_nntp ) {
219 mailsession * session = m_nntp->sto_session; 218 mailsession * session = m_nntp->sto_session;
220 newsnntp * news = ( ( nntp_session_state_data * )session->sess_data )->nntp_session; 219 newsnntp * news = ( ( nntp_session_state_data * )session->sess_data )->nntp_session;
221 int err = NEWSNNTP_NO_ERROR; 220 int err = NEWSNNTP_NO_ERROR;
222 if (mask.isEmpty()) { 221 if (mask.isEmpty()) {
223 err = newsnntp_list(news, &result); 222 err = newsnntp_list(news, &result);
224 } else { 223 } else {
225 /* taken from generic wrapper of etpan */ 224 /* taken from generic wrapper of etpan */
226 QString nmask = mask+".*"; 225 QString nmask = mask+".*";
227 err = newsnntp_list_active(news, nmask.latin1(), &result); 226 err = newsnntp_list_active(news, nmask.latin1(), &result);
228 } 227 }
229 if ( err == NEWSNNTP_NO_ERROR && result) { 228 if ( err == NEWSNNTP_NO_ERROR && result) {
230 for ( current=clist_begin(result);current!=NULL;current=clist_next(current) ) { 229 for ( current=clist_begin(result);current!=NULL;current=clist_next(current) ) {
231 group = ( newsnntp_group_description* ) current->data; 230 group = ( newsnntp_group_description* ) current->data;
232 if (!group||!group->grp_name||strlen(group->grp_name)==0) continue; 231 if (!group||!group->grp_name||strlen(group->grp_name)==0) continue;
233 res.append(group->grp_name); 232 res.append(group->grp_name);
234 } 233 }
235 } 234 }
236 } 235 }
237 if (result) { 236 if (result) {
238 newsnntp_list_free(result); 237 newsnntp_list_free(result);
239 } 238 }
240 return res; 239 return res;
241} 240}
242 241
243void NNTPwrapper::answeredMail(const RecMail&) {} 242void NNTPwrapper::answeredMail(const RecMail&) {}
244 243
245void NNTPwrapper::statusFolder(folderStat&target_stat,const QString&) { 244void NNTPwrapper::statusFolder(folderStat&target_stat,const QString&) {
246 login(); 245 login();
247 target_stat.message_count = 0; 246 target_stat.message_count = 0;
248 target_stat.message_unseen = 0; 247 target_stat.message_unseen = 0;
249 target_stat.message_recent = 0; 248 target_stat.message_recent = 0;
250 if (!m_nntp) 249 if (!m_nntp)
251 return; 250 return;
252 int r = mailsession_status_folder(m_nntp->sto_session,0,&target_stat.message_count, 251 int r = mailsession_status_folder(m_nntp->sto_session,0,&target_stat.message_count,
253 &target_stat.message_recent,&target_stat.message_unseen); 252 &target_stat.message_recent,&target_stat.message_unseen);
254} 253}
255 254
256 255
257encodedString* NNTPwrapper::fetchRawBody(const RecMail&mail) { 256encodedString* NNTPwrapper::fetchRawBody(const RecMail&mail) {
258 char*target=0; 257 char*target=0;
259 size_t length=0; 258 size_t length=0;
260 encodedString*res = 0; 259 encodedString*res = 0;
261 mailmessage * mailmsg = 0; 260 mailmessage * mailmsg = 0;
262 int err = mailsession_get_message(m_nntp->sto_session, mail.getNumber(), &mailmsg); 261 int err = mailsession_get_message(m_nntp->sto_session, mail.getNumber(), &mailmsg);
263 err = mailmessage_fetch(mailmsg,&target,&length); 262 err = mailmessage_fetch(mailmsg,&target,&length);
264 if (mailmsg) 263 if (mailmsg)
265 mailmessage_free(mailmsg); 264 mailmessage_free(mailmsg);
266 if (target) { 265 if (target) {
267 res = new encodedString(target,length); 266 res = new encodedString(target,length);
268 } 267 }
269 return res; 268 return res;
270} 269}
271 270
272MAILLIB::ATYPE NNTPwrapper::getType()const { 271MAILLIB::ATYPE NNTPwrapper::getType()const {
273 return account->getType(); 272 return account->getType();
274} 273}
275 274
276const QString&NNTPwrapper::getName()const{ 275const QString&NNTPwrapper::getName()const{
277 return account->getAccountName(); 276 return account->getAccountName();
278} 277}
279 278
280void NNTPwrapper::deleteMail(const RecMail&) { 279void NNTPwrapper::deleteMail(const RecMail&) {
281} 280}
282 281
283int NNTPwrapper::deleteAllMail(const Folder*) { 282int NNTPwrapper::deleteAllMail(const FolderP&) {
284} 283}
diff --git a/noncore/net/mail/libmailwrapper/nntpwrapper.h b/noncore/net/mail/libmailwrapper/nntpwrapper.h
index 955b9f1..d3a384a 100644
--- a/noncore/net/mail/libmailwrapper/nntpwrapper.h
+++ b/noncore/net/mail/libmailwrapper/nntpwrapper.h
@@ -1,48 +1,48 @@
1#ifndef __NNTPWRAPPER 1#ifndef __NNTPWRAPPER
2#define __NNTPWRAPPER 2#define __NNTPWRAPPER
3 3
4#include "mailwrapper.h" 4#include "mailwrapper.h"
5#include "genericwrapper.h" 5#include "genericwrapper.h"
6#include <qstring.h> 6#include <qstring.h>
7#include <libetpan/clist.h> 7#include <libetpan/clist.h>
8 8
9class encodedString; 9class encodedString;
10struct mailstorage; 10struct mailstorage;
11struct mailfolder; 11struct mailfolder;
12 12
13class NNTPwrapper : public Genericwrapper 13class NNTPwrapper : public Genericwrapper
14{ 14{
15 15
16 Q_OBJECT 16 Q_OBJECT
17 17
18public: 18public:
19 NNTPwrapper( NNTPaccount *a ); 19 NNTPwrapper( NNTPaccount *a );
20 virtual ~NNTPwrapper(); 20 virtual ~NNTPwrapper();
21 21
22 /* mailbox will be ignored */ 22 /* mailbox will be ignored */
23 virtual void listMessages(const QString & mailbox, QList<RecMail> &target ); 23 virtual void listMessages(const QString & mailbox, QList<RecMail> &target );
24 /* should only get the subscribed one */ 24 /* should only get the subscribed one */
25 virtual QList<Folder>* listFolders(); 25 virtual QValueList<Opie::osmart_pointer<Folder> >* listFolders();
26 /* mailbox will be ignored */ 26 /* mailbox will be ignored */
27 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX"); 27 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX");
28 QStringList listAllNewsgroups(const QString&mask = QString::null); 28 QStringList listAllNewsgroups(const QString&mask = QString::null);
29 virtual void deleteMail(const RecMail&mail); 29 virtual void deleteMail(const RecMail&mail);
30 virtual void answeredMail(const RecMail&mail); 30 virtual void answeredMail(const RecMail&mail);
31 virtual int deleteAllMail(const Folder*); 31 virtual int deleteAllMail(const Opie::osmart_pointer<Folder>&);
32 32
33 virtual RecBody fetchBody( const RecMail &mail ); 33 virtual RecBody fetchBody( const RecMail &mail );
34 virtual encodedString* fetchRawBody(const RecMail&mail); 34 virtual encodedString* fetchRawBody(const RecMail&mail);
35 virtual void logout(); 35 virtual void logout();
36 virtual MAILLIB::ATYPE getType()const; 36 virtual MAILLIB::ATYPE getType()const;
37 virtual const QString&getName()const; 37 virtual const QString&getName()const;
38 static void nntp_progress( size_t current, size_t maximum ); 38 static void nntp_progress( size_t current, size_t maximum );
39 39
40protected: 40protected:
41 void login(); 41 void login();
42 NNTPaccount *account; 42 NNTPaccount *account;
43 mailstorage* m_nntp; 43 mailstorage* m_nntp;
44 44
45 45
46}; 46};
47 47
48#endif 48#endif
diff --git a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
index 0939b22..7bf7ed2 100644
--- a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
@@ -116,140 +116,139 @@ void POP3wrapper::login()
116 uint16_t port; 116 uint16_t port;
117 int err = MAILPOP3_NO_ERROR; 117 int err = MAILPOP3_NO_ERROR;
118 118
119 server = account->getServer().latin1(); 119 server = account->getServer().latin1();
120 port = account->getPort().toUInt(); 120 port = account->getPort().toUInt();
121 121
122 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) { 122 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) {
123 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true ); 123 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true );
124 login.show(); 124 login.show();
125 if ( QDialog::Accepted == login.exec() ) { 125 if ( QDialog::Accepted == login.exec() ) {
126 // ok 126 // ok
127 user = login.getUser().latin1(); 127 user = login.getUser().latin1();
128 pass = login.getPassword().latin1(); 128 pass = login.getPassword().latin1();
129 } else { 129 } else {
130 // cancel 130 // cancel
131 qDebug( "POP3: Login canceled" ); 131 qDebug( "POP3: Login canceled" );
132 return; 132 return;
133 } 133 }
134 } else { 134 } else {
135 user = account->getUser().latin1(); 135 user = account->getUser().latin1();
136 pass = account->getPassword().latin1(); 136 pass = account->getPassword().latin1();
137 } 137 }
138 138
139 // bool ssl = account->getSSL(); 139 // bool ssl = account->getSSL();
140 140
141 m_pop3=mailstorage_new(NULL); 141 m_pop3=mailstorage_new(NULL);
142 142
143 int conntypeset = account->ConnectionType(); 143 int conntypeset = account->ConnectionType();
144 int conntype = 0; 144 int conntype = 0;
145 if ( conntypeset == 3 ) { 145 if ( conntypeset == 3 ) {
146 conntype = CONNECTION_TYPE_COMMAND; 146 conntype = CONNECTION_TYPE_COMMAND;
147 } else if ( conntypeset == 2 ) { 147 } else if ( conntypeset == 2 ) {
148 conntype = CONNECTION_TYPE_TLS; 148 conntype = CONNECTION_TYPE_TLS;
149 } else if ( conntypeset == 1 ) { 149 } else if ( conntypeset == 1 ) {
150 conntype = CONNECTION_TYPE_STARTTLS; 150 conntype = CONNECTION_TYPE_STARTTLS;
151 } else if ( conntypeset == 0 ) { 151 } else if ( conntypeset == 0 ) {
152 conntype = CONNECTION_TYPE_TRY_STARTTLS; 152 conntype = CONNECTION_TYPE_TRY_STARTTLS;
153 } 153 }
154 154
155 //(ssl?CONNECTION_TYPE_TLS:CONNECTION_TYPE_PLAIN); 155 //(ssl?CONNECTION_TYPE_TLS:CONNECTION_TYPE_PLAIN);
156 156
157 pop3_mailstorage_init(m_pop3,(char*)server, port, NULL, conntype, POP3_AUTH_TYPE_PLAIN, 157 pop3_mailstorage_init(m_pop3,(char*)server, port, NULL, conntype, POP3_AUTH_TYPE_PLAIN,
158 (char*)user,(char*)pass,0,0,0); 158 (char*)user,(char*)pass,0,0,0);
159 159
160 160
161 err = mailstorage_connect(m_pop3); 161 err = mailstorage_connect(m_pop3);
162 if (err != MAIL_NO_ERROR) { 162 if (err != MAIL_NO_ERROR) {
163 qDebug( QString( "FEHLERNUMMER %1" ).arg( err ) ); 163 qDebug( QString( "FEHLERNUMMER %1" ).arg( err ) );
164 Global::statusMessage(tr("Error initializing folder")); 164 Global::statusMessage(tr("Error initializing folder"));
165 mailstorage_free(m_pop3); 165 mailstorage_free(m_pop3);
166 m_pop3 = 0; 166 m_pop3 = 0;
167 } 167 }
168} 168}
169 169
170void POP3wrapper::logout() 170void POP3wrapper::logout()
171{ 171{
172 int err = MAILPOP3_NO_ERROR; 172 int err = MAILPOP3_NO_ERROR;
173 if ( m_pop3 == NULL ) 173 if ( m_pop3 == NULL )
174 return; 174 return;
175 mailstorage_free(m_pop3); 175 mailstorage_free(m_pop3);
176 m_pop3 = 0; 176 m_pop3 = 0;
177} 177}
178 178
179 179
180QList<Folder>* POP3wrapper::listFolders() { 180QValueList<Opie::osmart_pointer<Folder> >* POP3wrapper::listFolders() {
181 QList<Folder> * folders = new QList<Folder>(); 181 QValueList<Opie::osmart_pointer<Folder> >* folders = new QValueList<FolderP>();
182 folders->setAutoDelete( false ); 182 FolderP inb=new Folder("INBOX","/");
183 Folder*inb=new Folder("INBOX","/");
184 folders->append(inb); 183 folders->append(inb);
185 return folders; 184 return folders;
186} 185}
187 186
188void POP3wrapper::deleteMail(const RecMail&mail) { 187void POP3wrapper::deleteMail(const RecMail&mail) {
189 login(); 188 login();
190 if (!m_pop3) 189 if (!m_pop3)
191 return; 190 return;
192 int err = mailsession_remove_message(m_pop3->sto_session,mail.getNumber()); 191 int err = mailsession_remove_message(m_pop3->sto_session,mail.getNumber());
193 if (err != MAIL_NO_ERROR) { 192 if (err != MAIL_NO_ERROR) {
194 Global::statusMessage(tr("error deleting mail")); 193 Global::statusMessage(tr("error deleting mail"));
195 } 194 }
196} 195}
197 196
198void POP3wrapper::answeredMail(const RecMail&) {} 197void POP3wrapper::answeredMail(const RecMail&) {}
199 198
200int POP3wrapper::deleteAllMail(const Folder*) { 199int POP3wrapper::deleteAllMail(const FolderP&) {
201 login(); 200 login();
202 if (!m_pop3) 201 if (!m_pop3)
203 return 0; 202 return 0;
204 int res = 1; 203 int res = 1;
205 204
206 uint32_t result = 0; 205 uint32_t result = 0;
207 int err = mailsession_messages_number(m_pop3->sto_session,NULL,&result); 206 int err = mailsession_messages_number(m_pop3->sto_session,NULL,&result);
208 if (err != MAIL_NO_ERROR) { 207 if (err != MAIL_NO_ERROR) {
209 Global::statusMessage(tr("Error getting folder info")); 208 Global::statusMessage(tr("Error getting folder info"));
210 return 0; 209 return 0;
211 } 210 }
212 for (unsigned int i = 0; i < result; ++i) { 211 for (unsigned int i = 0; i < result; ++i) {
213 err = mailsession_remove_message(m_pop3->sto_session,i+1); 212 err = mailsession_remove_message(m_pop3->sto_session,i+1);
214 if (err != MAIL_NO_ERROR) { 213 if (err != MAIL_NO_ERROR) {
215 Global::statusMessage(tr("Error deleting mail %1").arg(i+1)); 214 Global::statusMessage(tr("Error deleting mail %1").arg(i+1));
216 res=0; 215 res=0;
217 } 216 }
218 break; 217 break;
219 } 218 }
220 return res; 219 return res;
221} 220}
222 221
223void POP3wrapper::statusFolder(folderStat&target_stat,const QString&) { 222void POP3wrapper::statusFolder(folderStat&target_stat,const QString&) {
224 login(); 223 login();
225 target_stat.message_count = 0; 224 target_stat.message_count = 0;
226 target_stat.message_unseen = 0; 225 target_stat.message_unseen = 0;
227 target_stat.message_recent = 0; 226 target_stat.message_recent = 0;
228 if (!m_pop3) 227 if (!m_pop3)
229 return; 228 return;
230 int r = mailsession_status_folder(m_pop3->sto_session,0,&target_stat.message_count, 229 int r = mailsession_status_folder(m_pop3->sto_session,0,&target_stat.message_count,
231 &target_stat.message_recent,&target_stat.message_unseen); 230 &target_stat.message_recent,&target_stat.message_unseen);
232} 231}
233 232
234encodedString* POP3wrapper::fetchRawBody(const RecMail&mail) { 233encodedString* POP3wrapper::fetchRawBody(const RecMail&mail) {
235 char*target=0; 234 char*target=0;
236 size_t length=0; 235 size_t length=0;
237 encodedString*res = 0; 236 encodedString*res = 0;
238 mailmessage * mailmsg = 0; 237 mailmessage * mailmsg = 0;
239 int err = mailsession_get_message(m_pop3->sto_session, mail.getNumber(), &mailmsg); 238 int err = mailsession_get_message(m_pop3->sto_session, mail.getNumber(), &mailmsg);
240 err = mailmessage_fetch(mailmsg,&target,&length); 239 err = mailmessage_fetch(mailmsg,&target,&length);
241 if (mailmsg) 240 if (mailmsg)
242 mailmessage_free(mailmsg); 241 mailmessage_free(mailmsg);
243 if (target) { 242 if (target) {
244 res = new encodedString(target,length); 243 res = new encodedString(target,length);
245 } 244 }
246 return res; 245 return res;
247} 246}
248 247
249MAILLIB::ATYPE POP3wrapper::getType()const { 248MAILLIB::ATYPE POP3wrapper::getType()const {
250 return account->getType(); 249 return account->getType();
251} 250}
252 251
253const QString&POP3wrapper::getName()const{ 252const QString&POP3wrapper::getName()const{
254 return account->getAccountName(); 253 return account->getAccountName();
255} 254}
diff --git a/noncore/net/mail/libmailwrapper/pop3wrapper.h b/noncore/net/mail/libmailwrapper/pop3wrapper.h
index 391c841..e4afb94 100644
--- a/noncore/net/mail/libmailwrapper/pop3wrapper.h
+++ b/noncore/net/mail/libmailwrapper/pop3wrapper.h
@@ -1,42 +1,42 @@
1#ifndef __POP3WRAPPER 1#ifndef __POP3WRAPPER
2#define __POP3WRAPPER 2#define __POP3WRAPPER
3 3
4#include "mailwrapper.h" 4#include "mailwrapper.h"
5#include "genericwrapper.h" 5#include "genericwrapper.h"
6#include <qstring.h> 6#include <qstring.h>
7 7
8class encodedString; 8class encodedString;
9struct mailstorage; 9struct mailstorage;
10struct mailfolder; 10struct mailfolder;
11 11
12class POP3wrapper : public Genericwrapper 12class POP3wrapper : public Genericwrapper
13{ 13{
14 Q_OBJECT 14 Q_OBJECT
15 15
16public: 16public:
17 POP3wrapper( POP3account *a ); 17 POP3wrapper( POP3account *a );
18 virtual ~POP3wrapper(); 18 virtual ~POP3wrapper();
19 /* mailbox will be ignored */ 19 /* mailbox will be ignored */
20 virtual void listMessages(const QString & mailbox, QList<RecMail> &target ); 20 virtual void listMessages(const QString & mailbox, QList<RecMail> &target );
21 virtual QList<Folder>* listFolders(); 21 virtual QValueList<Opie::osmart_pointer<Folder> >* listFolders();
22 /* mailbox will be ignored */ 22 /* mailbox will be ignored */
23 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX"); 23 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX");
24 24
25 virtual void deleteMail(const RecMail&mail); 25 virtual void deleteMail(const RecMail&mail);
26 virtual void answeredMail(const RecMail&mail); 26 virtual void answeredMail(const RecMail&mail);
27 virtual int deleteAllMail(const Folder*); 27 virtual int deleteAllMail(const Opie::osmart_pointer<Folder>&);
28 28
29 virtual RecBody fetchBody( const RecMail &mail ); 29 virtual RecBody fetchBody( const RecMail &mail );
30 virtual encodedString* fetchRawBody(const RecMail&mail); 30 virtual encodedString* fetchRawBody(const RecMail&mail);
31 virtual void logout(); 31 virtual void logout();
32 virtual MAILLIB::ATYPE getType()const; 32 virtual MAILLIB::ATYPE getType()const;
33 virtual const QString&getName()const; 33 virtual const QString&getName()const;
34 static void pop3_progress( size_t current, size_t maximum ); 34 static void pop3_progress( size_t current, size_t maximum );
35 35
36protected: 36protected:
37 void login(); 37 void login();
38 POP3account *account; 38 POP3account *account;
39 mailstorage*m_pop3; 39 mailstorage*m_pop3;
40}; 40};
41 41
42#endif 42#endif
diff --git a/noncore/net/mail/viewmail.cpp b/noncore/net/mail/viewmail.cpp
index aa8f37a..78652d7 100644
--- a/noncore/net/mail/viewmail.cpp
+++ b/noncore/net/mail/viewmail.cpp
@@ -72,128 +72,129 @@ AttachItem* ViewMail::lastChild(AttachItem*parent)
72 AttachItem*temp=0; 72 AttachItem*temp=0;
73 while( (temp=(AttachItem*)item->nextSibling())) 73 while( (temp=(AttachItem*)item->nextSibling()))
74 { 74 {
75 item = temp; 75 item = temp;
76 } 76 }
77 return item; 77 return item;
78} 78}
79 79
80void ViewMail::setBody( RecBody body ) 80void ViewMail::setBody( RecBody body )
81{ 81{
82 82
83 m_body = body; 83 m_body = body;
84 m_mail[2] = body.Bodytext(); 84 m_mail[2] = body.Bodytext();
85 attachbutton->setEnabled(body.Parts().count()>0); 85 attachbutton->setEnabled(body.Parts().count()>0);
86 attachments->setEnabled(body.Parts().count()>0); 86 attachments->setEnabled(body.Parts().count()>0);
87 if (body.Parts().count()==0) 87 if (body.Parts().count()==0)
88 { 88 {
89 return; 89 return;
90 } 90 }
91 AttachItem * curItem=0; 91 AttachItem * curItem=0;
92 AttachItem * parentItem = 0; 92 AttachItem * parentItem = 0;
93 QString type=body.Description().Type()+"/"+body.Description().Subtype(); 93 QString type=body.Description().Type()+"/"+body.Description().Subtype();
94 QString desc,fsize; 94 QString desc,fsize;
95 double s = body.Description().Size(); 95 double s = body.Description().Size();
96 int w; 96 int w;
97 w=0; 97 w=0;
98 98
99 while (s>1024) 99 while (s>1024)
100 { 100 {
101 s/=1024; 101 s/=1024;
102 ++w; 102 ++w;
103 if (w>=2) break; 103 if (w>=2) break;
104 } 104 }
105 105
106 QString q=""; 106 QString q="";
107 switch(w) 107 switch(w)
108 { 108 {
109 case 1: 109 case 1:
110 q="k"; 110 q="k";
111 break; 111 break;
112 case 2: 112 case 2:
113 q="M"; 113 q="M";
114 break; 114 break;
115 default: 115 default:
116 break; 116 break;
117 } 117 }
118 118
119 { 119 {
120 /* I did not found a method to make a CONTENT reset on a QTextStream 120 /* I did not found a method to make a CONTENT reset on a QTextStream
121 so I use this construct that the stream will re-constructed in each 121 so I use this construct that the stream will re-constructed in each
122 loop. To let it work, the textstream is packed into a own area of 122 loop. To let it work, the textstream is packed into a own area of
123 code is it will be destructed after finishing its small job. 123 code is it will be destructed after finishing its small job.
124 */ 124 */
125 QTextOStream o(&fsize); 125 QTextOStream o(&fsize);
126 if (w>0) o.precision(2); else o.precision(0); 126 if (w>0) o.precision(2); else o.precision(0);
127 o.setf(QTextStream::fixed); 127 o.setf(QTextStream::fixed);
128 o << s << " " << q << "Byte"; 128 o << s << " " << q << "Byte";
129 } 129 }
130 130
131 curItem=new AttachItem(attachments,curItem,type,"Mailbody","",fsize,-1,body.Description().Positionlist()); 131 curItem=new AttachItem(attachments,curItem,type,"Mailbody","",fsize,-1,body.Description().Positionlist());
132 QString filename = ""; 132 QString filename = "";
133 133
134 for (unsigned int i = 0; i < body.Parts().count();++i) 134 for (unsigned int i = 0; i < body.Parts().count();++i)
135 { 135 {
136 filename = "";
136 type = body.Parts()[i].Type()+"/"+body.Parts()[i].Subtype(); 137 type = body.Parts()[i].Type()+"/"+body.Parts()[i].Subtype();
137 part_plist_t::ConstIterator it = body.Parts()[i].Parameters().begin(); 138 part_plist_t::ConstIterator it = body.Parts()[i].Parameters().begin();
138 for (;it!=body.Parts()[i].Parameters().end();++it) 139 for (;it!=body.Parts()[i].Parameters().end();++it)
139 { 140 {
140 qDebug(it.key()); 141 qDebug(it.key());
141 if (it.key().lower()=="name") 142 if (it.key().lower()=="name")
142 { 143 {
143 filename=it.data(); 144 filename=it.data();
144 } 145 }
145 } 146 }
146 s = body.Parts()[i].Size(); 147 s = body.Parts()[i].Size();
147 w = 0; 148 w = 0;
148 while (s>1024) 149 while (s>1024)
149 { 150 {
150 s/=1024; 151 s/=1024;
151 ++w; 152 ++w;
152 if (w>=2) break; 153 if (w>=2) break;
153 } 154 }
154 switch(w) 155 switch(w)
155 { 156 {
156 case 1: 157 case 1:
157 q="k"; 158 q="k";
158 break; 159 break;
159 case 2: 160 case 2:
160 q="M"; 161 q="M";
161 break; 162 break;
162 default: 163 default:
163 q=""; 164 q="";
164 break; 165 break;
165 } 166 }
166 QTextOStream o(&fsize); 167 QTextOStream o(&fsize);
167 if (w>0) o.precision(2); else o.precision(0); 168 if (w>0) o.precision(2); else o.precision(0);
168 o.setf(QTextStream::fixed); 169 o.setf(QTextStream::fixed);
169 o << s << " " << q << "Byte"; 170 o << s << " " << q << "Byte";
170 desc = body.Parts()[i].Description(); 171 desc = body.Parts()[i].Description();
171 parentItem = searchParent(body.Parts()[i].Positionlist()); 172 parentItem = searchParent(body.Parts()[i].Positionlist());
172 if (parentItem) 173 if (parentItem)
173 { 174 {
174 AttachItem*temp = lastChild(parentItem); 175 AttachItem*temp = lastChild(parentItem);
175 if (temp) curItem = temp; 176 if (temp) curItem = temp;
176 curItem=new AttachItem(parentItem,curItem,type,desc,filename,fsize,i,body.Parts()[i].Positionlist()); 177 curItem=new AttachItem(parentItem,curItem,type,desc,filename,fsize,i,body.Parts()[i].Positionlist());
177 attachments->setRootIsDecorated(true); 178 attachments->setRootIsDecorated(true);
178 curItem = parentItem; 179 curItem = parentItem;
179 } 180 }
180 else 181 else
181 { 182 {
182 curItem=new AttachItem(attachments,curItem,type,desc,filename,fsize,i,body.Parts()[i].Positionlist()); 183 curItem=new AttachItem(attachments,curItem,type,desc,filename,fsize,i,body.Parts()[i].Positionlist());
183 } 184 }
184 } 185 }
185} 186}
186 187
187 188
188void ViewMail::slotShowHtml( bool state ) 189void ViewMail::slotShowHtml( bool state )
189{ 190{
190 m_showHtml = state; 191 m_showHtml = state;
191 setText(); 192 setText();
192} 193}
193 194
194void ViewMail::slotItemClicked( QListViewItem * item , const QPoint & point, int ) 195void ViewMail::slotItemClicked( QListViewItem * item , const QPoint & point, int )
195{ 196{
196 if (!item ) 197 if (!item )
197 return; 198 return;
198 199
199 if ( ( ( AttachItem* )item )->Partnumber() == -1 ) 200 if ( ( ( AttachItem* )item )->Partnumber() == -1 )
@@ -334,142 +335,142 @@ void ViewMail::setText()
334 335
335 if ( !m_showHtml ) 336 if ( !m_showHtml )
336 { 337 {
337 browser->setText( QString( m_mailHtml) + deHtml( m_mail[2] ) + "</font></html>" ); 338 browser->setText( QString( m_mailHtml) + deHtml( m_mail[2] ) + "</font></html>" );
338 } 339 }
339 else 340 else
340 { 341 {
341 browser->setText( QString( m_mailHtml) + m_mail[2] + "</font></html>" ); 342 browser->setText( QString( m_mailHtml) + m_mail[2] + "</font></html>" );
342 } 343 }
343 // remove later in favor of a real handling 344 // remove later in favor of a real handling
344 m_gotBody = true; 345 m_gotBody = true;
345} 346}
346 347
347 348
348ViewMail::~ViewMail() 349ViewMail::~ViewMail()
349{ 350{
350 m_recMail.Wrapper()->cleanMimeCache(); 351 m_recMail.Wrapper()->cleanMimeCache();
351 hide(); 352 hide();
352} 353}
353 354
354void ViewMail::hide() 355void ViewMail::hide()
355{ 356{
356 QWidget::hide(); 357 QWidget::hide();
357 358
358 if (_inLoop) 359 if (_inLoop)
359 { 360 {
360 _inLoop = false; 361 _inLoop = false;
361 qApp->exit_loop(); 362 qApp->exit_loop();
362 363
363 } 364 }
364 365
365} 366}
366 367
367void ViewMail::exec() 368void ViewMail::exec()
368{ 369{
369 show(); 370 show();
370 371
371 if (!_inLoop) 372 if (!_inLoop)
372 { 373 {
373 _inLoop = true; 374 _inLoop = true;
374 qApp->enter_loop(); 375 qApp->enter_loop();
375 } 376 }
376 377
377} 378}
378 379
379QString ViewMail::deHtml(const QString &string) 380QString ViewMail::deHtml(const QString &string)
380{ 381{
381 QString string_ = string; 382 QString string_ = string;
382 string_.replace(QRegExp("&"), "&amp;"); 383 string_.replace(QRegExp("&"), "&amp;");
383 string_.replace(QRegExp("<"), "&lt;"); 384 string_.replace(QRegExp("<"), "&lt;");
384 string_.replace(QRegExp(">"), "&gt;"); 385 string_.replace(QRegExp(">"), "&gt;");
385 string_.replace(QRegExp("\\n"), "<br>"); 386 string_.replace(QRegExp("\\n"), "<br>");
386 return string_; 387 return string_;
387} 388}
388 389
389void ViewMail::slotReply() 390void ViewMail::slotReply()
390{ 391{
391 if (!m_gotBody) 392 if (!m_gotBody)
392 { 393 {
393 QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot reply yet."), tr("Ok")); 394 QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot reply yet."), tr("Ok"));
394 return; 395 return;
395 } 396 }
396 397
397 QString rtext; 398 QString rtext;
398 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose 399 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose
399 .arg( m_mail[0] ) 400 .arg( m_mail[0] )
400 .arg( m_mail[3] ); 401 .arg( m_mail[3] );
401 402
402 QString text = m_mail[2]; 403 QString text = m_mail[2];
403 QStringList lines = QStringList::split(QRegExp("\\n"), text); 404 QStringList lines = QStringList::split(QRegExp("\\n"), text);
404 QStringList::Iterator it; 405 QStringList::Iterator it;
405 for (it = lines.begin(); it != lines.end(); it++) 406 for (it = lines.begin(); it != lines.end(); it++)
406 { 407 {
407 rtext += "> " + *it + "\n"; 408 rtext += "> " + *it + "\n";
408 } 409 }
409 rtext += "\n"; 410 rtext += "\n";
410 411
411 QString prefix; 412 QString prefix;
412 if ( m_mail[1].find(QRegExp("^Re: .*$")) != -1) prefix = ""; 413 if ( m_mail[1].find(QRegExp("^Re: .*$")) != -1) prefix = "";
413 else prefix = "Re: "; // no i18n on purpose 414 else prefix = "Re: "; // no i18n on purpose
414 415
415 Settings *settings = new Settings(); 416 Settings *settings = new Settings();
416 ComposeMail composer( settings ,this, 0, true); 417 ComposeMail composer( settings ,this, 0, true);
417 if (m_recMail.Replyto().isEmpty()) { 418 if (m_recMail.Replyto().isEmpty()) {
418 composer.setTo( m_recMail.getFrom()); 419 composer.setTo( m_recMail.getFrom());
419 } else { 420 } else {
420 composer.setTo( m_recMail.Replyto()); 421 composer.setTo( m_recMail.Replyto());
421 } 422 }
422 composer.setSubject( prefix + m_mail[1] ); 423 composer.setSubject( prefix + m_mail[1] );
423 composer.setMessage( rtext ); 424 composer.setMessage( rtext );
424 composer.setInReplyTo(m_recMail.Msgid()); 425 composer.setInReplyTo(m_recMail.Msgid());
425 426
426 if ( QDialog::Accepted == QPEApplication::execDialog( &composer ) ) 427 if ( QDialog::Accepted == QPEApplication::execDialog( &composer ) )
427 { 428 {
428 m_recMail.Wrapper()->answeredMail(m_recMail); 429 m_recMail.Wrapper()->answeredMail(m_recMail);
429 } 430 }
430} 431}
431 432
432void ViewMail::slotForward() 433void ViewMail::slotForward()
433{ 434{
434 if (!m_gotBody) 435 if (!m_gotBody)
435 { 436 {
436 QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot forward yet."), tr("Ok")); 437 QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot forward yet."), tr("Ok"));
437 return; 438 return;
438 } 439 }
439 440
440 QString ftext; 441 QString ftext;
441 ftext += QString("\n----- Forwarded message from %1 -----\n\n") 442 ftext += QString("\n----- Forwarded message from %1 -----\n\n")
442 .arg( m_mail[0] ); 443 .arg( m_mail[0] );
443 if (!m_mail[3].isNull()) 444 if (!m_mail[3].isNull())
444 ftext += QString("Date: %1\n") 445 ftext += QString("Date: %1\n")
445 .arg( m_mail[3] ); 446 .arg( m_mail[3] );
446 if (!m_mail[0].isNull()) 447 if (!m_mail[0].isNull())
447 ftext += QString("From: %1\n") 448 ftext += QString("From: %1\n")
448 .arg( m_mail[0] ); 449 .arg( m_mail[0] );
449 if (!m_mail[1].isNull()) 450 if (!m_mail[1].isNull())
450 ftext += QString("Subject: %1\n") 451 ftext += QString("Subject: %1\n")
451 .arg( m_mail[1] ); 452 .arg( m_mail[1] );
452 453
453 ftext += QString("\n%1\n") 454 ftext += QString("\n%1\n")
454 .arg( m_mail[2]); 455 .arg( m_mail[2]);
455 456
456 ftext += QString("----- End forwarded message -----\n"); 457 ftext += QString("----- End forwarded message -----\n");
457 458
458 Settings *settings = new Settings(); 459 Settings *settings = new Settings();
459 ComposeMail composer( settings ,this, 0, true); 460 ComposeMail composer( settings ,this, 0, true);
460 composer.setSubject( "Fwd: " + m_mail[1] ); 461 composer.setSubject( "Fwd: " + m_mail[1] );
461 composer.setMessage( ftext ); 462 composer.setMessage( ftext );
462 if ( QDialog::Accepted == QPEApplication::execDialog( &composer )) 463 if ( QDialog::Accepted == QPEApplication::execDialog( &composer ))
463 { 464 {
464 } 465 }
465} 466}
466 467
467void ViewMail::slotDeleteMail( ) 468void ViewMail::slotDeleteMail( )
468{ 469{
469 if ( QMessageBox::warning(this, tr("Delete Mail"), QString( tr("<p>Do you really want to delete this mail? <br><br>" ) + m_mail[0] + " - " + m_mail[1] ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) 470 if ( QMessageBox::warning(this, tr("Delete Mail"), QString( tr("<p>Do you really want to delete this mail? <br><br>" ) + m_mail[0] + " - " + m_mail[1] ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes )
470 { 471 {
471 m_recMail.Wrapper()->deleteMail( m_recMail ); 472 m_recMail.Wrapper()->deleteMail( m_recMail );
472 hide(); 473 hide();
473 deleted = true; 474 deleted = true;
474 } 475 }
475} 476}