00001 #ifndef __IMAPWRAPPER
00002 #define __IMAPWRAPPER
00003
00004 #include <qlist.h>
00005 #include "mailwrapper.h"
00006 #include "abstractmail.h"
00007 #include "mailstatics.h"
00008 #include <libetpan/clist.h>
00009
00010 struct mailimap;
00011 struct mailimap_body;
00012 struct mailimap_body_type_1part;
00013 struct mailimap_body_type_text;
00014 struct mailimap_body_type_basic;
00015 struct mailimap_body_type_msg;
00016 struct mailimap_body_type_mpart;
00017 struct mailimap_body_fields;
00018 struct mailimap_msg_att;
00019 class encodedString;
00020
00021 class IMAPwrapper : public AbstractMail,public MailStatics
00022 {
00023 Q_OBJECT
00024 public:
00025 IMAPwrapper( IMAPaccount *a );
00026 virtual ~IMAPwrapper();
00027 virtual QValueList<Opie::Core::OSmartPointer<Folder> >* listFolders();
00028 virtual void listMessages(const QString & mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> >&target );
00029 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX");
00030
00031 virtual void deleteMail(const RecMailP&mail);
00032 virtual void answeredMail(const RecMailP&mail);
00033 virtual int deleteAllMail(const Opie::Core::OSmartPointer<Folder>&folder);
00034 virtual void storeMessage(const char*msg,size_t length, const QString&folder);
00035 virtual void mvcpAllMails(const Opie::Core::OSmartPointer<Folder>&fromFolder,
00036 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit);
00037 virtual void mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit);
00038
00039 virtual RecBodyP fetchBody(const RecMailP&mail);
00040 virtual QString fetchTextPart(const RecMailP&mail,const RecPartP&part);
00041 virtual encodedString* fetchDecodedPart(const RecMailP&mail,const RecPartP&part);
00042 virtual encodedString* fetchRawPart(const RecMailP&mail,const RecPartP&part);
00043 virtual encodedString* fetchRawBody(const RecMailP&mail);
00044
00045 virtual int createMbox(const QString&,const Opie::Core::OSmartPointer<Folder>&parentfolder=0,
00046 const QString& delemiter="/",bool getsubfolder=false);
00047 virtual int deleteMbox(const Opie::Core::OSmartPointer<Folder>&folder);
00048
00049 static void imap_progress( size_t current, size_t maximum );
00050
00051 virtual void logout();
00052 virtual MAILLIB::ATYPE getType()const;
00053 virtual const QString&getName()const;
00054
00055 protected:
00056 RecMail*parse_list_result(mailimap_msg_att*);
00057 void login();
00058 bool start_tls(bool force=true);
00059
00060 virtual QString fetchTextPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call=false,const QString&enc="");
00061 virtual encodedString*fetchRawPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call);
00062 int selectMbox(const QString&mbox);
00063
00064 void fillSinglePart(RecPartP&target_part,mailimap_body_type_1part*Description);
00065 void fillSingleTextPart(RecPartP&target_part,mailimap_body_type_text*which);
00066 void fillSingleBasicPart(RecPartP&target_part,mailimap_body_type_basic*which);
00067 void fillSingleMsgPart(RecPartP&target_part,mailimap_body_type_msg*which);
00068 void fillMultiPart(RecPartP&target_part,mailimap_body_type_mpart*which);
00069 void traverseBody(const RecMailP&mail,mailimap_body*body,RecBodyP&target_body,int current_recursion,QValueList<int>recList,int current_count=1);
00070
00071
00072 static void fillBodyFields(RecPartP&target_part,mailimap_body_fields*which);
00073 static QStringList address_list_to_stringlist(clist*list);
00074
00075
00076 IMAPaccount *account;
00077 mailimap *m_imap;
00078 QString m_Lastmbox;
00079 };
00080
00081 #endif