summaryrefslogtreecommitdiff
authoralwin <alwin>2003-12-08 22:20:44 (UTC)
committer alwin <alwin>2003-12-08 22:20:44 (UTC)
commit115bb2c722dc03c0491e2f1c49495a1ceb760000 (patch) (unidiff)
tree0c8dd795db536da485f85338bdbf9d888fbd37f2
parent760fc48703328d8254c60acd19dc9ab367f2a134 (diff)
downloadopie-115bb2c722dc03c0491e2f1c49495a1ceb760000.zip
opie-115bb2c722dc03c0491e2f1c49495a1ceb760000.tar.gz
opie-115bb2c722dc03c0491e2f1c49495a1ceb760000.tar.bz2
imap wrapper has now an own include file
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/accountview.cpp1
-rw-r--r--noncore/net/mail/accountview.h2
-rw-r--r--noncore/net/mail/imapwrapper.cpp2
-rw-r--r--noncore/net/mail/imapwrapper.h25
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.cpp2
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.h25
-rw-r--r--noncore/net/mail/libmailwrapper/mailwrapper.h19
-rw-r--r--noncore/net/mail/mail.pro3
-rw-r--r--noncore/net/mail/mailwrapper.h19
9 files changed, 57 insertions, 41 deletions
diff --git a/noncore/net/mail/accountview.cpp b/noncore/net/mail/accountview.cpp
index c6a44ab..a531976 100644
--- a/noncore/net/mail/accountview.cpp
+++ b/noncore/net/mail/accountview.cpp
@@ -1,110 +1,111 @@
1#include "accountview.h" 1#include "accountview.h"
2#include "imapwrapper.h"
2#include "defines.h" 3#include "defines.h"
3 4
4IMAPviewItem::IMAPviewItem( IMAPaccount *a, QListView *parent ) 5IMAPviewItem::IMAPviewItem( IMAPaccount *a, QListView *parent )
5 : AccountViewItem( parent ) 6 : AccountViewItem( parent )
6{ 7{
7 account = a; 8 account = a;
8 wrapper = new IMAPwrapper( account ); 9 wrapper = new IMAPwrapper( account );
9 setPixmap( 0, PIXMAP_IMAPFOLDER ); 10 setPixmap( 0, PIXMAP_IMAPFOLDER );
10 setText( 0, account->getAccountName() ); 11 setText( 0, account->getAccountName() );
11 setOpen( true ); 12 setOpen( true );
12} 13}
13 14
14IMAPviewItem::~IMAPviewItem() 15IMAPviewItem::~IMAPviewItem()
15{ 16{
16 delete wrapper; 17 delete wrapper;
17} 18}
18 19
19IMAPwrapper *IMAPviewItem::getWrapper() 20IMAPwrapper *IMAPviewItem::getWrapper()
20{ 21{
21 return wrapper; 22 return wrapper;
22} 23}
23 24
24void IMAPviewItem::refresh(Maillist&) 25void IMAPviewItem::refresh(Maillist&)
25{ 26{
26 QList<IMAPFolder> *folders = wrapper->listFolders(); 27 QList<IMAPFolder> *folders = wrapper->listFolders();
27 28
28 QListViewItem *child = firstChild(); 29 QListViewItem *child = firstChild();
29 while ( child ) { 30 while ( child ) {
30 QListViewItem *tmp = child; 31 QListViewItem *tmp = child;
31 child = child->nextSibling(); 32 child = child->nextSibling();
32 delete tmp; 33 delete tmp;
33 } 34 }
34 35
35 IMAPFolder *it; 36 IMAPFolder *it;
36 for ( it = folders->first(); it; it = folders->next() ) { 37 for ( it = folders->first(); it; it = folders->next() ) {
37 (void) new IMAPfolderItem( it, this ); 38 (void) new IMAPfolderItem( it, this );
38 } 39 }
39} 40}
40 41
41 42
42IMAPfolderItem::~IMAPfolderItem() 43IMAPfolderItem::~IMAPfolderItem()
43{ 44{
44 delete folder; 45 delete folder;
45} 46}
46 47
47IMAPfolderItem::IMAPfolderItem( IMAPFolder *folderInit, IMAPviewItem *parent ) 48IMAPfolderItem::IMAPfolderItem( IMAPFolder *folderInit, IMAPviewItem *parent )
48 : AccountViewItem( parent ) 49 : AccountViewItem( parent )
49{ 50{
50 folder = folderInit; 51 folder = folderInit;
51 imap = parent; 52 imap = parent;
52 setPixmap( 0, PIXMAP_IMAPFOLDER ); 53 setPixmap( 0, PIXMAP_IMAPFOLDER );
53 setText( 0, folder->getDisplayName() ); 54 setText( 0, folder->getDisplayName() );
54} 55}
55 56
56void IMAPfolderItem::refresh(Maillist&target) 57void IMAPfolderItem::refresh(Maillist&target)
57{ 58{
58 imap->getWrapper()->listMessages( folder->getName(),target ); 59 imap->getWrapper()->listMessages( folder->getName(),target );
59} 60}
60 61
61QString IMAPfolderItem::fetchBody(const RecMail&aMail) 62QString IMAPfolderItem::fetchBody(const RecMail&aMail)
62{ 63{
63 return imap->getWrapper()->fetchBody(folder->getName(),aMail); 64 return imap->getWrapper()->fetchBody(folder->getName(),aMail);
64} 65}
65 66
66AccountView::AccountView( QWidget *parent, const char *name, WFlags flags ) 67AccountView::AccountView( QWidget *parent, const char *name, WFlags flags )
67 : QListView( parent, name, flags ) 68 : QListView( parent, name, flags )
68{ 69{
69 connect( this, SIGNAL( clicked( QListViewItem * ) ), 70 connect( this, SIGNAL( clicked( QListViewItem * ) ),
70 SLOT( refresh( QListViewItem * ) ) ); 71 SLOT( refresh( QListViewItem * ) ) );
71} 72}
72 73
73void AccountView::populate( QList<Account> list ) 74void AccountView::populate( QList<Account> list )
74{ 75{
75 clear(); 76 clear();
76 77
77 Account *it; 78 Account *it;
78 for ( it = list.first(); it; it = list.next() ) { 79 for ( it = list.first(); it; it = list.next() ) {
79 if ( it->getType().compare( "IMAP" ) == 0 ) { 80 if ( it->getType().compare( "IMAP" ) == 0 ) {
80 IMAPaccount *imap = static_cast<IMAPaccount *>(it); 81 IMAPaccount *imap = static_cast<IMAPaccount *>(it);
81 qDebug( "added IMAP " + imap->getAccountName() ); 82 qDebug( "added IMAP " + imap->getAccountName() );
82 (void) new IMAPviewItem( imap, this ); 83 (void) new IMAPviewItem( imap, this );
83 } 84 }
84 } 85 }
85} 86}
86 87
87void AccountView::refresh(QListViewItem *item) { 88void AccountView::refresh(QListViewItem *item) {
88 qDebug("AccountView refresh..."); 89 qDebug("AccountView refresh...");
89 if ( item ) { 90 if ( item ) {
90 Maillist headerlist; 91 Maillist headerlist;
91 headerlist.setAutoDelete(true); 92 headerlist.setAutoDelete(true);
92 AccountViewItem *view = static_cast<AccountViewItem *>(item); 93 AccountViewItem *view = static_cast<AccountViewItem *>(item);
93 view->refresh(headerlist); 94 view->refresh(headerlist);
94 emit refreshMailview(&headerlist); 95 emit refreshMailview(&headerlist);
95 } 96 }
96} 97}
97 98
98void AccountView::refreshAll() 99void AccountView::refreshAll()
99{ 100{
100 101
101} 102}
102 103
103QString AccountView::fetchBody(const RecMail&aMail) 104QString AccountView::fetchBody(const RecMail&aMail)
104{ 105{
105 QString Body; 106 QString Body;
106 QListViewItem*item = selectedItem (); 107 QListViewItem*item = selectedItem ();
107 if (!item) return Body; 108 if (!item) return Body;
108 AccountViewItem *view = static_cast<AccountViewItem *>(item); 109 AccountViewItem *view = static_cast<AccountViewItem *>(item);
109 return view->fetchBody(aMail); 110 return view->fetchBody(aMail);
110} 111}
diff --git a/noncore/net/mail/accountview.h b/noncore/net/mail/accountview.h
index 14d8efa..2bc8023 100644
--- a/noncore/net/mail/accountview.h
+++ b/noncore/net/mail/accountview.h
@@ -1,67 +1,69 @@
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 5
6#include "settings.h" 6#include "settings.h"
7#include "mailwrapper.h" 7#include "mailwrapper.h"
8 8
9class IMAPwrapper;
10
9class AccountViewItem : public QListViewItem 11class AccountViewItem : public QListViewItem
10{ 12{
11 13
12public: 14public:
13 AccountViewItem( QListView *parent ) : QListViewItem( parent ) {} 15 AccountViewItem( QListView *parent ) : QListViewItem( parent ) {}
14 AccountViewItem( QListViewItem *parent ) : QListViewItem( parent ) {} 16 AccountViewItem( QListViewItem *parent ) : QListViewItem( parent ) {}
15 virtual void refresh(Maillist&)=0; 17 virtual void refresh(Maillist&)=0;
16 virtual QString fetchBody(const RecMail&)=0; 18 virtual QString fetchBody(const RecMail&)=0;
17}; 19};
18 20
19class IMAPviewItem : public AccountViewItem 21class IMAPviewItem : public AccountViewItem
20{ 22{
21 23
22public: 24public:
23 IMAPviewItem( IMAPaccount *a, QListView *parent ); 25 IMAPviewItem( IMAPaccount *a, QListView *parent );
24 ~IMAPviewItem(); 26 ~IMAPviewItem();
25 virtual void refresh(Maillist&); 27 virtual void refresh(Maillist&);
26 virtual QString fetchBody(const RecMail&){return "";} 28 virtual QString fetchBody(const RecMail&){return "";}
27 IMAPwrapper *getWrapper(); 29 IMAPwrapper *getWrapper();
28 30
29private: 31private:
30 IMAPaccount *account; 32 IMAPaccount *account;
31 IMAPwrapper *wrapper; 33 IMAPwrapper *wrapper;
32 34
33}; 35};
34 36
35class IMAPfolderItem : public AccountViewItem 37class IMAPfolderItem : public AccountViewItem
36{ 38{
37 39
38public: 40public:
39 IMAPfolderItem( IMAPFolder *folder, IMAPviewItem *parent ); 41 IMAPfolderItem( IMAPFolder *folder, IMAPviewItem *parent );
40 ~IMAPfolderItem(); 42 ~IMAPfolderItem();
41 virtual void refresh(Maillist&); 43 virtual void refresh(Maillist&);
42 virtual QString fetchBody(const RecMail&); 44 virtual QString fetchBody(const RecMail&);
43 45
44private: 46private:
45 IMAPFolder *folder; 47 IMAPFolder *folder;
46 IMAPviewItem *imap; 48 IMAPviewItem *imap;
47 49
48}; 50};
49 51
50class AccountView : public QListView 52class AccountView : public QListView
51{ 53{
52 Q_OBJECT 54 Q_OBJECT
53 55
54public: 56public:
55 AccountView( QWidget *parent = 0, const char *name = 0, WFlags flags = 0 ); 57 AccountView( QWidget *parent = 0, const char *name = 0, WFlags flags = 0 );
56 void populate( QList<Account> list ); 58 void populate( QList<Account> list );
57 QString fetchBody(const RecMail&aMail); 59 QString fetchBody(const RecMail&aMail);
58 60
59public slots: 61public slots:
60 void refreshAll(); 62 void refreshAll();
61 void refresh(QListViewItem *item); 63 void refresh(QListViewItem *item);
62 64
63signals: 65signals:
64 void refreshMailview(Maillist*); 66 void refreshMailview(Maillist*);
65}; 67};
66 68
67#endif 69#endif
diff --git a/noncore/net/mail/imapwrapper.cpp b/noncore/net/mail/imapwrapper.cpp
index fc12947..7b78499 100644
--- a/noncore/net/mail/imapwrapper.cpp
+++ b/noncore/net/mail/imapwrapper.cpp
@@ -1,196 +1,196 @@
1 1
2#include <stdlib.h> 2#include <stdlib.h>
3 3
4#include "mailwrapper.h" 4#include "imapwrapper.h"
5 5
6 6
7IMAPwrapper::IMAPwrapper( IMAPaccount *a ) 7IMAPwrapper::IMAPwrapper( IMAPaccount *a )
8{ 8{
9 account = a; 9 account = a;
10} 10}
11 11
12void imap_progress( size_t current, size_t maximum ) 12void imap_progress( size_t current, size_t maximum )
13{ 13{
14 qDebug( "IMAP: %i of %i", current, maximum ); 14 qDebug( "IMAP: %i of %i", current, maximum );
15} 15}
16 16
17void IMAPwrapper::listMessages(const QString&mailbox,Maillist&target ) 17void IMAPwrapper::listMessages(const QString&mailbox,Maillist&target )
18{ 18{
19 const char *server, *user, *pass, *mb; 19 const char *server, *user, *pass, *mb;
20 uint16_t port; 20 uint16_t port;
21 int err = MAILIMAP_NO_ERROR; 21 int err = MAILIMAP_NO_ERROR;
22 clist *result; 22 clist *result;
23 clistcell *current; 23 clistcell *current;
24 mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate; 24 mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate;
25 mailimap_fetch_type *fetchType; 25 mailimap_fetch_type *fetchType;
26 mailimap_set *set; 26 mailimap_set *set;
27 27
28 mb = mailbox.latin1(); 28 mb = mailbox.latin1();
29 server = account->getServer().latin1(); 29 server = account->getServer().latin1();
30 port = account->getPort().toUInt(); 30 port = account->getPort().toUInt();
31 user = account->getUser().latin1(); 31 user = account->getUser().latin1();
32 pass = account->getPassword().latin1(); 32 pass = account->getPassword().latin1();
33 33
34 mailimap *imap = mailimap_new( 20, &imap_progress ); 34 mailimap *imap = mailimap_new( 20, &imap_progress );
35 if ( imap == NULL ) { 35 if ( imap == NULL ) {
36 qDebug("IMAP Memory error"); 36 qDebug("IMAP Memory error");
37 return; 37 return;
38 } 38 }
39 39
40 /* connect */ 40 /* connect */
41 err = mailimap_socket_connect( imap, (char*)server, port ); 41 err = mailimap_socket_connect( imap, (char*)server, port );
42 if ( err != MAILIMAP_NO_ERROR && 42 if ( err != MAILIMAP_NO_ERROR &&
43 err != MAILIMAP_NO_ERROR_AUTHENTICATED && 43 err != MAILIMAP_NO_ERROR_AUTHENTICATED &&
44 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { 44 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) {
45 qDebug("error connecting server: %s",imap->response); 45 qDebug("error connecting server: %s",imap->response);
46 mailimap_free( imap ); 46 mailimap_free( imap );
47 return; 47 return;
48 } 48 }
49 49
50 /* login */ 50 /* login */
51 err = mailimap_login_simple( imap, (char*)user, (char*)pass ); 51 err = mailimap_login_simple( imap, (char*)user, (char*)pass );
52 if ( err != MAILIMAP_NO_ERROR ) { 52 if ( err != MAILIMAP_NO_ERROR ) {
53 qDebug("error logging in imap: %s",imap->response); 53 qDebug("error logging in imap: %s",imap->response);
54 err = mailimap_close( imap ); 54 err = mailimap_close( imap );
55 mailimap_free( imap ); 55 mailimap_free( imap );
56 return; 56 return;
57 } 57 }
58 58
59 /* select mailbox READONLY for operations */ 59 /* select mailbox READONLY for operations */
60 err = mailimap_examine( imap, (char*)mb); 60 err = mailimap_examine( imap, (char*)mb);
61 if ( err != MAILIMAP_NO_ERROR ) { 61 if ( err != MAILIMAP_NO_ERROR ) {
62 qDebug("error selecting mailbox: %s",imap->response); 62 qDebug("error selecting mailbox: %s",imap->response);
63 err = mailimap_logout( imap ); 63 err = mailimap_logout( imap );
64 err = mailimap_close( imap ); 64 err = mailimap_close( imap );
65 mailimap_free( imap ); 65 mailimap_free( imap );
66 return; 66 return;
67 } 67 }
68 68
69 int last = imap->selection_info->exists; 69 int last = imap->selection_info->exists;
70 if (last == 0) { 70 if (last == 0) {
71 qDebug("mailbox has no mails"); 71 qDebug("mailbox has no mails");
72 err = mailimap_logout( imap ); 72 err = mailimap_logout( imap );
73 err = mailimap_close( imap ); 73 err = mailimap_close( imap );
74 mailimap_free( imap ); 74 mailimap_free( imap );
75 return; 75 return;
76 } 76 }
77 77
78 78
79 result = clist_new(); 79 result = clist_new();
80 /* the range has to start at 1!!! not with 0!!!! */ 80 /* the range has to start at 1!!! not with 0!!!! */
81 set = mailimap_set_new_interval( 1, last ); 81 set = mailimap_set_new_interval( 1, last );
82 fetchAtt = mailimap_fetch_att_new_envelope(); 82 fetchAtt = mailimap_fetch_att_new_envelope();
83 fetchAttFlags = mailimap_fetch_att_new_flags(); 83 fetchAttFlags = mailimap_fetch_att_new_flags();
84 fetchAttDate = mailimap_fetch_att_new_internaldate(); 84 fetchAttDate = mailimap_fetch_att_new_internaldate();
85 85
86 //fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 86 //fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
87 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 87 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
88 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAtt); 88 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAtt);
89 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttFlags); 89 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttFlags);
90 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttDate); 90 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttDate);
91 91
92 err = mailimap_fetch( imap, set, fetchType, &result ); 92 err = mailimap_fetch( imap, set, fetchType, &result );
93 mailimap_set_free( set ); 93 mailimap_set_free( set );
94 /* cleans up the fetch_att's too! */ 94 /* cleans up the fetch_att's too! */
95 mailimap_fetch_type_free( fetchType ); 95 mailimap_fetch_type_free( fetchType );
96 96
97 QString date,subject,from; 97 QString date,subject,from;
98 98
99 if ( err == MAILIMAP_NO_ERROR ) { 99 if ( err == MAILIMAP_NO_ERROR ) {
100 current = clist_begin(result); 100 current = clist_begin(result);
101 mailimap_msg_att * msg_att; 101 mailimap_msg_att * msg_att;
102 int i = 0; 102 int i = 0;
103 while ( current != 0 ) { 103 while ( current != 0 ) {
104 ++i; 104 ++i;
105 msg_att = (mailimap_msg_att*)current->data; 105 msg_att = (mailimap_msg_att*)current->data;
106 RecMail*m = parse_list_result(msg_att); 106 RecMail*m = parse_list_result(msg_att);
107 if (m) { 107 if (m) {
108 m->setNumber(i); 108 m->setNumber(i);
109 target.append(m); 109 target.append(m);
110 } 110 }
111 current = current->next; 111 current = current->next;
112 } 112 }
113 } else { 113 } else {
114 qDebug("Error fetching headers: %s",imap->response); 114 qDebug("Error fetching headers: %s",imap->response);
115 } 115 }
116 116
117 err = mailimap_logout( imap ); 117 err = mailimap_logout( imap );
118 err = mailimap_close( imap ); 118 err = mailimap_close( imap );
119 clist_free(result); 119 clist_free(result);
120 mailimap_free( imap ); 120 mailimap_free( imap );
121} 121}
122 122
123QList<IMAPFolder>* IMAPwrapper::listFolders() 123QList<IMAPFolder>* IMAPwrapper::listFolders()
124{ 124{
125 const char *server, *user, *pass, *path, *mask; 125 const char *server, *user, *pass, *path, *mask;
126 uint16_t port; 126 uint16_t port;
127 int err = MAILIMAP_NO_ERROR; 127 int err = MAILIMAP_NO_ERROR;
128 clist *result; 128 clist *result;
129 clistcell *current; 129 clistcell *current;
130 130
131 QList<IMAPFolder> * folders = new QList<IMAPFolder>(); 131 QList<IMAPFolder> * folders = new QList<IMAPFolder>();
132 folders->setAutoDelete( true ); 132 folders->setAutoDelete( true );
133 133
134 server = account->getServer().latin1(); 134 server = account->getServer().latin1();
135 port = account->getPort().toUInt(); 135 port = account->getPort().toUInt();
136 user = account->getUser().latin1(); 136 user = account->getUser().latin1();
137 pass = account->getPassword().latin1(); 137 pass = account->getPassword().latin1();
138 path = account->getPrefix().latin1(); 138 path = account->getPrefix().latin1();
139 139
140 mailimap *imap = mailimap_new( 20, &imap_progress ); 140 mailimap *imap = mailimap_new( 20, &imap_progress );
141 if ( imap == NULL ) { 141 if ( imap == NULL ) {
142 qDebug("error mailimap_new"); 142 qDebug("error mailimap_new");
143 return folders; 143 return folders;
144 } 144 }
145 145
146 err = mailimap_socket_connect( imap, (char*)server, port ); 146 err = mailimap_socket_connect( imap, (char*)server, port );
147 if ( err != MAILIMAP_NO_ERROR && 147 if ( err != MAILIMAP_NO_ERROR &&
148 err != MAILIMAP_NO_ERROR_AUTHENTICATED && 148 err != MAILIMAP_NO_ERROR_AUTHENTICATED &&
149 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { 149 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) {
150 mailimap_free(imap); 150 mailimap_free(imap);
151 qDebug("error imap_socket_connect: %s",imap->response); 151 qDebug("error imap_socket_connect: %s",imap->response);
152 return folders; 152 return folders;
153 } 153 }
154 154
155 err = mailimap_login_simple( imap, (char*)user, (char*)pass ); 155 err = mailimap_login_simple( imap, (char*)user, (char*)pass );
156 if ( err != MAILIMAP_NO_ERROR ) { 156 if ( err != MAILIMAP_NO_ERROR ) {
157 mailimap_free(imap); 157 mailimap_free(imap);
158 qDebug("error logging in: %s",imap->response); 158 qDebug("error logging in: %s",imap->response);
159 return folders; 159 return folders;
160 } 160 }
161/* 161/*
162 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 162 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
163 * We must not forget to filter them out in next loop! 163 * We must not forget to filter them out in next loop!
164 * it seems like ugly code. and yes - it is ugly code. but the best way. 164 * it seems like ugly code. and yes - it is ugly code. but the best way.
165 */ 165 */
166 QString temp; 166 QString temp;
167 mask = "INBOX" ; 167 mask = "INBOX" ;
168 result = clist_new(); 168 result = clist_new();
169 mailimap_mailbox_list *list; 169 mailimap_mailbox_list *list;
170 err = mailimap_list( imap, (char*)"", (char*)mask, &result ); 170 err = mailimap_list( imap, (char*)"", (char*)mask, &result );
171 if ( err == MAILIMAP_NO_ERROR ) { 171 if ( err == MAILIMAP_NO_ERROR ) {
172 current = result->first; 172 current = result->first;
173 for ( int i = result->count; i > 0; i-- ) { 173 for ( int i = result->count; i > 0; i-- ) {
174 list = (mailimap_mailbox_list *) current->data; 174 list = (mailimap_mailbox_list *) current->data;
175 // it is better use the deep copy mechanism of qt itself 175 // it is better use the deep copy mechanism of qt itself
176 // instead of using strdup! 176 // instead of using strdup!
177 temp = list->mb; 177 temp = list->mb;
178 folders->append( new IMAPFolder(temp)); 178 folders->append( new IMAPFolder(temp));
179 current = current->next; 179 current = current->next;
180 } 180 }
181 } else { 181 } else {
182 qDebug("error fetching folders: %s",imap->response); 182 qDebug("error fetching folders: %s",imap->response);
183 } 183 }
184 mailimap_list_result_free( result ); 184 mailimap_list_result_free( result );
185 185
186/* 186/*
187 * second stage - get the other then inbox folders 187 * second stage - get the other then inbox folders
188 */ 188 */
189 mask = "*" ; 189 mask = "*" ;
190 result = clist_new(); 190 result = clist_new();
191 err = mailimap_list( imap, (char*)path, (char*)mask, &result ); 191 err = mailimap_list( imap, (char*)path, (char*)mask, &result );
192 if ( err == MAILIMAP_NO_ERROR ) { 192 if ( err == MAILIMAP_NO_ERROR ) {
193 current = result->first; 193 current = result->first;
194 for ( int i = result->count; i > 0; i-- ) { 194 for ( int i = result->count; i > 0; i-- ) {
195 list = (mailimap_mailbox_list *) current->data; 195 list = (mailimap_mailbox_list *) current->data;
196 // it is better use the deep copy mechanism of qt itself 196 // it is better use the deep copy mechanism of qt itself
diff --git a/noncore/net/mail/imapwrapper.h b/noncore/net/mail/imapwrapper.h
new file mode 100644
index 0000000..65c36e0
--- a/dev/null
+++ b/noncore/net/mail/imapwrapper.h
@@ -0,0 +1,25 @@
1#ifndef __IMAPWRAPPER
2#define __IMAPWRAPPER
3
4#include "mailwrapper.h"
5#include <libetpan/mailimap.h>
6
7class IMAPwrapper : public QObject
8{
9 Q_OBJECT
10
11public:
12 IMAPwrapper( IMAPaccount *a );
13 QList<IMAPFolder>* listFolders();
14 void listMessages(const QString & mailbox,Maillist&target );
15 QString fetchBody(const QString & mailbox,const RecMail&mail);
16
17protected:
18 RecMail*parse_list_result(mailimap_msg_att*);
19
20private:
21 IMAPaccount *account;
22
23};
24
25#endif
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
index fc12947..7b78499 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
@@ -1,196 +1,196 @@
1 1
2#include <stdlib.h> 2#include <stdlib.h>
3 3
4#include "mailwrapper.h" 4#include "imapwrapper.h"
5 5
6 6
7IMAPwrapper::IMAPwrapper( IMAPaccount *a ) 7IMAPwrapper::IMAPwrapper( IMAPaccount *a )
8{ 8{
9 account = a; 9 account = a;
10} 10}
11 11
12void imap_progress( size_t current, size_t maximum ) 12void imap_progress( size_t current, size_t maximum )
13{ 13{
14 qDebug( "IMAP: %i of %i", current, maximum ); 14 qDebug( "IMAP: %i of %i", current, maximum );
15} 15}
16 16
17void IMAPwrapper::listMessages(const QString&mailbox,Maillist&target ) 17void IMAPwrapper::listMessages(const QString&mailbox,Maillist&target )
18{ 18{
19 const char *server, *user, *pass, *mb; 19 const char *server, *user, *pass, *mb;
20 uint16_t port; 20 uint16_t port;
21 int err = MAILIMAP_NO_ERROR; 21 int err = MAILIMAP_NO_ERROR;
22 clist *result; 22 clist *result;
23 clistcell *current; 23 clistcell *current;
24 mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate; 24 mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate;
25 mailimap_fetch_type *fetchType; 25 mailimap_fetch_type *fetchType;
26 mailimap_set *set; 26 mailimap_set *set;
27 27
28 mb = mailbox.latin1(); 28 mb = mailbox.latin1();
29 server = account->getServer().latin1(); 29 server = account->getServer().latin1();
30 port = account->getPort().toUInt(); 30 port = account->getPort().toUInt();
31 user = account->getUser().latin1(); 31 user = account->getUser().latin1();
32 pass = account->getPassword().latin1(); 32 pass = account->getPassword().latin1();
33 33
34 mailimap *imap = mailimap_new( 20, &imap_progress ); 34 mailimap *imap = mailimap_new( 20, &imap_progress );
35 if ( imap == NULL ) { 35 if ( imap == NULL ) {
36 qDebug("IMAP Memory error"); 36 qDebug("IMAP Memory error");
37 return; 37 return;
38 } 38 }
39 39
40 /* connect */ 40 /* connect */
41 err = mailimap_socket_connect( imap, (char*)server, port ); 41 err = mailimap_socket_connect( imap, (char*)server, port );
42 if ( err != MAILIMAP_NO_ERROR && 42 if ( err != MAILIMAP_NO_ERROR &&
43 err != MAILIMAP_NO_ERROR_AUTHENTICATED && 43 err != MAILIMAP_NO_ERROR_AUTHENTICATED &&
44 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { 44 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) {
45 qDebug("error connecting server: %s",imap->response); 45 qDebug("error connecting server: %s",imap->response);
46 mailimap_free( imap ); 46 mailimap_free( imap );
47 return; 47 return;
48 } 48 }
49 49
50 /* login */ 50 /* login */
51 err = mailimap_login_simple( imap, (char*)user, (char*)pass ); 51 err = mailimap_login_simple( imap, (char*)user, (char*)pass );
52 if ( err != MAILIMAP_NO_ERROR ) { 52 if ( err != MAILIMAP_NO_ERROR ) {
53 qDebug("error logging in imap: %s",imap->response); 53 qDebug("error logging in imap: %s",imap->response);
54 err = mailimap_close( imap ); 54 err = mailimap_close( imap );
55 mailimap_free( imap ); 55 mailimap_free( imap );
56 return; 56 return;
57 } 57 }
58 58
59 /* select mailbox READONLY for operations */ 59 /* select mailbox READONLY for operations */
60 err = mailimap_examine( imap, (char*)mb); 60 err = mailimap_examine( imap, (char*)mb);
61 if ( err != MAILIMAP_NO_ERROR ) { 61 if ( err != MAILIMAP_NO_ERROR ) {
62 qDebug("error selecting mailbox: %s",imap->response); 62 qDebug("error selecting mailbox: %s",imap->response);
63 err = mailimap_logout( imap ); 63 err = mailimap_logout( imap );
64 err = mailimap_close( imap ); 64 err = mailimap_close( imap );
65 mailimap_free( imap ); 65 mailimap_free( imap );
66 return; 66 return;
67 } 67 }
68 68
69 int last = imap->selection_info->exists; 69 int last = imap->selection_info->exists;
70 if (last == 0) { 70 if (last == 0) {
71 qDebug("mailbox has no mails"); 71 qDebug("mailbox has no mails");
72 err = mailimap_logout( imap ); 72 err = mailimap_logout( imap );
73 err = mailimap_close( imap ); 73 err = mailimap_close( imap );
74 mailimap_free( imap ); 74 mailimap_free( imap );
75 return; 75 return;
76 } 76 }
77 77
78 78
79 result = clist_new(); 79 result = clist_new();
80 /* the range has to start at 1!!! not with 0!!!! */ 80 /* the range has to start at 1!!! not with 0!!!! */
81 set = mailimap_set_new_interval( 1, last ); 81 set = mailimap_set_new_interval( 1, last );
82 fetchAtt = mailimap_fetch_att_new_envelope(); 82 fetchAtt = mailimap_fetch_att_new_envelope();
83 fetchAttFlags = mailimap_fetch_att_new_flags(); 83 fetchAttFlags = mailimap_fetch_att_new_flags();
84 fetchAttDate = mailimap_fetch_att_new_internaldate(); 84 fetchAttDate = mailimap_fetch_att_new_internaldate();
85 85
86 //fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); 86 //fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
87 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 87 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
88 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAtt); 88 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAtt);
89 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttFlags); 89 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttFlags);
90 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttDate); 90 mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttDate);
91 91
92 err = mailimap_fetch( imap, set, fetchType, &result ); 92 err = mailimap_fetch( imap, set, fetchType, &result );
93 mailimap_set_free( set ); 93 mailimap_set_free( set );
94 /* cleans up the fetch_att's too! */ 94 /* cleans up the fetch_att's too! */
95 mailimap_fetch_type_free( fetchType ); 95 mailimap_fetch_type_free( fetchType );
96 96
97 QString date,subject,from; 97 QString date,subject,from;
98 98
99 if ( err == MAILIMAP_NO_ERROR ) { 99 if ( err == MAILIMAP_NO_ERROR ) {
100 current = clist_begin(result); 100 current = clist_begin(result);
101 mailimap_msg_att * msg_att; 101 mailimap_msg_att * msg_att;
102 int i = 0; 102 int i = 0;
103 while ( current != 0 ) { 103 while ( current != 0 ) {
104 ++i; 104 ++i;
105 msg_att = (mailimap_msg_att*)current->data; 105 msg_att = (mailimap_msg_att*)current->data;
106 RecMail*m = parse_list_result(msg_att); 106 RecMail*m = parse_list_result(msg_att);
107 if (m) { 107 if (m) {
108 m->setNumber(i); 108 m->setNumber(i);
109 target.append(m); 109 target.append(m);
110 } 110 }
111 current = current->next; 111 current = current->next;
112 } 112 }
113 } else { 113 } else {
114 qDebug("Error fetching headers: %s",imap->response); 114 qDebug("Error fetching headers: %s",imap->response);
115 } 115 }
116 116
117 err = mailimap_logout( imap ); 117 err = mailimap_logout( imap );
118 err = mailimap_close( imap ); 118 err = mailimap_close( imap );
119 clist_free(result); 119 clist_free(result);
120 mailimap_free( imap ); 120 mailimap_free( imap );
121} 121}
122 122
123QList<IMAPFolder>* IMAPwrapper::listFolders() 123QList<IMAPFolder>* IMAPwrapper::listFolders()
124{ 124{
125 const char *server, *user, *pass, *path, *mask; 125 const char *server, *user, *pass, *path, *mask;
126 uint16_t port; 126 uint16_t port;
127 int err = MAILIMAP_NO_ERROR; 127 int err = MAILIMAP_NO_ERROR;
128 clist *result; 128 clist *result;
129 clistcell *current; 129 clistcell *current;
130 130
131 QList<IMAPFolder> * folders = new QList<IMAPFolder>(); 131 QList<IMAPFolder> * folders = new QList<IMAPFolder>();
132 folders->setAutoDelete( true ); 132 folders->setAutoDelete( true );
133 133
134 server = account->getServer().latin1(); 134 server = account->getServer().latin1();
135 port = account->getPort().toUInt(); 135 port = account->getPort().toUInt();
136 user = account->getUser().latin1(); 136 user = account->getUser().latin1();
137 pass = account->getPassword().latin1(); 137 pass = account->getPassword().latin1();
138 path = account->getPrefix().latin1(); 138 path = account->getPrefix().latin1();
139 139
140 mailimap *imap = mailimap_new( 20, &imap_progress ); 140 mailimap *imap = mailimap_new( 20, &imap_progress );
141 if ( imap == NULL ) { 141 if ( imap == NULL ) {
142 qDebug("error mailimap_new"); 142 qDebug("error mailimap_new");
143 return folders; 143 return folders;
144 } 144 }
145 145
146 err = mailimap_socket_connect( imap, (char*)server, port ); 146 err = mailimap_socket_connect( imap, (char*)server, port );
147 if ( err != MAILIMAP_NO_ERROR && 147 if ( err != MAILIMAP_NO_ERROR &&
148 err != MAILIMAP_NO_ERROR_AUTHENTICATED && 148 err != MAILIMAP_NO_ERROR_AUTHENTICATED &&
149 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { 149 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) {
150 mailimap_free(imap); 150 mailimap_free(imap);
151 qDebug("error imap_socket_connect: %s",imap->response); 151 qDebug("error imap_socket_connect: %s",imap->response);
152 return folders; 152 return folders;
153 } 153 }
154 154
155 err = mailimap_login_simple( imap, (char*)user, (char*)pass ); 155 err = mailimap_login_simple( imap, (char*)user, (char*)pass );
156 if ( err != MAILIMAP_NO_ERROR ) { 156 if ( err != MAILIMAP_NO_ERROR ) {
157 mailimap_free(imap); 157 mailimap_free(imap);
158 qDebug("error logging in: %s",imap->response); 158 qDebug("error logging in: %s",imap->response);
159 return folders; 159 return folders;
160 } 160 }
161/* 161/*
162 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 162 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
163 * We must not forget to filter them out in next loop! 163 * We must not forget to filter them out in next loop!
164 * it seems like ugly code. and yes - it is ugly code. but the best way. 164 * it seems like ugly code. and yes - it is ugly code. but the best way.
165 */ 165 */
166 QString temp; 166 QString temp;
167 mask = "INBOX" ; 167 mask = "INBOX" ;
168 result = clist_new(); 168 result = clist_new();
169 mailimap_mailbox_list *list; 169 mailimap_mailbox_list *list;
170 err = mailimap_list( imap, (char*)"", (char*)mask, &result ); 170 err = mailimap_list( imap, (char*)"", (char*)mask, &result );
171 if ( err == MAILIMAP_NO_ERROR ) { 171 if ( err == MAILIMAP_NO_ERROR ) {
172 current = result->first; 172 current = result->first;
173 for ( int i = result->count; i > 0; i-- ) { 173 for ( int i = result->count; i > 0; i-- ) {
174 list = (mailimap_mailbox_list *) current->data; 174 list = (mailimap_mailbox_list *) current->data;
175 // it is better use the deep copy mechanism of qt itself 175 // it is better use the deep copy mechanism of qt itself
176 // instead of using strdup! 176 // instead of using strdup!
177 temp = list->mb; 177 temp = list->mb;
178 folders->append( new IMAPFolder(temp)); 178 folders->append( new IMAPFolder(temp));
179 current = current->next; 179 current = current->next;
180 } 180 }
181 } else { 181 } else {
182 qDebug("error fetching folders: %s",imap->response); 182 qDebug("error fetching folders: %s",imap->response);
183 } 183 }
184 mailimap_list_result_free( result ); 184 mailimap_list_result_free( result );
185 185
186/* 186/*
187 * second stage - get the other then inbox folders 187 * second stage - get the other then inbox folders
188 */ 188 */
189 mask = "*" ; 189 mask = "*" ;
190 result = clist_new(); 190 result = clist_new();
191 err = mailimap_list( imap, (char*)path, (char*)mask, &result ); 191 err = mailimap_list( imap, (char*)path, (char*)mask, &result );
192 if ( err == MAILIMAP_NO_ERROR ) { 192 if ( err == MAILIMAP_NO_ERROR ) {
193 current = result->first; 193 current = result->first;
194 for ( int i = result->count; i > 0; i-- ) { 194 for ( int i = result->count; i > 0; i-- ) {
195 list = (mailimap_mailbox_list *) current->data; 195 list = (mailimap_mailbox_list *) current->data;
196 // it is better use the deep copy mechanism of qt itself 196 // it is better use the deep copy mechanism of qt itself
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.h b/noncore/net/mail/libmailwrapper/imapwrapper.h
new file mode 100644
index 0000000..65c36e0
--- a/dev/null
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.h
@@ -0,0 +1,25 @@
1#ifndef __IMAPWRAPPER
2#define __IMAPWRAPPER
3
4#include "mailwrapper.h"
5#include <libetpan/mailimap.h>
6
7class IMAPwrapper : public QObject
8{
9 Q_OBJECT
10
11public:
12 IMAPwrapper( IMAPaccount *a );
13 QList<IMAPFolder>* listFolders();
14 void listMessages(const QString & mailbox,Maillist&target );
15 QString fetchBody(const QString & mailbox,const RecMail&mail);
16
17protected:
18 RecMail*parse_list_result(mailimap_msg_att*);
19
20private:
21 IMAPaccount *account;
22
23};
24
25#endif
diff --git a/noncore/net/mail/libmailwrapper/mailwrapper.h b/noncore/net/mail/libmailwrapper/mailwrapper.h
index f45eab7..955a8e2 100644
--- a/noncore/net/mail/libmailwrapper/mailwrapper.h
+++ b/noncore/net/mail/libmailwrapper/mailwrapper.h
@@ -1,183 +1,164 @@
1#ifndef MAILWRAPPER_H 1#ifndef MAILWRAPPER_H
2#define MAILWRAPPER_H 2#define MAILWRAPPER_H
3 3
4#include <qpe/applnk.h> 4#include <qpe/applnk.h>
5 5
6#include <libetpan/mailmime.h> 6#include <libetpan/mailmime.h>
7#include <libetpan/mailimf.h> 7#include <libetpan/mailimf.h>
8#include <libetpan/mailsmtp.h> 8#include <libetpan/mailsmtp.h>
9#include <libetpan/mailimap.h>
10#include <libetpan/mailstorage.h> 9#include <libetpan/mailstorage.h>
11#include <libetpan/maildriver.h> 10#include <libetpan/maildriver.h>
12#include <qbitarray.h> 11#include <qbitarray.h>
13#include <qdatetime.h> 12#include <qdatetime.h>
14 13
15#include "settings.h" 14#include "settings.h"
16 15
17class Attachment 16class Attachment
18{ 17{
19public: 18public:
20 Attachment( DocLnk lnk ); 19 Attachment( DocLnk lnk );
21 virtual ~Attachment(){} 20 virtual ~Attachment(){}
22 const QString getFileName()const{ return doc.file(); } 21 const QString getFileName()const{ return doc.file(); }
23 const QString getName()const{ return doc.name(); } 22 const QString getName()const{ return doc.name(); }
24 const QString getMimeType()const{ return doc.type(); } 23 const QString getMimeType()const{ return doc.type(); }
25 const QPixmap getPixmap()const{ return doc.pixmap(); } 24 const QPixmap getPixmap()const{ return doc.pixmap(); }
26 const int getSize()const { return size; } 25 const int getSize()const { return size; }
27 DocLnk getDocLnk() { return doc; } 26 DocLnk getDocLnk() { return doc; }
28 27
29protected: 28protected:
30 DocLnk doc; 29 DocLnk doc;
31 int size; 30 int size;
32 31
33}; 32};
34 33
35#define FLAG_ANSWERED 0 34#define FLAG_ANSWERED 0
36#define FLAG_FLAGGED 1 35#define FLAG_FLAGGED 1
37#define FLAG_DELETED 2 36#define FLAG_DELETED 2
38#define FLAG_SEEN 3 37#define FLAG_SEEN 3
39#define FLAG_DRAFT 4 38#define FLAG_DRAFT 4
40#define FLAG_RECENT 5 39#define FLAG_RECENT 5
41 40
42/* a class to describe mails in a mailbox */ 41/* a class to describe mails in a mailbox */
43class RecMail 42class RecMail
44{ 43{
45public: 44public:
46 RecMail(); 45 RecMail();
47 virtual ~RecMail(){} 46 virtual ~RecMail(){}
48 47
49 const int getNumber()const{return msg_number;} 48 const int getNumber()const{return msg_number;}
50 void setNumber(int number){msg_number=number;} 49 void setNumber(int number){msg_number=number;}
51 const QString&getDate()const{ return date; } 50 const QString&getDate()const{ return date; }
52 void setDate( const QString&a ) { date = a; } 51 void setDate( const QString&a ) { date = a; }
53 const QString&getFrom()const{ return from; } 52 const QString&getFrom()const{ return from; }
54 void setFrom( const QString&a ) { from = a; } 53 void setFrom( const QString&a ) { from = a; }
55 const QString&getSubject()const { return subject; } 54 const QString&getSubject()const { return subject; }
56 void setSubject( const QString&s ) { subject = s; } 55 void setSubject( const QString&s ) { subject = s; }
57 void setFlags(const QBitArray&flags){msg_flags = flags;} 56 void setFlags(const QBitArray&flags){msg_flags = flags;}
58 const QBitArray&getFlags()const{return msg_flags;} 57 const QBitArray&getFlags()const{return msg_flags;}
59 58
60#if 0 59#if 0
61 void setDate(const QString&dstring); 60 void setDate(const QString&dstring);
62 void setDate(const QDateTime&date){mDate = date;} 61 void setDate(const QDateTime&date){mDate = date;}
63 QString getDate()const{return mDate.toString();} 62 QString getDate()const{return mDate.toString();}
64#endif 63#endif
65protected: 64protected:
66 QString subject,date,from; 65 QString subject,date,from;
67 int msg_number; 66 int msg_number;
68 QBitArray msg_flags; 67 QBitArray msg_flags;
69#if 0 68#if 0
70 QDateTime mDate; 69 QDateTime mDate;
71#endif 70#endif
72}; 71};
73 72
74typedef QList<RecMail> Maillist; 73typedef QList<RecMail> Maillist;
75 74
76class Mail 75class Mail
77{ 76{
78public: 77public:
79 Mail(); 78 Mail();
80 /* Possible that this destructor must not be declared virtual 79 /* Possible that this destructor must not be declared virtual
81 * 'cause it seems that it will never have some child classes. 80 * 'cause it seems that it will never have some child classes.
82 * in this case this object will not get a virtual table -> memory and 81 * in this case this object will not get a virtual table -> memory and
83 * speed will be a little bit better? 82 * speed will be a little bit better?
84 */ 83 */
85 virtual ~Mail(){} 84 virtual ~Mail(){}
86 void addAttachment( Attachment *att ) { attList.append( att ); } 85 void addAttachment( Attachment *att ) { attList.append( att ); }
87 const QList<Attachment>& getAttachments()const { return attList; } 86 const QList<Attachment>& getAttachments()const { return attList; }
88 void removeAttachment( Attachment *att ) { attList.remove( att ); } 87 void removeAttachment( Attachment *att ) { attList.remove( att ); }
89 const QString&getName()const { return name; } 88 const QString&getName()const { return name; }
90 void setName( QString s ) { name = s; } 89 void setName( QString s ) { name = s; }
91 const QString&getMail()const{ return mail; } 90 const QString&getMail()const{ return mail; }
92 void setMail( const QString&s ) { mail = s; } 91 void setMail( const QString&s ) { mail = s; }
93 const QString&getTo()const{ return to; } 92 const QString&getTo()const{ return to; }
94 void setTo( const QString&s ) { to = s; } 93 void setTo( const QString&s ) { to = s; }
95 const QString&getCC()const{ return cc; } 94 const QString&getCC()const{ return cc; }
96 void setCC( const QString&s ) { cc = s; } 95 void setCC( const QString&s ) { cc = s; }
97 const QString&getBCC()const { return bcc; } 96 const QString&getBCC()const { return bcc; }
98 void setBCC( const QString&s ) { bcc = s; } 97 void setBCC( const QString&s ) { bcc = s; }
99 const QString&getMessage()const { return message; } 98 const QString&getMessage()const { return message; }
100 void setMessage( const QString&s ) { message = s; } 99 void setMessage( const QString&s ) { message = s; }
101 const QString&getSubject()const { return subject; } 100 const QString&getSubject()const { return subject; }
102 void setSubject( const QString&s ) { subject = s; } 101 void setSubject( const QString&s ) { subject = s; }
103 const QString&getReply()const{ return reply; } 102 const QString&getReply()const{ return reply; }
104 void setReply( const QString&a ) { reply = a; } 103 void setReply( const QString&a ) { reply = a; }
105 104
106private: 105private:
107 QList<Attachment> attList; 106 QList<Attachment> attList;
108 QString name, mail, to, cc, bcc, reply, subject, message; 107 QString name, mail, to, cc, bcc, reply, subject, message;
109}; 108};
110 109
111class Folder : public QObject 110class Folder : public QObject
112{ 111{
113 Q_OBJECT 112 Q_OBJECT
114 113
115public: 114public:
116 Folder( const QString&init_name ); 115 Folder( const QString&init_name );
117 const QString&getDisplayName()const { return nameDisplay; } 116 const QString&getDisplayName()const { return nameDisplay; }
118 const QString&getName()const { return name; } 117 const QString&getName()const { return name; }
119 virtual bool may_select()const{return true;}; 118 virtual bool may_select()const{return true;};
120 119
121private: 120private:
122 QString nameDisplay, name; 121 QString nameDisplay, name;
123 122
124}; 123};
125 124
126class IMAPFolder : public Folder 125class IMAPFolder : public Folder
127{ 126{
128 public: 127 public:
129 IMAPFolder( QString name,bool select=true ) : Folder( name ),m_MaySelect(select) {} 128 IMAPFolder( QString name,bool select=true ) : Folder( name ),m_MaySelect(select) {}
130 virtual bool may_select()const{return m_MaySelect;} 129 virtual bool may_select()const{return m_MaySelect;}
131 private: 130 private:
132 bool m_MaySelect; 131 bool m_MaySelect;
133}; 132};
134 133
135class MailWrapper : public QObject 134class MailWrapper : public QObject
136{ 135{
137 Q_OBJECT 136 Q_OBJECT
138 137
139public: 138public:
140 MailWrapper( Settings *s ); 139 MailWrapper( Settings *s );
141 void sendMail( Mail mail ); 140 void sendMail( Mail mail );
142 141
143private: 142private:
144 mailimf_mailbox *newMailbox(const QString&name,const QString&mail ); 143 mailimf_mailbox *newMailbox(const QString&name,const QString&mail );
145 mailimf_address_list *parseAddresses(const QString&addr ); 144 mailimf_address_list *parseAddresses(const QString&addr );
146 mailimf_fields *createImfFields( Mail *mail ); 145 mailimf_fields *createImfFields( Mail *mail );
147 mailmime *buildTxtPart( QString str ); 146 mailmime *buildTxtPart( QString str );
148 mailmime *buildFilePart( QString filename, QString mimetype ); 147 mailmime *buildFilePart( QString filename, QString mimetype );
149 void addFileParts( mailmime *message, QList<Attachment> files ); 148 void addFileParts( mailmime *message, QList<Attachment> files );
150 mailmime *createMimeMail( Mail *mail ); 149 mailmime *createMimeMail( Mail *mail );
151 void smtpSend( mailmime *mail ); 150 void smtpSend( mailmime *mail );
152 mailimf_field *getField( mailimf_fields *fields, int type ); 151 mailimf_field *getField( mailimf_fields *fields, int type );
153 clist *createRcptList( mailimf_fields *fields ); 152 clist *createRcptList( mailimf_fields *fields );
154 char *getFrom( mailmime *mail ); 153 char *getFrom( mailmime *mail );
155 SMTPaccount *getAccount( QString from ); 154 SMTPaccount *getAccount( QString from );
156 void writeToFile( QString file, mailmime *mail ); 155 void writeToFile( QString file, mailmime *mail );
157 void readFromFile( QString file, char **data, size_t *size ); 156 void readFromFile( QString file, char **data, size_t *size );
158 static QString mailsmtpError( int err ); 157 static QString mailsmtpError( int err );
159 static QString getTmpFile(); 158 static QString getTmpFile();
160 159
161 Settings *settings; 160 Settings *settings;
162 161
163}; 162};
164 163
165class IMAPwrapper : public QObject
166{
167 Q_OBJECT
168
169public:
170 IMAPwrapper( IMAPaccount *a );
171 QList<IMAPFolder>* listFolders();
172 void listMessages(const QString & mailbox,Maillist&target );
173 QString fetchBody(const QString & mailbox,const RecMail&mail);
174
175protected:
176 RecMail*parse_list_result(mailimap_msg_att*);
177
178private:
179 IMAPaccount *account;
180
181};
182
183#endif 164#endif
diff --git a/noncore/net/mail/mail.pro b/noncore/net/mail/mail.pro
index 46a476d..2142cdc 100644
--- a/noncore/net/mail/mail.pro
+++ b/noncore/net/mail/mail.pro
@@ -1,39 +1,40 @@
1 CONFIG += qt warn_on debug quick-app 1 CONFIG += qt warn_on debug quick-app
2 2
3 HEADERS = defines.h \ 3 HEADERS = defines.h \
4 logindialog.h \ 4 logindialog.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 opiemail.h 11 opiemail.h \
12 imapwrapper.h
12 13
13 SOURCES = main.cpp \ 14 SOURCES = main.cpp \
14 opiemail.cpp \ 15 opiemail.cpp \
15 mainwindow.cpp \ 16 mainwindow.cpp \
16 accountview.cpp \ 17 accountview.cpp \
17 composemail.cpp \ 18 composemail.cpp \
18 mailwrapper.cpp \ 19 mailwrapper.cpp \
19 imapwrapper.cpp \ 20 imapwrapper.cpp \
20 addresspicker.cpp \ 21 addresspicker.cpp \
21 editaccounts.cpp \ 22 editaccounts.cpp \
22 logindialog.cpp \ 23 logindialog.cpp \
23 settings.cpp 24 settings.cpp
24 25
25 INTERFACES = editaccountsui.ui \ 26 INTERFACES = editaccountsui.ui \
26 selectmailtypeui.ui \ 27 selectmailtypeui.ui \
27 imapconfigui.ui \ 28 imapconfigui.ui \
28 pop3configui.ui \ 29 pop3configui.ui \
29 nntpconfigui.ui \ 30 nntpconfigui.ui \
30 smtpconfigui.ui \ 31 smtpconfigui.ui \
31 addresspickerui.ui \ 32 addresspickerui.ui \
32 logindialogui.ui \ 33 logindialogui.ui \
33 composemailui.ui 34 composemailui.ui
34 35
35INCLUDEPATH += $(OPIEDIR)/include 36INCLUDEPATH += $(OPIEDIR)/include
36 LIBS += -lqpe -lopie -letpan -lssl -lcrypto -ldb 37 LIBS += -lqpe -lopie -letpan -lssl -lcrypto -ldb
37TARGET = opiemail 38TARGET = opiemail
38 39
39include ( $(OPIEDIR)/include.pro ) 40include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/net/mail/mailwrapper.h b/noncore/net/mail/mailwrapper.h
index f45eab7..955a8e2 100644
--- a/noncore/net/mail/mailwrapper.h
+++ b/noncore/net/mail/mailwrapper.h
@@ -1,183 +1,164 @@
1#ifndef MAILWRAPPER_H 1#ifndef MAILWRAPPER_H
2#define MAILWRAPPER_H 2#define MAILWRAPPER_H
3 3
4#include <qpe/applnk.h> 4#include <qpe/applnk.h>
5 5
6#include <libetpan/mailmime.h> 6#include <libetpan/mailmime.h>
7#include <libetpan/mailimf.h> 7#include <libetpan/mailimf.h>
8#include <libetpan/mailsmtp.h> 8#include <libetpan/mailsmtp.h>
9#include <libetpan/mailimap.h>
10#include <libetpan/mailstorage.h> 9#include <libetpan/mailstorage.h>
11#include <libetpan/maildriver.h> 10#include <libetpan/maildriver.h>
12#include <qbitarray.h> 11#include <qbitarray.h>
13#include <qdatetime.h> 12#include <qdatetime.h>
14 13
15#include "settings.h" 14#include "settings.h"
16 15
17class Attachment 16class Attachment
18{ 17{
19public: 18public:
20 Attachment( DocLnk lnk ); 19 Attachment( DocLnk lnk );
21 virtual ~Attachment(){} 20 virtual ~Attachment(){}
22 const QString getFileName()const{ return doc.file(); } 21 const QString getFileName()const{ return doc.file(); }
23 const QString getName()const{ return doc.name(); } 22 const QString getName()const{ return doc.name(); }
24 const QString getMimeType()const{ return doc.type(); } 23 const QString getMimeType()const{ return doc.type(); }
25 const QPixmap getPixmap()const{ return doc.pixmap(); } 24 const QPixmap getPixmap()const{ return doc.pixmap(); }
26 const int getSize()const { return size; } 25 const int getSize()const { return size; }
27 DocLnk getDocLnk() { return doc; } 26 DocLnk getDocLnk() { return doc; }
28 27
29protected: 28protected:
30 DocLnk doc; 29 DocLnk doc;
31 int size; 30 int size;
32 31
33}; 32};
34 33
35#define FLAG_ANSWERED 0 34#define FLAG_ANSWERED 0
36#define FLAG_FLAGGED 1 35#define FLAG_FLAGGED 1
37#define FLAG_DELETED 2 36#define FLAG_DELETED 2
38#define FLAG_SEEN 3 37#define FLAG_SEEN 3
39#define FLAG_DRAFT 4 38#define FLAG_DRAFT 4
40#define FLAG_RECENT 5 39#define FLAG_RECENT 5
41 40
42/* a class to describe mails in a mailbox */ 41/* a class to describe mails in a mailbox */
43class RecMail 42class RecMail
44{ 43{
45public: 44public:
46 RecMail(); 45 RecMail();
47 virtual ~RecMail(){} 46 virtual ~RecMail(){}
48 47
49 const int getNumber()const{return msg_number;} 48 const int getNumber()const{return msg_number;}
50 void setNumber(int number){msg_number=number;} 49 void setNumber(int number){msg_number=number;}
51 const QString&getDate()const{ return date; } 50 const QString&getDate()const{ return date; }
52 void setDate( const QString&a ) { date = a; } 51 void setDate( const QString&a ) { date = a; }
53 const QString&getFrom()const{ return from; } 52 const QString&getFrom()const{ return from; }
54 void setFrom( const QString&a ) { from = a; } 53 void setFrom( const QString&a ) { from = a; }
55 const QString&getSubject()const { return subject; } 54 const QString&getSubject()const { return subject; }
56 void setSubject( const QString&s ) { subject = s; } 55 void setSubject( const QString&s ) { subject = s; }
57 void setFlags(const QBitArray&flags){msg_flags = flags;} 56 void setFlags(const QBitArray&flags){msg_flags = flags;}
58 const QBitArray&getFlags()const{return msg_flags;} 57 const QBitArray&getFlags()const{return msg_flags;}
59 58
60#if 0 59#if 0
61 void setDate(const QString&dstring); 60 void setDate(const QString&dstring);
62 void setDate(const QDateTime&date){mDate = date;} 61 void setDate(const QDateTime&date){mDate = date;}
63 QString getDate()const{return mDate.toString();} 62 QString getDate()const{return mDate.toString();}
64#endif 63#endif
65protected: 64protected:
66 QString subject,date,from; 65 QString subject,date,from;
67 int msg_number; 66 int msg_number;
68 QBitArray msg_flags; 67 QBitArray msg_flags;
69#if 0 68#if 0
70 QDateTime mDate; 69 QDateTime mDate;
71#endif 70#endif
72}; 71};
73 72
74typedef QList<RecMail> Maillist; 73typedef QList<RecMail> Maillist;
75 74
76class Mail 75class Mail
77{ 76{
78public: 77public:
79 Mail(); 78 Mail();
80 /* Possible that this destructor must not be declared virtual 79 /* Possible that this destructor must not be declared virtual
81 * 'cause it seems that it will never have some child classes. 80 * 'cause it seems that it will never have some child classes.
82 * in this case this object will not get a virtual table -> memory and 81 * in this case this object will not get a virtual table -> memory and
83 * speed will be a little bit better? 82 * speed will be a little bit better?
84 */ 83 */
85 virtual ~Mail(){} 84 virtual ~Mail(){}
86 void addAttachment( Attachment *att ) { attList.append( att ); } 85 void addAttachment( Attachment *att ) { attList.append( att ); }
87 const QList<Attachment>& getAttachments()const { return attList; } 86 const QList<Attachment>& getAttachments()const { return attList; }
88 void removeAttachment( Attachment *att ) { attList.remove( att ); } 87 void removeAttachment( Attachment *att ) { attList.remove( att ); }
89 const QString&getName()const { return name; } 88 const QString&getName()const { return name; }
90 void setName( QString s ) { name = s; } 89 void setName( QString s ) { name = s; }
91 const QString&getMail()const{ return mail; } 90 const QString&getMail()const{ return mail; }
92 void setMail( const QString&s ) { mail = s; } 91 void setMail( const QString&s ) { mail = s; }
93 const QString&getTo()const{ return to; } 92 const QString&getTo()const{ return to; }
94 void setTo( const QString&s ) { to = s; } 93 void setTo( const QString&s ) { to = s; }
95 const QString&getCC()const{ return cc; } 94 const QString&getCC()const{ return cc; }
96 void setCC( const QString&s ) { cc = s; } 95 void setCC( const QString&s ) { cc = s; }
97 const QString&getBCC()const { return bcc; } 96 const QString&getBCC()const { return bcc; }
98 void setBCC( const QString&s ) { bcc = s; } 97 void setBCC( const QString&s ) { bcc = s; }
99 const QString&getMessage()const { return message; } 98 const QString&getMessage()const { return message; }
100 void setMessage( const QString&s ) { message = s; } 99 void setMessage( const QString&s ) { message = s; }
101 const QString&getSubject()const { return subject; } 100 const QString&getSubject()const { return subject; }
102 void setSubject( const QString&s ) { subject = s; } 101 void setSubject( const QString&s ) { subject = s; }
103 const QString&getReply()const{ return reply; } 102 const QString&getReply()const{ return reply; }
104 void setReply( const QString&a ) { reply = a; } 103 void setReply( const QString&a ) { reply = a; }
105 104
106private: 105private:
107 QList<Attachment> attList; 106 QList<Attachment> attList;
108 QString name, mail, to, cc, bcc, reply, subject, message; 107 QString name, mail, to, cc, bcc, reply, subject, message;
109}; 108};
110 109
111class Folder : public QObject 110class Folder : public QObject
112{ 111{
113 Q_OBJECT 112 Q_OBJECT
114 113
115public: 114public:
116 Folder( const QString&init_name ); 115 Folder( const QString&init_name );
117 const QString&getDisplayName()const { return nameDisplay; } 116 const QString&getDisplayName()const { return nameDisplay; }
118 const QString&getName()const { return name; } 117 const QString&getName()const { return name; }
119 virtual bool may_select()const{return true;}; 118 virtual bool may_select()const{return true;};
120 119
121private: 120private:
122 QString nameDisplay, name; 121 QString nameDisplay, name;
123 122
124}; 123};
125 124
126class IMAPFolder : public Folder 125class IMAPFolder : public Folder
127{ 126{
128 public: 127 public:
129 IMAPFolder( QString name,bool select=true ) : Folder( name ),m_MaySelect(select) {} 128 IMAPFolder( QString name,bool select=true ) : Folder( name ),m_MaySelect(select) {}
130 virtual bool may_select()const{return m_MaySelect;} 129 virtual bool may_select()const{return m_MaySelect;}
131 private: 130 private:
132 bool m_MaySelect; 131 bool m_MaySelect;
133}; 132};
134 133
135class MailWrapper : public QObject 134class MailWrapper : public QObject
136{ 135{
137 Q_OBJECT 136 Q_OBJECT
138 137
139public: 138public:
140 MailWrapper( Settings *s ); 139 MailWrapper( Settings *s );
141 void sendMail( Mail mail ); 140 void sendMail( Mail mail );
142 141
143private: 142private:
144 mailimf_mailbox *newMailbox(const QString&name,const QString&mail ); 143 mailimf_mailbox *newMailbox(const QString&name,const QString&mail );
145 mailimf_address_list *parseAddresses(const QString&addr ); 144 mailimf_address_list *parseAddresses(const QString&addr );
146 mailimf_fields *createImfFields( Mail *mail ); 145 mailimf_fields *createImfFields( Mail *mail );
147 mailmime *buildTxtPart( QString str ); 146 mailmime *buildTxtPart( QString str );
148 mailmime *buildFilePart( QString filename, QString mimetype ); 147 mailmime *buildFilePart( QString filename, QString mimetype );
149 void addFileParts( mailmime *message, QList<Attachment> files ); 148 void addFileParts( mailmime *message, QList<Attachment> files );
150 mailmime *createMimeMail( Mail *mail ); 149 mailmime *createMimeMail( Mail *mail );
151 void smtpSend( mailmime *mail ); 150 void smtpSend( mailmime *mail );
152 mailimf_field *getField( mailimf_fields *fields, int type ); 151 mailimf_field *getField( mailimf_fields *fields, int type );
153 clist *createRcptList( mailimf_fields *fields ); 152 clist *createRcptList( mailimf_fields *fields );
154 char *getFrom( mailmime *mail ); 153 char *getFrom( mailmime *mail );
155 SMTPaccount *getAccount( QString from ); 154 SMTPaccount *getAccount( QString from );
156 void writeToFile( QString file, mailmime *mail ); 155 void writeToFile( QString file, mailmime *mail );
157 void readFromFile( QString file, char **data, size_t *size ); 156 void readFromFile( QString file, char **data, size_t *size );
158 static QString mailsmtpError( int err ); 157 static QString mailsmtpError( int err );
159 static QString getTmpFile(); 158 static QString getTmpFile();
160 159
161 Settings *settings; 160 Settings *settings;
162 161
163}; 162};
164 163
165class IMAPwrapper : public QObject
166{
167 Q_OBJECT
168
169public:
170 IMAPwrapper( IMAPaccount *a );
171 QList<IMAPFolder>* listFolders();
172 void listMessages(const QString & mailbox,Maillist&target );
173 QString fetchBody(const QString & mailbox,const RecMail&mail);
174
175protected:
176 RecMail*parse_list_result(mailimap_msg_att*);
177
178private:
179 IMAPaccount *account;
180
181};
182
183#endif 164#endif