summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/accountview.cpp64
-rw-r--r--noncore/net/mail/accountview.h18
-rw-r--r--noncore/net/mail/libmailwrapper/abstractmail.cpp3
-rw-r--r--noncore/net/mail/libmailwrapper/genericwrapper.cpp8
-rw-r--r--noncore/net/mail/libmailwrapper/genericwrapper.h4
-rw-r--r--noncore/net/mail/libmailwrapper/libmailwrapper.pro6
-rw-r--r--noncore/net/mail/libmailwrapper/mailwrapper.cpp18
-rw-r--r--noncore/net/mail/libmailwrapper/mailwrapper.h11
-rw-r--r--noncore/net/mail/libmailwrapper/mboxwrapper.h1
-rw-r--r--noncore/net/mail/libmailwrapper/mhwrapper.cpp330
-rw-r--r--noncore/net/mail/libmailwrapper/mhwrapper.h50
-rw-r--r--noncore/net/mail/libmailwrapper/smtpwrapper.cpp3
12 files changed, 468 insertions, 48 deletions
diff --git a/noncore/net/mail/accountview.cpp b/noncore/net/mail/accountview.cpp
index 9f4f358..62cbf62 100644
--- a/noncore/net/mail/accountview.cpp
+++ b/noncore/net/mail/accountview.cpp
@@ -574,13 +574,13 @@ AccountView::AccountView( QWidget *parent, const char *name, WFlags flags )
574 setSorting(0); 574 setSorting(0);
575} 575}
576 576
577AccountView::~AccountView() 577AccountView::~AccountView()
578{ 578{
579 imapAccounts.clear(); 579 imapAccounts.clear();
580 mboxAccounts.clear(); 580 mhAccounts.clear();
581} 581}
582 582
583void AccountView::slotContextMenu(int id) 583void AccountView::slotContextMenu(int id)
584{ 584{
585 AccountViewItem *view = static_cast<AccountViewItem *>(currentItem()); 585 AccountViewItem *view = static_cast<AccountViewItem *>(currentItem());
586 if (!view) return; 586 if (!view) return;
@@ -602,15 +602,15 @@ void AccountView::slotHold(int button, QListViewItem * item,const QPoint&,int)
602 602
603void AccountView::populate( QList<Account> list ) 603void AccountView::populate( QList<Account> list )
604{ 604{
605 clear(); 605 clear();
606 606
607 imapAccounts.clear(); 607 imapAccounts.clear();
608 mboxAccounts.clear(); 608 mhAccounts.clear();
609 609
610 mboxAccounts.append(new MBOXviewItem(AbstractMail::defaultLocalfolder(),this)); 610 mhAccounts.append(new MHviewItem(AbstractMail::defaultLocalfolder(),this));
611 611
612 Account *it; 612 Account *it;
613 for ( it = list.first(); it; it = list.next() ) { 613 for ( it = list.first(); it; it = list.next() ) {
614 if ( it->getType().compare( "IMAP" ) == 0 ) { 614 if ( it->getType().compare( "IMAP" ) == 0 ) {
615 IMAPaccount *imap = static_cast<IMAPaccount *>(it); 615 IMAPaccount *imap = static_cast<IMAPaccount *>(it);
616 qDebug( "added IMAP " + imap->getAccountName() ); 616 qDebug( "added IMAP " + imap->getAccountName() );
@@ -663,16 +663,16 @@ RecBody AccountView::fetchBody(const RecMail&aMail)
663 663
664void AccountView::setupFolderselect(Selectstore*sels) 664void AccountView::setupFolderselect(Selectstore*sels)
665{ 665{
666 sels->showMaximized(); 666 sels->showMaximized();
667 QStringList sFolders; 667 QStringList sFolders;
668 unsigned int i = 0; 668 unsigned int i = 0;
669 for (i=0; i < mboxAccounts.count();++i) { 669 for (i=0; i < mhAccounts.count();++i) {
670 mboxAccounts[i]->refresh(false); 670 mhAccounts[i]->refresh(false);
671 sFolders = mboxAccounts[i]->subFolders(); 671 sFolders = mhAccounts[i]->subFolders();
672 sels->addAccounts(mboxAccounts[i]->getWrapper(),sFolders); 672 sels->addAccounts(mhAccounts[i]->getWrapper(),sFolders);
673 } 673 }
674 for (i=0; i < imapAccounts.count();++i) { 674 for (i=0; i < imapAccounts.count();++i) {
675 if (imapAccounts[i]->offline()) 675 if (imapAccounts[i]->offline())
676 continue; 676 continue;
677 imapAccounts[i]->refreshFolders(false); 677 imapAccounts[i]->refreshFolders(false);
678 sels->addAccounts(imapAccounts[i]->getWrapper(),imapAccounts[i]->subFolders()); 678 sels->addAccounts(imapAccounts[i]->getWrapper(),imapAccounts[i]->subFolders());
@@ -701,104 +701,104 @@ void AccountView::downloadMails(Folder*fromFolder,AbstractMail*fromWrapper)
701 qDebug("Fromfolder: %s",fromFolder->getName().latin1()); 701 qDebug("Fromfolder: %s",fromFolder->getName().latin1());
702 fromWrapper->mvcpAllMails(fromFolder,targetFolder,targetMail,sels.moveMails()); 702 fromWrapper->mvcpAllMails(fromFolder,targetFolder,targetMail,sels.moveMails());
703 refreshCurrent(); 703 refreshCurrent();
704} 704}
705 705
706/** 706/**
707 * MBOX Account stuff 707 * MH Account stuff
708 */ 708 */
709 709
710MBOXviewItem::MBOXviewItem( const QString&aPath, AccountView *parent ) 710MHviewItem::MHviewItem( const QString&aPath, AccountView *parent )
711 : AccountViewItem( parent ) 711 : AccountViewItem( parent )
712{ 712{
713 m_Path = aPath; 713 m_Path = aPath;
714 /* be carefull - the space within settext is wanted - thats why the string twice */ 714 /* be carefull - the space within settext is wanted - thats why the string twice */
715 wrapper = AbstractMail::getWrapper( m_Path,"Local Folders"); 715 wrapper = AbstractMail::getWrapper( m_Path,"Local Folders");
716 setPixmap( 0, PIXMAP_LOCALFOLDER ); 716 setPixmap( 0, PIXMAP_LOCALFOLDER );
717 setText( 0, " Local Folders" ); 717 setText( 0, " Local Folders" );
718 setOpen( true ); 718 setOpen( true );
719} 719}
720 720
721MBOXviewItem::~MBOXviewItem() 721MHviewItem::~MHviewItem()
722{ 722{
723 delete wrapper; 723 delete wrapper;
724} 724}
725 725
726AbstractMail *MBOXviewItem::getWrapper() 726AbstractMail *MHviewItem::getWrapper()
727{ 727{
728 return wrapper; 728 return wrapper;
729} 729}
730 730
731void MBOXviewItem::refresh( QList<RecMail> & ) 731void MHviewItem::refresh( QList<RecMail> & )
732{ 732{
733 refresh(false); 733 refresh(false);
734} 734}
735 735
736void MBOXviewItem::refresh(bool force) 736void MHviewItem::refresh(bool force)
737{ 737{
738 if (childCount()>0 && force==false) return; 738 if (childCount()>0 && force==false) return;
739 QList<Folder> *folders = wrapper->listFolders(); 739 QList<Folder> *folders = wrapper->listFolders();
740 QListViewItem *child = firstChild(); 740 QListViewItem *child = firstChild();
741 while ( child ) { 741 while ( child ) {
742 QListViewItem *tmp = child; 742 QListViewItem *tmp = child;
743 child = child->nextSibling(); 743 child = child->nextSibling();
744 delete tmp; 744 delete tmp;
745 } 745 }
746 Folder *it; 746 Folder *it;
747 QListViewItem*item = 0; 747 QListViewItem*item = 0;
748 for ( it = folders->first(); it; it = folders->next() ) { 748 for ( it = folders->first(); it; it = folders->next() ) {
749 item = new MBOXfolderItem( it, this , item ); 749 item = new MHfolderItem( it, this , item );
750 item->setSelectable(it->may_select()); 750 item->setSelectable(it->may_select());
751 } 751 }
752 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 752 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
753 folders->setAutoDelete(false); 753 folders->setAutoDelete(false);
754 delete folders; 754 delete folders;
755} 755}
756 756
757RecBody MBOXviewItem::fetchBody( const RecMail &mail ) 757RecBody MHviewItem::fetchBody( const RecMail &mail )
758{ 758{
759 qDebug( "MBOX fetchBody" ); 759 qDebug( "MH fetchBody" );
760 return wrapper->fetchBody( mail ); 760 return wrapper->fetchBody( mail );
761} 761}
762 762
763QPopupMenu * MBOXviewItem::getContextMenu() 763QPopupMenu * MHviewItem::getContextMenu()
764{ 764{
765 QPopupMenu *m = new QPopupMenu(0); 765 QPopupMenu *m = new QPopupMenu(0);
766 if (m) { 766 if (m) {
767 m->insertItem(QObject::tr("Refresh folder list",contextName),0); 767 m->insertItem(QObject::tr("Refresh folder list",contextName),0);
768 m->insertItem(QObject::tr("Create new folder",contextName),1); 768 m->insertItem(QObject::tr("Create new folder",contextName),1);
769 } 769 }
770 return m; 770 return m;
771} 771}
772 772
773void MBOXviewItem::createFolder() 773void MHviewItem::createFolder()
774{ 774{
775 Newmdirdlg ndirdlg(0,0,true); 775 Newmdirdlg ndirdlg(0,0,true);
776 ndirdlg.showMaximized(); 776 ndirdlg.showMaximized();
777 if (ndirdlg.exec()) { 777 if (ndirdlg.exec()) {
778 QString ndir = ndirdlg.Newdir(); 778 QString ndir = ndirdlg.Newdir();
779 if (wrapper->createMbox(ndir)) { 779 if (wrapper->createMbox(ndir)) {
780 refresh(true); 780 refresh(true);
781 } 781 }
782 } 782 }
783} 783}
784 784
785QStringList MBOXviewItem::subFolders() 785QStringList MHviewItem::subFolders()
786{ 786{
787 QStringList result; 787 QStringList result;
788 QListViewItem *child = firstChild(); 788 QListViewItem *child = firstChild();
789 while ( child ) { 789 while ( child ) {
790 MBOXfolderItem *tmp = (MBOXfolderItem*)child; 790 MHfolderItem *tmp = (MHfolderItem*)child;
791 child = child->nextSibling(); 791 child = child->nextSibling();
792 result.append(tmp->getFolder()->getName()); 792 result.append(tmp->getFolder()->getDisplayName());
793 } 793 }
794 qDebug("Size of result: %i",result.count()); 794 qDebug("Size of result: %i",result.count());
795 return result; 795 return result;
796} 796}
797 797
798void MBOXviewItem::contextMenuSelected(int which) 798void MHviewItem::contextMenuSelected(int which)
799{ 799{
800 switch (which) { 800 switch (which) {
801 case 0: 801 case 0:
802 refresh(true); 802 refresh(true);
803 break; 803 break;
804 case 1: 804 case 1:
@@ -806,18 +806,18 @@ void MBOXviewItem::contextMenuSelected(int which)
806 break; 806 break;
807 default: 807 default:
808 break; 808 break;
809 } 809 }
810} 810}
811 811
812MBOXfolderItem::~MBOXfolderItem() 812MHfolderItem::~MHfolderItem()
813{ 813{
814 delete folder; 814 delete folder;
815} 815}
816 816
817MBOXfolderItem::MBOXfolderItem( Folder *folderInit, MBOXviewItem *parent , QListViewItem*after ) 817MHfolderItem::MHfolderItem( Folder *folderInit, MHviewItem *parent , QListViewItem*after )
818 : AccountViewItem( parent,after ) 818 : AccountViewItem( parent,after )
819{ 819{
820 folder = folderInit; 820 folder = folderInit;
821 mbox = parent; 821 mbox = parent;
822 if (folder->getDisplayName().lower() == "outgoing") { 822 if (folder->getDisplayName().lower() == "outgoing") {
823 setPixmap( 0, PIXMAP_OUTBOXFOLDER ); 823 setPixmap( 0, PIXMAP_OUTBOXFOLDER );
@@ -826,68 +826,68 @@ MBOXfolderItem::MBOXfolderItem( Folder *folderInit, MBOXviewItem *parent , QList
826 } else { 826 } else {
827 setPixmap( 0, PIXMAP_MBOXFOLDER ); 827 setPixmap( 0, PIXMAP_MBOXFOLDER );
828 } 828 }
829 setText( 0, folder->getDisplayName() ); 829 setText( 0, folder->getDisplayName() );
830} 830}
831 831
832Folder*MBOXfolderItem::getFolder() 832Folder*MHfolderItem::getFolder()
833{ 833{
834 return folder; 834 return folder;
835} 835}
836 836
837void MBOXfolderItem::refresh(QList<RecMail>&target) 837void MHfolderItem::refresh(QList<RecMail>&target)
838{ 838{
839 if (folder->may_select()) 839 if (folder->may_select())
840 mbox->getWrapper()->listMessages( folder->getName(),target ); 840 mbox->getWrapper()->listMessages( folder->getName(),target );
841} 841}
842 842
843RecBody MBOXfolderItem::fetchBody(const RecMail&aMail) 843RecBody MHfolderItem::fetchBody(const RecMail&aMail)
844{ 844{
845 return mbox->getWrapper()->fetchBody(aMail); 845 return mbox->getWrapper()->fetchBody(aMail);
846} 846}
847 847
848void MBOXfolderItem::deleteFolder() 848void MHfolderItem::deleteFolder()
849{ 849{
850 int yesno = QMessageBox::warning(0,QObject::tr("Delete folder",contextName), 850 int yesno = QMessageBox::warning(0,QObject::tr("Delete folder",contextName),
851 QObject::tr("<center>Realy delete folder <br><b>%1</b><br>and all if it content?</center>",contextName).arg(folder->getDisplayName()), 851 QObject::tr("<center>Realy delete folder <br><b>%1</b><br>and all if it content?</center>",contextName).arg(folder->getDisplayName()),
852 QObject::tr("Yes",contextName), 852 QObject::tr("Yes",contextName),
853 QObject::tr("No",contextName),QString::null,1,1); 853 QObject::tr("No",contextName),QString::null,1,1);
854 qDebug("Auswahl: %i",yesno); 854 qDebug("Auswahl: %i",yesno);
855 if (yesno == 0) { 855 if (yesno == 0) {
856 if (mbox->getWrapper()->deleteMbox(folder)) { 856 if (mbox->getWrapper()->deleteMbox(folder)) {
857 QListView*v=listView(); 857 QListView*v=listView();
858 MBOXviewItem * box = mbox; 858 MHviewItem * box = mbox;
859 /* be carefull - after that this object is destroyd so don't use 859 /* be carefull - after that this object is destroyd so don't use
860 * any member of it after that call!!*/ 860 * any member of it after that call!!*/
861 mbox->refresh(true); 861 mbox->refresh(true);
862 if (v) { 862 if (v) {
863 v->setSelected(box,true); 863 v->setSelected(box,true);
864 } 864 }
865 } 865 }
866 } 866 }
867} 867}
868 868
869QPopupMenu * MBOXfolderItem::getContextMenu() 869QPopupMenu * MHfolderItem::getContextMenu()
870{ 870{
871 QPopupMenu *m = new QPopupMenu(0); 871 QPopupMenu *m = new QPopupMenu(0);
872 if (m) { 872 if (m) {
873 m->insertItem(QObject::tr("Delete all mails",contextName),0); 873 m->insertItem(QObject::tr("Delete all mails",contextName),0);
874 m->insertItem(QObject::tr("Delete folder",contextName),1); 874 m->insertItem(QObject::tr("Delete folder",contextName),1);
875 m->insertItem(QObject::tr("Move/Copie all mails",contextName),2); 875 m->insertItem(QObject::tr("Move/Copie all mails",contextName),2);
876 } 876 }
877 return m; 877 return m;
878} 878}
879 879
880void MBOXfolderItem::downloadMails() 880void MHfolderItem::downloadMails()
881{ 881{
882 AccountView*bl = mbox->accountView(); 882 AccountView*bl = mbox->accountView();
883 if (!bl) return; 883 if (!bl) return;
884 bl->downloadMails(folder,mbox->getWrapper()); 884 bl->downloadMails(folder,mbox->getWrapper());
885} 885}
886 886
887void MBOXfolderItem::contextMenuSelected(int which) 887void MHfolderItem::contextMenuSelected(int which)
888{ 888{
889 switch(which) { 889 switch(which) {
890 case 0: 890 case 0:
891 deleteAllMail(mbox->getWrapper(),folder); 891 deleteAllMail(mbox->getWrapper(),folder);
892 break; 892 break;
893 case 1: 893 case 1:
diff --git a/noncore/net/mail/accountview.h b/noncore/net/mail/accountview.h
index d9b5558..f5a2973 100644
--- a/noncore/net/mail/accountview.h
+++ b/noncore/net/mail/accountview.h
@@ -115,19 +115,19 @@ protected:
115 virtual void deleteFolder(); 115 virtual void deleteFolder();
116 virtual void downloadMails(); 116 virtual void downloadMails();
117 Folder *folder; 117 Folder *folder;
118 IMAPviewItem *imap; 118 IMAPviewItem *imap;
119}; 119};
120 120
121class MBOXviewItem : public AccountViewItem 121class MHviewItem : public AccountViewItem
122{ 122{
123 friend class MBOXfolderItem; 123 friend class MHfolderItem;
124 124
125public: 125public:
126 MBOXviewItem( const QString&aMboxPath, AccountView *parent ); 126 MHviewItem( const QString&aMboxPath, AccountView *parent );
127 virtual ~MBOXviewItem(); 127 virtual ~MHviewItem();
128 virtual void refresh( QList<RecMail> &target ); 128 virtual void refresh( QList<RecMail> &target );
129 virtual RecBody fetchBody( const RecMail &mail ); 129 virtual RecBody fetchBody( const RecMail &mail );
130 AbstractMail *getWrapper(); 130 AbstractMail *getWrapper();
131 virtual QPopupMenu * getContextMenu(); 131 virtual QPopupMenu * getContextMenu();
132 virtual void contextMenuSelected(int); 132 virtual void contextMenuSelected(int);
133 QStringList subFolders(); 133 QStringList subFolders();
@@ -137,29 +137,29 @@ protected:
137 virtual void createFolder(); 137 virtual void createFolder();
138 QString m_Path; 138 QString m_Path;
139 AbstractMail *wrapper; 139 AbstractMail *wrapper;
140 140
141}; 141};
142 142
143class MBOXfolderItem : public AccountViewItem 143class MHfolderItem : public AccountViewItem
144{ 144{
145 145
146public: 146public:
147 MBOXfolderItem( Folder *folder, MBOXviewItem *parent , QListViewItem*after ); 147 MHfolderItem( Folder *folder, MHviewItem *parent , QListViewItem*after );
148 virtual ~MBOXfolderItem(); 148 virtual ~MHfolderItem();
149 virtual void refresh(QList<RecMail>&); 149 virtual void refresh(QList<RecMail>&);
150 virtual RecBody fetchBody(const RecMail&); 150 virtual RecBody fetchBody(const RecMail&);
151 virtual QPopupMenu * getContextMenu(); 151 virtual QPopupMenu * getContextMenu();
152 virtual void contextMenuSelected(int); 152 virtual void contextMenuSelected(int);
153 virtual Folder*getFolder(); 153 virtual Folder*getFolder();
154 154
155protected: 155protected:
156 void downloadMails(); 156 void downloadMails();
157 virtual void deleteFolder(); 157 virtual void deleteFolder();
158 Folder *folder; 158 Folder *folder;
159 MBOXviewItem *mbox; 159 MHviewItem *mbox;
160}; 160};
161 161
162class AccountView : public QListView 162class AccountView : public QListView
163{ 163{
164 Q_OBJECT 164 Q_OBJECT
165 165
@@ -181,10 +181,10 @@ public slots:
181signals: 181signals:
182 void refreshMailview(QList<RecMail>*); 182 void refreshMailview(QList<RecMail>*);
183 183
184protected: 184protected:
185 QListViewItem* m_currentItem; 185 QListViewItem* m_currentItem;
186 QValueList<IMAPviewItem*> imapAccounts; 186 QValueList<IMAPviewItem*> imapAccounts;
187 QValueList<MBOXviewItem*> mboxAccounts; 187 QValueList<MHviewItem*> mhAccounts;
188}; 188};
189 189
190#endif 190#endif
diff --git a/noncore/net/mail/libmailwrapper/abstractmail.cpp b/noncore/net/mail/libmailwrapper/abstractmail.cpp
index 0280803..592cd5e 100644
--- a/noncore/net/mail/libmailwrapper/abstractmail.cpp
+++ b/noncore/net/mail/libmailwrapper/abstractmail.cpp
@@ -1,9 +1,10 @@
1#include "abstractmail.h" 1#include "abstractmail.h"
2#include "imapwrapper.h" 2#include "imapwrapper.h"
3#include "pop3wrapper.h" 3#include "pop3wrapper.h"
4#include "mhwrapper.h"
4#include "mboxwrapper.h" 5#include "mboxwrapper.h"
5#include "mailtypes.h" 6#include "mailtypes.h"
6 7
7#include <qstring.h> 8#include <qstring.h>
8#include <qfile.h> 9#include <qfile.h>
9#include <qtextstream.h> 10#include <qtextstream.h>
@@ -20,13 +21,13 @@ AbstractMail* AbstractMail::getWrapper(POP3account *a)
20{ 21{
21 return new POP3wrapper(a); 22 return new POP3wrapper(a);
22} 23}
23 24
24AbstractMail* AbstractMail::getWrapper(const QString&a,const QString&name) 25AbstractMail* AbstractMail::getWrapper(const QString&a,const QString&name)
25{ 26{
26 return new MBOXwrapper(a,name); 27 return new MHwrapper(a,name);
27} 28}
28 29
29encodedString* AbstractMail::decode_String(const encodedString*text,const QString&enc) 30encodedString* AbstractMail::decode_String(const encodedString*text,const QString&enc)
30{ 31{
31 qDebug("Decode string start"); 32 qDebug("Decode string start");
32 char*result_text; 33 char*result_text;
diff --git a/noncore/net/mail/libmailwrapper/genericwrapper.cpp b/noncore/net/mail/libmailwrapper/genericwrapper.cpp
index 2d1596d..b1e4459 100644
--- a/noncore/net/mail/libmailwrapper/genericwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/genericwrapper.cpp
@@ -3,16 +3,24 @@
3#include "mailtypes.h" 3#include "mailtypes.h"
4 4
5Genericwrapper::Genericwrapper() 5Genericwrapper::Genericwrapper()
6 : AbstractMail() 6 : AbstractMail()
7{ 7{
8 bodyCache.clear(); 8 bodyCache.clear();
9 m_storage = 0;
10 m_folder = 0;
9} 11}
10 12
11Genericwrapper::~Genericwrapper() 13Genericwrapper::~Genericwrapper()
12{ 14{
15 if (m_folder) {
16 mailfolder_free(m_folder);
17 }
18 if (m_storage) {
19 mailstorage_free(m_storage);
20 }
13 cleanMimeCache(); 21 cleanMimeCache();
14} 22}
15 23
16void Genericwrapper::fillSingleBody(RecPart&target,mailmessage*,mailmime*mime) 24void Genericwrapper::fillSingleBody(RecPart&target,mailmessage*,mailmime*mime)
17{ 25{
18 if (!mime) { 26 if (!mime) {
diff --git a/noncore/net/mail/libmailwrapper/genericwrapper.h b/noncore/net/mail/libmailwrapper/genericwrapper.h
index 1d65c0a..e471dc8 100644
--- a/noncore/net/mail/libmailwrapper/genericwrapper.h
+++ b/noncore/net/mail/libmailwrapper/genericwrapper.h
@@ -16,12 +16,14 @@ struct mailmime_mechanism;
16struct mailimf_mailbox_list; 16struct mailimf_mailbox_list;
17struct mailimf_mailbox; 17struct mailimf_mailbox;
18struct mailimf_date_time; 18struct mailimf_date_time;
19struct mailimf_group; 19struct mailimf_group;
20struct mailimf_address_list; 20struct mailimf_address_list;
21struct mailsession; 21struct mailsession;
22struct mailstorage;
23struct mailfolder;
22 24
23/* this class hold just the funs shared between 25/* this class hold just the funs shared between
24 * mbox and pop3 (later mh, too) mail access. 26 * mbox and pop3 (later mh, too) mail access.
25 * it is not desigend to make a instance of it! 27 * it is not desigend to make a instance of it!
26 */ 28 */
27class Genericwrapper : public AbstractMail 29class Genericwrapper : public AbstractMail
@@ -54,9 +56,11 @@ protected:
54 static QString getencoding(mailmime_mechanism*aEnc); 56 static QString getencoding(mailmime_mechanism*aEnc);
55 virtual void parseList(QList<RecMail> &target,mailsession*session,const QString&mailbox); 57 virtual void parseList(QList<RecMail> &target,mailsession*session,const QString&mailbox);
56 58
57 QString msgTempName; 59 QString msgTempName;
58 unsigned int last_msg_id; 60 unsigned int last_msg_id;
59 QMap<QString,encodedString*> bodyCache; 61 QMap<QString,encodedString*> bodyCache;
62 mailstorage * m_storage;
63 mailfolder*m_folder;
60}; 64};
61 65
62#endif 66#endif
diff --git a/noncore/net/mail/libmailwrapper/libmailwrapper.pro b/noncore/net/mail/libmailwrapper/libmailwrapper.pro
index 18583bb..71f6cca 100644
--- a/noncore/net/mail/libmailwrapper/libmailwrapper.pro
+++ b/noncore/net/mail/libmailwrapper/libmailwrapper.pro
@@ -9,26 +9,28 @@ HEADERS = mailwrapper.h \
9 smtpwrapper.h \ 9 smtpwrapper.h \
10 genericwrapper.h \ 10 genericwrapper.h \
11 mboxwrapper.h \ 11 mboxwrapper.h \
12 settings.h \ 12 settings.h \
13 logindialog.h \ 13 logindialog.h \
14 sendmailprogress.h \ 14 sendmailprogress.h \
15 statusmail.h 15 statusmail.h \
16 mhwrapper.h
16 17
17SOURCES = imapwrapper.cpp \ 18SOURCES = imapwrapper.cpp \
18 mailwrapper.cpp \ 19 mailwrapper.cpp \
19 mailtypes.cpp \ 20 mailtypes.cpp \
20 pop3wrapper.cpp \ 21 pop3wrapper.cpp \
21 abstractmail.cpp \ 22 abstractmail.cpp \
22 smtpwrapper.cpp \ 23 smtpwrapper.cpp \
23 genericwrapper.cpp \ 24 genericwrapper.cpp \
24 mboxwrapper.cpp \ 25 mboxwrapper.cpp \
25 settings.cpp \ 26 settings.cpp \
26 logindialog.cpp \ 27 logindialog.cpp \
27 sendmailprogress.cpp \ 28 sendmailprogress.cpp \
28 statusmail.cpp 29 statusmail.cpp \
30 mhwrapper.cpp
29 31
30 INTERFACES = logindialogui.ui \ 32 INTERFACES = logindialogui.ui \
31 sendmailprogressui.ui 33 sendmailprogressui.ui
32 34
33 35
34INCLUDEPATH += $(OPIEDIR)/include 36INCLUDEPATH += $(OPIEDIR)/include
diff --git a/noncore/net/mail/libmailwrapper/mailwrapper.cpp b/noncore/net/mail/libmailwrapper/mailwrapper.cpp
index 75b9343..ebdbf4b 100644
--- a/noncore/net/mail/libmailwrapper/mailwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/mailwrapper.cpp
@@ -29,25 +29,27 @@ Attachment::Attachment( DocLnk lnk )
29 29
30Folder::Folder(const QString&tmp_name, const QString&sep ) 30Folder::Folder(const QString&tmp_name, const QString&sep )
31{ 31{
32 name = tmp_name; 32 name = tmp_name;
33 nameDisplay = name; 33 nameDisplay = name;
34 separator = sep; 34 separator = sep;
35 prefix = "";
35} 36}
36 37
37const QString& Folder::Separator()const 38const QString& Folder::Separator()const
38{ 39{
39 return separator; 40 return separator;
40} 41}
41 42
42IMAPFolder::IMAPFolder(const QString&name,const QString&sep, bool select,bool no_inf, const QString&prefix ) 43IMAPFolder::IMAPFolder(const QString&name,const QString&sep, bool select,bool no_inf, const QString&aprefix )
43 : Folder( name,sep ),m_MaySelect(select),m_NoInferior(no_inf) 44 : Folder( name,sep ),m_MaySelect(select),m_NoInferior(no_inf)
44{ 45{
45 // Decode IMAP foldername 46 // Decode IMAP foldername
46 nameDisplay = IMAPFolder::decodeFolderName( name ); 47 nameDisplay = IMAPFolder::decodeFolderName( name );
47 qDebug( "folder " + name + " - displayed as " + nameDisplay ); 48 qDebug( "folder " + name + " - displayed as " + nameDisplay );
49 prefix = aprefix;
48 50
49 if (prefix.length()>0) { 51 if (prefix.length()>0) {
50 if (nameDisplay.startsWith(prefix) && nameDisplay.length()>prefix.length()) { 52 if (nameDisplay.startsWith(prefix) && nameDisplay.length()>prefix.length()) {
51 nameDisplay=nameDisplay.right(nameDisplay.length()-prefix.length()); 53 nameDisplay=nameDisplay.right(nameDisplay.length()-prefix.length());
52 } 54 }
53 } 55 }
@@ -143,6 +145,20 @@ QString IMAPFolder::decodeFolderName( const QString &name )
143} 145}
144 146
145Mail::Mail() 147Mail::Mail()
146 :name(""), mail(""), to(""), cc(""), bcc(""), reply(""), subject(""), message("") 148 :name(""), mail(""), to(""), cc(""), bcc(""), reply(""), subject(""), message("")
147{ 149{
148} 150}
151
152MHFolder::MHFolder(const QString&disp_name,const QString&mbox)
153 : Folder( disp_name,"/" )
154{
155 separator = "/";
156 name = mbox;
157 if (!disp_name.startsWith("/") && disp_name.length()>0)
158 name+="/";
159 name+=disp_name;
160 if (disp_name.length()==0) {
161 nameDisplay = separator;
162 }
163 prefix = mbox;
164}
diff --git a/noncore/net/mail/libmailwrapper/mailwrapper.h b/noncore/net/mail/libmailwrapper/mailwrapper.h
index a60777d..caaa3a2 100644
--- a/noncore/net/mail/libmailwrapper/mailwrapper.h
+++ b/noncore/net/mail/libmailwrapper/mailwrapper.h
@@ -66,19 +66,26 @@ class Folder : public QObject
66 Q_OBJECT 66 Q_OBJECT
67 67
68public: 68public:
69 Folder( const QString&init_name,const QString&sep ); 69 Folder( const QString&init_name,const QString&sep );
70 const QString&getDisplayName()const { return nameDisplay; } 70 const QString&getDisplayName()const { return nameDisplay; }
71 const QString&getName()const { return name; } 71 const QString&getName()const { return name; }
72 const QString&getPrefix()const{return prefix; }
72 virtual bool may_select()const{return true;} 73 virtual bool may_select()const{return true;}
73 virtual bool no_inferior()const{return true;} 74 virtual bool no_inferior()const{return true;}
74 const QString&Separator()const; 75 const QString&Separator()const;
75 76
76protected: 77protected:
77 QString nameDisplay, name, separator; 78 QString nameDisplay, name, separator,prefix;
78 79};
80
81class MHFolder : public Folder
82{
83 Q_OBJECT
84public:
85 MHFolder(const QString&disp_name,const QString&mbox);
79}; 86};
80 87
81class IMAPFolder : public Folder 88class IMAPFolder : public Folder
82{ 89{
83 public: 90 public:
84 IMAPFolder(const QString&name, const QString&sep, bool select=true,bool noinf=false,const QString&prefix="" ); 91 IMAPFolder(const QString&name, const QString&sep, bool select=true,bool noinf=false,const QString&prefix="" );
diff --git a/noncore/net/mail/libmailwrapper/mboxwrapper.h b/noncore/net/mail/libmailwrapper/mboxwrapper.h
index 194ff86..a579a3d 100644
--- a/noncore/net/mail/libmailwrapper/mboxwrapper.h
+++ b/noncore/net/mail/libmailwrapper/mboxwrapper.h
@@ -9,12 +9,13 @@ class RecBody;
9class encodedString; 9class encodedString;
10struct mailmbox_folder; 10struct mailmbox_folder;
11 11
12class MBOXwrapper : public Genericwrapper 12class MBOXwrapper : public Genericwrapper
13{ 13{
14 Q_OBJECT 14 Q_OBJECT
15
15public: 16public:
16 MBOXwrapper(const QString & dir,const QString&name); 17 MBOXwrapper(const QString & dir,const QString&name);
17 virtual ~MBOXwrapper(); 18 virtual ~MBOXwrapper();
18 19
19 virtual void listMessages(const QString & mailbox, QList<RecMail> &target ); 20 virtual void listMessages(const QString & mailbox, QList<RecMail> &target );
20 virtual QList<Folder>* listFolders(); 21 virtual QList<Folder>* listFolders();
diff --git a/noncore/net/mail/libmailwrapper/mhwrapper.cpp b/noncore/net/mail/libmailwrapper/mhwrapper.cpp
new file mode 100644
index 0000000..85f9cf0
--- a/dev/null
+++ b/noncore/net/mail/libmailwrapper/mhwrapper.cpp
@@ -0,0 +1,330 @@
1#include "mhwrapper.h"
2#include "mailtypes.h"
3#include "mailwrapper.h"
4#include <libetpan/libetpan.h>
5#include <qdir.h>
6#include <stdlib.h>
7#include <qpe/global.h>
8
9const QString MHwrapper::wrapperType="MH";
10
11MHwrapper::MHwrapper(const QString & mbox_dir,const QString&mbox_name)
12 : Genericwrapper(),MHPath(mbox_dir),MHName(mbox_name)
13{
14 if (MHPath.length()>0) {
15 if (MHPath[MHPath.length()-1]=='/') {
16 MHPath=MHPath.left(MHPath.length()-1);
17 }
18 qDebug(MHPath);
19 QDir dir(MHPath);
20 if (!dir.exists()) {
21 dir.mkdir(MHPath);
22 }
23 init_storage();
24 }
25}
26
27void MHwrapper::init_storage()
28{
29 int r;
30 QString pre = MHPath;
31 if (!m_storage) {
32 m_storage = mailstorage_new(NULL);
33 r = mh_mailstorage_init(m_storage,(char*)pre.latin1(),0,0,0);
34 if (r != MAIL_NO_ERROR) {
35 qDebug("error initializing storage");
36 mailstorage_free(m_storage);
37 m_storage = 0;
38 return;
39 }
40 }
41 r = mailstorage_connect(m_storage);
42 if (r!=MAIL_NO_ERROR) {
43 qDebug("error connecting storage");
44 mailstorage_free(m_storage);
45 m_storage = 0;
46 }
47}
48
49void MHwrapper::clean_storage()
50{
51 if (m_storage) {
52 mailstorage_disconnect(m_storage);
53 mailstorage_free(m_storage);
54 m_storage = 0;
55 }
56}
57
58MHwrapper::~MHwrapper()
59{
60 clean_storage();
61}
62
63void MHwrapper::listMessages(const QString & mailbox, QList<RecMail> &target )
64{
65 init_storage();
66 if (!m_storage) {
67 return;
68 }
69 QString f = buildPath(mailbox);
70 int r = mailsession_select_folder(m_storage->sto_session,(char*)mailbox.latin1());
71 if (r!=MAIL_NO_ERROR) {
72 qDebug("error selecting folder!");
73 return;
74 }
75 parseList(target,m_storage->sto_session,f);
76 Global::statusMessage(tr("Mailbox has %1 mail(s)").arg(target.count()));
77}
78
79QList<Folder>* MHwrapper::listFolders()
80{
81 QList<Folder> * folders = new QList<Folder>();
82 folders->setAutoDelete( false );
83 init_storage();
84 if (!m_storage) {
85 return folders;
86 }
87 mail_list*flist = 0;
88 clistcell*current=0;
89 int r = mailsession_list_folders(m_storage->sto_session,NULL,&flist);
90 if (r != MAIL_NO_ERROR || !flist) {
91 qDebug("error getting folder list");
92 return folders;
93 }
94 for (current=clist_begin(flist->mb_list);current!=0;current=clist_next(current)) {
95 QString t = (char*)current->data;
96 t.replace(0,MHPath.length(),"");
97 folders->append(new MHFolder(t,MHPath));
98 }
99 mail_list_free(flist);
100 return folders;
101}
102
103void MHwrapper::deleteMail(const RecMail&mail)
104{
105 init_storage();
106 if (!m_storage) {
107 return;
108 }
109 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail.getMbox().latin1());
110 if (r!=MAIL_NO_ERROR) {
111 qDebug("error selecting folder!");
112 return;
113 }
114 r = mailsession_remove_message(m_storage->sto_session,mail.getNumber());
115 if (r != MAIL_NO_ERROR) {
116 qDebug("error deleting mail");
117 }
118}
119
120void MHwrapper::answeredMail(const RecMail&)
121{
122}
123
124RecBody MHwrapper::fetchBody( const RecMail &mail )
125{
126 RecBody body;
127 init_storage();
128 if (!m_storage) {
129 return body;
130 }
131 mailmessage * msg;
132 char*data=0;
133 size_t size;
134
135 /* mail should hold the complete path! */
136 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail.getMbox().latin1());
137 if (r != MAIL_NO_ERROR) {
138 return body;
139 }
140 r = mailsession_get_message(m_storage->sto_session, mail.getNumber(), &msg);
141 if (r != MAIL_NO_ERROR) {
142 qDebug("Error fetching mail %i",mail.getNumber());
143 return body;
144 }
145 body = parseMail(msg);
146 mailmessage_fetch_result_free(msg,data);
147 return body;
148}
149
150void MHwrapper::mbox_progress( size_t current, size_t maximum )
151{
152 qDebug("MH %i von %i",current,maximum);
153}
154
155QString MHwrapper::buildPath(const QString&p)
156{
157 QString f="";
158 if (p.length()==0||p=="/")
159 return MHPath;
160 if (!p.startsWith(MHPath)) {
161 f+=MHPath;
162 }
163 if (!p.startsWith("/")) {
164 f+="/";
165 }
166 f+=p;
167 return f;
168}
169
170int MHwrapper::createMbox(const QString&folder,const Folder*,const QString&,bool )
171{
172 init_storage();
173 if (!m_storage) {
174 return 0;
175 }
176 QString f = buildPath(folder);
177 int r = mailsession_create_folder(m_storage->sto_session,(char*)f.latin1());
178 if (r != MAIL_NO_ERROR) {
179 qDebug("error creating folder");
180 return 0;
181 }
182 qDebug("Folder created");
183 mailstorage_disconnect(m_storage);
184 return 1;
185}
186
187void MHwrapper::storeMessage(const char*msg,size_t length, const QString&Folder)
188{
189 init_storage();
190 if (!m_storage) {
191 return;
192 }
193 QString f = buildPath(Folder);
194 int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1());
195 if (r!=MAIL_NO_ERROR) {
196 qDebug("error selecting folder!");
197 return;
198 }
199 r = mailsession_append_message(m_storage->sto_session,(char*)msg,length);
200 if (r!=MAIL_NO_ERROR) {
201 qDebug("error storing mail");
202 }
203 return;
204}
205
206encodedString* MHwrapper::fetchRawBody(const RecMail&mail)
207{
208 encodedString*result = 0;
209 init_storage();
210 if (!m_storage) {
211 return result;
212 }
213 mailmessage * msg = 0;
214 char*data=0;
215 size_t size;
216 int r = mailsession_select_folder(m_storage->sto_session,(char*)mail.getMbox().latin1());
217 if (r!=MAIL_NO_ERROR) {
218 qDebug("error selecting folder!");
219 return result;
220 }
221 r = mailsession_get_message(m_storage->sto_session, mail.getNumber(), &msg);
222 if (r != MAIL_NO_ERROR) {
223 Global::statusMessage(tr("Error fetching mail %i").arg(mail.getNumber()));
224 return 0;
225 }
226 r = mailmessage_fetch(msg,&data,&size);
227 if (r != MAIL_NO_ERROR) {
228 Global::statusMessage(tr("Error fetching mail %i").arg(mail.getNumber()));
229 if (msg) mailmessage_free(msg);
230 return 0;
231 }
232 result = new encodedString(data,size);
233 if (msg) mailmessage_free(msg);
234 return result;
235}
236
237void MHwrapper::deleteMails(const QString & mailbox,QList<RecMail> &target)
238{
239#if 0
240 QString p = MHPath+"/";
241 p+=mailbox;
242 mailmbox_folder*f = 0;
243 int r = mailmbox_init(p.latin1(),0,1,0,&f);
244 if (r != MAIL_NO_ERROR) {
245 qDebug("Error init folder");
246 return;
247 }
248 deleteMails(f,target);
249 mailmbox_done(f);
250#endif
251}
252
253int MHwrapper::deleteAllMail(const Folder*tfolder)
254{
255 init_storage();
256 if (!m_storage) {
257 return 0;
258 }
259 int res = 1;
260 if (!tfolder) return 0;
261 int r = mailsession_select_folder(m_storage->sto_session,(char*)tfolder->getName().latin1());
262 if (r!=MAIL_NO_ERROR) {
263 qDebug("error selecting folder!");
264 return 0;
265 }
266 mailmessage_list*l=0;
267 r = mailsession_get_messages_list(m_storage->sto_session,&l);
268 if (r != MAIL_NO_ERROR) {
269 qDebug("Error message list");
270 res = 0;
271 }
272 unsigned j = 0;
273 for(unsigned int i = 0 ; l!= 0 && res==1 && i < carray_count(l->msg_tab) ; ++i) {
274 mailmessage * msg;
275 msg = (mailmessage*)carray_get(l->msg_tab, i);
276 j = msg->msg_index;
277 r = mailsession_remove_message(m_storage->sto_session,j);
278 if (r != MAIL_NO_ERROR) {
279 Global::statusMessage(tr("Error deleting mail %1").arg(i+1));
280 res = 0;
281 break;
282 }
283 }
284 if (l) mailmessage_list_free(l);
285 return res;
286}
287
288int MHwrapper::deleteMbox(const Folder*tfolder)
289{
290 init_storage();
291 if (!m_storage) {
292 return 0;
293 }
294 if (!tfolder) return 0;
295 int r = mailsession_delete_folder(m_storage->sto_session,(char*)tfolder->getName().latin1());
296 if (r != MAIL_NO_ERROR) {
297 qDebug("error deleting mail box");
298 return 0;
299 }
300 qDebug("mail box deleted");
301 mailstorage_disconnect(m_storage);
302 return 1;
303}
304
305void MHwrapper::statusFolder(folderStat&target_stat,const QString & mailbox)
306{
307 init_storage();
308 if (!m_storage) {
309 return;
310 }
311 target_stat.message_count = 0;
312 target_stat.message_unseen = 0;
313 target_stat.message_recent = 0;
314 QString f = buildPath(mailbox);
315 int r = mailsession_status_folder(m_storage->sto_session,(char*)f.latin1(),&target_stat.message_count,
316 &target_stat.message_recent,&target_stat.message_unseen);
317 if (r != MAIL_NO_ERROR) {
318 Global::statusMessage(tr("Error retrieving status"));
319 }
320}
321
322const QString&MHwrapper::getType()const
323{
324 return wrapperType;
325}
326
327const QString&MHwrapper::getName()const
328{
329 return MHName;
330}
diff --git a/noncore/net/mail/libmailwrapper/mhwrapper.h b/noncore/net/mail/libmailwrapper/mhwrapper.h
new file mode 100644
index 0000000..7f028b4
--- a/dev/null
+++ b/noncore/net/mail/libmailwrapper/mhwrapper.h
@@ -0,0 +1,50 @@
1#ifndef __MH_WRAPPER_H
2#define __MH_WRAPPER_H
3
4#include "genericwrapper.h"
5#include <qstring.h>
6
7class RecMail;
8class RecBody;
9class encodedString;
10struct mailmbox_folder;
11
12class MHwrapper : public Genericwrapper
13{
14 Q_OBJECT
15public:
16 MHwrapper(const QString & dir,const QString&name);
17 virtual ~MHwrapper();
18
19 virtual void listMessages(const QString & mailbox, QList<RecMail> &target );
20 virtual QList<Folder>* listFolders();
21 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX");
22
23 virtual void deleteMail(const RecMail&mail);
24 virtual void answeredMail(const RecMail&mail);
25
26 virtual int createMbox(const QString&folder,const Folder*f=0,const QString&d="",bool s=false);
27 virtual int deleteMbox(const Folder*);
28
29 virtual void storeMessage(const char*msg,size_t length, const QString&folder);
30
31 virtual RecBody fetchBody( const RecMail &mail );
32 static void mbox_progress( size_t current, size_t maximum );
33
34 virtual encodedString* fetchRawBody(const RecMail&mail);
35 virtual void deleteMails(const QString & FolderName,QList<RecMail> &target);
36 virtual int deleteAllMail(const Folder*);
37 virtual const QString&getType()const;
38 virtual const QString&getName()const;
39
40protected:
41 QString buildPath(const QString&p);
42 QString MHPath;
43 QString MHName;
44 static const QString wrapperType;
45
46 void init_storage();
47 void clean_storage();
48};
49
50#endif
diff --git a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
index 281b88e..08f6bb7 100644
--- a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
@@ -11,13 +11,13 @@
11#include <qpe/qcopenvelope_qws.h> 11#include <qpe/qcopenvelope_qws.h>
12 12
13#include <libetpan/libetpan.h> 13#include <libetpan/libetpan.h>
14 14
15#include "smtpwrapper.h" 15#include "smtpwrapper.h"
16#include "mailwrapper.h" 16#include "mailwrapper.h"
17#include "mboxwrapper.h" 17#include "abstractmail.h"
18#include "logindialog.h" 18#include "logindialog.h"
19#include "mailtypes.h" 19#include "mailtypes.h"
20//#include "defines.h" 20//#include "defines.h"
21#include "sendmailprogress.h" 21#include "sendmailprogress.h"
22 22
23const char* SMTPwrapper::USER_AGENT="OpieMail v0.3"; 23const char* SMTPwrapper::USER_AGENT="OpieMail v0.3";
@@ -487,12 +487,13 @@ void SMTPwrapper::progress( size_t current, size_t maximum )
487 487
488void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) 488void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box)
489{ 489{
490 if (!mail) return; 490 if (!mail) return;
491 QString localfolders = AbstractMail::defaultLocalfolder(); 491 QString localfolders = AbstractMail::defaultLocalfolder();
492 AbstractMail*wrap = AbstractMail::getWrapper(localfolders); 492 AbstractMail*wrap = AbstractMail::getWrapper(localfolders);
493 wrap->createMbox(box);
493 wrap->storeMessage(mail,length,box); 494 wrap->storeMessage(mail,length,box);
494 delete wrap; 495 delete wrap;
495} 496}
496 497
497void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ) 498void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp )
498{ 499{