summaryrefslogtreecommitdiff
path: root/noncore/net
Unidiff
Diffstat (limited to 'noncore/net') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/accountview.cpp60
-rw-r--r--noncore/net/mail/accountview.h16
-rw-r--r--noncore/net/mail/defines.h2
-rw-r--r--noncore/net/mail/libmailwrapper/pop3wrapper.cpp57
-rw-r--r--noncore/net/mail/pop3wrapper.cpp57
5 files changed, 153 insertions, 39 deletions
diff --git a/noncore/net/mail/accountview.cpp b/noncore/net/mail/accountview.cpp
index d725b87..8e21d39 100644
--- a/noncore/net/mail/accountview.cpp
+++ b/noncore/net/mail/accountview.cpp
@@ -12,41 +12,87 @@ POP3viewItem::POP3viewItem( POP3account *a, QListView *parent )
12{ 12{
13 account = a; 13 account = a;
14 wrapper = AbstractMail::getWrapper( account ); 14 wrapper = AbstractMail::getWrapper( account );
15 setPixmap( 0, PIXMAP_POP3FOLDER ); 15 setPixmap( 0, PIXMAP_POP3FOLDER );
16 setText( 0, account->getAccountName() ); 16 setText( 0, account->getAccountName() );
17} 17}
18 18
19POP3viewItem::~POP3viewItem() 19POP3viewItem::~POP3viewItem()
20{ 20{
21 delete wrapper; 21 delete wrapper;
22} 22}
23 23
24void POP3viewItem::refresh( QList<RecMail> &target ) 24AbstractMail *POP3viewItem::getWrapper()
25{ 25{
26 qDebug( "POP3: refresh" ); 26 return wrapper;
27 wrapper->listMessages("INBOX", target );
28} 27}
29 28
29void POP3viewItem::refresh( QList<RecMail> & )
30{
31 QList<Folder> *folders = wrapper->listFolders();
32 QListViewItem *child = firstChild();
33 while ( child ) {
34 QListViewItem *tmp = child;
35 child = child->nextSibling();
36 delete tmp;
37 }
38 Folder *it;
39 QListViewItem*item = 0;
40 for ( it = folders->first(); it; it = folders->next() ) {
41 item = new POP3folderItem( it, this , item );
42 item->setSelectable(it->may_select());
43 }
44 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
45 folders->setAutoDelete(false);
46 delete folders;
47}
30 48
31RecBody POP3viewItem::fetchBody( const RecMail &mail ) 49RecBody POP3viewItem::fetchBody( const RecMail &mail )
32{ 50{
33 qDebug( "POP3 fetchBody" ); 51 qDebug( "POP3 fetchBody" );
34 return wrapper->fetchBody( mail ); 52 return wrapper->fetchBody( mail );
35} 53}
36 54
55POP3folderItem::~POP3folderItem()
56{
57 delete folder;
58}
59
60POP3folderItem::POP3folderItem( Folder *folderInit, POP3viewItem *parent , QListViewItem*after )
61 : AccountViewItem( parent,after )
62{
63 folder = folderInit;
64 pop3 = parent;
65 if (folder->getDisplayName().lower()!="inbox") {
66 setPixmap( 0, PIXMAP_POP3FOLDER );
67 } else {
68 setPixmap( 0, PIXMAP_INBOXFOLDER);
69 }
70 setText( 0, folder->getDisplayName() );
71}
72
73void POP3folderItem::refresh(QList<RecMail>&target)
74{
75 if (folder->may_select())
76 pop3->getWrapper()->listMessages( folder->getName(),target );
77}
78
79RecBody POP3folderItem::fetchBody(const RecMail&aMail)
80{
81 return pop3->getWrapper()->fetchBody(aMail);
82}
83
37/** 84/**
38 * IMAP Account stuff 85 * IMAP Account stuff
39 */ 86 */
40
41IMAPviewItem::IMAPviewItem( IMAPaccount *a, QListView *parent ) 87IMAPviewItem::IMAPviewItem( IMAPaccount *a, QListView *parent )
42 : AccountViewItem( parent ) 88 : AccountViewItem( parent )
43{ 89{
44 account = a; 90 account = a;
45 wrapper = AbstractMail::getWrapper( account ); 91 wrapper = AbstractMail::getWrapper( account );
46 setPixmap( 0, PIXMAP_IMAPFOLDER ); 92 setPixmap( 0, PIXMAP_IMAPFOLDER );
47 setText( 0, account->getAccountName() ); 93 setText( 0, account->getAccountName() );
48 setOpen( true ); 94 setOpen( true );
49} 95}
50 96
51IMAPviewItem::~IMAPviewItem() 97IMAPviewItem::~IMAPviewItem()
52{ 98{
@@ -86,25 +132,29 @@ RecBody IMAPviewItem::fetchBody(const RecMail&)
86} 132}
87 133
88IMAPfolderItem::~IMAPfolderItem() 134IMAPfolderItem::~IMAPfolderItem()
89{ 135{
90 delete folder; 136 delete folder;
91} 137}
92 138
93IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPviewItem *parent , QListViewItem*after ) 139IMAPfolderItem::IMAPfolderItem( Folder *folderInit, IMAPviewItem *parent , QListViewItem*after )
94 : AccountViewItem( parent,after ) 140 : AccountViewItem( parent,after )
95{ 141{
96 folder = folderInit; 142 folder = folderInit;
97 imap = parent; 143 imap = parent;
98 setPixmap( 0, PIXMAP_IMAPFOLDER ); 144 if (folder->getDisplayName().lower()!="inbox") {
145 setPixmap( 0, PIXMAP_IMAPFOLDER );
146 } else {
147 setPixmap( 0, PIXMAP_INBOXFOLDER);
148 }
99 setText( 0, folder->getDisplayName() ); 149 setText( 0, folder->getDisplayName() );
100} 150}
101 151
102void IMAPfolderItem::refresh(QList<RecMail>&target) 152void IMAPfolderItem::refresh(QList<RecMail>&target)
103{ 153{
104 if (folder->may_select()) 154 if (folder->may_select())
105 imap->getWrapper()->listMessages( folder->getName(),target ); 155 imap->getWrapper()->listMessages( folder->getName(),target );
106} 156}
107 157
108RecBody IMAPfolderItem::fetchBody(const RecMail&aMail) 158RecBody IMAPfolderItem::fetchBody(const RecMail&aMail)
109{ 159{
110 return imap->getWrapper()->fetchBody(aMail); 160 return imap->getWrapper()->fetchBody(aMail);
diff --git a/noncore/net/mail/accountview.h b/noncore/net/mail/accountview.h
index 04f9b7a..d035af4 100644
--- a/noncore/net/mail/accountview.h
+++ b/noncore/net/mail/accountview.h
@@ -22,31 +22,44 @@ public:
22 virtual void refresh(QList<RecMail>&)=0; 22 virtual void refresh(QList<RecMail>&)=0;
23 virtual RecBody fetchBody(const RecMail&)=0; 23 virtual RecBody fetchBody(const RecMail&)=0;
24}; 24};
25 25
26class POP3viewItem : public AccountViewItem 26class POP3viewItem : public AccountViewItem
27{ 27{
28 28
29public: 29public:
30 POP3viewItem( POP3account *a, QListView *parent ); 30 POP3viewItem( POP3account *a, QListView *parent );
31 ~POP3viewItem(); 31 ~POP3viewItem();
32 virtual void refresh( QList<RecMail> &target ); 32 virtual void refresh( QList<RecMail> &target );
33 virtual RecBody fetchBody( const RecMail &mail ); 33 virtual RecBody fetchBody( const RecMail &mail );
34 34 AbstractMail *getWrapper();
35private: 35private:
36 POP3account *account; 36 POP3account *account;
37 AbstractMail *wrapper; 37 AbstractMail *wrapper;
38 38
39}; 39};
40 40
41class POP3folderItem : public AccountViewItem
42{
43
44public:
45 POP3folderItem( Folder *folder, POP3viewItem *parent , QListViewItem*after );
46 ~POP3folderItem();
47 virtual void refresh(QList<RecMail>&);
48 virtual RecBody fetchBody(const RecMail&);
49private:
50 Folder *folder;
51 POP3viewItem *pop3;
52};
53
41class IMAPviewItem : public AccountViewItem 54class IMAPviewItem : public AccountViewItem
42{ 55{
43 56
44public: 57public:
45 IMAPviewItem( IMAPaccount *a, QListView *parent ); 58 IMAPviewItem( IMAPaccount *a, QListView *parent );
46 ~IMAPviewItem(); 59 ~IMAPviewItem();
47 virtual void refresh(QList<RecMail>&); 60 virtual void refresh(QList<RecMail>&);
48 virtual RecBody fetchBody(const RecMail&); 61 virtual RecBody fetchBody(const RecMail&);
49 AbstractMail *getWrapper(); 62 AbstractMail *getWrapper();
50private: 63private:
51 IMAPaccount *account; 64 IMAPaccount *account;
52 AbstractMail *wrapper; 65 AbstractMail *wrapper;
@@ -54,25 +67,24 @@ private:
54 67
55class IMAPfolderItem : public AccountViewItem 68class IMAPfolderItem : public AccountViewItem
56{ 69{
57 70
58public: 71public:
59 IMAPfolderItem( Folder *folder, IMAPviewItem *parent , QListViewItem*after ); 72 IMAPfolderItem( Folder *folder, IMAPviewItem *parent , QListViewItem*after );
60 ~IMAPfolderItem(); 73 ~IMAPfolderItem();
61 virtual void refresh(QList<RecMail>&); 74 virtual void refresh(QList<RecMail>&);
62 virtual RecBody fetchBody(const RecMail&); 75 virtual RecBody fetchBody(const RecMail&);
63private: 76private:
64 Folder *folder; 77 Folder *folder;
65 IMAPviewItem *imap; 78 IMAPviewItem *imap;
66
67}; 79};
68 80
69class AccountView : public QListView 81class AccountView : public QListView
70{ 82{
71 Q_OBJECT 83 Q_OBJECT
72 84
73public: 85public:
74 AccountView( QWidget *parent = 0, const char *name = 0, WFlags flags = 0 ); 86 AccountView( QWidget *parent = 0, const char *name = 0, WFlags flags = 0 );
75 void populate( QList<Account> list ); 87 void populate( QList<Account> list );
76 RecBody fetchBody(const RecMail&aMail); 88 RecBody fetchBody(const RecMail&aMail);
77 89
78public slots: 90public slots:
diff --git a/noncore/net/mail/defines.h b/noncore/net/mail/defines.h
index 679459d..c849f1a 100644
--- a/noncore/net/mail/defines.h
+++ b/noncore/net/mail/defines.h
@@ -5,34 +5,36 @@
5 5
6#define USER_AGENT "OpieMail v0.0.1-alpha" 6#define USER_AGENT "OpieMail v0.0.1-alpha"
7 7
8#define PIC_COMPOSEMAIL "opiemail/composemail" 8#define PIC_COMPOSEMAIL "opiemail/composemail"
9#define PIC_SENDQUEUED "opiemail/sendqueued" 9#define PIC_SENDQUEUED "opiemail/sendqueued"
10#define PIC_SHOWFOLDERS "opiemail/showfolders" 10#define PIC_SHOWFOLDERS "opiemail/showfolders"
11#define PIC_SEARCHMAILS "opiemail/searchmails" 11#define PIC_SEARCHMAILS "opiemail/searchmails"
12#define PIC_EDITSETTINGS "opiemail/editsettings" 12#define PIC_EDITSETTINGS "opiemail/editsettings"
13#define PIC_EDITACCOUNTS "opiemail/editaccounts" 13#define PIC_EDITACCOUNTS "opiemail/editaccounts"
14#define PIC_SYNC "opiemail/sync" 14#define PIC_SYNC "opiemail/sync"
15#define PIC_IMAPFOLDER "opiemail/imapfolder" 15#define PIC_IMAPFOLDER "opiemail/imapfolder"
16#define PIC_POP3FOLDER "opiemail/pop3folder" 16#define PIC_POP3FOLDER "opiemail/pop3folder"
17#define PIC_INBOXFOLDER "opiemail/inbox"
17 18
18#define ICON_COMPOSEMAIL QIconSet( Resource::loadPixmap( PIC_COMPOSEMAIL ) ) 19#define ICON_COMPOSEMAIL QIconSet( Resource::loadPixmap( PIC_COMPOSEMAIL ) )
19#define ICON_SENDQUEUED QIconSet( Resource::loadPixmap( PIC_SENDQUEUED ) ) 20#define ICON_SENDQUEUED QIconSet( Resource::loadPixmap( PIC_SENDQUEUED ) )
20#define ICON_SHOWFOLDERS QIconSet( Resource::loadPixmap( PIC_SHOWFOLDERS ) ) 21#define ICON_SHOWFOLDERS QIconSet( Resource::loadPixmap( PIC_SHOWFOLDERS ) )
21#define ICON_SEARCHMAILS QIconSet( Resource::loadPixmap( PIC_SEARCHMAILS ) ) 22#define ICON_SEARCHMAILS QIconSet( Resource::loadPixmap( PIC_SEARCHMAILS ) )
22#define ICON_EDITSETTINGS QIconSet( Resource::loadPixmap( PIC_EDITSETTINGS ) ) 23#define ICON_EDITSETTINGS QIconSet( Resource::loadPixmap( PIC_EDITSETTINGS ) )
23#define ICON_EDITACCOUNTS QIconSet( Resource::loadPixmap( PIC_EDITACCOUNTS ) ) 24#define ICON_EDITACCOUNTS QIconSet( Resource::loadPixmap( PIC_EDITACCOUNTS ) )
24#define ICON_SYNC QIconSet( Resource::loadPixmap( PIC_SYNC ) ) 25#define ICON_SYNC QIconSet( Resource::loadPixmap( PIC_SYNC ) )
25 26
26#define PIXMAP_IMAPFOLDER QPixmap( Resource::loadPixmap( PIC_IMAPFOLDER ) ) 27#define PIXMAP_IMAPFOLDER QPixmap( Resource::loadPixmap( PIC_IMAPFOLDER ) )
27#define PIXMAP_POP3FOLDER QPixmap( Resource::loadPixmap( PIC_POP3FOLDER ) ) 28#define PIXMAP_POP3FOLDER QPixmap( Resource::loadPixmap( PIC_POP3FOLDER ) )
29#define PIXMAP_INBOXFOLDER QPixmap( Resource::loadPixmap( PIC_INBOXFOLDER) )
28 30
29#define IMAP_PORT "143" 31#define IMAP_PORT "143"
30#define IMAP_SSL_PORT "993" 32#define IMAP_SSL_PORT "993"
31#define SMTP_PORT "25" 33#define SMTP_PORT "25"
32#define SMTP_SSL_PORT "465" 34#define SMTP_SSL_PORT "465"
33#define POP3_PORT "110" 35#define POP3_PORT "110"
34#define POP3_SSL_PORT "995" 36#define POP3_SSL_PORT "995"
35#define NNTP_PORT "119" 37#define NNTP_PORT "119"
36#define NNTP_SSL_PORT "563" 38#define NNTP_SSL_PORT "563"
37 39
38#endif 40#endif
diff --git a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
index 46c854b..2411399 100644
--- a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
@@ -1,13 +1,13 @@
1 1#include <stdlib.h>
2#include "pop3wrapper.h" 2#include "pop3wrapper.h"
3#include "mailtypes.h" 3#include "mailtypes.h"
4#include <libetpan/mailpop3.h> 4#include <libetpan/mailpop3.h>
5 5
6POP3wrapper::POP3wrapper( POP3account *a ) 6POP3wrapper::POP3wrapper( POP3account *a )
7{ 7{
8 account = a; 8 account = a;
9 m_pop3 = NULL; 9 m_pop3 = NULL;
10} 10}
11 11
12POP3wrapper::~POP3wrapper() 12POP3wrapper::~POP3wrapper()
13{ 13{
@@ -34,103 +34,128 @@ RecBody POP3wrapper::fetchBody( const RecMail &mail )
34 logout(); 34 logout();
35 return RecBody(); 35 return RecBody();
36 } 36 }
37 37
38 logout(); 38 logout();
39 39
40 return parseBody( message ); 40 return parseBody( message );
41} 41}
42 42
43RecBody POP3wrapper::parseBody( const char *message ) 43RecBody POP3wrapper::parseBody( const char *message )
44{ 44{
45 int err = MAILIMF_NO_ERROR; 45 int err = MAILIMF_NO_ERROR;
46 size_t curTok; 46 /* these vars are used recurcive! set it to 0!!!!!!!!!!!!!!!!! */
47 mailimf_message *result; 47 size_t curTok = 0;
48 mailimf_message *result = 0;
48 RecBody body; 49 RecBody body;
49 50
50 err = mailimf_message_parse( (char *) message, strlen( message ), &curTok, &result ); 51 err = mailimf_message_parse( (char *) message, strlen( message ), &curTok, &result );
51 if ( err != MAILIMF_NO_ERROR ) return body; 52 if ( err != MAILIMF_NO_ERROR ) {
53 if (result) mailimf_message_free(result);
54 return body;
55 }
52 56
53 if ( result && result->msg_body && result->msg_body->bd_text ) { 57 if ( result && result->msg_body && result->msg_body->bd_text ) {
54 qDebug( "POP3: bodytext found" ); 58 qDebug( "POP3: bodytext found" );
55 // TODO: why does this line segfault???? gdb says segfault in strlen(), maybe a bug in libetpan. 59 // when curTok isn't set to 0 this line will fault! 'cause upper line faults!
56 body.setBodytext( QString( result->msg_body->bd_text ) ); 60 body.setBodytext( QString( result->msg_body->bd_text ) );
57 } 61 }
58 62 if (result) mailimf_message_free(result);
59 return body; 63 return body;
60} 64}
61 65
62void POP3wrapper::listMessages(const QString &, QList<RecMail> &target ) 66void POP3wrapper::listMessages(const QString &, QList<RecMail> &target )
63{ 67{
64 int err = MAILPOP3_NO_ERROR; 68 int err = MAILPOP3_NO_ERROR;
65 char *header; 69 char * header = 0;
66 size_t length; 70 /* these vars are used recurcive! set it to 0!!!!!!!!!!!!!!!!! */
67 carray *messages; 71 size_t length = 0;
72 carray * messages = 0;
68 73
69 login(); 74 login();
70 if (!m_pop3) return; 75 if (!m_pop3) return;
71 mailpop3_list( m_pop3, &messages ); 76 mailpop3_list( m_pop3, &messages );
72 77
73 for ( int i = carray_count( messages ); i > 0; i-- ) { 78 //for ( int i = carray_count( messages ); i > 0; i-- ) {
74 mailpop3_msg_info *info = (mailpop3_msg_info *) carray_get( messages, i - 1 ); 79 for (unsigned int i = 0; i < carray_count(messages);++i) {
75 80 mailpop3_msg_info *info;
81 int r = mailpop3_get_msg_info(m_pop3,i+1,&info);
76 err = mailpop3_header( m_pop3, info->msg_index, &header, &length ); 82 err = mailpop3_header( m_pop3, info->msg_index, &header, &length );
77 if ( err != MAILPOP3_NO_ERROR ) { 83 if ( err != MAILPOP3_NO_ERROR ) {
78 qDebug( "POP3: error retrieving header msgid: %i", info->msg_index ); 84 qDebug( "POP3: error retrieving header msgid: %i", info->msg_index );
85 free(header);
79 logout(); 86 logout();
80 return; 87 return;
81 } 88 }
82 RecMail *mail = parseHeader( header ); 89 RecMail *mail = parseHeader( header );
83 mail->setNumber( info->msg_index ); 90 mail->setNumber( info->msg_index );
84 mail->setWrapper(this); 91 mail->setWrapper(this);
85 target.append( mail ); 92 target.append( mail );
93 free(header);
86 } 94 }
87
88 logout(); 95 logout();
89} 96}
90 97
91RecMail *POP3wrapper::parseHeader( const char *header ) 98RecMail *POP3wrapper::parseHeader( const char *header )
92{ 99{
93 int err = MAILIMF_NO_ERROR; 100 int err = MAILIMF_NO_ERROR;
94 size_t curTok; 101 size_t curTok = 0;
95 RecMail *mail = new RecMail(); 102 RecMail *mail = new RecMail();
96 mailimf_fields *fields; 103 mailimf_fields *fields;
97 104 mailimf_references * refs;
105 mailimf_keywords*keys;
106
98 err = mailimf_fields_parse( (char *) header, strlen( header ), &curTok, &fields ); 107 err = mailimf_fields_parse( (char *) header, strlen( header ), &curTok, &fields );
99 for ( clistiter *current = clist_begin( fields->fld_list ); current != NULL; current = current->next ) { 108 for ( clistiter *current = clist_begin( fields->fld_list ); current != NULL; current = current->next ) {
100 mailimf_field *field = (mailimf_field *) current->data; 109 mailimf_field *field = (mailimf_field *) current->data;
101 switch ( field->fld_type ) { 110 switch ( field->fld_type ) {
102 case MAILIMF_FIELD_FROM: 111 case MAILIMF_FIELD_FROM:
103 mail->setFrom( parseMailboxList( field->fld_data.fld_from->frm_mb_list ) ); 112 mail->setFrom( parseMailboxList( field->fld_data.fld_from->frm_mb_list ) );
104 break; 113 break;
105 case MAILIMF_FIELD_TO: 114 case MAILIMF_FIELD_TO:
106 mail->setTo( parseAddressList( field->fld_data.fld_to->to_addr_list ) ); 115 mail->setTo( parseAddressList( field->fld_data.fld_to->to_addr_list ) );
107 break; 116 break;
108 case MAILIMF_FIELD_CC: 117 case MAILIMF_FIELD_CC:
109 mail->setCC( parseAddressList( field->fld_data.fld_cc->cc_addr_list ) ); 118 mail->setCC( parseAddressList( field->fld_data.fld_cc->cc_addr_list ) );
110 break; 119 break;
111 case MAILIMF_FIELD_BCC: 120 case MAILIMF_FIELD_BCC:
112 mail->setBcc( parseAddressList( field->fld_data.fld_bcc->bcc_addr_list ) ); 121 mail->setBcc( parseAddressList( field->fld_data.fld_bcc->bcc_addr_list ) );
113 break; 122 break;
114 case MAILIMF_FIELD_SUBJECT: 123 case MAILIMF_FIELD_SUBJECT:
115 mail->setSubject( QString( field->fld_data.fld_subject->sbj_value ) ); 124 mail->setSubject( QString( field->fld_data.fld_subject->sbj_value ) );
116 break; 125 break;
117 case MAILIMF_FIELD_ORIG_DATE: 126 case MAILIMF_FIELD_ORIG_DATE:
118 mail->setDate( parseDateTime( field->fld_data.fld_orig_date->dt_date_time ) ); 127 mail->setDate( parseDateTime( field->fld_data.fld_orig_date->dt_date_time ) );
119 break; 128 break;
129 case MAILIMF_FIELD_MESSAGE_ID:
130 mail->setMsgid(QString(field->fld_data.fld_message_id->mid_value));
131 break;
132 case MAILIMF_FIELD_REFERENCES:
133 refs = field->fld_data.fld_references;
134 if (refs && refs->mid_list && clist_count(refs->mid_list)) {
135 char * text = (char*)refs->mid_list->first->data;
136 mail->setReplyto(QString(text));
137 }
138 break;
139 case MAILIMF_FIELD_KEYWORDS:
140 keys = field->fld_data.fld_keywords;
141 for (clistcell*cur = clist_begin(keys->kw_list);cur!=0;cur=clist_next(cur)) {
142 qDebug("Keyword: %s",(char*)cur->data);
143 }
144 break;
120 default: 145 default:
121 break; 146 break;
122 } 147 }
123 } 148 }
124 149 if (fields) mailimf_fields_free(fields);
125 return mail; 150 return mail;
126} 151}
127 152
128QString POP3wrapper::parseDateTime( mailimf_date_time *date ) 153QString POP3wrapper::parseDateTime( mailimf_date_time *date )
129{ 154{
130 char tmp[23]; 155 char tmp[23];
131 156
132 snprintf( tmp, 23, "%02i.%02i.%04i %02i:%02i:%02i %+05i", 157 snprintf( tmp, 23, "%02i.%02i.%04i %02i:%02i:%02i %+05i",
133 date->dt_day, date->dt_month, date->dt_year, date->dt_hour, date->dt_min, date->dt_sec, date->dt_zone ); 158 date->dt_day, date->dt_month, date->dt_year, date->dt_hour, date->dt_min, date->dt_sec, date->dt_zone );
134 159
135 return QString( tmp ); 160 return QString( tmp );
136} 161}
diff --git a/noncore/net/mail/pop3wrapper.cpp b/noncore/net/mail/pop3wrapper.cpp
index 46c854b..2411399 100644
--- a/noncore/net/mail/pop3wrapper.cpp
+++ b/noncore/net/mail/pop3wrapper.cpp
@@ -1,13 +1,13 @@
1 1#include <stdlib.h>
2#include "pop3wrapper.h" 2#include "pop3wrapper.h"
3#include "mailtypes.h" 3#include "mailtypes.h"
4#include <libetpan/mailpop3.h> 4#include <libetpan/mailpop3.h>
5 5
6POP3wrapper::POP3wrapper( POP3account *a ) 6POP3wrapper::POP3wrapper( POP3account *a )
7{ 7{
8 account = a; 8 account = a;
9 m_pop3 = NULL; 9 m_pop3 = NULL;
10} 10}
11 11
12POP3wrapper::~POP3wrapper() 12POP3wrapper::~POP3wrapper()
13{ 13{
@@ -34,103 +34,128 @@ RecBody POP3wrapper::fetchBody( const RecMail &mail )
34 logout(); 34 logout();
35 return RecBody(); 35 return RecBody();
36 } 36 }
37 37
38 logout(); 38 logout();
39 39
40 return parseBody( message ); 40 return parseBody( message );
41} 41}
42 42
43RecBody POP3wrapper::parseBody( const char *message ) 43RecBody POP3wrapper::parseBody( const char *message )
44{ 44{
45 int err = MAILIMF_NO_ERROR; 45 int err = MAILIMF_NO_ERROR;
46 size_t curTok; 46 /* these vars are used recurcive! set it to 0!!!!!!!!!!!!!!!!! */
47 mailimf_message *result; 47 size_t curTok = 0;
48 mailimf_message *result = 0;
48 RecBody body; 49 RecBody body;
49 50
50 err = mailimf_message_parse( (char *) message, strlen( message ), &curTok, &result ); 51 err = mailimf_message_parse( (char *) message, strlen( message ), &curTok, &result );
51 if ( err != MAILIMF_NO_ERROR ) return body; 52 if ( err != MAILIMF_NO_ERROR ) {
53 if (result) mailimf_message_free(result);
54 return body;
55 }
52 56
53 if ( result && result->msg_body && result->msg_body->bd_text ) { 57 if ( result && result->msg_body && result->msg_body->bd_text ) {
54 qDebug( "POP3: bodytext found" ); 58 qDebug( "POP3: bodytext found" );
55 // TODO: why does this line segfault???? gdb says segfault in strlen(), maybe a bug in libetpan. 59 // when curTok isn't set to 0 this line will fault! 'cause upper line faults!
56 body.setBodytext( QString( result->msg_body->bd_text ) ); 60 body.setBodytext( QString( result->msg_body->bd_text ) );
57 } 61 }
58 62 if (result) mailimf_message_free(result);
59 return body; 63 return body;
60} 64}
61 65
62void POP3wrapper::listMessages(const QString &, QList<RecMail> &target ) 66void POP3wrapper::listMessages(const QString &, QList<RecMail> &target )
63{ 67{
64 int err = MAILPOP3_NO_ERROR; 68 int err = MAILPOP3_NO_ERROR;
65 char *header; 69 char * header = 0;
66 size_t length; 70 /* these vars are used recurcive! set it to 0!!!!!!!!!!!!!!!!! */
67 carray *messages; 71 size_t length = 0;
72 carray * messages = 0;
68 73
69 login(); 74 login();
70 if (!m_pop3) return; 75 if (!m_pop3) return;
71 mailpop3_list( m_pop3, &messages ); 76 mailpop3_list( m_pop3, &messages );
72 77
73 for ( int i = carray_count( messages ); i > 0; i-- ) { 78 //for ( int i = carray_count( messages ); i > 0; i-- ) {
74 mailpop3_msg_info *info = (mailpop3_msg_info *) carray_get( messages, i - 1 ); 79 for (unsigned int i = 0; i < carray_count(messages);++i) {
75 80 mailpop3_msg_info *info;
81 int r = mailpop3_get_msg_info(m_pop3,i+1,&info);
76 err = mailpop3_header( m_pop3, info->msg_index, &header, &length ); 82 err = mailpop3_header( m_pop3, info->msg_index, &header, &length );
77 if ( err != MAILPOP3_NO_ERROR ) { 83 if ( err != MAILPOP3_NO_ERROR ) {
78 qDebug( "POP3: error retrieving header msgid: %i", info->msg_index ); 84 qDebug( "POP3: error retrieving header msgid: %i", info->msg_index );
85 free(header);
79 logout(); 86 logout();
80 return; 87 return;
81 } 88 }
82 RecMail *mail = parseHeader( header ); 89 RecMail *mail = parseHeader( header );
83 mail->setNumber( info->msg_index ); 90 mail->setNumber( info->msg_index );
84 mail->setWrapper(this); 91 mail->setWrapper(this);
85 target.append( mail ); 92 target.append( mail );
93 free(header);
86 } 94 }
87
88 logout(); 95 logout();
89} 96}
90 97
91RecMail *POP3wrapper::parseHeader( const char *header ) 98RecMail *POP3wrapper::parseHeader( const char *header )
92{ 99{
93 int err = MAILIMF_NO_ERROR; 100 int err = MAILIMF_NO_ERROR;
94 size_t curTok; 101 size_t curTok = 0;
95 RecMail *mail = new RecMail(); 102 RecMail *mail = new RecMail();
96 mailimf_fields *fields; 103 mailimf_fields *fields;
97 104 mailimf_references * refs;
105 mailimf_keywords*keys;
106
98 err = mailimf_fields_parse( (char *) header, strlen( header ), &curTok, &fields ); 107 err = mailimf_fields_parse( (char *) header, strlen( header ), &curTok, &fields );
99 for ( clistiter *current = clist_begin( fields->fld_list ); current != NULL; current = current->next ) { 108 for ( clistiter *current = clist_begin( fields->fld_list ); current != NULL; current = current->next ) {
100 mailimf_field *field = (mailimf_field *) current->data; 109 mailimf_field *field = (mailimf_field *) current->data;
101 switch ( field->fld_type ) { 110 switch ( field->fld_type ) {
102 case MAILIMF_FIELD_FROM: 111 case MAILIMF_FIELD_FROM:
103 mail->setFrom( parseMailboxList( field->fld_data.fld_from->frm_mb_list ) ); 112 mail->setFrom( parseMailboxList( field->fld_data.fld_from->frm_mb_list ) );
104 break; 113 break;
105 case MAILIMF_FIELD_TO: 114 case MAILIMF_FIELD_TO:
106 mail->setTo( parseAddressList( field->fld_data.fld_to->to_addr_list ) ); 115 mail->setTo( parseAddressList( field->fld_data.fld_to->to_addr_list ) );
107 break; 116 break;
108 case MAILIMF_FIELD_CC: 117 case MAILIMF_FIELD_CC:
109 mail->setCC( parseAddressList( field->fld_data.fld_cc->cc_addr_list ) ); 118 mail->setCC( parseAddressList( field->fld_data.fld_cc->cc_addr_list ) );
110 break; 119 break;
111 case MAILIMF_FIELD_BCC: 120 case MAILIMF_FIELD_BCC:
112 mail->setBcc( parseAddressList( field->fld_data.fld_bcc->bcc_addr_list ) ); 121 mail->setBcc( parseAddressList( field->fld_data.fld_bcc->bcc_addr_list ) );
113 break; 122 break;
114 case MAILIMF_FIELD_SUBJECT: 123 case MAILIMF_FIELD_SUBJECT:
115 mail->setSubject( QString( field->fld_data.fld_subject->sbj_value ) ); 124 mail->setSubject( QString( field->fld_data.fld_subject->sbj_value ) );
116 break; 125 break;
117 case MAILIMF_FIELD_ORIG_DATE: 126 case MAILIMF_FIELD_ORIG_DATE:
118 mail->setDate( parseDateTime( field->fld_data.fld_orig_date->dt_date_time ) ); 127 mail->setDate( parseDateTime( field->fld_data.fld_orig_date->dt_date_time ) );
119 break; 128 break;
129 case MAILIMF_FIELD_MESSAGE_ID:
130 mail->setMsgid(QString(field->fld_data.fld_message_id->mid_value));
131 break;
132 case MAILIMF_FIELD_REFERENCES:
133 refs = field->fld_data.fld_references;
134 if (refs && refs->mid_list && clist_count(refs->mid_list)) {
135 char * text = (char*)refs->mid_list->first->data;
136 mail->setReplyto(QString(text));
137 }
138 break;
139 case MAILIMF_FIELD_KEYWORDS:
140 keys = field->fld_data.fld_keywords;
141 for (clistcell*cur = clist_begin(keys->kw_list);cur!=0;cur=clist_next(cur)) {
142 qDebug("Keyword: %s",(char*)cur->data);
143 }
144 break;
120 default: 145 default:
121 break; 146 break;
122 } 147 }
123 } 148 }
124 149 if (fields) mailimf_fields_free(fields);
125 return mail; 150 return mail;
126} 151}
127 152
128QString POP3wrapper::parseDateTime( mailimf_date_time *date ) 153QString POP3wrapper::parseDateTime( mailimf_date_time *date )
129{ 154{
130 char tmp[23]; 155 char tmp[23];
131 156
132 snprintf( tmp, 23, "%02i.%02i.%04i %02i:%02i:%02i %+05i", 157 snprintf( tmp, 23, "%02i.%02i.%04i %02i:%02i:%02i %+05i",
133 date->dt_day, date->dt_month, date->dt_year, date->dt_hour, date->dt_min, date->dt_sec, date->dt_zone ); 158 date->dt_day, date->dt_month, date->dt_year, date->dt_hour, date->dt_min, date->dt_sec, date->dt_zone );
134 159
135 return QString( tmp ); 160 return QString( tmp );
136} 161}