summaryrefslogtreecommitdiffabout
path: root/kmicromail/libmailwrapper/imapwrapper.h
blob: 31c60a8a02e1c5a99fd723c8b75698fa3fc8e0a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// CHANGED 2004-09-31 Lutz Rogowski
#ifndef __IMAPWRAPPER
#define __IMAPWRAPPER

#include <qlist.h>
#include "mailwrapper.h"
#include "abstractmail.h"
#include <libetpan/clist.h>

struct mailimap;
struct mailimap_body;
struct mailimap_body_type_1part;
struct mailimap_body_type_text;
struct mailimap_body_type_basic;
struct mailimap_body_type_msg;
struct mailimap_body_type_mpart;
struct mailimap_body_fields;
struct mailimap_msg_att;
class encodedString;

class IMAPwrapper : public AbstractMail
{
    Q_OBJECT
public:
    IMAPwrapper( IMAPaccount *a );
    virtual ~IMAPwrapper();
    virtual QValueList<Opie::Core::OSmartPointer<Folder> >* listFolders();
    virtual void listMessages(const QString & mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> >&target , int sizeInKb = 0);
    virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX");

    virtual void deleteMail(const RecMailP&mail);
    void deleteMailList(const QValueList<RecMailP>&target);
    virtual void answeredMail(const RecMailP&mail);
    virtual int deleteAllMail(const Opie::Core::OSmartPointer<Folder>&folder);
    virtual void storeMessage(const char*msg,size_t length, const QString&folder);
    virtual void mvcpAllMails(const Opie::Core::OSmartPointer<Folder>&fromFolder,
                              const QString&targetFolder,AbstractMail*targetWrapper,bool moveit,int sizeInKb = 0);
    virtual void mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit);

    virtual RecBodyP fetchBody(const RecMailP&mail);
    virtual QString fetchTextPart(const RecMailP&mail,const RecPartP&part);
    virtual encodedString* fetchDecodedPart(const RecMailP&mail,const RecPartP&part);
    virtual encodedString* fetchRawPart(const RecMailP&mail,const RecPartP&part);
    virtual encodedString* fetchRawBody(const RecMailP&mail);

    virtual int createMbox(const QString&,const Opie::Core::OSmartPointer<Folder>&parentfolder=0,
        const QString& delemiter="/",bool getsubfolder=false);
    virtual int deleteMbox(const Opie::Core::OSmartPointer<Folder>&folder);

    static void imap_progress( size_t current, size_t maximum );

    virtual void logout();
    virtual MAILLIB::ATYPE getType()const;
    virtual const QString&getName()const;
    virtual Account* getAccount() { return account; };

protected:
    RecMail*parse_list_result(mailimap_msg_att*);
    void login(bool tryTLS = true);
    bool start_tls(bool force=true);

    virtual QString fetchTextPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call=false,const QString&enc="");
    virtual encodedString*fetchRawPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call);
    int selectMbox(const QString&mbox);

    void fillSinglePart(RecPartP&target_part,mailimap_body_type_1part*Description);
    void fillSingleTextPart(RecPartP&target_part,mailimap_body_type_text*which);
    void fillSingleBasicPart(RecPartP&target_part,mailimap_body_type_basic*which);
    void fillSingleMsgPart(RecPartP&target_part,mailimap_body_type_msg*which);
    void fillMultiPart(RecPartP&target_part,mailimap_body_type_mpart*which);
    void traverseBody(const RecMailP&mail,mailimap_body*body,RecBodyP&target_body,int current_recursion,QValueList<int>recList,int current_count=1);

    /* just helpers */
    static void fillBodyFields(RecPartP&target_part,mailimap_body_fields*which);
    static QStringList address_list_to_stringlist(clist*list);

    static void progress(QString mess = QString::null);
    static int mCurrent;
    static int mMax;
    IMAPaccount *account;
    mailimap *m_imap;
    QString m_Lastmbox;
};

#endif