-rw-r--r-- | noncore/net/mail/accountview.cpp | 40 | ||||
-rw-r--r-- | noncore/net/mail/accountview.h | 6 |
2 files changed, 32 insertions, 14 deletions
diff --git a/noncore/net/mail/accountview.cpp b/noncore/net/mail/accountview.cpp index bc13336..71a0d74 100644 --- a/noncore/net/mail/accountview.cpp +++ b/noncore/net/mail/accountview.cpp @@ -104,8 +104,29 @@ AbstractMail *IMAPviewItem::getWrapper() { return wrapper; } +IMAPfolderItem*IMAPviewItem::findSubItem(const QString&path,IMAPfolderItem*start) +{ + IMAPfolderItem*pitem,*sitem; + if (!start) pitem = (IMAPfolderItem*)firstChild(); + else pitem = (IMAPfolderItem*)start->firstChild(); + while (pitem) { + if (pitem->matchName(path)) { + break; + } + if (pitem->childCount()>0) { + sitem = findSubItem(path,pitem); + if (sitem) { + pitem = sitem; + break; + } + } + pitem=(IMAPfolderItem*)pitem->nextSibling(); + } + return pitem; +} + void IMAPviewItem::refresh(QList<RecMail>&) { if (childCount()>0) return; QList<Folder> *folders = wrapper->listFolders(); @@ -119,46 +140,37 @@ void IMAPviewItem::refresh(QList<RecMail>&) Folder *it; QListViewItem*item = 0; QListViewItem*titem = 0; - QListViewItem*inboxitem = 0; QString fname,del,search; int pos; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! folders->setAutoDelete(false); for ( it = folders->first(); it; it = folders->next() ) { if (it->getDisplayName().lower()=="inbox") { - inboxitem = new IMAPfolderItem( it, this , item ); + item = new IMAPfolderItem( it, this , item ); folders->remove(it); qDebug("inbox found"); break; } } - for ( it = folders->first(); it; it = folders->next() ) { fname = it->getDisplayName(); pos = fname.findRev(it->Separator()); if (pos != -1) { fname = fname.left(pos); - qDebug(fname); - } - IMAPfolderItem*pitem = (IMAPfolderItem*)firstChild(); - while (pitem) { - if (pitem->matchName(fname)) { - break; - } - pitem=(IMAPfolderItem*)pitem->nextSibling(); } + IMAPfolderItem*pitem = findSubItem(fname); if (pitem) { titem = item; - item = new IMAPfolderItem(it,pitem,item,this); + item = new IMAPfolderItem(it,pitem,pitem->firstChild(),this); item->setSelectable(it->may_select()); /* setup the short name */ item->setText(0,it->getDisplayName().right(it->getDisplayName().length()-pos-1)); item = titem; } else { - item = new IMAPfolderItem( it, this , (inboxitem?inboxitem:item) ); + item = new IMAPfolderItem( it, this , item ); item->setSelectable(it->may_select()); } } delete folders; @@ -174,9 +186,9 @@ IMAPfolderItem::~IMAPfolderItem() delete folder; } IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPviewItem *parent , QListViewItem*after ) - : AccountViewItem( parent ) + : AccountViewItem( parent , after ) { folder = folderInit; imap = parent; if (folder->getDisplayName().lower()!="inbox") { diff --git a/noncore/net/mail/accountview.h b/noncore/net/mail/accountview.h index a57935f..64abed9 100644 --- a/noncore/net/mail/accountview.h +++ b/noncore/net/mail/accountview.h @@ -50,8 +50,10 @@ private: Folder *folder; POP3viewItem *pop3; }; +class IMAPfolderItem; + class IMAPviewItem : public AccountViewItem { public: @@ -59,8 +61,12 @@ public: ~IMAPviewItem(); virtual void refresh(QList<RecMail>&); virtual RecBody fetchBody(const RecMail&); AbstractMail *getWrapper(); + +protected: + IMAPfolderItem*findSubItem(const QString&path,IMAPfolderItem*start=0); + private: IMAPaccount *account; AbstractMail *wrapper; }; |