author | alwin <alwin> | 2003-12-27 18:23:23 (UTC) |
---|---|---|
committer | alwin <alwin> | 2003-12-27 18:23:23 (UTC) |
commit | 7812187f6732eef351e501d993aa664b7e351cbb (patch) (unidiff) | |
tree | fe2ed5fc0d8c67983956ecf543a54d2e6355a627 /noncore/net/mail/accountview.cpp | |
parent | 583f9d5f33fa055fe8ee612f344d06faae1ef330 (diff) | |
download | opie-7812187f6732eef351e501d993aa664b7e351cbb.zip opie-7812187f6732eef351e501d993aa664b7e351cbb.tar.gz opie-7812187f6732eef351e501d993aa664b7e351cbb.tar.bz2 |
folder handling for imap mostly impelemented, context menus for
imap-mail-folders implemented.
Diffstat (limited to 'noncore/net/mail/accountview.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/net/mail/accountview.cpp | 179 |
1 files changed, 172 insertions, 7 deletions
diff --git a/noncore/net/mail/accountview.cpp b/noncore/net/mail/accountview.cpp index 59e8bc0..8aac14b 100644 --- a/noncore/net/mail/accountview.cpp +++ b/noncore/net/mail/accountview.cpp | |||
@@ -1,21 +1,23 @@ | |||
1 | #include <stdlib.h> | 1 | #include <stdlib.h> |
2 | #include "accountview.h" | 2 | #include "accountview.h" |
3 | #include "mailtypes.h" | 3 | #include "mailtypes.h" |
4 | #include "defines.h" | 4 | #include "defines.h" |
5 | #include "newmaildir.h" | ||
6 | #include <qmessagebox.h> | ||
7 | #include <qpopupmenu.h> | ||
5 | 8 | ||
6 | /** | 9 | /** |
7 | * POP3 Account stuff | 10 | * POP3 Account stuff |
8 | */ | 11 | */ |
9 | |||
10 | POP3viewItem::POP3viewItem( POP3account *a, QListView *parent ) | 12 | POP3viewItem::POP3viewItem( POP3account *a, QListView *parent ) |
11 | : AccountViewItem( parent ) | 13 | : AccountViewItem( parent ) |
12 | { | 14 | { |
13 | account = a; | 15 | account = a; |
14 | wrapper = AbstractMail::getWrapper( account ); | 16 | wrapper = AbstractMail::getWrapper( account ); |
15 | setPixmap( 0, PIXMAP_POP3FOLDER ); | 17 | setPixmap( 0, PIXMAP_POP3FOLDER ); |
16 | setText( 0, account->getAccountName() ); | 18 | setText( 0, account->getAccountName() ); |
17 | setOpen( true ); | 19 | setOpen( true ); |
18 | } | 20 | } |
19 | 21 | ||
20 | POP3viewItem::~POP3viewItem() | 22 | POP3viewItem::~POP3viewItem() |
21 | { | 23 | { |
@@ -119,25 +121,30 @@ IMAPfolderItem*IMAPviewItem::findSubItem(const QString&path,IMAPfolderItem*start | |||
119 | if (sitem) { | 121 | if (sitem) { |
120 | pitem = sitem; | 122 | pitem = sitem; |
121 | break; | 123 | break; |
122 | } | 124 | } |
123 | } | 125 | } |
124 | pitem=(IMAPfolderItem*)pitem->nextSibling(); | 126 | pitem=(IMAPfolderItem*)pitem->nextSibling(); |
125 | } | 127 | } |
126 | return pitem; | 128 | return pitem; |
127 | } | 129 | } |
128 | 130 | ||
129 | void IMAPviewItem::refresh(QList<RecMail>&) | 131 | void IMAPviewItem::refresh(QList<RecMail>&) |
130 | { | 132 | { |
131 | if (childCount()>0) return; | 133 | refreshFolders(false); |
134 | } | ||
135 | |||
136 | void IMAPviewItem::refreshFolders(bool force) | ||
137 | { | ||
138 | if (childCount()>0 && force==false) return; | ||
132 | QList<Folder> *folders = wrapper->listFolders(); | 139 | QList<Folder> *folders = wrapper->listFolders(); |
133 | 140 | ||
134 | QListViewItem *child = firstChild(); | 141 | QListViewItem *child = firstChild(); |
135 | while ( child ) { | 142 | while ( child ) { |
136 | QListViewItem *tmp = child; | 143 | QListViewItem *tmp = child; |
137 | child = child->nextSibling(); | 144 | child = child->nextSibling(); |
138 | delete tmp; | 145 | delete tmp; |
139 | } | 146 | } |
140 | 147 | ||
141 | Folder *it; | 148 | Folder *it; |
142 | QListViewItem*item = 0; | 149 | QListViewItem*item = 0; |
143 | QListViewItem*titem = 0; | 150 | QListViewItem*titem = 0; |
@@ -155,36 +162,79 @@ void IMAPviewItem::refresh(QList<RecMail>&) | |||
155 | } | 162 | } |
156 | } | 163 | } |
157 | for ( it = folders->first(); it; it = folders->next() ) { | 164 | for ( it = folders->first(); it; it = folders->next() ) { |
158 | fname = it->getDisplayName(); | 165 | fname = it->getDisplayName(); |
159 | pos = fname.findRev(it->Separator()); | 166 | pos = fname.findRev(it->Separator()); |
160 | if (pos != -1) { | 167 | if (pos != -1) { |
161 | fname = fname.left(pos); | 168 | fname = fname.left(pos); |
162 | } | 169 | } |
163 | IMAPfolderItem*pitem = findSubItem(fname); | 170 | IMAPfolderItem*pitem = findSubItem(fname); |
164 | if (pitem) { | 171 | if (pitem) { |
165 | titem = item; | 172 | titem = item; |
166 | item = new IMAPfolderItem(it,pitem,pitem->firstChild(),this); | 173 | item = new IMAPfolderItem(it,pitem,pitem->firstChild(),this); |
167 | item->setSelectable(it->may_select()); | ||
168 | /* setup the short name */ | 174 | /* setup the short name */ |
169 | item->setText(0,it->getDisplayName().right(it->getDisplayName().length()-pos-1)); | 175 | item->setText(0,it->getDisplayName().right(it->getDisplayName().length()-pos-1)); |
170 | item = titem; | 176 | item = titem; |
171 | } else { | 177 | } else { |
172 | item = new IMAPfolderItem( it, this , item ); | 178 | item = new IMAPfolderItem( it, this , item ); |
173 | item->setSelectable(it->may_select()); | ||
174 | } | 179 | } |
175 | } | 180 | } |
176 | delete folders; | 181 | delete folders; |
177 | } | 182 | } |
178 | 183 | ||
184 | QPopupMenu * IMAPviewItem::getContextMenu() | ||
185 | { | ||
186 | QPopupMenu *m = new QPopupMenu(0); | ||
187 | if (m) { | ||
188 | m->insertItem(QObject::tr("Refresh folder list","IMAPviewItem"),0); | ||
189 | m->insertItem(QObject::tr("Create new folder","IMAPviewItem"),1); | ||
190 | m->insertSeparator(); | ||
191 | m->insertItem(QObject::tr("Disconnect","IMAPviewItem"),2); | ||
192 | } | ||
193 | return m; | ||
194 | } | ||
195 | |||
196 | void IMAPviewItem::createNewFolder() | ||
197 | { | ||
198 | Newmdirdlg ndirdlg; | ||
199 | ndirdlg.showMaximized(); | ||
200 | if (ndirdlg.exec()) { | ||
201 | QString ndir = ndirdlg.Newdir(); | ||
202 | bool makesubs = ndirdlg.subpossible(); | ||
203 | QString delemiter = "/"; | ||
204 | IMAPfolderItem*item = (IMAPfolderItem*)firstChild(); | ||
205 | if (item) { | ||
206 | delemiter = item->Delemiter(); | ||
207 | } | ||
208 | if (wrapper->createMbox(ndir,0,delemiter,makesubs)) { | ||
209 | refreshFolders(true); | ||
210 | } | ||
211 | } | ||
212 | } | ||
213 | |||
214 | void IMAPviewItem::contextMenuSelected(int id) | ||
215 | { | ||
216 | qDebug("Id selected: %i",id); | ||
217 | switch (id) { | ||
218 | case 0: | ||
219 | refreshFolders(true); | ||
220 | break; | ||
221 | case 1: | ||
222 | createNewFolder(); | ||
223 | break; | ||
224 | default: | ||
225 | break; | ||
226 | } | ||
227 | } | ||
228 | |||
179 | RecBody IMAPviewItem::fetchBody(const RecMail&) | 229 | RecBody IMAPviewItem::fetchBody(const RecMail&) |
180 | { | 230 | { |
181 | return RecBody(); | 231 | return RecBody(); |
182 | } | 232 | } |
183 | 233 | ||
184 | IMAPfolderItem::~IMAPfolderItem() | 234 | IMAPfolderItem::~IMAPfolderItem() |
185 | { | 235 | { |
186 | delete folder; | 236 | delete folder; |
187 | } | 237 | } |
188 | 238 | ||
189 | IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPviewItem *parent , QListViewItem*after ) | 239 | IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPviewItem *parent , QListViewItem*after ) |
190 | : AccountViewItem( parent , after ) | 240 | : AccountViewItem( parent , after ) |
@@ -203,53 +253,168 @@ IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPfolderItem *parent , QLi | |||
203 | : AccountViewItem( parent,after ) | 253 | : AccountViewItem( parent,after ) |
204 | { | 254 | { |
205 | folder = folderInit; | 255 | folder = folderInit; |
206 | imap = master; | 256 | imap = master; |
207 | if (folder->getDisplayName().lower()!="inbox") { | 257 | if (folder->getDisplayName().lower()!="inbox") { |
208 | setPixmap( 0, PIXMAP_IMAPFOLDER ); | 258 | setPixmap( 0, PIXMAP_IMAPFOLDER ); |
209 | } else { | 259 | } else { |
210 | setPixmap( 0, PIXMAP_INBOXFOLDER); | 260 | setPixmap( 0, PIXMAP_INBOXFOLDER); |
211 | } | 261 | } |
212 | setText( 0, folder->getDisplayName() ); | 262 | setText( 0, folder->getDisplayName() ); |
213 | } | 263 | } |
214 | 264 | ||
265 | const QString& IMAPfolderItem::Delemiter()const | ||
266 | { | ||
267 | return folder->Separator(); | ||
268 | } | ||
269 | |||
215 | bool IMAPfolderItem::matchName(const QString&name)const | 270 | bool IMAPfolderItem::matchName(const QString&name)const |
216 | { | 271 | { |
217 | return folder->getDisplayName()==name; | 272 | return folder->getDisplayName()==name; |
218 | } | 273 | } |
219 | 274 | ||
220 | void IMAPfolderItem::refresh(QList<RecMail>&target) | 275 | void IMAPfolderItem::refresh(QList<RecMail>&target) |
221 | { | 276 | { |
222 | if (folder->may_select()) | 277 | if (folder->may_select()) { |
223 | imap->getWrapper()->listMessages( folder->getName(),target ); | 278 | imap->getWrapper()->listMessages( folder->getName(),target ); |
279 | } else { | ||
280 | target.clear(); | ||
281 | } | ||
224 | } | 282 | } |
225 | 283 | ||
226 | RecBody IMAPfolderItem::fetchBody(const RecMail&aMail) | 284 | RecBody IMAPfolderItem::fetchBody(const RecMail&aMail) |
227 | { | 285 | { |
228 | return imap->getWrapper()->fetchBody(aMail); | 286 | return imap->getWrapper()->fetchBody(aMail); |
229 | } | 287 | } |
230 | 288 | ||
289 | QPopupMenu * IMAPfolderItem::getContextMenu() | ||
290 | { | ||
291 | QPopupMenu *m = new QPopupMenu(0); | ||
292 | if (m) { | ||
293 | if (folder->may_select()) { | ||
294 | m->insertItem(QObject::tr("Refresh header list","IMAPfolderItem"),0); | ||
295 | m->insertItem(QObject::tr("Delete all mails","IMAPfolderItem"),1); | ||
296 | } | ||
297 | if (folder->no_inferior()==false) { | ||
298 | m->insertItem(QObject::tr("Create new subfolder","IMAPfolderItem"),2); | ||
299 | } | ||
300 | if (folder->getDisplayName().lower()!="inbox") { | ||
301 | m->insertItem(QObject::tr("Delete folder","IMAPfolderItem"),3); | ||
302 | } | ||
303 | } | ||
304 | return m; | ||
305 | } | ||
306 | |||
307 | void IMAPfolderItem::deleteAllMails() | ||
308 | { | ||
309 | int yesno = QMessageBox::warning(0,QObject::tr("Delete all mails","IMAPfolderItem"), | ||
310 | QObject::tr("<center>Realy delete all mails in box <br>%1</center>","IMAPfolderItem").arg(folder->getDisplayName()), | ||
311 | QObject::tr("Yes","IMAPfolderItem"), | ||
312 | QObject::tr("No","IMAPfolderItem"),QString::null,1,1); | ||
313 | qDebug("Auswahl: %i",yesno); | ||
314 | if (yesno == 0) { | ||
315 | if (imap->getWrapper()->deleteAllMail(folder)) { | ||
316 | AccountView * view = (AccountView*)listView(); | ||
317 | if (view) view->refreshCurrent(); | ||
318 | } | ||
319 | } | ||
320 | } | ||
321 | |||
322 | void IMAPfolderItem::createNewFolder() | ||
323 | { | ||
324 | Newmdirdlg ndirdlg; | ||
325 | ndirdlg.showMaximized(); | ||
326 | if (ndirdlg.exec()) { | ||
327 | QString ndir = ndirdlg.Newdir(); | ||
328 | bool makesubs = ndirdlg.subpossible(); | ||
329 | QString delemiter = Delemiter(); | ||
330 | if (imap->wrapper->createMbox(ndir,folder,delemiter,makesubs)) { | ||
331 | imap->refreshFolders(true); | ||
332 | } | ||
333 | } | ||
334 | } | ||
335 | |||
336 | void IMAPfolderItem::deleteFolder() | ||
337 | { | ||
338 | int yesno = QMessageBox::warning(0,QObject::tr("Delete folder","IMAPfolderItem"), | ||
339 | QObject::tr("<center>Realy delete folder <br><b>%1</b><br>and all if it content?</center>","IMAPfolderItem").arg(folder->getDisplayName()), | ||
340 | QObject::tr("Yes","IMAPfolderItem"), | ||
341 | QObject::tr("No","IMAPfolderItem"),QString::null,1,1); | ||
342 | qDebug("Auswahl: %i",yesno); | ||
343 | if (yesno == 0) { | ||
344 | if (imap->getWrapper()->deleteMbox(folder)) { | ||
345 | /* be carefull - after that this object is destroyd so don't call | ||
346 | * any member of it after that call!!*/ | ||
347 | imap->refreshFolders(true); | ||
348 | } | ||
349 | } | ||
350 | } | ||
351 | |||
352 | void IMAPfolderItem::contextMenuSelected(int id) | ||
353 | { | ||
354 | qDebug("Selected id: %i",id); | ||
355 | AccountView * view = (AccountView*)listView(); | ||
356 | switch(id) { | ||
357 | case 0: | ||
358 | view->refreshCurrent(); | ||
359 | break; | ||
360 | case 1: | ||
361 | deleteAllMails(); | ||
362 | break; | ||
363 | case 2: | ||
364 | createNewFolder(); | ||
365 | break; | ||
366 | case 3: | ||
367 | deleteFolder(); | ||
368 | break; | ||
369 | default: | ||
370 | break; | ||
371 | } | ||
372 | } | ||
231 | 373 | ||
232 | /** | 374 | /** |
233 | * Generic stuff | 375 | * Generic stuff |
234 | */ | 376 | */ |
235 | 377 | ||
236 | AccountView::AccountView( QWidget *parent, const char *name, WFlags flags ) | 378 | AccountView::AccountView( QWidget *parent, const char *name, WFlags flags ) |
237 | : QListView( parent, name, flags ) | 379 | : QListView( parent, name, flags ) |
238 | { | 380 | { |
239 | connect( this, SIGNAL( selectionChanged( QListViewItem * ) ), | 381 | connect( this, SIGNAL( selectionChanged( QListViewItem * ) ), |
240 | SLOT( refresh( QListViewItem * ) ) ); | 382 | SLOT( refresh( QListViewItem * ) ) ); |
383 | connect( this, SIGNAL( mouseButtonPressed(int, QListViewItem *,const QPoint&,int ) ),this, | ||
384 | SLOT( slotHold( int, QListViewItem *,const QPoint&,int ) ) ); | ||
385 | |||
241 | setSorting(0); | 386 | setSorting(0); |
242 | } | 387 | } |
243 | 388 | ||
389 | void AccountView::slotContextMenu(int id) | ||
390 | { | ||
391 | AccountViewItem *view = static_cast<AccountViewItem *>(currentItem()); | ||
392 | if (!view) return; | ||
393 | view->contextMenuSelected(id); | ||
394 | } | ||
395 | |||
396 | void AccountView::slotHold(int button, QListViewItem * item,const QPoint&,int) | ||
397 | { | ||
398 | if (button==1) {return;} | ||
399 | if (!item) return; | ||
400 | AccountViewItem *view = static_cast<AccountViewItem *>(item); | ||
401 | QPopupMenu*m = view->getContextMenu(); | ||
402 | if (!m) return; | ||
403 | connect(m,SIGNAL(activated(int)),this,SLOT(slotContextMenu(int))); | ||
404 | m->setFocus(); | ||
405 | m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) ); | ||
406 | delete m; | ||
407 | } | ||
408 | |||
244 | void AccountView::populate( QList<Account> list ) | 409 | void AccountView::populate( QList<Account> list ) |
245 | { | 410 | { |
246 | clear(); | 411 | clear(); |
247 | 412 | ||
248 | QString localfolders = (QString) getenv( "HOME" ) + QString("/Applications/opiemail/localmail/"); | 413 | QString localfolders = (QString) getenv( "HOME" ) + QString("/Applications/opiemail/localmail/"); |
249 | (void) new MBOXviewItem(localfolders,this); | 414 | (void) new MBOXviewItem(localfolders,this); |
250 | 415 | ||
251 | Account *it; | 416 | Account *it; |
252 | for ( it = list.first(); it; it = list.next() ) { | 417 | for ( it = list.first(); it; it = list.next() ) { |
253 | if ( it->getType().compare( "IMAP" ) == 0 ) { | 418 | if ( it->getType().compare( "IMAP" ) == 0 ) { |
254 | IMAPaccount *imap = static_cast<IMAPaccount *>(it); | 419 | IMAPaccount *imap = static_cast<IMAPaccount *>(it); |
255 | qDebug( "added IMAP " + imap->getAccountName() ); | 420 | qDebug( "added IMAP " + imap->getAccountName() ); |
@@ -268,24 +433,25 @@ void AccountView::refresh(QListViewItem *item) { | |||
268 | if ( item ) { | 433 | if ( item ) { |
269 | m_currentItem = item; | 434 | m_currentItem = item; |
270 | QList<RecMail> headerlist; | 435 | QList<RecMail> headerlist; |
271 | headerlist.setAutoDelete(true); | 436 | headerlist.setAutoDelete(true); |
272 | AccountViewItem *view = static_cast<AccountViewItem *>(item); | 437 | AccountViewItem *view = static_cast<AccountViewItem *>(item); |
273 | view->refresh(headerlist); | 438 | view->refresh(headerlist); |
274 | emit refreshMailview(&headerlist); | 439 | emit refreshMailview(&headerlist); |
275 | } | 440 | } |
276 | } | 441 | } |
277 | 442 | ||
278 | void AccountView::refreshCurrent() | 443 | void AccountView::refreshCurrent() |
279 | { | 444 | { |
445 | m_currentItem = currentItem(); | ||
280 | if ( !m_currentItem ) return; | 446 | if ( !m_currentItem ) return; |
281 | QList<RecMail> headerlist; | 447 | QList<RecMail> headerlist; |
282 | headerlist.setAutoDelete(true); | 448 | headerlist.setAutoDelete(true); |
283 | AccountViewItem *view = static_cast<AccountViewItem *>(m_currentItem); | 449 | AccountViewItem *view = static_cast<AccountViewItem *>(m_currentItem); |
284 | view->refresh(headerlist); | 450 | view->refresh(headerlist); |
285 | emit refreshMailview(&headerlist); | 451 | emit refreshMailview(&headerlist); |
286 | } | 452 | } |
287 | 453 | ||
288 | void AccountView::refreshAll() | 454 | void AccountView::refreshAll() |
289 | { | 455 | { |
290 | 456 | ||
291 | } | 457 | } |
@@ -369,13 +535,12 @@ MBOXfolderItem::MBOXfolderItem( Folder *folderInit, MBOXviewItem *parent , QList | |||
369 | } | 535 | } |
370 | 536 | ||
371 | void MBOXfolderItem::refresh(QList<RecMail>&target) | 537 | void MBOXfolderItem::refresh(QList<RecMail>&target) |
372 | { | 538 | { |
373 | if (folder->may_select()) | 539 | if (folder->may_select()) |
374 | mbox->getWrapper()->listMessages( folder->getName(),target ); | 540 | mbox->getWrapper()->listMessages( folder->getName(),target ); |
375 | } | 541 | } |
376 | 542 | ||
377 | RecBody MBOXfolderItem::fetchBody(const RecMail&aMail) | 543 | RecBody MBOXfolderItem::fetchBody(const RecMail&aMail) |
378 | { | 544 | { |
379 | return mbox->getWrapper()->fetchBody(aMail); | 545 | return mbox->getWrapper()->fetchBody(aMail); |
380 | } | 546 | } |
381 | |||