00001
00002 #include "accountitem.h"
00003 #include "accountview.h"
00004 #include "newmaildir.h"
00005 #include "nntpgroupsdlg.h"
00006 #include "defines.h"
00007
00008 #include <libmailwrapper/mailtypes.h>
00009 #include <libmailwrapper/abstractmail.h>
00010 #include <libmailwrapper/mailwrapper.h>
00011
00012
00013 #include <opie2/odebug.h>
00014 #include <opie2/oresource.h>
00015 #include <qpe/qpeapplication.h>
00016 using namespace Opie::Core;
00017
00018
00019 #include <qpopupmenu.h>
00020 #include <qmessagebox.h>
00021
00022 #define SETPIX(x) if (!account->getOffline()) {setPixmap( 0,x);} else {setPixmap( 0, PIXMAP_OFFLINE );}
00023
00026 POP3viewItem::POP3viewItem( POP3account *a, AccountView *parent )
00027 : AccountViewItem( parent )
00028 {
00029 account = a;
00030 wrapper = AbstractMail::getWrapper( account );
00031 SETPIX(PIXMAP_POP3FOLDER);
00032 #if 0
00033 if (!account->getOffline())
00034 {
00035 setPixmap( 0, );
00036 }
00037 else
00038 {
00039 setPixmap( 0, PIXMAP_OFFLINE );
00040 }
00041 #endif
00042 setText( 0, account->getAccountName() );
00043 setOpen( true );
00044 }
00045
00046 POP3viewItem::~POP3viewItem()
00047 {
00048 delete wrapper;
00049 }
00050
00051 AbstractMail *POP3viewItem::getWrapper()
00052 {
00053 return wrapper;
00054 }
00055
00056 void POP3viewItem::refresh(QValueList<Opie::Core::OSmartPointer<RecMail> > & )
00057 {
00058 refresh();
00059 }
00060
00061 void POP3viewItem::refresh()
00062 {
00063 if (account->getOffline()) return;
00064 QValueList<FolderP> *folders = wrapper->listFolders();
00065 QListViewItem *child = firstChild();
00066 while ( child )
00067 {
00068 QListViewItem *tmp = child;
00069 child = child->nextSibling();
00070 delete tmp;
00071 }
00072 QValueList<FolderP>::ConstIterator it;
00073 QListViewItem*item = 0;
00074 for ( it = folders->begin(); it!=folders->end(); ++it)
00075 {
00076 item = new POP3folderItem( (*it), this , item );
00077 item->setSelectable( (*it)->may_select());
00078 }
00079 delete folders;
00080 }
00081
00082 RECBODYP POP3viewItem::fetchBody( const RecMailP &mail )
00083 {
00084 odebug << "POP3 fetchBody" << oendl;
00085 return wrapper->fetchBody( mail );
00086 }
00087
00088 QMap<int,QString> POP3viewItem::serverMenu()
00089 {
00090 QMap<int,QString> _entries;
00091 if (!account->getOffline()) {
00092 _entries[SERVER_MENU_DISCONNECT]=QObject::tr("Disconnect",contextName);
00093 _entries[SERVER_MENU_OFFLINE]=QObject::tr("Set offline",contextName);
00094 } else {
00095 _entries[SERVER_MENU_OFFLINE]=QObject::tr("Set online",contextName);
00096 }
00097 return _entries;
00098 }
00099
00100 void POP3viewItem::disconnect()
00101 {
00102 QListViewItem *child = firstChild();
00103 while ( child )
00104 {
00105 QListViewItem *tmp = child;
00106 child = child->nextSibling();
00107 delete tmp;
00108 }
00109 wrapper->logout();
00110 }
00111
00112 void POP3viewItem::setOnOffline()
00113 {
00114 if (!account->getOffline())
00115 {
00116 disconnect();
00117 }
00118 account->setOffline(!account->getOffline());
00119 account->save();
00120 SETPIX(PIXMAP_POP3FOLDER);
00121 refresh();
00122 }
00123
00124 bool POP3viewItem::contextMenuSelected(int which)
00125 {
00126 switch (which)
00127 {
00128 case SERVER_MENU_DISCONNECT:
00129 disconnect();
00130 break;
00131 case SERVER_MENU_OFFLINE:
00132 setOnOffline();
00133 break;
00134 }
00135 return false;
00136 }
00137
00138 POP3folderItem::~POP3folderItem()
00139 {}
00140
00141 POP3folderItem::POP3folderItem( const FolderP&folderInit, POP3viewItem *parent , QListViewItem*after )
00142 : AccountViewItem(folderInit,parent,after )
00143 {
00144 pop3 = parent;
00145 if (folder->getDisplayName().lower()!="inbox")
00146 {
00147 setPixmap( 0, PIXMAP_POP3FOLDER );
00148 }
00149 else
00150 {
00151 setPixmap( 0, PIXMAP_INBOXFOLDER);
00152 }
00153 setText( 0, folder->getDisplayName() );
00154 }
00155
00156 void POP3folderItem::refresh(QValueList<RecMailP>&target)
00157 {
00158 if (folder->may_select())
00159 pop3->getWrapper()->listMessages( folder->getName(),target );
00160 }
00161
00162 RECBODYP POP3folderItem::fetchBody(const RecMailP&aMail)
00163 {
00164 return pop3->getWrapper()->fetchBody(aMail);
00165 }
00166
00167 QMap<int,QString> POP3folderItem::folderMenu()
00168 {
00169 QMap<int,QString> _entries;
00170 _entries[FOLDER_MENU_REFRESH_HEADER]=QObject::tr("Refresh header list",contextName);
00171 _entries[FOLDER_MENU_DELETE_ALL_MAILS]=QObject::tr("Delete all mails",contextName);
00172 _entries[FOLDER_MENU_MOVE_MAILS]=QObject::tr("Move/Copie all mails",contextName);
00173 return _entries;
00174 }
00175
00176 void POP3folderItem::downloadMails()
00177 {
00178 AccountView*bl = pop3->accountView();
00179 if (!bl) return;
00180 bl->downloadMails(folder,pop3->getWrapper());
00181 }
00182
00183 bool POP3folderItem::contextMenuSelected(int which)
00184 {
00185 AccountView * view = (AccountView*)listView();
00186 switch (which)
00187 {
00188 case FOLDER_MENU_REFRESH_HEADER:
00189
00190 pop3->getWrapper()->logout();
00191 view->refreshCurrent();
00192 break;
00193 case FOLDER_MENU_DELETE_ALL_MAILS:
00194 deleteAllMail(pop3->getWrapper(),folder);
00195 break;
00196 case FOLDER_MENU_MOVE_MAILS:
00197 downloadMails();
00198 break;
00199 default:
00200 break;
00201 }
00202 return false;
00203 }
00204
00208 NNTPviewItem::NNTPviewItem( NNTPaccount *a, AccountView *parent )
00209 : AccountViewItem( parent )
00210 {
00211 account = a;
00212 wrapper = AbstractMail::getWrapper( account );
00213
00214 SETPIX(PIXMAP_POP3FOLDER);
00215 #if 0
00216 if (!account->getOffline())
00217 {
00218 setPixmap( 0, );
00219 }
00220 else
00221 {
00222 setPixmap( 0, PIXMAP_OFFLINE );
00223 }
00224 #endif
00225 setText( 0, account->getAccountName() );
00226 setOpen( true );
00227 }
00228
00229 NNTPviewItem::~NNTPviewItem()
00230 {
00231 delete wrapper;
00232 }
00233
00234 AbstractMail *NNTPviewItem::getWrapper()
00235 {
00236 return wrapper;
00237 }
00238
00239 void NNTPviewItem::refresh( QValueList<RecMailP> & )
00240 {
00241 refresh();
00242 }
00243
00244 void NNTPviewItem::refresh()
00245 {
00246 if (account->getOffline()) return;
00247 QValueList<FolderP> *folders = wrapper->listFolders();
00248
00249 QListViewItem *child = firstChild();
00250 while ( child )
00251 {
00252 QListViewItem *tmp = child;
00253 child = child->nextSibling();
00254 delete tmp;
00255 }
00256 QValueList<FolderP>::ConstIterator it;
00257 QListViewItem*item = 0;
00258 for ( it = folders->begin(); it!=folders->end(); ++it)
00259 {
00260 item = new NNTPfolderItem( (*it), this , item );
00261 item->setSelectable( (*it)->may_select());
00262 }
00263 delete folders;
00264 }
00265
00266 RECBODYP NNTPviewItem::fetchBody( const RecMailP &mail )
00267 {
00268 odebug << "NNTP fetchBody" << oendl;
00269 return wrapper->fetchBody( mail );
00270 }
00271
00272 QMap<int,QString> NNTPviewItem::serverMenu()
00273 {
00274 QMap<int,QString> _entries;
00275 if (!account->getOffline())
00276 {
00277 _entries[SERVER_MENU_DISCONNECT]=QObject::tr("Disconnect",contextName);
00278 _entries[SERVER_MENU_OFFLINE]=QObject::tr("Set offline",contextName);
00279 _entries[SERVER_MENU_SUBSCRIBE]=QObject::tr("(Un-)Subscribe groups",contextName);
00280 } else {
00281 _entries[SERVER_MENU_OFFLINE]=QObject::tr("Set online",contextName);
00282 }
00283 return _entries;
00284 }
00285
00286 void NNTPviewItem::subscribeGroups()
00287 {
00288 NNTPGroupsDlg dlg(account);
00289 if (QPEApplication::execDialog(&dlg)== QDialog::Accepted ){
00290 refresh();
00291 }
00292 }
00293
00294 void NNTPviewItem::disconnect()
00295 {
00296 QListViewItem *child = firstChild();
00297 while ( child )
00298 {
00299 QListViewItem *tmp = child;
00300 child = child->nextSibling();
00301 delete tmp;
00302 }
00303 wrapper->logout();
00304 }
00305
00306 void NNTPviewItem::setOnOffline()
00307 {
00308 if (!account->getOffline())
00309 {
00310 disconnect();
00311 }
00312 account->setOffline(!account->getOffline());
00313 account->save();
00314
00315 SETPIX(PIXMAP_POP3FOLDER);
00316 refresh();
00317 }
00318
00319 bool NNTPviewItem::contextMenuSelected(int which)
00320 {
00321 switch (which)
00322 {
00323 case SERVER_MENU_DISCONNECT:
00324 disconnect();
00325 break;
00326 case SERVER_MENU_OFFLINE:
00327 setOnOffline();
00328 break;
00329 case SERVER_MENU_SUBSCRIBE:
00330 subscribeGroups();
00331 break;
00332 }
00333 return false;
00334 }
00335
00336 NNTPfolderItem::~NNTPfolderItem()
00337 {}
00338
00339 NNTPfolderItem::NNTPfolderItem( const FolderP &folderInit, NNTPviewItem *parent , QListViewItem*after )
00340 : AccountViewItem( folderInit, parent,after )
00341 {
00342 nntp = parent;
00343 if (folder->getDisplayName().lower()!="inbox")
00344 {
00345 setPixmap( 0, PIXMAP_POP3FOLDER );
00346 }
00347 else
00348 {
00349 setPixmap( 0, PIXMAP_INBOXFOLDER);
00350 }
00351 setText( 0, folder->getDisplayName() );
00352 }
00353
00354 void NNTPfolderItem::refresh(QValueList<RecMailP>&target)
00355 {
00356 if (folder->may_select())
00357 nntp->getWrapper()->listMessages( folder->getName(),target );
00358 }
00359
00360 RECBODYP NNTPfolderItem::fetchBody(const RecMailP&aMail)
00361 {
00362 return nntp->getWrapper()->fetchBody(aMail);
00363 }
00364
00365 QMap<int,QString> NNTPfolderItem::folderMenu()
00366 {
00367 QMap<int,QString> _entries;
00368 _entries[FOLDER_MENU_REFRESH_HEADER]=QObject::tr("Refresh header list",contextName);
00369 _entries[FOLDER_MENU_MOVE_MAILS]=QObject::tr("Copy all postings",contextName);
00370 return _entries;
00371 }
00372
00373 void NNTPfolderItem::downloadMails()
00374 {
00375 AccountView*bl = nntp->accountView();
00376 if (!bl) return;
00377 bl->downloadMails(folder,nntp->getWrapper());
00378 }
00379
00380 bool NNTPfolderItem::contextMenuSelected(int which)
00381 {
00382 AccountView * view = (AccountView*)listView();
00383 switch (which)
00384 {
00385 case FOLDER_MENU_REFRESH_HEADER:
00386
00387 nntp->getWrapper()->logout();
00388 view->refreshCurrent();
00389 break;
00390 case FOLDER_MENU_MOVE_MAILS:
00391 downloadMails();
00392 break;
00393 default:
00394 break;
00395 }
00396 return false;
00397 }
00398
00402 IMAPviewItem::IMAPviewItem( IMAPaccount *a, AccountView *parent )
00403 : AccountViewItem( parent )
00404 {
00405 account = a;
00406 wrapper = AbstractMail::getWrapper( account );
00407 SETPIX(PIXMAP_IMAPFOLDER);
00408 setText( 0, account->getAccountName() );
00409 setOpen( true );
00410 }
00411
00412 IMAPviewItem::~IMAPviewItem()
00413 {
00414 delete wrapper;
00415 }
00416
00417 AbstractMail *IMAPviewItem::getWrapper()
00418 {
00419 return wrapper;
00420 }
00421
00422 void IMAPviewItem::refresh(QValueList<RecMailP>&)
00423 {
00424 refreshFolders(false);
00425 }
00426
00427 const QStringList&IMAPviewItem::subFolders()
00428 {
00429 return currentFolders;
00430 }
00431
00432 void IMAPviewItem::refreshFolders(bool force)
00433 {
00434 if (childCount()>0 && force==false) return;
00435 if (account->getOffline()) return;
00436
00437 removeChilds();
00438 currentFolders.clear();
00439 QValueList<FolderP> * folders = wrapper->listFolders();
00440
00441 QValueList<FolderP>::Iterator it;
00442 QListViewItem*item = 0;
00443 QListViewItem*titem = 0;
00444 QString fname,del,search;
00445 int pos;
00446
00447 for ( it = folders->begin(); it!=folders->end(); ++it)
00448 {
00449 if ((*it)->getDisplayName().lower()=="inbox")
00450 {
00451 item = new IMAPfolderItem( (*it), this , item );
00452 folders->remove(it);
00453 odebug << "inbox found" << oendl;
00454 break;
00455 }
00456 }
00457 for ( it = folders->begin(); it!=folders->end(); ++it)
00458 {
00459 fname = (*it)->getDisplayName();
00460 currentFolders.append((*it)->getName());
00461 pos = fname.findRev((*it)->Separator());
00462 if (pos != -1)
00463 {
00464 fname = fname.left(pos);
00465 }
00466 IMAPfolderItem*pitem = (IMAPfolderItem*)findSubItem(fname);
00467 if (pitem)
00468 {
00469 titem = item;
00470 item = new IMAPfolderItem( (*it),pitem,pitem->firstChild(),this);
00471
00472 item->setText(0,(*it)->getDisplayName().right((*it)->getDisplayName().length()-pos-1));
00473 item = titem;
00474 }
00475 else
00476 {
00477 item = new IMAPfolderItem( (*it), this , item );
00478 }
00479 }
00480 delete folders;
00481 }
00482
00483 QMap<int,QString> IMAPviewItem::serverMenu()
00484 {
00485 QMap<int,QString> e;
00486 if (!account->getOffline()) {
00487 e[SERVER_MENU_DISCONNECT]=QObject::tr("Disconnect",contextName);
00488 e[SERVER_MENU_OFFLINE]=QObject::tr("Set offline",contextName);
00489 e[SERVER_MENU_REFRESH_FOLDER]=QObject::tr("Refresh folder list",contextName);
00490 e[SERVER_MENU_CREATE_FOLDER]=QObject::tr("Create new folder",contextName);
00491 } else {
00492 e[SERVER_MENU_OFFLINE]=QObject::tr("Set online",contextName);
00493 }
00494 return e;
00495 }
00496
00497 void IMAPviewItem::createNewFolder()
00498 {
00499 Newmdirdlg ndirdlg;
00500 if ( QPEApplication::execDialog( &ndirdlg ))
00501 {
00502 QString ndir = ndirdlg.Newdir();
00503 bool makesubs = ndirdlg.subpossible();
00504 QString delemiter = "/";
00505 IMAPfolderItem*item = (IMAPfolderItem*)firstChild();
00506 if (item)
00507 {
00508 delemiter = item->Delemiter();
00509 }
00510 if (wrapper->createMbox(ndir,0,delemiter,makesubs))
00511 {
00512 refreshFolders(true);
00513 }
00514 }
00515 }
00516
00517 bool IMAPviewItem::contextMenuSelected(int id)
00518 {
00519 odebug << "Id selected: " << id << "" << oendl;
00520 switch (id)
00521 {
00522 case SERVER_MENU_REFRESH_FOLDER:
00523 refreshFolders(true);
00524 break;
00525 case SERVER_MENU_CREATE_FOLDER:
00526 createNewFolder();
00527 break;
00528 case SERVER_MENU_DISCONNECT:
00529 removeChilds();
00530 wrapper->logout();
00531 break;
00532 case SERVER_MENU_OFFLINE:
00533 if (account->getOffline()==false)
00534 {
00535 removeChilds();
00536 wrapper->logout();
00537 }
00538 account->setOffline(!account->getOffline());
00539 account->save();
00540 SETPIX(PIXMAP_IMAPFOLDER);
00541 refreshFolders(false);
00542 break;
00543 default:
00544 break;
00545 }
00546 return false;
00547 }
00548
00549 RECBODYP IMAPviewItem::fetchBody(const RecMailP&)
00550 {
00551 return new RecBody();
00552 }
00553
00554 bool IMAPviewItem::offline()
00555 {
00556 return account->getOffline();
00557 }
00558
00559 IMAPfolderItem::IMAPfolderItem( const FolderP& folderInit, IMAPviewItem *parent , QListViewItem*after )
00560 : AccountViewItem( folderInit, parent , after )
00561 {
00562 imap = parent;
00563 if (folder->getDisplayName().lower()!="inbox")
00564 {
00565 setPixmap( 0, PIXMAP_IMAPFOLDER );
00566 }
00567 else
00568 {
00569 setPixmap( 0, PIXMAP_INBOXFOLDER);
00570 }
00571 setText( 0, folder->getDisplayName() );
00572 }
00573
00574 IMAPfolderItem::IMAPfolderItem(const FolderP &folderInit, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master )
00575 : AccountViewItem(folderInit, parent,after )
00576 {
00577 imap = master;
00578 if (folder->getDisplayName().lower()!="inbox")
00579 {
00580 setPixmap( 0, PIXMAP_IMAPFOLDER );
00581 }
00582 else
00583 {
00584 setPixmap( 0, PIXMAP_INBOXFOLDER);
00585 }
00586 setText( 0, folder->getDisplayName() );
00587 }
00588
00589 IMAPfolderItem::~IMAPfolderItem()
00590 {}
00591
00592 const QString& IMAPfolderItem::Delemiter()const
00593 {
00594 return folder->Separator();
00595 }
00596
00597 void IMAPfolderItem::refresh(QValueList<RecMailP>&target)
00598 {
00599 if (folder->may_select())
00600 {
00601 imap->getWrapper()->listMessages( folder->getName(),target );
00602 }
00603 else
00604 {
00605 target.clear();
00606 }
00607 }
00608
00609 RECBODYP IMAPfolderItem::fetchBody(const RecMailP&aMail)
00610 {
00611 return imap->getWrapper()->fetchBody(aMail);
00612 }
00613
00614 QMap<int,QString> IMAPfolderItem::folderMenu()
00615 {
00616 QMap<int,QString> e;
00617 if (folder->may_select()) {
00618 e[FOLDER_MENU_REFRESH_HEADER]=QObject::tr("Refresh header list",contextName);
00619 e[FOLDER_MENU_MOVE_MAILS]=QObject::tr("Move/Copy all mails",contextName);
00620 e[FOLDER_MENU_DELETE_ALL_MAILS]=QObject::tr("Delete all mails",contextName);
00621 }
00622 if (folder->no_inferior()==false) {
00623 e[FOLDER_MENU_NEW_SUBFOLDER]=QObject::tr("Create new subfolder",contextName);
00624 }
00625 if (folder->getDisplayName().lower()!="inbox") {
00626 e[FOLDER_MENU_DELETE_FOLDER]=QObject::tr("Delete folder",contextName);
00627 }
00628 return e;
00629 }
00630
00631 void IMAPfolderItem::createNewFolder()
00632 {
00633 Newmdirdlg ndirdlg;
00634 if ( QPEApplication::execDialog( &ndirdlg ) )
00635 {
00636 QString ndir = ndirdlg.Newdir();
00637 bool makesubs = ndirdlg.subpossible();
00638 QString delemiter = Delemiter();
00639 if (imap->wrapper->createMbox(ndir,folder,delemiter,makesubs))
00640 {
00641 imap->refreshFolders(true);
00642 }
00643 }
00644 }
00645
00646 bool IMAPfolderItem::deleteFolder()
00647 {
00648 int yesno = QMessageBox::warning(0,QObject::tr("Delete folder",contextName),
00649 QObject::tr("<center>Realy delete folder <br><b>%1</b><br>and all if it content?</center>",contextName).arg(folder->getDisplayName()),
00650 QObject::tr("Yes",contextName),
00651 QObject::tr("No",contextName),QString::null,1,1);
00652 odebug << "Auswahl: " << yesno << "" << oendl;
00653 if (yesno == 0)
00654 {
00655 if (imap->getWrapper()->deleteMbox(folder))
00656 {
00657 QListView*v=listView();
00658 IMAPviewItem * box = imap;
00659
00660
00661 imap->refreshFolders(true);
00662 if (v)
00663 {
00664 v->setSelected(box,true);
00665 }
00666 return true;
00667 }
00668 }
00669 return false;
00670 }
00671
00672 void IMAPfolderItem::downloadMails()
00673 {
00674 AccountView*bl = imap->accountView();
00675 if (!bl) return;
00676 bl->downloadMails(folder,imap->getWrapper());
00677 }
00678
00679 bool IMAPfolderItem::contextMenuSelected(int id)
00680 {
00681 odebug << "Selected id: " << id << "" << oendl;
00682 AccountView * view = (AccountView*)listView();
00683 switch(id)
00684 {
00685 case FOLDER_MENU_REFRESH_HEADER:
00686 view->refreshCurrent();
00687 break;
00688 case FOLDER_MENU_DELETE_ALL_MAILS:
00689 deleteAllMail(imap->getWrapper(),folder);
00690 break;
00691 case FOLDER_MENU_NEW_SUBFOLDER:
00692 if (folder->no_inferior()==false) {
00693 createNewFolder();
00694 }
00695 break;
00696 case FOLDER_MENU_DELETE_FOLDER:
00697 if (folder->getDisplayName().lower()!="inbox") {
00698 return deleteFolder();
00699 }
00700 break;
00701 case FOLDER_MENU_MOVE_MAILS:
00702 downloadMails();
00703 break;
00704 default:
00705 break;
00706 }
00707 return false;
00708 }
00709
00713
00714
00715 MHviewItem::MHviewItem( const QString&aPath, AccountView *parent )
00716 : AccountViewItem( parent )
00717 {
00718 m_Path = aPath;
00719
00720 wrapper = AbstractMail::getWrapper( m_Path,"Local Folders");
00721 setPixmap( 0, PIXMAP_LOCALFOLDER );
00722 setText( 0, " Local Folders" );
00723 setOpen( true );
00724 folder = 0;
00725 }
00726
00727 MHviewItem::~MHviewItem()
00728 {
00729 delete wrapper;
00730 }
00731
00732 AbstractMail *MHviewItem::getWrapper()
00733 {
00734 return wrapper;
00735 }
00736
00737 void MHviewItem::refresh( QValueList<RecMailP> & target)
00738 {
00739 refresh(false);
00740 getWrapper()->listMessages( "",target );
00741 }
00742
00743 void MHviewItem::refresh(bool force)
00744 {
00745 if (childCount()>0 && force==false) return;
00746 odebug << "Refresh mh folders" << oendl;
00747 removeChilds();
00748 currentFolders.clear();
00749 QValueList<FolderP> *folders = wrapper->listFolders();
00750 QValueList<FolderP>::ConstIterator it;
00751 MHfolderItem*item = 0;
00752 MHfolderItem*pmaster = 0;
00753 QString fname = "";
00754 int pos;
00755 for ( it = folders->begin(); it!=folders->end(); ++it)
00756 {
00757 fname = (*it)->getDisplayName();
00758
00759 if (fname=="/")
00760 {
00761 currentFolders.append(fname);
00762 folder = (*it);
00763 continue;
00764 }
00765 currentFolders.append(fname);
00766 pos = fname.findRev("/");
00767 if (pos > 0)
00768 {
00769 fname = fname.left(pos);
00770 pmaster = (MHfolderItem*)findSubItem(fname);
00771 }
00772 else
00773 {
00774 pmaster = 0;
00775 }
00776 if (pmaster)
00777 {
00778 item = new MHfolderItem( (*it), pmaster, item, this );
00779 }
00780 else
00781 {
00782 item = new MHfolderItem( (*it), this , item );
00783 }
00784 item->setSelectable((*it)->may_select());
00785 }
00786 delete folders;
00787 }
00788
00789 RECBODYP MHviewItem::fetchBody( const RecMailP &mail )
00790 {
00791 odebug << "MH fetchBody" << oendl;
00792 return wrapper->fetchBody( mail );
00793 }
00794
00795 QMap<int,QString> MHviewItem::serverMenu()
00796 {
00797 QMap<int,QString> e;
00798 e[SERVER_MENU_REFRESH_FOLDER]=QObject::tr("Refresh folder list",contextName);
00799 return e;
00800 }
00801
00802 QMap<int,QString> MHviewItem::folderMenu()
00803 {
00804 QMap<int,QString> e;
00805 e[FOLDER_MENU_REFRESH_HEADER]=QObject::tr("Refresh header list",contextName);
00806 e[FOLDER_MENU_NEW_SUBFOLDER]=QObject::tr("Create new folder",contextName);
00807 e[FOLDER_MENU_DELETE_ALL_MAILS]=QObject::tr("Delete all mails",contextName);
00808 e[FOLDER_MENU_MOVE_MAILS]=QObject::tr("Move/Copie all mails",contextName);
00809 return e;
00810 }
00811
00812 void MHviewItem::createFolder()
00813 {
00814 Newmdirdlg ndirdlg(0,0,true);
00815 if ( QPEApplication::execDialog( &ndirdlg ) )
00816 {
00817 QString ndir = ndirdlg.Newdir();
00818 if (wrapper->createMbox(ndir))
00819 {
00820 refresh(true);
00821 }
00822 }
00823 }
00824
00825 void MHviewItem::downloadMails()
00826 {
00827 AccountView*bl = accountView();
00828 if (!bl) return;
00829 bl->downloadMails(folder,getWrapper());
00830 }
00831
00832 QStringList MHviewItem::subFolders()
00833 {
00834 return currentFolders;
00835 }
00836
00837 bool MHviewItem::contextMenuSelected(int which)
00838 {
00839 AccountView*view = 0;
00840
00841 switch (which)
00842 {
00843 case SERVER_MENU_REFRESH_FOLDER:
00844 refresh(true);
00845 break;
00846 case FOLDER_MENU_NEW_SUBFOLDER:
00847 createFolder();
00848 break;
00849 case FOLDER_MENU_DELETE_ALL_MAILS:
00850 deleteAllMail(getWrapper(),folder);
00851 break;
00852 case FOLDER_MENU_MOVE_MAILS:
00853 downloadMails();
00854 break;
00855 case FOLDER_MENU_REFRESH_HEADER:
00856 view = (AccountView*)listView();
00857 if (view) view->refreshCurrent();
00858 break;
00859 default:
00860 break;
00861 }
00862 return false;
00863 }
00864
00865 MHfolderItem::~MHfolderItem()
00866 {}
00867
00868 MHfolderItem::MHfolderItem( const FolderP &folderInit, MHviewItem *parent , QListViewItem*after )
00869 : AccountViewItem(folderInit, parent,after )
00870 {
00871 mbox = parent;
00872 initName();
00873 }
00874
00875 MHfolderItem::MHfolderItem(const FolderP& folderInit, MHfolderItem *parent, QListViewItem*after, MHviewItem*master)
00876 : AccountViewItem(folderInit, parent,after )
00877 {
00878 folder = folderInit;
00879 mbox = master;
00880 initName();
00881 }
00882
00883 void MHfolderItem::initName()
00884 {
00885 QString bName = folder->getDisplayName();
00886 if (bName.startsWith("/")&&bName.length()>1)
00887 {
00888 bName.replace(0,1,"");
00889 }
00890 int pos = bName.findRev("/");
00891 if (pos > 0)
00892 {
00893 bName.replace(0,pos+1,"");
00894 }
00895 if (bName.lower() == "outgoing")
00896 {
00897 setPixmap( 0, PIXMAP_OUTBOXFOLDER );
00898 }
00899 else if (bName.lower() == "inbox")
00900 {
00901 setPixmap( 0, PIXMAP_INBOXFOLDER);
00902 } else if (bName.lower() == "drafts") {
00903 setPixmap(0, Opie::Core::OResource::loadPixmap("edit", Opie::Core::OResource::SmallIcon));
00904 } else {
00905 setPixmap( 0, PIXMAP_MBOXFOLDER );
00906 }
00907 setText( 0, bName );
00908 }
00909
00910 const FolderP&MHfolderItem::getFolder()const
00911 {
00912 return folder;
00913 }
00914
00915 void MHfolderItem::refresh(QValueList<RecMailP>&target)
00916 {
00917 if (folder->may_select())
00918 mbox->getWrapper()->listMessages( folder->getName(),target );
00919 }
00920
00921 RECBODYP MHfolderItem::fetchBody(const RecMailP&aMail)
00922 {
00923 return mbox->getWrapper()->fetchBody(aMail);
00924 }
00925
00926 bool MHfolderItem::deleteFolder()
00927 {
00928 int yesno = QMessageBox::warning(0,QObject::tr("Delete folder",contextName),
00929 QObject::tr("<center>Realy delete folder <br><b>%1</b><br>and all if it content?</center>",contextName).arg(folder->getDisplayName()),
00930 QObject::tr("Yes",contextName),
00931 QObject::tr("No",contextName),QString::null,1,1);
00932 odebug << "Auswahl: " << yesno << "" << oendl;
00933 if (yesno == 0)
00934 {
00935 if (mbox->getWrapper()->deleteMbox(folder))
00936 {
00937 QListView*v=listView();
00938 MHviewItem * box = mbox;
00939
00940
00941 mbox->refresh(true);
00942 if (v)
00943 {
00944 v->setSelected(box,true);
00945 }
00946 return true;
00947 }
00948 }
00949 return false;
00950 }
00951
00952 QMap<int,QString> MHfolderItem::folderMenu()
00953 {
00954 QMap<int,QString> e;
00955 e[FOLDER_MENU_NEW_SUBFOLDER]=QObject::tr("Create new subfolder",contextName);
00956 e[FOLDER_MENU_REFRESH_HEADER]=QObject::tr("Refresh header list",contextName);
00957 e[FOLDER_MENU_MOVE_MAILS]=QObject::tr("Move/Copie all mails",contextName);
00958 e[FOLDER_MENU_DELETE_ALL_MAILS]=QObject::tr("Delete all mails",contextName);
00959 e[FOLDER_MENU_DELETE_FOLDER]=QObject::tr("Delete folder",contextName);
00960 return e;
00961 }
00962
00963 void MHfolderItem::downloadMails()
00964 {
00965 AccountView*bl = mbox->accountView();
00966 if (!bl) return;
00967 bl->downloadMails(folder,mbox->getWrapper());
00968 }
00969
00970 void MHfolderItem::createFolder()
00971 {
00972 Newmdirdlg ndirdlg(0,0,true);
00973 if ( QPEApplication::execDialog( &ndirdlg ) )
00974 {
00975 QString ndir = ndirdlg.Newdir();
00976 if (mbox->getWrapper()->createMbox(ndir,folder))
00977 {
00978 QListView*v=listView();
00979 MHviewItem * box = mbox;
00980
00981
00982 mbox->refresh(true);
00983 if (v)
00984 {
00985 v->setSelected(box,true);
00986 }
00987 }
00988 }
00989 }
00990
00991 bool MHfolderItem::contextMenuSelected(int which)
00992 {
00993 AccountView*view = 0;
00994 switch(which)
00995 {
00996 case FOLDER_MENU_DELETE_ALL_MAILS:
00997 deleteAllMail(mbox->getWrapper(),folder);
00998 break;
00999 case FOLDER_MENU_DELETE_FOLDER:
01000 return deleteFolder();
01001 break;
01002 case FOLDER_MENU_MOVE_MAILS:
01003 downloadMails();
01004 break;
01005 case FOLDER_MENU_NEW_SUBFOLDER:
01006 createFolder();
01007 break;
01008 case FOLDER_MENU_REFRESH_HEADER:
01009 view = (AccountView*)listView();
01010 if (view) view->refreshCurrent();
01011 break;
01012 default:
01013 break;
01014 }
01015 return false;
01016 }
01017
01018 bool MHfolderItem::isDraftfolder()
01019 {
01020 if (folder && folder->getName()==AbstractMail::defaultLocalfolder()+"/"+AbstractMail::draftFolder()) return true;
01021 return false;
01022 }
01023
01028 const QString AccountViewItem::contextName="AccountViewItem";
01029
01030 AccountViewItem::AccountViewItem( AccountView *parent )
01031 : QListViewItem( parent )
01032 {
01033 init();
01034 m_Backlink = parent;
01035 }
01036
01037 AccountViewItem::AccountViewItem( QListViewItem *parent)
01038 : QListViewItem( parent),folder(0)
01039 {
01040 init();
01041 }
01042
01043 AccountViewItem::AccountViewItem( QListViewItem *parent , QListViewItem*after )
01044 :QListViewItem( parent,after ),folder(0)
01045 {
01046 init();
01047 }
01048
01049 AccountViewItem::AccountViewItem( const Opie::Core::OSmartPointer<Folder>&folderInit,QListViewItem *parent , QListViewItem*after )
01050 :QListViewItem( parent,after ),folder(folderInit)
01051 {
01052 init();
01053 }
01054
01055 void AccountViewItem::init()
01056 {
01057 m_Backlink = 0;
01058 }
01059
01060 AccountViewItem::~AccountViewItem()
01061 {
01062 folder = 0;
01063 }
01064
01065 AccountView*AccountViewItem::accountView()
01066 {
01067 return m_Backlink;
01068 }
01069
01070 void AccountViewItem::deleteAllMail(AbstractMail*wrapper,const FolderP&folder)
01071 {
01072 if (!wrapper) return;
01073 QString fname="";
01074 if (folder) fname = folder->getDisplayName();
01075 int yesno = QMessageBox::warning(0,QObject::tr("Delete all mails",contextName),
01076 QObject::tr("<center>Realy delete all mails in box <br>%1</center>",contextName).
01077 arg(fname),
01078 QObject::tr("Yes",contextName),
01079 QObject::tr("No",contextName),QString::null,1,1);
01080 odebug << "Auswahl: " << yesno << "" << oendl;
01081 if (yesno == 0)
01082 {
01083 if (wrapper->deleteAllMail(folder))
01084 {
01085 AccountView * view = (AccountView*)listView();
01086 if (view) view->refreshCurrent();
01087 }
01088 }
01089 }
01090
01091 void AccountViewItem::removeChilds()
01092 {
01093 QListViewItem *child = firstChild();
01094 while ( child )
01095 {
01096 QListViewItem *tmp = child;
01097 child = child->nextSibling();
01098 delete tmp;
01099 }
01100 }
01101
01102 bool AccountViewItem::matchName(const QString&name)const
01103 {
01104 if (!folder) return false;
01105 return folder->getDisplayName()==name;
01106 }
01107
01108
01109 AccountViewItem*AccountViewItem::findSubItem(const QString&path,AccountViewItem*start)
01110 {
01111 AccountViewItem*pitem,*sitem;
01112 if (!start) pitem = (AccountViewItem*)firstChild();
01113 else pitem = (AccountViewItem*)start->firstChild();
01114 while (pitem)
01115 {
01116 if (pitem->matchName(path))
01117 {
01118 break;
01119 }
01120 if (pitem->childCount()>0)
01121 {
01122 sitem = findSubItem(path,pitem);
01123 if (sitem)
01124 {
01125 pitem = sitem;
01126 break;
01127 }
01128 }
01129 pitem=(AccountViewItem*)pitem->nextSibling();
01130 }
01131 return pitem;
01132 }
01133
01134 bool AccountViewItem::isDraftfolder()
01135 {
01136 return false;
01137 }
01138
01139 QMap<int,QString> AccountViewItem::serverMenu()
01140 {
01141 return QMap<int,QString>();
01142 }
01143
01144 QMap<int,QString> AccountViewItem::folderMenu()
01145 {
01146 return QMap<int,QString>();
01147 }
01148
01149 QPopupMenu * AccountViewItem::getContextMenu()
01150 {
01151 QPopupMenu *m = new QPopupMenu(0);
01152 if (m)
01153 {
01154 QMap<int,QString> entries;
01155 entries = folderMenu();
01156 QMap<int,QString>::Iterator it;
01157 for (it=entries.begin();it!=entries.end();++it) {
01158 m->insertItem(it.data(),it.key());
01159 }
01160 entries = serverMenu();
01161 for (it=entries.begin();it!=entries.end();++it) {
01162 m->insertItem(it.data(),it.key());
01163 }
01164 }
01165 return m;
01166 }