-rw-r--r-- | noncore/net/mail/accountview.cpp | 69 | ||||
-rw-r--r-- | noncore/net/mail/accountview.h | 2 | ||||
-rw-r--r-- | noncore/net/mail/imapwrapper.cpp | 7 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/imapwrapper.cpp | 7 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/mailwrapper.cpp | 11 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/mailwrapper.h | 7 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/pop3wrapper.cpp | 2 | ||||
-rw-r--r-- | noncore/net/mail/mailwrapper.cpp | 11 | ||||
-rw-r--r-- | noncore/net/mail/mailwrapper.h | 7 | ||||
-rw-r--r-- | noncore/net/mail/pop3wrapper.cpp | 2 |
10 files changed, 100 insertions, 25 deletions
diff --git a/noncore/net/mail/accountview.cpp b/noncore/net/mail/accountview.cpp index 8e21d39..b6bf298 100644 --- a/noncore/net/mail/accountview.cpp +++ b/noncore/net/mail/accountview.cpp @@ -105,25 +105,62 @@ AbstractMail *IMAPviewItem::getWrapper() } void IMAPviewItem::refresh(QList<RecMail>&) { + if (childCount()>0) return; QList<Folder> *folders = wrapper->listFolders(); - QListViewItem *child = firstChild(); + QListViewItem *child = firstChild(); while ( child ) { QListViewItem *tmp = child; child = child->nextSibling(); delete tmp; } Folder *it; QListViewItem*item = 0; - for ( it = folders->first(); it; it = folders->next() ) { - item = new IMAPfolderItem( it, this , item ); - item->setSelectable(it->may_select()); - } + 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 ); + 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(); + } + if (pitem) { + titem = item; + item = new IMAPfolderItem(it,pitem,item,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->setSelectable(it->may_select()); + } + } delete folders; } RecBody IMAPviewItem::fetchBody(const RecMail&) @@ -136,9 +173,9 @@ IMAPfolderItem::~IMAPfolderItem() delete folder; } IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPviewItem *parent , QListViewItem*after ) - : AccountViewItem( parent,after ) + : AccountViewItem( parent ) { folder = folderInit; imap = parent; if (folder->getDisplayName().lower()!="inbox") { @@ -148,8 +185,26 @@ IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPviewItem *parent , QList } setText( 0, folder->getDisplayName() ); } +IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master ) + : AccountViewItem( parent,after ) +{ + folder = folderInit; + imap = master; + if (folder->getDisplayName().lower()!="inbox") { + setPixmap( 0, PIXMAP_IMAPFOLDER ); + } else { + setPixmap( 0, PIXMAP_INBOXFOLDER); + } + setText( 0, folder->getDisplayName() ); +} + +bool IMAPfolderItem::matchName(const QString&name)const +{ + return folder->getDisplayName()==name; +} + void IMAPfolderItem::refresh(QList<RecMail>&target) { if (folder->may_select()) imap->getWrapper()->listMessages( folder->getName(),target ); @@ -168,9 +223,9 @@ AccountView::AccountView( QWidget *parent, const char *name, WFlags flags ) : QListView( parent, name, flags ) { connect( this, SIGNAL( selectionChanged( QListViewItem * ) ), SLOT( refresh( QListViewItem * ) ) ); - setSorting(-1); + setSorting(0); } void AccountView::populate( QList<Account> list ) { diff --git a/noncore/net/mail/accountview.h b/noncore/net/mail/accountview.h index d035af4..a57935f 100644 --- a/noncore/net/mail/accountview.h +++ b/noncore/net/mail/accountview.h @@ -69,11 +69,13 @@ class IMAPfolderItem : public AccountViewItem { public: IMAPfolderItem( Folder *folder, IMAPviewItem *parent , QListViewItem*after ); + IMAPfolderItem( Folder *folder, IMAPfolderItem *parent , QListViewItem*after, IMAPviewItem *master ); ~IMAPfolderItem(); virtual void refresh(QList<RecMail>&); virtual RecBody fetchBody(const RecMail&); + bool matchName(const QString&name)const; private: Folder *folder; IMAPviewItem *imap; }; diff --git a/noncore/net/mail/imapwrapper.cpp b/noncore/net/mail/imapwrapper.cpp index d56d7f9..8a86c95 100644 --- a/noncore/net/mail/imapwrapper.cpp +++ b/noncore/net/mail/imapwrapper.cpp @@ -164,16 +164,18 @@ QList<Folder>* IMAPwrapper::listFolders() mask = "INBOX" ; result = clist_new(); mailimap_mailbox_list *list; err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); + QString del; if ( err == MAILIMAP_NO_ERROR ) { current = result->first; for ( int i = result->count; i > 0; i-- ) { list = (mailimap_mailbox_list *) current->data; // it is better use the deep copy mechanism of qt itself // instead of using strdup! temp = list->mb_name; - folders->append( new IMAPFolder(temp)); + del = list->mb_delimiter; + folders->append( new IMAPFolder(temp,del,true,account->getPrefix())); current = current->next; } } else { qDebug("error fetching folders: %s",m_imap->imap_response); @@ -205,9 +207,10 @@ QList<Folder>* IMAPwrapper::listFolders() if ( (bflags = list->mb_flag) ) { selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); } - folders->append(new IMAPFolder(temp,selectable,account->getPrefix())); + del = list->mb_delimiter; + folders->append(new IMAPFolder(temp,del,selectable,account->getPrefix())); } } else { qDebug("error fetching folders %s",m_imap->imap_response); } diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp index d56d7f9..8a86c95 100644 --- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp +++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp @@ -164,16 +164,18 @@ QList<Folder>* IMAPwrapper::listFolders() mask = "INBOX" ; result = clist_new(); mailimap_mailbox_list *list; err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); + QString del; if ( err == MAILIMAP_NO_ERROR ) { current = result->first; for ( int i = result->count; i > 0; i-- ) { list = (mailimap_mailbox_list *) current->data; // it is better use the deep copy mechanism of qt itself // instead of using strdup! temp = list->mb_name; - folders->append( new IMAPFolder(temp)); + del = list->mb_delimiter; + folders->append( new IMAPFolder(temp,del,true,account->getPrefix())); current = current->next; } } else { qDebug("error fetching folders: %s",m_imap->imap_response); @@ -205,9 +207,10 @@ QList<Folder>* IMAPwrapper::listFolders() if ( (bflags = list->mb_flag) ) { selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); } - folders->append(new IMAPFolder(temp,selectable,account->getPrefix())); + del = list->mb_delimiter; + folders->append(new IMAPFolder(temp,del,selectable,account->getPrefix())); } } else { qDebug("error fetching folders %s",m_imap->imap_response); } diff --git a/noncore/net/mail/libmailwrapper/mailwrapper.cpp b/noncore/net/mail/libmailwrapper/mailwrapper.cpp index 96602c2..858283f 100644 --- a/noncore/net/mail/libmailwrapper/mailwrapper.cpp +++ b/noncore/net/mail/libmailwrapper/mailwrapper.cpp @@ -16,9 +16,9 @@ Attachment::Attachment( DocLnk lnk ) doc = lnk; size = QFileInfo( doc.file() ).size(); } -Folder::Folder(const QString&tmp_name ) +Folder::Folder(const QString&tmp_name, const QString&sep ) { name = tmp_name; nameDisplay = name; @@ -34,13 +34,18 @@ Folder::Folder(const QString&tmp_name ) nameDisplay = nameDisplay.replace( pos, end - pos + 1, "oe" ); } } qDebug( "folder " + name + " - displayed as " + nameDisplay ); + separator = sep; } +const QString& Folder::Separator()const +{ + return separator; +} -IMAPFolder::IMAPFolder(const QString&name,bool select,const QString&prefix ) - : Folder( name ),m_MaySelect(select) +IMAPFolder::IMAPFolder(const QString&name,const QString&sep, bool select,const QString&prefix ) + : Folder( name,sep ),m_MaySelect(select) { if (prefix.length()>0) { if (nameDisplay.startsWith(prefix) && nameDisplay.length()>prefix.length()) { nameDisplay=nameDisplay.right(nameDisplay.length()-prefix.length()); diff --git a/noncore/net/mail/libmailwrapper/mailwrapper.h b/noncore/net/mail/libmailwrapper/mailwrapper.h index 6994dd8..d78f8e9 100644 --- a/noncore/net/mail/libmailwrapper/mailwrapper.h +++ b/noncore/net/mail/libmailwrapper/mailwrapper.h @@ -70,22 +70,23 @@ class Folder : public QObject { Q_OBJECT public: - Folder( const QString&init_name ); + Folder( const QString&init_name,const QString&sep ); const QString&getDisplayName()const { return nameDisplay; } const QString&getName()const { return name; } virtual bool may_select()const{return true;}; + const QString&Separator()const; protected: - QString nameDisplay, name; + QString nameDisplay, name, separator; }; class IMAPFolder : public Folder { public: - IMAPFolder(const QString&name,bool select=true,const QString&prefix="" ); + IMAPFolder(const QString&name, const QString&sep, bool select=true,const QString&prefix="" ); virtual bool may_select()const{return m_MaySelect;} private: bool m_MaySelect; }; diff --git a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp index 075d8c7..4508a95 100644 --- a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp +++ b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp @@ -322,9 +322,9 @@ QList<Folder>* POP3wrapper::listFolders() but not before version 0.1 ;) */ QList<Folder> * folders = new QList<Folder>(); folders->setAutoDelete( false ); - Folder*inb=new Folder("INBOX"); + Folder*inb=new Folder("INBOX","/"); folders->append(inb); return folders; } diff --git a/noncore/net/mail/mailwrapper.cpp b/noncore/net/mail/mailwrapper.cpp index 96602c2..858283f 100644 --- a/noncore/net/mail/mailwrapper.cpp +++ b/noncore/net/mail/mailwrapper.cpp @@ -16,9 +16,9 @@ Attachment::Attachment( DocLnk lnk ) doc = lnk; size = QFileInfo( doc.file() ).size(); } -Folder::Folder(const QString&tmp_name ) +Folder::Folder(const QString&tmp_name, const QString&sep ) { name = tmp_name; nameDisplay = name; @@ -34,13 +34,18 @@ Folder::Folder(const QString&tmp_name ) nameDisplay = nameDisplay.replace( pos, end - pos + 1, "oe" ); } } qDebug( "folder " + name + " - displayed as " + nameDisplay ); + separator = sep; } +const QString& Folder::Separator()const +{ + return separator; +} -IMAPFolder::IMAPFolder(const QString&name,bool select,const QString&prefix ) - : Folder( name ),m_MaySelect(select) +IMAPFolder::IMAPFolder(const QString&name,const QString&sep, bool select,const QString&prefix ) + : Folder( name,sep ),m_MaySelect(select) { if (prefix.length()>0) { if (nameDisplay.startsWith(prefix) && nameDisplay.length()>prefix.length()) { nameDisplay=nameDisplay.right(nameDisplay.length()-prefix.length()); diff --git a/noncore/net/mail/mailwrapper.h b/noncore/net/mail/mailwrapper.h index 6994dd8..d78f8e9 100644 --- a/noncore/net/mail/mailwrapper.h +++ b/noncore/net/mail/mailwrapper.h @@ -70,22 +70,23 @@ class Folder : public QObject { Q_OBJECT public: - Folder( const QString&init_name ); + Folder( const QString&init_name,const QString&sep ); const QString&getDisplayName()const { return nameDisplay; } const QString&getName()const { return name; } virtual bool may_select()const{return true;}; + const QString&Separator()const; protected: - QString nameDisplay, name; + QString nameDisplay, name, separator; }; class IMAPFolder : public Folder { public: - IMAPFolder(const QString&name,bool select=true,const QString&prefix="" ); + IMAPFolder(const QString&name, const QString&sep, bool select=true,const QString&prefix="" ); virtual bool may_select()const{return m_MaySelect;} private: bool m_MaySelect; }; diff --git a/noncore/net/mail/pop3wrapper.cpp b/noncore/net/mail/pop3wrapper.cpp index 075d8c7..4508a95 100644 --- a/noncore/net/mail/pop3wrapper.cpp +++ b/noncore/net/mail/pop3wrapper.cpp @@ -322,9 +322,9 @@ QList<Folder>* POP3wrapper::listFolders() but not before version 0.1 ;) */ QList<Folder> * folders = new QList<Folder>(); folders->setAutoDelete( false ); - Folder*inb=new Folder("INBOX"); + Folder*inb=new Folder("INBOX","/"); folders->append(inb); return folders; } |