summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/composemail.cpp17
-rw-r--r--noncore/net/mail/composemail.h6
-rw-r--r--noncore/net/mail/libmailwrapper/mailtypes.cpp13
-rw-r--r--noncore/net/mail/libmailwrapper/mailtypes.h4
-rw-r--r--noncore/net/mail/libmailwrapper/mailwrapper.h3
-rw-r--r--noncore/net/mail/libmailwrapper/smtpwrapper.cpp29
-rw-r--r--noncore/net/mail/viewmail.cpp6
7 files changed, 61 insertions, 17 deletions
diff --git a/noncore/net/mail/composemail.cpp b/noncore/net/mail/composemail.cpp
index f8ac76f..b5cd75b 100644
--- a/noncore/net/mail/composemail.cpp
+++ b/noncore/net/mail/composemail.cpp
@@ -1,240 +1,239 @@
1#include <qt.h> 1#include <qt.h>
2 2
3#include <opie2/ofiledialog.h> 3#include <opie2/ofiledialog.h>
4#include <qpe/resource.h> 4#include <qpe/resource.h>
5#include <qpe/config.h> 5#include <qpe/config.h>
6#include <qpe/global.h> 6#include <qpe/global.h>
7#include <qpe/contact.h> 7#include <qpe/contact.h>
8 8
9#include "composemail.h" 9#include "composemail.h"
10 10
11#include <libmailwrapper/smtpwrapper.h> 11#include <libmailwrapper/smtpwrapper.h>
12 12
13ComposeMail::ComposeMail( Settings *s, QWidget *parent, const char *name, bool modal, WFlags flags ) 13ComposeMail::ComposeMail( Settings *s, QWidget *parent, const char *name, bool modal, WFlags flags )
14 : ComposeMailUI( parent, name, modal, flags ) 14 : ComposeMailUI( parent, name, modal, flags )
15{ 15{
16 settings = s; 16 settings = s;
17 m_replyid = "";
17 18
18 QString vfilename = Global::applicationFileName("addressbook", 19 QString vfilename = Global::applicationFileName("addressbook",
19 "businesscard.vcf"); 20 "businesscard.vcf");
20 Contact c; 21 Contact c;
21 if (QFile::exists(vfilename)) { 22 if (QFile::exists(vfilename)) {
22 c = Contact::readVCard( vfilename )[0]; 23 c = Contact::readVCard( vfilename )[0];
23 } 24 }
24 25
25 QStringList mails = c.emailList(); 26 QStringList mails = c.emailList();
26 QString defmail = c.defaultEmail(); 27 QString defmail = c.defaultEmail();
27 28
28 if (defmail.length()!=0) { 29 if (defmail.length()!=0) {
29 fromBox->insertItem(defmail); 30 fromBox->insertItem(defmail);
30 } 31 }
31 QStringList::ConstIterator sit = mails.begin(); 32 QStringList::ConstIterator sit = mails.begin();
32 for (;sit!=mails.end();++sit) { 33 for (;sit!=mails.end();++sit) {
33 if ( (*sit)==defmail) 34 if ( (*sit)==defmail)
34 continue; 35 continue;
35 fromBox->insertItem((*sit)); 36 fromBox->insertItem((*sit));
36 } 37 }
37 senderNameEdit->setText(c.firstName()+" "+c.lastName()); 38 senderNameEdit->setText(c.firstName()+" "+c.lastName());
38 Config cfg( "mail" ); 39 Config cfg( "mail" );
39 cfg.setGroup( "Compose" ); 40 cfg.setGroup( "Compose" );
40 checkBoxLater->setChecked( cfg.readBoolEntry( "sendLater", false ) ); 41 checkBoxLater->setChecked( cfg.readBoolEntry( "sendLater", false ) );
41 42
42 attList->addColumn( tr( "Name" ) ); 43 attList->addColumn( tr( "Name" ) );
43 attList->addColumn( tr( "Size" ) ); 44 attList->addColumn( tr( "Size" ) );
44 45
45 QList<Account> accounts = settings->getAccounts(); 46 QList<Account> accounts = settings->getAccounts();
46 47
47 Account *it; 48 Account *it;
48 for ( it = accounts.first(); it; it = accounts.next() ) { 49 for ( it = accounts.first(); it; it = accounts.next() ) {
49 if ( it->getType()==MAILLIB::A_SMTP ) { 50 if ( it->getType()==MAILLIB::A_SMTP ) {
50 SMTPaccount *smtp = static_cast<SMTPaccount *>(it); 51 SMTPaccount *smtp = static_cast<SMTPaccount *>(it);
51 smtpAccountBox->insertItem( smtp->getAccountName() ); 52 smtpAccountBox->insertItem( smtp->getAccountName() );
52 smtpAccounts.append( smtp ); 53 smtpAccounts.append( smtp );
53 } 54 }
54 } 55 }
55 56
56 if ( smtpAccounts.count() > 0 ) { 57 if ( smtpAccounts.count() > 0 ) {
57 fillValues( smtpAccountBox->currentItem() ); 58 fillValues( smtpAccountBox->currentItem() );
58 } else { 59 } else {
59 QMessageBox::information( this, tr( "Problem" ), 60 QMessageBox::information( this, tr( "Problem" ),
60 tr( "<p>Please create an SMTP account first.</p>" ), 61 tr( "<p>Please create an SMTP account first.</p>" ),
61 tr( "Ok" ) ); 62 tr( "Ok" ) );
62 return; 63 return;
63 } 64 }
64 65
65 connect( smtpAccountBox, SIGNAL( activated(int) ), SLOT( fillValues(int) ) ); 66 connect( smtpAccountBox, SIGNAL( activated(int) ), SLOT( fillValues(int) ) );
66 connect( toButton, SIGNAL( clicked() ), SLOT( pickAddressTo() ) ); 67 connect( toButton, SIGNAL( clicked() ), SLOT( pickAddressTo() ) );
67 connect( ccButton, SIGNAL( clicked() ), SLOT( pickAddressCC() ) ); 68 connect( ccButton, SIGNAL( clicked() ), SLOT( pickAddressCC() ) );
68 connect( bccButton, SIGNAL( clicked() ), SLOT( pickAddressBCC() ) ); 69 connect( bccButton, SIGNAL( clicked() ), SLOT( pickAddressBCC() ) );
69 connect( replyButton, SIGNAL( clicked() ), SLOT( pickAddressReply() ) ); 70 connect( replyButton, SIGNAL( clicked() ), SLOT( pickAddressReply() ) );
70 connect( addButton, SIGNAL( clicked() ), SLOT( addAttachment() ) ); 71 connect( addButton, SIGNAL( clicked() ), SLOT( addAttachment() ) );
71 connect( deleteButton, SIGNAL( clicked() ), SLOT( removeAttachment() ) ); 72 connect( deleteButton, SIGNAL( clicked() ), SLOT( removeAttachment() ) );
72} 73}
73 74
74void ComposeMail::pickAddress( QLineEdit *line ) 75void ComposeMail::pickAddress( QLineEdit *line )
75{ 76{
76 QString names = AddressPicker::getNames(); 77 QString names = AddressPicker::getNames();
77 if ( line->text().isEmpty() ) { 78 if ( line->text().isEmpty() ) {
78 line->setText( names ); 79 line->setText( names );
79 } else if ( !names.isEmpty() ) { 80 } else if ( !names.isEmpty() ) {
80 line->setText( line->text() + ", " + names ); 81 line->setText( line->text() + ", " + names );
81 } 82 }
82} 83}
83 84
84 85
85void ComposeMail::setTo( const QString & to ) 86void ComposeMail::setTo( const QString & to )
86{ 87{
87/* QString toline; 88 toLine->setText( to );
88 QStringList toEntry = to;
89 for ( QStringList::Iterator it = toEntry.begin(); it != toEntry.end(); ++it ) {
90 toline += (*it);
91 }
92 toLine->setText( toline );
93*/
94toLine->setText( to );
95} 89}
96 90
97void ComposeMail::setSubject( const QString & subject ) 91void ComposeMail::setSubject( const QString & subject )
98{ 92{
99 subjectLine->setText( subject ); 93 subjectLine->setText( subject );
100} 94}
101 95
102void ComposeMail::setInReplyTo( const QString & messageId ) 96void ComposeMail::setInReplyTo( const QString & messageId )
103{ 97{
104 98 m_replyid = messageId;
105} 99}
106 100
107void ComposeMail::setMessage( const QString & text ) 101void ComposeMail::setMessage( const QString & text )
108{ 102{
109 message->setText( text ); 103 message->setText( text );
110} 104}
111 105
112 106
113void ComposeMail::pickAddressTo() 107void ComposeMail::pickAddressTo()
114{ 108{
115 pickAddress( toLine ); 109 pickAddress( toLine );
116} 110}
117 111
118void ComposeMail::pickAddressCC() 112void ComposeMail::pickAddressCC()
119{ 113{
120 pickAddress( ccLine ); 114 pickAddress( ccLine );
121} 115}
122 116
123void ComposeMail::pickAddressBCC() 117void ComposeMail::pickAddressBCC()
124{ 118{
125 pickAddress( bccLine ); 119 pickAddress( bccLine );
126} 120}
127 121
128void ComposeMail::pickAddressReply() 122void ComposeMail::pickAddressReply()
129{ 123{
130 pickAddress( replyLine ); 124 pickAddress( replyLine );
131} 125}
132 126
133void ComposeMail::fillValues( int current ) 127void ComposeMail::fillValues( int current )
134{ 128{
135#if 0 129#if 0
136 SMTPaccount *smtp = smtpAccounts.at( current ); 130 SMTPaccount *smtp = smtpAccounts.at( current );
137 ccLine->clear(); 131 ccLine->clear();
138 if ( smtp->getUseCC() ) { 132 if ( smtp->getUseCC() ) {
139 ccLine->setText( smtp->getCC() ); 133 ccLine->setText( smtp->getCC() );
140 } 134 }
141 bccLine->clear(); 135 bccLine->clear();
142 if ( smtp->getUseBCC() ) { 136 if ( smtp->getUseBCC() ) {
143 bccLine->setText( smtp->getBCC() ); 137 bccLine->setText( smtp->getBCC() );
144 } 138 }
145 replyLine->clear(); 139 replyLine->clear();
146 if ( smtp->getUseReply() ) { 140 if ( smtp->getUseReply() ) {
147 replyLine->setText( smtp->getReply() ); 141 replyLine->setText( smtp->getReply() );
148 } 142 }
149 sigMultiLine->setText( smtp->getSignature() ); 143 sigMultiLine->setText( smtp->getSignature() );
150#endif 144#endif
151} 145}
152 146
153void ComposeMail::slotAdjustColumns() 147void ComposeMail::slotAdjustColumns()
154{ 148{
155 int currPage = tabWidget->currentPageIndex(); 149 int currPage = tabWidget->currentPageIndex();
156 150
157 tabWidget->showPage( attachTab ); 151 tabWidget->showPage( attachTab );
158 attList->setColumnWidth( 0, attList->visibleWidth() - 80 ); 152 attList->setColumnWidth( 0, attList->visibleWidth() - 80 );
159 attList->setColumnWidth( 1, 80 ); 153 attList->setColumnWidth( 1, 80 );
160 154
161 tabWidget->setCurrentPage( currPage ); 155 tabWidget->setCurrentPage( currPage );
162} 156}
163 157
164void ComposeMail::addAttachment() 158void ComposeMail::addAttachment()
165{ 159{
166 DocLnk lnk = Opie::OFileDialog::getOpenFileName( 1, "/" ); 160 DocLnk lnk = Opie::OFileDialog::getOpenFileName( 1, "/" );
167 if ( !lnk.name().isEmpty() ) { 161 if ( !lnk.name().isEmpty() ) {
168 Attachment *att = new Attachment( lnk ); 162 Attachment *att = new Attachment( lnk );
169 (void) new AttachViewItem( attList, att ); 163 (void) new AttachViewItem( attList, att );
170 } 164 }
171} 165}
172 166
173void ComposeMail::removeAttachment() 167void ComposeMail::removeAttachment()
174{ 168{
175 if ( !attList->currentItem() ) { 169 if ( !attList->currentItem() ) {
176 QMessageBox::information( this, tr( "Error" ), 170 QMessageBox::information( this, tr( "Error" ),
177 tr( "<p>Please select a File.</p>" ), 171 tr( "<p>Please select a File.</p>" ),
178 tr( "Ok" ) ); 172 tr( "Ok" ) );
179 } else { 173 } else {
180 attList->takeItem( attList->currentItem() ); 174 attList->takeItem( attList->currentItem() );
181 } 175 }
182} 176}
183 177
184void ComposeMail::accept() 178void ComposeMail::accept()
185{ 179{
186 if ( checkBoxLater->isChecked() ) { 180 if ( checkBoxLater->isChecked() ) {
187 qDebug( "Send later" ); 181 qDebug( "Send later" );
188 } 182 }
189 183
190#if 0 184#if 0
191 qDebug( "Sending Mail with " + 185 qDebug( "Sending Mail with " +
192 smtpAccounts.at( smtpAccountBox->currentItem() )->getAccountName() ); 186 smtpAccounts.at( smtpAccountBox->currentItem() )->getAccountName() );
193#endif 187#endif
194 Mail *mail = new Mail(); 188 Mail *mail = new Mail();
195 189
196 SMTPaccount *smtp = smtpAccounts.at( smtpAccountBox->currentItem() ); 190 SMTPaccount *smtp = smtpAccounts.at( smtpAccountBox->currentItem() );
197 mail->setMail(fromBox->currentText()); 191 mail->setMail(fromBox->currentText());
198 192
199 if ( !toLine->text().isEmpty() ) { 193 if ( !toLine->text().isEmpty() ) {
200 mail->setTo( toLine->text() ); 194 mail->setTo( toLine->text() );
201 } else { 195 } else {
202 qDebug( "No Reciever spezified -> returning" ); 196 qDebug( "No Reciever spezified -> returning" );
203 return; 197 return;
204 } 198 }
205 mail->setName(senderNameEdit->text()); 199 mail->setName(senderNameEdit->text());
206 mail->setCC( ccLine->text() ); 200 mail->setCC( ccLine->text() );
207 mail->setBCC( bccLine->text() ); 201 mail->setBCC( bccLine->text() );
208 mail->setReply( replyLine->text() ); 202 mail->setReply( replyLine->text() );
209 mail->setSubject( subjectLine->text() ); 203 mail->setSubject( subjectLine->text() );
204 if (!m_replyid.isEmpty()) {
205 QStringList ids;
206 ids.append(m_replyid);
207 mail->setInreply(ids);
208 }
210 QString txt = message->text(); 209 QString txt = message->text();
211 if ( !sigMultiLine->text().isEmpty() ) { 210 if ( !sigMultiLine->text().isEmpty() ) {
212 txt.append( "\n--\n" ); 211 txt.append( "\n--\n" );
213 txt.append( sigMultiLine->text() ); 212 txt.append( sigMultiLine->text() );
214 } 213 }
215 qDebug(txt); 214 qDebug(txt);
216 mail->setMessage( txt ); 215 mail->setMessage( txt );
217 AttachViewItem *it = (AttachViewItem *) attList->firstChild(); 216 AttachViewItem *it = (AttachViewItem *) attList->firstChild();
218 while ( it != NULL ) { 217 while ( it != NULL ) {
219 mail->addAttachment( it->getAttachment() ); 218 mail->addAttachment( it->getAttachment() );
220 it = (AttachViewItem *) it->nextSibling(); 219 it = (AttachViewItem *) it->nextSibling();
221 } 220 }
222 221
223 SMTPwrapper wrapper( smtp ); 222 SMTPwrapper wrapper( smtp );
224 wrapper.sendMail( *mail,checkBoxLater->isChecked() ); 223 wrapper.sendMail( *mail,checkBoxLater->isChecked() );
225 224
226 QDialog::accept(); 225 QDialog::accept();
227} 226}
228 227
229AttachViewItem::AttachViewItem( QListView *parent, Attachment *att ) 228AttachViewItem::AttachViewItem( QListView *parent, Attachment *att )
230 : QListViewItem( parent ) 229 : QListViewItem( parent )
231{ 230{
232 attachment = att; 231 attachment = att;
233 qDebug( att->getMimeType() ); 232 qDebug( att->getMimeType() );
234 setPixmap( 0, attachment->getDocLnk().pixmap().isNull() ? 233 setPixmap( 0, attachment->getDocLnk().pixmap().isNull() ?
235 Resource::loadPixmap( "UnknownDocument-14" ) : 234 Resource::loadPixmap( "UnknownDocument-14" ) :
236 attachment->getDocLnk().pixmap() ); 235 attachment->getDocLnk().pixmap() );
237 setText( 0, att->getName().isEmpty() ? att->getFileName() : att->getName() ); 236 setText( 0, att->getName().isEmpty() ? att->getFileName() : att->getName() );
238 setText( 1, QString::number( att->getSize() ) ); 237 setText( 1, QString::number( att->getSize() ) );
239} 238}
240 239
diff --git a/noncore/net/mail/composemail.h b/noncore/net/mail/composemail.h
index 604c862..886fb1d 100644
--- a/noncore/net/mail/composemail.h
+++ b/noncore/net/mail/composemail.h
@@ -1,76 +1,74 @@
1#ifndef COMPOSEMAIL_H 1#ifndef COMPOSEMAIL_H
2#define COMPOSEMAIL_H 2#define COMPOSEMAIL_H
3 3
4#include <qlineedit.h> 4#include <qlineedit.h>
5#include <qlistview.h> 5#include <qlistview.h>
6 6
7#include "composemailui.h" 7#include "composemailui.h"
8#include "addresspickerui.h" 8#include "addresspickerui.h"
9#include <libmailwrapper/settings.h> 9#include <libmailwrapper/settings.h>
10#include <libmailwrapper/mailwrapper.h> 10#include <libmailwrapper/mailwrapper.h>
11 11
12 12
13 13
14class AddressPicker : public AddressPickerUI 14class AddressPicker : public AddressPickerUI
15{ 15{
16 Q_OBJECT 16 Q_OBJECT
17 17
18public: 18public:
19 AddressPicker( QWidget *parent = 0, const char *name = 0, bool modal = false, WFlags flags = 0 ); 19 AddressPicker( QWidget *parent = 0, const char *name = 0, bool modal = false, WFlags flags = 0 );
20 static QString getNames(); 20 static QString getNames();
21 21
22protected: 22protected:
23 QString selectedNames; 23 QString selectedNames;
24 void accept(); 24 void accept();
25 25
26}; 26};
27 27
28 28
29class ComposeMail : public ComposeMailUI 29class ComposeMail : public ComposeMailUI
30{ 30{
31 Q_OBJECT 31 Q_OBJECT
32 32
33public: 33public:
34 ComposeMail( Settings *s, QWidget *parent = 0, const char *name = 0, bool modal = false, WFlags flags = 0 ); 34 ComposeMail( Settings *s, QWidget *parent = 0, const char *name = 0, bool modal = false, WFlags flags = 0 );
35 35
36public slots: 36public slots:
37 void slotAdjustColumns(); 37 void slotAdjustColumns();
38 38
39 void setTo( const QString & to ); 39 void setTo( const QString & to );
40 void setSubject( const QString & subject ); 40 void setSubject( const QString & subject );
41 void setInReplyTo( const QString & messageId ); 41 void setInReplyTo( const QString & messageId );
42 void setMessage( const QString & text ); 42 void setMessage( const QString & text );
43 43
44protected slots: 44protected slots:
45 void accept(); 45 void accept();
46 46
47private slots: 47private slots:
48 void fillValues( int current ); 48 void fillValues( int current );
49 void pickAddress( QLineEdit *line ); 49 void pickAddress( QLineEdit *line );
50 void pickAddressTo(); 50 void pickAddressTo();
51 void pickAddressCC(); 51 void pickAddressCC();
52 void pickAddressBCC(); 52 void pickAddressBCC();
53 void pickAddressReply(); 53 void pickAddressReply();
54 void addAttachment(); 54 void addAttachment();
55 void removeAttachment(); 55 void removeAttachment();
56 56
57 57protected:
58
59private:
60 Settings *settings; 58 Settings *settings;
61 QList<SMTPaccount> smtpAccounts; 59 QList<SMTPaccount> smtpAccounts;
62 60 QString m_replyid;
63}; 61};
64 62
65class AttachViewItem : public QListViewItem 63class AttachViewItem : public QListViewItem
66{ 64{
67 public: 65 public:
68 AttachViewItem( QListView *parent, Attachment *att ); 66 AttachViewItem( QListView *parent, Attachment *att );
69 Attachment *getAttachment() { return attachment; } 67 Attachment *getAttachment() { return attachment; }
70 68
71private: 69private:
72 Attachment *attachment; 70 Attachment *attachment;
73 71
74}; 72};
75 73
76#endif 74#endif
diff --git a/noncore/net/mail/libmailwrapper/mailtypes.cpp b/noncore/net/mail/libmailwrapper/mailtypes.cpp
index bf91c63..96e0fd5 100644
--- a/noncore/net/mail/libmailwrapper/mailtypes.cpp
+++ b/noncore/net/mail/libmailwrapper/mailtypes.cpp
@@ -1,278 +1,291 @@
1#include "mailtypes.h" 1#include "mailtypes.h"
2#include <stdlib.h> 2#include <stdlib.h>
3 3
4RecMail::RecMail() 4RecMail::RecMail()
5 :subject(""),date(""),from(""),mbox(""),msg_id(""),msg_number(0),msg_size(0),msg_flags(7) 5 :subject(""),date(""),from(""),mbox(""),msg_id(""),msg_number(0),msg_size(0),msg_flags(7)
6{ 6{
7 init(); 7 init();
8} 8}
9 9
10RecMail::RecMail(const RecMail&old) 10RecMail::RecMail(const RecMail&old)
11 :subject(""),date(""),from(""),mbox(""),msg_id(""),msg_number(0),msg_flags(7) 11 :subject(""),date(""),from(""),mbox(""),msg_id(""),msg_number(0),msg_flags(7)
12{ 12{
13 init(); 13 init();
14 copy_old(old); 14 copy_old(old);
15 qDebug("Copy constructor RecMail"); 15 qDebug("Copy constructor RecMail");
16} 16}
17 17
18RecMail::~RecMail() 18RecMail::~RecMail()
19{ 19{
20 wrapper = 0; 20 wrapper = 0;
21} 21}
22 22
23void RecMail::copy_old(const RecMail&old) 23void RecMail::copy_old(const RecMail&old)
24{ 24{
25 subject = old.subject; 25 subject = old.subject;
26 date = old.date; 26 date = old.date;
27 mbox = old.mbox; 27 mbox = old.mbox;
28 msg_id = old.msg_id; 28 msg_id = old.msg_id;
29 msg_size = old.msg_size; 29 msg_size = old.msg_size;
30 msg_number = old.msg_number; 30 msg_number = old.msg_number;
31 from = old.from; 31 from = old.from;
32 msg_flags = old.msg_flags; 32 msg_flags = old.msg_flags;
33 to = old.to; 33 to = old.to;
34 cc = old.cc; 34 cc = old.cc;
35 bcc = old.bcc; 35 bcc = old.bcc;
36 wrapper = old.wrapper; 36 wrapper = old.wrapper;
37 in_reply_to = old.in_reply_to;
37} 38}
38 39
39void RecMail::init() 40void RecMail::init()
40{ 41{
41 to.clear(); 42 to.clear();
42 cc.clear(); 43 cc.clear();
43 bcc.clear(); 44 bcc.clear();
45 in_reply_to.clear();
44 wrapper = 0; 46 wrapper = 0;
45} 47}
46 48
47void RecMail::setWrapper(AbstractMail*awrapper) 49void RecMail::setWrapper(AbstractMail*awrapper)
48{ 50{
49 wrapper = awrapper; 51 wrapper = awrapper;
50} 52}
51 53
52AbstractMail* RecMail::Wrapper() 54AbstractMail* RecMail::Wrapper()
53{ 55{
54 return wrapper; 56 return wrapper;
55} 57}
56 58
57void RecMail::setTo(const QStringList&list) 59void RecMail::setTo(const QStringList&list)
58{ 60{
59 to = list; 61 to = list;
60} 62}
61 63
62const QStringList&RecMail::To()const 64const QStringList&RecMail::To()const
63{ 65{
64 return to; 66 return to;
65} 67}
66 68
67void RecMail::setCC(const QStringList&list) 69void RecMail::setCC(const QStringList&list)
68{ 70{
69 cc = list; 71 cc = list;
70} 72}
71 73
72const QStringList&RecMail::CC()const 74const QStringList&RecMail::CC()const
73{ 75{
74 return cc; 76 return cc;
75} 77}
76 78
77void RecMail::setBcc(const QStringList&list) 79void RecMail::setBcc(const QStringList&list)
78{ 80{
79 bcc = list; 81 bcc = list;
80} 82}
81 83
82const QStringList& RecMail::Bcc()const 84const QStringList& RecMail::Bcc()const
83{ 85{
84 return bcc; 86 return bcc;
85} 87}
86 88
89void RecMail::setInreply(const QStringList&list)
90{
91 in_reply_to = list;
92}
93
94const QStringList& RecMail::Inreply()const
95{
96 return in_reply_to;
97}
98
99
87RecPart::RecPart() 100RecPart::RecPart()
88 : m_type(""),m_subtype(""),m_identifier(""),m_encoding(""),m_description(""),m_lines(0),m_size(0) 101 : m_type(""),m_subtype(""),m_identifier(""),m_encoding(""),m_description(""),m_lines(0),m_size(0)
89{ 102{
90 m_Parameters.clear(); 103 m_Parameters.clear();
91 m_poslist.clear(); 104 m_poslist.clear();
92} 105}
93 106
94RecPart::~RecPart() 107RecPart::~RecPart()
95{ 108{
96} 109}
97 110
98void RecPart::setSize(unsigned int size) 111void RecPart::setSize(unsigned int size)
99{ 112{
100 m_size = size; 113 m_size = size;
101} 114}
102 115
103const unsigned int RecPart::Size()const 116const unsigned int RecPart::Size()const
104{ 117{
105 return m_size; 118 return m_size;
106} 119}
107 120
108void RecPart::setLines(unsigned int lines) 121void RecPart::setLines(unsigned int lines)
109{ 122{
110 m_lines = lines; 123 m_lines = lines;
111} 124}
112 125
113const unsigned int RecPart::Lines()const 126const unsigned int RecPart::Lines()const
114{ 127{
115 return m_lines; 128 return m_lines;
116} 129}
117 130
118const QString& RecPart::Type()const 131const QString& RecPart::Type()const
119{ 132{
120 return m_type; 133 return m_type;
121} 134}
122 135
123void RecPart::setType(const QString&type) 136void RecPart::setType(const QString&type)
124{ 137{
125 m_type = type; 138 m_type = type;
126} 139}
127 140
128const QString& RecPart::Subtype()const 141const QString& RecPart::Subtype()const
129{ 142{
130 return m_subtype; 143 return m_subtype;
131} 144}
132 145
133void RecPart::setSubtype(const QString&subtype) 146void RecPart::setSubtype(const QString&subtype)
134{ 147{
135 m_subtype = subtype; 148 m_subtype = subtype;
136} 149}
137 150
138const QString& RecPart::Identifier()const 151const QString& RecPart::Identifier()const
139{ 152{
140 return m_identifier; 153 return m_identifier;
141} 154}
142 155
143void RecPart::setIdentifier(const QString&identifier) 156void RecPart::setIdentifier(const QString&identifier)
144{ 157{
145 m_identifier = identifier; 158 m_identifier = identifier;
146} 159}
147 160
148const QString& RecPart::Encoding()const 161const QString& RecPart::Encoding()const
149{ 162{
150 return m_encoding; 163 return m_encoding;
151} 164}
152 165
153void RecPart::setEncoding(const QString&encoding) 166void RecPart::setEncoding(const QString&encoding)
154{ 167{
155 m_encoding = encoding; 168 m_encoding = encoding;
156} 169}
157 170
158const QString& RecPart::Description()const 171const QString& RecPart::Description()const
159{ 172{
160 return m_description; 173 return m_description;
161} 174}
162 175
163void RecPart::setDescription(const QString&desc) 176void RecPart::setDescription(const QString&desc)
164{ 177{
165 m_description = desc; 178 m_description = desc;
166} 179}
167 180
168void RecPart::setParameters(const part_plist_t&list) 181void RecPart::setParameters(const part_plist_t&list)
169{ 182{
170 m_Parameters = list; 183 m_Parameters = list;
171} 184}
172 185
173const part_plist_t& RecPart::Parameters()const 186const part_plist_t& RecPart::Parameters()const
174{ 187{
175 return m_Parameters; 188 return m_Parameters;
176} 189}
177 190
178void RecPart::addParameter(const QString&key,const QString&value) 191void RecPart::addParameter(const QString&key,const QString&value)
179{ 192{
180 m_Parameters[key]=value; 193 m_Parameters[key]=value;
181} 194}
182 195
183const QString RecPart::searchParamter(const QString&key)const 196const QString RecPart::searchParamter(const QString&key)const
184{ 197{
185 QString value(""); 198 QString value("");
186 part_plist_t::ConstIterator it = m_Parameters.find(key); 199 part_plist_t::ConstIterator it = m_Parameters.find(key);
187 if (it != m_Parameters.end()) { 200 if (it != m_Parameters.end()) {
188 value = it.data(); 201 value = it.data();
189 } 202 }
190 return value; 203 return value;
191} 204}
192 205
193void RecPart::setPositionlist(const QValueList<int>&poslist) 206void RecPart::setPositionlist(const QValueList<int>&poslist)
194{ 207{
195 m_poslist = poslist; 208 m_poslist = poslist;
196} 209}
197 210
198const QValueList<int>& RecPart::Positionlist()const 211const QValueList<int>& RecPart::Positionlist()const
199{ 212{
200 return m_poslist; 213 return m_poslist;
201} 214}
202 215
203RecBody::RecBody() 216RecBody::RecBody()
204 : m_BodyText(),m_PartsList(),m_description() 217 : m_BodyText(),m_PartsList(),m_description()
205{ 218{
206 m_PartsList.clear(); 219 m_PartsList.clear();
207} 220}
208 221
209RecBody::~RecBody() 222RecBody::~RecBody()
210{ 223{
211} 224}
212 225
213void RecBody::setBodytext(const QString&bodyText) 226void RecBody::setBodytext(const QString&bodyText)
214{ 227{
215 m_BodyText = bodyText; 228 m_BodyText = bodyText;
216} 229}
217 230
218const QString& RecBody::Bodytext()const 231const QString& RecBody::Bodytext()const
219{ 232{
220 return m_BodyText; 233 return m_BodyText;
221} 234}
222 235
223void RecBody::setParts(const QValueList<RecPart>&parts) 236void RecBody::setParts(const QValueList<RecPart>&parts)
224{ 237{
225 m_PartsList.clear(); 238 m_PartsList.clear();
226 m_PartsList = parts; 239 m_PartsList = parts;
227} 240}
228 241
229const QValueList<RecPart>& RecBody::Parts()const 242const QValueList<RecPart>& RecBody::Parts()const
230{ 243{
231 return m_PartsList; 244 return m_PartsList;
232} 245}
233 246
234void RecBody::addPart(const RecPart& part) 247void RecBody::addPart(const RecPart& part)
235{ 248{
236 m_PartsList.append(part); 249 m_PartsList.append(part);
237} 250}
238 251
239void RecBody::setDescription(const RecPart&des) 252void RecBody::setDescription(const RecPart&des)
240{ 253{
241 m_description = des; 254 m_description = des;
242} 255}
243 256
244const RecPart& RecBody::Description()const 257const RecPart& RecBody::Description()const
245{ 258{
246 return m_description; 259 return m_description;
247} 260}
248 261
249/* handling encoded content */ 262/* handling encoded content */
250encodedString::encodedString() 263encodedString::encodedString()
251{ 264{
252 init(); 265 init();
253} 266}
254 267
255encodedString::encodedString(const char*nContent,unsigned int nSize) 268encodedString::encodedString(const char*nContent,unsigned int nSize)
256{ 269{
257 init(); 270 init();
258 setContent(nContent,nSize); 271 setContent(nContent,nSize);
259} 272}
260 273
261encodedString::encodedString(char*nContent,unsigned int nSize) 274encodedString::encodedString(char*nContent,unsigned int nSize)
262{ 275{
263 init(); 276 init();
264 setContent(nContent,nSize); 277 setContent(nContent,nSize);
265} 278}
266 279
267encodedString::encodedString(const encodedString&old) 280encodedString::encodedString(const encodedString&old)
268{ 281{
269 init(); 282 init();
270 copy_old(old); 283 copy_old(old);
271 qDebug("encodedeString: copy constructor!"); 284 qDebug("encodedeString: copy constructor!");
272} 285}
273 286
274encodedString& encodedString::operator=(const encodedString&old) 287encodedString& encodedString::operator=(const encodedString&old)
275{ 288{
276 init(); 289 init();
277 copy_old(old); 290 copy_old(old);
278 qDebug("encodedString: assign operator!"); 291 qDebug("encodedString: assign operator!");
diff --git a/noncore/net/mail/libmailwrapper/mailtypes.h b/noncore/net/mail/libmailwrapper/mailtypes.h
index b2047cb..1420f79 100644
--- a/noncore/net/mail/libmailwrapper/mailtypes.h
+++ b/noncore/net/mail/libmailwrapper/mailtypes.h
@@ -1,193 +1,195 @@
1#ifndef __MAIL_TYPES_H 1#ifndef __MAIL_TYPES_H
2#define __MAIL_TYPES_H 2#define __MAIL_TYPES_H
3 3
4#define FLAG_ANSWERED 0 4#define FLAG_ANSWERED 0
5#define FLAG_FLAGGED 1 5#define FLAG_FLAGGED 1
6#define FLAG_DELETED 2 6#define FLAG_DELETED 2
7#define FLAG_SEEN 3 7#define FLAG_SEEN 3
8#define FLAG_DRAFT 4 8#define FLAG_DRAFT 4
9#define FLAG_RECENT 5 9#define FLAG_RECENT 5
10 10
11#include <qlist.h> 11#include <qlist.h>
12#include <qbitarray.h> 12#include <qbitarray.h>
13#include <qstring.h> 13#include <qstring.h>
14#include <qstringlist.h> 14#include <qstringlist.h>
15#include <qmap.h> 15#include <qmap.h>
16#include <qvaluelist.h> 16#include <qvaluelist.h>
17 17
18class AbstractMail; 18class AbstractMail;
19/* a class to describe mails in a mailbox */ 19/* a class to describe mails in a mailbox */
20/* Attention! 20/* Attention!
21 From programmers point of view it would make sense to 21 From programmers point of view it would make sense to
22 store the mail body into this class, too. 22 store the mail body into this class, too.
23 But: not from the point of view of the device. 23 But: not from the point of view of the device.
24 Mailbodies can be real large. So we request them when 24 Mailbodies can be real large. So we request them when
25 needed from the mail-wrapper class direct from the server itself 25 needed from the mail-wrapper class direct from the server itself
26 (imap) or from a file-based cache (pop3?) 26 (imap) or from a file-based cache (pop3?)
27 So there is no interface "const QString&body()" but you should 27 So there is no interface "const QString&body()" but you should
28 make a request to the mailwrapper with this class as parameter to 28 make a request to the mailwrapper with this class as parameter to
29 get the body. Same words for the attachments. 29 get the body. Same words for the attachments.
30*/ 30*/
31class RecMail 31class RecMail
32{ 32{
33public: 33public:
34 RecMail(); 34 RecMail();
35 RecMail(const RecMail&old); 35 RecMail(const RecMail&old);
36 virtual ~RecMail(); 36 virtual ~RecMail();
37 37
38 const int getNumber()const{return msg_number;} 38 const int getNumber()const{return msg_number;}
39 void setNumber(int number){msg_number=number;} 39 void setNumber(int number){msg_number=number;}
40 const QString&getDate()const{ return date; } 40 const QString&getDate()const{ return date; }
41 void setDate( const QString&a ) { date = a; } 41 void setDate( const QString&a ) { date = a; }
42 const QString&getFrom()const{ return from; } 42 const QString&getFrom()const{ return from; }
43 void setFrom( const QString&a ) { from = a; } 43 void setFrom( const QString&a ) { from = a; }
44 const QString&getSubject()const { return subject; } 44 const QString&getSubject()const { return subject; }
45 void setSubject( const QString&s ) { subject = s; } 45 void setSubject( const QString&s ) { subject = s; }
46 const QString&getMbox()const{return mbox;} 46 const QString&getMbox()const{return mbox;}
47 void setMbox(const QString&box){mbox = box;} 47 void setMbox(const QString&box){mbox = box;}
48 void setMsgid(const QString&id){msg_id=id;} 48 void setMsgid(const QString&id){msg_id=id;}
49 const QString&Msgid()const{return msg_id;} 49 const QString&Msgid()const{return msg_id;}
50 void setReplyto(const QString&reply){replyto=reply;} 50 void setReplyto(const QString&reply){replyto=reply;}
51 const QString&Replyto()const{return replyto;} 51 const QString&Replyto()const{return replyto;}
52 void setMsgsize(int size){msg_size = size;} 52 void setMsgsize(int size){msg_size = size;}
53 const int Msgsize()const{return msg_size;} 53 const int Msgsize()const{return msg_size;}
54 54
55 55
56 void setTo(const QStringList&list); 56 void setTo(const QStringList&list);
57 const QStringList&To()const; 57 const QStringList&To()const;
58 void setCC(const QStringList&list); 58 void setCC(const QStringList&list);
59 const QStringList&CC()const; 59 const QStringList&CC()const;
60 void setBcc(const QStringList&list); 60 void setBcc(const QStringList&list);
61 const QStringList&Bcc()const; 61 const QStringList&Bcc()const;
62 void setInreply(const QStringList&list);
63 const QStringList&Inreply()const;
62 const QBitArray&getFlags()const{return msg_flags;} 64 const QBitArray&getFlags()const{return msg_flags;}
63 void setFlags(const QBitArray&flags){msg_flags = flags;} 65 void setFlags(const QBitArray&flags){msg_flags = flags;}
64 66
65 void setWrapper(AbstractMail*wrapper); 67 void setWrapper(AbstractMail*wrapper);
66 AbstractMail* Wrapper(); 68 AbstractMail* Wrapper();
67 69
68protected: 70protected:
69 QString subject,date,from,mbox,msg_id,replyto; 71 QString subject,date,from,mbox,msg_id,replyto;
70 int msg_number,msg_size; 72 int msg_number,msg_size;
71 QBitArray msg_flags; 73 QBitArray msg_flags;
72 QStringList to,cc,bcc; 74 QStringList to,cc,bcc,in_reply_to;
73 AbstractMail*wrapper; 75 AbstractMail*wrapper;
74 void init(); 76 void init();
75 void copy_old(const RecMail&old); 77 void copy_old(const RecMail&old);
76}; 78};
77 79
78typedef QMap<QString,QString> part_plist_t; 80typedef QMap<QString,QString> part_plist_t;
79 81
80class RecPart 82class RecPart
81{ 83{
82protected: 84protected:
83 QString m_type,m_subtype,m_identifier,m_encoding,m_description; 85 QString m_type,m_subtype,m_identifier,m_encoding,m_description;
84 unsigned int m_lines,m_size; 86 unsigned int m_lines,m_size;
85 part_plist_t m_Parameters; 87 part_plist_t m_Parameters;
86 /* describes the position in the mail */ 88 /* describes the position in the mail */
87 QValueList<int> m_poslist; 89 QValueList<int> m_poslist;
88 90
89public: 91public:
90 RecPart(); 92 RecPart();
91 virtual ~RecPart(); 93 virtual ~RecPart();
92 94
93 const QString&Type()const; 95 const QString&Type()const;
94 void setType(const QString&type); 96 void setType(const QString&type);
95 const QString&Subtype()const; 97 const QString&Subtype()const;
96 void setSubtype(const QString&subtype); 98 void setSubtype(const QString&subtype);
97 const QString&Identifier()const; 99 const QString&Identifier()const;
98 void setIdentifier(const QString&identifier); 100 void setIdentifier(const QString&identifier);
99 const QString&Encoding()const; 101 const QString&Encoding()const;
100 void setEncoding(const QString&encoding); 102 void setEncoding(const QString&encoding);
101 const QString&Description()const; 103 const QString&Description()const;
102 void setDescription(const QString&desc); 104 void setDescription(const QString&desc);
103 void setLines(unsigned int lines); 105 void setLines(unsigned int lines);
104 const unsigned int Lines()const; 106 const unsigned int Lines()const;
105 void setSize(unsigned int size); 107 void setSize(unsigned int size);
106 const unsigned int Size()const; 108 const unsigned int Size()const;
107 109
108 110
109 void setParameters(const part_plist_t&list); 111 void setParameters(const part_plist_t&list);
110 const part_plist_t&Parameters()const; 112 const part_plist_t&Parameters()const;
111 void addParameter(const QString&key,const QString&value); 113 void addParameter(const QString&key,const QString&value);
112 const QString searchParamter(const QString&key)const; 114 const QString searchParamter(const QString&key)const;
113 void setPositionlist(const QValueList<int>&poslist); 115 void setPositionlist(const QValueList<int>&poslist);
114 const QValueList<int>& Positionlist()const; 116 const QValueList<int>& Positionlist()const;
115}; 117};
116 118
117class RecBody 119class RecBody
118{ 120{
119protected: 121protected:
120 QString m_BodyText; 122 QString m_BodyText;
121 QValueList<RecPart> m_PartsList; 123 QValueList<RecPart> m_PartsList;
122 RecPart m_description; 124 RecPart m_description;
123 125
124public: 126public:
125 RecBody(); 127 RecBody();
126 virtual ~RecBody(); 128 virtual ~RecBody();
127 void setBodytext(const QString&); 129 void setBodytext(const QString&);
128 const QString& Bodytext()const; 130 const QString& Bodytext()const;
129 131
130 void setDescription(const RecPart&des); 132 void setDescription(const RecPart&des);
131 const RecPart& Description()const; 133 const RecPart& Description()const;
132 134
133 void setParts(const QValueList<RecPart>&parts); 135 void setParts(const QValueList<RecPart>&parts);
134 const QValueList<RecPart>& Parts()const; 136 const QValueList<RecPart>& Parts()const;
135 void addPart(const RecPart&part); 137 void addPart(const RecPart&part);
136}; 138};
137 139
138class encodedString 140class encodedString
139{ 141{
140public: 142public:
141 encodedString(); 143 encodedString();
142 /* 144 /*
143 creates an new content string. 145 creates an new content string.
144 it makes a deep copy of it! 146 it makes a deep copy of it!
145 */ 147 */
146 encodedString(const char*nContent,unsigned int length); 148 encodedString(const char*nContent,unsigned int length);
147 /* 149 /*
148 Take over the nContent. Means: it will just copy the pointer, not the content. 150 Take over the nContent. Means: it will just copy the pointer, not the content.
149 so make sure: No one else frees the string, the string has allocated with 151 so make sure: No one else frees the string, the string has allocated with
150 malloc for compatibility with c-based libs 152 malloc for compatibility with c-based libs
151 */ 153 */
152 encodedString(char*nContent,unsigned int nSize); 154 encodedString(char*nContent,unsigned int nSize);
153 /* copy construkor - makes ALWAYS a deep copy!!!! */ 155 /* copy construkor - makes ALWAYS a deep copy!!!! */
154 encodedString(const encodedString&old); 156 encodedString(const encodedString&old);
155 /* assign operator - makes ALWAYS a deep copy!!!! */ 157 /* assign operator - makes ALWAYS a deep copy!!!! */
156 encodedString& operator=(const encodedString&old); 158 encodedString& operator=(const encodedString&old);
157 /* destructor - cleans the content */ 159 /* destructor - cleans the content */
158 virtual ~encodedString(); 160 virtual ~encodedString();
159 161
160 /* returns a pointer to the content - do not delete yoursel! */ 162 /* returns a pointer to the content - do not delete yoursel! */
161 const char*Content()const; 163 const char*Content()const;
162 /* returns the lengths of the content 'cause it must not be a null-terminated string! */ 164 /* returns the lengths of the content 'cause it must not be a null-terminated string! */
163 const int Length()const; 165 const int Length()const;
164 166
165 /* 167 /*
166 makes a deep copy of nContent! 168 makes a deep copy of nContent!
167 */ 169 */
168 void setContent(const char*nContent,int nSize); 170 void setContent(const char*nContent,int nSize);
169 /* 171 /*
170 Take over the nContent. Means: it will just copy the pointer, not the content. 172 Take over the nContent. Means: it will just copy the pointer, not the content.
171 so make sure: No one else frees the string, the string has allocated with 173 so make sure: No one else frees the string, the string has allocated with
172 malloc for compatibility with c-based libs 174 malloc for compatibility with c-based libs
173 */ 175 */
174 void setContent(char*nContent,int nSize); 176 void setContent(char*nContent,int nSize);
175 177
176protected: 178protected:
177 char * content; 179 char * content;
178 unsigned int size; 180 unsigned int size;
179 181
180 void init(); 182 void init();
181 void copy_old(const encodedString&old); 183 void copy_old(const encodedString&old);
182 void clean(); 184 void clean();
183}; 185};
184 186
185struct folderStat 187struct folderStat
186{ 188{
187 unsigned int message_count; 189 unsigned int message_count;
188 unsigned int message_unseen; 190 unsigned int message_unseen;
189 unsigned int message_recent; 191 unsigned int message_recent;
190 folderStat&operator=(const folderStat&old); 192 folderStat&operator=(const folderStat&old);
191}; 193};
192 194
193#endif 195#endif
diff --git a/noncore/net/mail/libmailwrapper/mailwrapper.h b/noncore/net/mail/libmailwrapper/mailwrapper.h
index caaa3a2..3a9f97b 100644
--- a/noncore/net/mail/libmailwrapper/mailwrapper.h
+++ b/noncore/net/mail/libmailwrapper/mailwrapper.h
@@ -1,99 +1,102 @@
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 <qbitarray.h> 6#include <qbitarray.h>
7#include <qdatetime.h> 7#include <qdatetime.h>
8 8
9#include "settings.h" 9#include "settings.h"
10 10
11class Attachment 11class Attachment
12{ 12{
13public: 13public:
14 Attachment( DocLnk lnk ); 14 Attachment( DocLnk lnk );
15 virtual ~Attachment(){} 15 virtual ~Attachment(){}
16 const QString getFileName()const{ return doc.file(); } 16 const QString getFileName()const{ return doc.file(); }
17 const QString getName()const{ return doc.name(); } 17 const QString getName()const{ return doc.name(); }
18 const QString getMimeType()const{ return doc.type(); } 18 const QString getMimeType()const{ return doc.type(); }
19 const QPixmap getPixmap()const{ return doc.pixmap(); } 19 const QPixmap getPixmap()const{ return doc.pixmap(); }
20 const int getSize()const { return size; } 20 const int getSize()const { return size; }
21 DocLnk getDocLnk() { return doc; } 21 DocLnk getDocLnk() { return doc; }
22 22
23protected: 23protected:
24 DocLnk doc; 24 DocLnk doc;
25 int size; 25 int size;
26 26
27}; 27};
28 28
29class Mail 29class Mail
30{ 30{
31public: 31public:
32 Mail(); 32 Mail();
33 /* Possible that this destructor must not be declared virtual 33 /* Possible that this destructor must not be declared virtual
34 * 'cause it seems that it will never have some child classes. 34 * 'cause it seems that it will never have some child classes.
35 * in this case this object will not get a virtual table -> memory and 35 * in this case this object will not get a virtual table -> memory and
36 * speed will be a little bit better? 36 * speed will be a little bit better?
37 */ 37 */
38 virtual ~Mail(){} 38 virtual ~Mail(){}
39 void addAttachment( Attachment *att ) { attList.append( att ); } 39 void addAttachment( Attachment *att ) { attList.append( att ); }
40 const QList<Attachment>& getAttachments()const { return attList; } 40 const QList<Attachment>& getAttachments()const { return attList; }
41 void removeAttachment( Attachment *att ) { attList.remove( att ); } 41 void removeAttachment( Attachment *att ) { attList.remove( att ); }
42 const QString&getName()const { return name; } 42 const QString&getName()const { return name; }
43 void setName( QString s ) { name = s; } 43 void setName( QString s ) { name = s; }
44 const QString&getMail()const{ return mail; } 44 const QString&getMail()const{ return mail; }
45 void setMail( const QString&s ) { mail = s; } 45 void setMail( const QString&s ) { mail = s; }
46 const QString&getTo()const{ return to; } 46 const QString&getTo()const{ return to; }
47 void setTo( const QString&s ) { to = s; } 47 void setTo( const QString&s ) { to = s; }
48 const QString&getCC()const{ return cc; } 48 const QString&getCC()const{ return cc; }
49 void setCC( const QString&s ) { cc = s; } 49 void setCC( const QString&s ) { cc = s; }
50 const QString&getBCC()const { return bcc; } 50 const QString&getBCC()const { return bcc; }
51 void setBCC( const QString&s ) { bcc = s; } 51 void setBCC( const QString&s ) { bcc = s; }
52 const QString&getMessage()const { return message; } 52 const QString&getMessage()const { return message; }
53 void setMessage( const QString&s ) { message = s; } 53 void setMessage( const QString&s ) { message = s; }
54 const QString&getSubject()const { return subject; } 54 const QString&getSubject()const { return subject; }
55 void setSubject( const QString&s ) { subject = s; } 55 void setSubject( const QString&s ) { subject = s; }
56 const QString&getReply()const{ return reply; } 56 const QString&getReply()const{ return reply; }
57 void setReply( const QString&a ) { reply = a; } 57 void setReply( const QString&a ) { reply = a; }
58 void setInreply(const QStringList&list){m_in_reply_to = list;}
59 const QStringList&Inreply()const{return m_in_reply_to;}
58 60
59private: 61private:
60 QList<Attachment> attList; 62 QList<Attachment> attList;
61 QString name, mail, to, cc, bcc, reply, subject, message; 63 QString name, mail, to, cc, bcc, reply, subject, message;
64 QStringList m_in_reply_to;
62}; 65};
63 66
64class Folder : public QObject 67class Folder : public QObject
65{ 68{
66 Q_OBJECT 69 Q_OBJECT
67 70
68public: 71public:
69 Folder( const QString&init_name,const QString&sep ); 72 Folder( const QString&init_name,const QString&sep );
70 const QString&getDisplayName()const { return nameDisplay; } 73 const QString&getDisplayName()const { return nameDisplay; }
71 const QString&getName()const { return name; } 74 const QString&getName()const { return name; }
72 const QString&getPrefix()const{return prefix; } 75 const QString&getPrefix()const{return prefix; }
73 virtual bool may_select()const{return true;} 76 virtual bool may_select()const{return true;}
74 virtual bool no_inferior()const{return true;} 77 virtual bool no_inferior()const{return true;}
75 const QString&Separator()const; 78 const QString&Separator()const;
76 79
77protected: 80protected:
78 QString nameDisplay, name, separator,prefix; 81 QString nameDisplay, name, separator,prefix;
79}; 82};
80 83
81class MHFolder : public Folder 84class MHFolder : public Folder
82{ 85{
83 Q_OBJECT 86 Q_OBJECT
84public: 87public:
85 MHFolder(const QString&disp_name,const QString&mbox); 88 MHFolder(const QString&disp_name,const QString&mbox);
86}; 89};
87 90
88class IMAPFolder : public Folder 91class IMAPFolder : public Folder
89{ 92{
90 public: 93 public:
91 IMAPFolder(const QString&name, const QString&sep, bool select=true,bool noinf=false,const QString&prefix="" ); 94 IMAPFolder(const QString&name, const QString&sep, bool select=true,bool noinf=false,const QString&prefix="" );
92 virtual bool may_select()const{return m_MaySelect;} 95 virtual bool may_select()const{return m_MaySelect;}
93 virtual bool no_inferior()const{return m_NoInferior;} 96 virtual bool no_inferior()const{return m_NoInferior;}
94 private: 97 private:
95 static QString decodeFolderName( const QString &name ); 98 static QString decodeFolderName( const QString &name );
96 bool m_MaySelect,m_NoInferior; 99 bool m_MaySelect,m_NoInferior;
97}; 100};
98 101
99#endif 102#endif
diff --git a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
index d7a005e..63acfd5 100644
--- a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
@@ -1,372 +1,399 @@
1#include <stdlib.h> 1#include <stdlib.h>
2#include <sys/stat.h> 2#include <sys/stat.h>
3#include <sys/types.h> 3#include <sys/types.h>
4#include <unistd.h> 4#include <unistd.h>
5#include <fcntl.h> 5#include <fcntl.h>
6#include <string.h> 6#include <string.h>
7#include <qt.h> 7#include <qt.h>
8 8
9#include <qpe/config.h> 9#include <qpe/config.h>
10#include <qpe/qcopenvelope_qws.h> 10#include <qpe/qcopenvelope_qws.h>
11 11
12#include <libetpan/libetpan.h> 12#include <libetpan/libetpan.h>
13 13
14#include "smtpwrapper.h" 14#include "smtpwrapper.h"
15#include "mailwrapper.h" 15#include "mailwrapper.h"
16#include "abstractmail.h" 16#include "abstractmail.h"
17#include "logindialog.h" 17#include "logindialog.h"
18#include "mailtypes.h" 18#include "mailtypes.h"
19#include "sendmailprogress.h" 19#include "sendmailprogress.h"
20 20
21const char* SMTPwrapper::USER_AGENT="OpieMail v0.4"; 21const char* SMTPwrapper::USER_AGENT="OpieMail v0.4";
22 22
23progressMailSend*SMTPwrapper::sendProgress = 0; 23progressMailSend*SMTPwrapper::sendProgress = 0;
24 24
25SMTPwrapper::SMTPwrapper(SMTPaccount * aSmtp ) 25SMTPwrapper::SMTPwrapper(SMTPaccount * aSmtp )
26 : QObject() 26 : QObject()
27{ 27{
28 m_SmtpAccount = aSmtp; 28 m_SmtpAccount = aSmtp;
29 Config cfg( "mail" ); 29 Config cfg( "mail" );
30 cfg.setGroup( "Status" ); 30 cfg.setGroup( "Status" );
31 m_queuedMail = cfg.readNumEntry( "outgoing", 0 ); 31 m_queuedMail = cfg.readNumEntry( "outgoing", 0 );
32 emit queuedMails( m_queuedMail ); 32 emit queuedMails( m_queuedMail );
33 connect( this, SIGNAL( queuedMails(int) ), this, SLOT( emitQCop(int) ) ); 33 connect( this, SIGNAL( queuedMails(int) ), this, SLOT( emitQCop(int) ) );
34 m_smtp = 0; 34 m_smtp = 0;
35} 35}
36 36
37SMTPwrapper::~SMTPwrapper() 37SMTPwrapper::~SMTPwrapper()
38{ 38{
39 disc_server(); 39 disc_server();
40} 40}
41 41
42void SMTPwrapper::emitQCop( int queued ) { 42void SMTPwrapper::emitQCop( int queued ) {
43 QCopEnvelope env( "QPE/Pim", "outgoingMails(int)" ); 43 QCopEnvelope env( "QPE/Pim", "outgoingMails(int)" );
44 env << queued; 44 env << queued;
45} 45}
46 46
47QString SMTPwrapper::mailsmtpError( int errnum ) { 47QString SMTPwrapper::mailsmtpError( int errnum ) {
48 switch ( errnum ) { 48 switch ( errnum ) {
49 case MAILSMTP_NO_ERROR: 49 case MAILSMTP_NO_ERROR:
50 return tr( "No error" ); 50 return tr( "No error" );
51 case MAILSMTP_ERROR_UNEXPECTED_CODE: 51 case MAILSMTP_ERROR_UNEXPECTED_CODE:
52 return tr( "Unexpected error code" ); 52 return tr( "Unexpected error code" );
53 case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE: 53 case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE:
54 return tr( "Service not available" ); 54 return tr( "Service not available" );
55 case MAILSMTP_ERROR_STREAM: 55 case MAILSMTP_ERROR_STREAM:
56 return tr( "Stream error" ); 56 return tr( "Stream error" );
57 case MAILSMTP_ERROR_HOSTNAME: 57 case MAILSMTP_ERROR_HOSTNAME:
58 return tr( "gethostname() failed" ); 58 return tr( "gethostname() failed" );
59 case MAILSMTP_ERROR_NOT_IMPLEMENTED: 59 case MAILSMTP_ERROR_NOT_IMPLEMENTED:
60 return tr( "Not implemented" ); 60 return tr( "Not implemented" );
61 case MAILSMTP_ERROR_ACTION_NOT_TAKEN: 61 case MAILSMTP_ERROR_ACTION_NOT_TAKEN:
62 return tr( "Error, action not taken" ); 62 return tr( "Error, action not taken" );
63 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION: 63 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION:
64 return tr( "Data exceeds storage allocation" ); 64 return tr( "Data exceeds storage allocation" );
65 case MAILSMTP_ERROR_IN_PROCESSING: 65 case MAILSMTP_ERROR_IN_PROCESSING:
66 return tr( "Error in processing" ); 66 return tr( "Error in processing" );
67 case MAILSMTP_ERROR_STARTTLS_NOT_SUPPORTED: 67 case MAILSMTP_ERROR_STARTTLS_NOT_SUPPORTED:
68 return tr( "Starttls not supported" ); 68 return tr( "Starttls not supported" );
69 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE: 69 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE:
70 // return tr( "Insufficient system storage" ); 70 // return tr( "Insufficient system storage" );
71 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE: 71 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE:
72 return tr( "Mailbox unavailable" ); 72 return tr( "Mailbox unavailable" );
73 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED: 73 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED:
74 return tr( "Mailbox name not allowed" ); 74 return tr( "Mailbox name not allowed" );
75 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND: 75 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND:
76 return tr( "Bad command sequence" ); 76 return tr( "Bad command sequence" );
77 case MAILSMTP_ERROR_USER_NOT_LOCAL: 77 case MAILSMTP_ERROR_USER_NOT_LOCAL:
78 return tr( "User not local" ); 78 return tr( "User not local" );
79 case MAILSMTP_ERROR_TRANSACTION_FAILED: 79 case MAILSMTP_ERROR_TRANSACTION_FAILED:
80 return tr( "Transaction failed" ); 80 return tr( "Transaction failed" );
81 case MAILSMTP_ERROR_MEMORY: 81 case MAILSMTP_ERROR_MEMORY:
82 return tr( "Memory error" ); 82 return tr( "Memory error" );
83 case MAILSMTP_ERROR_CONNECTION_REFUSED: 83 case MAILSMTP_ERROR_CONNECTION_REFUSED:
84 return tr( "Connection refused" ); 84 return tr( "Connection refused" );
85 default: 85 default:
86 return tr( "Unknown error code" ); 86 return tr( "Unknown error code" );
87 } 87 }
88} 88}
89 89
90mailimf_mailbox *SMTPwrapper::newMailbox(const QString&name, const QString&mail ) { 90mailimf_mailbox *SMTPwrapper::newMailbox(const QString&name, const QString&mail ) {
91 return mailimf_mailbox_new( strdup( name.latin1() ), 91 return mailimf_mailbox_new( strdup( name.latin1() ),
92 strdup( mail.latin1() ) ); 92 strdup( mail.latin1() ) );
93} 93}
94 94
95mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) { 95mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) {
96 mailimf_address_list *addresses; 96 mailimf_address_list *addresses;
97 97
98 if ( addr.isEmpty() ) 98 if ( addr.isEmpty() )
99 return NULL; 99 return NULL;
100 100
101 addresses = mailimf_address_list_new_empty(); 101 addresses = mailimf_address_list_new_empty();
102 102
103 bool literal_open = false; 103 bool literal_open = false;
104 unsigned int startpos = 0; 104 unsigned int startpos = 0;
105 QStringList list; 105 QStringList list;
106 QString s; 106 QString s;
107 unsigned int i = 0; 107 unsigned int i = 0;
108 for (; i < addr.length();++i) { 108 for (; i < addr.length();++i) {
109 switch (addr[i]) { 109 switch (addr[i]) {
110 case '\"': 110 case '\"':
111 literal_open = !literal_open; 111 literal_open = !literal_open;
112 break; 112 break;
113 case ',': 113 case ',':
114 if (!literal_open) { 114 if (!literal_open) {
115 s = addr.mid(startpos,i-startpos); 115 s = addr.mid(startpos,i-startpos);
116 if (!s.isEmpty()) { 116 if (!s.isEmpty()) {
117 list.append(s); 117 list.append(s);
118 qDebug("Appended %s",s.latin1()); 118 qDebug("Appended %s",s.latin1());
119 } 119 }
120 // !!!! this is a MUST BE! 120 // !!!! this is a MUST BE!
121 startpos = ++i; 121 startpos = ++i;
122 } 122 }
123 break; 123 break;
124 default: 124 default:
125 break; 125 break;
126 } 126 }
127 } 127 }
128 s = addr.mid(startpos,i-startpos); 128 s = addr.mid(startpos,i-startpos);
129 if (!s.isEmpty()) { 129 if (!s.isEmpty()) {
130 list.append(s); 130 list.append(s);
131 qDebug("Appended %s",s.latin1()); 131 qDebug("Appended %s",s.latin1());
132 } 132 }
133 QStringList::Iterator it; 133 QStringList::Iterator it;
134 for ( it = list.begin(); it != list.end(); it++ ) { 134 for ( it = list.begin(); it != list.end(); it++ ) {
135 int err = mailimf_address_list_add_parse( addresses, (char*)(*it).latin1() ); 135 int err = mailimf_address_list_add_parse( addresses, (char*)(*it).latin1() );
136 if ( err != MAILIMF_NO_ERROR ) { 136 if ( err != MAILIMF_NO_ERROR ) {
137 qDebug( "Error parsing" ); 137 qDebug( "Error parsing" );
138 qDebug( *it ); 138 qDebug( *it );
139 } else { 139 } else {
140 qDebug( "Parse success! %s",(*it).latin1()); 140 qDebug( "Parse success! %s",(*it).latin1());
141 } 141 }
142 } 142 }
143 return addresses; 143 return addresses;
144} 144}
145 145
146mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) { 146mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) {
147 mailimf_fields *fields; 147 mailimf_fields *fields;
148 mailimf_field *xmailer; 148 mailimf_field *xmailer;
149 mailimf_mailbox *sender=0,*fromBox=0; 149 mailimf_mailbox *sender=0,*fromBox=0;
150 mailimf_mailbox_list *from=0; 150 mailimf_mailbox_list *from=0;
151 mailimf_address_list *to=0, *cc=0, *bcc=0, *reply=0; 151 mailimf_address_list *to=0, *cc=0, *bcc=0, *reply=0;
152 clist*in_reply_to = 0;
152 char *subject = strdup( mail.getSubject().latin1() ); 153 char *subject = strdup( mail.getSubject().latin1() );
153 int err; 154 int err;
154 155
155 sender = newMailbox( mail.getName(), mail.getMail() ); 156 sender = newMailbox( mail.getName(), mail.getMail() );
156 if ( sender == NULL ) 157 if ( sender == NULL )
157 goto err_free; 158 goto err_free;
158 159
159 fromBox = newMailbox( mail.getName(), mail.getMail() ); 160 fromBox = newMailbox( mail.getName(), mail.getMail() );
160 if ( fromBox == NULL ) 161 if ( fromBox == NULL )
161 goto err_free_sender; 162 goto err_free_sender;
162 163
163 from = mailimf_mailbox_list_new_empty(); 164 from = mailimf_mailbox_list_new_empty();
164 if ( from == NULL ) 165 if ( from == NULL )
165 goto err_free_fromBox; 166 goto err_free_fromBox;
166 167
167 err = mailimf_mailbox_list_add( from, fromBox ); 168 err = mailimf_mailbox_list_add( from, fromBox );
168 if ( err != MAILIMF_NO_ERROR ) 169 if ( err != MAILIMF_NO_ERROR )
169 goto err_free_from; 170 goto err_free_from;
170 171
171 to = parseAddresses( mail.getTo() ); 172 to = parseAddresses( mail.getTo() );
172 if ( to == NULL ) 173 if ( to == NULL )
173 goto err_free_from; 174 goto err_free_from;
174 175
175 cc = parseAddresses( mail.getCC() ); 176 cc = parseAddresses( mail.getCC() );
176 bcc = parseAddresses( mail.getBCC() ); 177 bcc = parseAddresses( mail.getBCC() );
177 reply = parseAddresses( mail.getReply() ); 178 reply = parseAddresses( mail.getReply() );
179
180 if (mail.Inreply().count()>0) {
181 in_reply_to = clist_new();
182 char*c_reply;
183 unsigned int nsize = 0;
184 for (QStringList::ConstIterator it=mail.Inreply().begin();
185 it != mail.Inreply().end();++it) {
186 /* yes! must be malloc! */
187 if ((*it).isEmpty())
188 continue;
189 QString h((*it));
190 while (h.length()>0 && h[0]=='<') {
191 h.remove(0,1);
192 }
193 while (h.length()>0 && h[h.length()-1]=='>') {
194 h.remove(h.length()-1,1);
195 }
196 if (h.isEmpty()) continue;
197 nsize = strlen(h.latin1());
198 c_reply = (char*)malloc( (nsize+1)*sizeof(char));
199 memset(c_reply,0,nsize+1);
200 memcpy(c_reply,h.latin1(),nsize);
201 clist_append(in_reply_to,c_reply);
202 qDebug("In reply to: %s",c_reply);
203 }
204 }
178 205
179 fields = mailimf_fields_new_with_data( from, sender, reply, to, cc, bcc, 206 fields = mailimf_fields_new_with_data( from, sender, reply, to, cc, bcc,
180 NULL, NULL, subject ); 207 in_reply_to, NULL, subject );
181 if ( fields == NULL ) 208 if ( fields == NULL )
182 goto err_free_reply; 209 goto err_free_reply;
183 210
184 xmailer = mailimf_field_new_custom( strdup( "User-Agent" ), 211 xmailer = mailimf_field_new_custom( strdup( "User-Agent" ),
185 strdup( USER_AGENT ) ); 212 strdup( USER_AGENT ) );
186 if ( xmailer == NULL ) 213 if ( xmailer == NULL )
187 goto err_free_fields; 214 goto err_free_fields;
188 215
189 err = mailimf_fields_add( fields, xmailer ); 216 err = mailimf_fields_add( fields, xmailer );
190 if ( err != MAILIMF_NO_ERROR ) 217 if ( err != MAILIMF_NO_ERROR )
191 goto err_free_xmailer; 218 goto err_free_xmailer;
192 219
193 return fields; // Success :) 220 return fields; // Success :)
194 221
195err_free_xmailer: 222err_free_xmailer:
196 if (xmailer) 223 if (xmailer)
197 mailimf_field_free( xmailer ); 224 mailimf_field_free( xmailer );
198err_free_fields: 225err_free_fields:
199 if (fields) 226 if (fields)
200 mailimf_fields_free( fields ); 227 mailimf_fields_free( fields );
201err_free_reply: 228err_free_reply:
202 if (reply) 229 if (reply)
203 mailimf_address_list_free( reply ); 230 mailimf_address_list_free( reply );
204 if (bcc) 231 if (bcc)
205 mailimf_address_list_free( bcc ); 232 mailimf_address_list_free( bcc );
206 if (cc) 233 if (cc)
207 mailimf_address_list_free( cc ); 234 mailimf_address_list_free( cc );
208 if (to) 235 if (to)
209 mailimf_address_list_free( to ); 236 mailimf_address_list_free( to );
210err_free_from: 237err_free_from:
211 if (from) 238 if (from)
212 mailimf_mailbox_list_free( from ); 239 mailimf_mailbox_list_free( from );
213err_free_fromBox: 240err_free_fromBox:
214 mailimf_mailbox_free( fromBox ); 241 mailimf_mailbox_free( fromBox );
215err_free_sender: 242err_free_sender:
216 if (sender) 243 if (sender)
217 mailimf_mailbox_free( sender ); 244 mailimf_mailbox_free( sender );
218err_free: 245err_free:
219 if (subject) 246 if (subject)
220 free( subject ); 247 free( subject );
221 qDebug( "createImfFields - error" ); 248 qDebug( "createImfFields - error" );
222 249
223 return NULL; // Error :( 250 return NULL; // Error :(
224} 251}
225 252
226mailmime *SMTPwrapper::buildTxtPart(const QString&str ) { 253mailmime *SMTPwrapper::buildTxtPart(const QString&str ) {
227 mailmime *txtPart; 254 mailmime *txtPart;
228 mailmime_fields *fields; 255 mailmime_fields *fields;
229 mailmime_content *content; 256 mailmime_content *content;
230 mailmime_parameter *param; 257 mailmime_parameter *param;
231 int err; 258 int err;
232 259
233 param = mailmime_parameter_new( strdup( "charset" ), 260 param = mailmime_parameter_new( strdup( "charset" ),
234 strdup( "iso-8859-1" ) ); 261 strdup( "iso-8859-1" ) );
235 if ( param == NULL ) 262 if ( param == NULL )
236 goto err_free; 263 goto err_free;
237 264
238 content = mailmime_content_new_with_str( "text/plain" ); 265 content = mailmime_content_new_with_str( "text/plain" );
239 if ( content == NULL ) 266 if ( content == NULL )
240 goto err_free_param; 267 goto err_free_param;
241 268
242 err = clist_append( content->ct_parameters, param ); 269 err = clist_append( content->ct_parameters, param );
243 if ( err != MAILIMF_NO_ERROR ) 270 if ( err != MAILIMF_NO_ERROR )
244 goto err_free_content; 271 goto err_free_content;
245 272
246 fields = mailmime_fields_new_encoding(MAILMIME_MECHANISM_8BIT); 273 fields = mailmime_fields_new_encoding(MAILMIME_MECHANISM_8BIT);
247 if ( fields == NULL ) 274 if ( fields == NULL )
248 goto err_free_content; 275 goto err_free_content;
249 276
250 txtPart = mailmime_new_empty( content, fields ); 277 txtPart = mailmime_new_empty( content, fields );
251 if ( txtPart == NULL ) 278 if ( txtPart == NULL )
252 goto err_free_fields; 279 goto err_free_fields;
253 280
254 err = mailmime_set_body_text( txtPart, (char*)str.data(), str.length() ); 281 err = mailmime_set_body_text( txtPart, (char*)str.data(), str.length() );
255 if ( err != MAILIMF_NO_ERROR ) 282 if ( err != MAILIMF_NO_ERROR )
256 goto err_free_txtPart; 283 goto err_free_txtPart;
257 284
258 return txtPart; // Success :) 285 return txtPart; // Success :)
259 286
260err_free_txtPart: 287err_free_txtPart:
261 mailmime_free( txtPart ); 288 mailmime_free( txtPart );
262err_free_fields: 289err_free_fields:
263 mailmime_fields_free( fields ); 290 mailmime_fields_free( fields );
264err_free_content: 291err_free_content:
265 mailmime_content_free( content ); 292 mailmime_content_free( content );
266err_free_param: 293err_free_param:
267 mailmime_parameter_free( param ); 294 mailmime_parameter_free( param );
268err_free: 295err_free:
269 qDebug( "buildTxtPart - error" ); 296 qDebug( "buildTxtPart - error" );
270 297
271 return NULL; // Error :( 298 return NULL; // Error :(
272} 299}
273 300
274mailmime *SMTPwrapper::buildFilePart(const QString&filename,const QString&mimetype,const QString&TextContent ) { 301mailmime *SMTPwrapper::buildFilePart(const QString&filename,const QString&mimetype,const QString&TextContent ) {
275 mailmime * filePart = 0; 302 mailmime * filePart = 0;
276 mailmime_fields * fields = 0; 303 mailmime_fields * fields = 0;
277 mailmime_content * content = 0; 304 mailmime_content * content = 0;
278 mailmime_parameter * param = 0; 305 mailmime_parameter * param = 0;
279 char*name = 0; 306 char*name = 0;
280 char*file = 0; 307 char*file = 0;
281 int err; 308 int err;
282 309
283 int pos = filename.findRev( '/' ); 310 int pos = filename.findRev( '/' );
284 311
285 if (filename.length()>0) { 312 if (filename.length()>0) {
286 QString tmp = filename.right( filename.length() - ( pos + 1 ) ); 313 QString tmp = filename.right( filename.length() - ( pos + 1 ) );
287 name = strdup( tmp.latin1() ); // just filename 314 name = strdup( tmp.latin1() ); // just filename
288 file = strdup( filename.latin1() ); // full name with path 315 file = strdup( filename.latin1() ); // full name with path
289 } 316 }
290 317
291 int disptype = MAILMIME_DISPOSITION_TYPE_ATTACHMENT; 318 int disptype = MAILMIME_DISPOSITION_TYPE_ATTACHMENT;
292 int mechanism = MAILMIME_MECHANISM_BASE64; 319 int mechanism = MAILMIME_MECHANISM_BASE64;
293 320
294 if ( mimetype.startsWith( "text/" ) ) { 321 if ( mimetype.startsWith( "text/" ) ) {
295 param = mailmime_parameter_new( strdup( "charset" ), 322 param = mailmime_parameter_new( strdup( "charset" ),
296 strdup( "iso-8859-1" ) ); 323 strdup( "iso-8859-1" ) );
297 mechanism = MAILMIME_MECHANISM_QUOTED_PRINTABLE; 324 mechanism = MAILMIME_MECHANISM_QUOTED_PRINTABLE;
298 } 325 }
299 326
300 fields = mailmime_fields_new_filename( 327 fields = mailmime_fields_new_filename(
301 disptype, name, 328 disptype, name,
302 mechanism ); 329 mechanism );
303 content = mailmime_content_new_with_str( (char*)mimetype.latin1() ); 330 content = mailmime_content_new_with_str( (char*)mimetype.latin1() );
304 if (content!=0 && fields != 0) { 331 if (content!=0 && fields != 0) {
305 if (param) { 332 if (param) {
306 clist_append(content->ct_parameters,param); 333 clist_append(content->ct_parameters,param);
307 param = 0; 334 param = 0;
308 } 335 }
309 if (filename.length()>0) { 336 if (filename.length()>0) {
310 QFileInfo f(filename); 337 QFileInfo f(filename);
311 param = mailmime_parameter_new(strdup("name"),strdup(f.fileName().latin1())); 338 param = mailmime_parameter_new(strdup("name"),strdup(f.fileName().latin1()));
312 clist_append(content->ct_parameters,param); 339 clist_append(content->ct_parameters,param);
313 param = 0; 340 param = 0;
314 } 341 }
315 filePart = mailmime_new_empty( content, fields ); 342 filePart = mailmime_new_empty( content, fields );
316 } 343 }
317 if (filePart) { 344 if (filePart) {
318 if (filename.length()>0) { 345 if (filename.length()>0) {
319 err = mailmime_set_body_file( filePart, file ); 346 err = mailmime_set_body_file( filePart, file );
320 } else { 347 } else {
321 err = mailmime_set_body_text(filePart,strdup(TextContent.data()),TextContent.length()); 348 err = mailmime_set_body_text(filePart,strdup(TextContent.data()),TextContent.length());
322 } 349 }
323 if (err != MAILIMF_NO_ERROR) { 350 if (err != MAILIMF_NO_ERROR) {
324 qDebug("Error setting body with file %s",file); 351 qDebug("Error setting body with file %s",file);
325 mailmime_free( filePart ); 352 mailmime_free( filePart );
326 filePart = 0; 353 filePart = 0;
327 } 354 }
328 } 355 }
329 356
330 if (!filePart) { 357 if (!filePart) {
331 if ( param != NULL ) { 358 if ( param != NULL ) {
332 mailmime_parameter_free( param ); 359 mailmime_parameter_free( param );
333 } 360 }
334 if (content) { 361 if (content) {
335 mailmime_content_free( content ); 362 mailmime_content_free( content );
336 } 363 }
337 if (fields) { 364 if (fields) {
338 mailmime_fields_free( fields ); 365 mailmime_fields_free( fields );
339 } else { 366 } else {
340 if (name) { 367 if (name) {
341 free( name ); 368 free( name );
342 } 369 }
343 if (file) { 370 if (file) {
344 free( file ); 371 free( file );
345 } 372 }
346 } 373 }
347 } 374 }
348 return filePart; // Success :) 375 return filePart; // Success :)
349 376
350} 377}
351 378
352void SMTPwrapper::addFileParts( mailmime *message,const QList<Attachment>&files ) { 379void SMTPwrapper::addFileParts( mailmime *message,const QList<Attachment>&files ) {
353 const Attachment *it; 380 const Attachment *it;
354 unsigned int count = files.count(); 381 unsigned int count = files.count();
355 qDebug("List contains %i values",count); 382 qDebug("List contains %i values",count);
356 for ( unsigned int i = 0; i < count; ++i ) { 383 for ( unsigned int i = 0; i < count; ++i ) {
357 qDebug( "Adding file" ); 384 qDebug( "Adding file" );
358 mailmime *filePart; 385 mailmime *filePart;
359 int err; 386 int err;
360 it = ((QList<Attachment>)files).at(i); 387 it = ((QList<Attachment>)files).at(i);
361 388
362 filePart = buildFilePart( it->getFileName(), it->getMimeType(),"" ); 389 filePart = buildFilePart( it->getFileName(), it->getMimeType(),"" );
363 if ( filePart == NULL ) { 390 if ( filePart == NULL ) {
364 qDebug( "addFileParts: error adding file:" ); 391 qDebug( "addFileParts: error adding file:" );
365 qDebug( it->getFileName() ); 392 qDebug( it->getFileName() );
366 continue; 393 continue;
367 } 394 }
368 err = mailmime_smart_add_part( message, filePart ); 395 err = mailmime_smart_add_part( message, filePart );
369 if ( err != MAILIMF_NO_ERROR ) { 396 if ( err != MAILIMF_NO_ERROR ) {
370 mailmime_free( filePart ); 397 mailmime_free( filePart );
371 qDebug("error smart add"); 398 qDebug("error smart add");
372 } 399 }
diff --git a/noncore/net/mail/viewmail.cpp b/noncore/net/mail/viewmail.cpp
index ec93f8d..84f8a90 100644
--- a/noncore/net/mail/viewmail.cpp
+++ b/noncore/net/mail/viewmail.cpp
@@ -220,250 +220,252 @@ void ViewMail::slotItemClicked( QListViewItem * item , const QPoint & point, int
220 MimeTypes types; 220 MimeTypes types;
221 types.insert( "all", "*" ); 221 types.insert( "all", "*" );
222 QString str = Opie::OFileDialog::getSaveFileName( 1, 222 QString str = Opie::OFileDialog::getSaveFileName( 1,
223 "/", item->text( 2 ) , types, 0 ); 223 "/", item->text( 2 ) , types, 0 );
224 224
225 if( !str.isEmpty() ) 225 if( !str.isEmpty() )
226 { 226 {
227 encodedString*content = m_recMail.Wrapper()->fetchDecodedPart( m_recMail, m_body.Parts()[ ( ( AttachItem* )item )->Partnumber() ] ); 227 encodedString*content = m_recMail.Wrapper()->fetchDecodedPart( m_recMail, m_body.Parts()[ ( ( AttachItem* )item )->Partnumber() ] );
228 if (content) 228 if (content)
229 { 229 {
230 QFile output(str); 230 QFile output(str);
231 output.open(IO_WriteOnly); 231 output.open(IO_WriteOnly);
232 output.writeBlock(content->Content(),content->Length()); 232 output.writeBlock(content->Content(),content->Length());
233 output.close(); 233 output.close();
234 delete content; 234 delete content;
235 } 235 }
236 } 236 }
237 } 237 }
238 break ; 238 break ;
239 239
240 case 1: 240 case 1:
241 if ( ( ( AttachItem* )item )->Partnumber() == -1 ) 241 if ( ( ( AttachItem* )item )->Partnumber() == -1 )
242 { 242 {
243 setText(); 243 setText();
244 } 244 }
245 else 245 else
246 { 246 {
247 if ( m_recMail.Wrapper() != 0l ) 247 if ( m_recMail.Wrapper() != 0l )
248 { // make sure that there is a wrapper , even after delete or simular actions 248 { // make sure that there is a wrapper , even after delete or simular actions
249 browser->setText( m_recMail.Wrapper()->fetchTextPart( m_recMail, m_body.Parts()[ ( ( AttachItem* )item )->Partnumber() ] ) ); 249 browser->setText( m_recMail.Wrapper()->fetchTextPart( m_recMail, m_body.Parts()[ ( ( AttachItem* )item )->Partnumber() ] ) );
250 } 250 }
251 } 251 }
252 break; 252 break;
253 } 253 }
254 delete menu; 254 delete menu;
255} 255}
256 256
257 257
258void ViewMail::setMail( RecMail mail ) 258void ViewMail::setMail( RecMail mail )
259{ 259{
260 260
261 m_recMail = mail; 261 m_recMail = mail;
262 262
263 m_mail[0] = mail.getFrom(); 263 m_mail[0] = mail.getFrom();
264 m_mail[1] = mail.getSubject(); 264 m_mail[1] = mail.getSubject();
265 m_mail[3] = mail.getDate(); 265 m_mail[3] = mail.getDate();
266 m_mail[4] = mail.Msgid(); 266 m_mail[4] = mail.Msgid();
267 267
268 m_mail2[0] = mail.To(); 268 m_mail2[0] = mail.To();
269 m_mail2[1] = mail.CC(); 269 m_mail2[1] = mail.CC();
270 m_mail2[2] = mail.Bcc(); 270 m_mail2[2] = mail.Bcc();
271 271
272 setText(); 272 setText();
273} 273}
274 274
275 275
276 276
277ViewMail::ViewMail( QWidget *parent, const char *name, WFlags fl) 277ViewMail::ViewMail( QWidget *parent, const char *name, WFlags fl)
278 : ViewMailBase(parent, name, fl), _inLoop(false) 278 : ViewMailBase(parent, name, fl), _inLoop(false)
279{ 279{
280 m_gotBody = false; 280 m_gotBody = false;
281 deleted = false; 281 deleted = false;
282 282
283 connect( reply, SIGNAL(activated()), SLOT(slotReply())); 283 connect( reply, SIGNAL(activated()), SLOT(slotReply()));
284 connect( forward, SIGNAL(activated()), SLOT(slotForward())); 284 connect( forward, SIGNAL(activated()), SLOT(slotForward()));
285 connect( deleteMail, SIGNAL( activated() ), SLOT( slotDeleteMail() ) ); 285 connect( deleteMail, SIGNAL( activated() ), SLOT( slotDeleteMail() ) );
286 connect( showHtml, SIGNAL( toggled(bool) ), SLOT( slotShowHtml(bool) ) ); 286 connect( showHtml, SIGNAL( toggled(bool) ), SLOT( slotShowHtml(bool) ) );
287 287
288 attachments->setEnabled(m_gotBody); 288 attachments->setEnabled(m_gotBody);
289 connect( attachments, SIGNAL( clicked(QListViewItem*,const QPoint&, int) ), SLOT( slotItemClicked(QListViewItem*,const QPoint&, int) ) ); 289 connect( attachments, SIGNAL( clicked(QListViewItem*,const QPoint&, int) ), SLOT( slotItemClicked(QListViewItem*,const QPoint&, int) ) );
290 290
291 readConfig(); 291 readConfig();
292 attachments->setSorting(-1); 292 attachments->setSorting(-1);
293} 293}
294 294
295void ViewMail::readConfig() 295void ViewMail::readConfig()
296{ 296{
297 Config cfg( "mail" ); 297 Config cfg( "mail" );
298 cfg.setGroup( "Settings" ); 298 cfg.setGroup( "Settings" );
299 m_showHtml = cfg.readBoolEntry( "showHtml", false ); 299 m_showHtml = cfg.readBoolEntry( "showHtml", false );
300 showHtml->setOn( m_showHtml ); 300 showHtml->setOn( m_showHtml );
301} 301}
302 302
303void ViewMail::setText() 303void ViewMail::setText()
304{ 304{
305 305
306 QString toString; 306 QString toString;
307 QString ccString; 307 QString ccString;
308 QString bccString; 308 QString bccString;
309 309
310 for ( QStringList::Iterator it = ( m_mail2[0] ).begin(); it != ( m_mail2[0] ).end(); ++it ) 310 for ( QStringList::Iterator it = ( m_mail2[0] ).begin(); it != ( m_mail2[0] ).end(); ++it )
311 { 311 {
312 toString += (*it); 312 toString += (*it);
313 } 313 }
314 for ( QStringList::Iterator it = ( m_mail2[1] ).begin(); it != ( m_mail2[1] ).end(); ++it ) 314 for ( QStringList::Iterator it = ( m_mail2[1] ).begin(); it != ( m_mail2[1] ).end(); ++it )
315 { 315 {
316 ccString += (*it); 316 ccString += (*it);
317 } 317 }
318 for ( QStringList::Iterator it = ( m_mail2[2] ).begin(); it != ( m_mail2[2] ).end(); ++it ) 318 for ( QStringList::Iterator it = ( m_mail2[2] ).begin(); it != ( m_mail2[2] ).end(); ++it )
319 { 319 {
320 bccString += (*it); 320 bccString += (*it);
321 } 321 }
322 322
323 setCaption( caption().arg( m_mail[0] ) ); 323 setCaption( caption().arg( m_mail[0] ) );
324 324
325 m_mailHtml = "<html><body>" 325 m_mailHtml = "<html><body>"
326 "<table width=\"100%\" border=\"0\"><tr bgcolor=\"#FFDD76\"><td>" 326 "<table width=\"100%\" border=\"0\"><tr bgcolor=\"#FFDD76\"><td>"
327 "<div align=left><b>" + deHtml( m_mail[1] ) + "</b></div>" 327 "<div align=left><b>" + deHtml( m_mail[1] ) + "</b></div>"
328 "</td></tr><tr bgcolor=\"#EEEEE6\"><td>" 328 "</td></tr><tr bgcolor=\"#EEEEE6\"><td>"
329 "<b>" + tr( "From" ) + ": </b><font color=#6C86C0>" + deHtml( m_mail[0] ) + "</font><br>" 329 "<b>" + tr( "From" ) + ": </b><font color=#6C86C0>" + deHtml( m_mail[0] ) + "</font><br>"
330 "<b>" + tr( "To" ) + ": </b><font color=#6C86C0>" + deHtml( toString ) + "</font><br><b>" + 330 "<b>" + tr( "To" ) + ": </b><font color=#6C86C0>" + deHtml( toString ) + "</font><br><b>" +
331 tr( "Cc" ) + ": </b>" + deHtml( ccString ) + "<br>" 331 tr( "Cc" ) + ": </b>" + deHtml( ccString ) + "<br>"
332 "<b>" + tr( "Date" ) + ": </b> " + m_mail[3] + 332 "<b>" + tr( "Date" ) + ": </b> " + m_mail[3] +
333 "</td></tr></table><font face=fixed>"; 333 "</td></tr></table><font face=fixed>";
334 334
335 if ( !m_showHtml ) 335 if ( !m_showHtml )
336 { 336 {
337 browser->setText( QString( m_mailHtml) + deHtml( m_mail[2] ) + "</font></html>" ); 337 browser->setText( QString( m_mailHtml) + deHtml( m_mail[2] ) + "</font></html>" );
338 } 338 }
339 else 339 else
340 { 340 {
341 browser->setText( QString( m_mailHtml) + m_mail[2] + "</font></html>" ); 341 browser->setText( QString( m_mailHtml) + m_mail[2] + "</font></html>" );
342 } 342 }
343 // remove later in favor of a real handling 343 // remove later in favor of a real handling
344 m_gotBody = true; 344 m_gotBody = true;
345} 345}
346 346
347 347
348ViewMail::~ViewMail() 348ViewMail::~ViewMail()
349{ 349{
350 m_recMail.Wrapper()->cleanMimeCache(); 350 m_recMail.Wrapper()->cleanMimeCache();
351 hide(); 351 hide();
352} 352}
353 353
354void ViewMail::hide() 354void ViewMail::hide()
355{ 355{
356 QWidget::hide(); 356 QWidget::hide();
357 357
358 if (_inLoop) 358 if (_inLoop)
359 { 359 {
360 _inLoop = false; 360 _inLoop = false;
361 qApp->exit_loop(); 361 qApp->exit_loop();
362 362
363 } 363 }
364 364
365} 365}
366 366
367void ViewMail::exec() 367void ViewMail::exec()
368{ 368{
369 show(); 369 show();
370 370
371 if (!_inLoop) 371 if (!_inLoop)
372 { 372 {
373 _inLoop = true; 373 _inLoop = true;
374 qApp->enter_loop(); 374 qApp->enter_loop();
375 } 375 }
376 376
377} 377}
378 378
379QString ViewMail::deHtml(const QString &string) 379QString ViewMail::deHtml(const QString &string)
380{ 380{
381 QString string_ = string; 381 QString string_ = string;
382 string_.replace(QRegExp("&"), "&amp;"); 382 string_.replace(QRegExp("&"), "&amp;");
383 string_.replace(QRegExp("<"), "&lt;"); 383 string_.replace(QRegExp("<"), "&lt;");
384 string_.replace(QRegExp(">"), "&gt;"); 384 string_.replace(QRegExp(">"), "&gt;");
385 string_.replace(QRegExp("\\n"), "<br>"); 385 string_.replace(QRegExp("\\n"), "<br>");
386 return string_; 386 return string_;
387} 387}
388 388
389void ViewMail::slotReply() 389void ViewMail::slotReply()
390{ 390{
391 if (!m_gotBody) 391 if (!m_gotBody)
392 { 392 {
393 QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot reply yet."), tr("Ok")); 393 QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot reply yet."), tr("Ok"));
394 return; 394 return;
395 } 395 }
396 396
397 QString rtext; 397 QString rtext;
398 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose 398 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose
399 .arg( m_mail[0] ) 399 .arg( m_mail[0] )
400 .arg( m_mail[3] ); 400 .arg( m_mail[3] );
401 401
402 QString text = m_mail[2]; 402 QString text = m_mail[2];
403 QStringList lines = QStringList::split(QRegExp("\\n"), text); 403 QStringList lines = QStringList::split(QRegExp("\\n"), text);
404 QStringList::Iterator it; 404 QStringList::Iterator it;
405 for (it = lines.begin(); it != lines.end(); it++) 405 for (it = lines.begin(); it != lines.end(); it++)
406 { 406 {
407 rtext += "> " + *it + "\n"; 407 rtext += "> " + *it + "\n";
408 } 408 }
409 rtext += "\n"; 409 rtext += "\n";
410 410
411 QString prefix; 411 QString prefix;
412 if ( m_mail[1].find(QRegExp("^Re: *$")) != -1) prefix = ""; 412 if ( m_mail[1].find(QRegExp("^Re: .*$")) != -1) prefix = "";
413 else prefix = "Re: "; // no i18n on purpose 413 else prefix = "Re: "; // no i18n on purpose
414 414
415 Settings *settings = new Settings(); 415 Settings *settings = new Settings();
416 ComposeMail composer( settings ,this, 0, true); 416 ComposeMail composer( settings ,this, 0, true);
417 composer.setTo( m_mail[0] ); 417 composer.setTo( m_mail[0] );
418 composer.setSubject( "Re: " + m_mail[1] ); 418 composer.setSubject( prefix + m_mail[1] );
419 composer.setMessage( rtext ); 419 composer.setMessage( rtext );
420 composer.setInReplyTo(m_recMail.Msgid());
421
420 if ( QDialog::Accepted == QPEApplication::execDialog( &composer ) ) 422 if ( QDialog::Accepted == QPEApplication::execDialog( &composer ) )
421 { 423 {
422 m_recMail.Wrapper()->answeredMail(m_recMail); 424 m_recMail.Wrapper()->answeredMail(m_recMail);
423 } 425 }
424} 426}
425 427
426void ViewMail::slotForward() 428void ViewMail::slotForward()
427{ 429{
428 if (!m_gotBody) 430 if (!m_gotBody)
429 { 431 {
430 QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot forward yet."), tr("Ok")); 432 QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot forward yet."), tr("Ok"));
431 return; 433 return;
432 } 434 }
433 435
434 QString ftext; 436 QString ftext;
435 ftext += QString("\n----- Forwarded message from %1 -----\n\n") 437 ftext += QString("\n----- Forwarded message from %1 -----\n\n")
436 .arg( m_mail[0] ); 438 .arg( m_mail[0] );
437 if (!m_mail[3].isNull()) 439 if (!m_mail[3].isNull())
438 ftext += QString("Date: %1\n") 440 ftext += QString("Date: %1\n")
439 .arg( m_mail[3] ); 441 .arg( m_mail[3] );
440 if (!m_mail[0].isNull()) 442 if (!m_mail[0].isNull())
441 ftext += QString("From: %1\n") 443 ftext += QString("From: %1\n")
442 .arg( m_mail[0] ); 444 .arg( m_mail[0] );
443 if (!m_mail[1].isNull()) 445 if (!m_mail[1].isNull())
444 ftext += QString("Subject: %1\n") 446 ftext += QString("Subject: %1\n")
445 .arg( m_mail[1] ); 447 .arg( m_mail[1] );
446 448
447 ftext += QString("\n%1\n") 449 ftext += QString("\n%1\n")
448 .arg( m_mail[2]); 450 .arg( m_mail[2]);
449 451
450 ftext += QString("----- End forwarded message -----\n"); 452 ftext += QString("----- End forwarded message -----\n");
451 453
452 Settings *settings = new Settings(); 454 Settings *settings = new Settings();
453 ComposeMail composer( settings ,this, 0, true); 455 ComposeMail composer( settings ,this, 0, true);
454 composer.setSubject( "Fwd: " + m_mail[1] ); 456 composer.setSubject( "Fwd: " + m_mail[1] );
455 composer.setMessage( ftext ); 457 composer.setMessage( ftext );
456 if ( QDialog::Accepted == QPEApplication::execDialog( &composer )) 458 if ( QDialog::Accepted == QPEApplication::execDialog( &composer ))
457 { 459 {
458 } 460 }
459} 461}
460 462
461void ViewMail::slotDeleteMail( ) 463void ViewMail::slotDeleteMail( )
462{ 464{
463 if ( QMessageBox::warning(this, tr("Delete Mail"), QString( tr("<p>Do you really want to delete this mail? <br><br>" ) + m_mail[0] + " - " + m_mail[1] ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) 465 if ( QMessageBox::warning(this, tr("Delete Mail"), QString( tr("<p>Do you really want to delete this mail? <br><br>" ) + m_mail[0] + " - " + m_mail[1] ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes )
464 { 466 {
465 m_recMail.Wrapper()->deleteMail( m_recMail ); 467 m_recMail.Wrapper()->deleteMail( m_recMail );
466 hide(); 468 hide();
467 deleted = true; 469 deleted = true;
468 } 470 }
469} 471}