Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

accountitem.cpp

Go to the documentation of this file.
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 /* OPIE */
00013 #include <opie2/odebug.h>
00014 #include <opie2/oresource.h>
00015 #include <qpe/qpeapplication.h>
00016 using namespace Opie::Core;
00017 
00018 /* QT */
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         /* must be 'cause pop3 lists are cached */
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     //FIXME
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    //FIXME
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         /* must be 'cause nntp lists are cached */
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             /* setup the short name */
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             /* be carefull - after that this object is destroyd so don't use
00660              * any member of it after that call!!*/
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 /* MH is a little bit different - the top folder can contains messages other than in IMAP and
00714    POP3 and MBOX */
00715 MHviewItem::MHviewItem( const QString&aPath, AccountView *parent )
00716         : AccountViewItem( parent )
00717 {
00718     m_Path = aPath;
00719     /* be carefull - the space within settext is wanted - thats why the string twice */
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         /* this folder itself */
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             /* be carefull - after that this object is destroyd so don't use
00940              * any member of it after that call!!*/
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             /* be carefull - after that this object is destroyd so don't use
00981              * any member of it after that call!!*/
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 }

Generated on Sat Nov 5 16:17:36 2005 for OPIE by  doxygen 1.4.2