summaryrefslogtreecommitdiff
authoralwin <alwin>2004-01-08 02:52:13 (UTC)
committer alwin <alwin>2004-01-08 02:52:13 (UTC)
commit05d47b2603adfab0e16f7395e34b7aa56ce6d8de (patch) (unidiff)
tree4253654acb70b859fd0d32981132dffd35092b9f
parentdfa1477a28ecd90e08cf09aeecbe816e94bec0b5 (diff)
downloadopie-05d47b2603adfab0e16f7395e34b7aa56ce6d8de.zip
opie-05d47b2603adfab0e16f7395e34b7aa56ce6d8de.tar.gz
opie-05d47b2603adfab0e16f7395e34b7aa56ce6d8de.tar.bz2
move/copy mails to another folder resides inside wrappers so we can
use special funs of libetpan and/or mailserver itself (eg. imap) libetpan 0.32 requires for that feature a patch! (see libetpanstuff/) accounts marked as "offline" get a new icon TODO: - when creating a new folder while copy/move on imap-server, get the real resulting foldername when using prefix - implement usage of copy/move inside one mbox using special etpan funs
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/accountview.cpp40
-rw-r--r--noncore/net/mail/accountview.h1
-rw-r--r--noncore/net/mail/defines.h3
-rw-r--r--noncore/net/mail/libmailwrapper/abstractmail.cpp19
-rw-r--r--noncore/net/mail/libmailwrapper/abstractmail.h2
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.cpp31
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.h1
7 files changed, 83 insertions, 14 deletions
diff --git a/noncore/net/mail/accountview.cpp b/noncore/net/mail/accountview.cpp
index eea021f..b7de7b9 100644
--- a/noncore/net/mail/accountview.cpp
+++ b/noncore/net/mail/accountview.cpp
@@ -1,879 +1,891 @@
1#include "accountview.h" 1#include "accountview.h"
2#include <libmailwrapper/mailtypes.h> 2#include <libmailwrapper/mailtypes.h>
3#include <libmailwrapper/abstractmail.h> 3#include <libmailwrapper/abstractmail.h>
4#include "defines.h" 4#include "defines.h"
5#include "newmaildir.h" 5#include "newmaildir.h"
6#include "selectstore.h" 6#include "selectstore.h"
7#include <qmessagebox.h> 7#include <qmessagebox.h>
8#include <qpopupmenu.h> 8#include <qpopupmenu.h>
9 9
10#define SETPIX(x) if (!account->getOffline()) {setPixmap( 0,x);} else {setPixmap( 0, PIXMAP_OFFLINE );}
10/** 11/**
11 * POP3 Account stuff 12 * POP3 Account stuff
12 */ 13 */
13POP3viewItem::POP3viewItem( POP3account *a, AccountView *parent ) 14POP3viewItem::POP3viewItem( POP3account *a, AccountView *parent )
14 : AccountViewItem( parent ) 15 : AccountViewItem( parent )
15{ 16{
16 account = a; 17 account = a;
17 wrapper = AbstractMail::getWrapper( account ); 18 wrapper = AbstractMail::getWrapper( account );
18 setPixmap( 0, PIXMAP_POP3FOLDER ); 19 SETPIX(PIXMAP_POP3FOLDER);
20#if 0
21 if (!account->getOffline()) {
22 setPixmap( 0, );
23 } else {
24 setPixmap( 0, PIXMAP_OFFLINE );
25 }
26#endif
19 setText( 0, account->getAccountName() ); 27 setText( 0, account->getAccountName() );
20 setOpen( true ); 28 setOpen( true );
21} 29}
22 30
23POP3viewItem::~POP3viewItem() 31POP3viewItem::~POP3viewItem()
24{ 32{
25 delete wrapper; 33 delete wrapper;
26} 34}
27 35
28AbstractMail *POP3viewItem::getWrapper() 36AbstractMail *POP3viewItem::getWrapper()
29{ 37{
30 return wrapper; 38 return wrapper;
31} 39}
32 40
33void POP3viewItem::refresh( QList<RecMail> & ) 41void POP3viewItem::refresh( QList<RecMail> & )
34{ 42{
43 refresh();
44}
45
46void POP3viewItem::refresh()
47{
35 if (account->getOffline()) return; 48 if (account->getOffline()) return;
36 QList<Folder> *folders = wrapper->listFolders(); 49 QList<Folder> *folders = wrapper->listFolders();
37 QListViewItem *child = firstChild(); 50 QListViewItem *child = firstChild();
38 while ( child ) { 51 while ( child ) {
39 QListViewItem *tmp = child; 52 QListViewItem *tmp = child;
40 child = child->nextSibling(); 53 child = child->nextSibling();
41 delete tmp; 54 delete tmp;
42 } 55 }
43 Folder *it; 56 Folder *it;
44 QListViewItem*item = 0; 57 QListViewItem*item = 0;
45 for ( it = folders->first(); it; it = folders->next() ) { 58 for ( it = folders->first(); it; it = folders->next() ) {
46 item = new POP3folderItem( it, this , item ); 59 item = new POP3folderItem( it, this , item );
47 item->setSelectable(it->may_select()); 60 item->setSelectable(it->may_select());
48 } 61 }
49 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 62 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
50 folders->setAutoDelete(false); 63 folders->setAutoDelete(false);
51 delete folders; 64 delete folders;
52} 65}
53 66
54RecBody POP3viewItem::fetchBody( const RecMail &mail ) 67RecBody POP3viewItem::fetchBody( const RecMail &mail )
55{ 68{
56 qDebug( "POP3 fetchBody" ); 69 qDebug( "POP3 fetchBody" );
57 return wrapper->fetchBody( mail ); 70 return wrapper->fetchBody( mail );
58} 71}
59 72
60QPopupMenu * POP3viewItem::getContextMenu() 73QPopupMenu * POP3viewItem::getContextMenu()
61{ 74{
62 QPopupMenu *m = new QPopupMenu(0); 75 QPopupMenu *m = new QPopupMenu(0);
63 if (m) { 76 if (m) {
64 if (!account->getOffline()) { 77 if (!account->getOffline()) {
65 m->insertItem(QObject::tr("Disconnect",contextName),0); 78 m->insertItem(QObject::tr("Disconnect",contextName),0);
66 m->insertItem(QObject::tr("Set offline",contextName),1); 79 m->insertItem(QObject::tr("Set offline",contextName),1);
67 } else { 80 } else {
68 m->insertItem(QObject::tr("Set online",contextName),1); 81 m->insertItem(QObject::tr("Set online",contextName),1);
69 } 82 }
70 } 83 }
71 return m; 84 return m;
72} 85}
73 86
74void POP3viewItem::disconnect() 87void POP3viewItem::disconnect()
75{ 88{
76 QListViewItem *child = firstChild(); 89 QListViewItem *child = firstChild();
77 while ( child ) { 90 while ( child ) {
78 QListViewItem *tmp = child; 91 QListViewItem *tmp = child;
79 child = child->nextSibling(); 92 child = child->nextSibling();
80 delete tmp; 93 delete tmp;
81 } 94 }
82 wrapper->logout(); 95 wrapper->logout();
83} 96}
84 97
85void POP3viewItem::setOnOffline() 98void POP3viewItem::setOnOffline()
86{ 99{
87 if (!account->getOffline()) { 100 if (!account->getOffline()) {
88 disconnect(); 101 disconnect();
89 } 102 }
90 account->setOffline(!account->getOffline()); 103 account->setOffline(!account->getOffline());
91 account->save(); 104 account->save();
105 SETPIX(PIXMAP_POP3FOLDER);
106 refresh();
92} 107}
93 108
94void POP3viewItem::contextMenuSelected(int which) 109void POP3viewItem::contextMenuSelected(int which)
95{ 110{
96 switch (which) { 111 switch (which) {
97 case 0: 112 case 0:
98 disconnect(); 113 disconnect();
99 break; 114 break;
100 case 1: 115 case 1:
101 setOnOffline(); 116 setOnOffline();
102 break; 117 break;
103 } 118 }
104} 119}
105 120
106POP3folderItem::~POP3folderItem() 121POP3folderItem::~POP3folderItem()
107{ 122{
108 delete folder; 123 delete folder;
109} 124}
110 125
111POP3folderItem::POP3folderItem( Folder *folderInit, POP3viewItem *parent , QListViewItem*after ) 126POP3folderItem::POP3folderItem( Folder *folderInit, POP3viewItem *parent , QListViewItem*after )
112 : AccountViewItem( parent,after ) 127 : AccountViewItem( parent,after )
113{ 128{
114 folder = folderInit; 129 folder = folderInit;
115 pop3 = parent; 130 pop3 = parent;
116 if (folder->getDisplayName().lower()!="inbox") { 131 if (folder->getDisplayName().lower()!="inbox") {
117 setPixmap( 0, PIXMAP_POP3FOLDER ); 132 setPixmap( 0, PIXMAP_POP3FOLDER );
118 } else { 133 } else {
119 setPixmap( 0, PIXMAP_INBOXFOLDER); 134 setPixmap( 0, PIXMAP_INBOXFOLDER);
120 } 135 }
121 setText( 0, folder->getDisplayName() ); 136 setText( 0, folder->getDisplayName() );
122} 137}
123 138
124void POP3folderItem::refresh(QList<RecMail>&target) 139void POP3folderItem::refresh(QList<RecMail>&target)
125{ 140{
126 if (folder->may_select()) 141 if (folder->may_select())
127 pop3->getWrapper()->listMessages( folder->getName(),target ); 142 pop3->getWrapper()->listMessages( folder->getName(),target );
128} 143}
129 144
130RecBody POP3folderItem::fetchBody(const RecMail&aMail) 145RecBody POP3folderItem::fetchBody(const RecMail&aMail)
131{ 146{
132 return pop3->getWrapper()->fetchBody(aMail); 147 return pop3->getWrapper()->fetchBody(aMail);
133} 148}
134 149
135QPopupMenu * POP3folderItem::getContextMenu() 150QPopupMenu * POP3folderItem::getContextMenu()
136{ 151{
137 QPopupMenu *m = new QPopupMenu(0); 152 QPopupMenu *m = new QPopupMenu(0);
138 if (m) { 153 if (m) {
139 m->insertItem(QObject::tr("Refresh header list",contextName),0); 154 m->insertItem(QObject::tr("Refresh header list",contextName),0);
140 m->insertItem(QObject::tr("Delete all mails",contextName),1); 155 m->insertItem(QObject::tr("Delete all mails",contextName),1);
141 m->insertItem(QObject::tr("Move/Copie all mails",contextName),2); 156 m->insertItem(QObject::tr("Move/Copie all mails",contextName),2);
142 } 157 }
143 return m; 158 return m;
144} 159}
145 160
146void POP3folderItem::downloadMails() 161void POP3folderItem::downloadMails()
147{ 162{
148 AccountView*bl = pop3->accountView(); 163 AccountView*bl = pop3->accountView();
149 if (!bl) return; 164 if (!bl) return;
150 bl->downloadMails(folder,pop3->getWrapper()); 165 bl->downloadMails(folder,pop3->getWrapper());
151} 166}
152 167
153void POP3folderItem::contextMenuSelected(int which) 168void POP3folderItem::contextMenuSelected(int which)
154{ 169{
155 AccountView * view = (AccountView*)listView(); 170 AccountView * view = (AccountView*)listView();
156 switch (which) { 171 switch (which) {
157 case 0: 172 case 0:
158 /* must be 'cause pop3 lists are cached */ 173 /* must be 'cause pop3 lists are cached */
159 pop3->getWrapper()->logout(); 174 pop3->getWrapper()->logout();
160 view->refreshCurrent(); 175 view->refreshCurrent();
161 break; 176 break;
162 case 1: 177 case 1:
163 deleteAllMail(pop3->getWrapper(),folder); 178 deleteAllMail(pop3->getWrapper(),folder);
164 break; 179 break;
165 case 2: 180 case 2:
166 downloadMails(); 181 downloadMails();
167 break; 182 break;
168 default: 183 default:
169 break; 184 break;
170 } 185 }
171} 186}
172 187
173/** 188/**
174 * IMAP Account stuff 189 * IMAP Account stuff
175 */ 190 */
176IMAPviewItem::IMAPviewItem( IMAPaccount *a, AccountView *parent ) 191IMAPviewItem::IMAPviewItem( IMAPaccount *a, AccountView *parent )
177 : AccountViewItem( parent ) 192 : AccountViewItem( parent )
178{ 193{
179 account = a; 194 account = a;
180 wrapper = AbstractMail::getWrapper( account ); 195 wrapper = AbstractMail::getWrapper( account );
181 setPixmap( 0, PIXMAP_IMAPFOLDER ); 196 SETPIX(PIXMAP_IMAPFOLDER);
182 setText( 0, account->getAccountName() ); 197 setText( 0, account->getAccountName() );
183 setOpen( true ); 198 setOpen( true );
184} 199}
185 200
186IMAPviewItem::~IMAPviewItem() 201IMAPviewItem::~IMAPviewItem()
187{ 202{
188 delete wrapper; 203 delete wrapper;
189} 204}
190 205
191AbstractMail *IMAPviewItem::getWrapper() 206AbstractMail *IMAPviewItem::getWrapper()
192{ 207{
193 return wrapper; 208 return wrapper;
194} 209}
195 210
196IMAPfolderItem*IMAPviewItem::findSubItem(const QString&path,IMAPfolderItem*start) 211IMAPfolderItem*IMAPviewItem::findSubItem(const QString&path,IMAPfolderItem*start)
197{ 212{
198 IMAPfolderItem*pitem,*sitem; 213 IMAPfolderItem*pitem,*sitem;
199 if (!start) pitem = (IMAPfolderItem*)firstChild(); 214 if (!start) pitem = (IMAPfolderItem*)firstChild();
200 else pitem = (IMAPfolderItem*)start->firstChild(); 215 else pitem = (IMAPfolderItem*)start->firstChild();
201 while (pitem) { 216 while (pitem) {
202 if (pitem->matchName(path)) { 217 if (pitem->matchName(path)) {
203 break; 218 break;
204 } 219 }
205 if (pitem->childCount()>0) { 220 if (pitem->childCount()>0) {
206 sitem = findSubItem(path,pitem); 221 sitem = findSubItem(path,pitem);
207 if (sitem) { 222 if (sitem) {
208 pitem = sitem; 223 pitem = sitem;
209 break; 224 break;
210 } 225 }
211 } 226 }
212 pitem=(IMAPfolderItem*)pitem->nextSibling(); 227 pitem=(IMAPfolderItem*)pitem->nextSibling();
213 } 228 }
214 return pitem; 229 return pitem;
215} 230}
216 231
217void IMAPviewItem::refresh(QList<RecMail>&) 232void IMAPviewItem::refresh(QList<RecMail>&)
218{ 233{
219 refreshFolders(false); 234 refreshFolders(false);
220} 235}
221 236
222void IMAPviewItem::removeChilds() 237void IMAPviewItem::removeChilds()
223{ 238{
224 QListViewItem *child = firstChild(); 239 QListViewItem *child = firstChild();
225 while ( child ) { 240 while ( child ) {
226 QListViewItem *tmp = child; 241 QListViewItem *tmp = child;
227 child = child->nextSibling(); 242 child = child->nextSibling();
228 delete tmp; 243 delete tmp;
229 } 244 }
230 245
231} 246}
232 247
233const QStringList&IMAPviewItem::subFolders() 248const QStringList&IMAPviewItem::subFolders()
234{ 249{
235 return currentFolders; 250 return currentFolders;
236} 251}
237 252
238void IMAPviewItem::refreshFolders(bool force) 253void IMAPviewItem::refreshFolders(bool force)
239{ 254{
240 if (childCount()>0 && force==false) return; 255 if (childCount()>0 && force==false) return;
241 if (account->getOffline()) return; 256 if (account->getOffline()) return;
242 257
243 removeChilds(); 258 removeChilds();
244 currentFolders.clear(); 259 currentFolders.clear();
245 QList<Folder> *folders = wrapper->listFolders(); 260 QList<Folder> *folders = wrapper->listFolders();
246 261
247 Folder *it; 262 Folder *it;
248 QListViewItem*item = 0; 263 QListViewItem*item = 0;
249 QListViewItem*titem = 0; 264 QListViewItem*titem = 0;
250 QString fname,del,search; 265 QString fname,del,search;
251 int pos; 266 int pos;
252 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 267 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
253 folders->setAutoDelete(false); 268 folders->setAutoDelete(false);
254 269
255 for ( it = folders->first(); it; it = folders->next() ) { 270 for ( it = folders->first(); it; it = folders->next() ) {
256 if (it->getDisplayName().lower()=="inbox") { 271 if (it->getDisplayName().lower()=="inbox") {
257 item = new IMAPfolderItem( it, this , item ); 272 item = new IMAPfolderItem( it, this , item );
258 folders->remove(it); 273 folders->remove(it);
259 qDebug("inbox found"); 274 qDebug("inbox found");
260 break; 275 break;
261 } 276 }
262 } 277 }
263 for ( it = folders->first(); it; it = folders->next() ) { 278 for ( it = folders->first(); it; it = folders->next() ) {
264 fname = it->getDisplayName(); 279 fname = it->getDisplayName();
265 currentFolders.append(it->getName()); 280 currentFolders.append(it->getName());
266 pos = fname.findRev(it->Separator()); 281 pos = fname.findRev(it->Separator());
267 if (pos != -1) { 282 if (pos != -1) {
268 fname = fname.left(pos); 283 fname = fname.left(pos);
269 } 284 }
270 IMAPfolderItem*pitem = findSubItem(fname); 285 IMAPfolderItem*pitem = findSubItem(fname);
271 if (pitem) { 286 if (pitem) {
272 titem = item; 287 titem = item;
273 item = new IMAPfolderItem(it,pitem,pitem->firstChild(),this); 288 item = new IMAPfolderItem(it,pitem,pitem->firstChild(),this);
274 /* setup the short name */ 289 /* setup the short name */
275 item->setText(0,it->getDisplayName().right(it->getDisplayName().length()-pos-1)); 290 item->setText(0,it->getDisplayName().right(it->getDisplayName().length()-pos-1));
276 item = titem; 291 item = titem;
277 } else { 292 } else {
278 item = new IMAPfolderItem( it, this , item ); 293 item = new IMAPfolderItem( it, this , item );
279 } 294 }
280 } 295 }
281 delete folders; 296 delete folders;
282} 297}
283 298
284QPopupMenu * IMAPviewItem::getContextMenu() 299QPopupMenu * IMAPviewItem::getContextMenu()
285{ 300{
286 QPopupMenu *m = new QPopupMenu(0); 301 QPopupMenu *m = new QPopupMenu(0);
287 if (m) { 302 if (m) {
288 if (!account->getOffline()) { 303 if (!account->getOffline()) {
289 m->insertItem(QObject::tr("Refresh folder list",contextName),0); 304 m->insertItem(QObject::tr("Refresh folder list",contextName),0);
290 m->insertItem(QObject::tr("Create new folder",contextName),1); 305 m->insertItem(QObject::tr("Create new folder",contextName),1);
291 m->insertSeparator(); 306 m->insertSeparator();
292 m->insertItem(QObject::tr("Disconnect",contextName),2); 307 m->insertItem(QObject::tr("Disconnect",contextName),2);
293 m->insertItem(QObject::tr("Set offline",contextName),3); 308 m->insertItem(QObject::tr("Set offline",contextName),3);
294 } else { 309 } else {
295 m->insertItem(QObject::tr("Set online",contextName),3); 310 m->insertItem(QObject::tr("Set online",contextName),3);
296 } 311 }
297 } 312 }
298 return m; 313 return m;
299} 314}
300 315
301void IMAPviewItem::createNewFolder() 316void IMAPviewItem::createNewFolder()
302{ 317{
303 Newmdirdlg ndirdlg; 318 Newmdirdlg ndirdlg;
304 ndirdlg.showMaximized(); 319 ndirdlg.showMaximized();
305 if (ndirdlg.exec()) { 320 if (ndirdlg.exec()) {
306 QString ndir = ndirdlg.Newdir(); 321 QString ndir = ndirdlg.Newdir();
307 bool makesubs = ndirdlg.subpossible(); 322 bool makesubs = ndirdlg.subpossible();
308 QString delemiter = "/"; 323 QString delemiter = "/";
309 IMAPfolderItem*item = (IMAPfolderItem*)firstChild(); 324 IMAPfolderItem*item = (IMAPfolderItem*)firstChild();
310 if (item) { 325 if (item) {
311 delemiter = item->Delemiter(); 326 delemiter = item->Delemiter();
312 } 327 }
313 if (wrapper->createMbox(ndir,0,delemiter,makesubs)) { 328 if (wrapper->createMbox(ndir,0,delemiter,makesubs)) {
314 refreshFolders(true); 329 refreshFolders(true);
315 } 330 }
316 } 331 }
317} 332}
318 333
319void IMAPviewItem::contextMenuSelected(int id) 334void IMAPviewItem::contextMenuSelected(int id)
320{ 335{
321 qDebug("Id selected: %i",id); 336 qDebug("Id selected: %i",id);
322 switch (id) { 337 switch (id) {
323 case 0: 338 case 0:
324 refreshFolders(true); 339 refreshFolders(true);
325 break; 340 break;
326 case 1: 341 case 1:
327 createNewFolder(); 342 createNewFolder();
328 break; 343 break;
329 case 2: 344 case 2:
330 removeChilds(); 345 removeChilds();
331 wrapper->logout(); 346 wrapper->logout();
332 break; 347 break;
333 case 3: 348 case 3:
334 if (account->getOffline()==false) { 349 if (account->getOffline()==false) {
335 removeChilds(); 350 removeChilds();
336 wrapper->logout(); 351 wrapper->logout();
337 } 352 }
338 account->setOffline(!account->getOffline()); 353 account->setOffline(!account->getOffline());
339 account->save(); 354 account->save();
355 SETPIX(PIXMAP_IMAPFOLDER);
340 refreshFolders(false); 356 refreshFolders(false);
341 break; 357 break;
342 default: 358 default:
343 break; 359 break;
344 } 360 }
345} 361}
346 362
347RecBody IMAPviewItem::fetchBody(const RecMail&) 363RecBody IMAPviewItem::fetchBody(const RecMail&)
348{ 364{
349 return RecBody(); 365 return RecBody();
350} 366}
351 367
352bool IMAPviewItem::offline() 368bool IMAPviewItem::offline()
353{ 369{
354 return account->getOffline(); 370 return account->getOffline();
355} 371}
356 372
357IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPviewItem *parent , QListViewItem*after ) 373IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPviewItem *parent , QListViewItem*after )
358 : AccountViewItem( parent , after ) 374 : AccountViewItem( parent , after )
359{ 375{
360 folder = folderInit; 376 folder = folderInit;
361 imap = parent; 377 imap = parent;
362 if (folder->getDisplayName().lower()!="inbox") { 378 if (folder->getDisplayName().lower()!="inbox") {
363 setPixmap( 0, PIXMAP_IMAPFOLDER ); 379 setPixmap( 0, PIXMAP_IMAPFOLDER );
364 } else { 380 } else {
365 setPixmap( 0, PIXMAP_INBOXFOLDER); 381 setPixmap( 0, PIXMAP_INBOXFOLDER);
366 } 382 }
367 setText( 0, folder->getDisplayName() ); 383 setText( 0, folder->getDisplayName() );
368} 384}
369 385
370IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master ) 386IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master )
371 : AccountViewItem( parent,after ) 387 : AccountViewItem( parent,after )
372{ 388{
373 folder = folderInit; 389 folder = folderInit;
374 imap = master; 390 imap = master;
375 if (folder->getDisplayName().lower()!="inbox") { 391 if (folder->getDisplayName().lower()!="inbox") {
376 setPixmap( 0, PIXMAP_IMAPFOLDER ); 392 setPixmap( 0, PIXMAP_IMAPFOLDER );
377 } else { 393 } else {
378 setPixmap( 0, PIXMAP_INBOXFOLDER); 394 setPixmap( 0, PIXMAP_INBOXFOLDER);
379 } 395 }
380 setText( 0, folder->getDisplayName() ); 396 setText( 0, folder->getDisplayName() );
381} 397}
382 398
383IMAPfolderItem::~IMAPfolderItem() 399IMAPfolderItem::~IMAPfolderItem()
384{ 400{
385 delete folder; 401 delete folder;
386} 402}
387 403
388const QString& IMAPfolderItem::Delemiter()const 404const QString& IMAPfolderItem::Delemiter()const
389{ 405{
390 return folder->Separator(); 406 return folder->Separator();
391} 407}
392 408
393bool IMAPfolderItem::matchName(const QString&name)const 409bool IMAPfolderItem::matchName(const QString&name)const
394{ 410{
395 return folder->getDisplayName()==name; 411 return folder->getDisplayName()==name;
396} 412}
397 413
398void IMAPfolderItem::refresh(QList<RecMail>&target) 414void IMAPfolderItem::refresh(QList<RecMail>&target)
399{ 415{
400 if (folder->may_select()) { 416 if (folder->may_select()) {
401 imap->getWrapper()->listMessages( folder->getName(),target ); 417 imap->getWrapper()->listMessages( folder->getName(),target );
402 } else { 418 } else {
403 target.clear(); 419 target.clear();
404 } 420 }
405} 421}
406 422
407RecBody IMAPfolderItem::fetchBody(const RecMail&aMail) 423RecBody IMAPfolderItem::fetchBody(const RecMail&aMail)
408{ 424{
409 return imap->getWrapper()->fetchBody(aMail); 425 return imap->getWrapper()->fetchBody(aMail);
410} 426}
411 427
412QPopupMenu * IMAPfolderItem::getContextMenu() 428QPopupMenu * IMAPfolderItem::getContextMenu()
413{ 429{
414 QPopupMenu *m = new QPopupMenu(0); 430 QPopupMenu *m = new QPopupMenu(0);
415 if (m) { 431 if (m) {
416 if (folder->may_select()) { 432 if (folder->may_select()) {
417 m->insertItem(QObject::tr("Refresh header list",contextName),0); 433 m->insertItem(QObject::tr("Refresh header list",contextName),0);
418 m->insertItem(QObject::tr("Move/Copie all mails",contextName),4); 434 m->insertItem(QObject::tr("Move/Copie all mails",contextName),4);
419 m->insertItem(QObject::tr("Delete all mails",contextName),1); 435 m->insertItem(QObject::tr("Delete all mails",contextName),1);
420 } 436 }
421 if (folder->no_inferior()==false) { 437 if (folder->no_inferior()==false) {
422 m->insertItem(QObject::tr("Create new subfolder",contextName),2); 438 m->insertItem(QObject::tr("Create new subfolder",contextName),2);
423 } 439 }
424 if (folder->getDisplayName().lower()!="inbox") { 440 if (folder->getDisplayName().lower()!="inbox") {
425 m->insertItem(QObject::tr("Delete folder",contextName),3); 441 m->insertItem(QObject::tr("Delete folder",contextName),3);
426 } 442 }
427 } 443 }
428 return m; 444 return m;
429} 445}
430 446
431void IMAPfolderItem::createNewFolder() 447void IMAPfolderItem::createNewFolder()
432{ 448{
433 Newmdirdlg ndirdlg; 449 Newmdirdlg ndirdlg;
434 ndirdlg.showMaximized(); 450 ndirdlg.showMaximized();
435 if (ndirdlg.exec()) { 451 if (ndirdlg.exec()) {
436 QString ndir = ndirdlg.Newdir(); 452 QString ndir = ndirdlg.Newdir();
437 bool makesubs = ndirdlg.subpossible(); 453 bool makesubs = ndirdlg.subpossible();
438 QString delemiter = Delemiter(); 454 QString delemiter = Delemiter();
439 if (imap->wrapper->createMbox(ndir,folder,delemiter,makesubs)) { 455 if (imap->wrapper->createMbox(ndir,folder,delemiter,makesubs)) {
440 imap->refreshFolders(true); 456 imap->refreshFolders(true);
441 } 457 }
442 } 458 }
443} 459}
444 460
445void IMAPfolderItem::deleteFolder() 461void IMAPfolderItem::deleteFolder()
446{ 462{
447 int yesno = QMessageBox::warning(0,QObject::tr("Delete folder",contextName), 463 int yesno = QMessageBox::warning(0,QObject::tr("Delete folder",contextName),
448 QObject::tr("<center>Realy delete folder <br><b>%1</b><br>and all if it content?</center>",contextName).arg(folder->getDisplayName()), 464 QObject::tr("<center>Realy delete folder <br><b>%1</b><br>and all if it content?</center>",contextName).arg(folder->getDisplayName()),
449 QObject::tr("Yes",contextName), 465 QObject::tr("Yes",contextName),
450 QObject::tr("No",contextName),QString::null,1,1); 466 QObject::tr("No",contextName),QString::null,1,1);
451 qDebug("Auswahl: %i",yesno); 467 qDebug("Auswahl: %i",yesno);
452 if (yesno == 0) { 468 if (yesno == 0) {
453 if (imap->getWrapper()->deleteMbox(folder)) { 469 if (imap->getWrapper()->deleteMbox(folder)) {
454 QListView*v=listView(); 470 QListView*v=listView();
455 IMAPviewItem * box = imap; 471 IMAPviewItem * box = imap;
456 /* be carefull - after that this object is destroyd so don't use 472 /* be carefull - after that this object is destroyd so don't use
457 * any member of it after that call!!*/ 473 * any member of it after that call!!*/
458 imap->refreshFolders(true); 474 imap->refreshFolders(true);
459 if (v) { 475 if (v) {
460 v->setSelected(box,true); 476 v->setSelected(box,true);
461 } 477 }
462 } 478 }
463 } 479 }
464} 480}
465 481
466void IMAPfolderItem::downloadMails() 482void IMAPfolderItem::downloadMails()
467{ 483{
468 AccountView*bl = imap->accountView(); 484 AccountView*bl = imap->accountView();
469 if (!bl) return; 485 if (!bl) return;
470 bl->downloadMails(folder,imap->getWrapper()); 486 bl->downloadMails(folder,imap->getWrapper());
471} 487}
472 488
473void IMAPfolderItem::contextMenuSelected(int id) 489void IMAPfolderItem::contextMenuSelected(int id)
474{ 490{
475 qDebug("Selected id: %i",id); 491 qDebug("Selected id: %i",id);
476 AccountView * view = (AccountView*)listView(); 492 AccountView * view = (AccountView*)listView();
477 switch(id) { 493 switch(id) {
478 case 0: 494 case 0:
479 view->refreshCurrent(); 495 view->refreshCurrent();
480 break; 496 break;
481 case 1: 497 case 1:
482 deleteAllMail(imap->getWrapper(),folder); 498 deleteAllMail(imap->getWrapper(),folder);
483 break; 499 break;
484 case 2: 500 case 2:
485 createNewFolder(); 501 createNewFolder();
486 break; 502 break;
487 case 3: 503 case 3:
488 deleteFolder(); 504 deleteFolder();
489 break; 505 break;
490 case 4: 506 case 4:
491 downloadMails(); 507 downloadMails();
492 break; 508 break;
493 default: 509 default:
494 break; 510 break;
495 } 511 }
496} 512}
497 513
498/** 514/**
499 * Generic stuff 515 * Generic stuff
500 */ 516 */
501 517
502const QString AccountViewItem::contextName="AccountViewItem"; 518const QString AccountViewItem::contextName="AccountViewItem";
503 519
504AccountViewItem::AccountViewItem( AccountView *parent ) 520AccountViewItem::AccountViewItem( AccountView *parent )
505 : QListViewItem( parent ) 521 : QListViewItem( parent )
506{ 522{
507 m_Backlink = parent; 523 m_Backlink = parent;
508} 524}
509 525
510AccountViewItem::AccountViewItem( QListViewItem *parent) 526AccountViewItem::AccountViewItem( QListViewItem *parent)
511 : QListViewItem( parent) 527 : QListViewItem( parent)
512{ 528{
513 m_Backlink = 0; 529 m_Backlink = 0;
514} 530}
515 531
516AccountViewItem::AccountViewItem( QListViewItem *parent , QListViewItem*after ) 532AccountViewItem::AccountViewItem( QListViewItem *parent , QListViewItem*after )
517 :QListViewItem( parent,after ) 533 :QListViewItem( parent,after )
518{ 534{
519 m_Backlink = 0; 535 m_Backlink = 0;
520} 536}
521 537
522AccountViewItem::~AccountViewItem() 538AccountViewItem::~AccountViewItem()
523{ 539{
524} 540}
525 541
526AccountView*AccountViewItem::accountView() 542AccountView*AccountViewItem::accountView()
527{ 543{
528 return m_Backlink; 544 return m_Backlink;
529} 545}
530 546
531void AccountViewItem::deleteAllMail(AbstractMail*wrapper,Folder*folder) 547void AccountViewItem::deleteAllMail(AbstractMail*wrapper,Folder*folder)
532{ 548{
533 if (!wrapper) return; 549 if (!wrapper) return;
534 QString fname=""; 550 QString fname="";
535 if (folder) fname = folder->getDisplayName(); 551 if (folder) fname = folder->getDisplayName();
536 int yesno = QMessageBox::warning(0,QObject::tr("Delete all mails",contextName), 552 int yesno = QMessageBox::warning(0,QObject::tr("Delete all mails",contextName),
537 QObject::tr("<center>Realy delete all mails in box <br>%1</center>",contextName). 553 QObject::tr("<center>Realy delete all mails in box <br>%1</center>",contextName).
538 arg(fname), 554 arg(fname),
539 QObject::tr("Yes",contextName), 555 QObject::tr("Yes",contextName),
540 QObject::tr("No",contextName),QString::null,1,1); 556 QObject::tr("No",contextName),QString::null,1,1);
541 qDebug("Auswahl: %i",yesno); 557 qDebug("Auswahl: %i",yesno);
542 if (yesno == 0) { 558 if (yesno == 0) {
543 if (wrapper->deleteAllMail(folder)) { 559 if (wrapper->deleteAllMail(folder)) {
544 AccountView * view = (AccountView*)listView(); 560 AccountView * view = (AccountView*)listView();
545 if (view) view->refreshCurrent(); 561 if (view) view->refreshCurrent();
546 } 562 }
547 } 563 }
548} 564}
549 565
550AccountView::AccountView( QWidget *parent, const char *name, WFlags flags ) 566AccountView::AccountView( QWidget *parent, const char *name, WFlags flags )
551 : QListView( parent, name, flags ) 567 : QListView( parent, name, flags )
552{ 568{
553 connect( this, SIGNAL( selectionChanged( QListViewItem * ) ), 569 connect( this, SIGNAL( selectionChanged( QListViewItem * ) ),
554 SLOT( refresh( QListViewItem * ) ) ); 570 SLOT( refresh( QListViewItem * ) ) );
555 connect( this, SIGNAL( mouseButtonPressed(int, QListViewItem *,const QPoint&,int ) ),this, 571 connect( this, SIGNAL( mouseButtonPressed(int, QListViewItem *,const QPoint&,int ) ),this,
556 SLOT( slotHold( int, QListViewItem *,const QPoint&,int ) ) ); 572 SLOT( slotHold( int, QListViewItem *,const QPoint&,int ) ) );
557 573
558 setSorting(0); 574 setSorting(0);
559} 575}
560 576
561AccountView::~AccountView() 577AccountView::~AccountView()
562{ 578{
563 imapAccounts.clear(); 579 imapAccounts.clear();
564 mboxAccounts.clear(); 580 mboxAccounts.clear();
565} 581}
566 582
567void AccountView::slotContextMenu(int id) 583void AccountView::slotContextMenu(int id)
568{ 584{
569 AccountViewItem *view = static_cast<AccountViewItem *>(currentItem()); 585 AccountViewItem *view = static_cast<AccountViewItem *>(currentItem());
570 if (!view) return; 586 if (!view) return;
571 view->contextMenuSelected(id); 587 view->contextMenuSelected(id);
572} 588}
573 589
574void AccountView::slotHold(int button, QListViewItem * item,const QPoint&,int) 590void AccountView::slotHold(int button, QListViewItem * item,const QPoint&,int)
575{ 591{
576 if (button==1) {return;} 592 if (button==1) {return;}
577 if (!item) return; 593 if (!item) return;
578 AccountViewItem *view = static_cast<AccountViewItem *>(item); 594 AccountViewItem *view = static_cast<AccountViewItem *>(item);
579 QPopupMenu*m = view->getContextMenu(); 595 QPopupMenu*m = view->getContextMenu();
580 if (!m) return; 596 if (!m) return;
581 connect(m,SIGNAL(activated(int)),this,SLOT(slotContextMenu(int))); 597 connect(m,SIGNAL(activated(int)),this,SLOT(slotContextMenu(int)));
582 m->setFocus(); 598 m->setFocus();
583 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) ); 599 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) );
584 delete m; 600 delete m;
585} 601}
586 602
587void AccountView::populate( QList<Account> list ) 603void AccountView::populate( QList<Account> list )
588{ 604{
589 clear(); 605 clear();
590 606
591 imapAccounts.clear(); 607 imapAccounts.clear();
592 mboxAccounts.clear(); 608 mboxAccounts.clear();
593 609
594 mboxAccounts.append(new MBOXviewItem(AbstractMail::defaultLocalfolder(),this)); 610 mboxAccounts.append(new MBOXviewItem(AbstractMail::defaultLocalfolder(),this));
595 611
596 Account *it; 612 Account *it;
597 for ( it = list.first(); it; it = list.next() ) { 613 for ( it = list.first(); it; it = list.next() ) {
598 if ( it->getType().compare( "IMAP" ) == 0 ) { 614 if ( it->getType().compare( "IMAP" ) == 0 ) {
599 IMAPaccount *imap = static_cast<IMAPaccount *>(it); 615 IMAPaccount *imap = static_cast<IMAPaccount *>(it);
600 qDebug( "added IMAP " + imap->getAccountName() ); 616 qDebug( "added IMAP " + imap->getAccountName() );
601 imapAccounts.append(new IMAPviewItem( imap, this )); 617 imapAccounts.append(new IMAPviewItem( imap, this ));
602 } else if ( it->getType().compare( "POP3" ) == 0 ) { 618 } else if ( it->getType().compare( "POP3" ) == 0 ) {
603 POP3account *pop3 = static_cast<POP3account *>(it); 619 POP3account *pop3 = static_cast<POP3account *>(it);
604 qDebug( "added POP3 " + pop3->getAccountName() ); 620 qDebug( "added POP3 " + pop3->getAccountName() );
605 /* must not be hold 'cause it isn't required */ 621 /* must not be hold 'cause it isn't required */
606 (void) new POP3viewItem( pop3, this ); 622 (void) new POP3viewItem( pop3, this );
607 } 623 }
608 } 624 }
609} 625}
610 626
611void AccountView::refresh(QListViewItem *item) { 627void AccountView::refresh(QListViewItem *item) {
612 628
613 qDebug("AccountView refresh..."); 629 qDebug("AccountView refresh...");
614 if ( item ) { 630 if ( item ) {
615 m_currentItem = item; 631 m_currentItem = item;
616 QList<RecMail> headerlist; 632 QList<RecMail> headerlist;
617 headerlist.setAutoDelete(true); 633 headerlist.setAutoDelete(true);
618 AccountViewItem *view = static_cast<AccountViewItem *>(item); 634 AccountViewItem *view = static_cast<AccountViewItem *>(item);
619 view->refresh(headerlist); 635 view->refresh(headerlist);
620 emit refreshMailview(&headerlist); 636 emit refreshMailview(&headerlist);
621 } 637 }
622} 638}
623 639
624void AccountView::refreshCurrent() 640void AccountView::refreshCurrent()
625{ 641{
626 m_currentItem = currentItem(); 642 m_currentItem = currentItem();
627 if ( !m_currentItem ) return; 643 if ( !m_currentItem ) return;
628 QList<RecMail> headerlist; 644 QList<RecMail> headerlist;
629 headerlist.setAutoDelete(true); 645 headerlist.setAutoDelete(true);
630 AccountViewItem *view = static_cast<AccountViewItem *>(m_currentItem); 646 AccountViewItem *view = static_cast<AccountViewItem *>(m_currentItem);
631 view->refresh(headerlist); 647 view->refresh(headerlist);
632 emit refreshMailview(&headerlist); 648 emit refreshMailview(&headerlist);
633} 649}
634 650
635void AccountView::refreshAll() 651void AccountView::refreshAll()
636{ 652{
637 653
638} 654}
639 655
640RecBody AccountView::fetchBody(const RecMail&aMail) 656RecBody AccountView::fetchBody(const RecMail&aMail)
641{ 657{
642 QListViewItem*item = selectedItem (); 658 QListViewItem*item = selectedItem ();
643 if (!item) return RecBody(); 659 if (!item) return RecBody();
644 AccountViewItem *view = static_cast<AccountViewItem *>(item); 660 AccountViewItem *view = static_cast<AccountViewItem *>(item);
645 return view->fetchBody(aMail); 661 return view->fetchBody(aMail);
646} 662}
647 663
648void AccountView::setupFolderselect(Selectstore*sels) 664void AccountView::setupFolderselect(Selectstore*sels)
649{ 665{
650 sels->showMaximized(); 666 sels->showMaximized();
651 QStringList sFolders; 667 QStringList sFolders;
652 unsigned int i = 0; 668 unsigned int i = 0;
653 for (i=0; i < mboxAccounts.count();++i) { 669 for (i=0; i < mboxAccounts.count();++i) {
654 mboxAccounts[i]->refresh(false); 670 mboxAccounts[i]->refresh(false);
655 sFolders = mboxAccounts[i]->subFolders(); 671 sFolders = mboxAccounts[i]->subFolders();
656 sels->addAccounts(mboxAccounts[i]->getWrapper(),sFolders); 672 sels->addAccounts(mboxAccounts[i]->getWrapper(),sFolders);
657 } 673 }
658 for (i=0; i < imapAccounts.count();++i) { 674 for (i=0; i < imapAccounts.count();++i) {
659 if (imapAccounts[i]->offline()) 675 if (imapAccounts[i]->offline())
660 continue; 676 continue;
661 imapAccounts[i]->refreshFolders(false); 677 imapAccounts[i]->refreshFolders(false);
662 sels->addAccounts(imapAccounts[i]->getWrapper(),imapAccounts[i]->subFolders()); 678 sels->addAccounts(imapAccounts[i]->getWrapper(),imapAccounts[i]->subFolders());
663 } 679 }
664} 680}
665 681
666void AccountView::downloadMails(Folder*fromFolder,AbstractMail*fromWrapper) 682void AccountView::downloadMails(Folder*fromFolder,AbstractMail*fromWrapper)
667{ 683{
668 unsigned int i = 0;
669 AbstractMail*targetMail = 0; 684 AbstractMail*targetMail = 0;
670 QString targetFolder = ""; 685 QString targetFolder = "";
671 Selectstore sels; 686 Selectstore sels;
672 setupFolderselect(&sels); 687 setupFolderselect(&sels);
673 if (!sels.exec()) return; 688 if (!sels.exec()) return;
674 targetMail = sels.currentMail(); 689 targetMail = sels.currentMail();
675 targetFolder = sels.currentFolder(); 690 targetFolder = sels.currentFolder();
676 if ( (fromWrapper==targetMail && fromFolder->getName()==targetFolder) || 691 if ( (fromWrapper==targetMail && fromFolder->getName()==targetFolder) ||
677 targetFolder.isEmpty()) { 692 targetFolder.isEmpty()) {
678 return; 693 return;
679 } 694 }
680 695 if (sels.newFolder() && !targetMail->createMbox(targetFolder)) {
681 QList<RecMail> t; 696 QMessageBox::critical(0,tr("Error creating new Folder"),
682 fromWrapper->listMessages(fromFolder->getName(),t); 697 tr("<center>Error while creating<br>new folder - breaking.</center>"));
683 encodedString*st = 0; 698 return;
684 for (i = 0; i < t.count();++i) {
685 RecMail*r = t.at(i);
686 st = fromWrapper->fetchRawBody(*r);
687 if (st) {
688 targetMail->storeMessage(st->Content(),st->Length(),targetFolder);
689 delete st;
690 }
691 } 699 }
700 qDebug("Targetfolder: %s",targetFolder.latin1());
701 qDebug("Fromfolder: %s",fromFolder->getName().latin1());
702 fromWrapper->mvcpAllMails(fromFolder,targetFolder,targetMail,sels.moveMails());
703 refreshCurrent();
692} 704}
693 705
694/** 706/**
695 * MBOX Account stuff 707 * MBOX Account stuff
696 */ 708 */
697 709
698MBOXviewItem::MBOXviewItem( const QString&aPath, AccountView *parent ) 710MBOXviewItem::MBOXviewItem( const QString&aPath, AccountView *parent )
699 : AccountViewItem( parent ) 711 : AccountViewItem( parent )
700{ 712{
701 m_Path = aPath; 713 m_Path = aPath;
702 /* be carefull - the space within settext is wanted - thats why the string twice */ 714 /* be carefull - the space within settext is wanted - thats why the string twice */
703 wrapper = AbstractMail::getWrapper( m_Path,"Local Folders"); 715 wrapper = AbstractMail::getWrapper( m_Path,"Local Folders");
704 setPixmap( 0, PIXMAP_LOCALFOLDER ); 716 setPixmap( 0, PIXMAP_LOCALFOLDER );
705 setText( 0, " Local Folders" ); 717 setText( 0, " Local Folders" );
706 setOpen( true ); 718 setOpen( true );
707} 719}
708 720
709MBOXviewItem::~MBOXviewItem() 721MBOXviewItem::~MBOXviewItem()
710{ 722{
711 delete wrapper; 723 delete wrapper;
712} 724}
713 725
714AbstractMail *MBOXviewItem::getWrapper() 726AbstractMail *MBOXviewItem::getWrapper()
715{ 727{
716 return wrapper; 728 return wrapper;
717} 729}
718 730
719void MBOXviewItem::refresh( QList<RecMail> & ) 731void MBOXviewItem::refresh( QList<RecMail> & )
720{ 732{
721 refresh(false); 733 refresh(false);
722} 734}
723 735
724void MBOXviewItem::refresh(bool force) 736void MBOXviewItem::refresh(bool force)
725{ 737{
726 if (childCount()>0 && force==false) return; 738 if (childCount()>0 && force==false) return;
727 QList<Folder> *folders = wrapper->listFolders(); 739 QList<Folder> *folders = wrapper->listFolders();
728 QListViewItem *child = firstChild(); 740 QListViewItem *child = firstChild();
729 while ( child ) { 741 while ( child ) {
730 QListViewItem *tmp = child; 742 QListViewItem *tmp = child;
731 child = child->nextSibling(); 743 child = child->nextSibling();
732 delete tmp; 744 delete tmp;
733 } 745 }
734 Folder *it; 746 Folder *it;
735 QListViewItem*item = 0; 747 QListViewItem*item = 0;
736 for ( it = folders->first(); it; it = folders->next() ) { 748 for ( it = folders->first(); it; it = folders->next() ) {
737 item = new MBOXfolderItem( it, this , item ); 749 item = new MBOXfolderItem( it, this , item );
738 item->setSelectable(it->may_select()); 750 item->setSelectable(it->may_select());
739 } 751 }
740 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 752 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
741 folders->setAutoDelete(false); 753 folders->setAutoDelete(false);
742 delete folders; 754 delete folders;
743} 755}
744 756
745RecBody MBOXviewItem::fetchBody( const RecMail &mail ) 757RecBody MBOXviewItem::fetchBody( const RecMail &mail )
746{ 758{
747 qDebug( "MBOX fetchBody" ); 759 qDebug( "MBOX fetchBody" );
748 return wrapper->fetchBody( mail ); 760 return wrapper->fetchBody( mail );
749} 761}
750 762
751QPopupMenu * MBOXviewItem::getContextMenu() 763QPopupMenu * MBOXviewItem::getContextMenu()
752{ 764{
753 QPopupMenu *m = new QPopupMenu(0); 765 QPopupMenu *m = new QPopupMenu(0);
754 if (m) { 766 if (m) {
755 m->insertItem(QObject::tr("Refresh folder list",contextName),0); 767 m->insertItem(QObject::tr("Refresh folder list",contextName),0);
756 m->insertItem(QObject::tr("Create new folder",contextName),1); 768 m->insertItem(QObject::tr("Create new folder",contextName),1);
757 } 769 }
758 return m; 770 return m;
759} 771}
760 772
761void MBOXviewItem::createFolder() 773void MBOXviewItem::createFolder()
762{ 774{
763 Newmdirdlg ndirdlg(0,0,true); 775 Newmdirdlg ndirdlg(0,0,true);
764 ndirdlg.showMaximized(); 776 ndirdlg.showMaximized();
765 if (ndirdlg.exec()) { 777 if (ndirdlg.exec()) {
766 QString ndir = ndirdlg.Newdir(); 778 QString ndir = ndirdlg.Newdir();
767 if (wrapper->createMbox(ndir)) { 779 if (wrapper->createMbox(ndir)) {
768 refresh(true); 780 refresh(true);
769 } 781 }
770 } 782 }
771} 783}
772 784
773QStringList MBOXviewItem::subFolders() 785QStringList MBOXviewItem::subFolders()
774{ 786{
775 QStringList result; 787 QStringList result;
776 QListViewItem *child = firstChild(); 788 QListViewItem *child = firstChild();
777 while ( child ) { 789 while ( child ) {
778 MBOXfolderItem *tmp = (MBOXfolderItem*)child; 790 MBOXfolderItem *tmp = (MBOXfolderItem*)child;
779 child = child->nextSibling(); 791 child = child->nextSibling();
780 result.append(tmp->getFolder()->getName()); 792 result.append(tmp->getFolder()->getName());
781 } 793 }
782 qDebug("Size of result: %i",result.count()); 794 qDebug("Size of result: %i",result.count());
783 return result; 795 return result;
784} 796}
785 797
786void MBOXviewItem::contextMenuSelected(int which) 798void MBOXviewItem::contextMenuSelected(int which)
787{ 799{
788 switch (which) { 800 switch (which) {
789 case 0: 801 case 0:
790 refresh(true); 802 refresh(true);
791 break; 803 break;
792 case 1: 804 case 1:
793 createFolder(); 805 createFolder();
794 break; 806 break;
795 default: 807 default:
796 break; 808 break;
797 } 809 }
798} 810}
799 811
800MBOXfolderItem::~MBOXfolderItem() 812MBOXfolderItem::~MBOXfolderItem()
801{ 813{
802 delete folder; 814 delete folder;
803} 815}
804 816
805MBOXfolderItem::MBOXfolderItem( Folder *folderInit, MBOXviewItem *parent , QListViewItem*after ) 817MBOXfolderItem::MBOXfolderItem( Folder *folderInit, MBOXviewItem *parent , QListViewItem*after )
806 : AccountViewItem( parent,after ) 818 : AccountViewItem( parent,after )
807{ 819{
808 folder = folderInit; 820 folder = folderInit;
809 mbox = parent; 821 mbox = parent;
810 if (folder->getDisplayName().lower() == "outgoing") { 822 if (folder->getDisplayName().lower() == "outgoing") {
811 setPixmap( 0, PIXMAP_OUTBOXFOLDER ); 823 setPixmap( 0, PIXMAP_OUTBOXFOLDER );
812 } else if (folder->getDisplayName().lower() == "inbox") { 824 } else if (folder->getDisplayName().lower() == "inbox") {
813 setPixmap( 0, PIXMAP_INBOXFOLDER); 825 setPixmap( 0, PIXMAP_INBOXFOLDER);
814 } else { 826 } else {
815 setPixmap( 0, PIXMAP_MBOXFOLDER ); 827 setPixmap( 0, PIXMAP_MBOXFOLDER );
816 } 828 }
817 setText( 0, folder->getDisplayName() ); 829 setText( 0, folder->getDisplayName() );
818} 830}
819 831
820Folder*MBOXfolderItem::getFolder() 832Folder*MBOXfolderItem::getFolder()
821{ 833{
822 return folder; 834 return folder;
823} 835}
824 836
825void MBOXfolderItem::refresh(QList<RecMail>&target) 837void MBOXfolderItem::refresh(QList<RecMail>&target)
826{ 838{
827 if (folder->may_select()) 839 if (folder->may_select())
828 mbox->getWrapper()->listMessages( folder->getName(),target ); 840 mbox->getWrapper()->listMessages( folder->getName(),target );
829} 841}
830 842
831RecBody MBOXfolderItem::fetchBody(const RecMail&aMail) 843RecBody MBOXfolderItem::fetchBody(const RecMail&aMail)
832{ 844{
833 return mbox->getWrapper()->fetchBody(aMail); 845 return mbox->getWrapper()->fetchBody(aMail);
834} 846}
835 847
836void MBOXfolderItem::deleteFolder() 848void MBOXfolderItem::deleteFolder()
837{ 849{
838 int yesno = QMessageBox::warning(0,QObject::tr("Delete folder",contextName), 850 int yesno = QMessageBox::warning(0,QObject::tr("Delete folder",contextName),
839 QObject::tr("<center>Realy delete folder <br><b>%1</b><br>and all if it content?</center>",contextName).arg(folder->getDisplayName()), 851 QObject::tr("<center>Realy delete folder <br><b>%1</b><br>and all if it content?</center>",contextName).arg(folder->getDisplayName()),
840 QObject::tr("Yes",contextName), 852 QObject::tr("Yes",contextName),
841 QObject::tr("No",contextName),QString::null,1,1); 853 QObject::tr("No",contextName),QString::null,1,1);
842 qDebug("Auswahl: %i",yesno); 854 qDebug("Auswahl: %i",yesno);
843 if (yesno == 0) { 855 if (yesno == 0) {
844 if (mbox->getWrapper()->deleteMbox(folder)) { 856 if (mbox->getWrapper()->deleteMbox(folder)) {
845 QListView*v=listView(); 857 QListView*v=listView();
846 MBOXviewItem * box = mbox; 858 MBOXviewItem * box = mbox;
847 /* be carefull - after that this object is destroyd so don't use 859 /* be carefull - after that this object is destroyd so don't use
848 * any member of it after that call!!*/ 860 * any member of it after that call!!*/
849 mbox->refresh(true); 861 mbox->refresh(true);
850 if (v) { 862 if (v) {
851 v->setSelected(box,true); 863 v->setSelected(box,true);
852 } 864 }
853 } 865 }
854 } 866 }
855} 867}
856 868
857QPopupMenu * MBOXfolderItem::getContextMenu() 869QPopupMenu * MBOXfolderItem::getContextMenu()
858{ 870{
859 QPopupMenu *m = new QPopupMenu(0); 871 QPopupMenu *m = new QPopupMenu(0);
860 if (m) { 872 if (m) {
861 m->insertItem(QObject::tr("Delete all mails",contextName),0); 873 m->insertItem(QObject::tr("Delete all mails",contextName),0);
862 m->insertItem(QObject::tr("Delete folder",contextName),1); 874 m->insertItem(QObject::tr("Delete folder",contextName),1);
863 } 875 }
864 return m; 876 return m;
865} 877}
866 878
867void MBOXfolderItem::contextMenuSelected(int which) 879void MBOXfolderItem::contextMenuSelected(int which)
868{ 880{
869 switch(which) { 881 switch(which) {
870 case 0: 882 case 0:
871 deleteAllMail(mbox->getWrapper(),folder); 883 deleteAllMail(mbox->getWrapper(),folder);
872 break; 884 break;
873 case 1: 885 case 1:
874 deleteFolder(); 886 deleteFolder();
875 break; 887 break;
876 default: 888 default:
877 break; 889 break;
878 } 890 }
879} 891}
diff --git a/noncore/net/mail/accountview.h b/noncore/net/mail/accountview.h
index 48f52c7..df916c1 100644
--- a/noncore/net/mail/accountview.h
+++ b/noncore/net/mail/accountview.h
@@ -1,188 +1,189 @@
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 6
7#include <libmailwrapper/settings.h> 7#include <libmailwrapper/settings.h>
8#include <libmailwrapper/mailwrapper.h> 8#include <libmailwrapper/mailwrapper.h>
9#include <libmailwrapper/abstractmail.h> 9#include <libmailwrapper/abstractmail.h>
10 10
11class POP3wrapper; 11class POP3wrapper;
12class RecMail; 12class RecMail;
13class RecBody; 13class RecBody;
14class QPopupMenu; 14class QPopupMenu;
15class Selectstore; 15class Selectstore;
16class AccountView; 16class AccountView;
17 17
18class AccountViewItem : public QListViewItem 18class AccountViewItem : public QListViewItem
19{ 19{
20 20
21public: 21public:
22 AccountViewItem( AccountView *parent ); 22 AccountViewItem( AccountView *parent );
23 AccountViewItem( QListViewItem *parent); 23 AccountViewItem( QListViewItem *parent);
24 AccountViewItem( QListViewItem *parent , QListViewItem*after ); 24 AccountViewItem( QListViewItem *parent , QListViewItem*after );
25 virtual ~AccountViewItem(); 25 virtual ~AccountViewItem();
26 virtual void refresh(QList<RecMail>&)=0; 26 virtual void refresh(QList<RecMail>&)=0;
27 virtual RecBody fetchBody(const RecMail&)=0; 27 virtual RecBody fetchBody(const RecMail&)=0;
28 virtual QPopupMenu * getContextMenu(){return 0;}; 28 virtual QPopupMenu * getContextMenu(){return 0;};
29 virtual void contextMenuSelected(int){} 29 virtual void contextMenuSelected(int){}
30 virtual AccountView*accountView(); 30 virtual AccountView*accountView();
31protected: 31protected:
32 virtual void deleteAllMail(AbstractMail*wrapper,Folder*f); 32 virtual void deleteAllMail(AbstractMail*wrapper,Folder*f);
33 static const QString contextName; 33 static const QString contextName;
34 AccountView*m_Backlink; 34 AccountView*m_Backlink;
35}; 35};
36 36
37class POP3viewItem : public AccountViewItem 37class POP3viewItem : public AccountViewItem
38{ 38{
39 39
40public: 40public:
41 POP3viewItem( POP3account *a, AccountView *parent ); 41 POP3viewItem( POP3account *a, AccountView *parent );
42 virtual ~POP3viewItem(); 42 virtual ~POP3viewItem();
43 virtual void refresh( QList<RecMail> &target ); 43 virtual void refresh( QList<RecMail> &target );
44 virtual RecBody fetchBody( const RecMail &mail ); 44 virtual RecBody fetchBody( const RecMail &mail );
45 AbstractMail *getWrapper(); 45 AbstractMail *getWrapper();
46 virtual QPopupMenu * getContextMenu(); 46 virtual QPopupMenu * getContextMenu();
47 virtual void contextMenuSelected(int); 47 virtual void contextMenuSelected(int);
48 48
49protected: 49protected:
50 POP3account *account; 50 POP3account *account;
51 virtual void refresh();
51 AbstractMail *wrapper; 52 AbstractMail *wrapper;
52 void disconnect(); 53 void disconnect();
53 void setOnOffline(); 54 void setOnOffline();
54}; 55};
55 56
56class POP3folderItem : public AccountViewItem 57class POP3folderItem : public AccountViewItem
57{ 58{
58 59
59public: 60public:
60 POP3folderItem( Folder *folder, POP3viewItem *parent , QListViewItem*after ); 61 POP3folderItem( Folder *folder, POP3viewItem *parent , QListViewItem*after );
61 virtual ~POP3folderItem(); 62 virtual ~POP3folderItem();
62 virtual void refresh(QList<RecMail>&); 63 virtual void refresh(QList<RecMail>&);
63 virtual RecBody fetchBody(const RecMail&); 64 virtual RecBody fetchBody(const RecMail&);
64 virtual QPopupMenu * getContextMenu(); 65 virtual QPopupMenu * getContextMenu();
65 virtual void contextMenuSelected(int); 66 virtual void contextMenuSelected(int);
66 67
67protected: 68protected:
68 void downloadMails(); 69 void downloadMails();
69 Folder *folder; 70 Folder *folder;
70 POP3viewItem *pop3; 71 POP3viewItem *pop3;
71}; 72};
72 73
73class IMAPfolderItem; 74class IMAPfolderItem;
74 75
75class IMAPviewItem : public AccountViewItem 76class IMAPviewItem : public AccountViewItem
76{ 77{
77 friend class IMAPfolderItem; 78 friend class IMAPfolderItem;
78public: 79public:
79 IMAPviewItem( IMAPaccount *a, AccountView *parent ); 80 IMAPviewItem( IMAPaccount *a, AccountView *parent );
80 virtual ~IMAPviewItem(); 81 virtual ~IMAPviewItem();
81 virtual void refresh(QList<RecMail>&); 82 virtual void refresh(QList<RecMail>&);
82 virtual RecBody fetchBody(const RecMail&); 83 virtual RecBody fetchBody(const RecMail&);
83 AbstractMail *getWrapper(); 84 AbstractMail *getWrapper();
84 virtual QPopupMenu * getContextMenu(); 85 virtual QPopupMenu * getContextMenu();
85 virtual void contextMenuSelected(int); 86 virtual void contextMenuSelected(int);
86 const QStringList&subFolders(); 87 const QStringList&subFolders();
87 virtual void refreshFolders(bool force=false); 88 virtual void refreshFolders(bool force=false);
88 bool offline(); 89 bool offline();
89 90
90protected: 91protected:
91 IMAPfolderItem*findSubItem(const QString&path,IMAPfolderItem*start=0); 92 IMAPfolderItem*findSubItem(const QString&path,IMAPfolderItem*start=0);
92 virtual void createNewFolder(); 93 virtual void createNewFolder();
93 virtual void removeChilds(); 94 virtual void removeChilds();
94 IMAPaccount *account; 95 IMAPaccount *account;
95 AbstractMail *wrapper; 96 AbstractMail *wrapper;
96 QStringList currentFolders; 97 QStringList currentFolders;
97}; 98};
98 99
99class IMAPfolderItem : public AccountViewItem 100class IMAPfolderItem : public AccountViewItem
100{ 101{
101 102
102public: 103public:
103 IMAPfolderItem( Folder *folder, IMAPviewItem *parent , QListViewItem*after ); 104 IMAPfolderItem( Folder *folder, IMAPviewItem *parent , QListViewItem*after );
104 IMAPfolderItem( Folder *folder, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master ); 105 IMAPfolderItem( Folder *folder, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master );
105 virtual ~IMAPfolderItem(); 106 virtual ~IMAPfolderItem();
106 virtual void refresh(QList<RecMail>&); 107 virtual void refresh(QList<RecMail>&);
107 virtual RecBody fetchBody(const RecMail&); 108 virtual RecBody fetchBody(const RecMail&);
108 bool matchName(const QString&name)const; 109 bool matchName(const QString&name)const;
109 virtual QPopupMenu * getContextMenu(); 110 virtual QPopupMenu * getContextMenu();
110 virtual void contextMenuSelected(int); 111 virtual void contextMenuSelected(int);
111 virtual const QString& Delemiter()const; 112 virtual const QString& Delemiter()const;
112protected: 113protected:
113 virtual void createNewFolder(); 114 virtual void createNewFolder();
114 virtual void deleteFolder(); 115 virtual void deleteFolder();
115 virtual void downloadMails(); 116 virtual void downloadMails();
116 Folder *folder; 117 Folder *folder;
117 IMAPviewItem *imap; 118 IMAPviewItem *imap;
118}; 119};
119 120
120class MBOXviewItem : public AccountViewItem 121class MBOXviewItem : public AccountViewItem
121{ 122{
122 friend class MBOXfolderItem; 123 friend class MBOXfolderItem;
123 124
124public: 125public:
125 MBOXviewItem( const QString&aMboxPath, AccountView *parent ); 126 MBOXviewItem( const QString&aMboxPath, AccountView *parent );
126 virtual ~MBOXviewItem(); 127 virtual ~MBOXviewItem();
127 virtual void refresh( QList<RecMail> &target ); 128 virtual void refresh( QList<RecMail> &target );
128 virtual RecBody fetchBody( const RecMail &mail ); 129 virtual RecBody fetchBody( const RecMail &mail );
129 AbstractMail *getWrapper(); 130 AbstractMail *getWrapper();
130 virtual QPopupMenu * getContextMenu(); 131 virtual QPopupMenu * getContextMenu();
131 virtual void contextMenuSelected(int); 132 virtual void contextMenuSelected(int);
132 QStringList subFolders(); 133 QStringList subFolders();
133 virtual void refresh(bool force=false); 134 virtual void refresh(bool force=false);
134 135
135protected: 136protected:
136 virtual void createFolder(); 137 virtual void createFolder();
137 QString m_Path; 138 QString m_Path;
138 AbstractMail *wrapper; 139 AbstractMail *wrapper;
139 140
140}; 141};
141 142
142class MBOXfolderItem : public AccountViewItem 143class MBOXfolderItem : public AccountViewItem
143{ 144{
144 145
145public: 146public:
146 MBOXfolderItem( Folder *folder, MBOXviewItem *parent , QListViewItem*after ); 147 MBOXfolderItem( Folder *folder, MBOXviewItem *parent , QListViewItem*after );
147 virtual ~MBOXfolderItem(); 148 virtual ~MBOXfolderItem();
148 virtual void refresh(QList<RecMail>&); 149 virtual void refresh(QList<RecMail>&);
149 virtual RecBody fetchBody(const RecMail&); 150 virtual RecBody fetchBody(const RecMail&);
150 virtual QPopupMenu * getContextMenu(); 151 virtual QPopupMenu * getContextMenu();
151 virtual void contextMenuSelected(int); 152 virtual void contextMenuSelected(int);
152 virtual Folder*getFolder(); 153 virtual Folder*getFolder();
153 154
154protected: 155protected:
155 virtual void deleteFolder(); 156 virtual void deleteFolder();
156 Folder *folder; 157 Folder *folder;
157 MBOXviewItem *mbox; 158 MBOXviewItem *mbox;
158}; 159};
159 160
160class AccountView : public QListView 161class AccountView : public QListView
161{ 162{
162 Q_OBJECT 163 Q_OBJECT
163 164
164public: 165public:
165 AccountView( QWidget *parent = 0, const char *name = 0, WFlags flags = 0 ); 166 AccountView( QWidget *parent = 0, const char *name = 0, WFlags flags = 0 );
166 virtual ~AccountView(); 167 virtual ~AccountView();
167 virtual void populate( QList<Account> list ); 168 virtual void populate( QList<Account> list );
168 virtual RecBody fetchBody(const RecMail&aMail); 169 virtual RecBody fetchBody(const RecMail&aMail);
169 virtual void downloadMails(Folder*fromFolder,AbstractMail*fromWrapper); 170 virtual void downloadMails(Folder*fromFolder,AbstractMail*fromWrapper);
170 171
171public slots: 172public slots:
172 virtual void refreshAll(); 173 virtual void refreshAll();
173 virtual void refresh(QListViewItem *item); 174 virtual void refresh(QListViewItem *item);
174 virtual void refreshCurrent(); 175 virtual void refreshCurrent();
175 virtual void slotHold(int, QListViewItem *,const QPoint&,int); 176 virtual void slotHold(int, QListViewItem *,const QPoint&,int);
176 virtual void slotContextMenu(int id); 177 virtual void slotContextMenu(int id);
177 void setupFolderselect(Selectstore*sels); 178 void setupFolderselect(Selectstore*sels);
178 179
179signals: 180signals:
180 void refreshMailview(QList<RecMail>*); 181 void refreshMailview(QList<RecMail>*);
181 182
182protected: 183protected:
183 QListViewItem* m_currentItem; 184 QListViewItem* m_currentItem;
184 QValueList<IMAPviewItem*> imapAccounts; 185 QValueList<IMAPviewItem*> imapAccounts;
185 QValueList<MBOXviewItem*> mboxAccounts; 186 QValueList<MBOXviewItem*> mboxAccounts;
186}; 187};
187 188
188#endif 189#endif
diff --git a/noncore/net/mail/defines.h b/noncore/net/mail/defines.h
index ebe8e08..d840f09 100644
--- a/noncore/net/mail/defines.h
+++ b/noncore/net/mail/defines.h
@@ -1,54 +1,57 @@
1#ifndef DEFINE_CONSTANTS_H 1#ifndef DEFINE_CONSTANTS_H
2#define DEFINE_CONSTANTS_H 2#define DEFINE_CONSTANTS_H
3 3
4#include <qpe/resource.h> 4#include <qpe/resource.h>
5 5
6#define USER_AGENT "OpieMail v0.3" 6#define USER_AGENT "OpieMail v0.3"
7 7
8#define PIC_COMPOSEMAIL "mail/composemail" 8#define PIC_COMPOSEMAIL "mail/composemail"
9#define PIC_SENDQUEUED "mail/sendqueued" 9#define PIC_SENDQUEUED "mail/sendqueued"
10#define PIC_SHOWFOLDERS "mail/showfolders" 10#define PIC_SHOWFOLDERS "mail/showfolders"
11#define PIC_SYNC "mail/sync" 11#define PIC_SYNC "mail/sync"
12#define PIC_IMAPFOLDER "mail/imapfolder" 12#define PIC_IMAPFOLDER "mail/imapfolder"
13#define PIC_MBOXFOLDER "mail/mboxfolder" 13#define PIC_MBOXFOLDER "mail/mboxfolder"
14#define PIC_POP3FOLDER "mail/pop3folder" 14#define PIC_POP3FOLDER "mail/pop3folder"
15#define PIC_INBOXFOLDER "mail/inbox" 15#define PIC_INBOXFOLDER "mail/inbox"
16#define PIC_OUTBOXFOLDER "mail/outbox" 16#define PIC_OUTBOXFOLDER "mail/outbox"
17#define PIC_LOCALFOLDER "mail/localfolder" 17#define PIC_LOCALFOLDER "mail/localfolder"
18 18
19#define PIC_OFFLINE "mail/notconnected"
20
19#define ICON_COMPOSEMAIL QIconSet( Resource::loadPixmap( PIC_COMPOSEMAIL ) ) 21#define ICON_COMPOSEMAIL QIconSet( Resource::loadPixmap( PIC_COMPOSEMAIL ) )
20#define ICON_SENDQUEUED QIconSet( Resource::loadPixmap( PIC_SENDQUEUED ) ) 22#define ICON_SENDQUEUED QIconSet( Resource::loadPixmap( PIC_SENDQUEUED ) )
21#define ICON_SHOWFOLDERS QIconSet( Resource::loadPixmap( PIC_SHOWFOLDERS ) ) 23#define ICON_SHOWFOLDERS QIconSet( Resource::loadPixmap( PIC_SHOWFOLDERS ) )
22#define ICON_SEARCHMAILS QIconSet( Resource::loadPixmap( PIC_SEARCHMAILS ) ) 24#define ICON_SEARCHMAILS QIconSet( Resource::loadPixmap( PIC_SEARCHMAILS ) )
23#define ICON_EDITSETTINGS QIconSet( Resource::loadPixmap( PIC_EDITSETTINGS ) ) 25#define ICON_EDITSETTINGS QIconSet( Resource::loadPixmap( PIC_EDITSETTINGS ) )
24#define ICON_EDITACCOUNTS QIconSet( Resource::loadPixmap( PIC_EDITACCOUNTS ) ) 26#define ICON_EDITACCOUNTS QIconSet( Resource::loadPixmap( PIC_EDITACCOUNTS ) )
25#define ICON_SYNC QIconSet( Resource::loadPixmap( PIC_SYNC ) ) 27#define ICON_SYNC QIconSet( Resource::loadPixmap( PIC_SYNC ) )
26 28
27#define PIXMAP_IMAPFOLDER QPixmap( Resource::loadPixmap( PIC_IMAPFOLDER ) ) 29#define PIXMAP_IMAPFOLDER QPixmap( Resource::loadPixmap( PIC_IMAPFOLDER ) )
28#define PIXMAP_POP3FOLDER QPixmap( Resource::loadPixmap( PIC_POP3FOLDER ) ) 30#define PIXMAP_POP3FOLDER QPixmap( Resource::loadPixmap( PIC_POP3FOLDER ) )
29#define PIXMAP_INBOXFOLDER QPixmap( Resource::loadPixmap( PIC_INBOXFOLDER) ) 31#define PIXMAP_INBOXFOLDER QPixmap( Resource::loadPixmap( PIC_INBOXFOLDER) )
30#define PIXMAP_MBOXFOLDER QPixmap( Resource::loadPixmap( PIC_MBOXFOLDER ) ) 32#define PIXMAP_MBOXFOLDER QPixmap( Resource::loadPixmap( PIC_MBOXFOLDER ) )
31#define PIXMAP_OUTBOXFOLDER QPixmap( Resource::loadPixmap( PIC_OUTBOXFOLDER) ) 33#define PIXMAP_OUTBOXFOLDER QPixmap( Resource::loadPixmap( PIC_OUTBOXFOLDER) )
32#define PIXMAP_LOCALFOLDER QPixmap( Resource::loadPixmap( PIC_LOCALFOLDER) ) 34#define PIXMAP_LOCALFOLDER QPixmap( Resource::loadPixmap( PIC_LOCALFOLDER) )
35#define PIXMAP_OFFLINE QPixmap( Resource::loadPixmap( PIC_OFFLINE) )
33 36
34#define IMAP_PORT "143" 37#define IMAP_PORT "143"
35#define IMAP_SSL_PORT "993" 38#define IMAP_SSL_PORT "993"
36#define SMTP_PORT "25" 39#define SMTP_PORT "25"
37#define SMTP_SSL_PORT "465" 40#define SMTP_SSL_PORT "465"
38#define POP3_PORT "110" 41#define POP3_PORT "110"
39#define POP3_SSL_PORT "995" 42#define POP3_SSL_PORT "995"
40#define NNTP_PORT "119" 43#define NNTP_PORT "119"
41#define NNTP_SSL_PORT "563" 44#define NNTP_SSL_PORT "563"
42 45
43/* used for decoding imapfoldername */ 46/* used for decoding imapfoldername */
44#define UNDEFINED 64 47#define UNDEFINED 64
45#define MAXLINE 76 48#define MAXLINE 76
46#define UTF16MASK 0x03FFUL 49#define UTF16MASK 0x03FFUL
47#define UTF16SHIFT 10 50#define UTF16SHIFT 10
48#define UTF16BASE 0x10000UL 51#define UTF16BASE 0x10000UL
49#define UTF16HIGHSTART 0xD800UL 52#define UTF16HIGHSTART 0xD800UL
50#define UTF16HIGHEND 0xDBFFUL 53#define UTF16HIGHEND 0xDBFFUL
51#define UTF16LOSTART 0xDC00UL 54#define UTF16LOSTART 0xDC00UL
52#define UTF16LOEND 0xDFFFUL 55#define UTF16LOEND 0xDFFFUL
53 56
54#endif 57#endif
diff --git a/noncore/net/mail/libmailwrapper/abstractmail.cpp b/noncore/net/mail/libmailwrapper/abstractmail.cpp
index 3dd2fce..4b4c728 100644
--- a/noncore/net/mail/libmailwrapper/abstractmail.cpp
+++ b/noncore/net/mail/libmailwrapper/abstractmail.cpp
@@ -1,106 +1,125 @@
1#include "abstractmail.h" 1#include "abstractmail.h"
2#include "imapwrapper.h" 2#include "imapwrapper.h"
3#include "pop3wrapper.h" 3#include "pop3wrapper.h"
4#include "mboxwrapper.h" 4#include "mboxwrapper.h"
5#include "mailtypes.h" 5#include "mailtypes.h"
6 6
7#include <qstring.h> 7#include <qstring.h>
8#include <qfile.h> 8#include <qfile.h>
9#include <qtextstream.h> 9#include <qtextstream.h>
10#include <stdlib.h> 10#include <stdlib.h>
11#include <libetpan/mailmime_content.h> 11#include <libetpan/mailmime_content.h>
12#include <libetpan/mailmime.h> 12#include <libetpan/mailmime.h>
13 13
14AbstractMail* AbstractMail::getWrapper(IMAPaccount *a) 14AbstractMail* AbstractMail::getWrapper(IMAPaccount *a)
15{ 15{
16 return new IMAPwrapper(a); 16 return new IMAPwrapper(a);
17} 17}
18 18
19AbstractMail* AbstractMail::getWrapper(POP3account *a) 19AbstractMail* AbstractMail::getWrapper(POP3account *a)
20{ 20{
21 return new POP3wrapper(a); 21 return new POP3wrapper(a);
22} 22}
23 23
24AbstractMail* AbstractMail::getWrapper(const QString&a,const QString&name) 24AbstractMail* AbstractMail::getWrapper(const QString&a,const QString&name)
25{ 25{
26 return new MBOXwrapper(a,name); 26 return new MBOXwrapper(a,name);
27} 27}
28 28
29encodedString* AbstractMail::decode_String(const encodedString*text,const QString&enc) 29encodedString* AbstractMail::decode_String(const encodedString*text,const QString&enc)
30{ 30{
31 qDebug("Decode string start"); 31 qDebug("Decode string start");
32 char*result_text; 32 char*result_text;
33 size_t index = 0; 33 size_t index = 0;
34 /* reset for recursive use! */ 34 /* reset for recursive use! */
35 size_t target_length = 0; 35 size_t target_length = 0;
36 result_text = 0; 36 result_text = 0;
37 int mimetype = MAILMIME_MECHANISM_7BIT; 37 int mimetype = MAILMIME_MECHANISM_7BIT;
38 if (enc.lower()=="quoted-printable") { 38 if (enc.lower()=="quoted-printable") {
39 mimetype = MAILMIME_MECHANISM_QUOTED_PRINTABLE; 39 mimetype = MAILMIME_MECHANISM_QUOTED_PRINTABLE;
40 } else if (enc.lower()=="base64") { 40 } else if (enc.lower()=="base64") {
41 mimetype = MAILMIME_MECHANISM_BASE64; 41 mimetype = MAILMIME_MECHANISM_BASE64;
42 } else if (enc.lower()=="8bit") { 42 } else if (enc.lower()=="8bit") {
43 mimetype = MAILMIME_MECHANISM_8BIT; 43 mimetype = MAILMIME_MECHANISM_8BIT;
44 } else if (enc.lower()=="binary") { 44 } else if (enc.lower()=="binary") {
45 mimetype = MAILMIME_MECHANISM_BINARY; 45 mimetype = MAILMIME_MECHANISM_BINARY;
46 } 46 }
47 47
48 int err = mailmime_part_parse(text->Content(),text->Length(),&index,mimetype, 48 int err = mailmime_part_parse(text->Content(),text->Length(),&index,mimetype,
49 &result_text,&target_length); 49 &result_text,&target_length);
50 50
51 encodedString* result = new encodedString(); 51 encodedString* result = new encodedString();
52 if (err == MAILIMF_NO_ERROR) { 52 if (err == MAILIMF_NO_ERROR) {
53 result->setContent(result_text,target_length); 53 result->setContent(result_text,target_length);
54 } 54 }
55 qDebug("Decode string finished"); 55 qDebug("Decode string finished");
56 return result; 56 return result;
57} 57}
58 58
59QString AbstractMail::convert_String(const char*text) 59QString AbstractMail::convert_String(const char*text)
60{ 60{
61 size_t index = 0; 61 size_t index = 0;
62 char*res = 0; 62 char*res = 0;
63 63
64 /* attention - doesn't work with arm systems! */ 64 /* attention - doesn't work with arm systems! */
65 int err = mailmime_encoded_phrase_parse("iso-8859-1", 65 int err = mailmime_encoded_phrase_parse("iso-8859-1",
66 text, strlen(text),&index, "iso-8859-1",&res); 66 text, strlen(text),&index, "iso-8859-1",&res);
67 if (err != MAILIMF_NO_ERROR) { 67 if (err != MAILIMF_NO_ERROR) {
68 if (res) free(res); 68 if (res) free(res);
69 return QString(text); 69 return QString(text);
70 } 70 }
71 if (res) { 71 if (res) {
72 QString result(res); 72 QString result(res);
73 free(res); 73 free(res);
74 return result; 74 return result;
75 } 75 }
76 return QString(text); 76 return QString(text);
77} 77}
78 78
79/* cp & paste from launcher */ 79/* cp & paste from launcher */
80QString AbstractMail::gen_attachment_id() 80QString AbstractMail::gen_attachment_id()
81{ 81{
82 QFile file( "/proc/sys/kernel/random/uuid" ); 82 QFile file( "/proc/sys/kernel/random/uuid" );
83 if (!file.open(IO_ReadOnly ) ) 83 if (!file.open(IO_ReadOnly ) )
84 return QString::null; 84 return QString::null;
85 85
86 QTextStream stream(&file); 86 QTextStream stream(&file);
87 87
88 return "{" + stream.read().stripWhiteSpace() + "}"; 88 return "{" + stream.read().stripWhiteSpace() + "}";
89} 89}
90 90
91int AbstractMail::createMbox(const QString&,const Folder*,const QString& delemiter,bool) 91int AbstractMail::createMbox(const QString&,const Folder*,const QString& delemiter,bool)
92{ 92{
93 return 0; 93 return 0;
94} 94}
95 95
96QString AbstractMail::defaultLocalfolder() 96QString AbstractMail::defaultLocalfolder()
97{ 97{
98 QString f = getenv( "HOME" ); 98 QString f = getenv( "HOME" );
99 f += "/Applications/opiemail/localmail"; 99 f += "/Applications/opiemail/localmail";
100 return f; 100 return f;
101} 101}
102 102
103/* temporary - will be removed when implemented in all classes */ 103/* temporary - will be removed when implemented in all classes */
104void AbstractMail::deleteMails(const QString &,QList<RecMail> &) 104void AbstractMail::deleteMails(const QString &,QList<RecMail> &)
105{ 105{
106} 106}
107
108void AbstractMail::mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
109{
110 QList<RecMail> t;
111 listMessages(fromFolder->getName(),t);
112 encodedString*st = 0;
113 while (t.count()>0) {
114 RecMail*r = t.at(0);
115 st = fetchRawBody(*r);
116 if (st) {
117 targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder);
118 delete st;
119 }
120 t.removeFirst();
121 }
122 if (moveit) {
123 deleteAllMail(fromFolder);
124 }
125}
diff --git a/noncore/net/mail/libmailwrapper/abstractmail.h b/noncore/net/mail/libmailwrapper/abstractmail.h
index 15d83cb..8debaae 100644
--- a/noncore/net/mail/libmailwrapper/abstractmail.h
+++ b/noncore/net/mail/libmailwrapper/abstractmail.h
@@ -1,62 +1,64 @@
1#ifndef __abstract_mail_ 1#ifndef __abstract_mail_
2#define __abstract_mail_ 2#define __abstract_mail_
3 3
4#include <qobject.h> 4#include <qobject.h>
5#include "settings.h" 5#include "settings.h"
6 6
7class RecMail; 7class RecMail;
8class RecBody; 8class RecBody;
9class RecPart; 9class RecPart;
10class IMAPwrapper; 10class IMAPwrapper;
11class POP3wrapper; 11class POP3wrapper;
12class Folder; 12class Folder;
13class encodedString; 13class encodedString;
14struct folderStat; 14struct folderStat;
15 15
16class AbstractMail:public QObject 16class AbstractMail:public QObject
17{ 17{
18 Q_OBJECT 18 Q_OBJECT
19public: 19public:
20 AbstractMail(){}; 20 AbstractMail(){};
21 virtual ~AbstractMail(){} 21 virtual ~AbstractMail(){}
22 virtual QList<Folder>* listFolders()=0; 22 virtual QList<Folder>* listFolders()=0;
23 virtual void listMessages(const QString & mailbox,QList<RecMail>&target )=0; 23 virtual void listMessages(const QString & mailbox,QList<RecMail>&target )=0;
24 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX")=0; 24 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX")=0;
25 virtual RecBody fetchBody(const RecMail&mail)=0; 25 virtual RecBody fetchBody(const RecMail&mail)=0;
26 virtual QString fetchTextPart(const RecMail&mail,const RecPart&part)=0; 26 virtual QString fetchTextPart(const RecMail&mail,const RecPart&part)=0;
27 virtual encodedString* fetchDecodedPart(const RecMail&mail,const RecPart&part)=0; 27 virtual encodedString* fetchDecodedPart(const RecMail&mail,const RecPart&part)=0;
28 virtual encodedString* fetchRawPart(const RecMail&mail,const RecPart&part)=0; 28 virtual encodedString* fetchRawPart(const RecMail&mail,const RecPart&part)=0;
29 virtual encodedString* fetchRawBody(const RecMail&mail)=0; 29 virtual encodedString* fetchRawBody(const RecMail&mail)=0;
30 30
31 virtual void deleteMail(const RecMail&mail)=0; 31 virtual void deleteMail(const RecMail&mail)=0;
32 virtual void answeredMail(const RecMail&mail)=0; 32 virtual void answeredMail(const RecMail&mail)=0;
33 virtual int deleteAllMail(const Folder*)=0; 33 virtual int deleteAllMail(const Folder*)=0;
34 virtual void deleteMails(const QString & FolderName,QList<RecMail> &target); 34 virtual void deleteMails(const QString & FolderName,QList<RecMail> &target);
35 virtual int deleteMbox(const Folder*)=0; 35 virtual int deleteMbox(const Folder*)=0;
36 virtual void storeMessage(const char*msg,size_t length, const QString&folder)=0; 36 virtual void storeMessage(const char*msg,size_t length, const QString&folder)=0;
37 37
38 virtual void mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit);
39
38 virtual void cleanMimeCache(){}; 40 virtual void cleanMimeCache(){};
39 /* mail box methods */ 41 /* mail box methods */
40 /* parameter is the box to create. 42 /* parameter is the box to create.
41 * if the implementing subclass has prefixes, 43 * if the implementing subclass has prefixes,
42 * them has to be appended automatic. 44 * them has to be appended automatic.
43 */ 45 */
44 virtual int createMbox(const QString&,const Folder*parentfolder=0,const QString& delemiter="/",bool getsubfolder=false); 46 virtual int createMbox(const QString&,const Folder*parentfolder=0,const QString& delemiter="/",bool getsubfolder=false);
45 virtual void logout()=0; 47 virtual void logout()=0;
46 48
47 static AbstractMail* getWrapper(IMAPaccount *a); 49 static AbstractMail* getWrapper(IMAPaccount *a);
48 static AbstractMail* getWrapper(POP3account *a); 50 static AbstractMail* getWrapper(POP3account *a);
49 /* mbox only! */ 51 /* mbox only! */
50 static AbstractMail* getWrapper(const QString&a,const QString&name="Local Folders"); 52 static AbstractMail* getWrapper(const QString&a,const QString&name="Local Folders");
51 53
52 static QString defaultLocalfolder(); 54 static QString defaultLocalfolder();
53 55
54 virtual const QString&getType()const=0; 56 virtual const QString&getType()const=0;
55 virtual const QString&getName()const=0; 57 virtual const QString&getName()const=0;
56 58
57protected: 59protected:
58 static encodedString*decode_String(const encodedString*text,const QString&enc); 60 static encodedString*decode_String(const encodedString*text,const QString&enc);
59 static QString convert_String(const char*text); 61 static QString convert_String(const char*text);
60 static QString gen_attachment_id(); 62 static QString gen_attachment_id();
61}; 63};
62#endif 64#endif
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
index bb74de9..23c678b 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
@@ -1,1020 +1,1051 @@
1#include <stdlib.h> 1#include <stdlib.h>
2#include <libetpan/libetpan.h> 2#include <libetpan/libetpan.h>
3#include <qpe/global.h> 3#include <qpe/global.h>
4 4
5#include "imapwrapper.h" 5#include "imapwrapper.h"
6#include "mailtypes.h" 6#include "mailtypes.h"
7#include "logindialog.h" 7#include "logindialog.h"
8 8
9IMAPwrapper::IMAPwrapper( IMAPaccount *a ) 9IMAPwrapper::IMAPwrapper( IMAPaccount *a )
10 : AbstractMail() 10 : AbstractMail()
11{ 11{
12 account = a; 12 account = a;
13 m_imap = 0; 13 m_imap = 0;
14} 14}
15 15
16IMAPwrapper::~IMAPwrapper() 16IMAPwrapper::~IMAPwrapper()
17{ 17{
18 logout(); 18 logout();
19} 19}
20 20
21void IMAPwrapper::imap_progress( size_t current, size_t maximum ) 21void IMAPwrapper::imap_progress( size_t current, size_t maximum )
22{ 22{
23 qDebug( "IMAP: %i of %i", current, maximum ); 23 qDebug( "IMAP: %i of %i", current, maximum );
24} 24}
25 25
26void IMAPwrapper::login() 26void IMAPwrapper::login()
27{ 27{
28 const char *server, *user, *pass; 28 const char *server, *user, *pass;
29 uint16_t port; 29 uint16_t port;
30 int err = MAILIMAP_NO_ERROR; 30 int err = MAILIMAP_NO_ERROR;
31 31
32 if (account->getOffline()) return; 32 if (account->getOffline()) return;
33 /* we are connected this moment */ 33 /* we are connected this moment */
34 /* TODO: setup a timer holding the line or if connection closed - delete the value */ 34 /* TODO: setup a timer holding the line or if connection closed - delete the value */
35 if (m_imap) { 35 if (m_imap) {
36 err = mailimap_noop(m_imap); 36 err = mailimap_noop(m_imap);
37 if (err!=MAILIMAP_NO_ERROR) { 37 if (err!=MAILIMAP_NO_ERROR) {
38 logout(); 38 logout();
39 } else { 39 } else {
40 mailstream_flush(m_imap->imap_stream); 40 mailstream_flush(m_imap->imap_stream);
41 return; 41 return;
42 } 42 }
43 } 43 }
44 server = account->getServer().latin1(); 44 server = account->getServer().latin1();
45 port = account->getPort().toUInt(); 45 port = account->getPort().toUInt();
46 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) { 46 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) {
47 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true ); 47 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true );
48 login.show(); 48 login.show();
49 if ( QDialog::Accepted == login.exec() ) { 49 if ( QDialog::Accepted == login.exec() ) {
50 // ok 50 // ok
51 user = login.getUser().latin1(); 51 user = login.getUser().latin1();
52 pass = login.getPassword().latin1(); 52 pass = login.getPassword().latin1();
53 } else { 53 } else {
54 // cancel 54 // cancel
55 qDebug( "IMAP: Login canceled" ); 55 qDebug( "IMAP: Login canceled" );
56 return; 56 return;
57 } 57 }
58 } else { 58 } else {
59 user = account->getUser().latin1(); 59 user = account->getUser().latin1();
60 pass = account->getPassword().latin1(); 60 pass = account->getPassword().latin1();
61 } 61 }
62 62
63 m_imap = mailimap_new( 20, &imap_progress ); 63 m_imap = mailimap_new( 20, &imap_progress );
64 64
65 /* connect */ 65 /* connect */
66 if (account->getSSL()) { 66 if (account->getSSL()) {
67 err = mailimap_ssl_connect( m_imap, (char*)server, port ); 67 err = mailimap_ssl_connect( m_imap, (char*)server, port );
68 } else { 68 } else {
69 err = mailimap_socket_connect( m_imap, (char*)server, port ); 69 err = mailimap_socket_connect( m_imap, (char*)server, port );
70 } 70 }
71 71
72 if ( err != MAILIMAP_NO_ERROR && 72 if ( err != MAILIMAP_NO_ERROR &&
73 err != MAILIMAP_NO_ERROR_AUTHENTICATED && 73 err != MAILIMAP_NO_ERROR_AUTHENTICATED &&
74 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { 74 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) {
75 QString failure = ""; 75 QString failure = "";
76 if (err == MAILIMAP_ERROR_CONNECTION_REFUSED) { 76 if (err == MAILIMAP_ERROR_CONNECTION_REFUSED) {
77 failure="Connection refused"; 77 failure="Connection refused";
78 } else { 78 } else {
79 failure="Unknown failure"; 79 failure="Unknown failure";
80 } 80 }
81 Global::statusMessage(tr("error connecting imap server: %1").arg(failure)); 81 Global::statusMessage(tr("error connecting imap server: %1").arg(failure));
82 mailimap_free( m_imap ); 82 mailimap_free( m_imap );
83 m_imap = 0; 83 m_imap = 0;
84 return; 84 return;
85 } 85 }
86 86
87 /* login */ 87 /* login */
88 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass ); 88 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass );
89 if ( err != MAILIMAP_NO_ERROR ) { 89 if ( err != MAILIMAP_NO_ERROR ) {
90 Global::statusMessage(tr("error logging in imap server: %1").arg(m_imap->imap_response)); 90 Global::statusMessage(tr("error logging in imap server: %1").arg(m_imap->imap_response));
91 err = mailimap_close( m_imap ); 91 err = mailimap_close( m_imap );
92 mailimap_free( m_imap ); 92 mailimap_free( m_imap );
93 m_imap = 0; 93 m_imap = 0;
94 } 94 }
95} 95}
96 96
97void IMAPwrapper::logout() 97void IMAPwrapper::logout()
98{ 98{
99 int err = MAILIMAP_NO_ERROR; 99 int err = MAILIMAP_NO_ERROR;
100 if (!m_imap) return; 100 if (!m_imap) return;
101 err = mailimap_logout( m_imap ); 101 err = mailimap_logout( m_imap );
102 err = mailimap_close( m_imap ); 102 err = mailimap_close( m_imap );
103 mailimap_free( m_imap ); 103 mailimap_free( m_imap );
104 m_imap = 0; 104 m_imap = 0;
105} 105}
106 106
107void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target ) 107void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
108{ 108{
109 const char *mb = 0; 109 const char *mb = 0;
110 int err = MAILIMAP_NO_ERROR; 110 int err = MAILIMAP_NO_ERROR;
111 clist *result = 0; 111 clist *result = 0;
112 clistcell *current; 112 clistcell *current;
113// mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate,*fetchAttSize; 113// mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate,*fetchAttSize;
114 mailimap_fetch_type *fetchType = 0; 114 mailimap_fetch_type *fetchType = 0;
115 mailimap_set *set = 0; 115 mailimap_set *set = 0;
116 116
117 mb = mailbox.latin1(); 117 mb = mailbox.latin1();
118 login(); 118 login();
119 if (!m_imap) { 119 if (!m_imap) {
120 return; 120 return;
121 } 121 }
122 /* select mailbox READONLY for operations */ 122 /* select mailbox READONLY for operations */
123 err = mailimap_examine( m_imap, (char*)mb); 123 err = mailimap_examine( m_imap, (char*)mb);
124 if ( err != MAILIMAP_NO_ERROR ) { 124 if ( err != MAILIMAP_NO_ERROR ) {
125 Global::statusMessage(tr("error selecting mailbox: %1").arg(m_imap->imap_response)); 125 Global::statusMessage(tr("error selecting mailbox: %1").arg(m_imap->imap_response));
126 return; 126 return;
127 } 127 }
128 128
129 int last = m_imap->imap_selection_info->sel_exists; 129 int last = m_imap->imap_selection_info->sel_exists;
130 130
131 if (last == 0) { 131 if (last == 0) {
132 Global::statusMessage(tr("Mailbox has no mails")); 132 Global::statusMessage(tr("Mailbox has no mails"));
133 return; 133 return;
134 } else { 134 } else {
135 Global::statusMessage(tr("Mailbox has %1 mails").arg(last)); 135 Global::statusMessage(tr("Mailbox has %1 mails").arg(last));
136 } 136 }
137 137
138 /* the range has to start at 1!!! not with 0!!!! */ 138 /* the range has to start at 1!!! not with 0!!!! */
139 set = mailimap_set_new_interval( 1, last ); 139 set = mailimap_set_new_interval( 1, last );
140 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 140 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
141 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope()); 141 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope());
142 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags()); 142 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags());
143 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate()); 143 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate());
144 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size()); 144 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size());
145 145
146 err = mailimap_fetch( m_imap, set, fetchType, &result ); 146 err = mailimap_fetch( m_imap, set, fetchType, &result );
147 mailimap_set_free( set ); 147 mailimap_set_free( set );
148 mailimap_fetch_type_free( fetchType ); 148 mailimap_fetch_type_free( fetchType );
149 149
150 QString date,subject,from; 150 QString date,subject,from;
151 151
152 if ( err == MAILIMAP_NO_ERROR ) { 152 if ( err == MAILIMAP_NO_ERROR ) {
153 mailimap_msg_att * msg_att; 153 mailimap_msg_att * msg_att;
154 int i = 0; 154 int i = 0;
155 for (current = clist_begin(result); current != 0; current=clist_next(current)) { 155 for (current = clist_begin(result); current != 0; current=clist_next(current)) {
156 ++i; 156 ++i;
157 msg_att = (mailimap_msg_att*)current->data; 157 msg_att = (mailimap_msg_att*)current->data;
158 RecMail*m = parse_list_result(msg_att); 158 RecMail*m = parse_list_result(msg_att);
159 if (m) { 159 if (m) {
160 m->setNumber(i); 160 m->setNumber(i);
161 m->setMbox(mailbox); 161 m->setMbox(mailbox);
162 m->setWrapper(this); 162 m->setWrapper(this);
163 target.append(m); 163 target.append(m);
164 } 164 }
165 } 165 }
166 } else { 166 } else {
167 Global::statusMessage(tr("Error fetching headers: %1").arg(m_imap->imap_response)); 167 Global::statusMessage(tr("Error fetching headers: %1").arg(m_imap->imap_response));
168 } 168 }
169 if (result) mailimap_fetch_list_free(result); 169 if (result) mailimap_fetch_list_free(result);
170} 170}
171 171
172QList<Folder>* IMAPwrapper::listFolders() 172QList<Folder>* IMAPwrapper::listFolders()
173{ 173{
174 const char *path, *mask; 174 const char *path, *mask;
175 int err = MAILIMAP_NO_ERROR; 175 int err = MAILIMAP_NO_ERROR;
176 clist *result = 0; 176 clist *result = 0;
177 clistcell *current = 0; 177 clistcell *current = 0;
178 clistcell*cur_flag = 0; 178 clistcell*cur_flag = 0;
179 mailimap_mbx_list_flags*bflags = 0; 179 mailimap_mbx_list_flags*bflags = 0;
180 180
181 QList<Folder> * folders = new QList<Folder>(); 181 QList<Folder> * folders = new QList<Folder>();
182 folders->setAutoDelete( false ); 182 folders->setAutoDelete( false );
183 login(); 183 login();
184 if (!m_imap) { 184 if (!m_imap) {
185 return folders; 185 return folders;
186 } 186 }
187 187
188/* 188/*
189 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 189 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
190 * We must not forget to filter them out in next loop! 190 * We must not forget to filter them out in next loop!
191 * it seems like ugly code. and yes - it is ugly code. but the best way. 191 * it seems like ugly code. and yes - it is ugly code. but the best way.
192 */ 192 */
193 QString temp; 193 QString temp;
194 mask = "INBOX" ; 194 mask = "INBOX" ;
195 mailimap_mailbox_list *list; 195 mailimap_mailbox_list *list;
196 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); 196 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result );
197 QString del; 197 QString del;
198 bool selectable = true; 198 bool selectable = true;
199 bool no_inferiors = false; 199 bool no_inferiors = false;
200 if ( err == MAILIMAP_NO_ERROR ) { 200 if ( err == MAILIMAP_NO_ERROR ) {
201 current = result->first; 201 current = result->first;
202 for ( int i = result->count; i > 0; i-- ) { 202 for ( int i = result->count; i > 0; i-- ) {
203 list = (mailimap_mailbox_list *) current->data; 203 list = (mailimap_mailbox_list *) current->data;
204 // it is better use the deep copy mechanism of qt itself 204 // it is better use the deep copy mechanism of qt itself
205 // instead of using strdup! 205 // instead of using strdup!
206 temp = list->mb_name; 206 temp = list->mb_name;
207 del = list->mb_delimiter; 207 del = list->mb_delimiter;
208 current = current->next; 208 current = current->next;
209 if ( (bflags = list->mb_flag) ) { 209 if ( (bflags = list->mb_flag) ) {
210 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& 210 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&&
211 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); 211 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT);
212 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) { 212 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) {
213 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) { 213 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) {
214 no_inferiors = true; 214 no_inferiors = true;
215 } 215 }
216 } 216 }
217 } 217 }
218 folders->append( new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix())); 218 folders->append( new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix()));
219 } 219 }
220 } else { 220 } else {
221 qDebug("error fetching folders: %s",m_imap->imap_response); 221 qDebug("error fetching folders: %s",m_imap->imap_response);
222 } 222 }
223 mailimap_list_result_free( result ); 223 mailimap_list_result_free( result );
224 224
225/* 225/*
226 * second stage - get the other then inbox folders 226 * second stage - get the other then inbox folders
227 */ 227 */
228 mask = "*" ; 228 mask = "*" ;
229 path = account->getPrefix().latin1(); 229 path = account->getPrefix().latin1();
230 if (!path) path = ""; 230 if (!path) path = "";
231 qDebug(path); 231 qDebug(path);
232 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result ); 232 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result );
233 if ( err == MAILIMAP_NO_ERROR ) { 233 if ( err == MAILIMAP_NO_ERROR ) {
234 current = result->first; 234 current = result->first;
235 for ( current=clist_begin(result);current!=NULL;current=clist_next(current)) { 235 for ( current=clist_begin(result);current!=NULL;current=clist_next(current)) {
236 no_inferiors = false; 236 no_inferiors = false;
237 list = (mailimap_mailbox_list *) current->data; 237 list = (mailimap_mailbox_list *) current->data;
238 // it is better use the deep copy mechanism of qt itself 238 // it is better use the deep copy mechanism of qt itself
239 // instead of using strdup! 239 // instead of using strdup!
240 temp = list->mb_name; 240 temp = list->mb_name;
241 if (temp.lower()=="inbox") 241 if (temp.lower()=="inbox")
242 continue; 242 continue;
243 if (temp.lower()==account->getPrefix().lower()) 243 if (temp.lower()==account->getPrefix().lower())
244 continue; 244 continue;
245 if ( (bflags = list->mb_flag) ) { 245 if ( (bflags = list->mb_flag) ) {
246 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& 246 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&&
247 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); 247 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT);
248 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) { 248 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) {
249 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) { 249 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) {
250 no_inferiors = true; 250 no_inferiors = true;
251 } 251 }
252 } 252 }
253 } 253 }
254 del = list->mb_delimiter; 254 del = list->mb_delimiter;
255 folders->append(new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix())); 255 folders->append(new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix()));
256 } 256 }
257 } else { 257 } else {
258 qDebug("error fetching folders %s",m_imap->imap_response); 258 qDebug("error fetching folders %s",m_imap->imap_response);
259 } 259 }
260 if (result) mailimap_list_result_free( result ); 260 if (result) mailimap_list_result_free( result );
261 return folders; 261 return folders;
262} 262}
263 263
264RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att) 264RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
265{ 265{
266 RecMail * m = 0; 266 RecMail * m = 0;
267 mailimap_msg_att_item *item=0; 267 mailimap_msg_att_item *item=0;
268 clistcell *current,*c,*cf; 268 clistcell *current,*c,*cf;
269 mailimap_msg_att_dynamic*flist; 269 mailimap_msg_att_dynamic*flist;
270 mailimap_flag_fetch*cflag; 270 mailimap_flag_fetch*cflag;
271 int size; 271 int size;
272 QBitArray mFlags(7); 272 QBitArray mFlags(7);
273 QStringList addresslist; 273 QStringList addresslist;
274 274
275 if (!m_att) { 275 if (!m_att) {
276 return m; 276 return m;
277 } 277 }
278 m = new RecMail(); 278 m = new RecMail();
279 for (c = clist_begin(m_att->att_list); c!=NULL;c=clist_next(c) ) { 279 for (c = clist_begin(m_att->att_list); c!=NULL;c=clist_next(c) ) {
280 current = c; 280 current = c;
281 size = 0; 281 size = 0;
282 item = (mailimap_msg_att_item*)current->data; 282 item = (mailimap_msg_att_item*)current->data;
283 if (item->att_type!=MAILIMAP_MSG_ATT_ITEM_STATIC) { 283 if (item->att_type!=MAILIMAP_MSG_ATT_ITEM_STATIC) {
284 flist = (mailimap_msg_att_dynamic*)item->att_data.att_dyn; 284 flist = (mailimap_msg_att_dynamic*)item->att_data.att_dyn;
285 if (!flist->att_list) { 285 if (!flist->att_list) {
286 continue; 286 continue;
287 } 287 }
288 cf = flist->att_list->first; 288 cf = flist->att_list->first;
289 for (cf = clist_begin(flist->att_list); cf!=NULL; cf = clist_next(cf)) { 289 for (cf = clist_begin(flist->att_list); cf!=NULL; cf = clist_next(cf)) {
290 cflag = (mailimap_flag_fetch*)cf->data; 290 cflag = (mailimap_flag_fetch*)cf->data;
291 if (cflag->fl_type==MAILIMAP_FLAG_FETCH_OTHER && cflag->fl_flag!=0) { 291 if (cflag->fl_type==MAILIMAP_FLAG_FETCH_OTHER && cflag->fl_flag!=0) {
292 switch (cflag->fl_flag->fl_type) { 292 switch (cflag->fl_flag->fl_type) {
293 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */ 293 case MAILIMAP_FLAG_ANSWERED: /* \Answered flag */
294 mFlags.setBit(FLAG_ANSWERED); 294 mFlags.setBit(FLAG_ANSWERED);
295 break; 295 break;
296 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */ 296 case MAILIMAP_FLAG_FLAGGED: /* \Flagged flag */
297 mFlags.setBit(FLAG_FLAGGED); 297 mFlags.setBit(FLAG_FLAGGED);
298 break; 298 break;
299 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */ 299 case MAILIMAP_FLAG_DELETED: /* \Deleted flag */
300 mFlags.setBit(FLAG_DELETED); 300 mFlags.setBit(FLAG_DELETED);
301 break; 301 break;
302 case MAILIMAP_FLAG_SEEN: /* \Seen flag */ 302 case MAILIMAP_FLAG_SEEN: /* \Seen flag */
303 mFlags.setBit(FLAG_SEEN); 303 mFlags.setBit(FLAG_SEEN);
304 break; 304 break;
305 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */ 305 case MAILIMAP_FLAG_DRAFT: /* \Draft flag */
306 mFlags.setBit(FLAG_DRAFT); 306 mFlags.setBit(FLAG_DRAFT);
307 break; 307 break;
308 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */ 308 case MAILIMAP_FLAG_KEYWORD: /* keyword flag */
309 break; 309 break;
310 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */ 310 case MAILIMAP_FLAG_EXTENSION: /* \extension flag */
311 break; 311 break;
312 default: 312 default:
313 break; 313 break;
314 } 314 }
315 } else if (cflag->fl_type==MAILIMAP_FLAG_FETCH_RECENT) { 315 } else if (cflag->fl_type==MAILIMAP_FLAG_FETCH_RECENT) {
316 mFlags.setBit(FLAG_RECENT); 316 mFlags.setBit(FLAG_RECENT);
317 } 317 }
318 } 318 }
319 continue; 319 continue;
320 } 320 }
321 if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_ENVELOPE) { 321 if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_ENVELOPE) {
322 mailimap_envelope * head = item->att_data.att_static->att_data.att_env; 322 mailimap_envelope * head = item->att_data.att_static->att_data.att_env;
323 m->setDate(head->env_date); 323 m->setDate(head->env_date);
324 m->setSubject(convert_String((const char*)head->env_subject)); 324 m->setSubject(convert_String((const char*)head->env_subject));
325 //m->setSubject(head->env_subject); 325 //m->setSubject(head->env_subject);
326 if (head->env_from!=NULL) { 326 if (head->env_from!=NULL) {
327 addresslist = address_list_to_stringlist(head->env_from->frm_list); 327 addresslist = address_list_to_stringlist(head->env_from->frm_list);
328 if (addresslist.count()) { 328 if (addresslist.count()) {
329 m->setFrom(addresslist.first()); 329 m->setFrom(addresslist.first());
330 } 330 }
331 } 331 }
332 if (head->env_to!=NULL) { 332 if (head->env_to!=NULL) {
333 addresslist = address_list_to_stringlist(head->env_to->to_list); 333 addresslist = address_list_to_stringlist(head->env_to->to_list);
334 m->setTo(addresslist); 334 m->setTo(addresslist);
335 } 335 }
336 if (head->env_cc!=NULL) { 336 if (head->env_cc!=NULL) {
337 addresslist = address_list_to_stringlist(head->env_cc->cc_list); 337 addresslist = address_list_to_stringlist(head->env_cc->cc_list);
338 m->setCC(addresslist); 338 m->setCC(addresslist);
339 } 339 }
340 if (head->env_bcc!=NULL) { 340 if (head->env_bcc!=NULL) {
341 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list); 341 addresslist = address_list_to_stringlist(head->env_bcc->bcc_list);
342 m->setBcc(addresslist); 342 m->setBcc(addresslist);
343 } 343 }
344 if (head->env_reply_to!=NULL) { 344 if (head->env_reply_to!=NULL) {
345 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list); 345 addresslist = address_list_to_stringlist(head->env_reply_to->rt_list);
346 if (addresslist.count()) { 346 if (addresslist.count()) {
347 m->setReplyto(addresslist.first()); 347 m->setReplyto(addresslist.first());
348 } 348 }
349 } 349 }
350 m->setMsgid(QString(head->env_message_id)); 350 m->setMsgid(QString(head->env_message_id));
351 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) { 351 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_INTERNALDATE) {
352#if 0 352#if 0
353 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date; 353 mailimap_date_time*d = item->att_data.att_static->att_data.att_internal_date;
354 QDateTime da(QDate(d->dt_year,d->dt_month,d->dt_day),QTime(d->dt_hour,d->dt_min,d->dt_sec)); 354 QDateTime da(QDate(d->dt_year,d->dt_month,d->dt_day),QTime(d->dt_hour,d->dt_min,d->dt_sec));
355 qDebug("%i %i %i - %i %i %i",d->dt_year,d->dt_month,d->dt_day,d->dt_hour,d->dt_min,d->dt_sec); 355 qDebug("%i %i %i - %i %i %i",d->dt_year,d->dt_month,d->dt_day,d->dt_hour,d->dt_min,d->dt_sec);
356 qDebug(da.toString()); 356 qDebug(da.toString());
357#endif 357#endif
358 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_RFC822_SIZE) { 358 } else if (item->att_data.att_static->att_type==MAILIMAP_MSG_ATT_RFC822_SIZE) {
359 size = item->att_data.att_static->att_data.att_rfc822_size; 359 size = item->att_data.att_static->att_data.att_rfc822_size;
360 } 360 }
361 } 361 }
362 /* msg is already deleted */ 362 /* msg is already deleted */
363 if (mFlags.testBit(FLAG_DELETED) && m) { 363 if (mFlags.testBit(FLAG_DELETED) && m) {
364 delete m; 364 delete m;
365 m = 0; 365 m = 0;
366 } 366 }
367 if (m) { 367 if (m) {
368 m->setFlags(mFlags); 368 m->setFlags(mFlags);
369 m->setMsgsize(size); 369 m->setMsgsize(size);
370 } 370 }
371 return m; 371 return m;
372} 372}
373 373
374RecBody IMAPwrapper::fetchBody(const RecMail&mail) 374RecBody IMAPwrapper::fetchBody(const RecMail&mail)
375{ 375{
376 RecBody body; 376 RecBody body;
377 const char *mb; 377 const char *mb;
378 int err = MAILIMAP_NO_ERROR; 378 int err = MAILIMAP_NO_ERROR;
379 clist *result = 0; 379 clist *result = 0;
380 clistcell *current; 380 clistcell *current;
381 mailimap_fetch_att *fetchAtt = 0; 381 mailimap_fetch_att *fetchAtt = 0;
382 mailimap_fetch_type *fetchType = 0; 382 mailimap_fetch_type *fetchType = 0;
383 mailimap_set *set = 0; 383 mailimap_set *set = 0;
384 mailimap_body*body_desc = 0; 384 mailimap_body*body_desc = 0;
385 385
386 mb = mail.getMbox().latin1(); 386 mb = mail.getMbox().latin1();
387 387
388 login(); 388 login();
389 if (!m_imap) { 389 if (!m_imap) {
390 return body; 390 return body;
391 } 391 }
392 392
393 err = mailimap_select( m_imap, (char*)mb); 393 err = mailimap_select( m_imap, (char*)mb);
394 if ( err != MAILIMAP_NO_ERROR ) { 394 if ( err != MAILIMAP_NO_ERROR ) {
395 qDebug("error selecting mailbox: %s",m_imap->imap_response); 395 qDebug("error selecting mailbox: %s",m_imap->imap_response);
396 return body; 396 return body;
397 } 397 }
398 398
399 /* the range has to start at 1!!! not with 0!!!! */ 399 /* the range has to start at 1!!! not with 0!!!! */
400 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); 400 set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() );
401 fetchAtt = mailimap_fetch_att_new_bodystructure(); 401 fetchAtt = mailimap_fetch_att_new_bodystructure();
402 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 402 fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
403 err = mailimap_fetch( m_imap, set, fetchType, &result ); 403 err = mailimap_fetch( m_imap, set, fetchType, &result );
404 mailimap_set_free( set ); 404 mailimap_set_free( set );
405 mailimap_fetch_type_free( fetchType ); 405 mailimap_fetch_type_free( fetchType );
406 406
407 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 407 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
408 mailimap_msg_att * msg_att; 408 mailimap_msg_att * msg_att;
409 msg_att = (mailimap_msg_att*)current->data; 409 msg_att = (mailimap_msg_att*)current->data;
410 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->att_list->first->data; 410 mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->att_list->first->data;
411 QValueList<int> path; 411 QValueList<int> path;
412 body_desc = item->att_data.att_static->att_data.att_body; 412 body_desc = item->att_data.att_static->att_data.att_body;
413 traverseBody(mail,body_desc,body,0,path); 413 traverseBody(mail,body_desc,body,0,path);
414 } else { 414 } else {
415 qDebug("error fetching body: %s",m_imap->imap_response); 415 qDebug("error fetching body: %s",m_imap->imap_response);
416 } 416 }
417 if (result) mailimap_fetch_list_free(result); 417 if (result) mailimap_fetch_list_free(result);
418 return body; 418 return body;
419} 419}
420 420
421QStringList IMAPwrapper::address_list_to_stringlist(clist*list) 421QStringList IMAPwrapper::address_list_to_stringlist(clist*list)
422{ 422{
423 QStringList l; 423 QStringList l;
424 QString from; 424 QString from;
425 bool named_from; 425 bool named_from;
426 clistcell *current = NULL; 426 clistcell *current = NULL;
427 mailimap_address * current_address=NULL; 427 mailimap_address * current_address=NULL;
428 if (!list) { 428 if (!list) {
429 return l; 429 return l;
430 } 430 }
431 unsigned int count = 0; 431 unsigned int count = 0;
432 for (current=clist_begin(list);current!= NULL;current=clist_next(current)) { 432 for (current=clist_begin(list);current!= NULL;current=clist_next(current)) {
433 from = ""; 433 from = "";
434 named_from = false; 434 named_from = false;
435 current_address=(mailimap_address*)current->data; 435 current_address=(mailimap_address*)current->data;
436 if (current_address->ad_personal_name){ 436 if (current_address->ad_personal_name){
437 from+=convert_String((const char*)current_address->ad_personal_name); 437 from+=convert_String((const char*)current_address->ad_personal_name);
438 from+=" "; 438 from+=" ";
439 named_from = true; 439 named_from = true;
440 } 440 }
441 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) { 441 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) {
442 from+="<"; 442 from+="<";
443 } 443 }
444 if (current_address->ad_mailbox_name) { 444 if (current_address->ad_mailbox_name) {
445 from+=QString(current_address->ad_mailbox_name); 445 from+=QString(current_address->ad_mailbox_name);
446 from+="@"; 446 from+="@";
447 } 447 }
448 if (current_address->ad_host_name) { 448 if (current_address->ad_host_name) {
449 from+=QString(current_address->ad_host_name); 449 from+=QString(current_address->ad_host_name);
450 } 450 }
451 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) { 451 if (named_from && (current_address->ad_mailbox_name || current_address->ad_host_name)) {
452 from+=">"; 452 from+=">";
453 } 453 }
454 l.append(QString(from)); 454 l.append(QString(from));
455 if (++count > 99) { 455 if (++count > 99) {
456 break; 456 break;
457 } 457 }
458 } 458 }
459 return l; 459 return l;
460} 460}
461 461
462encodedString*IMAPwrapper::fetchRawPart(const RecMail&mail,const QValueList<int>&path,bool internal_call) 462encodedString*IMAPwrapper::fetchRawPart(const RecMail&mail,const QValueList<int>&path,bool internal_call)
463{ 463{
464 encodedString*res=new encodedString; 464 encodedString*res=new encodedString;
465 const char*mb; 465 const char*mb;
466 int err; 466 int err;
467 mailimap_fetch_type *fetchType; 467 mailimap_fetch_type *fetchType;
468 mailimap_set *set; 468 mailimap_set *set;
469 clistcell*current,*cur; 469 clistcell*current,*cur;
470 mailimap_section_part * section_part = 0; 470 mailimap_section_part * section_part = 0;
471 mailimap_section_spec * section_spec = 0; 471 mailimap_section_spec * section_spec = 0;
472 mailimap_section * section = 0; 472 mailimap_section * section = 0;
473 mailimap_fetch_att * fetch_att = 0; 473 mailimap_fetch_att * fetch_att = 0;
474 474
475 login(); 475 login();
476 if (!m_imap) { 476 if (!m_imap) {
477 return res; 477 return res;
478 } 478 }
479 if (!internal_call) { 479 if (!internal_call) {
480 mb = mail.getMbox().latin1(); 480 mb = mail.getMbox().latin1();
481 err = mailimap_select( m_imap, (char*)mb); 481 err = mailimap_select( m_imap, (char*)mb);
482 if ( err != MAILIMAP_NO_ERROR ) { 482 if ( err != MAILIMAP_NO_ERROR ) {
483 qDebug("error selecting mailbox: %s",m_imap->imap_response); 483 qDebug("error selecting mailbox: %s",m_imap->imap_response);
484 return res; 484 return res;
485 } 485 }
486 } 486 }
487 set = mailimap_set_new_single(mail.getNumber()); 487 set = mailimap_set_new_single(mail.getNumber());
488 488
489 clist*id_list = 0; 489 clist*id_list = 0;
490 490
491 /* if path == empty then its a request for the whole rfc822 mail and generates 491 /* if path == empty then its a request for the whole rfc822 mail and generates
492 a "fetch <id> (body[])" statement on imap server */ 492 a "fetch <id> (body[])" statement on imap server */
493 if (path.count()>0 ) { 493 if (path.count()>0 ) {
494 id_list = clist_new(); 494 id_list = clist_new();
495 for (unsigned j=0; j < path.count();++j) { 495 for (unsigned j=0; j < path.count();++j) {
496 uint32_t * p_id = (uint32_t *)malloc(sizeof(*p_id)); 496 uint32_t * p_id = (uint32_t *)malloc(sizeof(*p_id));
497 *p_id = path[j]; 497 *p_id = path[j];
498 clist_append(id_list,p_id); 498 clist_append(id_list,p_id);
499 } 499 }
500 section_part = mailimap_section_part_new(id_list); 500 section_part = mailimap_section_part_new(id_list);
501 section_spec = mailimap_section_spec_new(MAILIMAP_SECTION_SPEC_SECTION_PART, NULL, section_part, NULL); 501 section_spec = mailimap_section_spec_new(MAILIMAP_SECTION_SPEC_SECTION_PART, NULL, section_part, NULL);
502 } 502 }
503 503
504 section = mailimap_section_new(section_spec); 504 section = mailimap_section_new(section_spec);
505 fetch_att = mailimap_fetch_att_new_body_section(section); 505 fetch_att = mailimap_fetch_att_new_body_section(section);
506 fetchType = mailimap_fetch_type_new_fetch_att(fetch_att); 506 fetchType = mailimap_fetch_type_new_fetch_att(fetch_att);
507 507
508 clist*result = 0; 508 clist*result = 0;
509 509
510 err = mailimap_fetch( m_imap, set, fetchType, &result ); 510 err = mailimap_fetch( m_imap, set, fetchType, &result );
511 mailimap_set_free( set ); 511 mailimap_set_free( set );
512 mailimap_fetch_type_free( fetchType ); 512 mailimap_fetch_type_free( fetchType );
513 513
514 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { 514 if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
515 mailimap_msg_att * msg_att; 515 mailimap_msg_att * msg_att;
516 msg_att = (mailimap_msg_att*)current->data; 516 msg_att = (mailimap_msg_att*)current->data;
517 mailimap_msg_att_item*msg_att_item; 517 mailimap_msg_att_item*msg_att_item;
518 for(cur = clist_begin(msg_att->att_list) ; cur != NULL ; cur = clist_next(cur)) { 518 for(cur = clist_begin(msg_att->att_list) ; cur != NULL ; cur = clist_next(cur)) {
519 msg_att_item = (mailimap_msg_att_item*)clist_content(cur); 519 msg_att_item = (mailimap_msg_att_item*)clist_content(cur);
520 if (msg_att_item->att_type == MAILIMAP_MSG_ATT_ITEM_STATIC) { 520 if (msg_att_item->att_type == MAILIMAP_MSG_ATT_ITEM_STATIC) {
521 if (msg_att_item->att_data.att_static->att_type == MAILIMAP_MSG_ATT_BODY_SECTION) { 521 if (msg_att_item->att_data.att_static->att_type == MAILIMAP_MSG_ATT_BODY_SECTION) {
522 char*text = msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part; 522 char*text = msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part;
523 /* detach - we take over the content */ 523 /* detach - we take over the content */
524 msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part = 0L; 524 msg_att_item->att_data.att_static->att_data.att_body_section->sec_body_part = 0L;
525 res->setContent(text,msg_att_item->att_data.att_static->att_data.att_body_section->sec_length); 525 res->setContent(text,msg_att_item->att_data.att_static->att_data.att_body_section->sec_length);
526 } 526 }
527 } 527 }
528 } 528 }
529 } else { 529 } else {
530 qDebug("error fetching text: %s",m_imap->imap_response); 530 qDebug("error fetching text: %s",m_imap->imap_response);
531 } 531 }
532 if (result) mailimap_fetch_list_free(result); 532 if (result) mailimap_fetch_list_free(result);
533 return res; 533 return res;
534} 534}
535 535
536/* current_recursion is for recursive calls. 536/* current_recursion is for recursive calls.
537 current_count means the position inside the internal loop! */ 537 current_count means the position inside the internal loop! */
538void IMAPwrapper::traverseBody(const RecMail&mail,mailimap_body*body,RecBody&target_body, 538void IMAPwrapper::traverseBody(const RecMail&mail,mailimap_body*body,RecBody&target_body,
539 int current_recursion,QValueList<int>recList,int current_count) 539 int current_recursion,QValueList<int>recList,int current_count)
540{ 540{
541 if (!body || current_recursion>=10) { 541 if (!body || current_recursion>=10) {
542 return; 542 return;
543 } 543 }
544 switch (body->bd_type) { 544 switch (body->bd_type) {
545 case MAILIMAP_BODY_1PART: 545 case MAILIMAP_BODY_1PART:
546 { 546 {
547 QValueList<int>countlist = recList; 547 QValueList<int>countlist = recList;
548 countlist.append(current_count); 548 countlist.append(current_count);
549 RecPart currentPart; 549 RecPart currentPart;
550 mailimap_body_type_1part*part1 = body->bd_data.bd_body_1part; 550 mailimap_body_type_1part*part1 = body->bd_data.bd_body_1part;
551 QString id(""); 551 QString id("");
552 currentPart.setPositionlist(countlist); 552 currentPart.setPositionlist(countlist);
553 for (unsigned int j = 0; j < countlist.count();++j) { 553 for (unsigned int j = 0; j < countlist.count();++j) {
554 id+=(j>0?" ":""); 554 id+=(j>0?" ":"");
555 id+=QString("%1").arg(countlist[j]); 555 id+=QString("%1").arg(countlist[j]);
556 } 556 }
557 qDebug("ID = %s",id.latin1()); 557 qDebug("ID = %s",id.latin1());
558 currentPart.setIdentifier(id); 558 currentPart.setIdentifier(id);
559 fillSinglePart(currentPart,part1); 559 fillSinglePart(currentPart,part1);
560 /* important: Check for is NULL 'cause a body can be empty! 560 /* important: Check for is NULL 'cause a body can be empty!
561 And we put it only into the mail if it is the FIRST part */ 561 And we put it only into the mail if it is the FIRST part */
562 if (part1->bd_type==MAILIMAP_BODY_TYPE_1PART_TEXT && target_body.Bodytext().isNull() && countlist[0]==1) { 562 if (part1->bd_type==MAILIMAP_BODY_TYPE_1PART_TEXT && target_body.Bodytext().isNull() && countlist[0]==1) {
563 QString body_text = fetchTextPart(mail,countlist,true,currentPart.Encoding()); 563 QString body_text = fetchTextPart(mail,countlist,true,currentPart.Encoding());
564 target_body.setDescription(currentPart); 564 target_body.setDescription(currentPart);
565 target_body.setBodytext(body_text); 565 target_body.setBodytext(body_text);
566 if (countlist.count()>1) { 566 if (countlist.count()>1) {
567 target_body.addPart(currentPart); 567 target_body.addPart(currentPart);
568 } 568 }
569 } else { 569 } else {
570 target_body.addPart(currentPart); 570 target_body.addPart(currentPart);
571 } 571 }
572 if (part1->bd_type==MAILIMAP_BODY_TYPE_1PART_MSG) { 572 if (part1->bd_type==MAILIMAP_BODY_TYPE_1PART_MSG) {
573 traverseBody(mail,part1->bd_data.bd_type_msg->bd_body,target_body,current_recursion+1,countlist); 573 traverseBody(mail,part1->bd_data.bd_type_msg->bd_body,target_body,current_recursion+1,countlist);
574 } 574 }
575 } 575 }
576 break; 576 break;
577 case MAILIMAP_BODY_MPART: 577 case MAILIMAP_BODY_MPART:
578 { 578 {
579 QValueList<int>countlist = recList; 579 QValueList<int>countlist = recList;
580 clistcell*current=0; 580 clistcell*current=0;
581 mailimap_body*current_body=0; 581 mailimap_body*current_body=0;
582 unsigned int ccount = 1; 582 unsigned int ccount = 1;
583 mailimap_body_type_mpart*mailDescription = body->bd_data.bd_body_mpart; 583 mailimap_body_type_mpart*mailDescription = body->bd_data.bd_body_mpart;
584 for (current=clist_begin(mailDescription->bd_list);current!=0;current=clist_next(current)) { 584 for (current=clist_begin(mailDescription->bd_list);current!=0;current=clist_next(current)) {
585 current_body = (mailimap_body*)current->data; 585 current_body = (mailimap_body*)current->data;
586 if (current_body->bd_type==MAILIMAP_BODY_MPART) { 586 if (current_body->bd_type==MAILIMAP_BODY_MPART) {
587 RecPart targetPart; 587 RecPart targetPart;
588 targetPart.setType("multipart"); 588 targetPart.setType("multipart");
589 fillMultiPart(targetPart,mailDescription); 589 fillMultiPart(targetPart,mailDescription);
590 countlist.append(current_count); 590 countlist.append(current_count);
591 targetPart.setPositionlist(countlist); 591 targetPart.setPositionlist(countlist);
592 target_body.addPart(targetPart); 592 target_body.addPart(targetPart);
593 QString id(""); 593 QString id("");
594 for (unsigned int j = 0; j < countlist.count();++j) { 594 for (unsigned int j = 0; j < countlist.count();++j) {
595 id+=(j>0?" ":""); 595 id+=(j>0?" ":"");
596 id+=QString("%1").arg(countlist[j]); 596 id+=QString("%1").arg(countlist[j]);
597 } 597 }
598 qDebug("ID(mpart) = %s",id.latin1()); 598 qDebug("ID(mpart) = %s",id.latin1());
599 } 599 }
600 traverseBody(mail,current_body,target_body,current_recursion+1,countlist,ccount); 600 traverseBody(mail,current_body,target_body,current_recursion+1,countlist,ccount);
601 if (current_body->bd_type==MAILIMAP_BODY_MPART) { 601 if (current_body->bd_type==MAILIMAP_BODY_MPART) {
602 countlist = recList; 602 countlist = recList;
603 } 603 }
604 ++ccount; 604 ++ccount;
605 } 605 }
606 } 606 }
607 break; 607 break;
608 default: 608 default:
609 break; 609 break;
610 } 610 }
611} 611}
612 612
613void IMAPwrapper::fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description) 613void IMAPwrapper::fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description)
614{ 614{
615 if (!Description) { 615 if (!Description) {
616 return; 616 return;
617 } 617 }
618 switch (Description->bd_type) { 618 switch (Description->bd_type) {
619 case MAILIMAP_BODY_TYPE_1PART_TEXT: 619 case MAILIMAP_BODY_TYPE_1PART_TEXT:
620 target_part.setType("text"); 620 target_part.setType("text");
621 fillSingleTextPart(target_part,Description->bd_data.bd_type_text); 621 fillSingleTextPart(target_part,Description->bd_data.bd_type_text);
622 break; 622 break;
623 case MAILIMAP_BODY_TYPE_1PART_BASIC: 623 case MAILIMAP_BODY_TYPE_1PART_BASIC:
624 fillSingleBasicPart(target_part,Description->bd_data.bd_type_basic); 624 fillSingleBasicPart(target_part,Description->bd_data.bd_type_basic);
625 break; 625 break;
626 case MAILIMAP_BODY_TYPE_1PART_MSG: 626 case MAILIMAP_BODY_TYPE_1PART_MSG:
627 target_part.setType("message"); 627 target_part.setType("message");
628 fillSingleMsgPart(target_part,Description->bd_data.bd_type_msg); 628 fillSingleMsgPart(target_part,Description->bd_data.bd_type_msg);
629 break; 629 break;
630 default: 630 default:
631 break; 631 break;
632 } 632 }
633} 633}
634 634
635void IMAPwrapper::fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which) 635void IMAPwrapper::fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which)
636{ 636{
637 if (!which) { 637 if (!which) {
638 return; 638 return;
639 } 639 }
640 QString sub; 640 QString sub;
641 sub = which->bd_media_text; 641 sub = which->bd_media_text;
642 qDebug("Type= text/%s",which->bd_media_text); 642 qDebug("Type= text/%s",which->bd_media_text);
643 target_part.setSubtype(sub.lower()); 643 target_part.setSubtype(sub.lower());
644 target_part.setLines(which->bd_lines); 644 target_part.setLines(which->bd_lines);
645 fillBodyFields(target_part,which->bd_fields); 645 fillBodyFields(target_part,which->bd_fields);
646} 646}
647 647
648void IMAPwrapper::fillSingleMsgPart(RecPart&target_part,mailimap_body_type_msg*which) 648void IMAPwrapper::fillSingleMsgPart(RecPart&target_part,mailimap_body_type_msg*which)
649{ 649{
650 if (!which) { 650 if (!which) {
651 return; 651 return;
652 } 652 }
653 target_part.setSubtype("rfc822"); 653 target_part.setSubtype("rfc822");
654 qDebug("Message part"); 654 qDebug("Message part");
655 /* we set this type to text/plain */ 655 /* we set this type to text/plain */
656 target_part.setLines(which->bd_lines); 656 target_part.setLines(which->bd_lines);
657 fillBodyFields(target_part,which->bd_fields); 657 fillBodyFields(target_part,which->bd_fields);
658} 658}
659 659
660void IMAPwrapper::fillMultiPart(RecPart&target_part,mailimap_body_type_mpart*which) 660void IMAPwrapper::fillMultiPart(RecPart&target_part,mailimap_body_type_mpart*which)
661{ 661{
662 if (!which) return; 662 if (!which) return;
663 QString sub = which->bd_media_subtype; 663 QString sub = which->bd_media_subtype;
664 target_part.setSubtype(sub.lower()); 664 target_part.setSubtype(sub.lower());
665 if (which->bd_ext_mpart && which->bd_ext_mpart->bd_parameter && which->bd_ext_mpart->bd_parameter->pa_list) { 665 if (which->bd_ext_mpart && which->bd_ext_mpart->bd_parameter && which->bd_ext_mpart->bd_parameter->pa_list) {
666 clistcell*cur = 0; 666 clistcell*cur = 0;
667 mailimap_single_body_fld_param*param=0; 667 mailimap_single_body_fld_param*param=0;
668 for (cur = clist_begin(which->bd_ext_mpart->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) { 668 for (cur = clist_begin(which->bd_ext_mpart->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) {
669 param = (mailimap_single_body_fld_param*)cur->data; 669 param = (mailimap_single_body_fld_param*)cur->data;
670 if (param) { 670 if (param) {
671 target_part.addParameter(QString(param->pa_name).lower(),QString(param->pa_value)); 671 target_part.addParameter(QString(param->pa_name).lower(),QString(param->pa_value));
672 } 672 }
673 } 673 }
674 } 674 }
675} 675}
676 676
677void IMAPwrapper::fillSingleBasicPart(RecPart&target_part,mailimap_body_type_basic*which) 677void IMAPwrapper::fillSingleBasicPart(RecPart&target_part,mailimap_body_type_basic*which)
678{ 678{
679 if (!which) { 679 if (!which) {
680 return; 680 return;
681 } 681 }
682 QString type,sub; 682 QString type,sub;
683 switch (which->bd_media_basic->med_type) { 683 switch (which->bd_media_basic->med_type) {
684 case MAILIMAP_MEDIA_BASIC_APPLICATION: 684 case MAILIMAP_MEDIA_BASIC_APPLICATION:
685 type = "application"; 685 type = "application";
686 break; 686 break;
687 case MAILIMAP_MEDIA_BASIC_AUDIO: 687 case MAILIMAP_MEDIA_BASIC_AUDIO:
688 type = "audio"; 688 type = "audio";
689 break; 689 break;
690 case MAILIMAP_MEDIA_BASIC_IMAGE: 690 case MAILIMAP_MEDIA_BASIC_IMAGE:
691 type = "image"; 691 type = "image";
692 break; 692 break;
693 case MAILIMAP_MEDIA_BASIC_MESSAGE: 693 case MAILIMAP_MEDIA_BASIC_MESSAGE:
694 type = "message"; 694 type = "message";
695 break; 695 break;
696 case MAILIMAP_MEDIA_BASIC_VIDEO: 696 case MAILIMAP_MEDIA_BASIC_VIDEO:
697 type = "video"; 697 type = "video";
698 break; 698 break;
699 case MAILIMAP_MEDIA_BASIC_OTHER: 699 case MAILIMAP_MEDIA_BASIC_OTHER:
700 default: 700 default:
701 if (which->bd_media_basic->med_basic_type) { 701 if (which->bd_media_basic->med_basic_type) {
702 type = which->bd_media_basic->med_basic_type; 702 type = which->bd_media_basic->med_basic_type;
703 } else { 703 } else {
704 type = ""; 704 type = "";
705 } 705 }
706 break; 706 break;
707 } 707 }
708 if (which->bd_media_basic->med_subtype) { 708 if (which->bd_media_basic->med_subtype) {
709 sub = which->bd_media_basic->med_subtype; 709 sub = which->bd_media_basic->med_subtype;
710 } else { 710 } else {
711 sub = ""; 711 sub = "";
712 } 712 }
713 qDebug("Type = %s/%s",type.latin1(),sub.latin1()); 713 qDebug("Type = %s/%s",type.latin1(),sub.latin1());
714 target_part.setType(type.lower()); 714 target_part.setType(type.lower());
715 target_part.setSubtype(sub.lower()); 715 target_part.setSubtype(sub.lower());
716 fillBodyFields(target_part,which->bd_fields); 716 fillBodyFields(target_part,which->bd_fields);
717} 717}
718 718
719void IMAPwrapper::fillBodyFields(RecPart&target_part,mailimap_body_fields*which) 719void IMAPwrapper::fillBodyFields(RecPart&target_part,mailimap_body_fields*which)
720{ 720{
721 if (!which) return; 721 if (!which) return;
722 if (which->bd_parameter && which->bd_parameter->pa_list && which->bd_parameter->pa_list->count>0) { 722 if (which->bd_parameter && which->bd_parameter->pa_list && which->bd_parameter->pa_list->count>0) {
723 clistcell*cur; 723 clistcell*cur;
724 mailimap_single_body_fld_param*param=0; 724 mailimap_single_body_fld_param*param=0;
725 for (cur = clist_begin(which->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) { 725 for (cur = clist_begin(which->bd_parameter->pa_list);cur!=NULL;cur=clist_next(cur)) {
726 param = (mailimap_single_body_fld_param*)cur->data; 726 param = (mailimap_single_body_fld_param*)cur->data;
727 if (param) { 727 if (param) {
728 target_part.addParameter(QString(param->pa_name).lower(),QString(param->pa_value)); 728 target_part.addParameter(QString(param->pa_name).lower(),QString(param->pa_value));
729 } 729 }
730 } 730 }
731 } 731 }
732 mailimap_body_fld_enc*enc = which->bd_encoding; 732 mailimap_body_fld_enc*enc = which->bd_encoding;
733 QString encoding(""); 733 QString encoding("");
734 switch (enc->enc_type) { 734 switch (enc->enc_type) {
735 case MAILIMAP_BODY_FLD_ENC_7BIT: 735 case MAILIMAP_BODY_FLD_ENC_7BIT:
736 encoding = "7bit"; 736 encoding = "7bit";
737 break; 737 break;
738 case MAILIMAP_BODY_FLD_ENC_8BIT: 738 case MAILIMAP_BODY_FLD_ENC_8BIT:
739 encoding = "8bit"; 739 encoding = "8bit";
740 break; 740 break;
741 case MAILIMAP_BODY_FLD_ENC_BINARY: 741 case MAILIMAP_BODY_FLD_ENC_BINARY:
742 encoding="binary"; 742 encoding="binary";
743 break; 743 break;
744 case MAILIMAP_BODY_FLD_ENC_BASE64: 744 case MAILIMAP_BODY_FLD_ENC_BASE64:
745 encoding="base64"; 745 encoding="base64";
746 break; 746 break;
747 case MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE: 747 case MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE:
748 encoding="quoted-printable"; 748 encoding="quoted-printable";
749 break; 749 break;
750 case MAILIMAP_BODY_FLD_ENC_OTHER: 750 case MAILIMAP_BODY_FLD_ENC_OTHER:
751 default: 751 default:
752 if (enc->enc_value) { 752 if (enc->enc_value) {
753 char*t=enc->enc_value; 753 char*t=enc->enc_value;
754 encoding=QString(enc->enc_value); 754 encoding=QString(enc->enc_value);
755 enc->enc_value=0L; 755 enc->enc_value=0L;
756 free(t); 756 free(t);
757 } 757 }
758 } 758 }
759 if (which->bd_description) { 759 if (which->bd_description) {
760 target_part.setDescription(QString(which->bd_description)); 760 target_part.setDescription(QString(which->bd_description));
761 } 761 }
762 target_part.setEncoding(encoding); 762 target_part.setEncoding(encoding);
763 target_part.setSize(which->bd_size); 763 target_part.setSize(which->bd_size);
764} 764}
765 765
766void IMAPwrapper::deleteMail(const RecMail&mail) 766void IMAPwrapper::deleteMail(const RecMail&mail)
767{ 767{
768 mailimap_flag_list*flist; 768 mailimap_flag_list*flist;
769 mailimap_set *set; 769 mailimap_set *set;
770 mailimap_store_att_flags * store_flags; 770 mailimap_store_att_flags * store_flags;
771 int err; 771 int err;
772 login(); 772 login();
773 if (!m_imap) { 773 if (!m_imap) {
774 return; 774 return;
775 } 775 }
776 const char *mb = mail.getMbox().latin1(); 776 const char *mb = mail.getMbox().latin1();
777 err = mailimap_select( m_imap, (char*)mb); 777 err = mailimap_select( m_imap, (char*)mb);
778 if ( err != MAILIMAP_NO_ERROR ) { 778 if ( err != MAILIMAP_NO_ERROR ) {
779 qDebug("error selecting mailbox for delete: %s",m_imap->imap_response); 779 qDebug("error selecting mailbox for delete: %s",m_imap->imap_response);
780 return; 780 return;
781 } 781 }
782 flist = mailimap_flag_list_new_empty(); 782 flist = mailimap_flag_list_new_empty();
783 mailimap_flag_list_add(flist,mailimap_flag_new_deleted()); 783 mailimap_flag_list_add(flist,mailimap_flag_new_deleted());
784 store_flags = mailimap_store_att_flags_new_set_flags(flist); 784 store_flags = mailimap_store_att_flags_new_set_flags(flist);
785 set = mailimap_set_new_single(mail.getNumber()); 785 set = mailimap_set_new_single(mail.getNumber());
786 err = mailimap_store(m_imap,set,store_flags); 786 err = mailimap_store(m_imap,set,store_flags);
787 mailimap_set_free( set ); 787 mailimap_set_free( set );
788 mailimap_store_att_flags_free(store_flags); 788 mailimap_store_att_flags_free(store_flags);
789 789
790 if (err != MAILIMAP_NO_ERROR) { 790 if (err != MAILIMAP_NO_ERROR) {
791 qDebug("error deleting mail: %s",m_imap->imap_response); 791 qDebug("error deleting mail: %s",m_imap->imap_response);
792 return; 792 return;
793 } 793 }
794 qDebug("deleting mail: %s",m_imap->imap_response); 794 qDebug("deleting mail: %s",m_imap->imap_response);
795 /* should we realy do that at this moment? */ 795 /* should we realy do that at this moment? */
796 err = mailimap_expunge(m_imap); 796 err = mailimap_expunge(m_imap);
797 if (err != MAILIMAP_NO_ERROR) { 797 if (err != MAILIMAP_NO_ERROR) {
798 qDebug("error deleting mail: %s",m_imap->imap_response); 798 qDebug("error deleting mail: %s",m_imap->imap_response);
799 } 799 }
800 qDebug("Delete successfull %s",m_imap->imap_response); 800 qDebug("Delete successfull %s",m_imap->imap_response);
801} 801}
802 802
803void IMAPwrapper::answeredMail(const RecMail&mail) 803void IMAPwrapper::answeredMail(const RecMail&mail)
804{ 804{
805 mailimap_flag_list*flist; 805 mailimap_flag_list*flist;
806 mailimap_set *set; 806 mailimap_set *set;
807 mailimap_store_att_flags * store_flags; 807 mailimap_store_att_flags * store_flags;
808 int err; 808 int err;
809 login(); 809 login();
810 if (!m_imap) { 810 if (!m_imap) {
811 return; 811 return;
812 } 812 }
813 const char *mb = mail.getMbox().latin1(); 813 const char *mb = mail.getMbox().latin1();
814 err = mailimap_select( m_imap, (char*)mb); 814 err = mailimap_select( m_imap, (char*)mb);
815 if ( err != MAILIMAP_NO_ERROR ) { 815 if ( err != MAILIMAP_NO_ERROR ) {
816 qDebug("error selecting mailbox for mark: %s",m_imap->imap_response); 816 qDebug("error selecting mailbox for mark: %s",m_imap->imap_response);
817 return; 817 return;
818 } 818 }
819 flist = mailimap_flag_list_new_empty(); 819 flist = mailimap_flag_list_new_empty();
820 mailimap_flag_list_add(flist,mailimap_flag_new_answered()); 820 mailimap_flag_list_add(flist,mailimap_flag_new_answered());
821 store_flags = mailimap_store_att_flags_new_add_flags(flist); 821 store_flags = mailimap_store_att_flags_new_add_flags(flist);
822 set = mailimap_set_new_single(mail.getNumber()); 822 set = mailimap_set_new_single(mail.getNumber());
823 err = mailimap_store(m_imap,set,store_flags); 823 err = mailimap_store(m_imap,set,store_flags);
824 mailimap_set_free( set ); 824 mailimap_set_free( set );
825 mailimap_store_att_flags_free(store_flags); 825 mailimap_store_att_flags_free(store_flags);
826 826
827 if (err != MAILIMAP_NO_ERROR) { 827 if (err != MAILIMAP_NO_ERROR) {
828 qDebug("error marking mail: %s",m_imap->imap_response); 828 qDebug("error marking mail: %s",m_imap->imap_response);
829 return; 829 return;
830 } 830 }
831} 831}
832 832
833QString IMAPwrapper::fetchTextPart(const RecMail&mail,const QValueList<int>&path,bool internal_call,const QString&enc) 833QString IMAPwrapper::fetchTextPart(const RecMail&mail,const QValueList<int>&path,bool internal_call,const QString&enc)
834{ 834{
835 QString body(""); 835 QString body("");
836 encodedString*res = fetchRawPart(mail,path,internal_call); 836 encodedString*res = fetchRawPart(mail,path,internal_call);
837 encodedString*r = decode_String(res,enc); 837 encodedString*r = decode_String(res,enc);
838 delete res; 838 delete res;
839 if (r) { 839 if (r) {
840 if (r->Length()>0) { 840 if (r->Length()>0) {
841 body = r->Content(); 841 body = r->Content();
842 } 842 }
843 delete r; 843 delete r;
844 } 844 }
845 return body; 845 return body;
846} 846}
847 847
848QString IMAPwrapper::fetchTextPart(const RecMail&mail,const RecPart&part) 848QString IMAPwrapper::fetchTextPart(const RecMail&mail,const RecPart&part)
849{ 849{
850 return fetchTextPart(mail,part.Positionlist(),false,part.Encoding()); 850 return fetchTextPart(mail,part.Positionlist(),false,part.Encoding());
851} 851}
852 852
853encodedString* IMAPwrapper::fetchDecodedPart(const RecMail&mail,const RecPart&part) 853encodedString* IMAPwrapper::fetchDecodedPart(const RecMail&mail,const RecPart&part)
854{ 854{
855 encodedString*res = fetchRawPart(mail,part.Positionlist(),false); 855 encodedString*res = fetchRawPart(mail,part.Positionlist(),false);
856 encodedString*r = decode_String(res,part.Encoding()); 856 encodedString*r = decode_String(res,part.Encoding());
857 delete res; 857 delete res;
858 return r; 858 return r;
859} 859}
860 860
861encodedString* IMAPwrapper::fetchRawPart(const RecMail&mail,const RecPart&part) 861encodedString* IMAPwrapper::fetchRawPart(const RecMail&mail,const RecPart&part)
862{ 862{
863 return fetchRawPart(mail,part.Positionlist(),false); 863 return fetchRawPart(mail,part.Positionlist(),false);
864} 864}
865 865
866int IMAPwrapper::deleteAllMail(const Folder*folder) 866int IMAPwrapper::deleteAllMail(const Folder*folder)
867{ 867{
868 login(); 868 login();
869 if (!m_imap) { 869 if (!m_imap) {
870 return 0; 870 return 0;
871 } 871 }
872 mailimap_flag_list*flist; 872 mailimap_flag_list*flist;
873 mailimap_set *set; 873 mailimap_set *set;
874 mailimap_store_att_flags * store_flags; 874 mailimap_store_att_flags * store_flags;
875 int err = mailimap_select( m_imap, folder->getName().latin1()); 875 int err = mailimap_select( m_imap, folder->getName().latin1());
876 if ( err != MAILIMAP_NO_ERROR ) { 876 if ( err != MAILIMAP_NO_ERROR ) {
877 Global::statusMessage(tr("error selecting mailbox: %1").arg(m_imap->imap_response)); 877 Global::statusMessage(tr("error selecting mailbox: %1").arg(m_imap->imap_response));
878 return 0; 878 return 0;
879 } 879 }
880 int last = m_imap->imap_selection_info->sel_exists; 880 int last = m_imap->imap_selection_info->sel_exists;
881 if (last == 0) { 881 if (last == 0) {
882 Global::statusMessage(tr("Mailbox has no mails!")); 882 Global::statusMessage(tr("Mailbox has no mails!"));
883 return 0; 883 return 0;
884 } 884 }
885 flist = mailimap_flag_list_new_empty(); 885 flist = mailimap_flag_list_new_empty();
886 mailimap_flag_list_add(flist,mailimap_flag_new_deleted()); 886 mailimap_flag_list_add(flist,mailimap_flag_new_deleted());
887 store_flags = mailimap_store_att_flags_new_set_flags(flist); 887 store_flags = mailimap_store_att_flags_new_set_flags(flist);
888 set = mailimap_set_new_interval( 1, last ); 888 set = mailimap_set_new_interval( 1, last );
889 err = mailimap_store(m_imap,set,store_flags); 889 err = mailimap_store(m_imap,set,store_flags);
890 mailimap_set_free( set ); 890 mailimap_set_free( set );
891 mailimap_store_att_flags_free(store_flags); 891 mailimap_store_att_flags_free(store_flags);
892 if (err != MAILIMAP_NO_ERROR) { 892 if (err != MAILIMAP_NO_ERROR) {
893 Global::statusMessage(tr("error deleting mail: %s").arg(m_imap->imap_response)); 893 Global::statusMessage(tr("error deleting mail: %s").arg(m_imap->imap_response));
894 return 0; 894 return 0;
895 } 895 }
896 qDebug("deleting mail: %s",m_imap->imap_response); 896 qDebug("deleting mail: %s",m_imap->imap_response);
897 /* should we realy do that at this moment? */ 897 /* should we realy do that at this moment? */
898 err = mailimap_expunge(m_imap); 898 err = mailimap_expunge(m_imap);
899 if (err != MAILIMAP_NO_ERROR) { 899 if (err != MAILIMAP_NO_ERROR) {
900 Global::statusMessage(tr("error deleting mail: %s").arg(m_imap->imap_response)); 900 Global::statusMessage(tr("error deleting mail: %s").arg(m_imap->imap_response));
901 return 0; 901 return 0;
902 } 902 }
903 qDebug("Delete successfull %s",m_imap->imap_response); 903 qDebug("Delete successfull %s",m_imap->imap_response);
904 return 1; 904 return 1;
905} 905}
906 906
907int IMAPwrapper::createMbox(const QString&folder,const Folder*parentfolder,const QString& delemiter,bool getsubfolder) 907int IMAPwrapper::createMbox(const QString&folder,const Folder*parentfolder,const QString& delemiter,bool getsubfolder)
908{ 908{
909 if (folder.length()==0) return 0; 909 if (folder.length()==0) return 0;
910 login(); 910 login();
911 if (!m_imap) {return 0;} 911 if (!m_imap) {return 0;}
912 QString pre = account->getPrefix(); 912 QString pre = account->getPrefix();
913 if (delemiter.length()>0 && pre.findRev(delemiter)!=pre.length()-1) { 913 if (delemiter.length()>0 && pre.findRev(delemiter)!=pre.length()-1) {
914 pre+=delemiter; 914 pre+=delemiter;
915 } 915 }
916 if (parentfolder) { 916 if (parentfolder) {
917 pre += parentfolder->getDisplayName()+delemiter; 917 pre += parentfolder->getDisplayName()+delemiter;
918 } 918 }
919 pre+=folder; 919 pre+=folder;
920 if (getsubfolder) { 920 if (getsubfolder) {
921 if (delemiter.length()>0) { 921 if (delemiter.length()>0) {
922 pre+=delemiter; 922 pre+=delemiter;
923 } else { 923 } else {
924 Global::statusMessage(tr("Cannot create folder %1 for holding subfolders").arg(pre)); 924 Global::statusMessage(tr("Cannot create folder %1 for holding subfolders").arg(pre));
925 return 0; 925 return 0;
926 } 926 }
927 } 927 }
928 qDebug("Creating %s",pre.latin1()); 928 qDebug("Creating %s",pre.latin1());
929 int res = mailimap_create(m_imap,pre.latin1()); 929 int res = mailimap_create(m_imap,pre.latin1());
930 if (res != MAILIMAP_NO_ERROR) { 930 if (res != MAILIMAP_NO_ERROR) {
931 Global::statusMessage(tr("%1").arg(m_imap->imap_response)); 931 Global::statusMessage(tr("%1").arg(m_imap->imap_response));
932 return 0; 932 return 0;
933 } 933 }
934 return 1; 934 return 1;
935} 935}
936 936
937int IMAPwrapper::deleteMbox(const Folder*folder) 937int IMAPwrapper::deleteMbox(const Folder*folder)
938{ 938{
939 if (!folder) return 0; 939 if (!folder) return 0;
940 login(); 940 login();
941 if (!m_imap) {return 0;} 941 if (!m_imap) {return 0;}
942 int res = mailimap_delete(m_imap,folder->getName()); 942 int res = mailimap_delete(m_imap,folder->getName());
943 if (res != MAILIMAP_NO_ERROR) { 943 if (res != MAILIMAP_NO_ERROR) {
944 Global::statusMessage(tr("%1").arg(m_imap->imap_response)); 944 Global::statusMessage(tr("%1").arg(m_imap->imap_response));
945 return 0; 945 return 0;
946 } 946 }
947 return 1; 947 return 1;
948} 948}
949 949
950void IMAPwrapper::statusFolder(folderStat&target_stat,const QString & mailbox) 950void IMAPwrapper::statusFolder(folderStat&target_stat,const QString & mailbox)
951{ 951{
952 mailimap_status_att_list * att_list =0; 952 mailimap_status_att_list * att_list =0;
953 mailimap_mailbox_data_status * status=0; 953 mailimap_mailbox_data_status * status=0;
954 clistiter * cur = 0; 954 clistiter * cur = 0;
955 int r = 0; 955 int r = 0;
956 int res = 0; 956 int res = 0;
957 target_stat.message_count = 0; 957 target_stat.message_count = 0;
958 target_stat.message_unseen = 0; 958 target_stat.message_unseen = 0;
959 target_stat.message_recent = 0; 959 target_stat.message_recent = 0;
960 login(); 960 login();
961 if (!m_imap) { 961 if (!m_imap) {
962 return; 962 return;
963 } 963 }
964 att_list = mailimap_status_att_list_new_empty(); 964 att_list = mailimap_status_att_list_new_empty();
965 if (!att_list) return; 965 if (!att_list) return;
966 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_MESSAGES); 966 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_MESSAGES);
967 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_RECENT); 967 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_RECENT);
968 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_UNSEEN); 968 r = mailimap_status_att_list_add(att_list, MAILIMAP_STATUS_ATT_UNSEEN);
969 r = mailimap_status(m_imap, mailbox.latin1(), att_list, &status); 969 r = mailimap_status(m_imap, mailbox.latin1(), att_list, &status);
970 if (r==MAILIMAP_NO_ERROR&&status->st_info_list!=0) { 970 if (r==MAILIMAP_NO_ERROR&&status->st_info_list!=0) {
971 for (cur = clist_begin(status->st_info_list); 971 for (cur = clist_begin(status->st_info_list);
972 cur != NULL ; cur = clist_next(cur)) { 972 cur != NULL ; cur = clist_next(cur)) {
973 mailimap_status_info * status_info; 973 mailimap_status_info * status_info;
974 status_info = (mailimap_status_info *)clist_content(cur); 974 status_info = (mailimap_status_info *)clist_content(cur);
975 switch (status_info->st_att) { 975 switch (status_info->st_att) {
976 case MAILIMAP_STATUS_ATT_MESSAGES: 976 case MAILIMAP_STATUS_ATT_MESSAGES:
977 target_stat.message_count = status_info->st_value; 977 target_stat.message_count = status_info->st_value;
978 break; 978 break;
979 case MAILIMAP_STATUS_ATT_RECENT: 979 case MAILIMAP_STATUS_ATT_RECENT:
980 target_stat.message_recent = status_info->st_value; 980 target_stat.message_recent = status_info->st_value;
981 break; 981 break;
982 case MAILIMAP_STATUS_ATT_UNSEEN: 982 case MAILIMAP_STATUS_ATT_UNSEEN:
983 target_stat.message_unseen = status_info->st_value; 983 target_stat.message_unseen = status_info->st_value;
984 break; 984 break;
985 } 985 }
986 } 986 }
987 } else { 987 } else {
988 qDebug("Error retrieving status"); 988 qDebug("Error retrieving status");
989 } 989 }
990 if (status) mailimap_mailbox_data_status_free(status); 990 if (status) mailimap_mailbox_data_status_free(status);
991 if (att_list) mailimap_status_att_list_free(att_list); 991 if (att_list) mailimap_status_att_list_free(att_list);
992} 992}
993 993
994void IMAPwrapper::storeMessage(const char*msg,size_t length, const QString&folder) 994void IMAPwrapper::storeMessage(const char*msg,size_t length, const QString&folder)
995{ 995{
996 login(); 996 login();
997 if (!m_imap) return; 997 if (!m_imap) return;
998 if (!msg) return; 998 if (!msg) return;
999 int r = mailimap_append(m_imap,(char*)folder.latin1(),0,0,msg,length); 999 int r = mailimap_append(m_imap,(char*)folder.latin1(),0,0,msg,length);
1000 if (r != MAILIMAP_NO_ERROR) { 1000 if (r != MAILIMAP_NO_ERROR) {
1001 Global::statusMessage("Error storing mail!"); 1001 Global::statusMessage("Error storing mail!");
1002 } 1002 }
1003} 1003}
1004 1004
1005const QString&IMAPwrapper::getType()const 1005const QString&IMAPwrapper::getType()const
1006{ 1006{
1007 return account->getType(); 1007 return account->getType();
1008} 1008}
1009 1009
1010const QString&IMAPwrapper::getName()const 1010const QString&IMAPwrapper::getName()const
1011{ 1011{
1012 qDebug("Get name: %s",account->getAccountName().latin1());
1012 return account->getAccountName(); 1013 return account->getAccountName();
1013} 1014}
1014 1015
1015encodedString* IMAPwrapper::fetchRawBody(const RecMail&mail) 1016encodedString* IMAPwrapper::fetchRawBody(const RecMail&mail)
1016{ 1017{
1017 // dummy 1018 // dummy
1018 QValueList<int> path; 1019 QValueList<int> path;
1019 return fetchRawPart(mail,path,false); 1020 return fetchRawPart(mail,path,false);
1020} 1021}
1022
1023void IMAPwrapper::mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
1024{
1025 qDebug("mvcp mail imap");
1026 if (targetWrapper != this) {
1027 AbstractMail::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit);
1028 qDebug("Using generic");
1029 return;
1030 }
1031 qDebug("Using internal");
1032 mailimap_set *set = 0;
1033
1034 int err = mailimap_select( m_imap, fromFolder->getName().latin1());
1035 if ( err != MAILIMAP_NO_ERROR ) {
1036 Global::statusMessage(tr("error selecting mailbox: %1").arg(m_imap->imap_response));
1037 return;
1038 }
1039
1040 int last = m_imap->imap_selection_info->sel_exists;
1041 set = mailimap_set_new_interval( 1, last );
1042 err = mailimap_copy(m_imap,set,targetFolder.latin1());
1043 if ( err != MAILIMAP_NO_ERROR ) {
1044 Global::statusMessage(tr("error copy mails: %1").arg(m_imap->imap_response));
1045 return;
1046 }
1047 mailimap_set_free( set );
1048 if (moveit) {
1049 deleteAllMail(fromFolder);
1050 }
1051}
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.h b/noncore/net/mail/libmailwrapper/imapwrapper.h
index b2bd7e9..07c6210 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.h
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.h
@@ -1,73 +1,74 @@
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 QList<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 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 35
35 virtual RecBody fetchBody(const RecMail&mail); 36 virtual RecBody fetchBody(const RecMail&mail);
36 virtual QString fetchTextPart(const RecMail&mail,const RecPart&part); 37 virtual QString fetchTextPart(const RecMail&mail,const RecPart&part);
37 virtual encodedString* fetchDecodedPart(const RecMail&mail,const RecPart&part); 38 virtual encodedString* fetchDecodedPart(const RecMail&mail,const RecPart&part);
38 virtual encodedString* fetchRawPart(const RecMail&mail,const RecPart&part); 39 virtual encodedString* fetchRawPart(const RecMail&mail,const RecPart&part);
39 virtual encodedString* fetchRawBody(const RecMail&mail); 40 virtual encodedString* fetchRawBody(const RecMail&mail);
40 41
41 virtual int createMbox(const QString&,const Folder*parentfolder=0,const QString& delemiter="/",bool getsubfolder=false); 42 virtual int createMbox(const QString&,const Folder*parentfolder=0,const QString& delemiter="/",bool getsubfolder=false);
42 virtual int deleteMbox(const Folder*folder); 43 virtual int deleteMbox(const Folder*folder);
43 44
44 static void imap_progress( size_t current, size_t maximum ); 45 static void imap_progress( size_t current, size_t maximum );
45 46
46 virtual void logout(); 47 virtual void logout();
47 virtual const QString&getType()const; 48 virtual const QString&getType()const;
48 virtual const QString&getName()const; 49 virtual const QString&getName()const;
49 50
50protected: 51protected:
51 RecMail*parse_list_result(mailimap_msg_att*); 52 RecMail*parse_list_result(mailimap_msg_att*);
52 void login(); 53 void login();
53 54
54 virtual QString fetchTextPart(const RecMail&mail,const QValueList<int>&path,bool internal_call=false,const QString&enc=""); 55 virtual QString fetchTextPart(const RecMail&mail,const QValueList<int>&path,bool internal_call=false,const QString&enc="");
55 virtual encodedString*fetchRawPart(const RecMail&mail,const QValueList<int>&path,bool internal_call); 56 virtual encodedString*fetchRawPart(const RecMail&mail,const QValueList<int>&path,bool internal_call);
56 57
57 void fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description); 58 void fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description);
58 void fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which); 59 void fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which);
59 void fillSingleBasicPart(RecPart&target_part,mailimap_body_type_basic*which); 60 void fillSingleBasicPart(RecPart&target_part,mailimap_body_type_basic*which);
60 void fillSingleMsgPart(RecPart&target_part,mailimap_body_type_msg*which); 61 void fillSingleMsgPart(RecPart&target_part,mailimap_body_type_msg*which);
61 void fillMultiPart(RecPart&target_part,mailimap_body_type_mpart*which); 62 void fillMultiPart(RecPart&target_part,mailimap_body_type_mpart*which);
62 void traverseBody(const RecMail&mail,mailimap_body*body,RecBody&target_body,int current_recursion,QValueList<int>recList,int current_count=1); 63 void traverseBody(const RecMail&mail,mailimap_body*body,RecBody&target_body,int current_recursion,QValueList<int>recList,int current_count=1);
63 64
64 /* just helpers */ 65 /* just helpers */
65 static void fillBodyFields(RecPart&target_part,mailimap_body_fields*which); 66 static void fillBodyFields(RecPart&target_part,mailimap_body_fields*which);
66 static QStringList address_list_to_stringlist(clist*list); 67 static QStringList address_list_to_stringlist(clist*list);
67 68
68 69
69 IMAPaccount *account; 70 IMAPaccount *account;
70 mailimap *m_imap; 71 mailimap *m_imap;
71}; 72};
72 73
73#endif 74#endif