summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/accountview.cpp40
-rw-r--r--noncore/net/mail/accountview.h6
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
@@ -106,4 +106,25 @@ AbstractMail *IMAPviewItem::getWrapper()
}
+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>&)
{
@@ -121,5 +142,4 @@ void IMAPviewItem::refresh(QList<RecMail>&)
QListViewItem*item = 0;
QListViewItem*titem = 0;
- QListViewItem*inboxitem = 0;
QString fname,del,search;
int pos;
@@ -129,5 +149,5 @@ void IMAPviewItem::refresh(QList<RecMail>&)
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");
@@ -135,5 +155,4 @@ void IMAPviewItem::refresh(QList<RecMail>&)
}
}
-
for ( it = folders->first(); it; it = folders->next() ) {
fname = it->getDisplayName();
@@ -141,16 +160,9 @@ void IMAPviewItem::refresh(QList<RecMail>&)
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 */
@@ -158,5 +170,5 @@ void IMAPviewItem::refresh(QList<RecMail>&)
item = titem;
} else {
- item = new IMAPfolderItem( it, this , (inboxitem?inboxitem:item) );
+ item = new IMAPfolderItem( it, this , item );
item->setSelectable(it->may_select());
}
@@ -176,5 +188,5 @@ IMAPfolderItem::~IMAPfolderItem()
IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPviewItem *parent , QListViewItem*after )
- : AccountViewItem( parent )
+ : AccountViewItem( parent , after )
{
folder = folderInit;
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
@@ -52,4 +52,6 @@ private:
};
+class IMAPfolderItem;
+
class IMAPviewItem : public AccountViewItem
{
@@ -61,4 +63,8 @@ public:
virtual RecBody fetchBody(const RecMail&);
AbstractMail *getWrapper();
+
+protected:
+ IMAPfolderItem*findSubItem(const QString&path,IMAPfolderItem*start=0);
+
private:
IMAPaccount *account;