summaryrefslogtreecommitdiff
authoralwin <alwin>2003-12-13 20:39:07 (UTC)
committer alwin <alwin>2003-12-13 20:39:07 (UTC)
commit85444223acfafd9d7955032b2cbdad3279ba27ad (patch) (unidiff)
tree444063490a58ffc7ca085219827a577ad6213442
parentd161cb46c21ae6a9e9f74dc60fb6ac6ac8e62f1b (diff)
downloadopie-85444223acfafd9d7955032b2cbdad3279ba27ad.zip
opie-85444223acfafd9d7955032b2cbdad3279ba27ad.tar.gz
opie-85444223acfafd9d7955032b2cbdad3279ba27ad.tar.bz2
imap/pop3 wrapper uses base virtual class so we can forward the pointer
independend of its later use. ToDo: find a more general interface for it
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/abstractmail.cpp13
-rw-r--r--noncore/net/mail/abstractmail.h30
-rw-r--r--noncore/net/mail/accountview.cpp16
-rw-r--r--noncore/net/mail/accountview.h15
-rw-r--r--noncore/net/mail/imapwrapper.cpp5
-rw-r--r--noncore/net/mail/imapwrapper.h17
-rw-r--r--noncore/net/mail/libmailwrapper/abstractmail.cpp13
-rw-r--r--noncore/net/mail/libmailwrapper/abstractmail.h30
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.cpp5
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.h17
-rw-r--r--noncore/net/mail/libmailwrapper/pop3wrapper.cpp21
-rw-r--r--noncore/net/mail/libmailwrapper/pop3wrapper.h11
-rw-r--r--noncore/net/mail/mail.pro6
-rw-r--r--noncore/net/mail/mainwindow.h1
-rw-r--r--noncore/net/mail/opiemail.h4
-rw-r--r--noncore/net/mail/pop3wrapper.cpp21
-rw-r--r--noncore/net/mail/pop3wrapper.h11
17 files changed, 180 insertions, 56 deletions
diff --git a/noncore/net/mail/abstractmail.cpp b/noncore/net/mail/abstractmail.cpp
new file mode 100644
index 0000000..7380c31
--- a/dev/null
+++ b/noncore/net/mail/abstractmail.cpp
@@ -0,0 +1,13 @@
1#include "abstractmail.h"
2#include "imapwrapper.h"
3#include "pop3wrapper.h"
4
5AbstractMail* AbstractMail::getWrapper(IMAPaccount *a)
6{
7 return new IMAPwrapper(a);
8}
9
10AbstractMail* AbstractMail::getWrapper(POP3account *a)
11{
12 return new POP3wrapper(a);
13}
diff --git a/noncore/net/mail/abstractmail.h b/noncore/net/mail/abstractmail.h
new file mode 100644
index 0000000..bc8938f
--- a/dev/null
+++ b/noncore/net/mail/abstractmail.h
@@ -0,0 +1,30 @@
1#ifndef __abstract_mail_
2#define __abstract_mail_
3
4#include <qobject.h>
5#include "settings.h"
6
7class RecMail;
8class RecBody;
9class RecPart;
10class IMAPwrapper;
11class POP3wrapper;
12class Folder;
13
14class AbstractMail:public QObject
15{
16 Q_OBJECT
17public:
18 AbstractMail(){};
19 virtual ~AbstractMail(){}
20 virtual QList<Folder>* listFolders()=0;
21 virtual void listMessages(const QString & mailbox,QList<RecMail>&target )=0;
22 virtual RecBody fetchBody(const RecMail&mail)=0;
23 virtual QString fetchPart(const RecMail&mail,const QValueList<int>&path,bool internal_call=false)=0;
24 virtual QString fetchPart(const RecMail&mail,const RecPart&part)=0;
25
26 static AbstractMail* getWrapper(IMAPaccount *a);
27 static AbstractMail* getWrapper(POP3account *a);
28};
29
30#endif
diff --git a/noncore/net/mail/accountview.cpp b/noncore/net/mail/accountview.cpp
index c7b1eeb..1069b9f 100644
--- a/noncore/net/mail/accountview.cpp
+++ b/noncore/net/mail/accountview.cpp
@@ -1,102 +1,100 @@
1#include "accountview.h" 1#include "accountview.h"
2#include "imapwrapper.h"
3#include "pop3wrapper.h"
4#include "mailtypes.h" 2#include "mailtypes.h"
5#include "defines.h" 3#include "defines.h"
6 4
7 5
8/** 6/**
9 * POP3 Account stuff 7 * POP3 Account stuff
10 */ 8 */
11 9
12POP3viewItem::POP3viewItem( POP3account *a, QListView *parent ) 10POP3viewItem::POP3viewItem( POP3account *a, QListView *parent )
13 : AccountViewItem( parent ) 11 : AccountViewItem( parent )
14{ 12{
15 account = a; 13 account = a;
16 wrapper = new POP3wrapper( account ); 14 wrapper = AbstractMail::getWrapper( account );
17 setPixmap( 0, PIXMAP_POP3FOLDER ); 15 setPixmap( 0, PIXMAP_POP3FOLDER );
18 setText( 0, account->getAccountName() ); 16 setText( 0, account->getAccountName() );
19} 17}
20 18
21POP3viewItem::~POP3viewItem() 19POP3viewItem::~POP3viewItem()
22{ 20{
23 delete wrapper; 21 delete wrapper;
24} 22}
25 23
26void POP3viewItem::refresh( QList<RecMail> &target ) 24void POP3viewItem::refresh( QList<RecMail> &target )
27{ 25{
28 qDebug( "POP3: refresh" ); 26 qDebug( "POP3: refresh" );
29 wrapper->listMessages( target ); 27 wrapper->listMessages("INBOX", target );
30} 28}
31 29
32 30
33RecBody POP3viewItem::fetchBody( const RecMail &mail ) 31RecBody POP3viewItem::fetchBody( const RecMail &mail )
34{ 32{
35 qDebug( "POP3 fetchBody" ); 33 qDebug( "POP3 fetchBody" );
36 return wrapper->fetchBody( mail ); 34 return wrapper->fetchBody( mail );
37} 35}
38 36
39/** 37/**
40 * IMAP Account stuff 38 * IMAP Account stuff
41 */ 39 */
42 40
43IMAPviewItem::IMAPviewItem( IMAPaccount *a, QListView *parent ) 41IMAPviewItem::IMAPviewItem( IMAPaccount *a, QListView *parent )
44 : AccountViewItem( parent ) 42 : AccountViewItem( parent )
45{ 43{
46 account = a; 44 account = a;
47 wrapper = new IMAPwrapper( account ); 45 wrapper = AbstractMail::getWrapper( account );
48 setPixmap( 0, PIXMAP_IMAPFOLDER ); 46 setPixmap( 0, PIXMAP_IMAPFOLDER );
49 setText( 0, account->getAccountName() ); 47 setText( 0, account->getAccountName() );
50 setOpen( true ); 48 setOpen( true );
51} 49}
52 50
53IMAPviewItem::~IMAPviewItem() 51IMAPviewItem::~IMAPviewItem()
54{ 52{
55 delete wrapper; 53 delete wrapper;
56} 54}
57 55
58IMAPwrapper *IMAPviewItem::getWrapper() 56AbstractMail *IMAPviewItem::getWrapper()
59{ 57{
60 return wrapper; 58 return wrapper;
61} 59}
62 60
63void IMAPviewItem::refresh(QList<RecMail>&) 61void IMAPviewItem::refresh(QList<RecMail>&)
64{ 62{
65 QList<IMAPFolder> *folders = wrapper->listFolders(); 63 QList<Folder> *folders = wrapper->listFolders();
66 64
67 QListViewItem *child = firstChild(); 65 QListViewItem *child = firstChild();
68 while ( child ) { 66 while ( child ) {
69 QListViewItem *tmp = child; 67 QListViewItem *tmp = child;
70 child = child->nextSibling(); 68 child = child->nextSibling();
71 delete tmp; 69 delete tmp;
72 } 70 }
73 71
74 IMAPFolder *it; 72 Folder *it;
75 for ( it = folders->first(); it; it = folders->next() ) { 73 for ( it = folders->first(); it; it = folders->next() ) {
76 (void) new IMAPfolderItem( it, this ); 74 (void) new IMAPfolderItem( it, this );
77 } 75 }
78} 76}
79 77
80RecBody IMAPviewItem::fetchBody(const RecMail&) 78RecBody IMAPviewItem::fetchBody(const RecMail&)
81{ 79{
82 return RecBody(); 80 return RecBody();
83} 81}
84 82
85IMAPfolderItem::~IMAPfolderItem() 83IMAPfolderItem::~IMAPfolderItem()
86{ 84{
87 delete folder; 85 delete folder;
88} 86}
89 87
90IMAPfolderItem::IMAPfolderItem( IMAPFolder *folderInit, IMAPviewItem *parent ) 88IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPviewItem *parent )
91 : AccountViewItem( parent ) 89 : AccountViewItem( parent )
92{ 90{
93 folder = folderInit; 91 folder = folderInit;
94 imap = parent; 92 imap = parent;
95 setPixmap( 0, PIXMAP_IMAPFOLDER ); 93 setPixmap( 0, PIXMAP_IMAPFOLDER );
96 setText( 0, folder->getDisplayName() ); 94 setText( 0, folder->getDisplayName() );
97} 95}
98 96
99void IMAPfolderItem::refresh(QList<RecMail>&target) 97void IMAPfolderItem::refresh(QList<RecMail>&target)
100{ 98{
101 imap->getWrapper()->listMessages( folder->getName(),target ); 99 imap->getWrapper()->listMessages( folder->getName(),target );
102} 100}
diff --git a/noncore/net/mail/accountview.h b/noncore/net/mail/accountview.h
index 4cac673..83d49af 100644
--- a/noncore/net/mail/accountview.h
+++ b/noncore/net/mail/accountview.h
@@ -1,22 +1,22 @@
1#ifndef ACCOUNTVIEW_H 1#ifndef ACCOUNTVIEW_H
2#define ACCOUNTVIEW_H 2#define ACCOUNTVIEW_H
3 3
4#include <qlistview.h> 4#include <qlistview.h>
5#include <qlist.h> 5#include <qlist.h>
6 6
7#include "settings.h" 7#include "settings.h"
8#include "mailwrapper.h" 8#include "mailwrapper.h"
9#include "abstractmail.h"
9 10
10class IMAPwrapper;
11class POP3wrapper; 11class POP3wrapper;
12class RecMail; 12class RecMail;
13class RecBody; 13class RecBody;
14 14
15class AccountViewItem : public QListViewItem 15class AccountViewItem : public QListViewItem
16{ 16{
17 17
18public: 18public:
19 AccountViewItem( QListView *parent ) : QListViewItem( parent ) {} 19 AccountViewItem( QListView *parent ) : QListViewItem( parent ) {}
20 AccountViewItem( QListViewItem *parent ) : QListViewItem( parent ) {} 20 AccountViewItem( QListViewItem *parent ) : QListViewItem( parent ) {}
21 virtual void refresh(QList<RecMail>&)=0; 21 virtual void refresh(QList<RecMail>&)=0;
22 virtual RecBody fetchBody(const RecMail&)=0; 22 virtual RecBody fetchBody(const RecMail&)=0;
@@ -24,55 +24,52 @@ public:
24 24
25class POP3viewItem : public AccountViewItem 25class POP3viewItem : public AccountViewItem
26{ 26{
27 27
28public: 28public:
29 POP3viewItem( POP3account *a, QListView *parent ); 29 POP3viewItem( POP3account *a, QListView *parent );
30 ~POP3viewItem(); 30 ~POP3viewItem();
31 virtual void refresh( QList<RecMail> &target ); 31 virtual void refresh( QList<RecMail> &target );
32 virtual RecBody fetchBody( const RecMail &mail ); 32 virtual RecBody fetchBody( const RecMail &mail );
33 33
34private: 34private:
35 POP3account *account; 35 POP3account *account;
36 POP3wrapper *wrapper; 36 AbstractMail *wrapper;
37 37
38}; 38};
39 39
40class IMAPviewItem : public AccountViewItem 40class IMAPviewItem : public AccountViewItem
41{ 41{
42 42
43public: 43public:
44 IMAPviewItem( IMAPaccount *a, QListView *parent ); 44 IMAPviewItem( IMAPaccount *a, QListView *parent );
45 ~IMAPviewItem(); 45 ~IMAPviewItem();
46 virtual void refresh(QList<RecMail>&); 46 virtual void refresh(QList<RecMail>&);
47 virtual RecBody fetchBody(const RecMail&); 47 virtual RecBody fetchBody(const RecMail&);
48 IMAPwrapper *getWrapper(); 48 AbstractMail *getWrapper();
49
50private: 49private:
51 IMAPaccount *account; 50 IMAPaccount *account;
52 IMAPwrapper *wrapper; 51 AbstractMail *wrapper;
53
54}; 52};
55 53
56class IMAPfolderItem : public AccountViewItem 54class IMAPfolderItem : public AccountViewItem
57{ 55{
58 56
59public: 57public:
60 IMAPfolderItem( IMAPFolder *folder, IMAPviewItem *parent ); 58 IMAPfolderItem( Folder *folder, IMAPviewItem *parent );
61 ~IMAPfolderItem(); 59 ~IMAPfolderItem();
62 virtual void refresh(QList<RecMail>&); 60 virtual void refresh(QList<RecMail>&);
63 virtual RecBody fetchBody(const RecMail&); 61 virtual RecBody fetchBody(const RecMail&);
64
65private: 62private:
66 IMAPFolder *folder; 63 Folder *folder;
67 IMAPviewItem *imap; 64 IMAPviewItem *imap;
68 65
69}; 66};
70 67
71class AccountView : public QListView 68class AccountView : public QListView
72{ 69{
73 Q_OBJECT 70 Q_OBJECT
74 71
75public: 72public:
76 AccountView( QWidget *parent = 0, const char *name = 0, WFlags flags = 0 ); 73 AccountView( QWidget *parent = 0, const char *name = 0, WFlags flags = 0 );
77 void populate( QList<Account> list ); 74 void populate( QList<Account> list );
78 RecBody fetchBody(const RecMail&aMail); 75 RecBody fetchBody(const RecMail&aMail);
diff --git a/noncore/net/mail/imapwrapper.cpp b/noncore/net/mail/imapwrapper.cpp
index 48e476b..e5eb335 100644
--- a/noncore/net/mail/imapwrapper.cpp
+++ b/noncore/net/mail/imapwrapper.cpp
@@ -1,20 +1,21 @@
1 1
2#include <stdlib.h> 2#include <stdlib.h>
3 3
4#include "imapwrapper.h" 4#include "imapwrapper.h"
5#include "mailtypes.h" 5#include "mailtypes.h"
6#include <libetpan/mailimap.h> 6#include <libetpan/mailimap.h>
7 7
8IMAPwrapper::IMAPwrapper( IMAPaccount *a ) 8IMAPwrapper::IMAPwrapper( IMAPaccount *a )
9 : AbstractMail()
9{ 10{
10 account = a; 11 account = a;
11 m_imap = 0; 12 m_imap = 0;
12} 13}
13 14
14IMAPwrapper::~IMAPwrapper() 15IMAPwrapper::~IMAPwrapper()
15{ 16{
16 logout(); 17 logout();
17} 18}
18 19
19void IMAPwrapper::imap_progress( size_t current, size_t maximum ) 20void IMAPwrapper::imap_progress( size_t current, size_t maximum )
20{ 21{
@@ -130,32 +131,32 @@ void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
130 if (m) { 131 if (m) {
131 m->setNumber(i); 132 m->setNumber(i);
132 m->setMbox(mailbox); 133 m->setMbox(mailbox);
133 target.append(m); 134 target.append(m);
134 } 135 }
135 } 136 }
136 } else { 137 } else {
137 qDebug("Error fetching headers: %s",m_imap->imap_response); 138 qDebug("Error fetching headers: %s",m_imap->imap_response);
138 } 139 }
139 mailimap_fetch_list_free(result); 140 mailimap_fetch_list_free(result);
140} 141}
141 142
142QList<IMAPFolder>* IMAPwrapper::listFolders() 143QList<Folder>* IMAPwrapper::listFolders()
143{ 144{
144 const char *path, *mask; 145 const char *path, *mask;
145 int err = MAILIMAP_NO_ERROR; 146 int err = MAILIMAP_NO_ERROR;
146 clist *result; 147 clist *result;
147 clistcell *current; 148 clistcell *current;
148 149
149 QList<IMAPFolder> * folders = new QList<IMAPFolder>(); 150 QList<Folder> * folders = new QList<Folder>();
150 folders->setAutoDelete( true ); 151 folders->setAutoDelete( true );
151 login(); 152 login();
152 if (!m_imap) { 153 if (!m_imap) {
153 return folders; 154 return folders;
154 } 155 }
155 156
156/* 157/*
157 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 158 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
158 * We must not forget to filter them out in next loop! 159 * We must not forget to filter them out in next loop!
159 * it seems like ugly code. and yes - it is ugly code. but the best way. 160 * it seems like ugly code. and yes - it is ugly code. but the best way.
160 */ 161 */
161 QString temp; 162 QString temp;
diff --git a/noncore/net/mail/imapwrapper.h b/noncore/net/mail/imapwrapper.h
index 95de215..f88457a 100644
--- a/noncore/net/mail/imapwrapper.h
+++ b/noncore/net/mail/imapwrapper.h
@@ -1,42 +1,39 @@
1#ifndef __IMAPWRAPPER 1#ifndef __IMAPWRAPPER
2#define __IMAPWRAPPER 2#define __IMAPWRAPPER
3 3
4#include <qlist.h> 4#include <qlist.h>
5#include "mailwrapper.h" 5#include "mailwrapper.h"
6#include "abstractmail.h"
6 7
7struct mailimap; 8struct mailimap;
8struct mailimap_body_type_1part; 9struct mailimap_body_type_1part;
9struct mailimap_body_type_text; 10struct mailimap_body_type_text;
10struct mailimap_body_type_basic; 11struct mailimap_body_type_basic;
11struct mailimap_body_type_msg; 12struct mailimap_body_type_msg;
12struct mailimap_body_type_mpart; 13struct mailimap_body_type_mpart;
13struct mailimap_body_fields; 14struct mailimap_body_fields;
14struct mailimap_msg_att; 15struct mailimap_msg_att;
15class RecMail;
16class RecBody;
17class RecPart;
18 16
19class IMAPwrapper : public QObject 17class IMAPwrapper : public AbstractMail
20{ 18{
21 Q_OBJECT 19 Q_OBJECT
22
23public: 20public:
24 IMAPwrapper( IMAPaccount *a ); 21 IMAPwrapper( IMAPaccount *a );
25 virtual ~IMAPwrapper(); 22 virtual ~IMAPwrapper();
26 QList<IMAPFolder>* listFolders(); 23 virtual QList<Folder>* listFolders();
27 void listMessages(const QString & mailbox,QList<RecMail>&target ); 24 virtual void listMessages(const QString & mailbox,QList<RecMail>&target );
28 RecBody fetchBody(const RecMail&mail); 25 virtual RecBody fetchBody(const RecMail&mail);
29 QString fetchPart(const RecMail&mail,const QValueList<int>&path,bool internal_call=false); 26 virtual QString fetchPart(const RecMail&mail,const QValueList<int>&path,bool internal_call=false);
30 QString fetchPart(const RecMail&mail,const RecPart&part); 27 virtual QString fetchPart(const RecMail&mail,const RecPart&part);
31 static void imap_progress( size_t current, size_t maximum ); 28 static void imap_progress( size_t current, size_t maximum );
32 29
33protected: 30protected:
34 RecMail*parse_list_result(mailimap_msg_att*); 31 RecMail*parse_list_result(mailimap_msg_att*);
35 void login(); 32 void login();
36 void logout(); 33 void logout();
37 34
38 void searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body); 35 void searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body);
39 void searchBodyText(const RecMail&mail,mailimap_body_type_mpart*mailDescription,RecBody&target_body,int current_recursion=0,QValueList<int>recList=QValueList<int>()); 36 void searchBodyText(const RecMail&mail,mailimap_body_type_mpart*mailDescription,RecBody&target_body,int current_recursion=0,QValueList<int>recList=QValueList<int>());
40 37
41 void fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description); 38 void fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description);
42 void fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which); 39 void fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which);
diff --git a/noncore/net/mail/libmailwrapper/abstractmail.cpp b/noncore/net/mail/libmailwrapper/abstractmail.cpp
new file mode 100644
index 0000000..7380c31
--- a/dev/null
+++ b/noncore/net/mail/libmailwrapper/abstractmail.cpp
@@ -0,0 +1,13 @@
1#include "abstractmail.h"
2#include "imapwrapper.h"
3#include "pop3wrapper.h"
4
5AbstractMail* AbstractMail::getWrapper(IMAPaccount *a)
6{
7 return new IMAPwrapper(a);
8}
9
10AbstractMail* AbstractMail::getWrapper(POP3account *a)
11{
12 return new POP3wrapper(a);
13}
diff --git a/noncore/net/mail/libmailwrapper/abstractmail.h b/noncore/net/mail/libmailwrapper/abstractmail.h
new file mode 100644
index 0000000..bc8938f
--- a/dev/null
+++ b/noncore/net/mail/libmailwrapper/abstractmail.h
@@ -0,0 +1,30 @@
1#ifndef __abstract_mail_
2#define __abstract_mail_
3
4#include <qobject.h>
5#include "settings.h"
6
7class RecMail;
8class RecBody;
9class RecPart;
10class IMAPwrapper;
11class POP3wrapper;
12class Folder;
13
14class AbstractMail:public QObject
15{
16 Q_OBJECT
17public:
18 AbstractMail(){};
19 virtual ~AbstractMail(){}
20 virtual QList<Folder>* listFolders()=0;
21 virtual void listMessages(const QString & mailbox,QList<RecMail>&target )=0;
22 virtual RecBody fetchBody(const RecMail&mail)=0;
23 virtual QString fetchPart(const RecMail&mail,const QValueList<int>&path,bool internal_call=false)=0;
24 virtual QString fetchPart(const RecMail&mail,const RecPart&part)=0;
25
26 static AbstractMail* getWrapper(IMAPaccount *a);
27 static AbstractMail* getWrapper(POP3account *a);
28};
29
30#endif
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
index 48e476b..e5eb335 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
@@ -1,20 +1,21 @@
1 1
2#include <stdlib.h> 2#include <stdlib.h>
3 3
4#include "imapwrapper.h" 4#include "imapwrapper.h"
5#include "mailtypes.h" 5#include "mailtypes.h"
6#include <libetpan/mailimap.h> 6#include <libetpan/mailimap.h>
7 7
8IMAPwrapper::IMAPwrapper( IMAPaccount *a ) 8IMAPwrapper::IMAPwrapper( IMAPaccount *a )
9 : AbstractMail()
9{ 10{
10 account = a; 11 account = a;
11 m_imap = 0; 12 m_imap = 0;
12} 13}
13 14
14IMAPwrapper::~IMAPwrapper() 15IMAPwrapper::~IMAPwrapper()
15{ 16{
16 logout(); 17 logout();
17} 18}
18 19
19void IMAPwrapper::imap_progress( size_t current, size_t maximum ) 20void IMAPwrapper::imap_progress( size_t current, size_t maximum )
20{ 21{
@@ -130,32 +131,32 @@ void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
130 if (m) { 131 if (m) {
131 m->setNumber(i); 132 m->setNumber(i);
132 m->setMbox(mailbox); 133 m->setMbox(mailbox);
133 target.append(m); 134 target.append(m);
134 } 135 }
135 } 136 }
136 } else { 137 } else {
137 qDebug("Error fetching headers: %s",m_imap->imap_response); 138 qDebug("Error fetching headers: %s",m_imap->imap_response);
138 } 139 }
139 mailimap_fetch_list_free(result); 140 mailimap_fetch_list_free(result);
140} 141}
141 142
142QList<IMAPFolder>* IMAPwrapper::listFolders() 143QList<Folder>* IMAPwrapper::listFolders()
143{ 144{
144 const char *path, *mask; 145 const char *path, *mask;
145 int err = MAILIMAP_NO_ERROR; 146 int err = MAILIMAP_NO_ERROR;
146 clist *result; 147 clist *result;
147 clistcell *current; 148 clistcell *current;
148 149
149 QList<IMAPFolder> * folders = new QList<IMAPFolder>(); 150 QList<Folder> * folders = new QList<Folder>();
150 folders->setAutoDelete( true ); 151 folders->setAutoDelete( true );
151 login(); 152 login();
152 if (!m_imap) { 153 if (!m_imap) {
153 return folders; 154 return folders;
154 } 155 }
155 156
156/* 157/*
157 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 158 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
158 * We must not forget to filter them out in next loop! 159 * We must not forget to filter them out in next loop!
159 * it seems like ugly code. and yes - it is ugly code. but the best way. 160 * it seems like ugly code. and yes - it is ugly code. but the best way.
160 */ 161 */
161 QString temp; 162 QString temp;
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.h b/noncore/net/mail/libmailwrapper/imapwrapper.h
index 95de215..f88457a 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.h
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.h
@@ -1,42 +1,39 @@
1#ifndef __IMAPWRAPPER 1#ifndef __IMAPWRAPPER
2#define __IMAPWRAPPER 2#define __IMAPWRAPPER
3 3
4#include <qlist.h> 4#include <qlist.h>
5#include "mailwrapper.h" 5#include "mailwrapper.h"
6#include "abstractmail.h"
6 7
7struct mailimap; 8struct mailimap;
8struct mailimap_body_type_1part; 9struct mailimap_body_type_1part;
9struct mailimap_body_type_text; 10struct mailimap_body_type_text;
10struct mailimap_body_type_basic; 11struct mailimap_body_type_basic;
11struct mailimap_body_type_msg; 12struct mailimap_body_type_msg;
12struct mailimap_body_type_mpart; 13struct mailimap_body_type_mpart;
13struct mailimap_body_fields; 14struct mailimap_body_fields;
14struct mailimap_msg_att; 15struct mailimap_msg_att;
15class RecMail;
16class RecBody;
17class RecPart;
18 16
19class IMAPwrapper : public QObject 17class IMAPwrapper : public AbstractMail
20{ 18{
21 Q_OBJECT 19 Q_OBJECT
22
23public: 20public:
24 IMAPwrapper( IMAPaccount *a ); 21 IMAPwrapper( IMAPaccount *a );
25 virtual ~IMAPwrapper(); 22 virtual ~IMAPwrapper();
26 QList<IMAPFolder>* listFolders(); 23 virtual QList<Folder>* listFolders();
27 void listMessages(const QString & mailbox,QList<RecMail>&target ); 24 virtual void listMessages(const QString & mailbox,QList<RecMail>&target );
28 RecBody fetchBody(const RecMail&mail); 25 virtual RecBody fetchBody(const RecMail&mail);
29 QString fetchPart(const RecMail&mail,const QValueList<int>&path,bool internal_call=false); 26 virtual QString fetchPart(const RecMail&mail,const QValueList<int>&path,bool internal_call=false);
30 QString fetchPart(const RecMail&mail,const RecPart&part); 27 virtual QString fetchPart(const RecMail&mail,const RecPart&part);
31 static void imap_progress( size_t current, size_t maximum ); 28 static void imap_progress( size_t current, size_t maximum );
32 29
33protected: 30protected:
34 RecMail*parse_list_result(mailimap_msg_att*); 31 RecMail*parse_list_result(mailimap_msg_att*);
35 void login(); 32 void login();
36 void logout(); 33 void logout();
37 34
38 void searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body); 35 void searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body);
39 void searchBodyText(const RecMail&mail,mailimap_body_type_mpart*mailDescription,RecBody&target_body,int current_recursion=0,QValueList<int>recList=QValueList<int>()); 36 void searchBodyText(const RecMail&mail,mailimap_body_type_mpart*mailDescription,RecBody&target_body,int current_recursion=0,QValueList<int>recList=QValueList<int>());
40 37
41 void fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description); 38 void fillSinglePart(RecPart&target_part,mailimap_body_type_1part*Description);
42 void fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which); 39 void fillSingleTextPart(RecPart&target_part,mailimap_body_type_text*which);
diff --git a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
index abb5a42..49c3b7a 100644
--- a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
@@ -50,25 +50,25 @@ RecBody POP3wrapper::parseBody( const char *message )
50 err = mailimf_message_parse( (char *) message, strlen( message ), &curTok, &result ); 50 err = mailimf_message_parse( (char *) message, strlen( message ), &curTok, &result );
51 if ( err != MAILIMF_NO_ERROR ) return body; 51 if ( err != MAILIMF_NO_ERROR ) return body;
52 52
53 if ( result && result->msg_body && result->msg_body->bd_text ) { 53 if ( result && result->msg_body && result->msg_body->bd_text ) {
54 qDebug( "POP3: bodytext found" ); 54 qDebug( "POP3: bodytext found" );
55 // TODO: why does this line segfault???? gdb says segfault in strlen(), maybe a bug in libetpan. 55 // TODO: why does this line segfault???? gdb says segfault in strlen(), maybe a bug in libetpan.
56 body.setBodytext( QString( result->msg_body->bd_text ) ); 56 body.setBodytext( QString( result->msg_body->bd_text ) );
57 } 57 }
58 58
59 return body; 59 return body;
60} 60}
61 61
62void POP3wrapper::listMessages( QList<RecMail> &target ) 62void POP3wrapper::listMessages(const QString &, QList<RecMail> &target )
63{ 63{
64 int err = MAILPOP3_NO_ERROR; 64 int err = MAILPOP3_NO_ERROR;
65 char *header; 65 char *header;
66 size_t length; 66 size_t length;
67 carray *messages; 67 carray *messages;
68 68
69 login(); 69 login();
70 if (!m_pop3) return; 70 if (!m_pop3) return;
71 mailpop3_list( m_pop3, &messages ); 71 mailpop3_list( m_pop3, &messages );
72 72
73 for ( int i = carray_count( messages ); i > 0; i-- ) { 73 for ( int i = carray_count( messages ); i > 0; i-- ) {
74 mailpop3_msg_info *info = (mailpop3_msg_info *) carray_get( messages, i - 1 ); 74 mailpop3_msg_info *info = (mailpop3_msg_info *) carray_get( messages, i - 1 );
@@ -259,12 +259,31 @@ void POP3wrapper::login()
259 qDebug( "POP3: logged in!" ); 259 qDebug( "POP3: logged in!" );
260} 260}
261 261
262void POP3wrapper::logout() 262void POP3wrapper::logout()
263{ 263{
264 int err = MAILPOP3_NO_ERROR; 264 int err = MAILPOP3_NO_ERROR;
265 if ( m_pop3 == NULL ) return; 265 if ( m_pop3 == NULL ) return;
266 err = mailpop3_quit( m_pop3 ); 266 err = mailpop3_quit( m_pop3 );
267 mailpop3_free( m_pop3 ); 267 mailpop3_free( m_pop3 );
268 m_pop3 = NULL; 268 m_pop3 = NULL;
269} 269}
270 270
271
272QList<Folder>* POP3wrapper::listFolders()
273{
274 QList<Folder> * folders = new QList<Folder>();
275 folders->setAutoDelete( true );
276 Folder*inb=new Folder("INBOX");
277 folders->append(inb);
278 return folders;
279}
280
281QString POP3wrapper::fetchPart(const RecMail&,const QValueList<int>&,bool)
282{
283 return "";
284}
285
286QString POP3wrapper::fetchPart(const RecMail&,const RecPart&)
287{
288 return "";
289}
diff --git a/noncore/net/mail/libmailwrapper/pop3wrapper.h b/noncore/net/mail/libmailwrapper/pop3wrapper.h
index 995bed0..3b24564 100644
--- a/noncore/net/mail/libmailwrapper/pop3wrapper.h
+++ b/noncore/net/mail/libmailwrapper/pop3wrapper.h
@@ -1,38 +1,43 @@
1#ifndef __POP3WRAPPER 1#ifndef __POP3WRAPPER
2#define __POP3WRAPPER 2#define __POP3WRAPPER
3 3
4#include "mailwrapper.h" 4#include "mailwrapper.h"
5#include "abstractmail.h"
5 6
6class RecMail; 7class RecMail;
7class RecBody; 8class RecBody;
8struct mailpop3; 9struct mailpop3;
9 10
10class POP3wrapper : public QObject 11class POP3wrapper : public AbstractMail
11{ 12{
12 Q_OBJECT 13 Q_OBJECT
13 14
14public: 15public:
15 POP3wrapper( POP3account *a ); 16 POP3wrapper( POP3account *a );
16 virtual ~POP3wrapper(); 17 virtual ~POP3wrapper();
17 void listMessages( QList<RecMail> &target ); 18 /* mailbox will be ignored */
19 virtual void listMessages(const QString & mailbox, QList<RecMail> &target );
20 virtual QList<Folder>* listFolders();
21 virtual QString fetchPart(const RecMail&mail,const QValueList<int>&path,bool internal_call=false);
22 virtual QString fetchPart(const RecMail&mail,const RecPart&part);
23
18 RecBody fetchBody( const RecMail &mail ); 24 RecBody fetchBody( const RecMail &mail );
19 static void pop3_progress( size_t current, size_t maximum ); 25 static void pop3_progress( size_t current, size_t maximum );
20 26
21protected: 27protected:
22 void login(); 28 void login();
23 void logout(); 29 void logout();
24 30
25private: 31private:
26 RecMail *parseHeader( const char *header ); 32 RecMail *parseHeader( const char *header );
27 RecBody parseBody( const char *message ); 33 RecBody parseBody( const char *message );
28 QString parseMailboxList( mailimf_mailbox_list *list ); 34 QString parseMailboxList( mailimf_mailbox_list *list );
29 QString parseMailbox( mailimf_mailbox *box ); 35 QString parseMailbox( mailimf_mailbox *box );
30 QString parseGroup( mailimf_group *group ); 36 QString parseGroup( mailimf_group *group );
31 QString parseAddressList( mailimf_address_list *list ); 37 QString parseAddressList( mailimf_address_list *list );
32 QString parseDateTime( mailimf_date_time *date ); 38 QString parseDateTime( mailimf_date_time *date );
33 POP3account *account; 39 POP3account *account;
34 mailpop3 *m_pop3; 40 mailpop3 *m_pop3;
35
36}; 41};
37 42
38#endif 43#endif
diff --git a/noncore/net/mail/mail.pro b/noncore/net/mail/mail.pro
index 0e7cff6..e7519c6 100644
--- a/noncore/net/mail/mail.pro
+++ b/noncore/net/mail/mail.pro
@@ -5,41 +5,43 @@ HEADERS = defines.h \
5 settings.h \ 5 settings.h \
6 editaccounts.h \ 6 editaccounts.h \
7 mailwrapper.h \ 7 mailwrapper.h \
8 composemail.h \ 8 composemail.h \
9 accountview.h \ 9 accountview.h \
10 mainwindow.h \ 10 mainwindow.h \
11 viewmail.h \ 11 viewmail.h \
12 viewmailbase.h \ 12 viewmailbase.h \
13 opiemail.h \ 13 opiemail.h \
14 imapwrapper.h \ 14 imapwrapper.h \
15 mailtypes.h \ 15 mailtypes.h \
16 mailistviewitem.h \ 16 mailistviewitem.h \
17 pop3wrapper.h 17 pop3wrapper.h \
18 abstractmail.h
18 19
19 SOURCES = main.cpp \ 20 SOURCES = main.cpp \
20 opiemail.cpp \ 21 opiemail.cpp \
21 mainwindow.cpp \ 22 mainwindow.cpp \
22 accountview.cpp \ 23 accountview.cpp \
23 composemail.cpp \ 24 composemail.cpp \
24 mailwrapper.cpp \ 25 mailwrapper.cpp \
25 imapwrapper.cpp \ 26 imapwrapper.cpp \
26 addresspicker.cpp \ 27 addresspicker.cpp \
27 editaccounts.cpp \ 28 editaccounts.cpp \
28 logindialog.cpp \ 29 logindialog.cpp \
29 viewmail.cpp \ 30 viewmail.cpp \
30 viewmailbase.cpp \ 31 viewmailbase.cpp \
31 settings.cpp \ 32 settings.cpp \
32 mailtypes.cpp \ 33 mailtypes.cpp \
33 pop3wrapper.cpp 34 pop3wrapper.cpp \
35 abstractmail.cpp
34 36
35 INTERFACES = editaccountsui.ui \ 37 INTERFACES = editaccountsui.ui \
36 selectmailtypeui.ui \ 38 selectmailtypeui.ui \
37 imapconfigui.ui \ 39 imapconfigui.ui \
38 pop3configui.ui \ 40 pop3configui.ui \
39 nntpconfigui.ui \ 41 nntpconfigui.ui \
40 smtpconfigui.ui \ 42 smtpconfigui.ui \
41 addresspickerui.ui \ 43 addresspickerui.ui \
42 logindialogui.ui \ 44 logindialogui.ui \
43 composemailui.ui 45 composemailui.ui
44 46
45INCLUDEPATH += $(OPIEDIR)/include 47INCLUDEPATH += $(OPIEDIR)/include
diff --git a/noncore/net/mail/mainwindow.h b/noncore/net/mail/mainwindow.h
index 74bce5a..6c1cda0 100644
--- a/noncore/net/mail/mainwindow.h
+++ b/noncore/net/mail/mainwindow.h
@@ -9,25 +9,24 @@
9#include <qmenubar.h> 9#include <qmenubar.h>
10 10
11#include "accountview.h" 11#include "accountview.h"
12 12
13class RecMail; 13class RecMail;
14 14
15class MainWindow : public QMainWindow 15class MainWindow : public QMainWindow
16{ 16{
17 Q_OBJECT 17 Q_OBJECT
18 18
19public: 19public:
20 MainWindow( QWidget *parent = 0, const char *name = 0, WFlags flags = 0 ); 20 MainWindow( QWidget *parent = 0, const char *name = 0, WFlags flags = 0 );
21 static QString appName() { return QString::fromLatin1("opiemail"); }
22 21
23public slots: 22public slots:
24 void slotAdjustColumns(); 23 void slotAdjustColumns();
25 24
26protected slots: 25protected slots:
27 virtual void slotShowFolders( bool show ); 26 virtual void slotShowFolders( bool show );
28 virtual void refreshMailView(QList<RecMail>*); 27 virtual void refreshMailView(QList<RecMail>*);
29 virtual void displayMail(QListViewItem*); 28 virtual void displayMail(QListViewItem*);
30 void slotAdjustLayout(); 29 void slotAdjustLayout();
31 30
32protected: 31protected:
33 QToolBar *toolBar; 32 QToolBar *toolBar;
diff --git a/noncore/net/mail/opiemail.h b/noncore/net/mail/opiemail.h
index dcab47c..7bcd818 100644
--- a/noncore/net/mail/opiemail.h
+++ b/noncore/net/mail/opiemail.h
@@ -1,27 +1,25 @@
1#ifndef OPIEMAIL_H 1#ifndef OPIEMAIL_H
2#define OPIEMAIL_H 2#define OPIEMAIL_H
3 3
4#include "mainwindow.h" 4#include "mainwindow.h"
5#include "settings.h" 5#include "settings.h"
6 6
7class OpieMail : public MainWindow 7class OpieMail : public MainWindow
8{ 8{
9 Q_OBJECT 9 Q_OBJECT
10 10
11public: 11public:
12 OpieMail( QWidget *parent = 0, const char *name = 0, WFlags flags = 0 ); 12 OpieMail( QWidget *parent = 0, const char *name = 0, WFlags flags = 0 );
13 13 static QString appName() { return QString::fromLatin1("opiemail"); }
14 static QString appName() { return QString::fromLatin1("opiemail"); }
15
16protected slots: 14protected slots:
17 void slotComposeMail(); 15 void slotComposeMail();
18 void slotSendQueued(); 16 void slotSendQueued();
19 void slotSearchMails(); 17 void slotSearchMails();
20 void slotEditSettings(); 18 void slotEditSettings();
21 void slotEditAccounts(); 19 void slotEditAccounts();
22 20
23private: 21private:
24 Settings *settings; 22 Settings *settings;
25 23
26}; 24};
27 25
diff --git a/noncore/net/mail/pop3wrapper.cpp b/noncore/net/mail/pop3wrapper.cpp
index abb5a42..49c3b7a 100644
--- a/noncore/net/mail/pop3wrapper.cpp
+++ b/noncore/net/mail/pop3wrapper.cpp
@@ -50,25 +50,25 @@ RecBody POP3wrapper::parseBody( const char *message )
50 err = mailimf_message_parse( (char *) message, strlen( message ), &curTok, &result ); 50 err = mailimf_message_parse( (char *) message, strlen( message ), &curTok, &result );
51 if ( err != MAILIMF_NO_ERROR ) return body; 51 if ( err != MAILIMF_NO_ERROR ) return body;
52 52
53 if ( result && result->msg_body && result->msg_body->bd_text ) { 53 if ( result && result->msg_body && result->msg_body->bd_text ) {
54 qDebug( "POP3: bodytext found" ); 54 qDebug( "POP3: bodytext found" );
55 // TODO: why does this line segfault???? gdb says segfault in strlen(), maybe a bug in libetpan. 55 // TODO: why does this line segfault???? gdb says segfault in strlen(), maybe a bug in libetpan.
56 body.setBodytext( QString( result->msg_body->bd_text ) ); 56 body.setBodytext( QString( result->msg_body->bd_text ) );
57 } 57 }
58 58
59 return body; 59 return body;
60} 60}
61 61
62void POP3wrapper::listMessages( QList<RecMail> &target ) 62void POP3wrapper::listMessages(const QString &, QList<RecMail> &target )
63{ 63{
64 int err = MAILPOP3_NO_ERROR; 64 int err = MAILPOP3_NO_ERROR;
65 char *header; 65 char *header;
66 size_t length; 66 size_t length;
67 carray *messages; 67 carray *messages;
68 68
69 login(); 69 login();
70 if (!m_pop3) return; 70 if (!m_pop3) return;
71 mailpop3_list( m_pop3, &messages ); 71 mailpop3_list( m_pop3, &messages );
72 72
73 for ( int i = carray_count( messages ); i > 0; i-- ) { 73 for ( int i = carray_count( messages ); i > 0; i-- ) {
74 mailpop3_msg_info *info = (mailpop3_msg_info *) carray_get( messages, i - 1 ); 74 mailpop3_msg_info *info = (mailpop3_msg_info *) carray_get( messages, i - 1 );
@@ -259,12 +259,31 @@ void POP3wrapper::login()
259 qDebug( "POP3: logged in!" ); 259 qDebug( "POP3: logged in!" );
260} 260}
261 261
262void POP3wrapper::logout() 262void POP3wrapper::logout()
263{ 263{
264 int err = MAILPOP3_NO_ERROR; 264 int err = MAILPOP3_NO_ERROR;
265 if ( m_pop3 == NULL ) return; 265 if ( m_pop3 == NULL ) return;
266 err = mailpop3_quit( m_pop3 ); 266 err = mailpop3_quit( m_pop3 );
267 mailpop3_free( m_pop3 ); 267 mailpop3_free( m_pop3 );
268 m_pop3 = NULL; 268 m_pop3 = NULL;
269} 269}
270 270
271
272QList<Folder>* POP3wrapper::listFolders()
273{
274 QList<Folder> * folders = new QList<Folder>();
275 folders->setAutoDelete( true );
276 Folder*inb=new Folder("INBOX");
277 folders->append(inb);
278 return folders;
279}
280
281QString POP3wrapper::fetchPart(const RecMail&,const QValueList<int>&,bool)
282{
283 return "";
284}
285
286QString POP3wrapper::fetchPart(const RecMail&,const RecPart&)
287{
288 return "";
289}
diff --git a/noncore/net/mail/pop3wrapper.h b/noncore/net/mail/pop3wrapper.h
index 995bed0..3b24564 100644
--- a/noncore/net/mail/pop3wrapper.h
+++ b/noncore/net/mail/pop3wrapper.h
@@ -1,38 +1,43 @@
1#ifndef __POP3WRAPPER 1#ifndef __POP3WRAPPER
2#define __POP3WRAPPER 2#define __POP3WRAPPER
3 3
4#include "mailwrapper.h" 4#include "mailwrapper.h"
5#include "abstractmail.h"
5 6
6class RecMail; 7class RecMail;
7class RecBody; 8class RecBody;
8struct mailpop3; 9struct mailpop3;
9 10
10class POP3wrapper : public QObject 11class POP3wrapper : public AbstractMail
11{ 12{
12 Q_OBJECT 13 Q_OBJECT
13 14
14public: 15public:
15 POP3wrapper( POP3account *a ); 16 POP3wrapper( POP3account *a );
16 virtual ~POP3wrapper(); 17 virtual ~POP3wrapper();
17 void listMessages( QList<RecMail> &target ); 18 /* mailbox will be ignored */
19 virtual void listMessages(const QString & mailbox, QList<RecMail> &target );
20 virtual QList<Folder>* listFolders();
21 virtual QString fetchPart(const RecMail&mail,const QValueList<int>&path,bool internal_call=false);
22 virtual QString fetchPart(const RecMail&mail,const RecPart&part);
23
18 RecBody fetchBody( const RecMail &mail ); 24 RecBody fetchBody( const RecMail &mail );
19 static void pop3_progress( size_t current, size_t maximum ); 25 static void pop3_progress( size_t current, size_t maximum );
20 26
21protected: 27protected:
22 void login(); 28 void login();
23 void logout(); 29 void logout();
24 30
25private: 31private:
26 RecMail *parseHeader( const char *header ); 32 RecMail *parseHeader( const char *header );
27 RecBody parseBody( const char *message ); 33 RecBody parseBody( const char *message );
28 QString parseMailboxList( mailimf_mailbox_list *list ); 34 QString parseMailboxList( mailimf_mailbox_list *list );
29 QString parseMailbox( mailimf_mailbox *box ); 35 QString parseMailbox( mailimf_mailbox *box );
30 QString parseGroup( mailimf_group *group ); 36 QString parseGroup( mailimf_group *group );
31 QString parseAddressList( mailimf_address_list *list ); 37 QString parseAddressList( mailimf_address_list *list );
32 QString parseDateTime( mailimf_date_time *date ); 38 QString parseDateTime( mailimf_date_time *date );
33 POP3account *account; 39 POP3account *account;
34 mailpop3 *m_pop3; 40 mailpop3 *m_pop3;
35
36}; 41};
37 42
38#endif 43#endif