summaryrefslogtreecommitdiff
authoralwin <alwin>2004-01-07 19:27:47 (UTC)
committer alwin <alwin>2004-01-07 19:27:47 (UTC)
commit24a62e8789083f446138aebfa11409b73886aa88 (patch) (unidiff)
tree177bd3de4ad46fd29e93b87c6a0423a4ca132682
parent7fdc50c5ff3fe42aba6d940165e99ed7150df4f1 (diff)
downloadopie-24a62e8789083f446138aebfa11409b73886aa88.zip
opie-24a62e8789083f446138aebfa11409b73886aa88.tar.gz
opie-24a62e8789083f446138aebfa11409b73886aa88.tar.bz2
download mail mostly finished
accounts can be switched "offline"
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/accountview.cpp234
-rw-r--r--noncore/net/mail/accountview.h71
-rw-r--r--noncore/net/mail/libmailwrapper/abstractmail.cpp9
-rw-r--r--noncore/net/mail/libmailwrapper/abstractmail.h4
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.cpp6
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.h2
-rw-r--r--noncore/net/mail/libmailwrapper/mboxwrapper.cpp9
-rw-r--r--noncore/net/mail/libmailwrapper/mboxwrapper.h6
-rw-r--r--noncore/net/mail/libmailwrapper/pop3wrapper.cpp6
-rw-r--r--noncore/net/mail/libmailwrapper/pop3wrapper.h1
-rw-r--r--noncore/net/mail/libmailwrapper/settings.cpp12
-rw-r--r--noncore/net/mail/libmailwrapper/settings.h5
-rw-r--r--noncore/net/mail/libmailwrapper/smtpwrapper.cpp10
-rw-r--r--noncore/net/mail/libmailwrapper/smtpwrapper.h4
-rw-r--r--noncore/net/mail/selectstore.cpp53
-rw-r--r--noncore/net/mail/selectstore.h18
-rw-r--r--noncore/net/mail/selectstoreui.ui43
17 files changed, 415 insertions, 78 deletions
diff --git a/noncore/net/mail/accountview.cpp b/noncore/net/mail/accountview.cpp
index faa6982..eea021f 100644
--- a/noncore/net/mail/accountview.cpp
+++ b/noncore/net/mail/accountview.cpp
@@ -1,693 +1,879 @@
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/** 10/**
11 * POP3 Account stuff 11 * POP3 Account stuff
12 */ 12 */
13POP3viewItem::POP3viewItem( POP3account *a, QListView *parent ) 13POP3viewItem::POP3viewItem( POP3account *a, AccountView *parent )
14 : AccountViewItem( parent ) 14 : AccountViewItem( parent )
15{ 15{
16 account = a; 16 account = a;
17 wrapper = AbstractMail::getWrapper( account ); 17 wrapper = AbstractMail::getWrapper( account );
18 setPixmap( 0, PIXMAP_POP3FOLDER ); 18 setPixmap( 0, PIXMAP_POP3FOLDER );
19 setText( 0, account->getAccountName() ); 19 setText( 0, account->getAccountName() );
20 setOpen( true ); 20 setOpen( true );
21} 21}
22 22
23POP3viewItem::~POP3viewItem() 23POP3viewItem::~POP3viewItem()
24{ 24{
25 delete wrapper; 25 delete wrapper;
26} 26}
27 27
28AbstractMail *POP3viewItem::getWrapper() 28AbstractMail *POP3viewItem::getWrapper()
29{ 29{
30 return wrapper; 30 return wrapper;
31} 31}
32 32
33void POP3viewItem::refresh( QList<RecMail> & ) 33void POP3viewItem::refresh( QList<RecMail> & )
34{ 34{
35 if (account->getOffline()) return;
35 QList<Folder> *folders = wrapper->listFolders(); 36 QList<Folder> *folders = wrapper->listFolders();
36 QListViewItem *child = firstChild(); 37 QListViewItem *child = firstChild();
37 while ( child ) { 38 while ( child ) {
38 QListViewItem *tmp = child; 39 QListViewItem *tmp = child;
39 child = child->nextSibling(); 40 child = child->nextSibling();
40 delete tmp; 41 delete tmp;
41 } 42 }
42 Folder *it; 43 Folder *it;
43 QListViewItem*item = 0; 44 QListViewItem*item = 0;
44 for ( it = folders->first(); it; it = folders->next() ) { 45 for ( it = folders->first(); it; it = folders->next() ) {
45 item = new POP3folderItem( it, this , item ); 46 item = new POP3folderItem( it, this , item );
46 item->setSelectable(it->may_select()); 47 item->setSelectable(it->may_select());
47 } 48 }
48 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 49 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
49 folders->setAutoDelete(false); 50 folders->setAutoDelete(false);
50 delete folders; 51 delete folders;
51} 52}
52 53
53RecBody POP3viewItem::fetchBody( const RecMail &mail ) 54RecBody POP3viewItem::fetchBody( const RecMail &mail )
54{ 55{
55 qDebug( "POP3 fetchBody" ); 56 qDebug( "POP3 fetchBody" );
56 return wrapper->fetchBody( mail ); 57 return wrapper->fetchBody( mail );
57} 58}
58 59
60QPopupMenu * POP3viewItem::getContextMenu()
61{
62 QPopupMenu *m = new QPopupMenu(0);
63 if (m) {
64 if (!account->getOffline()) {
65 m->insertItem(QObject::tr("Disconnect",contextName),0);
66 m->insertItem(QObject::tr("Set offline",contextName),1);
67 } else {
68 m->insertItem(QObject::tr("Set online",contextName),1);
69 }
70 }
71 return m;
72}
73
74void POP3viewItem::disconnect()
75{
76 QListViewItem *child = firstChild();
77 while ( child ) {
78 QListViewItem *tmp = child;
79 child = child->nextSibling();
80 delete tmp;
81 }
82 wrapper->logout();
83}
84
85void POP3viewItem::setOnOffline()
86{
87 if (!account->getOffline()) {
88 disconnect();
89 }
90 account->setOffline(!account->getOffline());
91 account->save();
92}
93
94void POP3viewItem::contextMenuSelected(int which)
95{
96 switch (which) {
97 case 0:
98 disconnect();
99 break;
100 case 1:
101 setOnOffline();
102 break;
103 }
104}
105
59POP3folderItem::~POP3folderItem() 106POP3folderItem::~POP3folderItem()
60{ 107{
61 delete folder; 108 delete folder;
62} 109}
63 110
64POP3folderItem::POP3folderItem( Folder *folderInit, POP3viewItem *parent , QListViewItem*after ) 111POP3folderItem::POP3folderItem( Folder *folderInit, POP3viewItem *parent , QListViewItem*after )
65 : AccountViewItem( parent,after ) 112 : AccountViewItem( parent,after )
66{ 113{
67 folder = folderInit; 114 folder = folderInit;
68 pop3 = parent; 115 pop3 = parent;
69 if (folder->getDisplayName().lower()!="inbox") { 116 if (folder->getDisplayName().lower()!="inbox") {
70 setPixmap( 0, PIXMAP_POP3FOLDER ); 117 setPixmap( 0, PIXMAP_POP3FOLDER );
71 } else { 118 } else {
72 setPixmap( 0, PIXMAP_INBOXFOLDER); 119 setPixmap( 0, PIXMAP_INBOXFOLDER);
73 } 120 }
74 setText( 0, folder->getDisplayName() ); 121 setText( 0, folder->getDisplayName() );
75} 122}
76 123
77void POP3folderItem::refresh(QList<RecMail>&target) 124void POP3folderItem::refresh(QList<RecMail>&target)
78{ 125{
79 if (folder->may_select()) 126 if (folder->may_select())
80 pop3->getWrapper()->listMessages( folder->getName(),target ); 127 pop3->getWrapper()->listMessages( folder->getName(),target );
81} 128}
82 129
83RecBody POP3folderItem::fetchBody(const RecMail&aMail) 130RecBody POP3folderItem::fetchBody(const RecMail&aMail)
84{ 131{
85 return pop3->getWrapper()->fetchBody(aMail); 132 return pop3->getWrapper()->fetchBody(aMail);
86} 133}
87 134
88QPopupMenu * POP3folderItem::getContextMenu() 135QPopupMenu * POP3folderItem::getContextMenu()
89{ 136{
90 QPopupMenu *m = new QPopupMenu(0); 137 QPopupMenu *m = new QPopupMenu(0);
91 if (m) { 138 if (m) {
92 m->insertItem(QObject::tr("Refresh header list",contextName),0); 139 m->insertItem(QObject::tr("Refresh header list",contextName),0);
93 m->insertItem(QObject::tr("Delete all mails",contextName),1); 140 m->insertItem(QObject::tr("Delete all mails",contextName),1);
94 m->insertItem(QObject::tr("Download all mails",contextName),2); 141 m->insertItem(QObject::tr("Move/Copie all mails",contextName),2);
95 } 142 }
96 return m; 143 return m;
97} 144}
98 145
99void POP3folderItem::downloadMails() 146void POP3folderItem::downloadMails()
100{ 147{
101 Selectstore sels; 148 AccountView*bl = pop3->accountView();
102 sels.showMaximized(); 149 if (!bl) return;
103 sels.exec(); 150 bl->downloadMails(folder,pop3->getWrapper());
104} 151}
105 152
106void POP3folderItem::contextMenuSelected(int which) 153void POP3folderItem::contextMenuSelected(int which)
107{ 154{
108 AccountView * view = (AccountView*)listView(); 155 AccountView * view = (AccountView*)listView();
109 switch (which) { 156 switch (which) {
110 case 0: 157 case 0:
111 /* must be 'cause pop3 lists are cached */ 158 /* must be 'cause pop3 lists are cached */
112 pop3->getWrapper()->logout(); 159 pop3->getWrapper()->logout();
113 view->refreshCurrent(); 160 view->refreshCurrent();
114 break; 161 break;
115 case 1: 162 case 1:
116 deleteAllMail(pop3->getWrapper(),folder); 163 deleteAllMail(pop3->getWrapper(),folder);
117 break; 164 break;
118 case 2: 165 case 2:
119 downloadMails(); 166 downloadMails();
120 break; 167 break;
121 default: 168 default:
122 break; 169 break;
123 } 170 }
124} 171}
125 172
126/** 173/**
127 * IMAP Account stuff 174 * IMAP Account stuff
128 */ 175 */
129IMAPviewItem::IMAPviewItem( IMAPaccount *a, QListView *parent ) 176IMAPviewItem::IMAPviewItem( IMAPaccount *a, AccountView *parent )
130 : AccountViewItem( parent ) 177 : AccountViewItem( parent )
131{ 178{
132 account = a; 179 account = a;
133 wrapper = AbstractMail::getWrapper( account ); 180 wrapper = AbstractMail::getWrapper( account );
134 setPixmap( 0, PIXMAP_IMAPFOLDER ); 181 setPixmap( 0, PIXMAP_IMAPFOLDER );
135 setText( 0, account->getAccountName() ); 182 setText( 0, account->getAccountName() );
136 setOpen( true ); 183 setOpen( true );
137} 184}
138 185
139IMAPviewItem::~IMAPviewItem() 186IMAPviewItem::~IMAPviewItem()
140{ 187{
141 delete wrapper; 188 delete wrapper;
142} 189}
143 190
144AbstractMail *IMAPviewItem::getWrapper() 191AbstractMail *IMAPviewItem::getWrapper()
145{ 192{
146 return wrapper; 193 return wrapper;
147} 194}
148 195
149IMAPfolderItem*IMAPviewItem::findSubItem(const QString&path,IMAPfolderItem*start) 196IMAPfolderItem*IMAPviewItem::findSubItem(const QString&path,IMAPfolderItem*start)
150{ 197{
151 IMAPfolderItem*pitem,*sitem; 198 IMAPfolderItem*pitem,*sitem;
152 if (!start) pitem = (IMAPfolderItem*)firstChild(); 199 if (!start) pitem = (IMAPfolderItem*)firstChild();
153 else pitem = (IMAPfolderItem*)start->firstChild(); 200 else pitem = (IMAPfolderItem*)start->firstChild();
154 while (pitem) { 201 while (pitem) {
155 if (pitem->matchName(path)) { 202 if (pitem->matchName(path)) {
156 break; 203 break;
157 } 204 }
158 if (pitem->childCount()>0) { 205 if (pitem->childCount()>0) {
159 sitem = findSubItem(path,pitem); 206 sitem = findSubItem(path,pitem);
160 if (sitem) { 207 if (sitem) {
161 pitem = sitem; 208 pitem = sitem;
162 break; 209 break;
163 } 210 }
164 } 211 }
165 pitem=(IMAPfolderItem*)pitem->nextSibling(); 212 pitem=(IMAPfolderItem*)pitem->nextSibling();
166 } 213 }
167 return pitem; 214 return pitem;
168} 215}
169 216
170void IMAPviewItem::refresh(QList<RecMail>&) 217void IMAPviewItem::refresh(QList<RecMail>&)
171{ 218{
172 refreshFolders(false); 219 refreshFolders(false);
173} 220}
174 221
175void IMAPviewItem::removeChilds() 222void IMAPviewItem::removeChilds()
176{ 223{
177 QListViewItem *child = firstChild(); 224 QListViewItem *child = firstChild();
178 while ( child ) { 225 while ( child ) {
179 QListViewItem *tmp = child; 226 QListViewItem *tmp = child;
180 child = child->nextSibling(); 227 child = child->nextSibling();
181 delete tmp; 228 delete tmp;
182 } 229 }
183 230
184} 231}
185 232
233const QStringList&IMAPviewItem::subFolders()
234{
235 return currentFolders;
236}
237
186void IMAPviewItem::refreshFolders(bool force) 238void IMAPviewItem::refreshFolders(bool force)
187{ 239{
188 if (childCount()>0 && force==false) return; 240 if (childCount()>0 && force==false) return;
189 241 if (account->getOffline()) return;
190 removeChilds();
191 242
243 removeChilds();
244 currentFolders.clear();
192 QList<Folder> *folders = wrapper->listFolders(); 245 QList<Folder> *folders = wrapper->listFolders();
193 246
194 Folder *it; 247 Folder *it;
195 QListViewItem*item = 0; 248 QListViewItem*item = 0;
196 QListViewItem*titem = 0; 249 QListViewItem*titem = 0;
197 QString fname,del,search; 250 QString fname,del,search;
198 int pos; 251 int pos;
199 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 252 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
200 folders->setAutoDelete(false); 253 folders->setAutoDelete(false);
201 254
202 for ( it = folders->first(); it; it = folders->next() ) { 255 for ( it = folders->first(); it; it = folders->next() ) {
203 if (it->getDisplayName().lower()=="inbox") { 256 if (it->getDisplayName().lower()=="inbox") {
204 item = new IMAPfolderItem( it, this , item ); 257 item = new IMAPfolderItem( it, this , item );
205 folders->remove(it); 258 folders->remove(it);
206 qDebug("inbox found"); 259 qDebug("inbox found");
207 break; 260 break;
208 } 261 }
209 } 262 }
210 for ( it = folders->first(); it; it = folders->next() ) { 263 for ( it = folders->first(); it; it = folders->next() ) {
211 fname = it->getDisplayName(); 264 fname = it->getDisplayName();
265 currentFolders.append(it->getName());
212 pos = fname.findRev(it->Separator()); 266 pos = fname.findRev(it->Separator());
213 if (pos != -1) { 267 if (pos != -1) {
214 fname = fname.left(pos); 268 fname = fname.left(pos);
215 } 269 }
216 IMAPfolderItem*pitem = findSubItem(fname); 270 IMAPfolderItem*pitem = findSubItem(fname);
217 if (pitem) { 271 if (pitem) {
218 titem = item; 272 titem = item;
219 item = new IMAPfolderItem(it,pitem,pitem->firstChild(),this); 273 item = new IMAPfolderItem(it,pitem,pitem->firstChild(),this);
220 /* setup the short name */ 274 /* setup the short name */
221 item->setText(0,it->getDisplayName().right(it->getDisplayName().length()-pos-1)); 275 item->setText(0,it->getDisplayName().right(it->getDisplayName().length()-pos-1));
222 item = titem; 276 item = titem;
223 } else { 277 } else {
224 item = new IMAPfolderItem( it, this , item ); 278 item = new IMAPfolderItem( it, this , item );
225 } 279 }
226 } 280 }
227 delete folders; 281 delete folders;
228} 282}
229 283
230QPopupMenu * IMAPviewItem::getContextMenu() 284QPopupMenu * IMAPviewItem::getContextMenu()
231{ 285{
232 QPopupMenu *m = new QPopupMenu(0); 286 QPopupMenu *m = new QPopupMenu(0);
233 if (m) { 287 if (m) {
234 m->insertItem(QObject::tr("Refresh folder list",contextName),0); 288 if (!account->getOffline()) {
235 m->insertItem(QObject::tr("Create new folder",contextName),1); 289 m->insertItem(QObject::tr("Refresh folder list",contextName),0);
236 m->insertSeparator(); 290 m->insertItem(QObject::tr("Create new folder",contextName),1);
237 m->insertItem(QObject::tr("Disconnect",contextName),2); 291 m->insertSeparator();
292 m->insertItem(QObject::tr("Disconnect",contextName),2);
293 m->insertItem(QObject::tr("Set offline",contextName),3);
294 } else {
295 m->insertItem(QObject::tr("Set online",contextName),3);
296 }
238 } 297 }
239 return m; 298 return m;
240} 299}
241 300
242void IMAPviewItem::createNewFolder() 301void IMAPviewItem::createNewFolder()
243{ 302{
244 Newmdirdlg ndirdlg; 303 Newmdirdlg ndirdlg;
245 ndirdlg.showMaximized(); 304 ndirdlg.showMaximized();
246 if (ndirdlg.exec()) { 305 if (ndirdlg.exec()) {
247 QString ndir = ndirdlg.Newdir(); 306 QString ndir = ndirdlg.Newdir();
248 bool makesubs = ndirdlg.subpossible(); 307 bool makesubs = ndirdlg.subpossible();
249 QString delemiter = "/"; 308 QString delemiter = "/";
250 IMAPfolderItem*item = (IMAPfolderItem*)firstChild(); 309 IMAPfolderItem*item = (IMAPfolderItem*)firstChild();
251 if (item) { 310 if (item) {
252 delemiter = item->Delemiter(); 311 delemiter = item->Delemiter();
253 } 312 }
254 if (wrapper->createMbox(ndir,0,delemiter,makesubs)) { 313 if (wrapper->createMbox(ndir,0,delemiter,makesubs)) {
255 refreshFolders(true); 314 refreshFolders(true);
256 } 315 }
257 } 316 }
258} 317}
259 318
260void IMAPviewItem::contextMenuSelected(int id) 319void IMAPviewItem::contextMenuSelected(int id)
261{ 320{
262 qDebug("Id selected: %i",id); 321 qDebug("Id selected: %i",id);
263 switch (id) { 322 switch (id) {
264 case 0: 323 case 0:
265 refreshFolders(true); 324 refreshFolders(true);
266 break; 325 break;
267 case 1: 326 case 1:
268 createNewFolder(); 327 createNewFolder();
269 break; 328 break;
270 case 2: 329 case 2:
271 removeChilds(); 330 removeChilds();
272 wrapper->logout(); 331 wrapper->logout();
273 break; 332 break;
333 case 3:
334 if (account->getOffline()==false) {
335 removeChilds();
336 wrapper->logout();
337 }
338 account->setOffline(!account->getOffline());
339 account->save();
340 refreshFolders(false);
341 break;
274 default: 342 default:
275 break; 343 break;
276 } 344 }
277} 345}
278 346
279RecBody IMAPviewItem::fetchBody(const RecMail&) 347RecBody IMAPviewItem::fetchBody(const RecMail&)
280{ 348{
281 return RecBody(); 349 return RecBody();
282} 350}
283 351
284IMAPfolderItem::~IMAPfolderItem() 352bool IMAPviewItem::offline()
285{ 353{
286 delete folder; 354 return account->getOffline();
287} 355}
288 356
289IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPviewItem *parent , QListViewItem*after ) 357IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPviewItem *parent , QListViewItem*after )
290 : AccountViewItem( parent , after ) 358 : AccountViewItem( parent , after )
291{ 359{
292 folder = folderInit; 360 folder = folderInit;
293 imap = parent; 361 imap = parent;
294 if (folder->getDisplayName().lower()!="inbox") { 362 if (folder->getDisplayName().lower()!="inbox") {
295 setPixmap( 0, PIXMAP_IMAPFOLDER ); 363 setPixmap( 0, PIXMAP_IMAPFOLDER );
296 } else { 364 } else {
297 setPixmap( 0, PIXMAP_INBOXFOLDER); 365 setPixmap( 0, PIXMAP_INBOXFOLDER);
298 } 366 }
299 setText( 0, folder->getDisplayName() ); 367 setText( 0, folder->getDisplayName() );
300} 368}
301 369
302IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master ) 370IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master )
303 : AccountViewItem( parent,after ) 371 : AccountViewItem( parent,after )
304{ 372{
305 folder = folderInit; 373 folder = folderInit;
306 imap = master; 374 imap = master;
307 if (folder->getDisplayName().lower()!="inbox") { 375 if (folder->getDisplayName().lower()!="inbox") {
308 setPixmap( 0, PIXMAP_IMAPFOLDER ); 376 setPixmap( 0, PIXMAP_IMAPFOLDER );
309 } else { 377 } else {
310 setPixmap( 0, PIXMAP_INBOXFOLDER); 378 setPixmap( 0, PIXMAP_INBOXFOLDER);
311 } 379 }
312 setText( 0, folder->getDisplayName() ); 380 setText( 0, folder->getDisplayName() );
313} 381}
314 382
383IMAPfolderItem::~IMAPfolderItem()
384{
385 delete folder;
386}
387
315const QString& IMAPfolderItem::Delemiter()const 388const QString& IMAPfolderItem::Delemiter()const
316{ 389{
317 return folder->Separator(); 390 return folder->Separator();
318} 391}
319 392
320bool IMAPfolderItem::matchName(const QString&name)const 393bool IMAPfolderItem::matchName(const QString&name)const
321{ 394{
322 return folder->getDisplayName()==name; 395 return folder->getDisplayName()==name;
323} 396}
324 397
325void IMAPfolderItem::refresh(QList<RecMail>&target) 398void IMAPfolderItem::refresh(QList<RecMail>&target)
326{ 399{
327 if (folder->may_select()) { 400 if (folder->may_select()) {
328 imap->getWrapper()->listMessages( folder->getName(),target ); 401 imap->getWrapper()->listMessages( folder->getName(),target );
329 } else { 402 } else {
330 target.clear(); 403 target.clear();
331 } 404 }
332} 405}
333 406
334RecBody IMAPfolderItem::fetchBody(const RecMail&aMail) 407RecBody IMAPfolderItem::fetchBody(const RecMail&aMail)
335{ 408{
336 return imap->getWrapper()->fetchBody(aMail); 409 return imap->getWrapper()->fetchBody(aMail);
337} 410}
338 411
339QPopupMenu * IMAPfolderItem::getContextMenu() 412QPopupMenu * IMAPfolderItem::getContextMenu()
340{ 413{
341 QPopupMenu *m = new QPopupMenu(0); 414 QPopupMenu *m = new QPopupMenu(0);
342 if (m) { 415 if (m) {
343 if (folder->may_select()) { 416 if (folder->may_select()) {
344 m->insertItem(QObject::tr("Refresh header list",contextName),0); 417 m->insertItem(QObject::tr("Refresh header list",contextName),0);
418 m->insertItem(QObject::tr("Move/Copie all mails",contextName),4);
345 m->insertItem(QObject::tr("Delete all mails",contextName),1); 419 m->insertItem(QObject::tr("Delete all mails",contextName),1);
346 } 420 }
347 if (folder->no_inferior()==false) { 421 if (folder->no_inferior()==false) {
348 m->insertItem(QObject::tr("Create new subfolder",contextName),2); 422 m->insertItem(QObject::tr("Create new subfolder",contextName),2);
349 } 423 }
350 if (folder->getDisplayName().lower()!="inbox") { 424 if (folder->getDisplayName().lower()!="inbox") {
351 m->insertItem(QObject::tr("Delete folder",contextName),3); 425 m->insertItem(QObject::tr("Delete folder",contextName),3);
352 } 426 }
353 } 427 }
354 return m; 428 return m;
355} 429}
356 430
357void IMAPfolderItem::createNewFolder() 431void IMAPfolderItem::createNewFolder()
358{ 432{
359 Newmdirdlg ndirdlg; 433 Newmdirdlg ndirdlg;
360 ndirdlg.showMaximized(); 434 ndirdlg.showMaximized();
361 if (ndirdlg.exec()) { 435 if (ndirdlg.exec()) {
362 QString ndir = ndirdlg.Newdir(); 436 QString ndir = ndirdlg.Newdir();
363 bool makesubs = ndirdlg.subpossible(); 437 bool makesubs = ndirdlg.subpossible();
364 QString delemiter = Delemiter(); 438 QString delemiter = Delemiter();
365 if (imap->wrapper->createMbox(ndir,folder,delemiter,makesubs)) { 439 if (imap->wrapper->createMbox(ndir,folder,delemiter,makesubs)) {
366 imap->refreshFolders(true); 440 imap->refreshFolders(true);
367 } 441 }
368 } 442 }
369} 443}
370 444
371void IMAPfolderItem::deleteFolder() 445void IMAPfolderItem::deleteFolder()
372{ 446{
373 int yesno = QMessageBox::warning(0,QObject::tr("Delete folder",contextName), 447 int yesno = QMessageBox::warning(0,QObject::tr("Delete folder",contextName),
374 QObject::tr("<center>Realy delete folder <br><b>%1</b><br>and all if it content?</center>",contextName).arg(folder->getDisplayName()), 448 QObject::tr("<center>Realy delete folder <br><b>%1</b><br>and all if it content?</center>",contextName).arg(folder->getDisplayName()),
375 QObject::tr("Yes",contextName), 449 QObject::tr("Yes",contextName),
376 QObject::tr("No",contextName),QString::null,1,1); 450 QObject::tr("No",contextName),QString::null,1,1);
377 qDebug("Auswahl: %i",yesno); 451 qDebug("Auswahl: %i",yesno);
378 if (yesno == 0) { 452 if (yesno == 0) {
379 if (imap->getWrapper()->deleteMbox(folder)) { 453 if (imap->getWrapper()->deleteMbox(folder)) {
380 QListView*v=listView(); 454 QListView*v=listView();
381 IMAPviewItem * box = imap; 455 IMAPviewItem * box = imap;
382 /* be carefull - after that this object is destroyd so don't use 456 /* be carefull - after that this object is destroyd so don't use
383 * any member of it after that call!!*/ 457 * any member of it after that call!!*/
384 imap->refreshFolders(true); 458 imap->refreshFolders(true);
385 if (v) { 459 if (v) {
386 v->setSelected(box,true); 460 v->setSelected(box,true);
387 } 461 }
388 } 462 }
389 } 463 }
390} 464}
391 465
466void IMAPfolderItem::downloadMails()
467{
468 AccountView*bl = imap->accountView();
469 if (!bl) return;
470 bl->downloadMails(folder,imap->getWrapper());
471}
472
392void IMAPfolderItem::contextMenuSelected(int id) 473void IMAPfolderItem::contextMenuSelected(int id)
393{ 474{
394 qDebug("Selected id: %i",id); 475 qDebug("Selected id: %i",id);
395 AccountView * view = (AccountView*)listView(); 476 AccountView * view = (AccountView*)listView();
396 switch(id) { 477 switch(id) {
397 case 0: 478 case 0:
398 view->refreshCurrent(); 479 view->refreshCurrent();
399 break; 480 break;
400 case 1: 481 case 1:
401 deleteAllMail(imap->getWrapper(),folder); 482 deleteAllMail(imap->getWrapper(),folder);
402 break; 483 break;
403 case 2: 484 case 2:
404 createNewFolder(); 485 createNewFolder();
405 break; 486 break;
406 case 3: 487 case 3:
407 deleteFolder(); 488 deleteFolder();
408 break; 489 break;
490 case 4:
491 downloadMails();
492 break;
409 default: 493 default:
410 break; 494 break;
411 } 495 }
412} 496}
413 497
414/** 498/**
415 * Generic stuff 499 * Generic stuff
416 */ 500 */
417 501
418const QString AccountViewItem::contextName="AccountViewItem"; 502const QString AccountViewItem::contextName="AccountViewItem";
419 503
504AccountViewItem::AccountViewItem( AccountView *parent )
505 : QListViewItem( parent )
506{
507 m_Backlink = parent;
508}
509
510AccountViewItem::AccountViewItem( QListViewItem *parent)
511 : QListViewItem( parent)
512{
513 m_Backlink = 0;
514}
515
516AccountViewItem::AccountViewItem( QListViewItem *parent , QListViewItem*after )
517 :QListViewItem( parent,after )
518{
519 m_Backlink = 0;
520}
521
522AccountViewItem::~AccountViewItem()
523{
524}
525
526AccountView*AccountViewItem::accountView()
527{
528 return m_Backlink;
529}
530
420void AccountViewItem::deleteAllMail(AbstractMail*wrapper,Folder*folder) 531void AccountViewItem::deleteAllMail(AbstractMail*wrapper,Folder*folder)
421{ 532{
422 if (!wrapper) return; 533 if (!wrapper) return;
423 QString fname=""; 534 QString fname="";
424 if (folder) fname = folder->getDisplayName(); 535 if (folder) fname = folder->getDisplayName();
425 int yesno = QMessageBox::warning(0,QObject::tr("Delete all mails",contextName), 536 int yesno = QMessageBox::warning(0,QObject::tr("Delete all mails",contextName),
426 QObject::tr("<center>Realy delete all mails in box <br>%1</center>",contextName). 537 QObject::tr("<center>Realy delete all mails in box <br>%1</center>",contextName).
427 arg(fname), 538 arg(fname),
428 QObject::tr("Yes",contextName), 539 QObject::tr("Yes",contextName),
429 QObject::tr("No",contextName),QString::null,1,1); 540 QObject::tr("No",contextName),QString::null,1,1);
430 qDebug("Auswahl: %i",yesno); 541 qDebug("Auswahl: %i",yesno);
431 if (yesno == 0) { 542 if (yesno == 0) {
432 if (wrapper->deleteAllMail(folder)) { 543 if (wrapper->deleteAllMail(folder)) {
433 AccountView * view = (AccountView*)listView(); 544 AccountView * view = (AccountView*)listView();
434 if (view) view->refreshCurrent(); 545 if (view) view->refreshCurrent();
435 } 546 }
436 } 547 }
437} 548}
438 549
439AccountView::AccountView( QWidget *parent, const char *name, WFlags flags ) 550AccountView::AccountView( QWidget *parent, const char *name, WFlags flags )
440 : QListView( parent, name, flags ) 551 : QListView( parent, name, flags )
441{ 552{
442 connect( this, SIGNAL( selectionChanged( QListViewItem * ) ), 553 connect( this, SIGNAL( selectionChanged( QListViewItem * ) ),
443 SLOT( refresh( QListViewItem * ) ) ); 554 SLOT( refresh( QListViewItem * ) ) );
444 connect( this, SIGNAL( mouseButtonPressed(int, QListViewItem *,const QPoint&,int ) ),this, 555 connect( this, SIGNAL( mouseButtonPressed(int, QListViewItem *,const QPoint&,int ) ),this,
445 SLOT( slotHold( int, QListViewItem *,const QPoint&,int ) ) ); 556 SLOT( slotHold( int, QListViewItem *,const QPoint&,int ) ) );
446 557
447 setSorting(0); 558 setSorting(0);
448} 559}
449 560
561AccountView::~AccountView()
562{
563 imapAccounts.clear();
564 mboxAccounts.clear();
565}
566
450void AccountView::slotContextMenu(int id) 567void AccountView::slotContextMenu(int id)
451{ 568{
452 AccountViewItem *view = static_cast<AccountViewItem *>(currentItem()); 569 AccountViewItem *view = static_cast<AccountViewItem *>(currentItem());
453 if (!view) return; 570 if (!view) return;
454 view->contextMenuSelected(id); 571 view->contextMenuSelected(id);
455} 572}
456 573
457void AccountView::slotHold(int button, QListViewItem * item,const QPoint&,int) 574void AccountView::slotHold(int button, QListViewItem * item,const QPoint&,int)
458{ 575{
459 if (button==1) {return;} 576 if (button==1) {return;}
460 if (!item) return; 577 if (!item) return;
461 AccountViewItem *view = static_cast<AccountViewItem *>(item); 578 AccountViewItem *view = static_cast<AccountViewItem *>(item);
462 QPopupMenu*m = view->getContextMenu(); 579 QPopupMenu*m = view->getContextMenu();
463 if (!m) return; 580 if (!m) return;
464 connect(m,SIGNAL(activated(int)),this,SLOT(slotContextMenu(int))); 581 connect(m,SIGNAL(activated(int)),this,SLOT(slotContextMenu(int)));
465 m->setFocus(); 582 m->setFocus();
466 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) ); 583 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) );
467 delete m; 584 delete m;
468} 585}
469 586
470void AccountView::populate( QList<Account> list ) 587void AccountView::populate( QList<Account> list )
471{ 588{
472 clear(); 589 clear();
473 590
474 (void) new MBOXviewItem(AbstractMail::defaultLocalfolder(),this); 591 imapAccounts.clear();
592 mboxAccounts.clear();
593
594 mboxAccounts.append(new MBOXviewItem(AbstractMail::defaultLocalfolder(),this));
475 595
476 Account *it; 596 Account *it;
477 for ( it = list.first(); it; it = list.next() ) { 597 for ( it = list.first(); it; it = list.next() ) {
478 if ( it->getType().compare( "IMAP" ) == 0 ) { 598 if ( it->getType().compare( "IMAP" ) == 0 ) {
479 IMAPaccount *imap = static_cast<IMAPaccount *>(it); 599 IMAPaccount *imap = static_cast<IMAPaccount *>(it);
480 qDebug( "added IMAP " + imap->getAccountName() ); 600 qDebug( "added IMAP " + imap->getAccountName() );
481 (void) new IMAPviewItem( imap, this ); 601 imapAccounts.append(new IMAPviewItem( imap, this ));
482 } else if ( it->getType().compare( "POP3" ) == 0 ) { 602 } else if ( it->getType().compare( "POP3" ) == 0 ) {
483 POP3account *pop3 = static_cast<POP3account *>(it); 603 POP3account *pop3 = static_cast<POP3account *>(it);
484 qDebug( "added POP3 " + pop3->getAccountName() ); 604 qDebug( "added POP3 " + pop3->getAccountName() );
605 /* must not be hold 'cause it isn't required */
485 (void) new POP3viewItem( pop3, this ); 606 (void) new POP3viewItem( pop3, this );
486 } 607 }
487 } 608 }
488} 609}
489 610
490void AccountView::refresh(QListViewItem *item) { 611void AccountView::refresh(QListViewItem *item) {
491 612
492 qDebug("AccountView refresh..."); 613 qDebug("AccountView refresh...");
493 if ( item ) { 614 if ( item ) {
494 m_currentItem = item; 615 m_currentItem = item;
495 QList<RecMail> headerlist; 616 QList<RecMail> headerlist;
496 headerlist.setAutoDelete(true); 617 headerlist.setAutoDelete(true);
497 AccountViewItem *view = static_cast<AccountViewItem *>(item); 618 AccountViewItem *view = static_cast<AccountViewItem *>(item);
498 view->refresh(headerlist); 619 view->refresh(headerlist);
499 emit refreshMailview(&headerlist); 620 emit refreshMailview(&headerlist);
500 } 621 }
501} 622}
502 623
503void AccountView::refreshCurrent() 624void AccountView::refreshCurrent()
504{ 625{
505 m_currentItem = currentItem(); 626 m_currentItem = currentItem();
506 if ( !m_currentItem ) return; 627 if ( !m_currentItem ) return;
507 QList<RecMail> headerlist; 628 QList<RecMail> headerlist;
508 headerlist.setAutoDelete(true); 629 headerlist.setAutoDelete(true);
509 AccountViewItem *view = static_cast<AccountViewItem *>(m_currentItem); 630 AccountViewItem *view = static_cast<AccountViewItem *>(m_currentItem);
510 view->refresh(headerlist); 631 view->refresh(headerlist);
511 emit refreshMailview(&headerlist); 632 emit refreshMailview(&headerlist);
512} 633}
513 634
514void AccountView::refreshAll() 635void AccountView::refreshAll()
515{ 636{
516 637
517} 638}
518 639
519RecBody AccountView::fetchBody(const RecMail&aMail) 640RecBody AccountView::fetchBody(const RecMail&aMail)
520{ 641{
521 QListViewItem*item = selectedItem (); 642 QListViewItem*item = selectedItem ();
522 if (!item) return RecBody(); 643 if (!item) return RecBody();
523 AccountViewItem *view = static_cast<AccountViewItem *>(item); 644 AccountViewItem *view = static_cast<AccountViewItem *>(item);
524 return view->fetchBody(aMail); 645 return view->fetchBody(aMail);
525} 646}
526 647
648void AccountView::setupFolderselect(Selectstore*sels)
649{
650 sels->showMaximized();
651 QStringList sFolders;
652 unsigned int i = 0;
653 for (i=0; i < mboxAccounts.count();++i) {
654 mboxAccounts[i]->refresh(false);
655 sFolders = mboxAccounts[i]->subFolders();
656 sels->addAccounts(mboxAccounts[i]->getWrapper(),sFolders);
657 }
658 for (i=0; i < imapAccounts.count();++i) {
659 if (imapAccounts[i]->offline())
660 continue;
661 imapAccounts[i]->refreshFolders(false);
662 sels->addAccounts(imapAccounts[i]->getWrapper(),imapAccounts[i]->subFolders());
663 }
664}
665
666void AccountView::downloadMails(Folder*fromFolder,AbstractMail*fromWrapper)
667{
668 unsigned int i = 0;
669 AbstractMail*targetMail = 0;
670 QString targetFolder = "";
671 Selectstore sels;
672 setupFolderselect(&sels);
673 if (!sels.exec()) return;
674 targetMail = sels.currentMail();
675 targetFolder = sels.currentFolder();
676 if ( (fromWrapper==targetMail && fromFolder->getName()==targetFolder) ||
677 targetFolder.isEmpty()) {
678 return;
679 }
680
681 QList<RecMail> t;
682 fromWrapper->listMessages(fromFolder->getName(),t);
683 encodedString*st = 0;
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 }
692}
693
527/** 694/**
528 * MBOX Account stuff 695 * MBOX Account stuff
529 */ 696 */
530 697
531MBOXviewItem::MBOXviewItem( const QString&aPath, QListView *parent ) 698MBOXviewItem::MBOXviewItem( const QString&aPath, AccountView *parent )
532 : AccountViewItem( parent ) 699 : AccountViewItem( parent )
533{ 700{
534 m_Path = aPath; 701 m_Path = aPath;
535 wrapper = AbstractMail::getWrapper( m_Path ); 702 /* be carefull - the space within settext is wanted - thats why the string twice */
703 wrapper = AbstractMail::getWrapper( m_Path,"Local Folders");
536 setPixmap( 0, PIXMAP_LOCALFOLDER ); 704 setPixmap( 0, PIXMAP_LOCALFOLDER );
537 setText( 0, " Local Folders" ); 705 setText( 0, " Local Folders" );
538 setOpen( true ); 706 setOpen( true );
539} 707}
540 708
541MBOXviewItem::~MBOXviewItem() 709MBOXviewItem::~MBOXviewItem()
542{ 710{
543 delete wrapper; 711 delete wrapper;
544} 712}
545 713
546AbstractMail *MBOXviewItem::getWrapper() 714AbstractMail *MBOXviewItem::getWrapper()
547{ 715{
548 return wrapper; 716 return wrapper;
549} 717}
550 718
551void MBOXviewItem::refresh( QList<RecMail> & ) 719void MBOXviewItem::refresh( QList<RecMail> & )
552{ 720{
553 refresh(false); 721 refresh(false);
554} 722}
555 723
556void MBOXviewItem::refresh(bool force) 724void MBOXviewItem::refresh(bool force)
557{ 725{
558 if (childCount()>0 && force==false) return; 726 if (childCount()>0 && force==false) return;
559 QList<Folder> *folders = wrapper->listFolders(); 727 QList<Folder> *folders = wrapper->listFolders();
560 QListViewItem *child = firstChild(); 728 QListViewItem *child = firstChild();
561 while ( child ) { 729 while ( child ) {
562 QListViewItem *tmp = child; 730 QListViewItem *tmp = child;
563 child = child->nextSibling(); 731 child = child->nextSibling();
564 delete tmp; 732 delete tmp;
565 } 733 }
566 Folder *it; 734 Folder *it;
567 QListViewItem*item = 0; 735 QListViewItem*item = 0;
568 for ( it = folders->first(); it; it = folders->next() ) { 736 for ( it = folders->first(); it; it = folders->next() ) {
569 item = new MBOXfolderItem( it, this , item ); 737 item = new MBOXfolderItem( it, this , item );
570 item->setSelectable(it->may_select()); 738 item->setSelectable(it->may_select());
571 } 739 }
572 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 740 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
573 folders->setAutoDelete(false); 741 folders->setAutoDelete(false);
574 delete folders; 742 delete folders;
575} 743}
576 744
577RecBody MBOXviewItem::fetchBody( const RecMail &mail ) 745RecBody MBOXviewItem::fetchBody( const RecMail &mail )
578{ 746{
579 qDebug( "MBOX fetchBody" ); 747 qDebug( "MBOX fetchBody" );
580 return wrapper->fetchBody( mail ); 748 return wrapper->fetchBody( mail );
581} 749}
582 750
583QPopupMenu * MBOXviewItem::getContextMenu() 751QPopupMenu * MBOXviewItem::getContextMenu()
584{ 752{
585 QPopupMenu *m = new QPopupMenu(0); 753 QPopupMenu *m = new QPopupMenu(0);
586 if (m) { 754 if (m) {
587 m->insertItem(QObject::tr("Refresh folder list",contextName),0); 755 m->insertItem(QObject::tr("Refresh folder list",contextName),0);
588 m->insertItem(QObject::tr("Create new folder",contextName),1); 756 m->insertItem(QObject::tr("Create new folder",contextName),1);
589 } 757 }
590 return m; 758 return m;
591} 759}
592 760
593void MBOXviewItem::createFolder() 761void MBOXviewItem::createFolder()
594{ 762{
595 Newmdirdlg ndirdlg(0,0,true); 763 Newmdirdlg ndirdlg(0,0,true);
596 ndirdlg.showMaximized(); 764 ndirdlg.showMaximized();
597 if (ndirdlg.exec()) { 765 if (ndirdlg.exec()) {
598 QString ndir = ndirdlg.Newdir(); 766 QString ndir = ndirdlg.Newdir();
599 if (wrapper->createMbox(ndir)) { 767 if (wrapper->createMbox(ndir)) {
600 refresh(true); 768 refresh(true);
601 } 769 }
602 } 770 }
603} 771}
604 772
773QStringList MBOXviewItem::subFolders()
774{
775 QStringList result;
776 QListViewItem *child = firstChild();
777 while ( child ) {
778 MBOXfolderItem *tmp = (MBOXfolderItem*)child;
779 child = child->nextSibling();
780 result.append(tmp->getFolder()->getName());
781 }
782 qDebug("Size of result: %i",result.count());
783 return result;
784}
785
605void MBOXviewItem::contextMenuSelected(int which) 786void MBOXviewItem::contextMenuSelected(int which)
606{ 787{
607 switch (which) { 788 switch (which) {
608 case 0: 789 case 0:
609 refresh(true); 790 refresh(true);
610 break; 791 break;
611 case 1: 792 case 1:
612 createFolder(); 793 createFolder();
613 break; 794 break;
614 default: 795 default:
615 break; 796 break;
616 } 797 }
617} 798}
618 799
619MBOXfolderItem::~MBOXfolderItem() 800MBOXfolderItem::~MBOXfolderItem()
620{ 801{
621 delete folder; 802 delete folder;
622} 803}
623 804
624MBOXfolderItem::MBOXfolderItem( Folder *folderInit, MBOXviewItem *parent , QListViewItem*after ) 805MBOXfolderItem::MBOXfolderItem( Folder *folderInit, MBOXviewItem *parent , QListViewItem*after )
625 : AccountViewItem( parent,after ) 806 : AccountViewItem( parent,after )
626{ 807{
627 folder = folderInit; 808 folder = folderInit;
628 mbox = parent; 809 mbox = parent;
629 if (folder->getDisplayName().lower() == "outgoing") { 810 if (folder->getDisplayName().lower() == "outgoing") {
630 setPixmap( 0, PIXMAP_OUTBOXFOLDER ); 811 setPixmap( 0, PIXMAP_OUTBOXFOLDER );
631 } else if (folder->getDisplayName().lower() == "inbox") { 812 } else if (folder->getDisplayName().lower() == "inbox") {
632 setPixmap( 0, PIXMAP_INBOXFOLDER); 813 setPixmap( 0, PIXMAP_INBOXFOLDER);
633 } else { 814 } else {
634 setPixmap( 0, PIXMAP_MBOXFOLDER ); 815 setPixmap( 0, PIXMAP_MBOXFOLDER );
635 } 816 }
636 setText( 0, folder->getDisplayName() ); 817 setText( 0, folder->getDisplayName() );
637} 818}
638 819
820Folder*MBOXfolderItem::getFolder()
821{
822 return folder;
823}
824
639void MBOXfolderItem::refresh(QList<RecMail>&target) 825void MBOXfolderItem::refresh(QList<RecMail>&target)
640{ 826{
641 if (folder->may_select()) 827 if (folder->may_select())
642 mbox->getWrapper()->listMessages( folder->getName(),target ); 828 mbox->getWrapper()->listMessages( folder->getName(),target );
643} 829}
644 830
645RecBody MBOXfolderItem::fetchBody(const RecMail&aMail) 831RecBody MBOXfolderItem::fetchBody(const RecMail&aMail)
646{ 832{
647 return mbox->getWrapper()->fetchBody(aMail); 833 return mbox->getWrapper()->fetchBody(aMail);
648} 834}
649 835
650void MBOXfolderItem::deleteFolder() 836void MBOXfolderItem::deleteFolder()
651{ 837{
652 int yesno = QMessageBox::warning(0,QObject::tr("Delete folder",contextName), 838 int yesno = QMessageBox::warning(0,QObject::tr("Delete folder",contextName),
653 QObject::tr("<center>Realy delete folder <br><b>%1</b><br>and all if it content?</center>",contextName).arg(folder->getDisplayName()), 839 QObject::tr("<center>Realy delete folder <br><b>%1</b><br>and all if it content?</center>",contextName).arg(folder->getDisplayName()),
654 QObject::tr("Yes",contextName), 840 QObject::tr("Yes",contextName),
655 QObject::tr("No",contextName),QString::null,1,1); 841 QObject::tr("No",contextName),QString::null,1,1);
656 qDebug("Auswahl: %i",yesno); 842 qDebug("Auswahl: %i",yesno);
657 if (yesno == 0) { 843 if (yesno == 0) {
658 if (mbox->getWrapper()->deleteMbox(folder)) { 844 if (mbox->getWrapper()->deleteMbox(folder)) {
659 QListView*v=listView(); 845 QListView*v=listView();
660 MBOXviewItem * box = mbox; 846 MBOXviewItem * box = mbox;
661 /* be carefull - after that this object is destroyd so don't use 847 /* be carefull - after that this object is destroyd so don't use
662 * any member of it after that call!!*/ 848 * any member of it after that call!!*/
663 mbox->refresh(true); 849 mbox->refresh(true);
664 if (v) { 850 if (v) {
665 v->setSelected(box,true); 851 v->setSelected(box,true);
666 } 852 }
667 } 853 }
668 } 854 }
669} 855}
670 856
671QPopupMenu * MBOXfolderItem::getContextMenu() 857QPopupMenu * MBOXfolderItem::getContextMenu()
672{ 858{
673 QPopupMenu *m = new QPopupMenu(0); 859 QPopupMenu *m = new QPopupMenu(0);
674 if (m) { 860 if (m) {
675 m->insertItem(QObject::tr("Delete all mails",contextName),0); 861 m->insertItem(QObject::tr("Delete all mails",contextName),0);
676 m->insertItem(QObject::tr("Delete folder",contextName),1); 862 m->insertItem(QObject::tr("Delete folder",contextName),1);
677 } 863 }
678 return m; 864 return m;
679} 865}
680 866
681void MBOXfolderItem::contextMenuSelected(int which) 867void MBOXfolderItem::contextMenuSelected(int which)
682{ 868{
683 switch(which) { 869 switch(which) {
684 case 0: 870 case 0:
685 deleteAllMail(mbox->getWrapper(),folder); 871 deleteAllMail(mbox->getWrapper(),folder);
686 break; 872 break;
687 case 1: 873 case 1:
688 deleteFolder(); 874 deleteFolder();
689 break; 875 break;
690 default: 876 default:
691 break; 877 break;
692 } 878 }
693} 879}
diff --git a/noncore/net/mail/accountview.h b/noncore/net/mail/accountview.h
index 7131192..48f52c7 100644
--- a/noncore/net/mail/accountview.h
+++ b/noncore/net/mail/accountview.h
@@ -1,179 +1,188 @@
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;
16class AccountView;
15 17
16class AccountViewItem : public QListViewItem 18class AccountViewItem : public QListViewItem
17{ 19{
18 20
19public: 21public:
20 AccountViewItem( QListView *parent ) : QListViewItem( parent ) {} 22 AccountViewItem( AccountView *parent );
21 AccountViewItem( QListViewItem *parent) : QListViewItem( parent) {} 23 AccountViewItem( QListViewItem *parent);
22 AccountViewItem( QListViewItem *parent , QListViewItem*after ) : QListViewItem( parent,after ) {} 24 AccountViewItem( QListViewItem *parent , QListViewItem*after );
25 virtual ~AccountViewItem();
23 virtual void refresh(QList<RecMail>&)=0; 26 virtual void refresh(QList<RecMail>&)=0;
24 virtual RecBody fetchBody(const RecMail&)=0; 27 virtual RecBody fetchBody(const RecMail&)=0;
25 virtual QPopupMenu * getContextMenu(){return 0;}; 28 virtual QPopupMenu * getContextMenu(){return 0;};
26 virtual void contextMenuSelected(int){} 29 virtual void contextMenuSelected(int){}
30 virtual AccountView*accountView();
27protected: 31protected:
28 virtual void deleteAllMail(AbstractMail*wrapper,Folder*f); 32 virtual void deleteAllMail(AbstractMail*wrapper,Folder*f);
29 static const QString contextName; 33 static const QString contextName;
34 AccountView*m_Backlink;
30}; 35};
31 36
32class POP3viewItem : public AccountViewItem 37class POP3viewItem : public AccountViewItem
33{ 38{
34 39
35public: 40public:
36 POP3viewItem( POP3account *a, QListView *parent ); 41 POP3viewItem( POP3account *a, AccountView *parent );
37 ~POP3viewItem(); 42 virtual ~POP3viewItem();
38 virtual void refresh( QList<RecMail> &target ); 43 virtual void refresh( QList<RecMail> &target );
39 virtual RecBody fetchBody( const RecMail &mail ); 44 virtual RecBody fetchBody( const RecMail &mail );
40 AbstractMail *getWrapper(); 45 AbstractMail *getWrapper();
41private: 46 virtual QPopupMenu * getContextMenu();
47 virtual void contextMenuSelected(int);
48
49protected:
42 POP3account *account; 50 POP3account *account;
43 AbstractMail *wrapper; 51 AbstractMail *wrapper;
44 52 void disconnect();
53 void setOnOffline();
45}; 54};
46 55
47class POP3folderItem : public AccountViewItem 56class POP3folderItem : public AccountViewItem
48{ 57{
49 58
50public: 59public:
51 POP3folderItem( Folder *folder, POP3viewItem *parent , QListViewItem*after ); 60 POP3folderItem( Folder *folder, POP3viewItem *parent , QListViewItem*after );
52 ~POP3folderItem(); 61 virtual ~POP3folderItem();
53 virtual void refresh(QList<RecMail>&); 62 virtual void refresh(QList<RecMail>&);
54 virtual RecBody fetchBody(const RecMail&); 63 virtual RecBody fetchBody(const RecMail&);
55 virtual QPopupMenu * getContextMenu(); 64 virtual QPopupMenu * getContextMenu();
56 virtual void contextMenuSelected(int); 65 virtual void contextMenuSelected(int);
57 66
58protected: 67protected:
59 void downloadMails(); 68 void downloadMails();
60
61private:
62 Folder *folder; 69 Folder *folder;
63 POP3viewItem *pop3; 70 POP3viewItem *pop3;
64}; 71};
65 72
66class IMAPfolderItem; 73class IMAPfolderItem;
67 74
68class IMAPviewItem : public AccountViewItem 75class IMAPviewItem : public AccountViewItem
69{ 76{
70 friend class IMAPfolderItem; 77 friend class IMAPfolderItem;
71public: 78public:
72 IMAPviewItem( IMAPaccount *a, QListView *parent ); 79 IMAPviewItem( IMAPaccount *a, AccountView *parent );
73 ~IMAPviewItem(); 80 virtual ~IMAPviewItem();
74 virtual void refresh(QList<RecMail>&); 81 virtual void refresh(QList<RecMail>&);
75 virtual RecBody fetchBody(const RecMail&); 82 virtual RecBody fetchBody(const RecMail&);
76 AbstractMail *getWrapper(); 83 AbstractMail *getWrapper();
77 virtual QPopupMenu * getContextMenu(); 84 virtual QPopupMenu * getContextMenu();
78 virtual void contextMenuSelected(int); 85 virtual void contextMenuSelected(int);
86 const QStringList&subFolders();
87 virtual void refreshFolders(bool force=false);
88 bool offline();
79 89
80protected: 90protected:
81 IMAPfolderItem*findSubItem(const QString&path,IMAPfolderItem*start=0); 91 IMAPfolderItem*findSubItem(const QString&path,IMAPfolderItem*start=0);
82 virtual void refreshFolders(bool force=false);
83 virtual void createNewFolder(); 92 virtual void createNewFolder();
84 virtual void removeChilds(); 93 virtual void removeChilds();
85
86private:
87 IMAPaccount *account; 94 IMAPaccount *account;
88 AbstractMail *wrapper; 95 AbstractMail *wrapper;
96 QStringList currentFolders;
89}; 97};
90 98
91class IMAPfolderItem : public AccountViewItem 99class IMAPfolderItem : public AccountViewItem
92{ 100{
93 101
94public: 102public:
95 IMAPfolderItem( Folder *folder, IMAPviewItem *parent , QListViewItem*after ); 103 IMAPfolderItem( Folder *folder, IMAPviewItem *parent , QListViewItem*after );
96 IMAPfolderItem( Folder *folder, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master ); 104 IMAPfolderItem( Folder *folder, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master );
97 ~IMAPfolderItem(); 105 virtual ~IMAPfolderItem();
98 virtual void refresh(QList<RecMail>&); 106 virtual void refresh(QList<RecMail>&);
99 virtual RecBody fetchBody(const RecMail&); 107 virtual RecBody fetchBody(const RecMail&);
100 bool matchName(const QString&name)const; 108 bool matchName(const QString&name)const;
101 virtual QPopupMenu * getContextMenu(); 109 virtual QPopupMenu * getContextMenu();
102 virtual void contextMenuSelected(int); 110 virtual void contextMenuSelected(int);
103 virtual const QString& Delemiter()const; 111 virtual const QString& Delemiter()const;
104protected: 112protected:
105 virtual void createNewFolder(); 113 virtual void createNewFolder();
106 virtual void deleteFolder(); 114 virtual void deleteFolder();
107 115 virtual void downloadMails();
108private:
109 Folder *folder; 116 Folder *folder;
110 IMAPviewItem *imap; 117 IMAPviewItem *imap;
111}; 118};
112 119
113class MBOXviewItem : public AccountViewItem 120class MBOXviewItem : public AccountViewItem
114{ 121{
115 friend class MBOXfolderItem; 122 friend class MBOXfolderItem;
116 123
117public: 124public:
118// MBOXviewItem( MBOXaccount *a, QListView *parent ); 125 MBOXviewItem( const QString&aMboxPath, AccountView *parent );
119 MBOXviewItem( const QString&aMboxPath, QListView *parent ); 126 virtual ~MBOXviewItem();
120 ~MBOXviewItem();
121 virtual void refresh( QList<RecMail> &target ); 127 virtual void refresh( QList<RecMail> &target );
122 virtual RecBody fetchBody( const RecMail &mail ); 128 virtual RecBody fetchBody( const RecMail &mail );
123 AbstractMail *getWrapper(); 129 AbstractMail *getWrapper();
124 virtual QPopupMenu * getContextMenu(); 130 virtual QPopupMenu * getContextMenu();
125 virtual void contextMenuSelected(int); 131 virtual void contextMenuSelected(int);
132 QStringList subFolders();
133 virtual void refresh(bool force=false);
126 134
127protected: 135protected:
128 virtual void refresh(bool force=false);
129 virtual void createFolder(); 136 virtual void createFolder();
130
131private:
132// MBOXaccount *account;
133 QString m_Path; 137 QString m_Path;
134 AbstractMail *wrapper; 138 AbstractMail *wrapper;
135 139
136}; 140};
137 141
138class MBOXfolderItem : public AccountViewItem 142class MBOXfolderItem : public AccountViewItem
139{ 143{
140 144
141public: 145public:
142 MBOXfolderItem( Folder *folder, MBOXviewItem *parent , QListViewItem*after ); 146 MBOXfolderItem( Folder *folder, MBOXviewItem *parent , QListViewItem*after );
143 ~MBOXfolderItem(); 147 virtual ~MBOXfolderItem();
144 virtual void refresh(QList<RecMail>&); 148 virtual void refresh(QList<RecMail>&);
145 virtual RecBody fetchBody(const RecMail&); 149 virtual RecBody fetchBody(const RecMail&);
146 virtual QPopupMenu * getContextMenu(); 150 virtual QPopupMenu * getContextMenu();
147 virtual void contextMenuSelected(int); 151 virtual void contextMenuSelected(int);
152 virtual Folder*getFolder();
148 153
149protected: 154protected:
150 virtual void deleteFolder(); 155 virtual void deleteFolder();
151private:
152 Folder *folder; 156 Folder *folder;
153 MBOXviewItem *mbox; 157 MBOXviewItem *mbox;
154}; 158};
155 159
156class AccountView : public QListView 160class AccountView : public QListView
157{ 161{
158 Q_OBJECT 162 Q_OBJECT
159 163
160public: 164public:
161 AccountView( QWidget *parent = 0, const char *name = 0, WFlags flags = 0 ); 165 AccountView( QWidget *parent = 0, const char *name = 0, WFlags flags = 0 );
162 void populate( QList<Account> list ); 166 virtual ~AccountView();
163 RecBody fetchBody(const RecMail&aMail); 167 virtual void populate( QList<Account> list );
168 virtual RecBody fetchBody(const RecMail&aMail);
169 virtual void downloadMails(Folder*fromFolder,AbstractMail*fromWrapper);
164 170
165public slots: 171public slots:
166 virtual void refreshAll(); 172 virtual void refreshAll();
167 virtual void refresh(QListViewItem *item); 173 virtual void refresh(QListViewItem *item);
168 virtual void refreshCurrent(); 174 virtual void refreshCurrent();
169 virtual void slotHold(int, QListViewItem *,const QPoint&,int); 175 virtual void slotHold(int, QListViewItem *,const QPoint&,int);
170 virtual void slotContextMenu(int id); 176 virtual void slotContextMenu(int id);
177 void setupFolderselect(Selectstore*sels);
171 178
172signals: 179signals:
173 void refreshMailview(QList<RecMail>*); 180 void refreshMailview(QList<RecMail>*);
174 181
175private: 182protected:
176 QListViewItem* m_currentItem; 183 QListViewItem* m_currentItem;
184 QValueList<IMAPviewItem*> imapAccounts;
185 QValueList<MBOXviewItem*> mboxAccounts;
177}; 186};
178 187
179#endif 188#endif
diff --git a/noncore/net/mail/libmailwrapper/abstractmail.cpp b/noncore/net/mail/libmailwrapper/abstractmail.cpp
index 80d0b52..3dd2fce 100644
--- a/noncore/net/mail/libmailwrapper/abstractmail.cpp
+++ b/noncore/net/mail/libmailwrapper/abstractmail.cpp
@@ -1,101 +1,106 @@
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) 24AbstractMail* AbstractMail::getWrapper(const QString&a,const QString&name)
25{ 25{
26 return new MBOXwrapper(a); 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
103/* temporary - will be removed when implemented in all classes */
104void AbstractMail::deleteMails(const QString &,QList<RecMail> &)
105{
106}
diff --git a/noncore/net/mail/libmailwrapper/abstractmail.h b/noncore/net/mail/libmailwrapper/abstractmail.h
index 9770991..15d83cb 100644
--- a/noncore/net/mail/libmailwrapper/abstractmail.h
+++ b/noncore/net/mail/libmailwrapper/abstractmail.h
@@ -1,60 +1,62 @@
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 int deleteMbox(const Folder*)=0; 35 virtual int deleteMbox(const Folder*)=0;
35 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;
36 37
37 virtual void cleanMimeCache(){}; 38 virtual void cleanMimeCache(){};
38 /* mail box methods */ 39 /* mail box methods */
39 /* parameter is the box to create. 40 /* parameter is the box to create.
40 * if the implementing subclass has prefixes, 41 * if the implementing subclass has prefixes,
41 * them has to be appended automatic. 42 * them has to be appended automatic.
42 */ 43 */
43 virtual int createMbox(const QString&,const Folder*parentfolder=0,const QString& delemiter="/",bool getsubfolder=false); 44 virtual int createMbox(const QString&,const Folder*parentfolder=0,const QString& delemiter="/",bool getsubfolder=false);
44 virtual void logout()=0; 45 virtual void logout()=0;
45 46
46 static AbstractMail* getWrapper(IMAPaccount *a); 47 static AbstractMail* getWrapper(IMAPaccount *a);
47 static AbstractMail* getWrapper(POP3account *a); 48 static AbstractMail* getWrapper(POP3account *a);
48 /* mbox only! */ 49 /* mbox only! */
49 static AbstractMail* getWrapper(const QString&a); 50 static AbstractMail* getWrapper(const QString&a,const QString&name="Local Folders");
50 51
51 static QString defaultLocalfolder(); 52 static QString defaultLocalfolder();
52 53
53 virtual const QString&getType()const=0; 54 virtual const QString&getType()const=0;
55 virtual const QString&getName()const=0;
54 56
55protected: 57protected:
56 static encodedString*decode_String(const encodedString*text,const QString&enc); 58 static encodedString*decode_String(const encodedString*text,const QString&enc);
57 static QString convert_String(const char*text); 59 static QString convert_String(const char*text);
58 static QString gen_attachment_id(); 60 static QString gen_attachment_id();
59}; 61};
60#endif 62#endif
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
index d252159..bb74de9 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
@@ -1,223 +1,224 @@
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 /* we are connected this moment */ 33 /* we are connected this moment */
33 /* 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 */
34 if (m_imap) { 35 if (m_imap) {
35 err = mailimap_noop(m_imap); 36 err = mailimap_noop(m_imap);
36 if (err!=MAILIMAP_NO_ERROR) { 37 if (err!=MAILIMAP_NO_ERROR) {
37 logout(); 38 logout();
38 } else { 39 } else {
39 mailstream_flush(m_imap->imap_stream); 40 mailstream_flush(m_imap->imap_stream);
40 return; 41 return;
41 } 42 }
42 } 43 }
43 server = account->getServer().latin1(); 44 server = account->getServer().latin1();
44 port = account->getPort().toUInt(); 45 port = account->getPort().toUInt();
45 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) { 46 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) {
46 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true ); 47 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true );
47 login.show(); 48 login.show();
48 if ( QDialog::Accepted == login.exec() ) { 49 if ( QDialog::Accepted == login.exec() ) {
49 // ok 50 // ok
50 user = login.getUser().latin1(); 51 user = login.getUser().latin1();
51 pass = login.getPassword().latin1(); 52 pass = login.getPassword().latin1();
52 } else { 53 } else {
53 // cancel 54 // cancel
54 qDebug( "IMAP: Login canceled" ); 55 qDebug( "IMAP: Login canceled" );
55 return; 56 return;
56 } 57 }
57 } else { 58 } else {
58 user = account->getUser().latin1(); 59 user = account->getUser().latin1();
59 pass = account->getPassword().latin1(); 60 pass = account->getPassword().latin1();
60 } 61 }
61 62
62 m_imap = mailimap_new( 20, &imap_progress ); 63 m_imap = mailimap_new( 20, &imap_progress );
63 64
64 /* connect */ 65 /* connect */
65 if (account->getSSL()) { 66 if (account->getSSL()) {
66 err = mailimap_ssl_connect( m_imap, (char*)server, port ); 67 err = mailimap_ssl_connect( m_imap, (char*)server, port );
67 } else { 68 } else {
68 err = mailimap_socket_connect( m_imap, (char*)server, port ); 69 err = mailimap_socket_connect( m_imap, (char*)server, port );
69 } 70 }
70 71
71 if ( err != MAILIMAP_NO_ERROR && 72 if ( err != MAILIMAP_NO_ERROR &&
72 err != MAILIMAP_NO_ERROR_AUTHENTICATED && 73 err != MAILIMAP_NO_ERROR_AUTHENTICATED &&
73 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { 74 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) {
74 QString failure = ""; 75 QString failure = "";
75 if (err == MAILIMAP_ERROR_CONNECTION_REFUSED) { 76 if (err == MAILIMAP_ERROR_CONNECTION_REFUSED) {
76 failure="Connection refused"; 77 failure="Connection refused";
77 } else { 78 } else {
78 failure="Unknown failure"; 79 failure="Unknown failure";
79 } 80 }
80 Global::statusMessage(tr("error connecting imap server: %1").arg(failure)); 81 Global::statusMessage(tr("error connecting imap server: %1").arg(failure));
81 mailimap_free( m_imap ); 82 mailimap_free( m_imap );
82 m_imap = 0; 83 m_imap = 0;
83 return; 84 return;
84 } 85 }
85 86
86 /* login */ 87 /* login */
87 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass ); 88 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass );
88 if ( err != MAILIMAP_NO_ERROR ) { 89 if ( err != MAILIMAP_NO_ERROR ) {
89 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));
90 err = mailimap_close( m_imap ); 91 err = mailimap_close( m_imap );
91 mailimap_free( m_imap ); 92 mailimap_free( m_imap );
92 m_imap = 0; 93 m_imap = 0;
93 } 94 }
94} 95}
95 96
96void IMAPwrapper::logout() 97void IMAPwrapper::logout()
97{ 98{
98 int err = MAILIMAP_NO_ERROR; 99 int err = MAILIMAP_NO_ERROR;
99 if (!m_imap) return; 100 if (!m_imap) return;
100 err = mailimap_logout( m_imap ); 101 err = mailimap_logout( m_imap );
101 err = mailimap_close( m_imap ); 102 err = mailimap_close( m_imap );
102 mailimap_free( m_imap ); 103 mailimap_free( m_imap );
103 m_imap = 0; 104 m_imap = 0;
104} 105}
105 106
106void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target ) 107void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
107{ 108{
108 const char *mb = 0; 109 const char *mb = 0;
109 int err = MAILIMAP_NO_ERROR; 110 int err = MAILIMAP_NO_ERROR;
110 clist *result = 0; 111 clist *result = 0;
111 clistcell *current; 112 clistcell *current;
112// mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate,*fetchAttSize; 113// mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate,*fetchAttSize;
113 mailimap_fetch_type *fetchType = 0; 114 mailimap_fetch_type *fetchType = 0;
114 mailimap_set *set = 0; 115 mailimap_set *set = 0;
115 116
116 mb = mailbox.latin1(); 117 mb = mailbox.latin1();
117 login(); 118 login();
118 if (!m_imap) { 119 if (!m_imap) {
119 return; 120 return;
120 } 121 }
121 /* select mailbox READONLY for operations */ 122 /* select mailbox READONLY for operations */
122 err = mailimap_examine( m_imap, (char*)mb); 123 err = mailimap_examine( m_imap, (char*)mb);
123 if ( err != MAILIMAP_NO_ERROR ) { 124 if ( err != MAILIMAP_NO_ERROR ) {
124 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));
125 return; 126 return;
126 } 127 }
127 128
128 int last = m_imap->imap_selection_info->sel_exists; 129 int last = m_imap->imap_selection_info->sel_exists;
129 130
130 if (last == 0) { 131 if (last == 0) {
131 Global::statusMessage(tr("Mailbox has no mails")); 132 Global::statusMessage(tr("Mailbox has no mails"));
132 return; 133 return;
133 } else { 134 } else {
134 Global::statusMessage(tr("Mailbox has %1 mails").arg(last)); 135 Global::statusMessage(tr("Mailbox has %1 mails").arg(last));
135 } 136 }
136 137
137 /* the range has to start at 1!!! not with 0!!!! */ 138 /* the range has to start at 1!!! not with 0!!!! */
138 set = mailimap_set_new_interval( 1, last ); 139 set = mailimap_set_new_interval( 1, last );
139 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 140 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
140 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());
141 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());
142 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());
143 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());
144 145
145 err = mailimap_fetch( m_imap, set, fetchType, &result ); 146 err = mailimap_fetch( m_imap, set, fetchType, &result );
146 mailimap_set_free( set ); 147 mailimap_set_free( set );
147 mailimap_fetch_type_free( fetchType ); 148 mailimap_fetch_type_free( fetchType );
148 149
149 QString date,subject,from; 150 QString date,subject,from;
150 151
151 if ( err == MAILIMAP_NO_ERROR ) { 152 if ( err == MAILIMAP_NO_ERROR ) {
152 mailimap_msg_att * msg_att; 153 mailimap_msg_att * msg_att;
153 int i = 0; 154 int i = 0;
154 for (current = clist_begin(result); current != 0; current=clist_next(current)) { 155 for (current = clist_begin(result); current != 0; current=clist_next(current)) {
155 ++i; 156 ++i;
156 msg_att = (mailimap_msg_att*)current->data; 157 msg_att = (mailimap_msg_att*)current->data;
157 RecMail*m = parse_list_result(msg_att); 158 RecMail*m = parse_list_result(msg_att);
158 if (m) { 159 if (m) {
159 m->setNumber(i); 160 m->setNumber(i);
160 m->setMbox(mailbox); 161 m->setMbox(mailbox);
161 m->setWrapper(this); 162 m->setWrapper(this);
162 target.append(m); 163 target.append(m);
163 } 164 }
164 } 165 }
165 } else { 166 } else {
166 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));
167 } 168 }
168 if (result) mailimap_fetch_list_free(result); 169 if (result) mailimap_fetch_list_free(result);
169} 170}
170 171
171QList<Folder>* IMAPwrapper::listFolders() 172QList<Folder>* IMAPwrapper::listFolders()
172{ 173{
173 const char *path, *mask; 174 const char *path, *mask;
174 int err = MAILIMAP_NO_ERROR; 175 int err = MAILIMAP_NO_ERROR;
175 clist *result = 0; 176 clist *result = 0;
176 clistcell *current = 0; 177 clistcell *current = 0;
177 clistcell*cur_flag = 0; 178 clistcell*cur_flag = 0;
178 mailimap_mbx_list_flags*bflags = 0; 179 mailimap_mbx_list_flags*bflags = 0;
179 180
180 QList<Folder> * folders = new QList<Folder>(); 181 QList<Folder> * folders = new QList<Folder>();
181 folders->setAutoDelete( false ); 182 folders->setAutoDelete( false );
182 login(); 183 login();
183 if (!m_imap) { 184 if (!m_imap) {
184 return folders; 185 return folders;
185 } 186 }
186 187
187/* 188/*
188 * 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.
189 * We must not forget to filter them out in next loop! 190 * We must not forget to filter them out in next loop!
190 * 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.
191 */ 192 */
192 QString temp; 193 QString temp;
193 mask = "INBOX" ; 194 mask = "INBOX" ;
194 mailimap_mailbox_list *list; 195 mailimap_mailbox_list *list;
195 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); 196 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result );
196 QString del; 197 QString del;
197 bool selectable = true; 198 bool selectable = true;
198 bool no_inferiors = false; 199 bool no_inferiors = false;
199 if ( err == MAILIMAP_NO_ERROR ) { 200 if ( err == MAILIMAP_NO_ERROR ) {
200 current = result->first; 201 current = result->first;
201 for ( int i = result->count; i > 0; i-- ) { 202 for ( int i = result->count; i > 0; i-- ) {
202 list = (mailimap_mailbox_list *) current->data; 203 list = (mailimap_mailbox_list *) current->data;
203 // it is better use the deep copy mechanism of qt itself 204 // it is better use the deep copy mechanism of qt itself
204 // instead of using strdup! 205 // instead of using strdup!
205 temp = list->mb_name; 206 temp = list->mb_name;
206 del = list->mb_delimiter; 207 del = list->mb_delimiter;
207 current = current->next; 208 current = current->next;
208 if ( (bflags = list->mb_flag) ) { 209 if ( (bflags = list->mb_flag) ) {
209 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& 210 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&&
210 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); 211 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT);
211 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)) {
212 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) {
213 no_inferiors = true; 214 no_inferiors = true;
214 } 215 }
215 } 216 }
216 } 217 }
217 folders->append( new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix())); 218 folders->append( new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix()));
218 } 219 }
219 } else { 220 } else {
220 qDebug("error fetching folders: %s",m_imap->imap_response); 221 qDebug("error fetching folders: %s",m_imap->imap_response);
221 } 222 }
222 mailimap_list_result_free( result ); 223 mailimap_list_result_free( result );
223 224
@@ -817,198 +818,203 @@ void IMAPwrapper::answeredMail(const RecMail&mail)
817 } 818 }
818 flist = mailimap_flag_list_new_empty(); 819 flist = mailimap_flag_list_new_empty();
819 mailimap_flag_list_add(flist,mailimap_flag_new_answered()); 820 mailimap_flag_list_add(flist,mailimap_flag_new_answered());
820 store_flags = mailimap_store_att_flags_new_add_flags(flist); 821 store_flags = mailimap_store_att_flags_new_add_flags(flist);
821 set = mailimap_set_new_single(mail.getNumber()); 822 set = mailimap_set_new_single(mail.getNumber());
822 err = mailimap_store(m_imap,set,store_flags); 823 err = mailimap_store(m_imap,set,store_flags);
823 mailimap_set_free( set ); 824 mailimap_set_free( set );
824 mailimap_store_att_flags_free(store_flags); 825 mailimap_store_att_flags_free(store_flags);
825 826
826 if (err != MAILIMAP_NO_ERROR) { 827 if (err != MAILIMAP_NO_ERROR) {
827 qDebug("error marking mail: %s",m_imap->imap_response); 828 qDebug("error marking mail: %s",m_imap->imap_response);
828 return; 829 return;
829 } 830 }
830} 831}
831 832
832QString 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)
833{ 834{
834 QString body(""); 835 QString body("");
835 encodedString*res = fetchRawPart(mail,path,internal_call); 836 encodedString*res = fetchRawPart(mail,path,internal_call);
836 encodedString*r = decode_String(res,enc); 837 encodedString*r = decode_String(res,enc);
837 delete res; 838 delete res;
838 if (r) { 839 if (r) {
839 if (r->Length()>0) { 840 if (r->Length()>0) {
840 body = r->Content(); 841 body = r->Content();
841 } 842 }
842 delete r; 843 delete r;
843 } 844 }
844 return body; 845 return body;
845} 846}
846 847
847QString IMAPwrapper::fetchTextPart(const RecMail&mail,const RecPart&part) 848QString IMAPwrapper::fetchTextPart(const RecMail&mail,const RecPart&part)
848{ 849{
849 return fetchTextPart(mail,part.Positionlist(),false,part.Encoding()); 850 return fetchTextPart(mail,part.Positionlist(),false,part.Encoding());
850} 851}
851 852
852encodedString* IMAPwrapper::fetchDecodedPart(const RecMail&mail,const RecPart&part) 853encodedString* IMAPwrapper::fetchDecodedPart(const RecMail&mail,const RecPart&part)
853{ 854{
854 encodedString*res = fetchRawPart(mail,part.Positionlist(),false); 855 encodedString*res = fetchRawPart(mail,part.Positionlist(),false);
855 encodedString*r = decode_String(res,part.Encoding()); 856 encodedString*r = decode_String(res,part.Encoding());
856 delete res; 857 delete res;
857 return r; 858 return r;
858} 859}
859 860
860encodedString* IMAPwrapper::fetchRawPart(const RecMail&mail,const RecPart&part) 861encodedString* IMAPwrapper::fetchRawPart(const RecMail&mail,const RecPart&part)
861{ 862{
862 return fetchRawPart(mail,part.Positionlist(),false); 863 return fetchRawPart(mail,part.Positionlist(),false);
863} 864}
864 865
865int IMAPwrapper::deleteAllMail(const Folder*folder) 866int IMAPwrapper::deleteAllMail(const Folder*folder)
866{ 867{
867 login(); 868 login();
868 if (!m_imap) { 869 if (!m_imap) {
869 return 0; 870 return 0;
870 } 871 }
871 mailimap_flag_list*flist; 872 mailimap_flag_list*flist;
872 mailimap_set *set; 873 mailimap_set *set;
873 mailimap_store_att_flags * store_flags; 874 mailimap_store_att_flags * store_flags;
874 int err = mailimap_select( m_imap, folder->getName().latin1()); 875 int err = mailimap_select( m_imap, folder->getName().latin1());
875 if ( err != MAILIMAP_NO_ERROR ) { 876 if ( err != MAILIMAP_NO_ERROR ) {
876 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));
877 return 0; 878 return 0;
878 } 879 }
879 int last = m_imap->imap_selection_info->sel_exists; 880 int last = m_imap->imap_selection_info->sel_exists;
880 if (last == 0) { 881 if (last == 0) {
881 Global::statusMessage(tr("Mailbox has no mails!")); 882 Global::statusMessage(tr("Mailbox has no mails!"));
882 return 0; 883 return 0;
883 } 884 }
884 flist = mailimap_flag_list_new_empty(); 885 flist = mailimap_flag_list_new_empty();
885 mailimap_flag_list_add(flist,mailimap_flag_new_deleted()); 886 mailimap_flag_list_add(flist,mailimap_flag_new_deleted());
886 store_flags = mailimap_store_att_flags_new_set_flags(flist); 887 store_flags = mailimap_store_att_flags_new_set_flags(flist);
887 set = mailimap_set_new_interval( 1, last ); 888 set = mailimap_set_new_interval( 1, last );
888 err = mailimap_store(m_imap,set,store_flags); 889 err = mailimap_store(m_imap,set,store_flags);
889 mailimap_set_free( set ); 890 mailimap_set_free( set );
890 mailimap_store_att_flags_free(store_flags); 891 mailimap_store_att_flags_free(store_flags);
891 if (err != MAILIMAP_NO_ERROR) { 892 if (err != MAILIMAP_NO_ERROR) {
892 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));
893 return 0; 894 return 0;
894 } 895 }
895 qDebug("deleting mail: %s",m_imap->imap_response); 896 qDebug("deleting mail: %s",m_imap->imap_response);
896 /* should we realy do that at this moment? */ 897 /* should we realy do that at this moment? */
897 err = mailimap_expunge(m_imap); 898 err = mailimap_expunge(m_imap);
898 if (err != MAILIMAP_NO_ERROR) { 899 if (err != MAILIMAP_NO_ERROR) {
899 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));
900 return 0; 901 return 0;
901 } 902 }
902 qDebug("Delete successfull %s",m_imap->imap_response); 903 qDebug("Delete successfull %s",m_imap->imap_response);
903 return 1; 904 return 1;
904} 905}
905 906
906int 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)
907{ 908{
908 if (folder.length()==0) return 0; 909 if (folder.length()==0) return 0;
909 login(); 910 login();
910 if (!m_imap) {return 0;} 911 if (!m_imap) {return 0;}
911 QString pre = account->getPrefix(); 912 QString pre = account->getPrefix();
912 if (delemiter.length()>0 && pre.findRev(delemiter)!=pre.length()-1) { 913 if (delemiter.length()>0 && pre.findRev(delemiter)!=pre.length()-1) {
913 pre+=delemiter; 914 pre+=delemiter;
914 } 915 }
915 if (parentfolder) { 916 if (parentfolder) {
916 pre += parentfolder->getDisplayName()+delemiter; 917 pre += parentfolder->getDisplayName()+delemiter;
917 } 918 }
918 pre+=folder; 919 pre+=folder;
919 if (getsubfolder) { 920 if (getsubfolder) {
920 if (delemiter.length()>0) { 921 if (delemiter.length()>0) {
921 pre+=delemiter; 922 pre+=delemiter;
922 } else { 923 } else {
923 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));
924 return 0; 925 return 0;
925 } 926 }
926 } 927 }
927 qDebug("Creating %s",pre.latin1()); 928 qDebug("Creating %s",pre.latin1());
928 int res = mailimap_create(m_imap,pre.latin1()); 929 int res = mailimap_create(m_imap,pre.latin1());
929 if (res != MAILIMAP_NO_ERROR) { 930 if (res != MAILIMAP_NO_ERROR) {
930 Global::statusMessage(tr("%1").arg(m_imap->imap_response)); 931 Global::statusMessage(tr("%1").arg(m_imap->imap_response));
931 return 0; 932 return 0;
932 } 933 }
933 return 1; 934 return 1;
934} 935}
935 936
936int IMAPwrapper::deleteMbox(const Folder*folder) 937int IMAPwrapper::deleteMbox(const Folder*folder)
937{ 938{
938 if (!folder) return 0; 939 if (!folder) return 0;
939 login(); 940 login();
940 if (!m_imap) {return 0;} 941 if (!m_imap) {return 0;}
941 int res = mailimap_delete(m_imap,folder->getName()); 942 int res = mailimap_delete(m_imap,folder->getName());
942 if (res != MAILIMAP_NO_ERROR) { 943 if (res != MAILIMAP_NO_ERROR) {
943 Global::statusMessage(tr("%1").arg(m_imap->imap_response)); 944 Global::statusMessage(tr("%1").arg(m_imap->imap_response));
944 return 0; 945 return 0;
945 } 946 }
946 return 1; 947 return 1;
947} 948}
948 949
949void IMAPwrapper::statusFolder(folderStat&target_stat,const QString & mailbox) 950void IMAPwrapper::statusFolder(folderStat&target_stat,const QString & mailbox)
950{ 951{
951 mailimap_status_att_list * att_list =0; 952 mailimap_status_att_list * att_list =0;
952 mailimap_mailbox_data_status * status=0; 953 mailimap_mailbox_data_status * status=0;
953 clistiter * cur = 0; 954 clistiter * cur = 0;
954 int r = 0; 955 int r = 0;
955 int res = 0; 956 int res = 0;
956 target_stat.message_count = 0; 957 target_stat.message_count = 0;
957 target_stat.message_unseen = 0; 958 target_stat.message_unseen = 0;
958 target_stat.message_recent = 0; 959 target_stat.message_recent = 0;
959 login(); 960 login();
960 if (!m_imap) { 961 if (!m_imap) {
961 return; 962 return;
962 } 963 }
963 att_list = mailimap_status_att_list_new_empty(); 964 att_list = mailimap_status_att_list_new_empty();
964 if (!att_list) return; 965 if (!att_list) return;
965 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);
966 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);
967 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);
968 r = mailimap_status(m_imap, mailbox.latin1(), att_list, &status); 969 r = mailimap_status(m_imap, mailbox.latin1(), att_list, &status);
969 if (r==MAILIMAP_NO_ERROR&&status->st_info_list!=0) { 970 if (r==MAILIMAP_NO_ERROR&&status->st_info_list!=0) {
970 for (cur = clist_begin(status->st_info_list); 971 for (cur = clist_begin(status->st_info_list);
971 cur != NULL ; cur = clist_next(cur)) { 972 cur != NULL ; cur = clist_next(cur)) {
972 mailimap_status_info * status_info; 973 mailimap_status_info * status_info;
973 status_info = (mailimap_status_info *)clist_content(cur); 974 status_info = (mailimap_status_info *)clist_content(cur);
974 switch (status_info->st_att) { 975 switch (status_info->st_att) {
975 case MAILIMAP_STATUS_ATT_MESSAGES: 976 case MAILIMAP_STATUS_ATT_MESSAGES:
976 target_stat.message_count = status_info->st_value; 977 target_stat.message_count = status_info->st_value;
977 break; 978 break;
978 case MAILIMAP_STATUS_ATT_RECENT: 979 case MAILIMAP_STATUS_ATT_RECENT:
979 target_stat.message_recent = status_info->st_value; 980 target_stat.message_recent = status_info->st_value;
980 break; 981 break;
981 case MAILIMAP_STATUS_ATT_UNSEEN: 982 case MAILIMAP_STATUS_ATT_UNSEEN:
982 target_stat.message_unseen = status_info->st_value; 983 target_stat.message_unseen = status_info->st_value;
983 break; 984 break;
984 } 985 }
985 } 986 }
986 } else { 987 } else {
987 qDebug("Error retrieving status"); 988 qDebug("Error retrieving status");
988 } 989 }
989 if (status) mailimap_mailbox_data_status_free(status); 990 if (status) mailimap_mailbox_data_status_free(status);
990 if (att_list) mailimap_status_att_list_free(att_list); 991 if (att_list) mailimap_status_att_list_free(att_list);
991} 992}
992 993
993void IMAPwrapper::storeMessage(const char*msg,size_t length, const QString&folder) 994void IMAPwrapper::storeMessage(const char*msg,size_t length, const QString&folder)
994{ 995{
995 login(); 996 login();
996 if (!m_imap) return; 997 if (!m_imap) return;
997 if (!msg) return; 998 if (!msg) return;
998 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);
999 if (r != MAILIMAP_NO_ERROR) { 1000 if (r != MAILIMAP_NO_ERROR) {
1000 Global::statusMessage("Error storing mail!"); 1001 Global::statusMessage("Error storing mail!");
1001 } 1002 }
1002} 1003}
1003 1004
1004const QString&IMAPwrapper::getType()const 1005const QString&IMAPwrapper::getType()const
1005{ 1006{
1006 return account->getType(); 1007 return account->getType();
1007} 1008}
1008 1009
1010const QString&IMAPwrapper::getName()const
1011{
1012 return account->getAccountName();
1013}
1014
1009encodedString* IMAPwrapper::fetchRawBody(const RecMail&mail) 1015encodedString* IMAPwrapper::fetchRawBody(const RecMail&mail)
1010{ 1016{
1011 // dummy 1017 // dummy
1012 QValueList<int> path; 1018 QValueList<int> path;
1013 return fetchRawPart(mail,path,false); 1019 return fetchRawPart(mail,path,false);
1014} 1020}
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.h b/noncore/net/mail/libmailwrapper/imapwrapper.h
index b246f58..b2bd7e9 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.h
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.h
@@ -1,71 +1,73 @@
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 34
35 virtual RecBody fetchBody(const RecMail&mail); 35 virtual RecBody fetchBody(const RecMail&mail);
36 virtual QString fetchTextPart(const RecMail&mail,const RecPart&part); 36 virtual QString fetchTextPart(const RecMail&mail,const RecPart&part);
37 virtual encodedString* fetchDecodedPart(const RecMail&mail,const RecPart&part); 37 virtual encodedString* fetchDecodedPart(const RecMail&mail,const RecPart&part);
38 virtual encodedString* fetchRawPart(const RecMail&mail,const RecPart&part); 38 virtual encodedString* fetchRawPart(const RecMail&mail,const RecPart&part);
39 virtual encodedString* fetchRawBody(const RecMail&mail); 39 virtual encodedString* fetchRawBody(const RecMail&mail);
40 40
41 virtual int createMbox(const QString&,const Folder*parentfolder=0,const QString& delemiter="/",bool getsubfolder=false); 41 virtual int createMbox(const QString&,const Folder*parentfolder=0,const QString& delemiter="/",bool getsubfolder=false);
42 virtual int deleteMbox(const Folder*folder); 42 virtual int deleteMbox(const Folder*folder);
43 43
44 static void imap_progress( size_t current, size_t maximum ); 44 static void imap_progress( size_t current, size_t maximum );
45 45
46 virtual void logout(); 46 virtual void logout();
47 virtual const QString&getType()const; 47 virtual const QString&getType()const;
48 virtual const QString&getName()const;
49
48protected: 50protected:
49 RecMail*parse_list_result(mailimap_msg_att*); 51 RecMail*parse_list_result(mailimap_msg_att*);
50 void login(); 52 void login();
51 53
52 virtual QString fetchTextPart(const RecMail&mail,const QValueList<int>&path,bool internal_call=false,const QString&enc=""); 54 virtual QString fetchTextPart(const RecMail&mail,const QValueList<int>&path,bool internal_call=false,const QString&enc="");
53 virtual encodedString*fetchRawPart(const RecMail&mail,const QValueList<int>&path,bool internal_call); 55 virtual encodedString*fetchRawPart(const RecMail&mail,const QValueList<int>&path,bool internal_call);
54 56
55 void fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description); 57 void fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description);
56 void fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which); 58 void fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which);
57 void fillSingleBasicPart(RecPart&target_part,mailimap_body_type_basic*which); 59 void fillSingleBasicPart(RecPart&target_part,mailimap_body_type_basic*which);
58 void fillSingleMsgPart(RecPart&target_part,mailimap_body_type_msg*which); 60 void fillSingleMsgPart(RecPart&target_part,mailimap_body_type_msg*which);
59 void fillMultiPart(RecPart&target_part,mailimap_body_type_mpart*which); 61 void fillMultiPart(RecPart&target_part,mailimap_body_type_mpart*which);
60 void traverseBody(const RecMail&mail,mailimap_body*body,RecBody&target_body,int current_recursion,QValueList<int>recList,int current_count=1); 62 void traverseBody(const RecMail&mail,mailimap_body*body,RecBody&target_body,int current_recursion,QValueList<int>recList,int current_count=1);
61 63
62 /* just helpers */ 64 /* just helpers */
63 static void fillBodyFields(RecPart&target_part,mailimap_body_fields*which); 65 static void fillBodyFields(RecPart&target_part,mailimap_body_fields*which);
64 static QStringList address_list_to_stringlist(clist*list); 66 static QStringList address_list_to_stringlist(clist*list);
65 67
66 68
67 IMAPaccount *account; 69 IMAPaccount *account;
68 mailimap *m_imap; 70 mailimap *m_imap;
69}; 71};
70 72
71#endif 73#endif
diff --git a/noncore/net/mail/libmailwrapper/mboxwrapper.cpp b/noncore/net/mail/libmailwrapper/mboxwrapper.cpp
index bc496f7..97f301e 100644
--- a/noncore/net/mail/libmailwrapper/mboxwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/mboxwrapper.cpp
@@ -1,332 +1,337 @@
1#include "mboxwrapper.h" 1#include "mboxwrapper.h"
2#include "mailtypes.h" 2#include "mailtypes.h"
3#include "mailwrapper.h" 3#include "mailwrapper.h"
4#include <libetpan/libetpan.h> 4#include <libetpan/libetpan.h>
5#include <qdir.h> 5#include <qdir.h>
6#include <stdlib.h> 6#include <stdlib.h>
7#include <qpe/global.h> 7#include <qpe/global.h>
8 8
9const QString MBOXwrapper::wrapperType="MBOX"; 9const QString MBOXwrapper::wrapperType="MBOX";
10 10
11MBOXwrapper::MBOXwrapper(const QString & mbox_dir) 11MBOXwrapper::MBOXwrapper(const QString & mbox_dir,const QString&mbox_name)
12 : Genericwrapper(),MBOXPath(mbox_dir) 12 : Genericwrapper(),MBOXPath(mbox_dir),MBOXName(mbox_name)
13{ 13{
14 QDir dir(MBOXPath); 14 QDir dir(MBOXPath);
15 if (!dir.exists()) { 15 if (!dir.exists()) {
16 dir.mkdir(MBOXPath); 16 dir.mkdir(MBOXPath);
17 } 17 }
18} 18}
19 19
20MBOXwrapper::~MBOXwrapper() 20MBOXwrapper::~MBOXwrapper()
21{ 21{
22} 22}
23 23
24void MBOXwrapper::listMessages(const QString & mailbox, QList<RecMail> &target ) 24void MBOXwrapper::listMessages(const QString & mailbox, QList<RecMail> &target )
25{ 25{
26 mailstorage*storage = mailstorage_new(NULL); 26 mailstorage*storage = mailstorage_new(NULL);
27 QString p = MBOXPath+"/"; 27 QString p = MBOXPath+"/";
28 p+=mailbox; 28 p+=mailbox;
29 29
30 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0); 30 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
31 mailfolder*folder; 31 mailfolder*folder;
32 folder = mailfolder_new( storage,(char*)p.latin1(),NULL); 32 folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
33 r = mailfolder_connect(folder); 33 r = mailfolder_connect(folder);
34 if (r != MAIL_NO_ERROR) { 34 if (r != MAIL_NO_ERROR) {
35 qDebug("Error initializing mbox"); 35 qDebug("Error initializing mbox");
36 mailfolder_free(folder); 36 mailfolder_free(folder);
37 mailstorage_free(storage); 37 mailstorage_free(storage);
38 return; 38 return;
39 } 39 }
40 40
41 parseList(target,folder->fld_session,mailbox); 41 parseList(target,folder->fld_session,mailbox);
42 42
43 mailfolder_disconnect(folder); 43 mailfolder_disconnect(folder);
44 mailfolder_free(folder); 44 mailfolder_free(folder);
45 mailstorage_free(storage); 45 mailstorage_free(storage);
46 Global::statusMessage(tr("Mailbox has %1 mail(s)").arg(target.count())); 46 Global::statusMessage(tr("Mailbox has %1 mail(s)").arg(target.count()));
47} 47}
48 48
49QList<Folder>* MBOXwrapper::listFolders() 49QList<Folder>* MBOXwrapper::listFolders()
50{ 50{
51 QList<Folder> * folders = new QList<Folder>(); 51 QList<Folder> * folders = new QList<Folder>();
52 folders->setAutoDelete( false ); 52 folders->setAutoDelete( false );
53 QDir dir(MBOXPath); 53 QDir dir(MBOXPath);
54 if (!dir.exists()) return folders; 54 if (!dir.exists()) return folders;
55 dir.setFilter(QDir::Files|QDir::Writable|QDir::Readable); 55 dir.setFilter(QDir::Files|QDir::Writable|QDir::Readable);
56 QStringList entries = dir.entryList(); 56 QStringList entries = dir.entryList();
57 QStringList::ConstIterator it = entries.begin(); 57 QStringList::ConstIterator it = entries.begin();
58 for (;it!=entries.end();++it) { 58 for (;it!=entries.end();++it) {
59 Folder*inb=new Folder(*it,"/"); 59 Folder*inb=new Folder(*it,"/");
60 folders->append(inb); 60 folders->append(inb);
61 } 61 }
62 return folders; 62 return folders;
63} 63}
64 64
65void MBOXwrapper::deleteMail(const RecMail&mail) 65void MBOXwrapper::deleteMail(const RecMail&mail)
66{ 66{
67 mailstorage*storage = mailstorage_new(NULL); 67 mailstorage*storage = mailstorage_new(NULL);
68 QString p = MBOXPath+"/"; 68 QString p = MBOXPath+"/";
69 p+=mail.getMbox(); 69 p+=mail.getMbox();
70 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0); 70 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
71 mailfolder*folder; 71 mailfolder*folder;
72 folder = mailfolder_new( storage,(char*)p.latin1(),NULL); 72 folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
73 r = mailfolder_connect(folder); 73 r = mailfolder_connect(folder);
74 if (r != MAIL_NO_ERROR) { 74 if (r != MAIL_NO_ERROR) {
75 qDebug("Error initializing mbox"); 75 qDebug("Error initializing mbox");
76 mailfolder_free(folder); 76 mailfolder_free(folder);
77 mailstorage_free(storage); 77 mailstorage_free(storage);
78 return; 78 return;
79 } 79 }
80 r = mailsession_remove_message(folder->fld_session,mail.getNumber()); 80 r = mailsession_remove_message(folder->fld_session,mail.getNumber());
81 if (r != MAIL_NO_ERROR) { 81 if (r != MAIL_NO_ERROR) {
82 qDebug("error deleting mail"); 82 qDebug("error deleting mail");
83 } 83 }
84 mailfolder_free(folder); 84 mailfolder_free(folder);
85 mailstorage_free(storage); 85 mailstorage_free(storage);
86} 86}
87 87
88void MBOXwrapper::answeredMail(const RecMail&) 88void MBOXwrapper::answeredMail(const RecMail&)
89{ 89{
90} 90}
91 91
92RecBody MBOXwrapper::fetchBody( const RecMail &mail ) 92RecBody MBOXwrapper::fetchBody( const RecMail &mail )
93{ 93{
94 RecBody body; 94 RecBody body;
95 mailstorage*storage = mailstorage_new(NULL); 95 mailstorage*storage = mailstorage_new(NULL);
96 QString p = MBOXPath+"/"; 96 QString p = MBOXPath+"/";
97 p+=mail.getMbox(); 97 p+=mail.getMbox();
98 mailmessage * msg; 98 mailmessage * msg;
99 char*data=0; 99 char*data=0;
100 size_t size; 100 size_t size;
101 101
102 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0); 102 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
103 mailfolder*folder; 103 mailfolder*folder;
104 folder = mailfolder_new( storage,(char*)p.latin1(),NULL); 104 folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
105 r = mailfolder_connect(folder); 105 r = mailfolder_connect(folder);
106 if (r != MAIL_NO_ERROR) { 106 if (r != MAIL_NO_ERROR) {
107 qDebug("Error initializing mbox"); 107 qDebug("Error initializing mbox");
108 mailfolder_free(folder); 108 mailfolder_free(folder);
109 mailstorage_free(storage); 109 mailstorage_free(storage);
110 return body; 110 return body;
111 } 111 }
112 r = mailsession_get_message(folder->fld_session, mail.getNumber(), &msg); 112 r = mailsession_get_message(folder->fld_session, mail.getNumber(), &msg);
113 if (r != MAIL_NO_ERROR) { 113 if (r != MAIL_NO_ERROR) {
114 qDebug("Error fetching mail %i",mail.getNumber()); 114 qDebug("Error fetching mail %i",mail.getNumber());
115 mailfolder_free(folder); 115 mailfolder_free(folder);
116 mailstorage_free(storage); 116 mailstorage_free(storage);
117 return body; 117 return body;
118 } 118 }
119 r = mailmessage_fetch(msg,&data,&size); 119 r = mailmessage_fetch(msg,&data,&size);
120 if (r != MAIL_NO_ERROR) { 120 if (r != MAIL_NO_ERROR) {
121 qDebug("Error fetching mail %i",mail.getNumber()); 121 qDebug("Error fetching mail %i",mail.getNumber());
122 mailfolder_free(folder); 122 mailfolder_free(folder);
123 mailstorage_free(storage); 123 mailstorage_free(storage);
124 mailmessage_free(msg); 124 mailmessage_free(msg);
125 return body; 125 return body;
126 } 126 }
127 body = parseMail(msg); 127 body = parseMail(msg);
128 mailmessage_fetch_result_free(msg,data); 128 mailmessage_fetch_result_free(msg,data);
129 mailfolder_free(folder); 129 mailfolder_free(folder);
130 mailstorage_free(storage); 130 mailstorage_free(storage);
131 131
132 return body; 132 return body;
133} 133}
134 134
135void MBOXwrapper::mbox_progress( size_t current, size_t maximum ) 135void MBOXwrapper::mbox_progress( size_t current, size_t maximum )
136{ 136{
137 qDebug("MBOX %i von %i",current,maximum); 137 qDebug("MBOX %i von %i",current,maximum);
138} 138}
139 139
140int MBOXwrapper::createMbox(const QString&folder,const Folder*,const QString&,bool ) 140int MBOXwrapper::createMbox(const QString&folder,const Folder*,const QString&,bool )
141{ 141{
142 QString p = MBOXPath+"/"; 142 QString p = MBOXPath+"/";
143 p+=folder; 143 p+=folder;
144 QFileInfo fi(p); 144 QFileInfo fi(p);
145 if (fi.exists()) { 145 if (fi.exists()) {
146 Global::statusMessage(tr("Mailbox exists.")); 146 Global::statusMessage(tr("Mailbox exists."));
147 return 0; 147 return 0;
148 } 148 }
149 mailmbox_folder*f = 0; 149 mailmbox_folder*f = 0;
150 if (mailmbox_init(p.latin1(),0,1,0,&f) != MAIL_NO_ERROR) { 150 if (mailmbox_init(p.latin1(),0,1,0,&f) != MAIL_NO_ERROR) {
151 Global::statusMessage(tr("Error init folder")); 151 Global::statusMessage(tr("Error init folder"));
152 return 0; 152 return 0;
153 } 153 }
154 if (f) mailmbox_done(f); 154 if (f) mailmbox_done(f);
155 return 1; 155 return 1;
156} 156}
157 157
158void MBOXwrapper::storeMessage(const char*msg,size_t length, const QString&folder) 158void MBOXwrapper::storeMessage(const char*msg,size_t length, const QString&folder)
159{ 159{
160 QString p = MBOXPath+"/"; 160 QString p = MBOXPath+"/";
161 p+=folder; 161 p+=folder;
162 mailmbox_folder*f = 0; 162 mailmbox_folder*f = 0;
163 int r = mailmbox_init(p.latin1(),0,1,0,&f); 163 int r = mailmbox_init(p.latin1(),0,1,0,&f);
164 if (r != MAIL_NO_ERROR) { 164 if (r != MAIL_NO_ERROR) {
165 Global::statusMessage(tr("Error init folder")); 165 Global::statusMessage(tr("Error init folder"));
166 return; 166 return;
167 } 167 }
168 r = mailmbox_append_message(f,msg,length); 168 r = mailmbox_append_message(f,msg,length);
169 if (r != MAIL_NO_ERROR) { 169 if (r != MAIL_NO_ERROR) {
170 Global::statusMessage(tr("Error writing to message folder")); 170 Global::statusMessage(tr("Error writing to message folder"));
171 } 171 }
172 mailmbox_done(f); 172 mailmbox_done(f);
173} 173}
174 174
175encodedString* MBOXwrapper::fetchRawBody(const RecMail&mail) 175encodedString* MBOXwrapper::fetchRawBody(const RecMail&mail)
176{ 176{
177 RecBody body; 177 RecBody body;
178 mailstorage*storage = mailstorage_new(NULL); 178 mailstorage*storage = mailstorage_new(NULL);
179 QString p = MBOXPath+"/"; 179 QString p = MBOXPath+"/";
180 p+=mail.getMbox(); 180 p+=mail.getMbox();
181 mailmessage * msg; 181 mailmessage * msg;
182 char*data=0; 182 char*data=0;
183 size_t size; 183 size_t size;
184 184
185 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0); 185 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
186 mailfolder*folder; 186 mailfolder*folder;
187 folder = mailfolder_new( storage,(char*)p.latin1(),NULL); 187 folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
188 r = mailfolder_connect(folder); 188 r = mailfolder_connect(folder);
189 if (r != MAIL_NO_ERROR) { 189 if (r != MAIL_NO_ERROR) {
190 Global::statusMessage(tr("Error initializing mbox")); 190 Global::statusMessage(tr("Error initializing mbox"));
191 mailfolder_free(folder); 191 mailfolder_free(folder);
192 mailstorage_free(storage); 192 mailstorage_free(storage);
193 return 0; 193 return 0;
194 } 194 }
195 r = mailsession_get_message(folder->fld_session, mail.getNumber(), &msg); 195 r = mailsession_get_message(folder->fld_session, mail.getNumber(), &msg);
196 if (r != MAIL_NO_ERROR) { 196 if (r != MAIL_NO_ERROR) {
197 Global::statusMessage(tr("Error fetching mail %i").arg(mail.getNumber())); 197 Global::statusMessage(tr("Error fetching mail %i").arg(mail.getNumber()));
198 mailfolder_free(folder); 198 mailfolder_free(folder);
199 mailstorage_free(storage); 199 mailstorage_free(storage);
200 return 0; 200 return 0;
201 } 201 }
202 r = mailmessage_fetch(msg,&data,&size); 202 r = mailmessage_fetch(msg,&data,&size);
203 if (r != MAIL_NO_ERROR) { 203 if (r != MAIL_NO_ERROR) {
204 Global::statusMessage(tr("Error fetching mail %i").arg(mail.getNumber())); 204 Global::statusMessage(tr("Error fetching mail %i").arg(mail.getNumber()));
205 mailfolder_free(folder); 205 mailfolder_free(folder);
206 mailstorage_free(storage); 206 mailstorage_free(storage);
207 mailmessage_free(msg); 207 mailmessage_free(msg);
208 return 0; 208 return 0;
209 } 209 }
210 encodedString*result = new encodedString(data,size); 210 encodedString*result = new encodedString(data,size);
211 211
212 mailfolder_free(folder); 212 mailfolder_free(folder);
213 mailstorage_free(storage); 213 mailstorage_free(storage);
214 mailmessage_free(msg); 214 mailmessage_free(msg);
215 return result; 215 return result;
216} 216}
217 217
218void MBOXwrapper::deleteMails(const QString & mailbox,QList<RecMail> &target) 218void MBOXwrapper::deleteMails(const QString & mailbox,QList<RecMail> &target)
219{ 219{
220 QString p = MBOXPath+"/"; 220 QString p = MBOXPath+"/";
221 p+=mailbox; 221 p+=mailbox;
222 mailmbox_folder*f = 0; 222 mailmbox_folder*f = 0;
223 int r = mailmbox_init(p.latin1(),0,1,0,&f); 223 int r = mailmbox_init(p.latin1(),0,1,0,&f);
224 if (r != MAIL_NO_ERROR) { 224 if (r != MAIL_NO_ERROR) {
225 qDebug("Error init folder"); 225 qDebug("Error init folder");
226 return; 226 return;
227 } 227 }
228 deleteMails(f,target); 228 deleteMails(f,target);
229 mailmbox_done(f); 229 mailmbox_done(f);
230} 230}
231 231
232void MBOXwrapper::deleteMails(mailmbox_folder*f,QList<RecMail> &target) 232void MBOXwrapper::deleteMails(mailmbox_folder*f,QList<RecMail> &target)
233{ 233{
234 if (!f) return; 234 if (!f) return;
235 int r; 235 int r;
236 for (unsigned int i=0; i < target.count();++i) { 236 for (unsigned int i=0; i < target.count();++i) {
237 r = mailmbox_delete_msg(f,target.at(i)->getNumber()); 237 r = mailmbox_delete_msg(f,target.at(i)->getNumber());
238 if (r!=MAILMBOX_NO_ERROR) { 238 if (r!=MAILMBOX_NO_ERROR) {
239 qDebug("error delete mail"); 239 qDebug("error delete mail");
240 } 240 }
241 } 241 }
242 r = mailmbox_expunge(f); 242 r = mailmbox_expunge(f);
243 if (r != MAILMBOX_NO_ERROR) { 243 if (r != MAILMBOX_NO_ERROR) {
244 qDebug("error expunge mailbox"); 244 qDebug("error expunge mailbox");
245 } 245 }
246} 246}
247 247
248int MBOXwrapper::deleteAllMail(const Folder*tfolder) 248int MBOXwrapper::deleteAllMail(const Folder*tfolder)
249{ 249{
250 if (!tfolder) return 0; 250 if (!tfolder) return 0;
251 QString p = MBOXPath+"/"+tfolder->getDisplayName(); 251 QString p = MBOXPath+"/"+tfolder->getDisplayName();
252 int res = 1; 252 int res = 1;
253 253
254 mailfolder*folder = 0; 254 mailfolder*folder = 0;
255 mailmessage_list*l=0; 255 mailmessage_list*l=0;
256 mailstorage*storage = mailstorage_new(NULL); 256 mailstorage*storage = mailstorage_new(NULL);
257 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0); 257 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
258 if (r != MAIL_NO_ERROR) { 258 if (r != MAIL_NO_ERROR) {
259 Global::statusMessage(tr("Error initializing mbox")); 259 Global::statusMessage(tr("Error initializing mbox"));
260 res = 0; 260 res = 0;
261 } 261 }
262 if (res) { 262 if (res) {
263 folder = mailfolder_new( storage,(char*)p.latin1(),NULL); 263 folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
264 r = mailfolder_connect(folder); 264 r = mailfolder_connect(folder);
265 if (r != MAIL_NO_ERROR) { 265 if (r != MAIL_NO_ERROR) {
266 Global::statusMessage(tr("Error initializing mbox")); 266 Global::statusMessage(tr("Error initializing mbox"));
267 res = 0; 267 res = 0;
268 } 268 }
269 } 269 }
270 if (res) { 270 if (res) {
271 r = mailsession_get_messages_list(folder->fld_session,&l); 271 r = mailsession_get_messages_list(folder->fld_session,&l);
272 if (r != MAIL_NO_ERROR) { 272 if (r != MAIL_NO_ERROR) {
273 qDebug("Error message list"); 273 qDebug("Error message list");
274 res=0; 274 res=0;
275 } 275 }
276 } 276 }
277 for(unsigned int i = 0 ; l!= 0 && res==1 && i < carray_count(l->msg_tab) ; ++i) { 277 for(unsigned int i = 0 ; l!= 0 && res==1 && i < carray_count(l->msg_tab) ; ++i) {
278 r = mailsession_remove_message(folder->fld_session,i+1); 278 r = mailsession_remove_message(folder->fld_session,i+1);
279 if (r != MAIL_NO_ERROR) { 279 if (r != MAIL_NO_ERROR) {
280 Global::statusMessage(tr("Error deleting mail %1").arg(i+1)); 280 Global::statusMessage(tr("Error deleting mail %1").arg(i+1));
281 res = 0; 281 res = 0;
282 break; 282 break;
283 } 283 }
284 } 284 }
285 if (l) mailmessage_list_free(l); 285 if (l) mailmessage_list_free(l);
286 if (folder) mailfolder_free(folder); 286 if (folder) mailfolder_free(folder);
287 if (storage) mailstorage_free(storage); 287 if (storage) mailstorage_free(storage);
288 return res; 288 return res;
289} 289}
290 290
291int MBOXwrapper::deleteMbox(const Folder*tfolder) 291int MBOXwrapper::deleteMbox(const Folder*tfolder)
292{ 292{
293 if (!tfolder) return 0; 293 if (!tfolder) return 0;
294 QString p = MBOXPath+"/"+tfolder->getDisplayName(); 294 QString p = MBOXPath+"/"+tfolder->getDisplayName();
295 QFile fi(p); 295 QFile fi(p);
296 if (!fi.exists()) { 296 if (!fi.exists()) {
297 Global::statusMessage(tr("Mailbox doesn't exist.")); 297 Global::statusMessage(tr("Mailbox doesn't exist."));
298 return 0; 298 return 0;
299 } 299 }
300 if (!fi.remove()) { 300 if (!fi.remove()) {
301 Global::statusMessage(tr("Error deleting Mailbox.")); 301 Global::statusMessage(tr("Error deleting Mailbox."));
302 return 0; 302 return 0;
303 } 303 }
304 return 1; 304 return 1;
305} 305}
306 306
307void MBOXwrapper::statusFolder(folderStat&target_stat,const QString & mailbox) 307void MBOXwrapper::statusFolder(folderStat&target_stat,const QString & mailbox)
308{ 308{
309 mailfolder*folder = 0; 309 mailfolder*folder = 0;
310 mailstorage*storage = mailstorage_new(NULL); 310 mailstorage*storage = mailstorage_new(NULL);
311 target_stat.message_count = 0; 311 target_stat.message_count = 0;
312 target_stat.message_unseen = 0; 312 target_stat.message_unseen = 0;
313 target_stat.message_recent = 0; 313 target_stat.message_recent = 0;
314 QString p = MBOXPath+"/"+mailbox; 314 QString p = MBOXPath+"/"+mailbox;
315 QFile fi(p); 315 QFile fi(p);
316 if (!fi.exists()) { 316 if (!fi.exists()) {
317 Global::statusMessage(tr("Mailbox doesn't exist.")); 317 Global::statusMessage(tr("Mailbox doesn't exist."));
318 return; 318 return;
319 } 319 }
320 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0); 320 int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
321 folder = mailfolder_new( storage,(char*)p.latin1(),NULL); 321 folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
322 r = mailfolder_connect(folder); 322 r = mailfolder_connect(folder);
323 r = mailsession_status_folder(folder->fld_session,(char*)mailbox.latin1(),&target_stat.message_count, 323 r = mailsession_status_folder(folder->fld_session,(char*)mailbox.latin1(),&target_stat.message_count,
324 &target_stat.message_recent,&target_stat.message_unseen); 324 &target_stat.message_recent,&target_stat.message_unseen);
325 if (folder) mailfolder_free(folder); 325 if (folder) mailfolder_free(folder);
326 if (storage) mailstorage_free(storage); 326 if (storage) mailstorage_free(storage);
327} 327}
328 328
329const QString&MBOXwrapper::getType()const 329const QString&MBOXwrapper::getType()const
330{ 330{
331 return wrapperType; 331 return wrapperType;
332} 332}
333
334const QString&MBOXwrapper::getName()const
335{
336 return MBOXName;
337}
diff --git a/noncore/net/mail/libmailwrapper/mboxwrapper.h b/noncore/net/mail/libmailwrapper/mboxwrapper.h
index 2794014..194ff86 100644
--- a/noncore/net/mail/libmailwrapper/mboxwrapper.h
+++ b/noncore/net/mail/libmailwrapper/mboxwrapper.h
@@ -1,45 +1,47 @@
1#ifndef __MBOX_WRAPPER_H 1#ifndef __MBOX_WRAPPER_H
2#define __MBOX_WRAPPER_H 2#define __MBOX_WRAPPER_H
3 3
4#include "genericwrapper.h" 4#include "genericwrapper.h"
5#include <qstring.h> 5#include <qstring.h>
6 6
7class RecMail; 7class RecMail;
8class RecBody; 8class RecBody;
9class encodedString; 9class encodedString;
10struct mailmbox_folder; 10struct mailmbox_folder;
11 11
12class MBOXwrapper : public Genericwrapper 12class MBOXwrapper : public Genericwrapper
13{ 13{
14 Q_OBJECT 14 Q_OBJECT
15public: 15public:
16 MBOXwrapper(const QString & dir); 16 MBOXwrapper(const QString & dir,const QString&name);
17 virtual ~MBOXwrapper(); 17 virtual ~MBOXwrapper();
18 18
19 virtual void listMessages(const QString & mailbox, QList<RecMail> &target ); 19 virtual void listMessages(const QString & mailbox, QList<RecMail> &target );
20 virtual QList<Folder>* listFolders(); 20 virtual QList<Folder>* listFolders();
21 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX"); 21 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX");
22 22
23 virtual void deleteMail(const RecMail&mail); 23 virtual void deleteMail(const RecMail&mail);
24 virtual void answeredMail(const RecMail&mail); 24 virtual void answeredMail(const RecMail&mail);
25 25
26 virtual int createMbox(const QString&folder,const Folder*f=0,const QString&d="",bool s=false); 26 virtual int createMbox(const QString&folder,const Folder*f=0,const QString&d="",bool s=false);
27 virtual int deleteMbox(const Folder*); 27 virtual int deleteMbox(const Folder*);
28 28
29 virtual void storeMessage(const char*msg,size_t length, const QString&folder); 29 virtual void storeMessage(const char*msg,size_t length, const QString&folder);
30 30
31 virtual RecBody fetchBody( const RecMail &mail ); 31 virtual RecBody fetchBody( const RecMail &mail );
32 static void mbox_progress( size_t current, size_t maximum ); 32 static void mbox_progress( size_t current, size_t maximum );
33 33
34 virtual encodedString* fetchRawBody(const RecMail&mail); 34 virtual encodedString* fetchRawBody(const RecMail&mail);
35 virtual void deleteMails(const QString & mailbox,QList<RecMail> &target); 35 virtual void deleteMails(const QString & FolderName,QList<RecMail> &target);
36 virtual int deleteAllMail(const Folder*); 36 virtual int deleteAllMail(const Folder*);
37 virtual const QString&getType()const; 37 virtual const QString&getType()const;
38 virtual const QString&getName()const;
38 39
39protected: 40protected:
40 static void deleteMails(mailmbox_folder*f,QList<RecMail> &target); 41 static void deleteMails(mailmbox_folder*f,QList<RecMail> &target);
41 QString MBOXPath; 42 QString MBOXPath;
43 QString MBOXName;
42 static const QString wrapperType; 44 static const QString wrapperType;
43}; 45};
44 46
45#endif 47#endif
diff --git a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
index cceb22e..67bde38 100644
--- a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
@@ -1,251 +1,257 @@
1#include <stdlib.h> 1#include <stdlib.h>
2#include "pop3wrapper.h" 2#include "pop3wrapper.h"
3#include "mailtypes.h" 3#include "mailtypes.h"
4#include "logindialog.h" 4#include "logindialog.h"
5#include <libetpan/libetpan.h> 5#include <libetpan/libetpan.h>
6#include <qpe/global.h> 6#include <qpe/global.h>
7#include <qfile.h> 7#include <qfile.h>
8#include <qstring.h> 8#include <qstring.h>
9 9
10/* we don't fetch messages larger than 5 MB */ 10/* we don't fetch messages larger than 5 MB */
11#define HARD_MSG_SIZE_LIMIT 5242880 11#define HARD_MSG_SIZE_LIMIT 5242880
12 12
13POP3wrapper::POP3wrapper( POP3account *a ) 13POP3wrapper::POP3wrapper( POP3account *a )
14 : Genericwrapper() 14 : Genericwrapper()
15{ 15{
16 account = a; 16 account = a;
17 m_pop3 = NULL; 17 m_pop3 = NULL;
18 m_folder = NULL; 18 m_folder = NULL;
19 msgTempName = a->getFileName()+"_msg_cache"; 19 msgTempName = a->getFileName()+"_msg_cache";
20 last_msg_id = 0; 20 last_msg_id = 0;
21} 21}
22 22
23POP3wrapper::~POP3wrapper() 23POP3wrapper::~POP3wrapper()
24{ 24{
25 logout(); 25 logout();
26 QFile msg_cache(msgTempName); 26 QFile msg_cache(msgTempName);
27 if (msg_cache.exists()) { 27 if (msg_cache.exists()) {
28 msg_cache.remove(); 28 msg_cache.remove();
29 } 29 }
30} 30}
31 31
32void POP3wrapper::pop3_progress( size_t current, size_t maximum ) 32void POP3wrapper::pop3_progress( size_t current, size_t maximum )
33{ 33{
34 qDebug( "POP3: %i of %i", current, maximum ); 34 qDebug( "POP3: %i of %i", current, maximum );
35} 35}
36 36
37RecBody POP3wrapper::fetchBody( const RecMail &mail ) 37RecBody POP3wrapper::fetchBody( const RecMail &mail )
38{ 38{
39 int err = MAILPOP3_NO_ERROR; 39 int err = MAILPOP3_NO_ERROR;
40 char *message = 0; 40 char *message = 0;
41 size_t length = 0; 41 size_t length = 0;
42 42
43 login(); 43 login();
44 if ( !m_pop3 ) { 44 if ( !m_pop3 ) {
45 return RecBody(); 45 return RecBody();
46 } 46 }
47 47
48 RecBody body; 48 RecBody body;
49 mailmessage * mailmsg; 49 mailmessage * mailmsg;
50 if (mail.Msgsize()>HARD_MSG_SIZE_LIMIT) { 50 if (mail.Msgsize()>HARD_MSG_SIZE_LIMIT) {
51 qDebug("Message to large: %i",mail.Msgsize()); 51 qDebug("Message to large: %i",mail.Msgsize());
52 return body; 52 return body;
53 } 53 }
54 54
55 QFile msg_cache(msgTempName); 55 QFile msg_cache(msgTempName);
56 56
57 cleanMimeCache(); 57 cleanMimeCache();
58 58
59 if (mail.getNumber()!=last_msg_id) { 59 if (mail.getNumber()!=last_msg_id) {
60 if (msg_cache.exists()) { 60 if (msg_cache.exists()) {
61 msg_cache.remove(); 61 msg_cache.remove();
62 } 62 }
63 msg_cache.open(IO_ReadWrite|IO_Truncate); 63 msg_cache.open(IO_ReadWrite|IO_Truncate);
64 last_msg_id = mail.getNumber(); 64 last_msg_id = mail.getNumber();
65 err = mailsession_get_message(m_folder->fld_session, mail.getNumber(), &mailmsg); 65 err = mailsession_get_message(m_folder->fld_session, mail.getNumber(), &mailmsg);
66 err = mailmessage_fetch(mailmsg,&message,&length); 66 err = mailmessage_fetch(mailmsg,&message,&length);
67 msg_cache.writeBlock(message,length); 67 msg_cache.writeBlock(message,length);
68 } else { 68 } else {
69 QString msg=""; 69 QString msg="";
70 msg_cache.open(IO_ReadOnly); 70 msg_cache.open(IO_ReadOnly);
71 message = new char[4096]; 71 message = new char[4096];
72 memset(message,0,4096); 72 memset(message,0,4096);
73 while (msg_cache.readBlock(message,4095)>0) { 73 while (msg_cache.readBlock(message,4095)>0) {
74 msg+=message; 74 msg+=message;
75 memset(message,0,4096); 75 memset(message,0,4096);
76 } 76 }
77 delete message; 77 delete message;
78 message = (char*)malloc(msg.length()+1*sizeof(char)); 78 message = (char*)malloc(msg.length()+1*sizeof(char));
79 memset(message,0,msg.length()+1); 79 memset(message,0,msg.length()+1);
80 memcpy(message,msg.latin1(),msg.length()); 80 memcpy(message,msg.latin1(),msg.length());
81 /* transform to libetpan stuff */ 81 /* transform to libetpan stuff */
82 mailmsg = mailmessage_new(); 82 mailmsg = mailmessage_new();
83 mailmessage_init(mailmsg, NULL, data_message_driver, 0, strlen(message)); 83 mailmessage_init(mailmsg, NULL, data_message_driver, 0, strlen(message));
84 generic_message_t * msg_data; 84 generic_message_t * msg_data;
85 msg_data = (generic_message_t *)mailmsg->msg_data; 85 msg_data = (generic_message_t *)mailmsg->msg_data;
86 msg_data->msg_fetched = 1; 86 msg_data->msg_fetched = 1;
87 msg_data->msg_message = message; 87 msg_data->msg_message = message;
88 msg_data->msg_length = strlen(message); 88 msg_data->msg_length = strlen(message);
89 } 89 }
90 body = parseMail(mailmsg); 90 body = parseMail(mailmsg);
91 91
92 /* clean up */ 92 /* clean up */
93 if (mailmsg) mailmessage_free(mailmsg); 93 if (mailmsg) mailmessage_free(mailmsg);
94 if (message) free(message); 94 if (message) free(message);
95 95
96 return body; 96 return body;
97} 97}
98 98
99void POP3wrapper::listMessages(const QString &, QList<RecMail> &target ) 99void POP3wrapper::listMessages(const QString &, QList<RecMail> &target )
100{ 100{
101 login(); 101 login();
102 if (!m_pop3) return; 102 if (!m_pop3) return;
103 uint32_t res_messages,res_recent,res_unseen; 103 uint32_t res_messages,res_recent,res_unseen;
104 mailsession_status_folder(m_folder->fld_session,"INBOX",&res_messages,&res_recent,&res_unseen); 104 mailsession_status_folder(m_folder->fld_session,"INBOX",&res_messages,&res_recent,&res_unseen);
105 parseList(target,m_folder->fld_session,"INBOX"); 105 parseList(target,m_folder->fld_session,"INBOX");
106 Global::statusMessage( tr("Mailbox contains %1 mail(s)").arg(res_messages)); 106 Global::statusMessage( tr("Mailbox contains %1 mail(s)").arg(res_messages));
107} 107}
108 108
109void POP3wrapper::login() 109void POP3wrapper::login()
110{ 110{
111 if (account->getOffline()) return;
111 /* we'll hold the line */ 112 /* we'll hold the line */
112 if ( m_pop3 != NULL ) return; 113 if ( m_pop3 != NULL ) return;
113 114
114 const char *server, *user, *pass; 115 const char *server, *user, *pass;
115 uint16_t port; 116 uint16_t port;
116 int err = MAILPOP3_NO_ERROR; 117 int err = MAILPOP3_NO_ERROR;
117 118
118 server = account->getServer().latin1(); 119 server = account->getServer().latin1();
119 port = account->getPort().toUInt(); 120 port = account->getPort().toUInt();
120 121
121 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) { 122 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) {
122 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true ); 123 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true );
123 login.show(); 124 login.show();
124 if ( QDialog::Accepted == login.exec() ) { 125 if ( QDialog::Accepted == login.exec() ) {
125 // ok 126 // ok
126 user = login.getUser().latin1(); 127 user = login.getUser().latin1();
127 pass = login.getPassword().latin1(); 128 pass = login.getPassword().latin1();
128 } else { 129 } else {
129 // cancel 130 // cancel
130 qDebug( "POP3: Login canceled" ); 131 qDebug( "POP3: Login canceled" );
131 return; 132 return;
132 } 133 }
133 } else { 134 } else {
134 user = account->getUser().latin1(); 135 user = account->getUser().latin1();
135 pass = account->getPassword().latin1(); 136 pass = account->getPassword().latin1();
136 } 137 }
137 138
138 bool ssl = account->getSSL(); 139 bool ssl = account->getSSL();
139 140
140 m_pop3=mailstorage_new(NULL); 141 m_pop3=mailstorage_new(NULL);
141 int conntype = (ssl?CONNECTION_TYPE_TLS:CONNECTION_TYPE_PLAIN); 142 int conntype = (ssl?CONNECTION_TYPE_TLS:CONNECTION_TYPE_PLAIN);
142 143
143 pop3_mailstorage_init(m_pop3,(char*)server,port,NULL,conntype,POP3_AUTH_TYPE_PLAIN, 144 pop3_mailstorage_init(m_pop3,(char*)server,port,NULL,conntype,POP3_AUTH_TYPE_PLAIN,
144 (char*)user,(char*)pass,0,0,0); 145 (char*)user,(char*)pass,0,0,0);
145 146
146 m_folder = mailfolder_new(m_pop3, NULL, NULL); 147 m_folder = mailfolder_new(m_pop3, NULL, NULL);
147 148
148 if (m_folder==0) { 149 if (m_folder==0) {
149 Global::statusMessage(tr("Error initializing folder")); 150 Global::statusMessage(tr("Error initializing folder"));
150 mailstorage_free(m_pop3); 151 mailstorage_free(m_pop3);
151 m_pop3 = NULL; 152 m_pop3 = NULL;
152 return; 153 return;
153 } 154 }
154 err = mailfolder_connect(m_folder); 155 err = mailfolder_connect(m_folder);
155 if (err != MAIL_NO_ERROR) { 156 if (err != MAIL_NO_ERROR) {
156 qDebug( QString( "FEHLERNUMMER %1" ).arg( err ) ); 157 qDebug( QString( "FEHLERNUMMER %1" ).arg( err ) );
157 Global::statusMessage(tr("Error initializing folder")); 158 Global::statusMessage(tr("Error initializing folder"));
158 mailfolder_free(m_folder); 159 mailfolder_free(m_folder);
159 m_folder = 0; 160 m_folder = 0;
160 mailstorage_free(m_pop3); 161 mailstorage_free(m_pop3);
161 m_pop3 = 0; 162 m_pop3 = 0;
162 } 163 }
163} 164}
164 165
165void POP3wrapper::logout() 166void POP3wrapper::logout()
166{ 167{
167 int err = MAILPOP3_NO_ERROR; 168 int err = MAILPOP3_NO_ERROR;
168 if ( m_pop3 == NULL ) return; 169 if ( m_pop3 == NULL ) return;
169 mailfolder_free(m_folder); 170 mailfolder_free(m_folder);
170 m_folder = 0; 171 m_folder = 0;
171 mailstorage_free(m_pop3); 172 mailstorage_free(m_pop3);
172 m_pop3 = 0; 173 m_pop3 = 0;
173} 174}
174 175
175 176
176QList<Folder>* POP3wrapper::listFolders() 177QList<Folder>* POP3wrapper::listFolders()
177{ 178{
178 QList<Folder> * folders = new QList<Folder>(); 179 QList<Folder> * folders = new QList<Folder>();
179 folders->setAutoDelete( false ); 180 folders->setAutoDelete( false );
180 Folder*inb=new Folder("INBOX","/"); 181 Folder*inb=new Folder("INBOX","/");
181 folders->append(inb); 182 folders->append(inb);
182 return folders; 183 return folders;
183} 184}
184 185
185void POP3wrapper::deleteMail(const RecMail&mail) 186void POP3wrapper::deleteMail(const RecMail&mail)
186{ 187{
187 login(); 188 login();
188 if (!m_pop3) return; 189 if (!m_pop3) return;
189 int err = mailsession_remove_message(m_folder->fld_session,mail.getNumber()); 190 int err = mailsession_remove_message(m_folder->fld_session,mail.getNumber());
190 if (err != MAIL_NO_ERROR) { 191 if (err != MAIL_NO_ERROR) {
191 Global::statusMessage(tr("error deleting mail")); 192 Global::statusMessage(tr("error deleting mail"));
192 } 193 }
193} 194}
194 195
195void POP3wrapper::answeredMail(const RecMail&) 196void POP3wrapper::answeredMail(const RecMail&)
196{ 197{
197} 198}
198 199
199int POP3wrapper::deleteAllMail(const Folder*) 200int POP3wrapper::deleteAllMail(const Folder*)
200{ 201{
201 login(); 202 login();
202 if (!m_pop3) return 0; 203 if (!m_pop3) return 0;
203 int res = 1; 204 int res = 1;
204 205
205 uint32_t result = 0; 206 uint32_t result = 0;
206 int err = mailsession_messages_number(m_folder->fld_session,NULL,&result); 207 int err = mailsession_messages_number(m_folder->fld_session,NULL,&result);
207 if (err != MAIL_NO_ERROR) { 208 if (err != MAIL_NO_ERROR) {
208 Global::statusMessage(tr("Error getting folder info")); 209 Global::statusMessage(tr("Error getting folder info"));
209 return 0; 210 return 0;
210 } 211 }
211 for (unsigned int i = 0; i < result; ++i) { 212 for (unsigned int i = 0; i < result; ++i) {
212 err = mailsession_remove_message(m_folder->fld_session,i+1); 213 err = mailsession_remove_message(m_folder->fld_session,i+1);
213 if (err != MAIL_NO_ERROR) { 214 if (err != MAIL_NO_ERROR) {
214 Global::statusMessage(tr("Error deleting mail %1").arg(i+1)); 215 Global::statusMessage(tr("Error deleting mail %1").arg(i+1));
215 res=0; 216 res=0;
216 } 217 }
217 break; 218 break;
218 } 219 }
219 return res; 220 return res;
220} 221}
221 222
222void POP3wrapper::statusFolder(folderStat&target_stat,const QString&) 223void POP3wrapper::statusFolder(folderStat&target_stat,const QString&)
223{ 224{
224 login(); 225 login();
225 target_stat.message_count = 0; 226 target_stat.message_count = 0;
226 target_stat.message_unseen = 0; 227 target_stat.message_unseen = 0;
227 target_stat.message_recent = 0; 228 target_stat.message_recent = 0;
228 if (!m_pop3) return; 229 if (!m_pop3) return;
229 int r = mailsession_status_folder(m_folder->fld_session,0,&target_stat.message_count, 230 int r = mailsession_status_folder(m_folder->fld_session,0,&target_stat.message_count,
230 &target_stat.message_recent,&target_stat.message_unseen); 231 &target_stat.message_recent,&target_stat.message_unseen);
231} 232}
232 233
233encodedString* POP3wrapper::fetchRawBody(const RecMail&mail) 234encodedString* POP3wrapper::fetchRawBody(const RecMail&mail)
234{ 235{
235 char*target=0; 236 char*target=0;
236 size_t length=0; 237 size_t length=0;
237 encodedString*res = 0; 238 encodedString*res = 0;
238 mailmessage * mailmsg = 0; 239 mailmessage * mailmsg = 0;
239 int err = mailsession_get_message(m_folder->fld_session, mail.getNumber(), &mailmsg); 240 int err = mailsession_get_message(m_folder->fld_session, mail.getNumber(), &mailmsg);
240 err = mailmessage_fetch(mailmsg,&target,&length); 241 err = mailmessage_fetch(mailmsg,&target,&length);
241 if (mailmsg) mailmessage_free(mailmsg); 242 if (mailmsg) mailmessage_free(mailmsg);
242 if (target) { 243 if (target) {
243 res = new encodedString(target,length); 244 res = new encodedString(target,length);
244 } 245 }
245 return res; 246 return res;
246} 247}
247 248
248const QString&POP3wrapper::getType()const 249const QString&POP3wrapper::getType()const
249{ 250{
250 return account->getType(); 251 return account->getType();
251} 252}
253
254const QString&POP3wrapper::getName()const
255{
256 return account->getAccountName();
257}
diff --git a/noncore/net/mail/libmailwrapper/pop3wrapper.h b/noncore/net/mail/libmailwrapper/pop3wrapper.h
index f0307b6..d2b708d 100644
--- a/noncore/net/mail/libmailwrapper/pop3wrapper.h
+++ b/noncore/net/mail/libmailwrapper/pop3wrapper.h
@@ -1,42 +1,43 @@
1#ifndef __POP3WRAPPER 1#ifndef __POP3WRAPPER
2#define __POP3WRAPPER 2#define __POP3WRAPPER
3 3
4#include "mailwrapper.h" 4#include "mailwrapper.h"
5#include "genericwrapper.h" 5#include "genericwrapper.h"
6#include <qstring.h> 6#include <qstring.h>
7 7
8class encodedString; 8class encodedString;
9struct mailstorage; 9struct mailstorage;
10struct mailfolder; 10struct mailfolder;
11 11
12class POP3wrapper : public Genericwrapper 12class POP3wrapper : public Genericwrapper
13{ 13{
14 Q_OBJECT 14 Q_OBJECT
15 15
16public: 16public:
17 POP3wrapper( POP3account *a ); 17 POP3wrapper( POP3account *a );
18 virtual ~POP3wrapper(); 18 virtual ~POP3wrapper();
19 /* mailbox will be ignored */ 19 /* mailbox will be ignored */
20 virtual void listMessages(const QString & mailbox, QList<RecMail> &target ); 20 virtual void listMessages(const QString & mailbox, QList<RecMail> &target );
21 virtual QList<Folder>* listFolders(); 21 virtual QList<Folder>* listFolders();
22 /* mailbox will be ignored */ 22 /* mailbox will be ignored */
23 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX"); 23 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX");
24 24
25 virtual void deleteMail(const RecMail&mail); 25 virtual void deleteMail(const RecMail&mail);
26 virtual void answeredMail(const RecMail&mail); 26 virtual void answeredMail(const RecMail&mail);
27 virtual int deleteAllMail(const Folder*); 27 virtual int deleteAllMail(const Folder*);
28 28
29 virtual RecBody fetchBody( const RecMail &mail ); 29 virtual RecBody fetchBody( const RecMail &mail );
30 virtual encodedString* fetchRawBody(const RecMail&mail); 30 virtual encodedString* fetchRawBody(const RecMail&mail);
31 virtual void logout(); 31 virtual void logout();
32 virtual const QString&getType()const; 32 virtual const QString&getType()const;
33 virtual const QString&getName()const;
33 static void pop3_progress( size_t current, size_t maximum ); 34 static void pop3_progress( size_t current, size_t maximum );
34 35
35protected: 36protected:
36 void login(); 37 void login();
37 POP3account *account; 38 POP3account *account;
38 mailstorage*m_pop3; 39 mailstorage*m_pop3;
39 mailfolder*m_folder; 40 mailfolder*m_folder;
40}; 41};
41 42
42#endif 43#endif
diff --git a/noncore/net/mail/libmailwrapper/settings.cpp b/noncore/net/mail/libmailwrapper/settings.cpp
index c5187f5..02a80a3 100644
--- a/noncore/net/mail/libmailwrapper/settings.cpp
+++ b/noncore/net/mail/libmailwrapper/settings.cpp
@@ -1,413 +1,425 @@
1#include <stdlib.h> 1#include <stdlib.h>
2#include <qdir.h> 2#include <qdir.h>
3 3
4#include <qpe/config.h> 4#include <qpe/config.h>
5 5
6#include "settings.h" 6#include "settings.h"
7//#include "defines.h" 7//#include "defines.h"
8 8
9#define IMAP_PORT "143" 9#define IMAP_PORT "143"
10#define IMAP_SSL_PORT "993" 10#define IMAP_SSL_PORT "993"
11#define SMTP_PORT "25" 11#define SMTP_PORT "25"
12#define SMTP_SSL_PORT "465" 12#define SMTP_SSL_PORT "465"
13#define POP3_PORT "110" 13#define POP3_PORT "110"
14#define POP3_SSL_PORT "995" 14#define POP3_SSL_PORT "995"
15#define NNTP_PORT "119" 15#define NNTP_PORT "119"
16#define NNTP_SSL_PORT "563" 16#define NNTP_SSL_PORT "563"
17 17
18 18
19Settings::Settings() 19Settings::Settings()
20 : QObject() 20 : QObject()
21{ 21{
22 updateAccounts(); 22 updateAccounts();
23} 23}
24 24
25void Settings::checkDirectory() 25void Settings::checkDirectory()
26{ 26{
27 if ( !QDir( (QString) getenv( "HOME" ) + "/Applications/opiemail/" ).exists() ) { 27 if ( !QDir( (QString) getenv( "HOME" ) + "/Applications/opiemail/" ).exists() ) {
28 system( "mkdir -p $HOME/Applications/opiemail" ); 28 system( "mkdir -p $HOME/Applications/opiemail" );
29 qDebug( "$HOME/Applications/opiemail created" ); 29 qDebug( "$HOME/Applications/opiemail created" );
30 } 30 }
31} 31}
32 32
33QList<Account> Settings::getAccounts() 33QList<Account> Settings::getAccounts()
34{ 34{
35 return accounts; 35 return accounts;
36} 36}
37 37
38void Settings::addAccount( Account *account ) 38void Settings::addAccount( Account *account )
39{ 39{
40 accounts.append( account ); 40 accounts.append( account );
41} 41}
42 42
43void Settings::delAccount( Account *account ) 43void Settings::delAccount( Account *account )
44{ 44{
45 accounts.remove( account ); 45 accounts.remove( account );
46 account->remove(); 46 account->remove();
47} 47}
48 48
49void Settings::updateAccounts() 49void Settings::updateAccounts()
50{ 50{
51 accounts.clear(); 51 accounts.clear();
52 QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" ); 52 QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
53 QStringList::Iterator it; 53 QStringList::Iterator it;
54 54
55 QStringList imap = dir.entryList( "imap-*" ); 55 QStringList imap = dir.entryList( "imap-*" );
56 for ( it = imap.begin(); it != imap.end(); it++ ) { 56 for ( it = imap.begin(); it != imap.end(); it++ ) {
57 qDebug( "Added IMAP account" ); 57 qDebug( "Added IMAP account" );
58 IMAPaccount *account = new IMAPaccount( (*it).replace(0, 5, "") ); 58 IMAPaccount *account = new IMAPaccount( (*it).replace(0, 5, "") );
59 accounts.append( account ); 59 accounts.append( account );
60 } 60 }
61 61
62 QStringList pop3 = dir.entryList( "pop3-*" ); 62 QStringList pop3 = dir.entryList( "pop3-*" );
63 for ( it = pop3.begin(); it != pop3.end(); it++ ) { 63 for ( it = pop3.begin(); it != pop3.end(); it++ ) {
64 qDebug( "Added POP account" ); 64 qDebug( "Added POP account" );
65 POP3account *account = new POP3account( (*it).replace(0, 5, "") ); 65 POP3account *account = new POP3account( (*it).replace(0, 5, "") );
66 accounts.append( account ); 66 accounts.append( account );
67 } 67 }
68 68
69 QStringList smtp = dir.entryList( "smtp-*" ); 69 QStringList smtp = dir.entryList( "smtp-*" );
70 for ( it = smtp.begin(); it != smtp.end(); it++ ) { 70 for ( it = smtp.begin(); it != smtp.end(); it++ ) {
71 qDebug( "Added SMTP account" ); 71 qDebug( "Added SMTP account" );
72 SMTPaccount *account = new SMTPaccount( (*it).replace(0, 5, "") ); 72 SMTPaccount *account = new SMTPaccount( (*it).replace(0, 5, "") );
73 accounts.append( account ); 73 accounts.append( account );
74 } 74 }
75 75
76 QStringList nntp = dir.entryList( "nntp-*" ); 76 QStringList nntp = dir.entryList( "nntp-*" );
77 for ( it = nntp.begin(); it != nntp.end(); it++ ) { 77 for ( it = nntp.begin(); it != nntp.end(); it++ ) {
78 qDebug( "Added NNTP account" ); 78 qDebug( "Added NNTP account" );
79 NNTPaccount *account = new NNTPaccount( (*it).replace(0, 5, "") ); 79 NNTPaccount *account = new NNTPaccount( (*it).replace(0, 5, "") );
80 accounts.append( account ); 80 accounts.append( account );
81 } 81 }
82 82
83 readAccounts(); 83 readAccounts();
84} 84}
85 85
86void Settings::saveAccounts() 86void Settings::saveAccounts()
87{ 87{
88 checkDirectory(); 88 checkDirectory();
89 Account *it; 89 Account *it;
90 90
91 for ( it = accounts.first(); it; it = accounts.next() ) { 91 for ( it = accounts.first(); it; it = accounts.next() ) {
92 it->save(); 92 it->save();
93 } 93 }
94} 94}
95 95
96void Settings::readAccounts() 96void Settings::readAccounts()
97{ 97{
98 checkDirectory(); 98 checkDirectory();
99 Account *it; 99 Account *it;
100 100
101 for ( it = accounts.first(); it; it = accounts.next() ) { 101 for ( it = accounts.first(); it; it = accounts.next() ) {
102 it->read(); 102 it->read();
103 } 103 }
104} 104}
105 105
106Account::Account() 106Account::Account()
107{ 107{
108 accountName = "changeMe"; 108 accountName = "changeMe";
109 type = "changeMe"; 109 type = "changeMe";
110 ssl = false; 110 ssl = false;
111} 111}
112 112
113void Account::remove() 113void Account::remove()
114{ 114{
115 QFile file( getFileName() ); 115 QFile file( getFileName() );
116 file.remove(); 116 file.remove();
117} 117}
118 118
119IMAPaccount::IMAPaccount() 119IMAPaccount::IMAPaccount()
120 : Account() 120 : Account()
121{ 121{
122 file = IMAPaccount::getUniqueFileName(); 122 file = IMAPaccount::getUniqueFileName();
123 accountName = "New IMAP Account"; 123 accountName = "New IMAP Account";
124 ssl = false; 124 ssl = false;
125 type = "IMAP"; 125 type = "IMAP";
126 port = IMAP_PORT; 126 port = IMAP_PORT;
127} 127}
128 128
129IMAPaccount::IMAPaccount( QString filename ) 129IMAPaccount::IMAPaccount( QString filename )
130 : Account() 130 : Account()
131{ 131{
132 file = filename; 132 file = filename;
133 accountName = "New IMAP Account"; 133 accountName = "New IMAP Account";
134 ssl = false; 134 ssl = false;
135 type = "IMAP"; 135 type = "IMAP";
136 port = IMAP_PORT; 136 port = IMAP_PORT;
137} 137}
138 138
139QString IMAPaccount::getUniqueFileName() 139QString IMAPaccount::getUniqueFileName()
140{ 140{
141 int num = 0; 141 int num = 0;
142 QString unique; 142 QString unique;
143 143
144 QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" ); 144 QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
145 145
146 QStringList imap = dir.entryList( "imap-*" ); 146 QStringList imap = dir.entryList( "imap-*" );
147 do { 147 do {
148 unique.setNum( num++ ); 148 unique.setNum( num++ );
149 } while ( imap.contains( "imap-" + unique ) > 0 ); 149 } while ( imap.contains( "imap-" + unique ) > 0 );
150 150
151 return unique; 151 return unique;
152} 152}
153 153
154void IMAPaccount::read() 154void IMAPaccount::read()
155{ 155{
156 Config *conf = new Config( getFileName(), Config::File ); 156 Config *conf = new Config( getFileName(), Config::File );
157 conf->setGroup( "IMAP Account" ); 157 conf->setGroup( "IMAP Account" );
158 accountName = conf->readEntry( "Account","" ); 158 accountName = conf->readEntry( "Account","" );
159 if (accountName.isNull()) accountName = ""; 159 if (accountName.isNull()) accountName = "";
160 server = conf->readEntry( "Server","" ); 160 server = conf->readEntry( "Server","" );
161 if (server.isNull()) server=""; 161 if (server.isNull()) server="";
162 port = conf->readEntry( "Port","" ); 162 port = conf->readEntry( "Port","" );
163 if (port.isNull()) port="143"; 163 if (port.isNull()) port="143";
164 ssl = conf->readBoolEntry( "SSL",false ); 164 ssl = conf->readBoolEntry( "SSL",false );
165 user = conf->readEntry( "User","" ); 165 user = conf->readEntry( "User","" );
166 if (user.isNull()) user = ""; 166 if (user.isNull()) user = "";
167 password = conf->readEntryCrypt( "Password","" ); 167 password = conf->readEntryCrypt( "Password","" );
168 if (password.isNull()) password = ""; 168 if (password.isNull()) password = "";
169 prefix = conf->readEntry("MailPrefix",""); 169 prefix = conf->readEntry("MailPrefix","");
170 if (prefix.isNull()) prefix = ""; 170 if (prefix.isNull()) prefix = "";
171 offline = conf->readBoolEntry("Offline",false);
172 delete conf;
171} 173}
172 174
173void IMAPaccount::save() 175void IMAPaccount::save()
174{ 176{
175 qDebug( "saving " + getFileName() ); 177 qDebug( "saving " + getFileName() );
176 Settings::checkDirectory(); 178 Settings::checkDirectory();
177 179
178 Config *conf = new Config( getFileName(), Config::File ); 180 Config *conf = new Config( getFileName(), Config::File );
179 conf->setGroup( "IMAP Account" ); 181 conf->setGroup( "IMAP Account" );
180 conf->writeEntry( "Account", accountName ); 182 conf->writeEntry( "Account", accountName );
181 conf->writeEntry( "Server", server ); 183 conf->writeEntry( "Server", server );
182 conf->writeEntry( "Port", port ); 184 conf->writeEntry( "Port", port );
183 conf->writeEntry( "SSL", ssl ); 185 conf->writeEntry( "SSL", ssl );
184 conf->writeEntry( "User", user ); 186 conf->writeEntry( "User", user );
185 conf->writeEntryCrypt( "Password", password ); 187 conf->writeEntryCrypt( "Password", password );
186 conf->writeEntry( "MailPrefix",prefix); 188 conf->writeEntry( "MailPrefix",prefix);
189 conf->writeEntry( "Offline",offline);
187 conf->write(); 190 conf->write();
191 delete conf;
188} 192}
189 193
190 194
191QString IMAPaccount::getFileName() 195QString IMAPaccount::getFileName()
192{ 196{
193 return (QString) getenv( "HOME" ) + "/Applications/opiemail/imap-" + file; 197 return (QString) getenv( "HOME" ) + "/Applications/opiemail/imap-" + file;
194} 198}
195 199
196POP3account::POP3account() 200POP3account::POP3account()
197 : Account() 201 : Account()
198{ 202{
199 file = POP3account::getUniqueFileName(); 203 file = POP3account::getUniqueFileName();
200 accountName = "New POP3 Account"; 204 accountName = "New POP3 Account";
201 ssl = false; 205 ssl = false;
202 type = "POP3"; 206 type = "POP3";
203 port = POP3_PORT; 207 port = POP3_PORT;
204} 208}
205 209
206POP3account::POP3account( QString filename ) 210POP3account::POP3account( QString filename )
207 : Account() 211 : Account()
208{ 212{
209 file = filename; 213 file = filename;
210 accountName = "New POP3 Account"; 214 accountName = "New POP3 Account";
211 ssl = false; 215 ssl = false;
212 type = "POP3"; 216 type = "POP3";
213 port = POP3_PORT; 217 port = POP3_PORT;
214} 218}
215 219
216QString POP3account::getUniqueFileName() 220QString POP3account::getUniqueFileName()
217{ 221{
218 int num = 0; 222 int num = 0;
219 QString unique; 223 QString unique;
220 224
221 QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" ); 225 QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
222 226
223 QStringList imap = dir.entryList( "pop3-*" ); 227 QStringList imap = dir.entryList( "pop3-*" );
224 do { 228 do {
225 unique.setNum( num++ ); 229 unique.setNum( num++ );
226 } while ( imap.contains( "pop3-" + unique ) > 0 ); 230 } while ( imap.contains( "pop3-" + unique ) > 0 );
227 231
228 return unique; 232 return unique;
229} 233}
230 234
231void POP3account::read() 235void POP3account::read()
232{ 236{
233 Config *conf = new Config( getFileName(), Config::File ); 237 Config *conf = new Config( getFileName(), Config::File );
234 conf->setGroup( "POP3 Account" ); 238 conf->setGroup( "POP3 Account" );
235 accountName = conf->readEntry( "Account" ); 239 accountName = conf->readEntry( "Account" );
236 server = conf->readEntry( "Server" ); 240 server = conf->readEntry( "Server" );
237 port = conf->readEntry( "Port" ); 241 port = conf->readEntry( "Port" );
238 ssl = conf->readBoolEntry( "SSL" ); 242 ssl = conf->readBoolEntry( "SSL" );
239 user = conf->readEntry( "User" ); 243 user = conf->readEntry( "User" );
240 password = conf->readEntryCrypt( "Password" ); 244 password = conf->readEntryCrypt( "Password" );
245 offline = conf->readBoolEntry("Offline",false);
246 delete conf;
241} 247}
242 248
243void POP3account::save() 249void POP3account::save()
244{ 250{
245 qDebug( "saving " + getFileName() ); 251 qDebug( "saving " + getFileName() );
246 Settings::checkDirectory(); 252 Settings::checkDirectory();
247 253
248 Config *conf = new Config( getFileName(), Config::File ); 254 Config *conf = new Config( getFileName(), Config::File );
249 conf->setGroup( "POP3 Account" ); 255 conf->setGroup( "POP3 Account" );
250 conf->writeEntry( "Account", accountName ); 256 conf->writeEntry( "Account", accountName );
251 conf->writeEntry( "Server", server ); 257 conf->writeEntry( "Server", server );
252 conf->writeEntry( "Port", port ); 258 conf->writeEntry( "Port", port );
253 conf->writeEntry( "SSL", ssl ); 259 conf->writeEntry( "SSL", ssl );
254 conf->writeEntry( "User", user ); 260 conf->writeEntry( "User", user );
255 conf->writeEntryCrypt( "Password", password ); 261 conf->writeEntryCrypt( "Password", password );
262 conf->writeEntry( "Offline",offline);
256 conf->write(); 263 conf->write();
264 delete conf;
257} 265}
258 266
259 267
260QString POP3account::getFileName() 268QString POP3account::getFileName()
261{ 269{
262 return (QString) getenv( "HOME" ) + "/Applications/opiemail/pop3-" + file; 270 return (QString) getenv( "HOME" ) + "/Applications/opiemail/pop3-" + file;
263} 271}
264 272
265SMTPaccount::SMTPaccount() 273SMTPaccount::SMTPaccount()
266 : Account() 274 : Account()
267{ 275{
268 file = SMTPaccount::getUniqueFileName(); 276 file = SMTPaccount::getUniqueFileName();
269 accountName = "New SMTP Account"; 277 accountName = "New SMTP Account";
270 ssl = false; 278 ssl = false;
271 login = false; 279 login = false;
272 useCC = false; 280 useCC = false;
273 useBCC = false; 281 useBCC = false;
274 useReply = false; 282 useReply = false;
275 type = "SMTP"; 283 type = "SMTP";
276 port = SMTP_PORT; 284 port = SMTP_PORT;
277} 285}
278 286
279SMTPaccount::SMTPaccount( QString filename ) 287SMTPaccount::SMTPaccount( QString filename )
280 : Account() 288 : Account()
281{ 289{
282 file = filename; 290 file = filename;
283 accountName = "New SMTP Account"; 291 accountName = "New SMTP Account";
284 ssl = false; 292 ssl = false;
285 login = false; 293 login = false;
286 type = "SMTP"; 294 type = "SMTP";
287 port = SMTP_PORT; 295 port = SMTP_PORT;
288} 296}
289 297
290QString SMTPaccount::getUniqueFileName() 298QString SMTPaccount::getUniqueFileName()
291{ 299{
292 int num = 0; 300 int num = 0;
293 QString unique; 301 QString unique;
294 302
295 QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" ); 303 QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
296 304
297 QStringList imap = dir.entryList( "smtp-*" ); 305 QStringList imap = dir.entryList( "smtp-*" );
298 do { 306 do {
299 unique.setNum( num++ ); 307 unique.setNum( num++ );
300 } while ( imap.contains( "smtp-" + unique ) > 0 ); 308 } while ( imap.contains( "smtp-" + unique ) > 0 );
301 309
302 return unique; 310 return unique;
303} 311}
304 312
305void SMTPaccount::read() 313void SMTPaccount::read()
306{ 314{
307 Config *conf = new Config( getFileName(), Config::File ); 315 Config *conf = new Config( getFileName(), Config::File );
308 conf->setGroup( "SMTP Account" ); 316 conf->setGroup( "SMTP Account" );
309 accountName = conf->readEntry( "Account" ); 317 accountName = conf->readEntry( "Account" );
310 server = conf->readEntry( "Server" ); 318 server = conf->readEntry( "Server" );
311 port = conf->readEntry( "Port" ); 319 port = conf->readEntry( "Port" );
312 ssl = conf->readBoolEntry( "SSL" ); 320 ssl = conf->readBoolEntry( "SSL" );
313 login = conf->readBoolEntry( "Login" ); 321 login = conf->readBoolEntry( "Login" );
314 user = conf->readEntry( "User" ); 322 user = conf->readEntry( "User" );
315 password = conf->readEntryCrypt( "Password" ); 323 password = conf->readEntryCrypt( "Password" );
324 delete conf;
316} 325}
317 326
318void SMTPaccount::save() 327void SMTPaccount::save()
319{ 328{
320 qDebug( "saving " + getFileName() ); 329 qDebug( "saving " + getFileName() );
321 Settings::checkDirectory(); 330 Settings::checkDirectory();
322 331
323 Config *conf = new Config( getFileName(), Config::File ); 332 Config *conf = new Config( getFileName(), Config::File );
324 conf->setGroup( "SMTP Account" ); 333 conf->setGroup( "SMTP Account" );
325 conf->writeEntry( "Account", accountName ); 334 conf->writeEntry( "Account", accountName );
326 conf->writeEntry( "Server", server ); 335 conf->writeEntry( "Server", server );
327 conf->writeEntry( "Port", port ); 336 conf->writeEntry( "Port", port );
328 conf->writeEntry( "SSL", ssl ); 337 conf->writeEntry( "SSL", ssl );
329 conf->writeEntry( "Login", login ); 338 conf->writeEntry( "Login", login );
330 conf->writeEntry( "User", user ); 339 conf->writeEntry( "User", user );
331 conf->writeEntryCrypt( "Password", password ); 340 conf->writeEntryCrypt( "Password", password );
332 conf->write(); 341 conf->write();
342 delete conf;
333} 343}
334 344
335 345
336QString SMTPaccount::getFileName() 346QString SMTPaccount::getFileName()
337{ 347{
338 return (QString) getenv( "HOME" ) + "/Applications/opiemail/smtp-" + file; 348 return (QString) getenv( "HOME" ) + "/Applications/opiemail/smtp-" + file;
339} 349}
340 350
341NNTPaccount::NNTPaccount() 351NNTPaccount::NNTPaccount()
342 : Account() 352 : Account()
343{ 353{
344 file = NNTPaccount::getUniqueFileName(); 354 file = NNTPaccount::getUniqueFileName();
345 accountName = "New NNTP Account"; 355 accountName = "New NNTP Account";
346 ssl = false; 356 ssl = false;
347 login = false; 357 login = false;
348 type = "NNTP"; 358 type = "NNTP";
349 port = NNTP_PORT; 359 port = NNTP_PORT;
350} 360}
351 361
352NNTPaccount::NNTPaccount( QString filename ) 362NNTPaccount::NNTPaccount( QString filename )
353 : Account() 363 : Account()
354{ 364{
355 file = filename; 365 file = filename;
356 accountName = "New NNTP Account"; 366 accountName = "New NNTP Account";
357 ssl = false; 367 ssl = false;
358 login = false; 368 login = false;
359 type = "NNTP"; 369 type = "NNTP";
360 port = NNTP_PORT; 370 port = NNTP_PORT;
361} 371}
362 372
363QString NNTPaccount::getUniqueFileName() 373QString NNTPaccount::getUniqueFileName()
364{ 374{
365 int num = 0; 375 int num = 0;
366 QString unique; 376 QString unique;
367 377
368 QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" ); 378 QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
369 379
370 QStringList imap = dir.entryList( "nntp-*" ); 380 QStringList imap = dir.entryList( "nntp-*" );
371 do { 381 do {
372 unique.setNum( num++ ); 382 unique.setNum( num++ );
373 } while ( imap.contains( "nntp-" + unique ) > 0 ); 383 } while ( imap.contains( "nntp-" + unique ) > 0 );
374 384
375 return unique; 385 return unique;
376} 386}
377 387
378void NNTPaccount::read() 388void NNTPaccount::read()
379{ 389{
380 Config *conf = new Config( getFileName(), Config::File ); 390 Config *conf = new Config( getFileName(), Config::File );
381 conf->setGroup( "NNTP Account" ); 391 conf->setGroup( "NNTP Account" );
382 accountName = conf->readEntry( "Account" ); 392 accountName = conf->readEntry( "Account" );
383 server = conf->readEntry( "Server" ); 393 server = conf->readEntry( "Server" );
384 port = conf->readEntry( "Port" ); 394 port = conf->readEntry( "Port" );
385 ssl = conf->readBoolEntry( "SSL" ); 395 ssl = conf->readBoolEntry( "SSL" );
386 login = conf->readBoolEntry( "Login" ); 396 login = conf->readBoolEntry( "Login" );
387 user = conf->readEntry( "User" ); 397 user = conf->readEntry( "User" );
388 password = conf->readEntryCrypt( "Password" ); 398 password = conf->readEntryCrypt( "Password" );
399 delete conf;
389} 400}
390 401
391void NNTPaccount::save() 402void NNTPaccount::save()
392{ 403{
393 qDebug( "saving " + getFileName() ); 404 qDebug( "saving " + getFileName() );
394 Settings::checkDirectory(); 405 Settings::checkDirectory();
395 406
396 Config *conf = new Config( getFileName(), Config::File ); 407 Config *conf = new Config( getFileName(), Config::File );
397 conf->setGroup( "NNTP Account" ); 408 conf->setGroup( "NNTP Account" );
398 conf->writeEntry( "Account", accountName ); 409 conf->writeEntry( "Account", accountName );
399 conf->writeEntry( "Server", server ); 410 conf->writeEntry( "Server", server );
400 conf->writeEntry( "Port", port ); 411 conf->writeEntry( "Port", port );
401 conf->writeEntry( "SSL", ssl ); 412 conf->writeEntry( "SSL", ssl );
402 conf->writeEntry( "Login", login ); 413 conf->writeEntry( "Login", login );
403 conf->writeEntry( "User", user ); 414 conf->writeEntry( "User", user );
404 conf->writeEntryCrypt( "Password", password ); 415 conf->writeEntryCrypt( "Password", password );
405 conf->write(); 416 conf->write();
417 delete conf;
406} 418}
407 419
408 420
409QString NNTPaccount::getFileName() 421QString NNTPaccount::getFileName()
410{ 422{
411 return (QString) getenv( "HOME" ) + "/Applications/opiemail/nntp-" + file; 423 return (QString) getenv( "HOME" ) + "/Applications/opiemail/nntp-" + file;
412} 424}
413 425
diff --git a/noncore/net/mail/libmailwrapper/settings.h b/noncore/net/mail/libmailwrapper/settings.h
index caa5dfc..2104997 100644
--- a/noncore/net/mail/libmailwrapper/settings.h
+++ b/noncore/net/mail/libmailwrapper/settings.h
@@ -1,146 +1,149 @@
1#ifndef SETTINGS_H 1#ifndef SETTINGS_H
2#define SETTINGS_H 2#define SETTINGS_H
3 3
4#include <qobject.h> 4#include <qobject.h>
5#include <qlist.h> 5#include <qlist.h>
6 6
7class Account 7class Account
8{ 8{
9 9
10public: 10public:
11 Account(); 11 Account();
12 virtual ~Account() {} 12 virtual ~Account() {}
13 13
14 void remove(); 14 void remove();
15 void setAccountName( QString name ) { accountName = name; } 15 void setAccountName( QString name ) { accountName = name; }
16 const QString&getAccountName()const{ return accountName; } 16 const QString&getAccountName()const{ return accountName; }
17 const QString&getType()const{ return type; } 17 const QString&getType()const{ return type; }
18 18
19 void setServer(const QString&str){ server = str; } 19 void setServer(const QString&str){ server = str; }
20 const QString&getServer()const{ return server; } 20 const QString&getServer()const{ return server; }
21 21
22 void setPort(const QString&str) { port = str; } 22 void setPort(const QString&str) { port = str; }
23 const QString&getPort()const{ return port; } 23 const QString&getPort()const{ return port; }
24 24
25 void setUser(const QString&str){ user = str; } 25 void setUser(const QString&str){ user = str; }
26 const QString&getUser()const{ return user; } 26 const QString&getUser()const{ return user; }
27 27
28 void setPassword(const QString&str) { password = str; } 28 void setPassword(const QString&str) { password = str; }
29 const QString&getPassword()const { return password; } 29 const QString&getPassword()const { return password; }
30 30
31 void setSSL( bool b ) { ssl = b; } 31 void setSSL( bool b ) { ssl = b; }
32 bool getSSL() { return ssl; } 32 bool getSSL() { return ssl; }
33
34 void setOffline(bool b) {offline = b;}
35 bool getOffline()const{return offline;}
33 36
34 virtual QString getFileName() { return accountName; } 37 virtual QString getFileName() { return accountName; }
35 virtual void read() { qDebug( "base reading..." ); } 38 virtual void read() { qDebug( "base reading..." ); }
36 virtual void save() { qDebug( "base saving..." ); } 39 virtual void save() { qDebug( "base saving..." ); }
37 40
38protected: 41protected:
39 QString accountName, type, server, port, user, password; 42 QString accountName, type, server, port, user, password;
40 bool ssl; 43 bool ssl;
41 44 bool offline;
42}; 45};
43 46
44class IMAPaccount : public Account 47class IMAPaccount : public Account
45{ 48{
46 49
47public: 50public:
48 IMAPaccount(); 51 IMAPaccount();
49 IMAPaccount( QString filename ); 52 IMAPaccount( QString filename );
50 53
51 static QString getUniqueFileName(); 54 static QString getUniqueFileName();
52 55
53 virtual void read(); 56 virtual void read();
54 virtual void save(); 57 virtual void save();
55 virtual QString getFileName(); 58 virtual QString getFileName();
56 59
57 void setPrefix(const QString&str) {prefix=str;} 60 void setPrefix(const QString&str) {prefix=str;}
58 const QString&getPrefix()const{return prefix;} 61 const QString&getPrefix()const{return prefix;}
59 62
60private: 63private:
61 QString file,prefix; 64 QString file,prefix;
62 65
63}; 66};
64 67
65class POP3account : public Account 68class POP3account : public Account
66{ 69{
67 70
68public: 71public:
69 POP3account(); 72 POP3account();
70 POP3account( QString filename ); 73 POP3account( QString filename );
71 74
72 static QString getUniqueFileName(); 75 static QString getUniqueFileName();
73 76
74 virtual void read(); 77 virtual void read();
75 virtual void save(); 78 virtual void save();
76 virtual QString getFileName(); 79 virtual QString getFileName();
77 80
78private: 81private:
79 QString file; 82 QString file;
80 83
81}; 84};
82 85
83class SMTPaccount : public Account 86class SMTPaccount : public Account
84{ 87{
85 88
86public: 89public:
87 SMTPaccount(); 90 SMTPaccount();
88 SMTPaccount( QString filename ); 91 SMTPaccount( QString filename );
89 92
90 static QString getUniqueFileName(); 93 static QString getUniqueFileName();
91 94
92 virtual void read(); 95 virtual void read();
93 virtual void save(); 96 virtual void save();
94 virtual QString getFileName(); 97 virtual QString getFileName();
95 98
96 void setLogin( bool b ) { login = b; } 99 void setLogin( bool b ) { login = b; }
97 bool getLogin() { return login; } 100 bool getLogin() { return login; }
98 101
99private: 102private:
100 QString file, name, mail, org, cc, bcc, reply, signature; 103 QString file, name, mail, org, cc, bcc, reply, signature;
101 bool useCC, useBCC, useReply, login; 104 bool useCC, useBCC, useReply, login;
102 105
103}; 106};
104 107
105class NNTPaccount : public Account 108class NNTPaccount : public Account
106{ 109{
107 110
108public: 111public:
109 NNTPaccount(); 112 NNTPaccount();
110 NNTPaccount( QString filename ); 113 NNTPaccount( QString filename );
111 114
112 static QString getUniqueFileName(); 115 static QString getUniqueFileName();
113 116
114 virtual void read(); 117 virtual void read();
115 virtual void save(); 118 virtual void save();
116 virtual QString getFileName(); 119 virtual QString getFileName();
117 120
118 void setLogin( bool b ) { login = b; } 121 void setLogin( bool b ) { login = b; }
119 bool getLogin() { return login; } 122 bool getLogin() { return login; }
120 123
121private: 124private:
122 QString file; 125 QString file;
123 bool login; 126 bool login;
124 127
125}; 128};
126 129
127class Settings : public QObject 130class Settings : public QObject
128{ 131{
129 Q_OBJECT 132 Q_OBJECT
130 133
131public: 134public:
132 Settings(); 135 Settings();
133 QList<Account> getAccounts(); 136 QList<Account> getAccounts();
134 void addAccount(Account *account); 137 void addAccount(Account *account);
135 void delAccount(Account *account); 138 void delAccount(Account *account);
136 void saveAccounts(); 139 void saveAccounts();
137 void readAccounts(); 140 void readAccounts();
138 static void checkDirectory(); 141 static void checkDirectory();
139 142
140private: 143private:
141 void updateAccounts(); 144 void updateAccounts();
142 QList<Account> accounts; 145 QList<Account> accounts;
143 146
144}; 147};
145 148
146#endif 149#endif
diff --git a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
index 4764b77..281b88e 100644
--- a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
@@ -300,430 +300,428 @@ mailmime *SMTPwrapper::buildFilePart(const QString&filename,const QString&mimety
300 qDebug("Error setting body with file %s",file); 300 qDebug("Error setting body with file %s",file);
301 mailmime_free( filePart ); 301 mailmime_free( filePart );
302 filePart = 0; 302 filePart = 0;
303 } 303 }
304 } 304 }
305 305
306 if (!filePart) { 306 if (!filePart) {
307 if ( param != NULL ) { 307 if ( param != NULL ) {
308 mailmime_parameter_free( param ); 308 mailmime_parameter_free( param );
309 } 309 }
310 if (content) { 310 if (content) {
311 mailmime_content_free( content ); 311 mailmime_content_free( content );
312 } 312 }
313 if (fields) { 313 if (fields) {
314 mailmime_fields_free( fields ); 314 mailmime_fields_free( fields );
315 } else { 315 } else {
316 if (name) { 316 if (name) {
317 free( name ); 317 free( name );
318 } 318 }
319 if (file) { 319 if (file) {
320 free( file ); 320 free( file );
321 } 321 }
322 } 322 }
323 } 323 }
324 return filePart; // Success :) 324 return filePart; // Success :)
325 325
326} 326}
327 327
328void SMTPwrapper::addFileParts( mailmime *message,const QList<Attachment>&files ) 328void SMTPwrapper::addFileParts( mailmime *message,const QList<Attachment>&files )
329{ 329{
330 const Attachment *it; 330 const Attachment *it;
331 unsigned int count = files.count(); 331 unsigned int count = files.count();
332 qDebug("List contains %i values",count); 332 qDebug("List contains %i values",count);
333 for ( unsigned int i = 0; i < count; ++i ) { 333 for ( unsigned int i = 0; i < count; ++i ) {
334 qDebug( "Adding file" ); 334 qDebug( "Adding file" );
335 mailmime *filePart; 335 mailmime *filePart;
336 int err; 336 int err;
337 it = ((QList<Attachment>)files).at(i); 337 it = ((QList<Attachment>)files).at(i);
338 338
339 filePart = buildFilePart( it->getFileName(), it->getMimeType(),"" ); 339 filePart = buildFilePart( it->getFileName(), it->getMimeType(),"" );
340 if ( filePart == NULL ) { 340 if ( filePart == NULL ) {
341 qDebug( "addFileParts: error adding file:" ); 341 qDebug( "addFileParts: error adding file:" );
342 qDebug( it->getFileName() ); 342 qDebug( it->getFileName() );
343 continue; 343 continue;
344 } 344 }
345 err = mailmime_smart_add_part( message, filePart ); 345 err = mailmime_smart_add_part( message, filePart );
346 if ( err != MAILIMF_NO_ERROR ) { 346 if ( err != MAILIMF_NO_ERROR ) {
347 mailmime_free( filePart ); 347 mailmime_free( filePart );
348 qDebug("error smart add"); 348 qDebug("error smart add");
349 } 349 }
350 } 350 }
351} 351}
352 352
353mailmime *SMTPwrapper::createMimeMail(const Mail &mail ) 353mailmime *SMTPwrapper::createMimeMail(const Mail &mail )
354{ 354{
355 mailmime *message, *txtPart; 355 mailmime *message, *txtPart;
356 mailimf_fields *fields; 356 mailimf_fields *fields;
357 int err; 357 int err;
358 358
359 fields = createImfFields( mail ); 359 fields = createImfFields( mail );
360 if ( fields == NULL ) goto err_free; 360 if ( fields == NULL ) goto err_free;
361 361
362 message = mailmime_new_message_data( NULL ); 362 message = mailmime_new_message_data( NULL );
363 if ( message == NULL ) goto err_free_fields; 363 if ( message == NULL ) goto err_free_fields;
364 364
365 mailmime_set_imf_fields( message, fields ); 365 mailmime_set_imf_fields( message, fields );
366 366
367 txtPart = buildTxtPart( mail.getMessage() ); 367 txtPart = buildTxtPart( mail.getMessage() );
368 368
369 if ( txtPart == NULL ) goto err_free_message; 369 if ( txtPart == NULL ) goto err_free_message;
370 370
371 err = mailmime_smart_add_part( message, txtPart ); 371 err = mailmime_smart_add_part( message, txtPart );
372 if ( err != MAILIMF_NO_ERROR ) goto err_free_txtPart; 372 if ( err != MAILIMF_NO_ERROR ) goto err_free_txtPart;
373 373
374 addFileParts( message, mail.getAttachments() ); 374 addFileParts( message, mail.getAttachments() );
375 375
376 return message; // Success :) 376 return message; // Success :)
377 377
378err_free_txtPart: 378err_free_txtPart:
379 mailmime_free( txtPart ); 379 mailmime_free( txtPart );
380err_free_message: 380err_free_message:
381 mailmime_free( message ); 381 mailmime_free( message );
382err_free_fields: 382err_free_fields:
383 mailimf_fields_free( fields ); 383 mailimf_fields_free( fields );
384err_free: 384err_free:
385 qDebug( "createMimeMail: error" ); 385 qDebug( "createMimeMail: error" );
386 386
387 return NULL; // Error :( 387 return NULL; // Error :(
388} 388}
389 389
390mailimf_field *SMTPwrapper::getField( mailimf_fields *fields, int type ) 390mailimf_field *SMTPwrapper::getField( mailimf_fields *fields, int type )
391{ 391{
392 mailimf_field *field; 392 mailimf_field *field;
393 clistiter *it; 393 clistiter *it;
394 394
395 it = clist_begin( fields->fld_list ); 395 it = clist_begin( fields->fld_list );
396 while ( it ) { 396 while ( it ) {
397 field = (mailimf_field *) it->data; 397 field = (mailimf_field *) it->data;
398 if ( field->fld_type == type ) { 398 if ( field->fld_type == type ) {
399 return field; 399 return field;
400 } 400 }
401 it = it->next; 401 it = it->next;
402 } 402 }
403 403
404 return NULL; 404 return NULL;
405} 405}
406 406
407void SMTPwrapper::addRcpts( clist *list, mailimf_address_list *addr_list ) 407void SMTPwrapper::addRcpts( clist *list, mailimf_address_list *addr_list )
408{ 408{
409 clistiter *it, *it2; 409 clistiter *it, *it2;
410 410
411 for ( it = clist_begin( addr_list->ad_list ); it; it = it->next ) { 411 for ( it = clist_begin( addr_list->ad_list ); it; it = it->next ) {
412 mailimf_address *addr; 412 mailimf_address *addr;
413 addr = (mailimf_address *) it->data; 413 addr = (mailimf_address *) it->data;
414 414
415 if ( addr->ad_type == MAILIMF_ADDRESS_MAILBOX ) { 415 if ( addr->ad_type == MAILIMF_ADDRESS_MAILBOX ) {
416 esmtp_address_list_add( list, addr->ad_data.ad_mailbox->mb_addr_spec, 0, NULL ); 416 esmtp_address_list_add( list, addr->ad_data.ad_mailbox->mb_addr_spec, 0, NULL );
417 } else if ( addr->ad_type == MAILIMF_ADDRESS_GROUP ) { 417 } else if ( addr->ad_type == MAILIMF_ADDRESS_GROUP ) {
418 clist *l = addr->ad_data.ad_group->grp_mb_list->mb_list; 418 clist *l = addr->ad_data.ad_group->grp_mb_list->mb_list;
419 for ( it2 = clist_begin( l ); it2; it2 = it2->next ) { 419 for ( it2 = clist_begin( l ); it2; it2 = it2->next ) {
420 mailimf_mailbox *mbox; 420 mailimf_mailbox *mbox;
421 mbox = (mailimf_mailbox *) it2->data; 421 mbox = (mailimf_mailbox *) it2->data;
422 esmtp_address_list_add( list, mbox->mb_addr_spec, 0, NULL ); 422 esmtp_address_list_add( list, mbox->mb_addr_spec, 0, NULL );
423 } 423 }
424 } 424 }
425 } 425 }
426} 426}
427 427
428clist *SMTPwrapper::createRcptList( mailimf_fields *fields ) 428clist *SMTPwrapper::createRcptList( mailimf_fields *fields )
429{ 429{
430 clist *rcptList; 430 clist *rcptList;
431 mailimf_field *field; 431 mailimf_field *field;
432 432
433 rcptList = esmtp_address_list_new(); 433 rcptList = esmtp_address_list_new();
434 434
435 field = getField( fields, MAILIMF_FIELD_TO ); 435 field = getField( fields, MAILIMF_FIELD_TO );
436 if ( field && (field->fld_type == MAILIMF_FIELD_TO) 436 if ( field && (field->fld_type == MAILIMF_FIELD_TO)
437 && field->fld_data.fld_to->to_addr_list ) { 437 && field->fld_data.fld_to->to_addr_list ) {
438 addRcpts( rcptList, field->fld_data.fld_to->to_addr_list ); 438 addRcpts( rcptList, field->fld_data.fld_to->to_addr_list );
439 } 439 }
440 440
441 field = getField( fields, MAILIMF_FIELD_CC ); 441 field = getField( fields, MAILIMF_FIELD_CC );
442 if ( field && (field->fld_type == MAILIMF_FIELD_CC) 442 if ( field && (field->fld_type == MAILIMF_FIELD_CC)
443 && field->fld_data.fld_cc->cc_addr_list ) { 443 && field->fld_data.fld_cc->cc_addr_list ) {
444 addRcpts( rcptList, field->fld_data.fld_cc->cc_addr_list ); 444 addRcpts( rcptList, field->fld_data.fld_cc->cc_addr_list );
445 } 445 }
446 446
447 field = getField( fields, MAILIMF_FIELD_BCC ); 447 field = getField( fields, MAILIMF_FIELD_BCC );
448 if ( field && (field->fld_type == MAILIMF_FIELD_BCC) 448 if ( field && (field->fld_type == MAILIMF_FIELD_BCC)
449 && field->fld_data.fld_bcc->bcc_addr_list ) { 449 && field->fld_data.fld_bcc->bcc_addr_list ) {
450 addRcpts( rcptList, field->fld_data.fld_bcc->bcc_addr_list ); 450 addRcpts( rcptList, field->fld_data.fld_bcc->bcc_addr_list );
451 } 451 }
452 452
453 return rcptList; 453 return rcptList;
454} 454}
455 455
456char *SMTPwrapper::getFrom( mailimf_field *ffrom) 456char *SMTPwrapper::getFrom( mailimf_field *ffrom)
457{ 457{
458 char *from = NULL; 458 char *from = NULL;
459 if ( ffrom && (ffrom->fld_type == MAILIMF_FIELD_FROM) 459 if ( ffrom && (ffrom->fld_type == MAILIMF_FIELD_FROM)
460 && ffrom->fld_data.fld_from->frm_mb_list && ffrom->fld_data.fld_from->frm_mb_list->mb_list ) { 460 && ffrom->fld_data.fld_from->frm_mb_list && ffrom->fld_data.fld_from->frm_mb_list->mb_list ) {
461 clist *cl = ffrom->fld_data.fld_from->frm_mb_list->mb_list; 461 clist *cl = ffrom->fld_data.fld_from->frm_mb_list->mb_list;
462 clistiter *it; 462 clistiter *it;
463 for ( it = clist_begin( cl ); it; it = it->next ) { 463 for ( it = clist_begin( cl ); it; it = it->next ) {
464 mailimf_mailbox *mb = (mailimf_mailbox *) it->data; 464 mailimf_mailbox *mb = (mailimf_mailbox *) it->data;
465 from = strdup( mb->mb_addr_spec ); 465 from = strdup( mb->mb_addr_spec );
466 } 466 }
467 } 467 }
468 468
469 return from; 469 return from;
470} 470}
471 471
472char *SMTPwrapper::getFrom( mailmime *mail ) 472char *SMTPwrapper::getFrom( mailmime *mail )
473{ 473{
474 /* no need to delete - its just a pointer to structure content */ 474 /* no need to delete - its just a pointer to structure content */
475 mailimf_field *ffrom = 0; 475 mailimf_field *ffrom = 0;
476 ffrom = getField( mail->mm_data.mm_message.mm_fields, MAILIMF_FIELD_FROM ); 476 ffrom = getField( mail->mm_data.mm_message.mm_fields, MAILIMF_FIELD_FROM );
477 return getFrom(ffrom); 477 return getFrom(ffrom);
478} 478}
479 479
480void SMTPwrapper::progress( size_t current, size_t maximum ) 480void SMTPwrapper::progress( size_t current, size_t maximum )
481{ 481{
482 if (SMTPwrapper::sendProgress) { 482 if (SMTPwrapper::sendProgress) {
483 SMTPwrapper::sendProgress->setSingleMail(current, maximum ); 483 SMTPwrapper::sendProgress->setSingleMail(current, maximum );
484 qApp->processEvents(); 484 qApp->processEvents();
485 } 485 }
486} 486}
487 487
488void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) 488void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box)
489{ 489{
490 if (!mail) return; 490 if (!mail) return;
491 QString localfolders = AbstractMail::defaultLocalfolder(); 491 QString localfolders = AbstractMail::defaultLocalfolder();
492 MBOXwrapper*wrap = new MBOXwrapper(localfolders); 492 AbstractMail*wrap = AbstractMail::getWrapper(localfolders);
493 wrap->storeMessage(mail,length,box); 493 wrap->storeMessage(mail,length,box);
494 delete wrap; 494 delete wrap;
495} 495}
496 496
497void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ) 497void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp )
498{ 498{
499 clist *rcpts = 0; 499 clist *rcpts = 0;
500 char *from, *data; 500 char *from, *data;
501 size_t size; 501 size_t size;
502 502
503 if ( smtp == NULL ) { 503 if ( smtp == NULL ) {
504 return; 504 return;
505 } 505 }
506 from = data = 0; 506 from = data = 0;
507 507
508 mailmessage * msg = 0; 508 mailmessage * msg = 0;
509 msg = mime_message_init(mail); 509 msg = mime_message_init(mail);
510 mime_message_set_tmpdir(msg,getenv( "HOME" )); 510 mime_message_set_tmpdir(msg,getenv( "HOME" ));
511 int r = mailmessage_fetch(msg,&data,&size); 511 int r = mailmessage_fetch(msg,&data,&size);
512 mime_message_detach_mime(msg); 512 mime_message_detach_mime(msg);
513 mailmessage_free(msg); 513 mailmessage_free(msg);
514 if (r != MAIL_NO_ERROR || !data) { 514 if (r != MAIL_NO_ERROR || !data) {
515 if (data) free(data); 515 if (data) free(data);
516 qDebug("Error fetching mime..."); 516 qDebug("Error fetching mime...");
517 return; 517 return;
518 } 518 }
519 QString tmp = data;
520 tmp.replace(QRegExp("\r+",true,false),"");
521 msg = 0; 519 msg = 0;
522 if (later) { 520 if (later) {
523 storeMail((char*)tmp.data(),tmp.length(),"Outgoing"); 521 storeMail(data,size,"Outgoing");
524 if (data) free( data ); 522 if (data) free( data );
525 Config cfg( "mail" ); 523 Config cfg( "mail" );
526 cfg.setGroup( "Status" ); 524 cfg.setGroup( "Status" );
527 cfg.writeEntry( "outgoing", ++m_queuedMail ); 525 cfg.writeEntry( "outgoing", ++m_queuedMail );
528 emit queuedMails( m_queuedMail ); 526 emit queuedMails( m_queuedMail );
529 return; 527 return;
530 } 528 }
531 from = getFrom( mail ); 529 from = getFrom( mail );
532 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields ); 530 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields );
533 smtpSend(from,rcpts,data,size,smtp); 531 smtpSend(from,rcpts,data,size,smtp);
534 if (data) {free(data);} 532 if (data) {free(data);}
535 if (from) {free(from);} 533 if (from) {free(from);}
536 if (rcpts) smtp_address_list_free( rcpts ); 534 if (rcpts) smtp_address_list_free( rcpts );
537} 535}
538 536
539int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMTPaccount *smtp ) 537int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMTPaccount *smtp )
540{ 538{
541 const char *server, *user, *pass; 539 const char *server, *user, *pass;
542 bool ssl; 540 bool ssl;
543 uint16_t port; 541 uint16_t port;
544 mailsmtp *session; 542 mailsmtp *session;
545 int err,result; 543 int err,result;
546 544
547 result = 1; 545 result = 1;
548 server = user = pass = 0; 546 server = user = pass = 0;
549 server = smtp->getServer().latin1(); 547 server = smtp->getServer().latin1();
550 ssl = smtp->getSSL(); 548 ssl = smtp->getSSL();
551 port = smtp->getPort().toUInt(); 549 port = smtp->getPort().toUInt();
552 550
553 session = mailsmtp_new( 20, &progress ); 551 session = mailsmtp_new( 20, &progress );
554 if ( session == NULL ) goto free_mem; 552 if ( session == NULL ) goto free_mem;
555 553
556 qDebug( "Servername %s at port %i", server, port ); 554 qDebug( "Servername %s at port %i", server, port );
557 if ( ssl ) { 555 if ( ssl ) {
558 qDebug( "SSL session" ); 556 qDebug( "SSL session" );
559 err = mailsmtp_ssl_connect( session, server, port ); 557 err = mailsmtp_ssl_connect( session, server, port );
560 } else { 558 } else {
561 qDebug( "No SSL session" ); 559 qDebug( "No SSL session" );
562 err = mailsmtp_socket_connect( session, server, port ); 560 err = mailsmtp_socket_connect( session, server, port );
563 } 561 }
564 if ( err != MAILSMTP_NO_ERROR ) {qDebug("Error init connection");result = 0;goto free_mem_session;} 562 if ( err != MAILSMTP_NO_ERROR ) {qDebug("Error init connection");result = 0;goto free_mem_session;}
565 563
566 err = mailsmtp_init( session ); 564 err = mailsmtp_init( session );
567 if ( err != MAILSMTP_NO_ERROR ) {result = 0; goto free_con_session;} 565 if ( err != MAILSMTP_NO_ERROR ) {result = 0; goto free_con_session;}
568 566
569 qDebug( "INIT OK" ); 567 qDebug( "INIT OK" );
570 568
571 if ( smtp->getLogin() ) { 569 if ( smtp->getLogin() ) {
572 qDebug("smtp with auth"); 570 qDebug("smtp with auth");
573 if ( smtp->getUser().isEmpty() || smtp->getPassword().isEmpty() ) { 571 if ( smtp->getUser().isEmpty() || smtp->getPassword().isEmpty() ) {
574 // get'em 572 // get'em
575 LoginDialog login( smtp->getUser(), smtp->getPassword(), NULL, 0, true ); 573 LoginDialog login( smtp->getUser(), smtp->getPassword(), NULL, 0, true );
576 login.show(); 574 login.show();
577 if ( QDialog::Accepted == login.exec() ) { 575 if ( QDialog::Accepted == login.exec() ) {
578 // ok 576 // ok
579 user = login.getUser().latin1(); 577 user = login.getUser().latin1();
580 pass = login.getPassword().latin1(); 578 pass = login.getPassword().latin1();
581 } else { 579 } else {
582 result = 0; goto free_con_session; 580 result = 0; goto free_con_session;
583 } 581 }
584 } else { 582 } else {
585 user = smtp->getUser().latin1(); 583 user = smtp->getUser().latin1();
586 pass = smtp->getPassword().latin1(); 584 pass = smtp->getPassword().latin1();
587 } 585 }
588 qDebug( "session->auth: %i", session->auth); 586 qDebug( "session->auth: %i", session->auth);
589 err = mailsmtp_auth( session, (char*)user, (char*)pass ); 587 err = mailsmtp_auth( session, (char*)user, (char*)pass );
590 if ( err == MAILSMTP_NO_ERROR ) qDebug("auth ok"); 588 if ( err == MAILSMTP_NO_ERROR ) qDebug("auth ok");
591 qDebug( "Done auth!" ); 589 qDebug( "Done auth!" );
592 } else { 590 } else {
593 qDebug("SMTP without auth"); 591 qDebug("SMTP without auth");
594 } 592 }
595 593
596 err = mailsmtp_send( session, from, rcpts, data, size ); 594 err = mailsmtp_send( session, from, rcpts, data, size );
597 if ( err != MAILSMTP_NO_ERROR ) { 595 if ( err != MAILSMTP_NO_ERROR ) {
598 qDebug("Error sending mail: %s",mailsmtpError(err).latin1()); 596 qDebug("Error sending mail: %s",mailsmtpError(err).latin1());
599 result = 0; goto free_con_session; 597 result = 0; goto free_con_session;
600 } 598 }
601 599
602 qDebug( "Mail sent." ); 600 qDebug( "Mail sent." );
603 storeMail(data,size,"Sent"); 601 storeMail(data,size,"Sent");
604 602
605free_con_session: 603free_con_session:
606 mailsmtp_quit( session ); 604 mailsmtp_quit( session );
607free_mem_session: 605free_mem_session:
608 mailsmtp_free( session ); 606 mailsmtp_free( session );
609free_mem: 607free_mem:
610 return result; 608 return result;
611} 609}
612 610
613void SMTPwrapper::sendMail(const Mail&mail,SMTPaccount*aSmtp,bool later ) 611void SMTPwrapper::sendMail(const Mail&mail,SMTPaccount*aSmtp,bool later )
614{ 612{
615 mailmime * mimeMail; 613 mailmime * mimeMail;
616 614
617 SMTPaccount *smtp = aSmtp; 615 SMTPaccount *smtp = aSmtp;
618 616
619 if (!later && !smtp) { 617 if (!later && !smtp) {
620 qDebug("Didn't get any send method - giving up"); 618 qDebug("Didn't get any send method - giving up");
621 return; 619 return;
622 } 620 }
623 mimeMail = createMimeMail(mail ); 621 mimeMail = createMimeMail(mail );
624 if ( mimeMail == NULL ) { 622 if ( mimeMail == NULL ) {
625 qDebug( "sendMail: error creating mime mail" ); 623 qDebug( "sendMail: error creating mime mail" );
626 } else { 624 } else {
627 sendProgress = new progressMailSend(); 625 sendProgress = new progressMailSend();
628 sendProgress->show(); 626 sendProgress->show();
629 sendProgress->setMaxMails(1); 627 sendProgress->setMaxMails(1);
630 smtpSend( mimeMail,later,smtp); 628 smtpSend( mimeMail,later,smtp);
631 qDebug("Clean up done"); 629 qDebug("Clean up done");
632 sendProgress->hide(); 630 sendProgress->hide();
633 delete sendProgress; 631 delete sendProgress;
634 sendProgress = 0; 632 sendProgress = 0;
635 mailmime_free( mimeMail ); 633 mailmime_free( mimeMail );
636 } 634 }
637} 635}
638 636
639int SMTPwrapper::sendQueuedMail(MBOXwrapper*wrap,SMTPaccount*smtp,RecMail*which) 637int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which)
640{ 638{
641 size_t curTok = 0; 639 size_t curTok = 0;
642 mailimf_fields *fields = 0; 640 mailimf_fields *fields = 0;
643 mailimf_field*ffrom = 0; 641 mailimf_field*ffrom = 0;
644 clist *rcpts = 0; 642 clist *rcpts = 0;
645 char*from = 0; 643 char*from = 0;
646 int res = 0; 644 int res = 0;
647 645
648 encodedString * data = wrap->fetchRawBody(*which); 646 encodedString * data = wrap->fetchRawBody(*which);
649 if (!data) return 0; 647 if (!data) return 0;
650 int err = mailimf_fields_parse( data->Content(), data->Length(), &curTok, &fields ); 648 int err = mailimf_fields_parse( data->Content(), data->Length(), &curTok, &fields );
651 if (err != MAILIMF_NO_ERROR) { 649 if (err != MAILIMF_NO_ERROR) {
652 delete data; 650 delete data;
653 delete wrap; 651 delete wrap;
654 return 0; 652 return 0;
655 } 653 }
656 654
657 rcpts = createRcptList( fields ); 655 rcpts = createRcptList( fields );
658 ffrom = getField(fields, MAILIMF_FIELD_FROM ); 656 ffrom = getField(fields, MAILIMF_FIELD_FROM );
659 from = getFrom(ffrom); 657 from = getFrom(ffrom);
660 658
661 if (rcpts && from) { 659 if (rcpts && from) {
662 res = smtpSend(from,rcpts,data->Content(),data->Length(),smtp ); 660 res = smtpSend(from,rcpts,data->Content(),data->Length(),smtp );
663 } 661 }
664 if (fields) { 662 if (fields) {
665 mailimf_fields_free(fields); 663 mailimf_fields_free(fields);
666 fields = 0; 664 fields = 0;
667 } 665 }
668 if (data) { 666 if (data) {
669 delete data; 667 delete data;
670 } 668 }
671 if (from) { 669 if (from) {
672 free(from); 670 free(from);
673 } 671 }
674 if (rcpts) { 672 if (rcpts) {
675 smtp_address_list_free( rcpts ); 673 smtp_address_list_free( rcpts );
676 } 674 }
677 return res; 675 return res;
678} 676}
679 677
680/* this is a special fun */ 678/* this is a special fun */
681bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) 679bool SMTPwrapper::flushOutbox(SMTPaccount*smtp)
682{ 680{
683 bool returnValue = true; 681 bool returnValue = true;
684 682
685 if (!smtp) return false; 683 if (!smtp) return false;
686 684
687 QString localfolders = AbstractMail::defaultLocalfolder(); 685 QString localfolders = AbstractMail::defaultLocalfolder();
688 MBOXwrapper*wrap = new MBOXwrapper(localfolders); 686 AbstractMail*wrap = AbstractMail::getWrapper(localfolders);
689 if (!wrap) { 687 if (!wrap) {
690 qDebug("memory error"); 688 qDebug("memory error");
691 return false; 689 return false;
692 } 690 }
693 QList<RecMail> mailsToSend; 691 QList<RecMail> mailsToSend;
694 QList<RecMail> mailsToRemove; 692 QList<RecMail> mailsToRemove;
695 QString mbox("Outgoing"); 693 QString mbox("Outgoing");
696 wrap->listMessages(mbox,mailsToSend); 694 wrap->listMessages(mbox,mailsToSend);
697 if (mailsToSend.count()==0) { 695 if (mailsToSend.count()==0) {
698 delete wrap; 696 delete wrap;
699 return false; 697 return false;
700 } 698 }
701 mailsToSend.setAutoDelete(false); 699 mailsToSend.setAutoDelete(false);
702 sendProgress = new progressMailSend(); 700 sendProgress = new progressMailSend();
703 sendProgress->show(); 701 sendProgress->show();
704 sendProgress->setMaxMails(mailsToSend.count()); 702 sendProgress->setMaxMails(mailsToSend.count());
705 703
706 while (mailsToSend.count()>0) { 704 while (mailsToSend.count()>0) {
707 if (sendQueuedMail(wrap,smtp,mailsToSend.at(0))==0) { 705 if (sendQueuedMail(wrap,smtp,mailsToSend.at(0))==0) {
708 QMessageBox::critical(0,tr("Error sending mail"), 706 QMessageBox::critical(0,tr("Error sending mail"),
709 tr("Error sending queued mail - breaking")); 707 tr("Error sending queued mail - breaking"));
710 returnValue = false; 708 returnValue = false;
711 break; 709 break;
712 } 710 }
713 mailsToRemove.append(mailsToSend.at(0)); 711 mailsToRemove.append(mailsToSend.at(0));
714 mailsToSend.removeFirst(); 712 mailsToSend.removeFirst();
715 sendProgress->setCurrentMails(mailsToRemove.count()); 713 sendProgress->setCurrentMails(mailsToRemove.count());
716 } 714 }
717 Config cfg( "mail" ); 715 Config cfg( "mail" );
718 cfg.setGroup( "Status" ); 716 cfg.setGroup( "Status" );
719 m_queuedMail = 0; 717 m_queuedMail = 0;
720 cfg.writeEntry( "outgoing", m_queuedMail ); 718 cfg.writeEntry( "outgoing", m_queuedMail );
721 emit queuedMails( m_queuedMail ); 719 emit queuedMails( m_queuedMail );
722 sendProgress->hide(); 720 sendProgress->hide();
723 delete sendProgress; 721 delete sendProgress;
724 sendProgress = 0; 722 sendProgress = 0;
725 wrap->deleteMails(mbox,mailsToRemove); 723 wrap->deleteMails(mbox,mailsToRemove);
726 mailsToSend.setAutoDelete(true); 724 mailsToSend.setAutoDelete(true);
727 delete wrap; 725 delete wrap;
728 return returnValue; 726 return returnValue;
729} 727}
diff --git a/noncore/net/mail/libmailwrapper/smtpwrapper.h b/noncore/net/mail/libmailwrapper/smtpwrapper.h
index 04fc4b0..7dcdbfd 100644
--- a/noncore/net/mail/libmailwrapper/smtpwrapper.h
+++ b/noncore/net/mail/libmailwrapper/smtpwrapper.h
@@ -1,72 +1,72 @@
1#ifndef SMTPwrapper_H 1#ifndef SMTPwrapper_H
2#define SMTPwrapper_H 2#define SMTPwrapper_H
3 3
4#include <qpe/applnk.h> 4#include <qpe/applnk.h>
5 5
6#include <qbitarray.h> 6#include <qbitarray.h>
7#include <qdatetime.h> 7#include <qdatetime.h>
8#include <libetpan/clist.h> 8#include <libetpan/clist.h>
9 9
10#include "settings.h" 10#include "settings.h"
11 11
12class Mail; 12class Mail;
13class MBOXwrapper; 13class AbstractMail;
14class RecMail; 14class RecMail;
15class Attachment; 15class Attachment;
16struct mailimf_fields; 16struct mailimf_fields;
17struct mailimf_field; 17struct mailimf_field;
18struct mailimf_mailbox; 18struct mailimf_mailbox;
19struct mailmime; 19struct mailmime;
20struct mailimf_address_list; 20struct mailimf_address_list;
21class progressMailSend; 21class progressMailSend;
22 22
23class SMTPwrapper : public QObject 23class SMTPwrapper : public QObject
24{ 24{
25 Q_OBJECT 25 Q_OBJECT
26 26
27public: 27public:
28 SMTPwrapper( Settings *s ); 28 SMTPwrapper( Settings *s );
29 virtual ~SMTPwrapper(){} 29 virtual ~SMTPwrapper(){}
30 void sendMail(const Mail& mail,SMTPaccount*smtp,bool later=false ); 30 void sendMail(const Mail& mail,SMTPaccount*smtp,bool later=false );
31 bool flushOutbox(SMTPaccount*smtp); 31 bool flushOutbox(SMTPaccount*smtp);
32 32
33 static progressMailSend*sendProgress; 33 static progressMailSend*sendProgress;
34 34
35signals: 35signals:
36 void queuedMails( int ); 36 void queuedMails( int );
37 37
38protected: 38protected:
39 mailimf_mailbox *newMailbox(const QString&name,const QString&mail ); 39 mailimf_mailbox *newMailbox(const QString&name,const QString&mail );
40 mailimf_fields *createImfFields(const Mail &mail ); 40 mailimf_fields *createImfFields(const Mail &mail );
41 mailmime *createMimeMail(const Mail&mail ); 41 mailmime *createMimeMail(const Mail&mail );
42 42
43 mailimf_address_list *parseAddresses(const QString&addr ); 43 mailimf_address_list *parseAddresses(const QString&addr );
44 void addFileParts( mailmime *message,const QList<Attachment>&files ); 44 void addFileParts( mailmime *message,const QList<Attachment>&files );
45 mailmime *buildTxtPart(const QString&str ); 45 mailmime *buildTxtPart(const QString&str );
46 mailmime *buildFilePart(const QString&filename,const QString&mimetype,const QString&content); 46 mailmime *buildFilePart(const QString&filename,const QString&mimetype,const QString&content);
47 void smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ); 47 void smtpSend( mailmime *mail,bool later, SMTPaccount *smtp );
48 clist *createRcptList( mailimf_fields *fields ); 48 clist *createRcptList( mailimf_fields *fields );
49 49
50 static void storeMail(const char*mail, size_t length, const QString&box); 50 static void storeMail(const char*mail, size_t length, const QString&box);
51 static QString mailsmtpError( int err ); 51 static QString mailsmtpError( int err );
52 static void progress( size_t current, size_t maximum ); 52 static void progress( size_t current, size_t maximum );
53 static void addRcpts( clist *list, mailimf_address_list *addr_list ); 53 static void addRcpts( clist *list, mailimf_address_list *addr_list );
54 static char *getFrom( mailmime *mail ); 54 static char *getFrom( mailmime *mail );
55 static char *getFrom( mailimf_field *ffrom); 55 static char *getFrom( mailimf_field *ffrom);
56 static mailimf_field *getField( mailimf_fields *fields, int type ); 56 static mailimf_field *getField( mailimf_fields *fields, int type );
57 int smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMTPaccount *smtp ); 57 int smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMTPaccount *smtp );
58 58
59 void storeMail(mailmime*mail, const QString&box); 59 void storeMail(mailmime*mail, const QString&box);
60 Settings *settings; 60 Settings *settings;
61 61
62 int sendQueuedMail(MBOXwrapper*wrap,SMTPaccount*smtp,RecMail*which); 62 int sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which);
63 63
64 int m_queuedMail; 64 int m_queuedMail;
65 static const char* USER_AGENT; 65 static const char* USER_AGENT;
66 66
67protected slots: 67protected slots:
68 void emitQCop( int queued ); 68 void emitQCop( int queued );
69 69
70}; 70};
71 71
72#endif 72#endif
diff --git a/noncore/net/mail/selectstore.cpp b/noncore/net/mail/selectstore.cpp
index 28ab5a8..0a07d51 100644
--- a/noncore/net/mail/selectstore.cpp
+++ b/noncore/net/mail/selectstore.cpp
@@ -1,19 +1,70 @@
1#include "selectstore.h" 1#include "selectstore.h"
2#include <qlineedit.h>
3#include <qcheckbox.h>
4#include <qcombobox.h>
5#include <libmailwrapper/abstractmail.h>
2 6
3Selectstore::Selectstore(QWidget* parent, const char* name) 7Selectstore::Selectstore(QWidget* parent, const char* name)
4 :selectstoreui(parent,name,true) 8 :selectstoreui(parent,name,true)
5{ 9{
6 10 folderMap.clear();
11 mailMap.clear();
12 cMail = 0;
7} 13}
8 14
9Selectstore::~Selectstore() 15Selectstore::~Selectstore()
10{ 16{
11} 17}
12 18
13void Selectstore::slotCreateNewFolder() 19void Selectstore::slotCreateNewFolder()
14{ 20{
21 bool how = newFoldersel->isChecked();
22 folderSelection->setEnabled(!how);
23 newFolderedit->setEnabled(how);
15} 24}
16 25
17void Selectstore::slotMoveMail() 26void Selectstore::slotMoveMail()
18{ 27{
19} 28}
29
30void Selectstore::addAccounts(AbstractMail*mail,const QStringList&folders)
31{
32 accountSelection->insertItem(mail->getName());
33 mailMap[accountSelection->count()-1]=mail;
34 folderMap[accountSelection->count()-1]=folders;
35 if (accountSelection->count()==1) {
36 cMail = mail;
37 folderSelection->insertStringList(folders);
38 }
39}
40
41void Selectstore::slotAccountselected(int i)
42{
43 folderSelection->clear();
44 folderSelection->insertStringList(folderMap[i]);
45 cMail = mailMap[i];
46}
47
48QString Selectstore::currentFolder()
49{
50 if (newFoldersel->isChecked()) {
51 return newFolderedit->text();
52 } else {
53 return folderSelection->currentText();
54 }
55}
56
57AbstractMail*Selectstore::currentMail()
58{
59 return cMail;
60}
61
62bool Selectstore::newFolder()
63{
64 return newFoldersel->isChecked();
65}
66
67bool Selectstore::moveMails()
68{
69 return selMove->isChecked();
70}
diff --git a/noncore/net/mail/selectstore.h b/noncore/net/mail/selectstore.h
index 8b8e8ee..447a6ae 100644
--- a/noncore/net/mail/selectstore.h
+++ b/noncore/net/mail/selectstore.h
@@ -1,19 +1,33 @@
1#ifndef _SELECTSTORE_H 1#ifndef _SELECTSTORE_H
2#define _SELECTSTORE_H 2#define _SELECTSTORE_H
3 3
4#include "selectstoreui.h" 4#include "selectstoreui.h"
5#include <qvaluelist.h>
6#include <qmap.h>
7#include <qstringlist.h>
8
9class AbstractMail;
5 10
6class Selectstore:public selectstoreui 11class Selectstore:public selectstoreui
7{ 12{
8 Q_OBJECT 13 Q_OBJECT
9public: 14public:
10 Selectstore(QWidget* parent = 0, const char* name = 0); 15 Selectstore(QWidget* parent = 0, const char* name = 0);
11 virtual ~Selectstore(); 16 virtual ~Selectstore();
17 virtual void addAccounts(AbstractMail*mail,const QStringList&folders);
18 virtual QString currentFolder();
19 virtual AbstractMail*currentMail();
20 bool newFolder();
21 bool moveMails();
12 22
13protected: 23protected slots:
14 virtual void slotCreateNewFolder(); 24 virtual void slotCreateNewFolder();
15 virtual void slotMoveMail(); 25 virtual void slotMoveMail();
16protected slots: 26 virtual void slotAccountselected(int);
17 27
28protected:
29 QMap<int,QStringList> folderMap;
30 QMap<int,AbstractMail*> mailMap;
31 AbstractMail*cMail;
18}; 32};
19#endif 33#endif
diff --git a/noncore/net/mail/selectstoreui.ui b/noncore/net/mail/selectstoreui.ui
index 3741b71..5f0e507 100644
--- a/noncore/net/mail/selectstoreui.ui
+++ b/noncore/net/mail/selectstoreui.ui
@@ -1,244 +1,279 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>selectstoreui</class> 2<class>selectstoreui</class>
3<widget> 3<widget>
4 <class>QDialog</class> 4 <class>QDialog</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>selectstoreui</cstring> 7 <cstring>selectstoreui</cstring>
8 </property> 8 </property>
9 <property stdset="1"> 9 <property stdset="1">
10 <name>geometry</name> 10 <name>geometry</name>
11 <rect> 11 <rect>
12 <x>0</x> 12 <x>0</x>
13 <y>0</y> 13 <y>0</y>
14 <width>190</width> 14 <width>182</width>
15 <height>273</height> 15 <height>273</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>caption</name> 19 <name>caption</name>
20 <string>Select target box</string> 20 <string>Select target box</string>
21 </property> 21 </property>
22 <property> 22 <property>
23 <name>layoutMargin</name> 23 <name>layoutMargin</name>
24 </property> 24 </property>
25 <property> 25 <property>
26 <name>layoutSpacing</name> 26 <name>layoutSpacing</name>
27 </property> 27 </property>
28 <vbox> 28 <vbox>
29 <property stdset="1"> 29 <property stdset="1">
30 <name>margin</name> 30 <name>margin</name>
31 <number>2</number> 31 <number>1</number>
32 </property> 32 </property>
33 <property stdset="1"> 33 <property stdset="1">
34 <name>spacing</name> 34 <name>spacing</name>
35 <number>2</number> 35 <number>1</number>
36 </property> 36 </property>
37 <widget> 37 <widget>
38 <class>QLabel</class> 38 <class>QLabel</class>
39 <property stdset="1"> 39 <property stdset="1">
40 <name>name</name> 40 <name>name</name>
41 <cstring>headlabel</cstring> 41 <cstring>headlabel</cstring>
42 </property> 42 </property>
43 <property stdset="1"> 43 <property stdset="1">
44 <name>text</name> 44 <name>text</name>
45 <string>&lt;b&gt;Store mail(s) to&lt;/b&gt;</string> 45 <string>&lt;b&gt;Store mail(s) to&lt;/b&gt;</string>
46 </property> 46 </property>
47 <property stdset="1"> 47 <property stdset="1">
48 <name>alignment</name> 48 <name>alignment</name>
49 <set>AlignCenter</set> 49 <set>AlignCenter</set>
50 </property> 50 </property>
51 <property> 51 <property>
52 <name>hAlign</name> 52 <name>hAlign</name>
53 </property> 53 </property>
54 </widget> 54 </widget>
55 <widget> 55 <widget>
56 <class>QLayoutWidget</class> 56 <class>QLayoutWidget</class>
57 <property stdset="1"> 57 <property stdset="1">
58 <name>name</name> 58 <name>name</name>
59 <cstring>Layout2</cstring> 59 <cstring>Layout2</cstring>
60 </property> 60 </property>
61 <grid> 61 <grid>
62 <property stdset="1"> 62 <property stdset="1">
63 <name>margin</name> 63 <name>margin</name>
64 <number>0</number> 64 <number>0</number>
65 </property> 65 </property>
66 <property stdset="1"> 66 <property stdset="1">
67 <name>spacing</name> 67 <name>spacing</name>
68 <number>6</number> 68 <number>6</number>
69 </property> 69 </property>
70 <widget row="1" column="1" > 70 <widget row="1" column="1" >
71 <class>QComboBox</class> 71 <class>QComboBox</class>
72 <property stdset="1"> 72 <property stdset="1">
73 <name>name</name> 73 <name>name</name>
74 <cstring>folderSelection</cstring> 74 <cstring>folderSelection</cstring>
75 </property> 75 </property>
76 <property stdset="1"> 76 <property stdset="1">
77 <name>sizePolicy</name> 77 <name>sizePolicy</name>
78 <sizepolicy> 78 <sizepolicy>
79 <hsizetype>3</hsizetype> 79 <hsizetype>3</hsizetype>
80 <vsizetype>0</vsizetype> 80 <vsizetype>0</vsizetype>
81 </sizepolicy> 81 </sizepolicy>
82 </property> 82 </property>
83 </widget> 83 </widget>
84 <widget row="1" column="0" > 84 <widget row="1" column="0" >
85 <class>QLabel</class> 85 <class>QLabel</class>
86 <property stdset="1"> 86 <property stdset="1">
87 <name>name</name> 87 <name>name</name>
88 <cstring>folderLabel</cstring> 88 <cstring>folderLabel</cstring>
89 </property> 89 </property>
90 <property stdset="1"> 90 <property stdset="1">
91 <name>text</name> 91 <name>text</name>
92 <string>Folder:</string> 92 <string>Folder:</string>
93 </property> 93 </property>
94 <property stdset="1"> 94 <property stdset="1">
95 <name>alignment</name> 95 <name>alignment</name>
96 <set>AlignVCenter|AlignRight</set> 96 <set>AlignVCenter|AlignRight</set>
97 </property> 97 </property>
98 <property> 98 <property>
99 <name>hAlign</name> 99 <name>hAlign</name>
100 </property> 100 </property>
101 </widget> 101 </widget>
102 <widget row="0" column="1" > 102 <widget row="0" column="1" >
103 <class>QComboBox</class> 103 <class>QComboBox</class>
104 <property stdset="1"> 104 <property stdset="1">
105 <name>name</name> 105 <name>name</name>
106 <cstring>accountSelection</cstring> 106 <cstring>accountSelection</cstring>
107 </property> 107 </property>
108 <property stdset="1"> 108 <property stdset="1">
109 <name>sizePolicy</name> 109 <name>sizePolicy</name>
110 <sizepolicy> 110 <sizepolicy>
111 <hsizetype>3</hsizetype> 111 <hsizetype>3</hsizetype>
112 <vsizetype>0</vsizetype> 112 <vsizetype>0</vsizetype>
113 </sizepolicy> 113 </sizepolicy>
114 </property> 114 </property>
115 </widget> 115 </widget>
116 <widget row="0" column="0" > 116 <widget row="0" column="0" >
117 <class>QLabel</class> 117 <class>QLabel</class>
118 <property stdset="1"> 118 <property stdset="1">
119 <name>name</name> 119 <name>name</name>
120 <cstring>accountlabel</cstring> 120 <cstring>accountlabel</cstring>
121 </property> 121 </property>
122 <property stdset="1"> 122 <property stdset="1">
123 <name>sizePolicy</name> 123 <name>sizePolicy</name>
124 <sizepolicy> 124 <sizepolicy>
125 <hsizetype>1</hsizetype> 125 <hsizetype>1</hsizetype>
126 <vsizetype>1</vsizetype> 126 <vsizetype>1</vsizetype>
127 </sizepolicy> 127 </sizepolicy>
128 </property> 128 </property>
129 <property stdset="1"> 129 <property stdset="1">
130 <name>text</name> 130 <name>text</name>
131 <string>Account:</string> 131 <string>Account:</string>
132 </property> 132 </property>
133 <property stdset="1"> 133 <property stdset="1">
134 <name>alignment</name> 134 <name>alignment</name>
135 <set>AlignVCenter|AlignRight</set> 135 <set>AlignVCenter|AlignRight</set>
136 </property> 136 </property>
137 <property> 137 <property>
138 <name>hAlign</name> 138 <name>hAlign</name>
139 </property> 139 </property>
140 </widget> 140 </widget>
141 </grid> 141 </grid>
142 </widget> 142 </widget>
143 <widget> 143 <widget>
144 <class>Line</class> 144 <class>Line</class>
145 <property stdset="1"> 145 <property stdset="1">
146 <name>name</name> 146 <name>name</name>
147 <cstring>Line1</cstring> 147 <cstring>Line1</cstring>
148 </property> 148 </property>
149 <property stdset="1"> 149 <property stdset="1">
150 <name>orientation</name> 150 <name>orientation</name>
151 <enum>Horizontal</enum> 151 <enum>Horizontal</enum>
152 </property> 152 </property>
153 </widget> 153 </widget>
154 <widget> 154 <widget>
155 <class>QCheckBox</class> 155 <class>QCheckBox</class>
156 <property stdset="1"> 156 <property stdset="1">
157 <name>name</name> 157 <name>name</name>
158 <cstring>newFoldersel</cstring> 158 <cstring>newFoldersel</cstring>
159 </property> 159 </property>
160 <property stdset="1"> 160 <property stdset="1">
161 <name>text</name> 161 <name>text</name>
162 <string>Create new folder</string> 162 <string>Create new folder</string>
163 </property> 163 </property>
164 </widget> 164 </widget>
165 <widget> 165 <widget>
166 <class>QLineEdit</class> 166 <class>QLineEdit</class>
167 <property stdset="1"> 167 <property stdset="1">
168 <name>name</name> 168 <name>name</name>
169 <cstring>newFolderedit</cstring> 169 <cstring>newFolderedit</cstring>
170 </property> 170 </property>
171 <property stdset="1"> 171 <property stdset="1">
172 <name>enabled</name> 172 <name>enabled</name>
173 <bool>false</bool> 173 <bool>false</bool>
174 </property> 174 </property>
175 </widget> 175 </widget>
176 <widget> 176 <widget>
177 <class>QLabel</class>
178 <property stdset="1">
179 <name>name</name>
180 <cstring>newFolderLabel</cstring>
181 </property>
182 <property stdset="1">
183 <name>text</name>
184 <string>Prefix will prepend, no need to enter it!</string>
185 </property>
186 <property stdset="1">
187 <name>alignment</name>
188 <set>WordBreak|AlignCenter</set>
189 </property>
190 <property>
191 <name>hAlign</name>
192 </property>
193 <property>
194 <name>wordwrap</name>
195 </property>
196 </widget>
197 <widget>
177 <class>Line</class> 198 <class>Line</class>
178 <property stdset="1"> 199 <property stdset="1">
179 <name>name</name> 200 <name>name</name>
180 <cstring>Line2</cstring> 201 <cstring>Line2</cstring>
181 </property> 202 </property>
182 <property stdset="1"> 203 <property stdset="1">
183 <name>orientation</name> 204 <name>orientation</name>
184 <enum>Horizontal</enum> 205 <enum>Horizontal</enum>
185 </property> 206 </property>
186 </widget> 207 </widget>
187 <widget> 208 <widget>
188 <class>QCheckBox</class> 209 <class>QCheckBox</class>
189 <property stdset="1"> 210 <property stdset="1">
190 <name>name</name> 211 <name>name</name>
191 <cstring>selMove</cstring> 212 <cstring>selMove</cstring>
192 </property> 213 </property>
193 <property stdset="1"> 214 <property stdset="1">
194 <name>text</name> 215 <name>text</name>
195 <string>Move mail(s)</string> 216 <string>Move mail(s)</string>
196 </property> 217 </property>
197 </widget> 218 </widget>
198 <spacer> 219 <spacer>
199 <property> 220 <property>
200 <name>name</name> 221 <name>name</name>
201 <cstring>Spacer2</cstring> 222 <cstring>Spacer2</cstring>
202 </property> 223 </property>
203 <property stdset="1"> 224 <property stdset="1">
204 <name>orientation</name> 225 <name>orientation</name>
205 <enum>Vertical</enum> 226 <enum>Vertical</enum>
206 </property> 227 </property>
207 <property stdset="1"> 228 <property stdset="1">
208 <name>sizeType</name> 229 <name>sizeType</name>
209 <enum>Expanding</enum> 230 <enum>Expanding</enum>
210 </property> 231 </property>
211 <property> 232 <property>
212 <name>sizeHint</name> 233 <name>sizeHint</name>
213 <size> 234 <size>
214 <width>20</width> 235 <width>20</width>
215 <height>20</height> 236 <height>20</height>
216 </size> 237 </size>
217 </property> 238 </property>
218 </spacer> 239 </spacer>
219 </vbox> 240 </vbox>
220</widget> 241</widget>
221<connections> 242<connections>
222 <connection> 243 <connection>
223 <sender>selMove</sender> 244 <sender>selMove</sender>
224 <signal>clicked()</signal> 245 <signal>clicked()</signal>
225 <receiver>selectstoreui</receiver> 246 <receiver>selectstoreui</receiver>
226 <slot>slotMoveMail()</slot> 247 <slot>slotMoveMail()</slot>
227 </connection> 248 </connection>
228 <connection> 249 <connection>
229 <sender>newFoldersel</sender> 250 <sender>newFoldersel</sender>
230 <signal>clicked()</signal> 251 <signal>clicked()</signal>
231 <receiver>selectstoreui</receiver> 252 <receiver>selectstoreui</receiver>
232 <slot>slotCreateNewFolder()</slot> 253 <slot>slotCreateNewFolder()</slot>
233 </connection> 254 </connection>
234 <slot access="protected">slotMoveMail()</slot> 255 <connection>
256 <sender>accountSelection</sender>
257 <signal>activated(int)</signal>
258 <receiver>selectstoreui</receiver>
259 <slot>slotAccountselected(int)</slot>
260 </connection>
261 <connection>
262 <sender>folderSelection</sender>
263 <signal>activated(int)</signal>
264 <receiver>selectstoreui</receiver>
265 <slot>slotFolderSelected(int)</slot>
266 </connection>
267 <slot access="protected">slotFolderSelected(int)</slot>
268 <slot access="protected">slotAccountselected(int)</slot>
235 <slot access="protected">slotCreateNewFolder()</slot> 269 <slot access="protected">slotCreateNewFolder()</slot>
270 <slot access="protected">slotMoveMail()</slot>
236</connections> 271</connections>
237<tabstops> 272<tabstops>
238 <tabstop>accountSelection</tabstop> 273 <tabstop>accountSelection</tabstop>
239 <tabstop>folderSelection</tabstop> 274 <tabstop>folderSelection</tabstop>
240 <tabstop>newFoldersel</tabstop> 275 <tabstop>newFoldersel</tabstop>
241 <tabstop>newFolderedit</tabstop> 276 <tabstop>newFolderedit</tabstop>
242 <tabstop>selMove</tabstop> 277 <tabstop>selMove</tabstop>
243</tabstops> 278</tabstops>
244</UI> 279</UI>