summaryrefslogtreecommitdiff
path: root/noncore/net/mail/accountview.cpp
Unidiff
Diffstat (limited to 'noncore/net/mail/accountview.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/accountview.cpp33
1 files changed, 29 insertions, 4 deletions
diff --git a/noncore/net/mail/accountview.cpp b/noncore/net/mail/accountview.cpp
index 77fa706..faa6982 100644
--- a/noncore/net/mail/accountview.cpp
+++ b/noncore/net/mail/accountview.cpp
@@ -1,296 +1,321 @@
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 <qmessagebox.h> 7#include <qmessagebox.h>
7#include <qpopupmenu.h> 8#include <qpopupmenu.h>
8 9
9/** 10/**
10 * POP3 Account stuff 11 * POP3 Account stuff
11 */ 12 */
12POP3viewItem::POP3viewItem( POP3account *a, QListView *parent ) 13POP3viewItem::POP3viewItem( POP3account *a, QListView *parent )
13 : AccountViewItem( parent ) 14 : AccountViewItem( parent )
14{ 15{
15 account = a; 16 account = a;
16 wrapper = AbstractMail::getWrapper( account ); 17 wrapper = AbstractMail::getWrapper( account );
17 setPixmap( 0, PIXMAP_POP3FOLDER ); 18 setPixmap( 0, PIXMAP_POP3FOLDER );
18 setText( 0, account->getAccountName() ); 19 setText( 0, account->getAccountName() );
19 setOpen( true ); 20 setOpen( true );
20} 21}
21 22
22POP3viewItem::~POP3viewItem() 23POP3viewItem::~POP3viewItem()
23{ 24{
24 delete wrapper; 25 delete wrapper;
25} 26}
26 27
27AbstractMail *POP3viewItem::getWrapper() 28AbstractMail *POP3viewItem::getWrapper()
28{ 29{
29 return wrapper; 30 return wrapper;
30} 31}
31 32
32void POP3viewItem::refresh( QList<RecMail> & ) 33void POP3viewItem::refresh( QList<RecMail> & )
33{ 34{
34 QList<Folder> *folders = wrapper->listFolders(); 35 QList<Folder> *folders = wrapper->listFolders();
35 QListViewItem *child = firstChild(); 36 QListViewItem *child = firstChild();
36 while ( child ) { 37 while ( child ) {
37 QListViewItem *tmp = child; 38 QListViewItem *tmp = child;
38 child = child->nextSibling(); 39 child = child->nextSibling();
39 delete tmp; 40 delete tmp;
40 } 41 }
41 Folder *it; 42 Folder *it;
42 QListViewItem*item = 0; 43 QListViewItem*item = 0;
43 for ( it = folders->first(); it; it = folders->next() ) { 44 for ( it = folders->first(); it; it = folders->next() ) {
44 item = new POP3folderItem( it, this , item ); 45 item = new POP3folderItem( it, this , item );
45 item->setSelectable(it->may_select()); 46 item->setSelectable(it->may_select());
46 } 47 }
47 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 48 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
48 folders->setAutoDelete(false); 49 folders->setAutoDelete(false);
49 delete folders; 50 delete folders;
50} 51}
51 52
52RecBody POP3viewItem::fetchBody( const RecMail &mail ) 53RecBody POP3viewItem::fetchBody( const RecMail &mail )
53{ 54{
54 qDebug( "POP3 fetchBody" ); 55 qDebug( "POP3 fetchBody" );
55 return wrapper->fetchBody( mail ); 56 return wrapper->fetchBody( mail );
56} 57}
57 58
58POP3folderItem::~POP3folderItem() 59POP3folderItem::~POP3folderItem()
59{ 60{
60 delete folder; 61 delete folder;
61} 62}
62 63
63POP3folderItem::POP3folderItem( Folder *folderInit, POP3viewItem *parent , QListViewItem*after ) 64POP3folderItem::POP3folderItem( Folder *folderInit, POP3viewItem *parent , QListViewItem*after )
64 : AccountViewItem( parent,after ) 65 : AccountViewItem( parent,after )
65{ 66{
66 folder = folderInit; 67 folder = folderInit;
67 pop3 = parent; 68 pop3 = parent;
68 if (folder->getDisplayName().lower()!="inbox") { 69 if (folder->getDisplayName().lower()!="inbox") {
69 setPixmap( 0, PIXMAP_POP3FOLDER ); 70 setPixmap( 0, PIXMAP_POP3FOLDER );
70 } else { 71 } else {
71 setPixmap( 0, PIXMAP_INBOXFOLDER); 72 setPixmap( 0, PIXMAP_INBOXFOLDER);
72 } 73 }
73 setText( 0, folder->getDisplayName() ); 74 setText( 0, folder->getDisplayName() );
74} 75}
75 76
76void POP3folderItem::refresh(QList<RecMail>&target) 77void POP3folderItem::refresh(QList<RecMail>&target)
77{ 78{
78 if (folder->may_select()) 79 if (folder->may_select())
79 pop3->getWrapper()->listMessages( folder->getName(),target ); 80 pop3->getWrapper()->listMessages( folder->getName(),target );
80} 81}
81 82
82RecBody POP3folderItem::fetchBody(const RecMail&aMail) 83RecBody POP3folderItem::fetchBody(const RecMail&aMail)
83{ 84{
84 return pop3->getWrapper()->fetchBody(aMail); 85 return pop3->getWrapper()->fetchBody(aMail);
85} 86}
86 87
87QPopupMenu * POP3folderItem::getContextMenu() 88QPopupMenu * POP3folderItem::getContextMenu()
88{ 89{
89 QPopupMenu *m = new QPopupMenu(0); 90 QPopupMenu *m = new QPopupMenu(0);
90 if (m) { 91 if (m) {
91 m->insertItem(QObject::tr("Refresh header list",contextName),0); 92 m->insertItem(QObject::tr("Refresh header list",contextName),0);
92 m->insertItem(QObject::tr("Delete all mails",contextName),1); 93 m->insertItem(QObject::tr("Delete all mails",contextName),1);
94 m->insertItem(QObject::tr("Download all mails",contextName),2);
93 } 95 }
94 return m; 96 return m;
95} 97}
96 98
99void POP3folderItem::downloadMails()
100{
101 Selectstore sels;
102 sels.showMaximized();
103 sels.exec();
104}
105
97void POP3folderItem::contextMenuSelected(int which) 106void POP3folderItem::contextMenuSelected(int which)
98{ 107{
99 AccountView * view = (AccountView*)listView(); 108 AccountView * view = (AccountView*)listView();
100 switch (which) { 109 switch (which) {
101 case 0: 110 case 0:
111 /* must be 'cause pop3 lists are cached */
112 pop3->getWrapper()->logout();
102 view->refreshCurrent(); 113 view->refreshCurrent();
103 break; 114 break;
104 case 1: 115 case 1:
105 deleteAllMail(pop3->getWrapper(),folder); 116 deleteAllMail(pop3->getWrapper(),folder);
106 break; 117 break;
118 case 2:
119 downloadMails();
120 break;
107 default: 121 default:
108 break; 122 break;
109 } 123 }
110} 124}
111 125
112/** 126/**
113 * IMAP Account stuff 127 * IMAP Account stuff
114 */ 128 */
115IMAPviewItem::IMAPviewItem( IMAPaccount *a, QListView *parent ) 129IMAPviewItem::IMAPviewItem( IMAPaccount *a, QListView *parent )
116 : AccountViewItem( parent ) 130 : AccountViewItem( parent )
117{ 131{
118 account = a; 132 account = a;
119 wrapper = AbstractMail::getWrapper( account ); 133 wrapper = AbstractMail::getWrapper( account );
120 setPixmap( 0, PIXMAP_IMAPFOLDER ); 134 setPixmap( 0, PIXMAP_IMAPFOLDER );
121 setText( 0, account->getAccountName() ); 135 setText( 0, account->getAccountName() );
122 setOpen( true ); 136 setOpen( true );
123} 137}
124 138
125IMAPviewItem::~IMAPviewItem() 139IMAPviewItem::~IMAPviewItem()
126{ 140{
127 delete wrapper; 141 delete wrapper;
128} 142}
129 143
130AbstractMail *IMAPviewItem::getWrapper() 144AbstractMail *IMAPviewItem::getWrapper()
131{ 145{
132 return wrapper; 146 return wrapper;
133} 147}
134 148
135IMAPfolderItem*IMAPviewItem::findSubItem(const QString&path,IMAPfolderItem*start) 149IMAPfolderItem*IMAPviewItem::findSubItem(const QString&path,IMAPfolderItem*start)
136{ 150{
137 IMAPfolderItem*pitem,*sitem; 151 IMAPfolderItem*pitem,*sitem;
138 if (!start) pitem = (IMAPfolderItem*)firstChild(); 152 if (!start) pitem = (IMAPfolderItem*)firstChild();
139 else pitem = (IMAPfolderItem*)start->firstChild(); 153 else pitem = (IMAPfolderItem*)start->firstChild();
140 while (pitem) { 154 while (pitem) {
141 if (pitem->matchName(path)) { 155 if (pitem->matchName(path)) {
142 break; 156 break;
143 } 157 }
144 if (pitem->childCount()>0) { 158 if (pitem->childCount()>0) {
145 sitem = findSubItem(path,pitem); 159 sitem = findSubItem(path,pitem);
146 if (sitem) { 160 if (sitem) {
147 pitem = sitem; 161 pitem = sitem;
148 break; 162 break;
149 } 163 }
150 } 164 }
151 pitem=(IMAPfolderItem*)pitem->nextSibling(); 165 pitem=(IMAPfolderItem*)pitem->nextSibling();
152 } 166 }
153 return pitem; 167 return pitem;
154} 168}
155 169
156void IMAPviewItem::refresh(QList<RecMail>&) 170void IMAPviewItem::refresh(QList<RecMail>&)
157{ 171{
158 refreshFolders(false); 172 refreshFolders(false);
159} 173}
160 174
161void IMAPviewItem::refreshFolders(bool force) 175void IMAPviewItem::removeChilds()
162{ 176{
163 if (childCount()>0 && force==false) return;
164 QList<Folder> *folders = wrapper->listFolders();
165
166 QListViewItem *child = firstChild(); 177 QListViewItem *child = firstChild();
167 while ( child ) { 178 while ( child ) {
168 QListViewItem *tmp = child; 179 QListViewItem *tmp = child;
169 child = child->nextSibling(); 180 child = child->nextSibling();
170 delete tmp; 181 delete tmp;
171 } 182 }
172 183
184}
185
186void IMAPviewItem::refreshFolders(bool force)
187{
188 if (childCount()>0 && force==false) return;
189
190 removeChilds();
191
192 QList<Folder> *folders = wrapper->listFolders();
193
173 Folder *it; 194 Folder *it;
174 QListViewItem*item = 0; 195 QListViewItem*item = 0;
175 QListViewItem*titem = 0; 196 QListViewItem*titem = 0;
176 QString fname,del,search; 197 QString fname,del,search;
177 int pos; 198 int pos;
178 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 199 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
179 folders->setAutoDelete(false); 200 folders->setAutoDelete(false);
180 201
181 for ( it = folders->first(); it; it = folders->next() ) { 202 for ( it = folders->first(); it; it = folders->next() ) {
182 if (it->getDisplayName().lower()=="inbox") { 203 if (it->getDisplayName().lower()=="inbox") {
183 item = new IMAPfolderItem( it, this , item ); 204 item = new IMAPfolderItem( it, this , item );
184 folders->remove(it); 205 folders->remove(it);
185 qDebug("inbox found"); 206 qDebug("inbox found");
186 break; 207 break;
187 } 208 }
188 } 209 }
189 for ( it = folders->first(); it; it = folders->next() ) { 210 for ( it = folders->first(); it; it = folders->next() ) {
190 fname = it->getDisplayName(); 211 fname = it->getDisplayName();
191 pos = fname.findRev(it->Separator()); 212 pos = fname.findRev(it->Separator());
192 if (pos != -1) { 213 if (pos != -1) {
193 fname = fname.left(pos); 214 fname = fname.left(pos);
194 } 215 }
195 IMAPfolderItem*pitem = findSubItem(fname); 216 IMAPfolderItem*pitem = findSubItem(fname);
196 if (pitem) { 217 if (pitem) {
197 titem = item; 218 titem = item;
198 item = new IMAPfolderItem(it,pitem,pitem->firstChild(),this); 219 item = new IMAPfolderItem(it,pitem,pitem->firstChild(),this);
199 /* setup the short name */ 220 /* setup the short name */
200 item->setText(0,it->getDisplayName().right(it->getDisplayName().length()-pos-1)); 221 item->setText(0,it->getDisplayName().right(it->getDisplayName().length()-pos-1));
201 item = titem; 222 item = titem;
202 } else { 223 } else {
203 item = new IMAPfolderItem( it, this , item ); 224 item = new IMAPfolderItem( it, this , item );
204 } 225 }
205 } 226 }
206 delete folders; 227 delete folders;
207} 228}
208 229
209QPopupMenu * IMAPviewItem::getContextMenu() 230QPopupMenu * IMAPviewItem::getContextMenu()
210{ 231{
211 QPopupMenu *m = new QPopupMenu(0); 232 QPopupMenu *m = new QPopupMenu(0);
212 if (m) { 233 if (m) {
213 m->insertItem(QObject::tr("Refresh folder list",contextName),0); 234 m->insertItem(QObject::tr("Refresh folder list",contextName),0);
214 m->insertItem(QObject::tr("Create new folder",contextName),1); 235 m->insertItem(QObject::tr("Create new folder",contextName),1);
215 m->insertSeparator(); 236 m->insertSeparator();
216 m->insertItem(QObject::tr("Disconnect",contextName),2); 237 m->insertItem(QObject::tr("Disconnect",contextName),2);
217 } 238 }
218 return m; 239 return m;
219} 240}
220 241
221void IMAPviewItem::createNewFolder() 242void IMAPviewItem::createNewFolder()
222{ 243{
223 Newmdirdlg ndirdlg; 244 Newmdirdlg ndirdlg;
224 ndirdlg.showMaximized(); 245 ndirdlg.showMaximized();
225 if (ndirdlg.exec()) { 246 if (ndirdlg.exec()) {
226 QString ndir = ndirdlg.Newdir(); 247 QString ndir = ndirdlg.Newdir();
227 bool makesubs = ndirdlg.subpossible(); 248 bool makesubs = ndirdlg.subpossible();
228 QString delemiter = "/"; 249 QString delemiter = "/";
229 IMAPfolderItem*item = (IMAPfolderItem*)firstChild(); 250 IMAPfolderItem*item = (IMAPfolderItem*)firstChild();
230 if (item) { 251 if (item) {
231 delemiter = item->Delemiter(); 252 delemiter = item->Delemiter();
232 } 253 }
233 if (wrapper->createMbox(ndir,0,delemiter,makesubs)) { 254 if (wrapper->createMbox(ndir,0,delemiter,makesubs)) {
234 refreshFolders(true); 255 refreshFolders(true);
235 } 256 }
236 } 257 }
237} 258}
238 259
239void IMAPviewItem::contextMenuSelected(int id) 260void IMAPviewItem::contextMenuSelected(int id)
240{ 261{
241 qDebug("Id selected: %i",id); 262 qDebug("Id selected: %i",id);
242 switch (id) { 263 switch (id) {
243 case 0: 264 case 0:
244 refreshFolders(true); 265 refreshFolders(true);
245 break; 266 break;
246 case 1: 267 case 1:
247 createNewFolder(); 268 createNewFolder();
248 break; 269 break;
270 case 2:
271 removeChilds();
272 wrapper->logout();
273 break;
249 default: 274 default:
250 break; 275 break;
251 } 276 }
252} 277}
253 278
254RecBody IMAPviewItem::fetchBody(const RecMail&) 279RecBody IMAPviewItem::fetchBody(const RecMail&)
255{ 280{
256 return RecBody(); 281 return RecBody();
257} 282}
258 283
259IMAPfolderItem::~IMAPfolderItem() 284IMAPfolderItem::~IMAPfolderItem()
260{ 285{
261 delete folder; 286 delete folder;
262} 287}
263 288
264IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPviewItem *parent , QListViewItem*after ) 289IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPviewItem *parent , QListViewItem*after )
265 : AccountViewItem( parent , after ) 290 : AccountViewItem( parent , after )
266{ 291{
267 folder = folderInit; 292 folder = folderInit;
268 imap = parent; 293 imap = parent;
269 if (folder->getDisplayName().lower()!="inbox") { 294 if (folder->getDisplayName().lower()!="inbox") {
270 setPixmap( 0, PIXMAP_IMAPFOLDER ); 295 setPixmap( 0, PIXMAP_IMAPFOLDER );
271 } else { 296 } else {
272 setPixmap( 0, PIXMAP_INBOXFOLDER); 297 setPixmap( 0, PIXMAP_INBOXFOLDER);
273 } 298 }
274 setText( 0, folder->getDisplayName() ); 299 setText( 0, folder->getDisplayName() );
275} 300}
276 301
277IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master ) 302IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master )
278 : AccountViewItem( parent,after ) 303 : AccountViewItem( parent,after )
279{ 304{
280 folder = folderInit; 305 folder = folderInit;
281 imap = master; 306 imap = master;
282 if (folder->getDisplayName().lower()!="inbox") { 307 if (folder->getDisplayName().lower()!="inbox") {
283 setPixmap( 0, PIXMAP_IMAPFOLDER ); 308 setPixmap( 0, PIXMAP_IMAPFOLDER );
284 } else { 309 } else {
285 setPixmap( 0, PIXMAP_INBOXFOLDER); 310 setPixmap( 0, PIXMAP_INBOXFOLDER);
286 } 311 }
287 setText( 0, folder->getDisplayName() ); 312 setText( 0, folder->getDisplayName() );
288} 313}
289 314
290const QString& IMAPfolderItem::Delemiter()const 315const QString& IMAPfolderItem::Delemiter()const
291{ 316{
292 return folder->Separator(); 317 return folder->Separator();
293} 318}
294 319
295bool IMAPfolderItem::matchName(const QString&name)const 320bool IMAPfolderItem::matchName(const QString&name)const
296{ 321{