summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2003-05-24 01:20:33 (UTC)
committer llornkcor <llornkcor>2003-05-24 01:20:33 (UTC)
commit62d2ddfb5cd77e2637cdf7fe16d76aac04975984 (patch) (unidiff)
tree2157d57bab2d6e491226f5bc8468a4c2527e1456
parent0c4b5288ccd4bcd1668816a0c4e12ce0a76b4e6e (diff)
downloadopie-62d2ddfb5cd77e2637cdf7fe16d76aac04975984.zip
opie-62d2ddfb5cd77e2637cdf7fe16d76aac04975984.tar.gz
opie-62d2ddfb5cd77e2637cdf7fe16d76aac04975984.tar.bz2
QString to const QString
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mailit/addresslist.cpp190
-rw-r--r--noncore/net/mailit/addresslist.h36
-rw-r--r--noncore/net/mailit/emailclient.cpp177
-rw-r--r--noncore/net/mailit/emailclient.h2
-rw-r--r--noncore/net/mailit/emailhandler.cpp28
-rw-r--r--noncore/net/mailit/emailhandler.h166
-rw-r--r--noncore/net/mailit/emaillistitem.cpp96
-rw-r--r--noncore/net/mailit/popclient.cpp38
-rw-r--r--noncore/net/mailit/popclient.h4
-rw-r--r--noncore/net/mailit/smtpclient.cpp4
-rw-r--r--noncore/net/mailit/smtpclient.h58
-rw-r--r--noncore/net/mailit/textparser.cpp404
-rw-r--r--noncore/net/mailit/textparser.h6
-rw-r--r--noncore/unsupported/mailit/addresslist.cpp190
-rw-r--r--noncore/unsupported/mailit/addresslist.h36
-rw-r--r--noncore/unsupported/mailit/emailclient.cpp177
-rw-r--r--noncore/unsupported/mailit/emailclient.h2
-rw-r--r--noncore/unsupported/mailit/emailhandler.cpp28
-rw-r--r--noncore/unsupported/mailit/emailhandler.h166
-rw-r--r--noncore/unsupported/mailit/emaillistitem.cpp96
-rw-r--r--noncore/unsupported/mailit/popclient.cpp38
-rw-r--r--noncore/unsupported/mailit/popclient.h4
-rw-r--r--noncore/unsupported/mailit/smtpclient.cpp4
-rw-r--r--noncore/unsupported/mailit/smtpclient.h58
-rw-r--r--noncore/unsupported/mailit/textparser.cpp404
-rw-r--r--noncore/unsupported/mailit/textparser.h6
26 files changed, 1210 insertions, 1208 deletions
diff --git a/noncore/net/mailit/addresslist.cpp b/noncore/net/mailit/addresslist.cpp
index 7d60ebf..18d14bc 100644
--- a/noncore/net/mailit/addresslist.cpp
+++ b/noncore/net/mailit/addresslist.cpp
@@ -1,161 +1,161 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include <qfile.h> 20#include <qfile.h>
21#include <qtextstream.h> 21#include <qtextstream.h>
22#include <opie/ocontactaccess.h> 22#include <opie/ocontactaccess.h>
23#include <opie/ocontact.h> 23#include <opie/ocontact.h>
24 24
25#include "addresslist.h" 25#include "addresslist.h"
26 26
27AddressList::AddressList() 27AddressList::AddressList()
28{ 28{
29 addresses.setAutoDelete(TRUE); 29 addresses.setAutoDelete(TRUE);
30 read(); 30 read();
31 dirty = FALSE; 31 dirty = FALSE;
32} 32}
33 33
34AddressList::~AddressList() 34AddressList::~AddressList()
35{ 35{
36 addresses.clear(); 36 addresses.clear();
37} 37}
38 38
39void AddressList::addContact(QString email, QString name) 39void AddressList::addContact(const QString &email, const QString &name)
40{ 40{
41 //skip if not a valid email address, 41 //skip if not a valid email address,
42 if (email.find( '@') == -1) 42 if (email.find( '@') == -1)
43 return; 43 return;
44 44
45 if ( ! containsEmail(email) ) { 45 if ( ! containsEmail(email) ) {
46 Contact *in = new Contact; 46 Contact *in = new Contact;
47 in->email = email; 47 in->email = email;
48 in->name = name; 48 in->name = name;
49 addresses.append(in); 49 addresses.append(in);
50 dirty = TRUE; 50 dirty = TRUE;
51 } 51 }
52} 52}
53 53
54bool AddressList::containsEmail(QString email) 54bool AddressList::containsEmail(const QString &email)
55{ 55{
56 return ( getEmailRef(email) != -1 ); 56 return ( getEmailRef(email) != -1 );
57} 57}
58 58
59bool AddressList::containsName(QString name) 59bool AddressList::containsName(const QString &name)
60{ 60{
61 return ( getNameRef(name) != -1 ); 61 return ( getNameRef(name) != -1 );
62} 62}
63 63
64QString AddressList::getNameByEmail(QString email) 64QString AddressList::getNameByEmail(const QString &email)
65{ 65{
66 int pos = getEmailRef(email); 66 int pos = getEmailRef(email);
67 if (pos != -1) { 67 if (pos != -1) {
68 Contact *ptr = addresses.at(pos); 68 Contact *ptr = addresses.at(pos);
69 return ptr->name; 69 return ptr->name;
70 } 70 }
71 71
72 return NULL; 72 return NULL;
73} 73}
74 74
75QString AddressList::getEmailByName(QString name) 75QString AddressList::getEmailByName(const QString &name)
76{ 76{
77 int pos = getNameRef(name); 77 int pos = getNameRef(name);
78 if (pos != -1) { 78 if (pos != -1) {
79 Contact *ptr = addresses.at(pos); 79 Contact *ptr = addresses.at(pos);
80 return ptr->email; 80 return ptr->email;
81 } 81 }
82 82
83 return NULL; 83 return NULL;
84} 84}
85 85
86int AddressList::getEmailRef(QString email) 86int AddressList::getEmailRef(const QString &email)
87{ 87{
88 int pos = 0; 88 int pos = 0;
89 Contact *ptr; 89 Contact *ptr;
90 90
91 for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) { 91 for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) {
92 if (ptr->email == email) 92 if (ptr->email == email)
93 return pos; 93 return pos;
94 pos++; 94 pos++;
95 } 95 }
96 return -1; 96 return -1;
97} 97}
98 98
99int AddressList::getNameRef(QString name) 99int AddressList::getNameRef(const QString &name)
100{ 100{
101 int pos = 0; 101 int pos = 0;
102 Contact *ptr; 102 Contact *ptr;
103 103
104 for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) { 104 for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) {
105 if (ptr->name == name) 105 if (ptr->name == name)
106 return pos; 106 return pos;
107 pos++; 107 pos++;
108 } 108 }
109 return -1; 109 return -1;
110} 110}
111 111
112QList<Contact>* AddressList::getContactList() 112QList<Contact>* AddressList::getContactList()
113{ 113{
114 return &addresses; 114 return &addresses;
115} 115}
116 116
117void AddressList::read() 117void AddressList::read()
118{ 118{
119 OContactAccess::List::Iterator it; 119 OContactAccess::List::Iterator it;
120 120
121 QString lineEmail, lineName, email, name; 121 QString lineEmail, lineName, email, name;
122 OContactAccess m_contactdb("mailit"); 122 OContactAccess m_contactdb("mailit");
123 OContactAccess::List m_list = m_contactdb.sorted( true, 0, 0, 0 ); 123 OContactAccess::List m_list = m_contactdb.sorted( true, 0, 0, 0 );
124 //OContact* oc;(*it).defaultEmail() 124 //OContact* oc;(*it).defaultEmail()
125 125
126 for ( it = m_list.begin(); it != m_list.end(); ++it ) 126 for ( it = m_list.begin(); it != m_list.end(); ++it )
127 { 127 {
128 //oc=(OContact*) it; 128 //oc=(OContact*) it;
129 if ((*it).defaultEmail().length()!=0) 129 if ((*it).defaultEmail().length()!=0)
130 addContact((*it).defaultEmail(),(*it).fileAs()); 130 addContact((*it).defaultEmail(),(*it).fileAs());
131 } 131 }
132 132
133 /*if (! f.open(IO_ReadOnly) ) 133 /*if (! f.open(IO_ReadOnly) )
134 return; 134 return;
135 135
136 QTextStream stream(&f); 136 QTextStream stream(&f);
137 137
138 while (! stream.atEnd() ) { 138 while (! stream.atEnd() ) {
139 lineEmail = stream.readLine(); 139 lineEmail = stream.readLine();
140 if (! stream.atEnd() ) 140 if (! stream.atEnd() )
141 lineName = stream.readLine(); 141 lineName = stream.readLine();
142 else return; 142 else return;
143 143
144 email = getRightString(lineEmail); 144 email = getRightString(lineEmail);
145 name = getRightString(lineName); 145 name = getRightString(lineName);
146 addContact(email, name); 146 addContact(email, name);
147 } 147 }
148 f.close();*/ 148 f.close();*/
149} 149}
150 150
151QString AddressList::getRightString(QString in) 151QString AddressList::getRightString(const QString &in)
152{ 152{
153 QString out = ""; 153 QString out = "";
154 154
155 int pos = in.find('='); 155 int pos = in.find('=');
156 if (pos != -1) { 156 if (pos != -1) {
157 out = in.mid(pos+1).stripWhiteSpace(); 157 out = in.mid(pos+1).stripWhiteSpace();
158 } 158 }
159 return out; 159 return out;
160} 160}
161 161
diff --git a/noncore/net/mailit/addresslist.h b/noncore/net/mailit/addresslist.h
index 99cef9a..b46d467 100644
--- a/noncore/net/mailit/addresslist.h
+++ b/noncore/net/mailit/addresslist.h
@@ -1,58 +1,58 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef ADDRESSLIST_H 20#ifndef ADDRESSLIST_H
21#define ADDRESSLIST_H 21#define ADDRESSLIST_H
22 22
23#include <qobject.h> 23#include <qobject.h>
24#include <qlist.h> 24#include <qlist.h>
25 25
26struct Contact 26struct Contact
27{ 27{
28 QString email; 28 QString email;
29 QString name; 29 QString name;
30}; 30};
31 31
32class AddressList : public QObject 32class AddressList : public QObject
33{ 33{
34 Q_OBJECT 34 Q_OBJECT
35 35
36public: 36public:
37 AddressList(); 37 AddressList();
38 ~AddressList(); 38 ~AddressList();
39 void addContact(QString email, QString name); 39 void addContact(const QString &email, const QString &name);
40 bool containsEmail(QString email); 40 bool containsEmail(const QString &email);
41 bool containsName(QString name); 41 bool containsName(const QString &name);
42 QString getNameByEmail(QString email); 42 QString getNameByEmail(const QString &email);
43 QString getEmailByName(QString name); 43 QString getEmailByName(const QString &name);
44 QList<Contact>* getContactList(); 44 QList<Contact>* getContactList();
45 45
46private: 46private:
47 int getEmailRef(QString email); 47 int getEmailRef(const QString &email);
48 int getNameRef(QString name); 48 int getNameRef(const QString &name);
49 QString getRightString(QString in); 49 QString getRightString(const QString &in);
50 void read(); 50 void read();
51 51
52private: 52private:
53 QList<Contact> addresses; 53 QList<Contact> addresses;
54 QString filename; 54 QString filename;
55 bool dirty; 55 bool dirty;
56}; 56};
57 57
58#endif 58#endif
diff --git a/noncore/net/mailit/emailclient.cpp b/noncore/net/mailit/emailclient.cpp
index b039cc4..2102ba7 100644
--- a/noncore/net/mailit/emailclient.cpp
+++ b/noncore/net/mailit/emailclient.cpp
@@ -176,861 +176,862 @@ void EmailClient::init()
176// grid_2->setMargin( 11 ); 176// grid_2->setMargin( 11 );
177 177
178 inboxView = new QListView( widget, "inboxView" ); 178 inboxView = new QListView( widget, "inboxView" );
179 inboxView->addColumn( tr( "From" ) ); 179 inboxView->addColumn( tr( "From" ) );
180 inboxView->addColumn( tr( "Subject" ) ); 180 inboxView->addColumn( tr( "Subject" ) );
181 inboxView->addColumn( tr( "Date" ) ); 181 inboxView->addColumn( tr( "Date" ) );
182 inboxView->setMinimumSize( QSize( 0, 0 ) ); 182 inboxView->setMinimumSize( QSize( 0, 0 ) );
183 inboxView->setAllColumnsShowFocus(TRUE); 183 inboxView->setAllColumnsShowFocus(TRUE);
184 QWhatsThis::add(inboxView,QWidget::tr("This is the inbox view.\n" 184 QWhatsThis::add(inboxView,QWidget::tr("This is the inbox view.\n"
185 "It keeps the fetched mail which can be \n" 185 "It keeps the fetched mail which can be \n"
186 "viewed by double clicking the entry.\n" 186 "viewed by double clicking the entry.\n"
187 "blue attachment icon shows whether this \n" 187 "blue attachment icon shows whether this \n"
188 "mailhas attachments.\n")); 188 "mailhas attachments.\n"));
189 189
190 grid_2->addWidget( inboxView, 2, 0 ); 190 grid_2->addWidget( inboxView, 2, 0 );
191 mailboxView->addTab( widget, "mailit/inbox", tr( "Inbox" ) ); 191 mailboxView->addTab( widget, "mailit/inbox", tr( "Inbox" ) );
192 192
193 QWidget* widget_2 = new QWidget( mailboxView, "widget_2" ); 193 QWidget* widget_2 = new QWidget( mailboxView, "widget_2" );
194 grid_3 = new QGridLayout( widget_2 ); 194 grid_3 = new QGridLayout( widget_2 );
195// grid_3->setSpacing(6); 195// grid_3->setSpacing(6);
196// grid_3->setMargin( 11 ); 196// grid_3->setMargin( 11 );
197 197
198 outboxView = new QListView( widget_2, "outboxView" ); 198 outboxView = new QListView( widget_2, "outboxView" );
199 outboxView->addColumn( tr( "To" ) ); 199 outboxView->addColumn( tr( "To" ) );
200 outboxView->addColumn( tr( "Subject" ) ); 200 outboxView->addColumn( tr( "Subject" ) );
201 outboxView->setAllColumnsShowFocus(TRUE); 201 outboxView->setAllColumnsShowFocus(TRUE);
202 202
203 QWhatsThis::add(outboxView,QWidget::tr("This is the outbox view.\n" 203 QWhatsThis::add(outboxView,QWidget::tr("This is the outbox view.\n"
204 "It keeps the queued mails to send which can be \n" 204 "It keeps the queued mails to send which can be \n"
205 "reviewed by double clicking the entry.")); 205 "reviewed by double clicking the entry."));
206 grid_3->addWidget( outboxView, 0, 0 ); 206 grid_3->addWidget( outboxView, 0, 0 );
207 mailboxView->addTab( widget_2,"mailit/outbox", tr( "Outbox" ) ); 207 mailboxView->addTab( widget_2,"mailit/outbox", tr( "Outbox" ) );
208 208
209 setCentralWidget(mailboxView); 209 setCentralWidget(mailboxView);
210 210
211} 211}
212 212
213void EmailClient::initStatusBar(QWidget* parent) 213void EmailClient::initStatusBar(QWidget* parent)
214{ 214{
215 statusBar = new QStatusBar(parent); 215 statusBar = new QStatusBar(parent);
216 statusBar->setSizeGripEnabled(FALSE); 216 statusBar->setSizeGripEnabled(FALSE);
217 217
218 status1Label = new QLabel( tr("Idle"), statusBar); 218 status1Label = new QLabel( tr("Idle"), statusBar);
219 status2Label = new QLabel("", statusBar); 219 status2Label = new QLabel("", statusBar);
220 connect(emailHandler, SIGNAL(updatePopStatus(const QString &)), 220 connect(emailHandler, SIGNAL(updatePopStatus(const QString &)),
221 status2Label, SLOT(setText(const QString &)) ); 221 status2Label, SLOT(setText(const QString &)) );
222 connect(emailHandler, SIGNAL(updateSmtpStatus(const QString &)), 222 connect(emailHandler, SIGNAL(updateSmtpStatus(const QString &)),
223 status2Label, SLOT(setText(const QString &)) ); 223 status2Label, SLOT(setText(const QString &)) );
224 224
225 progressBar = new QProgressBar(statusBar); 225 progressBar = new QProgressBar(statusBar);
226 226
227 connect(emailHandler, SIGNAL(mailboxSize(int)), 227 connect(emailHandler, SIGNAL(mailboxSize(int)),
228 this, SLOT(setTotalSize(int)) ); 228 this, SLOT(setTotalSize(int)) );
229 connect(emailHandler, SIGNAL(currentMailSize(int)), 229 connect(emailHandler, SIGNAL(currentMailSize(int)),
230 this, SLOT(setMailSize(int)) ); 230 this, SLOT(setMailSize(int)) );
231 connect(emailHandler, SIGNAL(downloadedSize(int)), 231 connect(emailHandler, SIGNAL(downloadedSize(int)),
232 this, SLOT(setDownloadedSize(int)) ); 232 this, SLOT(setDownloadedSize(int)) );
233 233
234 statusBar->addWidget(status1Label); 234 statusBar->addWidget(status1Label);
235 statusBar->addWidget(progressBar); 235 statusBar->addWidget(progressBar);
236 statusBar->addWidget(status2Label); 236 statusBar->addWidget(status2Label);
237 237
238} 238}
239 239
240void EmailClient::compose() 240void EmailClient::compose()
241{ 241{
242 emit composeRequested(); 242 emit composeRequested();
243} 243}
244 244
245void EmailClient::cancel() 245void EmailClient::cancel()
246{ 246{
247 emailHandler->cancel(); 247 emailHandler->cancel();
248} 248}
249 249
250AddressList* EmailClient::getAdrListRef() 250AddressList* EmailClient::getAdrListRef()
251{ 251{
252 return addressList; 252 return addressList;
253} 253}
254 254
255//this needs to be rewritten to syncronize with outboxView 255//this needs to be rewritten to syncronize with outboxView
256void EmailClient::enqueMail(const Email &mail) 256void EmailClient::enqueMail(const Email &mail)
257{ 257{
258 if (accountList.count() == 0) { 258 if (accountList.count() == 0) {
259 QMessageBox::warning(qApp->activeWindow(), 259 QMessageBox::warning(qApp->activeWindow(),
260 tr("No account selected"), tr("You must create an account"), "OK\n"); 260 tr("No account selected"), tr("You must create an account"), "OK\n");
261 return; 261 return;
262 } 262 }
263 263
264 if (accountList.count() > 0) { 264 if (accountList.count() > 0) {
265 currentAccount = accountList.first(); 265 currentAccount = accountList.first();
266 qWarning("using account " + currentAccount->name); 266 qWarning("using account " + currentAccount->name);
267 } 267 }
268 268
269 Email addMail = mail; 269 Email addMail = mail;
270 addMail.from = currentAccount->name; 270 addMail.from = currentAccount->name;
271 addMail.fromMail = currentAccount->emailAddress; 271 addMail.fromMail = currentAccount->emailAddress;
272 addMail.rawMail.prepend("From: " + addMail.from + "<" + addMail.fromMail + ">\n"); 272 addMail.rawMail.prepend("From: " + addMail.from + "<" + addMail.fromMail + ">\n");
273 item = new EmailListItem(outboxView, addMail, false); 273 item = new EmailListItem(outboxView, addMail, false);
274 274
275 mailboxView->setCurrentTab(1); 275 mailboxView->setCurrentTab(1);
276 276
277} 277}
278 278
279void EmailClient::sendQuedMail() 279void EmailClient::sendQuedMail()
280{ 280{
281 int count = 0; 281 int count = 0;
282 282
283 if (accountList.count() == 0) { 283 if (accountList.count() == 0) {
284 QMessageBox::warning(qApp->activeWindow(), "No account selected", "You must create an account", "OK\n"); 284 QMessageBox::warning(qApp->activeWindow(), "No account selected", "You must create an account", "OK\n");
285 return; 285 return;
286 } 286 }
287 //traverse listview, find messages to send 287 //traverse listview, find messages to send
288 if (! sending) { 288 if (! sending) {
289 item = (EmailListItem *) outboxView->firstChild(); 289 item = (EmailListItem *) outboxView->firstChild();
290 if (item != NULL) { 290 if (item != NULL) {
291 while (item != NULL) { 291 while (item != NULL) {
292 quedMessages.append(item->getMail()); 292 quedMessages.append(item->getMail());
293 item = (EmailListItem *) item->nextSibling(); 293 item = (EmailListItem *) item->nextSibling();
294 count++; 294 count++;
295 } 295 }
296 setMailAccount(); 296 setMailAccount();
297 emailHandler->sendMail(&quedMessages); 297 emailHandler->sendMail(&quedMessages);
298 sending = TRUE; 298 sending = TRUE;
299 sendMailButton->setEnabled(FALSE); 299 sendMailButton->setEnabled(FALSE);
300 cancelButton->setEnabled(TRUE); 300 cancelButton->setEnabled(TRUE);
301 } else { 301 } else {
302 qWarning("sendQuedMail(): no messages to send"); 302 qWarning("sendQuedMail(): no messages to send");
303 } 303 }
304 } 304 }
305} 305}
306 306
307void EmailClient::setMailAccount() 307void EmailClient::setMailAccount()
308{ 308{
309 emailHandler->setAccount(*currentAccount); 309 emailHandler->setAccount(*currentAccount);
310} 310}
311 311
312void EmailClient::mailSent() 312void EmailClient::mailSent()
313{ 313{
314 sending = FALSE; 314 sending = FALSE;
315 sendMailButton->setEnabled(TRUE); 315 sendMailButton->setEnabled(TRUE);
316 316
317 quedMessages.clear(); 317 quedMessages.clear();
318 outboxView->clear(); //should be moved to an sentBox 318 outboxView->clear(); //should be moved to an sentBox
319} 319}
320 320
321void EmailClient::getNewMail() { 321void EmailClient::getNewMail() {
322 322
323 if (accountList.count() == 0) { 323 if (accountList.count() == 0) {
324 QMessageBox::warning(qApp->activeWindow(),"No account selected", 324 QMessageBox::warning(qApp->activeWindow(),"No account selected",
325 "You must create an account", "OK\n"); 325 "You must create an account", "OK\n");
326 return; 326 return;
327 } 327 }
328 328
329 setMailAccount(); 329 setMailAccount();
330 330
331 receiving = TRUE; 331 receiving = TRUE;
332 previewingMail = TRUE; 332 previewingMail = TRUE;
333 getMailButton->setEnabled(FALSE); 333 getMailButton->setEnabled(FALSE);
334 cancelButton->setEnabled(TRUE); 334 cancelButton->setEnabled(TRUE);
335 selectAccountMenu->setEnabled(FALSE); 335 selectAccountMenu->setEnabled(FALSE);
336 336
337 status1Label->setText(currentAccount->accountName + " headers"); 337 status1Label->setText(currentAccount->accountName + " headers");
338 progressBar->reset(); 338 progressBar->reset();
339 339
340 //get any previous mails not downloaded and add to queue 340 //get any previous mails not downloaded and add to queue
341 /*mailDownloadList.clear(); 341 /*mailDownloadList.clear();
342 Email *mailPtr; 342 Email *mailPtr;
343 item = (EmailListItem *) inboxView->firstChild(); 343 item = (EmailListItem *) inboxView->firstChild();
344 while (item != NULL) { 344 while (item != NULL) {
345 mailPtr = item->getMail(); 345 mailPtr = item->getMail();
346 if ( (!mailPtr->downloaded) && (mailPtr->fromAccountId == currentAccount->id) ) { 346 if ( (!mailPtr->downloaded) && (mailPtr->fromAccountId == currentAccount->id) ) {
347 mailDownloadList.sizeInsert(mailPtr->serverId, mailPtr->size); 347 mailDownloadList.sizeInsert(mailPtr->serverId, mailPtr->size);
348 } 348 }
349 item = (EmailListItem *) item->nextSibling(); 349 item = (EmailListItem *) item->nextSibling();
350 }*/ 350 }*/
351 351
352 emailHandler->getMailHeaders(); 352 emailHandler->getMailHeaders();
353 353
354} 354}
355 355
356void EmailClient::getAllNewMail() 356void EmailClient::getAllNewMail()
357{ 357{
358 allAccounts = TRUE; 358 allAccounts = TRUE;
359 currentAccount = accountList.first(); 359 currentAccount = accountList.first();
360 getNewMail(); 360 getNewMail();
361} 361}
362 362
363void EmailClient::mailArrived(const Email &mail, bool fromDisk) 363void EmailClient::mailArrived(const Email &mail, bool fromDisk)
364{ 364{
365 Enclosure *ePtr; 365 Enclosure *ePtr;
366 Email newMail; 366 Email newMail;
367 int thisMailId; 367 int thisMailId;
368 emailHandler->parse(mail.rawMail, lineShift, &newMail); 368 emailHandler->parse( mail.rawMail, lineShift, &newMail);
369 mailconf->setGroup(newMail.id); 369 mailconf->setGroup(newMail.id);
370 370
371 if (fromDisk) 371 if (fromDisk)
372 { 372 {
373 373
374 newMail.downloaded = mailconf->readBoolEntry("downloaded"); 374 newMail.downloaded = mailconf->readBoolEntry("downloaded");
375 newMail.size = mailconf->readNumEntry("size"); 375 newMail.size = mailconf->readNumEntry("size");
376 newMail.serverId = mailconf->readNumEntry("serverid"); 376 newMail.serverId = mailconf->readNumEntry("serverid");
377 newMail.fromAccountId = mailconf->readNumEntry("fromaccountid"); 377 newMail.fromAccountId = mailconf->readNumEntry("fromaccountid");
378 } 378 }
379 else 379 else
380 { //mail arrived from server 380 { //mail arrived from server
381 381
382 newMail.serverId = mail.serverId; 382 newMail.serverId = mail.serverId;
383 newMail.size = mail.size; 383 newMail.size = mail.size;
384 newMail.downloaded = mail.downloaded; 384 newMail.downloaded = mail.downloaded;
385 385
386 newMail.fromAccountId = emailHandler->getAccount()->id; 386 newMail.fromAccountId = emailHandler->getAccount()->id;
387 mailconf->writeEntry("fromaccountid", newMail.fromAccountId); 387 mailconf->writeEntry("fromaccountid", newMail.fromAccountId);
388 } 388 }
389 389
390 //add if read or not 390 //add if read or not
391 newMail.read = mailconf->readBoolEntry("mailread"); 391 newMail.read = mailconf->readBoolEntry("mailread");
392 392
393 //check if new mail 393 //check if new mail
394 if ( (thisMailId = mailconf->readNumEntry("internalmailid", -1)) == -1) { 394 if ( (thisMailId = mailconf->readNumEntry("internalmailid", -1)) == -1) {
395 thisMailId = mailIdCount; 395 thisMailId = mailIdCount;
396 mailIdCount++; 396 mailIdCount++;
397 397
398 //set server count, so that if the user aborts, the new 398 //set server count, so that if the user aborts, the new
399 //header is not reloaded 399 //header is not reloaded
400 if ((currentAccount)&&(currentAccount->synchronize)) 400 if ((currentAccount)&&(currentAccount->synchronize))
401 currentAccount->lastServerMailCount++; 401 currentAccount->lastServerMailCount++;
402 402
403 mailconf->writeEntry("internalmailid", thisMailId); 403 mailconf->writeEntry("internalmailid", thisMailId);
404 mailconf->writeEntry("downloaded", newMail.downloaded); 404 mailconf->writeEntry("downloaded", newMail.downloaded);
405 mailconf->writeEntry("size", (int) newMail.size); 405 mailconf->writeEntry("size", (int) newMail.size);
406 mailconf->writeEntry("serverid", newMail.serverId); 406 mailconf->writeEntry("serverid", newMail.serverId);
407 407
408 //addressList->addContact(newMail.fromMail, newMail.from); 408 //addressList->addContact(newMail.fromMail, newMail.from);
409 } 409 }
410 410
411 mailconf->writeEntry("downloaded", newMail.downloaded); 411 mailconf->writeEntry("downloaded", newMail.downloaded);
412 412
413 QString stringMailId; 413 QString stringMailId;
414 stringMailId.setNum(thisMailId); 414 stringMailId.setNum(thisMailId);
415 //see if any attatchments needs to be stored 415 //see if any attatchments needs to be stored
416 416
417 for ( ePtr=newMail.files.first(); ePtr != 0; ePtr=newMail.files.next() ) { 417 for ( ePtr=newMail.files.first(); ePtr != 0; ePtr=newMail.files.next() ) {
418 QString stringId; 418 QString stringId;
419 stringId.setNum(ePtr->id); 419 stringId.setNum(ePtr->id);
420 420
421 int id = mailconf->readNumEntry("enclosureid_" + stringId); 421 int id = mailconf->readNumEntry("enclosureid_" + stringId);
422 if (id != ePtr->id) { //new entry 422 if (id != ePtr->id) { //new entry
423 mailconf->writeEntry("enclosureid_" + stringId, ePtr->id); 423 mailconf->writeEntry("enclosureid_" + stringId, ePtr->id);
424 mailconf->writeEntry("name_" + stringId, ePtr->originalName); 424 mailconf->writeEntry("name_" + stringId, ePtr->originalName);
425 mailconf->writeEntry("contenttype_" + stringId, ePtr->contentType); 425 mailconf->writeEntry("contenttype_" + stringId, ePtr->contentType);
426 mailconf->writeEntry("contentattribute_" + stringId, ePtr->contentAttribute); 426 mailconf->writeEntry("contentattribute_" + stringId, ePtr->contentAttribute);
427 mailconf->writeEntry("saved_" + stringId, ePtr->saved); 427 mailconf->writeEntry("saved_" + stringId, ePtr->saved);
428 mailconf->writeEntry("installed_" + stringId, FALSE); 428 mailconf->writeEntry("installed_" + stringId, FALSE);
429 429
430 ePtr->name = stringMailId + "_" + stringId; 430 ePtr->name = stringMailId + "_" + stringId;
431 ePtr->path = getPath(TRUE); 431 ePtr->path = getPath(TRUE);
432 if (emailHandler->getEnclosure(ePtr)) { //file saved 432 if (emailHandler->getEnclosure(ePtr)) { //file saved
433 ePtr->saved = TRUE; 433 ePtr->saved = TRUE;
434 mailconf->writeEntry("saved_" + stringId, ePtr->saved); 434 mailconf->writeEntry("saved_" + stringId, ePtr->saved);
435 mailconf->writeEntry("filename_" + stringId, ePtr->name); 435 mailconf->writeEntry("filename_" + stringId, ePtr->name);
436 mailconf->writeEntry("path_" + stringId, ePtr->path); 436 mailconf->writeEntry("path_" + stringId, ePtr->path);
437 } else { 437 } else {
438 ePtr->saved = FALSE; 438 ePtr->saved = FALSE;
439 mailconf->writeEntry("saved_" + stringId, ePtr->saved); 439 mailconf->writeEntry("saved_" + stringId, ePtr->saved);
440 } 440 }
441 } else { 441 } else {
442 ePtr->saved = mailconf->readBoolEntry("saved_" + stringId); 442 ePtr->saved = mailconf->readBoolEntry("saved_" + stringId);
443 ePtr->installed = mailconf->readBoolEntry("installed_" + stringId); 443 ePtr->installed = mailconf->readBoolEntry("installed_" + stringId);
444 if (ePtr->saved) { 444 if (ePtr->saved) {
445 ePtr->name = mailconf->readEntry("filename_" + stringId); 445 ePtr->name = mailconf->readEntry("filename_" + stringId);
446 ePtr->path = mailconf->readEntry("path_" + stringId); 446 ePtr->path = mailconf->readEntry("path_" + stringId);
447 } 447 }
448 } 448 }
449 } 449 }
450 450
451 bool found=false; 451 bool found=false;
452 452
453 if (!fromDisk) 453 if (!fromDisk)
454 { 454 {
455 455
456 Email *mailPtr; 456 Email *mailPtr;
457 item = (EmailListItem *) inboxView->firstChild(); 457 item = (EmailListItem *) inboxView->firstChild();
458 while ((item != NULL)&&(!found)) 458 while ((item != NULL)&&(!found))
459 { 459 {
460 mailPtr = item->getMail(); 460 mailPtr = item->getMail();
461 if (mailPtr->id == newMail.id) { 461 if (mailPtr->id == newMail.id) {
462 item->setMail(newMail); 462 item->setMail(newMail);
463 emit mailUpdated(item->getMail()); 463 emit mailUpdated(item->getMail());
464 found = true; 464 found = true;
465 } 465 }
466 item = (EmailListItem *) item->nextSibling(); 466 item = (EmailListItem *) item->nextSibling();
467 } 467 }
468 } 468 }
469 if ((!found)||(fromDisk)) item = new EmailListItem(inboxView, newMail, TRUE); 469 if ((!found)||(fromDisk)) {
470 470 item = new EmailListItem(inboxView, newMail, TRUE);
471 if (item->getMail()->files.count()>0) 471 }
472 { 472 if (item->getMail()->files.count()>0)
473 item->setPixmap(0, Resource::loadPixmap("mailit/attach")); 473 {
474 } 474 item->setPixmap(0, Resource::loadPixmap("mailit/attach"));
475 }
475 /*if (!newMail.downloaded) 476 /*if (!newMail.downloaded)
476 mailDownloadList.sizeInsert(newMail.serverId, newMail.size);*/ 477 mailDownloadList.sizeInsert(newMail.serverId, newMail.size);*/
477 478
478 mailboxView->setCurrentTab(0); 479 mailboxView->setCurrentTab(0);
479 480
480} 481}
481 482
482void EmailClient::allMailArrived(int count) 483void EmailClient::allMailArrived(int count)
483{ 484{
484 // not previewing means all mailtransfer has been done 485 // not previewing means all mailtransfer has been done
485 /*if (!previewingMail) {*/ 486 /*if (!previewingMail) {*/
486 if ( (allAccounts) && ( (currentAccount = accountList.next()) !=0 ) ) { 487 if ( (allAccounts) && ( (currentAccount = accountList.next()) !=0 ) ) {
487 emit newCaption("Mailit - " + currentAccount->accountName); 488 emit newCaption("Mailit - " + currentAccount->accountName);
488 getNewMail(); 489 getNewMail();
489 return; 490 return;
490 } else { 491 } else {
491 allAccounts = FALSE; 492 allAccounts = FALSE;
492 receiving = FALSE; 493 receiving = FALSE;
493 getMailButton->setEnabled(TRUE); 494 getMailButton->setEnabled(TRUE);
494 cancelButton->setEnabled(FALSE); 495 cancelButton->setEnabled(FALSE);
495 selectAccountMenu->setEnabled(TRUE); 496 selectAccountMenu->setEnabled(TRUE);
496 status1Label->setText("Idle"); 497 status1Label->setText("Idle");
497 498
498 progressBar->reset(); 499 progressBar->reset();
499 return; 500 return;
500 } 501 }
501 //} 502 //}
502 503
503 // all headers downloaded from server, start downloading remaining mails 504 // all headers downloaded from server, start downloading remaining mails
504 previewingMail = FALSE; 505 previewingMail = FALSE;
505 status1Label->setText(currentAccount->accountName); 506 status1Label->setText(currentAccount->accountName);
506 progressBar->reset(); 507 progressBar->reset();
507 508
508 509
509 mailboxView->setCurrentTab(0); 510 mailboxView->setCurrentTab(0);
510} 511}
511 512
512 513
513void EmailClient::moveMailFront(Email *mailPtr) 514void EmailClient::moveMailFront(Email *mailPtr)
514{ 515{
515 if ( (receiving) && (mailPtr->fromAccountId == currentAccount->id) ) { 516 if ( (receiving) && (mailPtr->fromAccountId == currentAccount->id) ) {
516 mailDownloadList.moveFront(mailPtr->serverId, mailPtr->size); 517 mailDownloadList.moveFront(mailPtr->serverId, mailPtr->size);
517 } 518 }
518} 519}
519 520
520void EmailClient::smtpError(int code) 521void EmailClient::smtpError(int code)
521{ 522{
522 QString temp; 523 QString temp;
523 524
524 if (code == ErrUnknownResponse) 525 if (code == ErrUnknownResponse)
525 temp = "Unknown response from server"; 526 temp = "Unknown response from server";
526 527
527 if (code == QSocket::ErrHostNotFound) 528 if (code == QSocket::ErrHostNotFound)
528 temp = "host not found"; 529 temp = "host not found";
529 if (code == QSocket::ErrConnectionRefused) 530 if (code == QSocket::ErrConnectionRefused)
530 temp = "connection refused"; 531 temp = "connection refused";
531 if (code == QSocket::ErrSocketRead) 532 if (code == QSocket::ErrSocketRead)
532 temp = "socket packet error"; 533 temp = "socket packet error";
533 534
534 if (code != ErrCancel) { 535 if (code != ErrCancel) {
535 QMessageBox::warning(qApp->activeWindow(), "Sending error", temp, "OK\n"); 536 QMessageBox::warning(qApp->activeWindow(), "Sending error", temp, "OK\n");
536 } else { 537 } else {
537 status2Label->setText("Aborted by user"); 538 status2Label->setText("Aborted by user");
538 } 539 }
539 540
540 sending = FALSE; 541 sending = FALSE;
541 sendMailButton->setEnabled(TRUE); 542 sendMailButton->setEnabled(TRUE);
542 cancelButton->setEnabled(FALSE); 543 cancelButton->setEnabled(FALSE);
543 quedMessages.clear(); 544 quedMessages.clear();
544} 545}
545 546
546void EmailClient::popError(int code) 547void EmailClient::popError(int code)
547{ 548{
548 QString temp; 549 QString temp;
549 550
550 if (code == ErrUnknownResponse) 551 if (code == ErrUnknownResponse)
551 temp = "Unknown response from server"; 552 temp = "Unknown response from server";
552 if (code == ErrLoginFailed) 553 if (code == ErrLoginFailed)
553 temp = "Login failed\nCheck user name and password"; 554 temp = "Login failed\nCheck user name and password";
554 555
555 if (code == QSocket::ErrHostNotFound) 556 if (code == QSocket::ErrHostNotFound)
556 temp = "host not found"; 557 temp = "host not found";
557 if (code == QSocket::ErrConnectionRefused) 558 if (code == QSocket::ErrConnectionRefused)
558 temp = "connection refused"; 559 temp = "connection refused";
559 if (code == QSocket::ErrSocketRead) 560 if (code == QSocket::ErrSocketRead)
560 temp = "socket packet error"; 561 temp = "socket packet error";
561 562
562 if (code != ErrCancel) { 563 if (code != ErrCancel) {
563 QMessageBox::warning(qApp->activeWindow(), "Receiving error", temp, "OK\n"); 564 QMessageBox::warning(qApp->activeWindow(), "Receiving error", temp, "OK\n");
564 } else { 565 } else {
565 status2Label->setText("Aborted by user"); 566 status2Label->setText("Aborted by user");
566 } 567 }
567 568
568 receiving = FALSE; 569 receiving = FALSE;
569 getMailButton->setEnabled(TRUE); 570 getMailButton->setEnabled(TRUE);
570 cancelButton->setEnabled(FALSE); 571 cancelButton->setEnabled(FALSE);
571 selectAccountMenu->setEnabled(TRUE); 572 selectAccountMenu->setEnabled(TRUE);
572} 573}
573 574
574void EmailClient::inboxItemSelected() 575void EmailClient::inboxItemSelected()
575{ 576{
576 //killTimer(timerID); 577 //killTimer(timerID);
577 578
578 item = (EmailListItem*) inboxView->selectedItem(); 579 item = (EmailListItem*) inboxView->selectedItem();
579 if (item != NULL) { 580 if (item != NULL) {
580 emit viewEmail(inboxView, item->getMail()); 581 emit viewEmail(inboxView, item->getMail());
581 } 582 }
582} 583}
583 584
584void EmailClient::outboxItemSelected() 585void EmailClient::outboxItemSelected()
585{ 586{
586 //killTimer(timerID); 587 //killTimer(timerID);
587 588
588 item = (EmailListItem*) outboxView->selectedItem(); 589 item = (EmailListItem*) outboxView->selectedItem();
589 if (item != NULL) { 590 if (item != NULL) {
590 emit viewEmail(outboxView, item->getMail()); 591 emit viewEmail(outboxView, item->getMail());
591 } 592 }
592 593
593} 594}
594 595
595void EmailClient::readMail() 596void EmailClient::readMail()
596{ 597{
597 Email mail; 598 Email mail;
598 int start, stop; 599 int start, stop;
599 QString s, del; 600 QString s, del;
600 601
601 QFile f(getPath(FALSE) + "inbox.txt"); 602 QFile f(getPath(FALSE) + "inbox.txt");
602 603
603 if ( f.open(IO_ReadOnly) ) { // file opened successfully 604 if ( f.open(IO_ReadOnly) ) { // file opened successfully
604 QTextStream t( &f ); // use a text stream 605 QTextStream t( &f ); // use a text stream
605 s = t.read(); 606 s = t.read();
606 f.close(); 607 f.close();
607 608
608 start = 0; 609 start = 0;
609 del = "\n.\n"; 610 del = "\n.\n";
610 while ((uint) start < s.length()) { 611 while ((uint) start < s.length()) {
611 stop = s.find(del, start); 612 stop = s.find(del, start);
612 if (stop == -1) 613 if (stop == -1)
613 stop = s.length() - del.length(); 614 stop = s.length() - del.length();
614 615
615 mail.rawMail = s.mid(start, stop + del.length() - start ); 616 mail.rawMail = s.mid(start, stop + del.length() - start );
616 start = stop + del.length(); 617 start = stop + del.length();
617 mailArrived(mail, TRUE); 618 mailArrived(mail, TRUE);
618 } 619 }
619 } 620 }
620 621
621 QFile fo(getPath(FALSE) + "outbox.txt"); 622 QFile fo(getPath(FALSE) + "outbox.txt");
622 if ( fo.open(IO_ReadOnly) ) { // file opened successfully 623 if ( fo.open(IO_ReadOnly) ) { // file opened successfully
623 QTextStream t( &fo ); // use a text stream 624 QTextStream t( &fo ); // use a text stream
624 s = t.read(); 625 s = t.read();
625 fo.close(); 626 fo.close();
626 627
627 start = 0; 628 start = 0;
628 del = "\n.\n"; 629 del = "\n.\n";
629 while ((uint) start < s.length()) { 630 while ((uint) start < s.length()) {
630 stop = s.find(del, start); 631 stop = s.find(del, start);
631 if (stop == -1) 632 if (stop == -1)
632 stop = s.length() - del.length(); 633 stop = s.length() - del.length();
633 634
634 mail.rawMail = s.mid(start, stop + del.length() - start ); 635 mail.rawMail = s.mid(start, stop + del.length() - start );
635 start = stop + del.length(); 636 start = stop + del.length();
636 emailHandler->parse(mail.rawMail, lineShift, &mail); 637 emailHandler->parse(mail.rawMail, lineShift, &mail);
637 mail.sent = false; 638 mail.sent = false;
638 mail.received = false; 639 mail.received = false;
639 enqueMail(mail); 640 enqueMail(mail);
640 641
641 } 642 }
642 } 643 }
643} 644}
644 645
645void EmailClient::saveMail(QString fileName, QListView *view) 646void EmailClient::saveMail(const QString &fileName, QListView *view)
646{ 647{
647 QFile f(fileName); 648 QFile f(fileName);
648 Email *mail; 649 Email *mail;
649 650
650 if (! f.open(IO_WriteOnly) ) { 651 if (! f.open(IO_WriteOnly) ) {
651 qWarning("could not open file"); 652 qWarning("could not open file");
652 return; 653 return;
653 } 654 }
654 item = (EmailListItem *) view->firstChild(); 655 item = (EmailListItem *) view->firstChild();
655 QTextStream t(&f); 656 QTextStream t(&f);
656 while (item != NULL) { 657 while (item != NULL) {
657 mail = item->getMail(); 658 mail = item->getMail();
658 t << mail->rawMail; 659 t << mail->rawMail;
659 660
660 mailconf->setGroup(mail->id); 661 mailconf->setGroup(mail->id);
661 mailconf->writeEntry("mailread", mail->read); 662 mailconf->writeEntry("mailread", mail->read);
662 663
663 item = (EmailListItem *) item->nextSibling(); 664 item = (EmailListItem *) item->nextSibling();
664 } 665 }
665 f.close(); 666 f.close();
666} 667}
667 668
668//paths for mailit, is settings, inbox, enclosures 669//paths for mailit, is settings, inbox, enclosures
669QString EmailClient::getPath(bool enclosurePath) 670QString EmailClient::getPath(bool enclosurePath)
670{ 671{
671 QString basePath = "qtmail"; 672 QString basePath = "qtmail";
672 QString enclosures = "enclosures"; 673 QString enclosures = "enclosures";
673 674
674 QDir dir = (QString(getenv("HOME")) + "/Applications/" + basePath); 675 QDir dir = (QString(getenv("HOME")) + "/Applications/" + basePath);
675 if ( !dir.exists() ) 676 if ( !dir.exists() )
676 dir.mkdir( dir.path() ); 677 dir.mkdir( dir.path() );
677 678
678 if (enclosurePath) { 679 if (enclosurePath) {
679 dir = (QString(getenv("HOME")) + "/Applications/" + basePath + "/" + enclosures); 680 dir = (QString(getenv("HOME")) + "/Applications/" + basePath + "/" + enclosures);
680 681
681 if ( !dir.exists() ) 682 if ( !dir.exists() )
682 dir.mkdir( dir.path() ); 683 dir.mkdir( dir.path() );
683 684
684 return (dir.path() + "/"); 685 return (dir.path() + "/");
685 686
686 } 687 }
687 return (dir.path() + "/"); 688 return (dir.path() + "/");
688} 689}
689 690
690void EmailClient::readSettings() 691void EmailClient::readSettings()
691{ 692{
692 int y,acc_count; 693 int y,acc_count;
693 694
694 mailconf->setGroup("mailitglobal"); 695 mailconf->setGroup("mailitglobal");
695 acc_count=mailconf->readNumEntry("Accounts",0); 696 acc_count=mailconf->readNumEntry("Accounts",0);
696 697
697 for (int accountPos = 0;accountPos<acc_count ; accountPos++) 698 for (int accountPos = 0;accountPos<acc_count ; accountPos++)
698 { 699 {
699 mailconf->setGroup("Account_"+QString::number(accountPos+1)); //Account numbers start at 1 ... 700 mailconf->setGroup("Account_"+QString::number(accountPos+1)); //Account numbers start at 1 ...
700 account.accountName = mailconf->readEntry("AccName",""); 701 account.accountName = mailconf->readEntry("AccName","");
701 account.name = mailconf->readEntry("UserName",""); 702 account.name = mailconf->readEntry("UserName","");
702 account.emailAddress = mailconf->readEntry("Email",""); 703 account.emailAddress = mailconf->readEntry("Email","");
703 account.popUserName = mailconf->readEntry("POPUser",""); 704 account.popUserName = mailconf->readEntry("POPUser","");
704 account.popPasswd = mailconf->readEntryCrypt("POPPassword",""); 705 account.popPasswd = mailconf->readEntryCrypt("POPPassword","");
705 account.popServer = mailconf->readEntry("POPServer",""); 706 account.popServer = mailconf->readEntry("POPServer","");
706 account.smtpServer = mailconf->readEntry("SMTPServer",""); 707 account.smtpServer = mailconf->readEntry("SMTPServer","");
707 account.id = mailconf->readNumEntry("AccountId",0); 708 account.id = mailconf->readNumEntry("AccountId",0);
708 account.syncLimit = mailconf->readNumEntry("HeaderLimit",0); 709 account.syncLimit = mailconf->readNumEntry("HeaderLimit",0);
709 account.lastServerMailCount = 0; 710 account.lastServerMailCount = 0;
710 account.synchronize = FALSE; 711 account.synchronize = FALSE;
711 712
712 account.synchronize = (mailconf->readEntry("Synchronize","No")=="Yes"); 713 account.synchronize = (mailconf->readEntry("Synchronize","No")=="Yes");
713 if (account.synchronize) 714 if (account.synchronize)
714 { 715 {
715 mailconf->readNumEntry("LASTSERVERMAILCOUNT",0); 716 mailconf->readNumEntry("LASTSERVERMAILCOUNT",0);
716 } 717 }
717 718
718 accountList.append(&account); 719 accountList.append(&account);
719 } 720 }
720 721
721 mailconf->setGroup("mailitglobal"); 722 mailconf->setGroup("mailitglobal");
722 723
723 if ( (y = mailconf->readNumEntry("mailidcount", -1)) != -1) 724 if ( (y = mailconf->readNumEntry("mailidcount", -1)) != -1)
724 { 725 {
725 mailIdCount = y; 726 mailIdCount = y;
726 } 727 }
727 if ( (y = mailconf->readNumEntry("accountidcount", -1)) != -1) 728 if ( (y = mailconf->readNumEntry("accountidcount", -1)) != -1)
728 { 729 {
729 accountIdCount = y; 730 accountIdCount = y;
730 } 731 }
731} 732}
732 733
733void EmailClient::saveSettings() 734void EmailClient::saveSettings()
734{ 735{
735 int acc_count=0; 736 int acc_count=0;
736 MailAccount *accountPtr; 737 MailAccount *accountPtr;
737 738
738 739
739 if (!mailconf) 740 if (!mailconf)
740 { 741 {
741 qWarning("could not save settings"); 742 qWarning("could not save settings");
742 return; 743 return;
743 } 744 }
744 745
745 for (accountPtr = accountList.first(); accountPtr != 0; 746 for (accountPtr = accountList.first(); accountPtr != 0;
746 accountPtr = accountList.next()) 747 accountPtr = accountList.next())
747 { 748 {
748 mailconf->setGroup("Account_"+QString::number(++acc_count)); 749 mailconf->setGroup("Account_"+QString::number(++acc_count));
749 mailconf->writeEntry("AccName",accountPtr->accountName ); 750 mailconf->writeEntry("AccName",accountPtr->accountName );
750 mailconf->writeEntry("UserName",accountPtr->name); 751 mailconf->writeEntry("UserName",accountPtr->name);
751 mailconf->writeEntry("Email",accountPtr->emailAddress); 752 mailconf->writeEntry("Email",accountPtr->emailAddress);
752 mailconf->writeEntry("POPUser",accountPtr->popUserName); 753 mailconf->writeEntry("POPUser",accountPtr->popUserName);
753 mailconf->writeEntryCrypt("POPPassword",accountPtr->popPasswd); 754 mailconf->writeEntryCrypt("POPPassword",accountPtr->popPasswd);
754 mailconf->writeEntry("POPServer",accountPtr->popServer); 755 mailconf->writeEntry("POPServer",accountPtr->popServer);
755 mailconf->writeEntry("SMTPServer",accountPtr->smtpServer); 756 mailconf->writeEntry("SMTPServer",accountPtr->smtpServer);
756 mailconf->writeEntry("AccountId",accountPtr->id); 757 mailconf->writeEntry("AccountId",accountPtr->id);
757 if (accountPtr->synchronize) 758 if (accountPtr->synchronize)
758 { 759 {
759 mailconf->writeEntry("Synchronize","Yes"); 760 mailconf->writeEntry("Synchronize","Yes");
760 mailconf->writeEntry("HeaderLimit",accountPtr->syncLimit); 761 mailconf->writeEntry("HeaderLimit",accountPtr->syncLimit);
761 mailconf->writeEntry("LastServerMailCount",accountPtr->lastServerMailCount); 762 mailconf->writeEntry("LastServerMailCount",accountPtr->lastServerMailCount);
762 } 763 }
763 else 764 else
764 { 765 {
765 mailconf->writeEntry("Synchronize", "No"); 766 mailconf->writeEntry("Synchronize", "No");
766 } 767 }
767 } 768 }
768 769
769 mailconf->setGroup("mailitglobal"); 770 mailconf->setGroup("mailitglobal");
770 mailconf->writeEntry("Accounts",acc_count); 771 mailconf->writeEntry("Accounts",acc_count);
771 mailconf->writeEntry("mailidcount", mailIdCount); 772 mailconf->writeEntry("mailidcount", mailIdCount);
772 mailconf->writeEntry("accountidcount", accountIdCount); 773 mailconf->writeEntry("accountidcount", accountIdCount);
773} 774}
774 775
775void EmailClient::selectAccount(int id) 776void EmailClient::selectAccount(int id)
776{ 777{
777 if (accountList.count() > 0) { 778 if (accountList.count() > 0) {
778 currentAccount = accountList.at(id); 779 currentAccount = accountList.at(id);
779 emit newCaption("Mailit - " + currentAccount->accountName); 780 emit newCaption("Mailit - " + currentAccount->accountName);
780 getNewMail(); 781 getNewMail();
781 } else { 782 } else {
782 emit newCaption("Mailit ! No account defined"); 783 emit newCaption("Mailit ! No account defined");
783 } 784 }
784} 785}
785 786
786void EmailClient::editAccount(int id) 787void EmailClient::editAccount(int id)
787{ 788{
788 MailAccount *newAccount; 789 MailAccount *newAccount;
789 790
790 editAccountView = new EditAccount(this, "account", TRUE); 791 editAccountView = new EditAccount(this, "account", TRUE);
791 if (id == newAccountId) { //new account 792 if (id == newAccountId) { //new account
792 newAccount = new MailAccount; 793 newAccount = new MailAccount;
793 editAccountView->setAccount(newAccount); 794 editAccountView->setAccount(newAccount);
794 } else { 795 } else {
795 newAccount = accountList.at(id); 796 newAccount = accountList.at(id);
796 editAccountView->setAccount(newAccount, FALSE); 797 editAccountView->setAccount(newAccount, FALSE);
797 } 798 }
798 799
799 editAccountView->showMaximized(); 800 editAccountView->showMaximized();
800 editAccountView->exec(); 801 editAccountView->exec();
801 802
802 if (editAccountView->result() == QDialog::Accepted) { 803 if (editAccountView->result() == QDialog::Accepted) {
803 if (id == newAccountId) { 804 if (id == newAccountId) {
804 newAccount->id = accountIdCount; 805 newAccount->id = accountIdCount;
805 accountIdCount++; 806 accountIdCount++;
806 accountList.append(newAccount); 807 accountList.append(newAccount);
807 updateAccounts(); 808 updateAccounts();
808 } else { 809 } else {
809 updateAccounts(); 810 updateAccounts();
810 } 811 }
811 } 812 }
812 813
813 delete editAccountView; 814 delete editAccountView;
814} 815}
815 816
816void EmailClient::deleteAccount(int id) 817void EmailClient::deleteAccount(int id)
817{ 818{
818 MailAccount *newAccount; 819 MailAccount *newAccount;
819 QString message; 820 QString message;
820 821
821 newAccount = accountList.at(id); 822 newAccount = accountList.at(id);
822 message = "Delete account:\n" + newAccount->accountName; 823 message = "Delete account:\n" + newAccount->accountName;
823 switch( QMessageBox::warning( this, "Mailit", message, 824 switch( QMessageBox::warning( this, "Mailit", message,
824 "Yes", "No", 0, 0, 1 ) ) { 825 "Yes", "No", 0, 0, 1 ) ) {
825 826
826 case 0: accountList.remove(id); 827 case 0: accountList.remove(id);
827 updateAccounts(); 828 updateAccounts();
828 break; 829 break;
829 case 1: 830 case 1:
830 break; 831 break;
831 } 832 }
832} 833}
833 834
834void EmailClient::updateAccounts() 835void EmailClient::updateAccounts()
835{ 836{
836 MailAccount *accountPtr; 837 MailAccount *accountPtr;
837 838
838 //rebuild menus, clear all first 839 //rebuild menus, clear all first
839 editAccountMenu->clear(); 840 editAccountMenu->clear();
840 selectAccountMenu->clear(); 841 selectAccountMenu->clear();
841 deleteAccountMenu->clear(); 842 deleteAccountMenu->clear();
842 843
843 newAccountId = editAccountMenu->insertItem("New", this, 844 newAccountId = editAccountMenu->insertItem("New", this,
844 SLOT(editAccount(int)) ); 845 SLOT(editAccount(int)) );
845 editAccountMenu->insertSeparator(); 846 editAccountMenu->insertSeparator();
846 847
847 idCount = 0; 848 idCount = 0;
848 for (accountPtr = accountList.first(); accountPtr != 0; 849 for (accountPtr = accountList.first(); accountPtr != 0;
849 accountPtr = accountList.next()) { 850 accountPtr = accountList.next()) {
850 851
851 editAccountMenu->insertItem(accountPtr->accountName, 852 editAccountMenu->insertItem(accountPtr->accountName,
852 this, SLOT(editAccount(int)), 0, idCount); 853 this, SLOT(editAccount(int)), 0, idCount);
853 selectAccountMenu->insertItem(accountPtr->accountName, 854 selectAccountMenu->insertItem(accountPtr->accountName,
854 this, SLOT(selectAccount(int)), 0, idCount); 855 this, SLOT(selectAccount(int)), 0, idCount);
855 deleteAccountMenu->insertItem(accountPtr->accountName, 856 deleteAccountMenu->insertItem(accountPtr->accountName,
856 this, SLOT(deleteAccount(int)), 0, idCount); 857 this, SLOT(deleteAccount(int)), 0, idCount);
857 idCount++; 858 idCount++;
858 } 859 }
859} 860}
860 861
861void EmailClient::deleteMail(EmailListItem *mailItem, bool &inbox) 862void EmailClient::deleteMail(EmailListItem *mailItem, bool &inbox)
862{ 863{
863 Email *mPtr; 864 Email *mPtr;
864 Enclosure *ePtr; 865 Enclosure *ePtr;
865 866
866 if (inbox) 867 if (inbox)
867 { 868 {
868 mPtr = mailItem->getMail(); 869 mPtr = mailItem->getMail();
869 870
870 //if mail is in queue for download, remove it from 871 //if mail is in queue for download, remove it from
871 //queue if possible 872 //queue if possible
872 if ( (receiving) && (mPtr->fromAccountId == currentAccount->id) ) { 873 if ( (receiving) && (mPtr->fromAccountId == currentAccount->id) ) {
873 if ( !mPtr->downloaded ) 874 if ( !mPtr->downloaded )
874 mailDownloadList.remove(mPtr->serverId, mPtr->size); 875 mailDownloadList.remove(mPtr->serverId, mPtr->size);
875 } 876 }
876 877
877 mailconf->setGroup(mPtr->id); 878 mailconf->setGroup(mPtr->id);
878 mailconf->clearGroup(); 879 mailconf->clearGroup();
879 880
880 //delete any temporary attatchemnts storing 881 //delete any temporary attatchemnts storing
881 for ( ePtr=mPtr->files.first(); ePtr != 0; ePtr=mPtr->files.next() ) { 882 for ( ePtr=mPtr->files.first(); ePtr != 0; ePtr=mPtr->files.next() ) {
882 if (ePtr->saved) { 883 if (ePtr->saved) {
883 QFile::remove( (ePtr->path + ePtr->name) ); 884 QFile::remove( (ePtr->path + ePtr->name) );
884 } 885 }
885 } 886 }
886 inboxView->takeItem(mailItem); 887 inboxView->takeItem(mailItem);
887 } 888 }
888 else 889 else
889 { 890 {
890 outboxView->takeItem(mailItem); 891 outboxView->takeItem(mailItem);
891 } 892 }
892} 893}
893 894
894void EmailClient::setMailSize(int size) 895void EmailClient::setMailSize(int size)
895{ 896{
896 progressBar->reset(); 897 progressBar->reset();
897 progressBar->setTotalSteps(size); 898 progressBar->setTotalSteps(size);
898} 899}
899 900
900void EmailClient::setTotalSize(int size) 901void EmailClient::setTotalSize(int size)
901{ 902{
902 903
903} 904}
904 905
905void EmailClient::setDownloadedSize(int size) 906void EmailClient::setDownloadedSize(int size)
906{ 907{
907 int total = progressBar->totalSteps(); 908 int total = progressBar->totalSteps();
908 909
909 if (size < total) { 910 if (size < total) {
910 progressBar->setProgress(size); 911 progressBar->setProgress(size);
911 } else { 912 } else {
912 progressBar->setProgress(total); 913 progressBar->setProgress(total);
913 } 914 }
914} 915}
915 916
916void EmailClient::deleteItem() 917void EmailClient::deleteItem()
917{ 918{
918 bool inbox=mailboxView->currentTab()==0; 919 bool inbox=mailboxView->currentTab()==0;
919 QListView* box; 920 QListView* box;
920 921
921 EmailListItem* eli; 922 EmailListItem* eli;
922 int pos; 923 int pos;
923 924
924 inbox ? box=inboxView : box=outboxView; 925 inbox ? box=inboxView : box=outboxView;
925 926
926 eli=(EmailListItem*)box->selectedItem(); 927 eli=(EmailListItem*)box->selectedItem();
927 928
928 if (eli) 929 if (eli)
929 { 930 {
930 box->setSelected(eli->itemBelow(),true);//select the previous item 931 box->setSelected(eli->itemBelow(),true); //select the previous item
931 932
932 deleteMail(eli,(bool&)inbox); //remove mail entry 933 deleteMail(eli,(bool&)inbox); //remove mail entry
933 } 934 }
934} 935}
935 936
936void EmailClient::inboxItemPressed() 937void EmailClient::inboxItemPressed()
937{ 938{
938 //timerID=startTimer(500); 939// timerID=startTimer(500);
939} 940}
940 941
941void EmailClient::inboxItemReleased() 942void EmailClient::inboxItemReleased()
942{ 943{
943 //killTimer(timerID); 944 // killTimer(timerID);
944} 945}
945 946
946/*void EmailClient::timerEvent(QTimerEvent *e) 947/*void EmailClient::timerEvent(QTimerEvent *e)
947{ 948{
948 /*killTimer(timerID); 949 /*killTimer(timerID);
949 950
950 951
951 QPopupMenu *action = new QPopupMenu(this); 952 QPopupMenu *action = new QPopupMenu(this);
952 953
953 int reply=0; 954 int reply=0;
954 955
955 action->insertItem(tr( "Reply To" ),this,SLOT(reply())); 956 action->insertItem(tr( "Reply To" ),this,SLOT(reply()));
956 action->insertItem( tr( "Reply All" ),this,SLOT(replyAll())); 957 action->insertItem( tr( "Reply All" ),this,SLOT(replyAll()));
957 action->insertItem( tr( "Forward" ), this,SLOT(forward())); 958 action->insertItem( tr( "Forward" ), this,SLOT(forward()));
958 action->insertItem( tr( "Remove Mail" ), this,SLOT(remove())); 959 action->insertItem( tr( "Remove Mail" ), this,SLOT(remove()));
959 960
960 action->exec(QCursor::pos()); 961 action->exec(QCursor::pos());
961 962
962 if (action) delete action; 963 if (action) delete action;
963 964
964}*/ 965}*/
965 966
966Email* EmailClient::getCurrentMail() 967Email* EmailClient::getCurrentMail()
967{ 968{
968 EmailListItem *eli=(EmailListItem* ) (inboxView->selectedItem()); 969 EmailListItem *eli=(EmailListItem* ) (inboxView->selectedItem());
969 if (eli!=NULL) 970 if (eli!=NULL)
970 return eli->getMail(); 971 return eli->getMail();
971 else 972 else
972 return NULL; 973 return NULL;
973} 974}
974 975
975void EmailClient::download(Email* mail) 976void EmailClient::download(Email* mail)
976{ 977{
977 MailAccount* acc=0; 978 MailAccount* acc=0;
978 979
979 tempMailDownloadList.clear(); 980 tempMailDownloadList.clear();
980 tempMailDownloadList.sizeInsert(mail->serverId, mail->size); 981 tempMailDownloadList.sizeInsert(mail->serverId, mail->size);
981 982
982 acc=accountList.at(mail->fromAccountId-1); 983 acc=accountList.at(mail->fromAccountId-1);
983 if (acc) 984 if (acc)
984 { 985 {
985 emailHandler->setAccount(*acc); 986 emailHandler->setAccount(*acc);
986 emailHandler->getMailByList(&tempMailDownloadList); 987 emailHandler->getMailByList(&tempMailDownloadList);
987 } 988 }
988 else 989 else
989 QMessageBox::warning(qApp->activeWindow(), 990 QMessageBox::warning(qApp->activeWindow(),
990 tr("No account associated"), tr("There is no active account \nassociated to this mail\n it can not be downloaded"), "Abort\n"); 991 tr("No account associated"), tr("There is no active account \nassociated to this mail\n it can not be downloaded"), "Abort\n");
991} 992}
992 993
993void EmailClient::receive(const QCString& msg, const QByteArray& data) 994void EmailClient::receive(const QCString& msg, const QByteArray& data)
994{ 995{
995 /*if (msg=="getMail()") 996 /*if (msg=="getMail()")
996 { 997 {
997 /*QDialog qd(qApp->activeWindow(),"Getting mail",true); 998 /*QDialog qd(qApp->activeWindow(),"Getting mail",true);
998 QVBoxLayout *vbProg = new QVBoxLayout( &qd ); 999 QVBoxLayout *vbProg = new QVBoxLayout( &qd );
999 1000
1000 initStatusBar(&qd); 1001 initStatusBar(&qd);
1001 1002
1002 if (statusBar==0) 1003 if (statusBar==0)
1003 { 1004 {
1004 qDebug("No Bar ..."); 1005 qDebug("No Bar ...");
1005 //statusBar=new ProgressBar(&qd); 1006 //statusBar=new ProgressBar(&qd);
1006 } 1007 }
1007 statusBar->show(); 1008 statusBar->show();
1008 vbProg->addWidget(statusBar); 1009 vbProg->addWidget(statusBar);
1009 qd.showMaximized(); 1010 qd.showMaximized();
1010 qd.show(); 1011 qd.show();
1011 emit getAllNewMail(); 1012 emit getAllNewMail();
1012 //qd.exec(); 1013 //qd.exec();
1013 } 1014 }
1014 else if (msg=="compose()") 1015 else if (msg=="compose()")
1015 { 1016 {
1016 QDialog qd(qApp->activeWindow(),"Getting mail",true); 1017 QDialog qd(qApp->activeWindow(),"Getting mail",true);
1017 1018
1018 WriteMail wm(&qd,"write new mail"); 1019 WriteMail wm(&qd,"write new mail");
1019 QVBoxLayout vbProg( &qd ); 1020 QVBoxLayout vbProg( &qd );
1020 1021
1021 wm.showMaximized(); 1022 wm.showMaximized();
1022 vbProg.addWidget(&wm); 1023 vbProg.addWidget(&wm);
1023 1024
1024 qd.showMaximized(); 1025 qd.showMaximized();
1025 1026
1026 emit composeRequested(); 1027 emit composeRequested();
1027 qd.exec(); 1028 qd.exec();
1028 1029
1029 QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n"); 1030 QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n");
1030 } 1031 }
1031 1032
1032 else if (msg=="dialog()") 1033 else if (msg=="dialog()")
1033 { 1034 {
1034 QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n"); 1035 QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n");
1035 }*/ 1036 }*/
1036} 1037}
diff --git a/noncore/net/mailit/emailclient.h b/noncore/net/mailit/emailclient.h
index 994fec5..c98cfce 100644
--- a/noncore/net/mailit/emailclient.h
+++ b/noncore/net/mailit/emailclient.h
@@ -1,181 +1,181 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef EMAILCLIENT_H 20#ifndef EMAILCLIENT_H
21#define EMAILCLIENT_H 21#define EMAILCLIENT_H
22 22
23#include <qlist.h> 23#include <qlist.h>
24#include <qcstring.h> 24#include <qcstring.h>
25#include <qmainwindow.h> 25#include <qmainwindow.h>
26 26
27#include <qtoolbar.h> 27#include <qtoolbar.h>
28#include <qcheckbox.h> 28#include <qcheckbox.h>
29#include <qlabel.h> 29#include <qlabel.h>
30#include <qlineedit.h> 30#include <qlineedit.h>
31#include <qlistview.h> 31#include <qlistview.h>
32#include <qaction.h> 32#include <qaction.h>
33#include <qlayout.h> 33#include <qlayout.h>
34#include <qtooltip.h> 34#include <qtooltip.h>
35#include <qtoolbutton.h> 35#include <qtoolbutton.h>
36#include <qimage.h> 36#include <qimage.h>
37#include <qpixmap.h> 37#include <qpixmap.h>
38#include <qstringlist.h> 38#include <qstringlist.h>
39#include <qprogressbar.h> 39#include <qprogressbar.h>
40#include <qstatusbar.h> 40#include <qstatusbar.h>
41#include <qdir.h> 41#include <qdir.h>
42#include <stdlib.h> 42#include <stdlib.h>
43#include <opie/otabwidget.h> 43#include <opie/otabwidget.h>
44#include <qpe/qcopenvelope_qws.h> 44#include <qpe/qcopenvelope_qws.h>
45#include <qtimer.h> 45#include <qtimer.h>
46 46
47#include "emailhandler.h" 47#include "emailhandler.h"
48#include "emaillistitem.h" 48#include "emaillistitem.h"
49#include "textparser.h" 49#include "textparser.h"
50#include "editaccount.h" 50#include "editaccount.h"
51#include "maillist.h" 51#include "maillist.h"
52#include "addresslist.h" 52#include "addresslist.h"
53 53
54#include <qpe/config.h> 54#include <qpe/config.h>
55 55
56class AccountList : public QList<MailAccount> 56class AccountList : public QList<MailAccount>
57{ 57{
58public: 58public:
59 Item newItem(Item d); 59 Item newItem(Item d);
60private: 60private:
61 MailAccount* dupl(MailAccount *in); 61 MailAccount* dupl(MailAccount *in);
62 MailAccount *ac; 62 MailAccount *ac;
63}; 63};
64 64
65//class EmailClient : public EmailClientBase 65//class EmailClient : public EmailClientBase
66class EmailClient : public QMainWindow 66class EmailClient : public QMainWindow
67{ 67{
68 Q_OBJECT 68 Q_OBJECT
69 69
70public: 70public:
71 EmailClient( QWidget* parent, const char* name, WFlags fl = 0 ); 71 EmailClient( QWidget* parent, const char* name, WFlags fl = 0 );
72 ~EmailClient(); 72 ~EmailClient();
73 AddressList* getAdrListRef(); 73 AddressList* getAdrListRef();
74 74
75protected: 75protected:
76 //void timerEvent(QTimerEvent*); 76 //void timerEvent(QTimerEvent*);
77 77
78signals: 78signals:
79 void composeRequested(); 79 void composeRequested();
80 void viewEmail(QListView *, Email *); 80 void viewEmail(QListView *, Email *);
81 void mailUpdated(Email *); 81 void mailUpdated(Email *);
82 void newCaption(const QString &); 82 void newCaption(const QString &);
83 void replyRequested(Email&, bool&); 83 void replyRequested(Email&, bool&);
84 void forwardRequested(Email&); 84 void forwardRequested(Email&);
85 void removeItem(EmailListItem*, bool&); 85 void removeItem(EmailListItem*, bool&);
86 /*void reply(Email&); 86 /*void reply(Email&);
87 void replyAll(Email&); 87 void replyAll(Email&);
88 void remove(Email&); 88 void remove(Email&);
89 void forward(Email&);*/ 89 void forward(Email&);*/
90 90
91public slots: 91public slots:
92 void compose(); 92 void compose();
93 void cancel(); 93 void cancel();
94 void enqueMail(const Email &mail); 94 void enqueMail(const Email &mail);
95 void setMailAccount(); 95 void setMailAccount();
96 void sendQuedMail(); 96 void sendQuedMail();
97 void mailSent(); 97 void mailSent();
98 void deleteItem(); 98 void deleteItem();
99 void getNewMail(); 99 void getNewMail();
100 void getAllNewMail(); 100 void getAllNewMail();
101 void smtpError(int code); 101 void smtpError(int code);
102 void popError(int code); 102 void popError(int code);
103 void inboxItemSelected(); 103 void inboxItemSelected();
104 void outboxItemSelected(); 104 void outboxItemSelected();
105 void inboxItemPressed(); 105 void inboxItemPressed();
106 void inboxItemReleased(); 106 void inboxItemReleased();
107 void mailArrived(const Email &mail, bool fromDisk); 107 void mailArrived(const Email &mail, bool fromDisk);
108 void allMailArrived(int); 108 void allMailArrived(int);
109 void saveMail(QString fileName, QListView *view); 109 void saveMail(const QString &fileName, QListView *view);
110 void selectAccount(int); 110 void selectAccount(int);
111 void editAccount(int); 111 void editAccount(int);
112 void updateAccounts(); 112 void updateAccounts();
113 void deleteAccount(int); 113 void deleteAccount(int);
114 void deleteMail(EmailListItem *mailItem, bool &inbox); 114 void deleteMail(EmailListItem *mailItem, bool &inbox);
115 void setTotalSize(int); 115 void setTotalSize(int);
116 void setMailSize(int); 116 void setMailSize(int);
117 void setDownloadedSize(int); 117 void setDownloadedSize(int);
118 void moveMailFront(Email *mailPtr); 118 void moveMailFront(Email *mailPtr);
119 void download(Email*); 119 void download(Email*);
120/* void reply(); 120/* void reply();
121 void replyAll(); 121 void replyAll();
122 void forward(); 122 void forward();
123 void remove();*/ 123 void remove();*/
124 124
125private slots: 125private slots:
126 void receive(const QCString&, const QByteArray&); 126 void receive(const QCString&, const QByteArray&);
127 127
128private: 128private:
129 void init(); 129 void init();
130 void initStatusBar(QWidget*); 130 void initStatusBar(QWidget*);
131 void readMail(); 131 void readMail();
132 QString getPath(bool enclosurePath); 132 QString getPath(bool enclosurePath);
133 void readSettings(); 133 void readSettings();
134 void saveSettings(); 134 void saveSettings();
135 Email* getCurrentMail(); 135 Email* getCurrentMail();
136 int timerID; 136 int timerID;
137 Config *mailconf; 137 Config *mailconf;
138 int newAccountId, idCount, mailIdCount; 138 int newAccountId, idCount, mailIdCount;
139 int accountIdCount; 139 int accountIdCount;
140 AccountList accountList; 140 AccountList accountList;
141 AddressList *addressList; 141 AddressList *addressList;
142 142
143 EditAccount *editAccountView; 143 EditAccount *editAccountView;
144 EmailListItem *item; 144 EmailListItem *item;
145 EmailHandler *emailHandler; 145 EmailHandler *emailHandler;
146 QList<Email> quedMessages; 146 QList<Email> quedMessages;
147 MailList mailDownloadList; 147 MailList mailDownloadList;
148 MailList tempMailDownloadList; 148 MailList tempMailDownloadList;
149 149
150 bool sending, receiving, previewingMail, allAccounts; 150 bool sending, receiving, previewingMail, allAccounts;
151 QString lineShift; 151 QString lineShift;
152 MailAccount account, *currentAccount; 152 MailAccount account, *currentAccount;
153 153
154 QCopChannel* channel; 154 QCopChannel* channel;
155 155
156 QToolBar *bar; 156 QToolBar *bar;
157 QProgressBar *progressBar; 157 QProgressBar *progressBar;
158 QStatusBar *statusBar; 158 QStatusBar *statusBar;
159 QLabel *status1Label, *status2Label; 159 QLabel *status1Label, *status2Label;
160 QToolButton *getMailButton; 160 QToolButton *getMailButton;
161 QAction *sendMailButton; 161 QAction *sendMailButton;
162 QAction *composeButton; 162 QAction *composeButton;
163 QAction *cancelButton; 163 QAction *cancelButton;
164 QAction *deleteButton; 164 QAction *deleteButton;
165 //QToolButton *setAccountButton; 165 //QToolButton *setAccountButton;
166 166
167 QMenuBar *mb; 167 QMenuBar *mb;
168 QPopupMenu *selectAccountMenu; 168 QPopupMenu *selectAccountMenu;
169 QPopupMenu *editAccountMenu; 169 QPopupMenu *editAccountMenu;
170 QPopupMenu *deleteAccountMenu; 170 QPopupMenu *deleteAccountMenu;
171 QPopupMenu *setAccountMenu; 171 QPopupMenu *setAccountMenu;
172 172
173 OTabWidget* mailboxView; 173 OTabWidget* mailboxView;
174 QListView* inboxView; 174 QListView* inboxView;
175 QListView* outboxView; 175 QListView* outboxView;
176 176
177 QGridLayout* grid_2; 177 QGridLayout* grid_2;
178 QGridLayout* grid_3; 178 QGridLayout* grid_3;
179}; 179};
180 180
181#endif // EMAILCLIENT_H 181#endif // EMAILCLIENT_H
diff --git a/noncore/net/mailit/emailhandler.cpp b/noncore/net/mailit/emailhandler.cpp
index 62fa64f..59ccd90 100644
--- a/noncore/net/mailit/emailhandler.cpp
+++ b/noncore/net/mailit/emailhandler.cpp
@@ -1,621 +1,621 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include <qfileinfo.h> 20#include <qfileinfo.h>
21#include <stdlib.h> 21#include <stdlib.h>
22#include <qapplication.h> 22#include <qapplication.h>
23#include <qmessagebox.h> 23#include <qmessagebox.h>
24#include <qcstring.h> 24#include <qcstring.h>
25#include "emailhandler.h" 25#include "emailhandler.h"
26#include <qpe/applnk.h> 26#include <qpe/applnk.h>
27#include <qpe/filemanager.h> 27#include <qpe/filemanager.h>
28 28
29QCollection::Item EnclosureList::newItem(QCollection::Item d) 29QCollection::Item EnclosureList::newItem(QCollection::Item d)
30{ 30{
31 return dupl( (Enclosure *) d); 31 return dupl( (Enclosure *) d);
32} 32}
33 33
34Enclosure* EnclosureList::dupl(Enclosure *in) 34Enclosure* EnclosureList::dupl(Enclosure *in)
35{ 35{
36 ac = new Enclosure(*in); 36 ac = new Enclosure(*in);
37 return ac; 37 return ac;
38} 38}
39 39
40EmailHandler::EmailHandler() 40EmailHandler::EmailHandler()
41{ 41{
42 qDebug("EMailHandler::EmailHandler"); 42 qDebug("EMailHandler::EmailHandler");
43 43
44 smtpClient = new SmtpClient(); 44 smtpClient = new SmtpClient();
45 popClient = new PopClient(); 45 popClient = new PopClient();
46 46
47 connect(smtpClient, SIGNAL(errorOccurred(int)), this, 47 connect(smtpClient, SIGNAL(errorOccurred(int)), this,
48 SIGNAL(smtpError(int)) ); 48 SIGNAL(smtpError(int)) );
49 connect(smtpClient, SIGNAL(mailSent()), this, SIGNAL(mailSent()) ); 49 connect(smtpClient, SIGNAL(mailSent()), this, SIGNAL(mailSent()) );
50 connect(smtpClient, SIGNAL(updateStatus(const QString &)), this, 50 connect(smtpClient, SIGNAL(updateStatus(const QString &)), this,
51 SIGNAL(updateSmtpStatus(const QString &)) ); 51 SIGNAL(updateSmtpStatus(const QString &)) );
52 52
53 connect(popClient, SIGNAL(errorOccurred(int)), this, 53 connect(popClient, SIGNAL(errorOccurred(int)), this,
54 SIGNAL(popError(int)) ); 54 SIGNAL(popError(int)) );
55 connect(popClient, SIGNAL(newMessage(const QString &, int, uint, bool)), 55 connect(popClient, SIGNAL(newMessage(const QString &, int, uint, bool)),
56 this, SLOT(messageArrived(const QString &, int, uint, bool)) ); 56 this, SLOT(messageArrived(const QString &, int, uint, bool)) );
57 connect(popClient, SIGNAL(updateStatus(const QString &)), this, 57 connect(popClient, SIGNAL(updateStatus(const QString &)), this,
58 SIGNAL(updatePopStatus(const QString &)) ); 58 SIGNAL(updatePopStatus(const QString &)) );
59 connect(popClient, SIGNAL(mailTransfered(int)), this, 59 connect(popClient, SIGNAL(mailTransfered(int)), this,
60 SIGNAL(mailTransfered(int)) ); 60 SIGNAL(mailTransfered(int)) );
61 61
62 62
63 //relaying size information 63 //relaying size information
64 connect(popClient, SIGNAL(currentMailSize(int)), 64 connect(popClient, SIGNAL(currentMailSize(int)),
65 this, SIGNAL(currentMailSize(int)) ); 65 this, SIGNAL(currentMailSize(int)) );
66 connect(popClient, SIGNAL(downloadedSize(int)), 66 connect(popClient, SIGNAL(downloadedSize(int)),
67 this, SIGNAL(downloadedSize(int)) ); 67 this, SIGNAL(downloadedSize(int)) );
68} 68}
69 69
70void EmailHandler::sendMail(QList<Email> *mailList) 70void EmailHandler::sendMail(QList<Email> *mailList)
71{ 71{
72 Email *currentMail; 72 Email *currentMail;
73 QString temp; 73 QString temp;
74 QString userName = mailAccount.name; 74 QString userName = mailAccount.name;
75 userName += " <" + mailAccount.emailAddress + ">"; 75 userName += " <" + mailAccount.emailAddress + ">";
76 76
77 for (currentMail = mailList->first(); currentMail != 0; 77 for (currentMail = mailList->first(); currentMail != 0;
78 currentMail = mailList->next()) { 78 currentMail = mailList->next()) {
79 79
80 if (encodeMime(currentMail) == 0) { 80 if (encodeMime(currentMail) == 0) {
81 smtpClient->addMail(userName, currentMail->subject, 81 smtpClient->addMail(userName, currentMail->subject,
82 currentMail->recipients, currentMail->rawMail); 82 currentMail->recipients, currentMail->rawMail);
83 } else { //error 83 } else { //error
84 temp = tr("Could not locate all files in \nmail with subject: ") + 84 temp = tr("Could not locate all files in \nmail with subject: ") +
85 currentMail->subject; 85 currentMail->subject;
86 temp += tr("\nMail has NOT been sent"); 86 temp += tr("\nMail has NOT been sent");
87 QMessageBox::warning(qApp->activeWindow(), tr("Attachment error"), temp, tr("OK\n")); 87 QMessageBox::warning(qApp->activeWindow(), tr("Attachment error"), temp, tr("OK\n"));
88 88
89 } 89 }
90 } 90 }
91 smtpClient->newConnection(mailAccount.smtpServer, 25); 91 smtpClient->newConnection(mailAccount.smtpServer, 25);
92} 92}
93 93
94void EmailHandler::setAccount(MailAccount account) 94void EmailHandler::setAccount(MailAccount account)
95{ 95{
96 mailAccount = account; 96 mailAccount = account;
97} 97}
98 98
99void EmailHandler::getMail() 99void EmailHandler::getMail()
100{ 100{
101 popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd); 101 popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd);
102 if (mailAccount.synchronize) { 102 if (mailAccount.synchronize) {
103 popClient->setSynchronize(mailAccount.lastServerMailCount); 103 popClient->setSynchronize(mailAccount.lastServerMailCount);
104 } else { 104 } else {
105 popClient->removeSynchronize(); 105 popClient->removeSynchronize();
106 } 106 }
107 107
108 headers = FALSE; 108 headers = FALSE;
109 //popClient->headersOnly(headers, 0); 109 //popClient->headersOnly(headers, 0);
110 popClient->newConnection(mailAccount.popServer, 110); 110 popClient->newConnection(mailAccount.popServer, 110);
111} 111}
112 112
113void EmailHandler::getMailHeaders() 113void EmailHandler::getMailHeaders()
114{ 114{
115 popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd); 115 popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd);
116 mailAccount.synchronize ? popClient->setSynchronize(mailAccount.lastServerMailCount): popClient->removeSynchronize(); 116 mailAccount.synchronize ? popClient->setSynchronize(mailAccount.lastServerMailCount): popClient->removeSynchronize();
117 117
118 headers = TRUE; 118 headers = TRUE;
119 popClient->headersOnly(headers, mailAccount.syncLimit); //less than requested syncLimit, download all 119 popClient->headersOnly(headers, mailAccount.syncLimit); //less than requested syncLimit, download all
120 qDebug("Initiating connection"); 120 qDebug("Initiating connection");
121 popClient->newConnection(mailAccount.popServer, 110); 121 popClient->newConnection(mailAccount.popServer, 110);
122} 122}
123 123
124void EmailHandler::getMailByList(MailList *mailList) 124void EmailHandler::getMailByList(MailList *mailList)
125{ 125{
126 if (mailList->count() == 0) { //should not occur though 126 if (mailList->count() == 0) { //should not occur though
127 emit mailTransfered(0); 127 emit mailTransfered(0);
128 return; 128 return;
129 } 129 }
130 130
131 headers = FALSE; 131 headers = FALSE;
132 popClient->headersOnly(FALSE, 0); 132 popClient->headersOnly(FALSE, 0);
133 133
134 popClient->setAccount(mailAccount.popUserName,mailAccount.popPasswd); 134 popClient->setAccount(mailAccount.popUserName,mailAccount.popPasswd);
135 popClient->setSelectedMails(mailList); 135 popClient->setSelectedMails(mailList);
136 popClient->newConnection(mailAccount.popServer, 110); 136 popClient->newConnection(mailAccount.popServer, 110);
137 } 137 }
138 138
139void EmailHandler::messageArrived(const QString &message, int id, uint size, bool complete) 139void EmailHandler::messageArrived(const QString &message, int id, uint size, bool complete)
140{ 140{
141 Email mail; 141 Email mail;
142 142
143 mail.rawMail = message; 143 mail.rawMail = message;
144 mail.serverId = id; 144 mail.serverId = id;
145 mail.size = size; 145 mail.size = size;
146 mail.downloaded = complete; 146 mail.downloaded = complete;
147 147
148 emit mailArrived(mail, FALSE); 148 emit mailArrived(mail, FALSE);
149} 149}
150 150
151bool EmailHandler::parse(QString in, QString lineShift, Email *mail) 151bool EmailHandler::parse(const QString &in, const QString &lineShift, Email *mail)
152{ 152{
153 QString temp, boundary; 153 QString temp, boundary;
154 int pos; 154 int pos;
155 QString delimiter, header, body, mimeHeader, mimeBody; 155 QString delimiter, header, body, mimeHeader, mimeBody;
156 QString content, contentType, contentAttribute, id, encoding; 156 QString content, contentType, contentAttribute, id, encoding;
157 QString fileName, storedName; 157 QString fileName, storedName;
158 int enclosureId = 0; 158 int enclosureId = 0;
159 159
160 mail->rawMail = in; 160 mail->rawMail = in;
161 mail->received = TRUE; 161 mail->received = TRUE;
162 mail->files.setAutoDelete(TRUE); 162 mail->files.setAutoDelete(TRUE);
163 163
164 temp = lineShift + "." + lineShift; 164 temp = lineShift + "." + lineShift;
165 165
166 if (in.right(temp.length()) != temp) { 166 if (in.right(temp.length()) != temp) {
167 mail->rawMail += temp; 167 mail->rawMail += temp;
168 } 168 }
169 169
170 170
171 delimiter = lineShift + lineShift; // "\n\n" or "\r\n\r\n" 171 delimiter = lineShift + lineShift; // "\n\n" or "\r\n\r\n"
172 pos = in.find(delimiter, 0, FALSE); 172 pos = in.find(delimiter, 0, FALSE);
173 header = in.left(pos); 173 header = in.left(pos);
174 body = in.right(in.length() - pos - delimiter.length()); 174 body = in.right(in.length() - pos - delimiter.length());
175 if ((body.at(body.length()-2) == '.') && (body.at(body.length()-3) == '\n')) 175 if ((body.at(body.length()-2) == '.') && (body.at(body.length()-3) == '\n'))
176 body.truncate(body.length()-2); 176 body.truncate(body.length()-2);
177 177
178 TextParser p(header, lineShift); 178 TextParser p(header, lineShift);
179 179
180 if ((pos = p.find("FROM",':', 0, TRUE)) != -1) { 180 if ((pos = p.find("FROM",':', 0, TRUE)) != -1) {
181 pos++; 181 pos++;
182 if (p.separatorAt(pos) == ' ') { 182 if (p.separatorAt(pos) == ' ') {
183 mail->from = p.getString(&pos, '<', false); 183 mail->from = p.getString(&pos, '<', false);
184 mail->from = mail->from.stripWhiteSpace(); 184 mail->from = mail->from.stripWhiteSpace();
185 if ( (mail->from.length() > 2) && (mail->from[0] == '"') ) { 185 if ( (mail->from.length() > 2) && (mail->from[0] == '"') ) {
186 mail->from = mail->from.left(mail->from.length() - 1); 186 mail->from = mail->from.left(mail->from.length() - 1);
187 mail->from = mail->from.right(mail->from.length() - 1); 187 mail->from = mail->from.right(mail->from.length() - 1);
188 } 188 }
189 pos++; 189 pos++;
190 mail->fromMail = p.getString(&pos, '>', false); 190 mail->fromMail = p.getString(&pos, '>', false);
191 } else { 191 } else {
192 if (p.separatorAt(pos) == '<') //No name.. nasty 192 if (p.separatorAt(pos) == '<') //No name.. nasty
193 pos++; 193 pos++;
194 //pos++; 194 //pos++;
195 mail->fromMail = p.getString(&pos, 'z', TRUE); 195 mail->fromMail = p.getString(&pos, 'z', TRUE);
196 if (mail->fromMail.at(mail->fromMail.length()-1) == '>') 196 if (mail->fromMail.at(mail->fromMail.length()-1) == '>')
197 mail->fromMail.truncate(mail->fromMail.length() - 1); 197 mail->fromMail.truncate(mail->fromMail.length() - 1);
198 mail->from=mail->fromMail; 198 mail->from=mail->fromMail;
199 } 199 }
200 } 200 }
201 201
202 pos=0; 202 pos=0;
203 203
204 //Search for To: after the FROM: attribute to prevent hitting the Delivered-To: 204 //Search for To: after the FROM: attribute to prevent hitting the Delivered-To:
205 while((pos = p.find("TO",':', pos+1, TRUE))!=-1) 205 while((pos = p.find("TO",':', pos+1, TRUE))!=-1)
206 { 206 {
207 QString rec; 207 QString rec;
208 208
209 if (p.separatorAt(pos-1)!='-')//The - separator means that this is a Delivered-To: or Reply-To: 209 if (p.separatorAt(pos-1)!='-') //The - separator means that this is a Delivered-To: or Reply-To:
210 { 210 {
211 pos++; 211 pos++;
212 mail->recipients.append(p.getString(&pos, '\r', TRUE)); 212 mail->recipients.append(p.getString(&pos, '\r', TRUE));
213 } 213 }
214 } 214 }
215 // 215 //
216 //if (pos==-1) mail->recipients.append (tr("undisclosed recipients") ); 216 //if (pos==-1) mail->recipients.append (tr("undisclosed recipients") );
217 217
218 if ((pos = p.find("CC",':', 0, TRUE)) != -1) 218 if ((pos = p.find("CC",':', 0, TRUE)) != -1)
219 { 219 {
220 pos++; 220 pos++;
221 mail->carbonCopies.append (p.getString(&pos, 'z', TRUE) ); 221 mail->carbonCopies.append (p.getString(&pos, 'z', TRUE) );
222 } 222 }
223 223
224 if ((pos = p.find("SUBJECT",':', 0, TRUE)) != -1) { 224 if ((pos = p.find("SUBJECT",':', 0, TRUE)) != -1) {
225 pos++; 225 pos++;
226 mail->subject = p.getString(&pos, 'z', TRUE); 226 mail->subject = p.getString(&pos, 'z', TRUE);
227 } 227 }
228 228
229 if ((pos = p.find("DATE",':', 0, TRUE)) != -1) { 229 if ((pos = p.find("DATE",':', 0, TRUE)) != -1) {
230 pos++; 230 pos++;
231 mail->date = p.getString(&pos, 'z', TRUE); 231 mail->date = p.getString(&pos, 'z', TRUE);
232 } 232 }
233 233
234 234
235 235
236 if ((pos = p.find("MESSAGE",'-', 0, TRUE)) != -1) { 236 if ((pos = p.find("MESSAGE",'-', 0, TRUE)) != -1) {
237 pos++; 237 pos++;
238 if ( (p.wordAt(pos).upper() == "ID") && 238 if ( (p.wordAt(pos).upper() == "ID") &&
239 (p.separatorAt(pos) == ':') ) { 239 (p.separatorAt(pos) == ':') ) {
240 240
241 id = p.getString(&pos, 'z', TRUE); 241 id = p.getString(&pos, 'z', TRUE);
242 mail->id = id; 242 mail->id = id;
243 } 243 }
244 } 244 }
245 245
246 pos = 0; 246 pos = 0;
247 while ( ((pos = p.find("MIME",'-', pos, TRUE)) != -1) ) { 247 while ( ((pos = p.find("MIME",'-', pos, TRUE)) != -1) ) {
248 pos++; 248 pos++;
249 if ( (p.wordAt(pos).upper() == "VERSION") && 249 if ( (p.wordAt(pos).upper() == "VERSION") &&
250 (p.separatorAt(pos) == ':') ) { 250 (p.separatorAt(pos) == ':') ) {
251 pos++; 251 pos++;
252 if (p.getString(&pos, 'z', true) == "1.0") { 252 if (p.getString(&pos, 'z', true) == "1.0") {
253 mail->mimeType = 1; 253 mail->mimeType = 1;
254 } 254 }
255 } 255 }
256 } 256 }
257 257
258 if (mail->mimeType == 1) { 258 if (mail->mimeType == 1) {
259 boundary = ""; 259 boundary = "";
260 if ((pos = p.find("BOUNDARY", '=', 0, TRUE)) != -1) { 260 if ((pos = p.find("BOUNDARY", '=', 0, TRUE)) != -1) {
261 pos++; 261 pos++;
262 boundary = p.getString(&pos, 'z', true); 262 boundary = p.getString(&pos, 'z', true);
263 if (boundary[0] == '"') { 263 if (boundary[0] == '"') {
264 boundary = boundary.left(boundary.length() - 1); //strip " 264 boundary = boundary.left(boundary.length() - 1); //strip "
265 boundary = boundary.right(boundary.length() - 1); //strip " 265 boundary = boundary.right(boundary.length() - 1); //strip "
266 } 266 }
267 boundary = "--" + boundary; //create boundary field 267 boundary = "--" + boundary; //create boundary field
268 } 268 }
269 269
270 if (boundary == "") { //fooled by Mime-Version 270 if (boundary == "") { //fooled by Mime-Version
271 mail->body = body; 271 mail->body = body;
272 mail->bodyPlain = body; 272 mail->bodyPlain = body;
273 return mail; 273 return mail;
274 } 274 }
275 275
276 while (body.length() > 0) { 276 while (body.length() > 0) {
277 pos = body.find(boundary, 0, FALSE); 277 pos = body.find(boundary, 0, FALSE);
278 pos = body.find(delimiter, pos, FALSE); 278 pos = body.find(delimiter, pos, FALSE);
279 mimeHeader = body.left(pos); 279 mimeHeader = body.left(pos);
280 mimeBody = body.right(body.length() - pos - delimiter.length()); 280 mimeBody = body.right(body.length() - pos - delimiter.length());
281 TextParser bp(mimeHeader, lineShift); 281 TextParser bp(mimeHeader, lineShift);
282 282
283 contentType = ""; 283 contentType = "";
284 contentAttribute = ""; 284 contentAttribute = "";
285 fileName = ""; 285 fileName = "";
286 if ((pos = bp.find("CONTENT",'-', 0, TRUE)) != -1) { 286 if ((pos = bp.find("CONTENT",'-', 0, TRUE)) != -1) {
287 pos++; 287 pos++;
288 if ( (bp.wordAt(pos).upper() == "TYPE") && 288 if ( (bp.wordAt(pos).upper() == "TYPE") &&
289 (bp.separatorAt(pos) == ':') ) { 289 (bp.separatorAt(pos) == ':') ) {
290 contentType = bp.nextWord().upper(); 290 contentType = bp.nextWord().upper();
291 if (bp.nextSeparator() == '/') 291 if (bp.nextSeparator() == '/')
292 contentAttribute = bp.nextWord().upper(); 292 contentAttribute = bp.nextWord().upper();
293 content = contentType + "/" + contentAttribute; 293 content = contentType + "/" + contentAttribute;
294 } 294 }
295 if ((pos = bp.find("ENCODING",':', 0, TRUE)) != -1) { 295 if ((pos = bp.find("ENCODING",':', 0, TRUE)) != -1) {
296 pos++; 296 pos++;
297 encoding = bp.getString(&pos, 'z', TRUE); 297 encoding = bp.getString(&pos, 'z', TRUE);
298 } 298 }
299 299
300 if ( (pos = bp.find("FILENAME",'=', 0, TRUE)) != -1) { 300 if ( (pos = bp.find("FILENAME",'=', 0, TRUE)) != -1) {
301 pos++; 301 pos++;
302 fileName = bp.getString(&pos, 'z', TRUE); 302 fileName = bp.getString(&pos, 'z', TRUE);
303 fileName = fileName.right(fileName.length() - 1); 303 fileName = fileName.right(fileName.length() - 1);
304 fileName = fileName.left(fileName.length() - 1); 304 fileName = fileName.left(fileName.length() - 1);
305 } 305 }
306 306
307 } 307 }
308 pos = mimeBody.find(boundary, 0, FALSE); 308 pos = mimeBody.find(boundary, 0, FALSE);
309 if (pos == -1) //should not occur, malformed mail 309 if (pos == -1) //should not occur, malformed mail
310 pos = mimeBody.length(); 310 pos = mimeBody.length();
311 body = mimeBody.right(mimeBody.length() - pos); 311 body = mimeBody.right(mimeBody.length() - pos);
312 mimeBody = mimeBody.left(pos); 312 mimeBody = mimeBody.left(pos);
313 313
314 if (fileName != "") { //attatchments of some type, audio, image etc. 314 if (fileName != "") { //attatchments of some type, audio, image etc.
315 315
316 Enclosure e; 316 Enclosure e;
317 e.id = enclosureId; 317 e.id = enclosureId;
318 e.originalName = fileName; 318 e.originalName = fileName;
319 e.contentType = contentType; 319 e.contentType = contentType;
320 e.contentAttribute = contentAttribute; 320 e.contentAttribute = contentAttribute;
321 e.encoding = encoding; 321 e.encoding = encoding;
322 e.body = mimeBody; 322 e.body = mimeBody;
323 e.saved = FALSE; 323 e.saved = FALSE;
324 mail->addEnclosure(&e); 324 mail->addEnclosure(&e);
325 enclosureId++; 325 enclosureId++;
326 326
327 } else if (contentType == "TEXT") { 327 } else if (contentType == "TEXT") {
328 if (contentAttribute == "PLAIN") { 328 if (contentAttribute == "PLAIN") {
329 mail->body = mimeBody; 329 mail->body = mimeBody;
330 mail->bodyPlain = mimeBody; 330 mail->bodyPlain = mimeBody;
331 } 331 }
332 if (contentAttribute == "HTML") { 332 if (contentAttribute == "HTML") {
333 mail->body = mimeBody; 333 mail->body = mimeBody;
334 } 334 }
335 } 335 }
336 } 336 }
337 } else { 337 } else {
338 mail->bodyPlain = body; 338 mail->bodyPlain = body;
339 mail->body = body; 339 mail->body = body;
340 } 340 }
341 return TRUE; 341 return TRUE;
342} 342}
343 343
344bool EmailHandler::getEnclosure(Enclosure *ePtr) 344bool EmailHandler::getEnclosure(Enclosure *ePtr)
345{ 345{
346 QFile f(ePtr->path + ePtr->name); 346 QFile f(ePtr->path + ePtr->name);
347 char src[4]; 347 char src[4];
348 char *destPtr; 348 char *destPtr;
349 QByteArray buffer; 349 QByteArray buffer;
350 uint bufCount, pos, decodedCount, size, x; 350 uint bufCount, pos, decodedCount, size, x;
351 351
352 if (! f.open(IO_WriteOnly) ) { 352 if (! f.open(IO_WriteOnly) ) {
353 qWarning("could not save: " + ePtr->path + ePtr->name); 353 qWarning("could not save: " + ePtr->path + ePtr->name);
354 return FALSE; 354 return FALSE;
355 } 355 }
356 356
357 if (ePtr->encoding.upper() == "BASE64") { 357 if (ePtr->encoding.upper() == "BASE64") {
358 size = (ePtr->body.length() * 3 / 4); //approximate size (always above) 358 size = (ePtr->body.length() * 3 / 4); //approximate size (always above)
359 buffer.resize(size); 359 buffer.resize(size);
360 bufCount = 0; 360 bufCount = 0;
361 pos = 0; 361 pos = 0;
362 destPtr = buffer.data(); 362 destPtr = buffer.data();
363 363
364 while (pos < ePtr->body.length()) { 364 while (pos < ePtr->body.length()) {
365 decodedCount = 4; 365 decodedCount = 4;
366 x = 0; 366 x = 0;
367 while ( (x < 4) && (pos < ePtr->body.length()) ) { 367 while ( (x < 4) && (pos < ePtr->body.length()) ) {
368 src[x] = ePtr->body[pos].latin1(); 368 src[x] = ePtr->body[pos].latin1();
369 pos++; 369 pos++;
370 if (src[x] == '\r' || src[x] == '\n' || src[x] == ' ') 370 if (src[x] == '\r' || src[x] == '\n' || src[x] == ' ')
371 x--; 371 x--;
372 x++; 372 x++;
373 } 373 }
374 if (x > 1) { 374 if (x > 1) {
375 decodedCount = parse64base(src, destPtr); 375 decodedCount = parse64base(src, destPtr);
376 destPtr += decodedCount; 376 destPtr += decodedCount;
377 bufCount += decodedCount; 377 bufCount += decodedCount;
378 } 378 }
379 } 379 }
380 380
381 buffer.resize(bufCount); //set correct length of file 381 buffer.resize(bufCount); //set correct length of file
382 f.writeBlock(buffer); 382 f.writeBlock(buffer);
383 } else { 383 } else {
384 QTextStream t(&f); 384 QTextStream t(&f);
385 t << ePtr->body; 385 t << ePtr->body;
386 } 386 }
387 return TRUE; 387 return TRUE;
388} 388}
389 389
390int EmailHandler::parse64base(char *src, char *bufOut) { 390int EmailHandler::parse64base(char *src, char *bufOut) {
391 391
392 char c, z; 392 char c, z;
393 char li[4]; 393 char li[4];
394 int processed; 394 int processed;
395 395
396 //conversion table withouth table... 396 //conversion table withouth table...
397 for (int x = 0; x < 4; x++) { 397 for (int x = 0; x < 4; x++) {
398 c = src[x]; 398 c = src[x];
399 399
400 if ( (int) c >= 'A' && (int) c <= 'Z') 400 if ( (int) c >= 'A' && (int) c <= 'Z')
401 li[x] = (int) c - (int) 'A'; 401 li[x] = (int) c - (int) 'A';
402 if ( (int) c >= 'a' && (int) c <= 'z') 402 if ( (int) c >= 'a' && (int) c <= 'z')
403 li[x] = (int) c - (int) 'a' + 26; 403 li[x] = (int) c - (int) 'a' + 26;
404 if ( (int) c >= '0' && (int) c <= '9') 404 if ( (int) c >= '0' && (int) c <= '9')
405 li[x] = (int) c - (int) '0' + 52; 405 li[x] = (int) c - (int) '0' + 52;
406 if (c == '+') 406 if (c == '+')
407 li[x] = 62; 407 li[x] = 62;
408 if (c == '/') 408 if (c == '/')
409 li[x] = 63; 409 li[x] = 63;
410 } 410 }
411 411
412 processed = 1; 412 processed = 1;
413 bufOut[0] = (char) li[0] & (32+16+8+4+2+1); //mask out top 2 bits 413 bufOut[0] = (char) li[0] & (32+16+8+4+2+1); //mask out top 2 bits
414 bufOut[0] <<= 2; 414 bufOut[0] <<= 2;
415 z = li[1] >> 4; 415 z = li[1] >> 4;
416 bufOut[0] = bufOut[0] | z; //first byte retrived 416 bufOut[0] = bufOut[0] | z; //first byte retrived
417 417
418 if (src[2] != '=') { 418 if (src[2] != '=') {
419 bufOut[1] = (char) li[1] & (8+4+2+1); //mask out top 4 bits 419 bufOut[1] = (char) li[1] & (8+4+2+1); //mask out top 4 bits
420 bufOut[1] <<= 4; 420 bufOut[1] <<= 4;
421 z = li[2] >> 2; 421 z = li[2] >> 2;
422 bufOut[1] = bufOut[1] | z; //second byte retrived 422 bufOut[1] = bufOut[1] | z; //second byte retrived
423 processed++; 423 processed++;
424 424
425 if (src[3] != '=') { 425 if (src[3] != '=') {
426 bufOut[2] = (char) li[2] & (2+1); //mask out top 6 bits 426 bufOut[2] = (char) li[2] & (2+1); //mask out top 6 bits
427 bufOut[2] <<= 6; 427 bufOut[2] <<= 6;
428 z = li[3]; 428 z = li[3];
429 bufOut[2] = bufOut[2] | z; //third byte retrieved 429 bufOut[2] = bufOut[2] | z; //third byte retrieved
430 processed++; 430 processed++;
431 } 431 }
432 } 432 }
433 return processed; 433 return processed;
434} 434}
435 435
436int EmailHandler::encodeMime(Email *mail) 436int EmailHandler::encodeMime(Email *mail)
437{ 437{
438 438
439 QString fileName, fileType, contentType, newBody, boundary; 439 QString fileName, fileType, contentType, newBody, boundary;
440 Enclosure *ePtr; 440 Enclosure *ePtr;
441 441
442 QString userName = mailAccount.name; 442 QString userName = mailAccount.name;
443 if (userName.length()>0)//only embrace it if there is a user name 443 if (userName.length()>0) //only embrace it if there is a user name
444 userName += " <" + mailAccount.emailAddress + ">"; 444 userName += " <" + mailAccount.emailAddress + ">";
445 445
446 //add standard headers 446 //add standard headers
447 newBody = "From: " + userName + "\r\nTo: "; 447 newBody = "From: " + userName + "\r\nTo: ";
448 for (QStringList::Iterator it = mail->recipients.begin(); it != mail->recipients.end(); ++it ) { 448 for (QStringList::Iterator it = mail->recipients.begin(); it != mail->recipients.end(); ++it ) {
449 newBody += *it + " "; 449 newBody += *it + " ";
450 } 450 }
451 451
452 newBody += "\r\nCC: "; 452 newBody += "\r\nCC: ";
453 453
454 for (QStringList::Iterator it = mail->carbonCopies.begin(); it != mail->carbonCopies.end(); ++it ) { 454 for (QStringList::Iterator it = mail->carbonCopies.begin(); it != mail->carbonCopies.end(); ++it ) {
455 newBody += *it + " "; 455 newBody += *it + " ";
456 } 456 }
457 457
458 newBody += "\r\nSubject: " + mail->subject + "\r\n"; 458 newBody += "\r\nSubject: " + mail->subject + "\r\n";
459 459
460 if (mail->files.count() == 0) { //just a simple mail 460 if (mail->files.count() == 0) { //just a simple mail
461 newBody += "\r\n" + mail->body; 461 newBody += "\r\n" + mail->body;
462 mail->rawMail = newBody; 462 mail->rawMail = newBody;
463 return 0; 463 return 0;
464 } 464 }
465 465
466 //Build mime encoded mail 466 //Build mime encoded mail
467 boundary = "-----4345=next_bound=0495----"; 467 boundary = "-----4345=next_bound=0495----";
468 468
469 newBody += "Mime-Version: 1.0\r\n"; 469 newBody += "Mime-Version: 1.0\r\n";
470 newBody += "Content-Type: multipart/mixed; boundary=\"" + 470 newBody += "Content-Type: multipart/mixed; boundary=\"" +
471 boundary + "\"\r\n\r\n"; 471 boundary + "\"\r\n\r\n";
472 472
473 newBody += "This is a multipart message in Mime 1.0 format\r\n\r\n"; 473 newBody += "This is a multipart message in Mime 1.0 format\r\n\r\n";
474 newBody += "--" + boundary + "\r\nContent-Type: text/plain\r\n\r\n"; 474 newBody += "--" + boundary + "\r\nContent-Type: text/plain\r\n\r\n";
475 newBody += mail->body; 475 newBody += mail->body;
476 476
477 for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) { 477 for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) {
478 fileName = ePtr->originalName; 478 fileName = ePtr->originalName;
479 fileType = ePtr->contentType; 479 fileType = ePtr->contentType;
480 QFileInfo fi(fileName); 480 QFileInfo fi(fileName);
481 481
482 // This specification of contentType is temporary 482 // This specification of contentType is temporary
483 contentType = ""; 483 contentType = "";
484 if (fileType == "Picture") { 484 if (fileType == "Picture") {
485 contentType = "image/x-image"; 485 contentType = "image/x-image";
486 } else if (fileType == "Document") { 486 } else if (fileType == "Document") {
487 contentType = "text/plain"; 487 contentType = "text/plain";
488 } else if (fileType == "Sound") { 488 } else if (fileType == "Sound") {
489 contentType = "audio/x-wav"; 489 contentType = "audio/x-wav";
490 } else if (fileType == "Movie") { 490 } else if (fileType == "Movie") {
491 contentType = "video/mpeg"; 491 contentType = "video/mpeg";
492 } else { 492 } else {
493 contentType = "application/octet-stream"; 493 contentType = "application/octet-stream";
494 } 494 }
495 495
496 newBody += "\r\n\r\n--" + boundary + "\r\n"; 496 newBody += "\r\n\r\n--" + boundary + "\r\n";
497 newBody += "Content-Type: " + contentType + "; name=\"" + 497 newBody += "Content-Type: " + contentType + "; name=\"" +
498 fi.fileName() + "\"\r\n"; 498 fi.fileName() + "\"\r\n";
499 newBody += "Content-Transfer-Encoding: base64\r\n"; 499 newBody += "Content-Transfer-Encoding: base64\r\n";
500 newBody += "Content-Disposition: inline; filename=\"" + 500 newBody += "Content-Disposition: inline; filename=\"" +
501 fi.fileName() + "\"\r\n\r\n"; 501 fi.fileName() + "\"\r\n\r\n";
502 502
503 if (encodeFile(fileName, &newBody) == -1) //file not found? 503 if (encodeFile(fileName, &newBody) == -1) //file not found?
504 return -1; 504 return -1;
505 } 505 }
506 506
507 newBody += "\r\n\r\n--" + boundary + "--"; 507 newBody += "\r\n\r\n--" + boundary + "--";
508 mail->rawMail = newBody; 508 mail->rawMail = newBody;
509 509
510 return 0; 510 return 0;
511} 511}
512 512
513int EmailHandler::encodeFile(QString fileName, QString *toBody) 513int EmailHandler::encodeFile(const QString &fileName, QString *toBody)
514{ 514{
515 char *fileData; 515 char *fileData;
516 char *dataPtr; 516 char *dataPtr;
517 QString temp; 517 QString temp;
518 uint dataSize, count; 518 uint dataSize, count;
519 QFile f(fileName); 519 QFile f(fileName);
520 520
521 if (! f.open(IO_ReadOnly) ) { 521 if (! f.open(IO_ReadOnly) ) {
522 qWarning("could not open file: " + fileName); 522 qWarning("could not open file: " + fileName);
523 return -1; 523 return -1;
524 } 524 }
525 QTextStream s(&f); 525 QTextStream s(&f);
526 dataSize = f.size(); 526 dataSize = f.size();
527 fileData = (char *) malloc(dataSize + 3); 527 fileData = (char *) malloc(dataSize + 3);
528 s.readRawBytes(fileData, dataSize); 528 s.readRawBytes(fileData, dataSize);
529 529
530 temp = ""; 530 temp = "";
531 dataPtr = fileData; 531 dataPtr = fileData;
532 count = 0; 532 count = 0;
533 while (dataSize > 0) { 533 while (dataSize > 0) {
534 if (dataSize < 3) { 534 if (dataSize < 3) {
535 encode64base(dataPtr, &temp, dataSize); 535 encode64base(dataPtr, &temp, dataSize);
536 dataSize = 0; 536 dataSize = 0;
537 } else { 537 } else {
538 encode64base(dataPtr, &temp, 3); 538 encode64base(dataPtr, &temp, 3);
539 dataSize -= 3; 539 dataSize -= 3;
540 dataPtr += 3; 540 dataPtr += 3;
541 count += 4; 541 count += 4;
542 } 542 }
543 if (count > 72) { 543 if (count > 72) {
544 count = 0; 544 count = 0;
545 temp += "\r\n"; 545 temp += "\r\n";
546 } 546 }
547 } 547 }
548 toBody->append(temp); 548 toBody->append(temp);
549 549
550 delete(fileData); 550 delete(fileData);
551 f.close(); 551 f.close();
552 return 0; 552 return 0;
553} 553}
554 554
555void EmailHandler::encode64base(char *src, QString *dest, int len) 555void EmailHandler::encode64base(char *src, QString *dest, int len)
556{ 556{
557 QString temp; 557 QString temp;
558 uchar c; 558 uchar c;
559 uchar bufOut[4]; 559 uchar bufOut[4];
560 560
561 bufOut[0] = src[0]; 561 bufOut[0] = src[0];
562 bufOut[0] >>= 2; //Done byte 0 562 bufOut[0] >>= 2; //Done byte 0
563 563
564 bufOut[1] = src[0]; 564 bufOut[1] = src[0];
565 bufOut[1] = bufOut[1] & (1 + 2); //mask out top 6 bits 565 bufOut[1] = bufOut[1] & (1 + 2); //mask out top 6 bits
566 bufOut[1] <<= 4; //copy up 4 places 566 bufOut[1] <<= 4; //copy up 4 places
567 if (len > 1) { 567 if (len > 1) {
568 c = src[1]; 568 c = src[1];
569 } else { 569 } else {
570 c = 0; 570 c = 0;
571 } 571 }
572 572
573 c = c & (16 + 32 + 64 + 128); 573 c = c & (16 + 32 + 64 + 128);
574 c >>= 4; 574 c >>= 4;
575 bufOut[1] = bufOut[1] | c; //Done byte 1 575 bufOut[1] = bufOut[1] | c; //Done byte 1
576 576
577 bufOut[2] = src[1]; 577 bufOut[2] = src[1];
578 bufOut[2] = bufOut[2] & (1 + 2 + 4 + 8); 578 bufOut[2] = bufOut[2] & (1 + 2 + 4 + 8);
579 bufOut[2] <<= 2; 579 bufOut[2] <<= 2;
580 if (len > 2) { 580 if (len > 2) {
581 c = src[2]; 581 c = src[2];
582 } else { 582 } else {
583 c = 0; 583 c = 0;
584 } 584 }
585 c >>= 6; 585 c >>= 6;
586 bufOut[2] = bufOut[2] | c; 586 bufOut[2] = bufOut[2] | c;
587 587
588 bufOut[3] = src[2]; 588 bufOut[3] = src[2];
589 bufOut[3] = bufOut[3] & (1 + 2 + 4 + 8 + 16 + 32); 589 bufOut[3] = bufOut[3] & (1 + 2 + 4 + 8 + 16 + 32);
590 590
591 if (len == 1) { 591 if (len == 1) {
592 bufOut[2] = 64; 592 bufOut[2] = 64;
593 bufOut[3] = 64; 593 bufOut[3] = 64;
594 } 594 }
595 if (len == 2) { 595 if (len == 2) {
596 bufOut[3] = 64; 596 bufOut[3] = 64;
597 } 597 }
598 for (int x = 0; x < 4; x++) { 598 for (int x = 0; x < 4; x++) {
599 if (bufOut[x] <= 25) 599 if (bufOut[x] <= 25)
600 bufOut[x] += (uint) 'A'; 600 bufOut[x] += (uint) 'A';
601 else if (bufOut[x] >= 26 && bufOut[x] <= 51) 601 else if (bufOut[x] >= 26 && bufOut[x] <= 51)
602 bufOut[x] += (uint) 'a' - 26; 602 bufOut[x] += (uint) 'a' - 26;
603 else if (bufOut[x] >= 52 && bufOut[x] <= 61) 603 else if (bufOut[x] >= 52 && bufOut[x] <= 61)
604 bufOut[x] += (uint) '0' - 52; 604 bufOut[x] += (uint) '0' - 52;
605 else if (bufOut[x] == 62) 605 else if (bufOut[x] == 62)
606 bufOut[x] = '+'; 606 bufOut[x] = '+';
607 else if (bufOut[x] == 63) 607 else if (bufOut[x] == 63)
608 bufOut[x] = '/'; 608 bufOut[x] = '/';
609 else if (bufOut[x] == 64) 609 else if (bufOut[x] == 64)
610 bufOut[x] = '='; 610 bufOut[x] = '=';
611 611
612 dest->append(bufOut[x]); 612 dest->append(bufOut[x]);
613 } 613 }
614} 614}
615 615
616void EmailHandler::cancel() 616void EmailHandler::cancel()
617{ 617{
618 popClient->errorHandling(ErrCancel); 618 popClient->errorHandling(ErrCancel);
619 smtpClient->errorHandling(ErrCancel); 619 smtpClient->errorHandling(ErrCancel);
620} 620}
621 621
diff --git a/noncore/net/mailit/emailhandler.h b/noncore/net/mailit/emailhandler.h
index 5b59f65..e4e7f46 100644
--- a/noncore/net/mailit/emailhandler.h
+++ b/noncore/net/mailit/emailhandler.h
@@ -1,150 +1,150 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef EmailHandler_H 20#ifndef EmailHandler_H
21#define EmailHandler_H 21#define EmailHandler_H
22 22
23#include <qobject.h> 23#include <qobject.h>
24#include <qstring.h> 24#include <qstring.h>
25#include <qdatetime.h> 25#include <qdatetime.h>
26#include <qlist.h> 26#include <qlist.h>
27#include <qstringlist.h> 27#include <qstringlist.h>
28#include <qfile.h> 28#include <qfile.h>
29#include <qstringlist.h> 29#include <qstringlist.h>
30#include <qcollection.h> 30#include <qcollection.h>
31#include <qpe/qcopenvelope_qws.h> 31#include <qpe/qcopenvelope_qws.h>
32 32
33#include "smtpclient.h" 33#include "smtpclient.h"
34#include "popclient.h" 34#include "popclient.h"
35#include "textparser.h" 35#include "textparser.h"
36#include "maillist.h" 36#include "maillist.h"
37 37
38struct Enclosure 38struct Enclosure
39{ 39{
40 int id; 40 int id;
41 QString originalName; 41 QString originalName;
42 QString name; 42 QString name;
43 QString path; 43 QString path;
44 QString contentType; 44 QString contentType;
45 QString contentAttribute; 45 QString contentAttribute;
46 QString encoding; 46 QString encoding;
47 QString body; //might use to much mem. check!! 47 QString body; //might use to much mem. check!!
48 bool saved, installed; 48 bool saved, installed;
49}; 49};
50 50
51class EnclosureList : public QList<Enclosure> 51class EnclosureList : public QList<Enclosure>
52{ 52{
53public: 53public:
54 Item newItem(Item d); 54 Item newItem(Item d);
55private: 55private:
56 Enclosure* dupl(Enclosure *in); 56 Enclosure* dupl(Enclosure *in);
57 Enclosure *ac; 57 Enclosure *ac;
58}; 58};
59 59
60struct Email 60struct Email
61{ 61{
62 QString id; 62 QString id;
63 QString from; 63 QString from;
64 QString fromMail; 64 QString fromMail;
65 QStringList recipients; 65 QStringList recipients;
66 QStringList carbonCopies; 66 QStringList carbonCopies;
67 QString date; 67 QString date;
68 QString subject; 68 QString subject;
69 QString body; 69 QString body;
70 QString bodyPlain; 70 QString bodyPlain;
71 bool sent, received, read, downloaded; 71 bool sent, received, read, downloaded;
72 QString rawMail; 72 QString rawMail;
73 int mimeType; //1 = Mime 1.0 73 int mimeType; //1 = Mime 1.0
74 int serverId; 74 int serverId;
75 int internalId; 75 int internalId;
76 int fromAccountId; 76 int fromAccountId;
77 QString contentType; //0 = text 77 QString contentType; //0 = text
78 QString contentAttribute; //0 = plain, 1 = html 78 QString contentAttribute; //0 = plain, 1 = html
79 EnclosureList files; 79 EnclosureList files;
80 uint size; 80 uint size;
81 81
82 void addEnclosure(Enclosure *e) 82 void addEnclosure(Enclosure *e)
83 { 83 {
84 files.append(e); 84 files.append(e);
85 } 85 }
86}; 86};
87 87
88struct MailAccount 88struct MailAccount
89{ 89{
90 QString accountName; 90 QString accountName;
91 QString name; 91 QString name;
92 QString emailAddress; 92 QString emailAddress;
93 QString popUserName; 93 QString popUserName;
94 QString popPasswd; 94 QString popPasswd;
95 QString popServer; 95 QString popServer;
96 QString smtpServer; 96 QString smtpServer;
97 bool synchronize; 97 bool synchronize;
98 int syncLimit; 98 int syncLimit;
99 int lastServerMailCount; 99 int lastServerMailCount;
100 int id; 100 int id;
101}; 101};
102 102
103 const int ErrUnknownResponse = 1001; 103 const int ErrUnknownResponse = 1001;
104 const int ErrLoginFailed = 1002; 104 const int ErrLoginFailed = 1002;
105 const int ErrCancel = 1003; 105 const int ErrCancel = 1003;
106 106
107 107
108class EmailHandler : public QObject 108class EmailHandler : public QObject
109{ 109{
110 Q_OBJECT 110 Q_OBJECT
111 111
112public: 112public:
113 EmailHandler(); 113 EmailHandler();
114 void setAccount(MailAccount account); 114 void setAccount(MailAccount account);
115 MailAccount* getAccount(){return &mailAccount;} 115 MailAccount* getAccount(){return &mailAccount;}
116 void sendMail(QList<Email> *mailList); 116 void sendMail(QList<Email> *mailList);
117 void getMail(); 117 void getMail();
118 void getMailHeaders(); 118 void getMailHeaders();
119 void getMailByList(MailList *mailList); 119 void getMailByList(MailList *mailList);
120 bool parse(QString in, QString lineShift, Email *mail); 120 bool parse(const QString &in, const QString &lineShift, Email *mail);
121 bool getEnclosure(Enclosure *ePtr); 121 bool getEnclosure(Enclosure *ePtr);
122 int parse64base(char *src, char *dest); 122 int parse64base(char *src, char *dest);
123 int encodeMime(Email *mail); 123 int encodeMime(Email *mail);
124 int encodeFile(QString fileName, QString *toBody); 124 int encodeFile(const QString &fileName, QString *toBody);
125 void encode64base(char *src, QString *dest, int len); 125 void encode64base(char *src, QString *dest, int len);
126 void cancel(); 126 void cancel();
127 127
128signals: 128signals:
129 void mailSent(); 129 void mailSent();
130 void smtpError(int); 130 void smtpError(int);
131 void popError(int); 131 void popError(int);
132 void mailArrived(const Email &, bool); 132 void mailArrived(const Email &, bool);
133 void updatePopStatus(const QString &); 133 void updatePopStatus(const QString &);
134 void updateSmtpStatus(const QString &); 134 void updateSmtpStatus(const QString &);
135 void mailTransfered(int); 135 void mailTransfered(int);
136 void mailboxSize(int); 136 void mailboxSize(int);
137 void currentMailSize(int); 137 void currentMailSize(int);
138 void downloadedSize(int); 138 void downloadedSize(int);
139 139
140public slots: 140public slots:
141 void messageArrived(const QString &, int id, uint size, bool complete); 141 void messageArrived(const QString &, int id, uint size, bool complete);
142 142
143private: 143private:
144 MailAccount mailAccount; 144 MailAccount mailAccount;
145 SmtpClient *smtpClient; 145 SmtpClient *smtpClient;
146 PopClient *popClient; 146 PopClient *popClient;
147 bool headers; 147 bool headers;
148}; 148};
149 149
150#endif 150#endif
diff --git a/noncore/net/mailit/emaillistitem.cpp b/noncore/net/mailit/emaillistitem.cpp
index b925a1c..fc9f766 100644
--- a/noncore/net/mailit/emaillistitem.cpp
+++ b/noncore/net/mailit/emaillistitem.cpp
@@ -1,99 +1,99 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include <qstring.h> 20#include <qstring.h>
21#include <qpe/resource.h> 21#include <qpe/resource.h>
22#include "emaillistitem.h" 22#include "emaillistitem.h"
23 23
24EmailListItem::EmailListItem(QListView *parent, Email mailIn, bool inbox) 24EmailListItem::EmailListItem(QListView *parent, Email mailIn, bool inbox)
25 : QListViewItem(parent) 25 : QListViewItem(parent)
26{ 26{
27 QString temp; 27 QString temp;
28 28
29 mail = mailIn; 29 mail = mailIn;
30 30
31 if (inbox) { 31 if (inbox) {
32 setText(0, mail.from); 32 setText(0, mail.from);
33 } else { 33 } else {
34 QStringList::Iterator it = mail.recipients.begin(); 34 QStringList::Iterator it = mail.recipients.begin();
35 temp = *it; 35 temp = *it;
36 if (mail.recipients.count() > 1) 36 if (mail.recipients.count() > 1)
37 temp += "..."; 37 temp += "...";
38 setText(0, temp); 38 setText(0, temp);
39 } 39 }
40 setText(1, mail.subject); 40 setText(1, mail.subject);
41 setText(2,mail.date); 41 setText(2,mail.date);
42 42
43 if (mailIn.files.count()>0) 43 if (mailIn.files.count()>0)
44 { 44 {
45 setPixmap(0, Resource::loadPixmap("mailit/attach")); 45 setPixmap(0, Resource::loadPixmap("mailit/attach"));
46 } 46 }
47 47
48 selected = FALSE; 48 selected = FALSE;
49} 49}
50 50
51Email* EmailListItem::getMail() 51Email* EmailListItem::getMail()
52{ 52{
53 return &mail; 53 return &mail;
54} 54}
55 55
56void EmailListItem::setMail(Email newMail) 56void EmailListItem::setMail(Email newMail)
57{ 57{
58 mail = newMail; 58 mail = newMail;
59 repaint(); 59 repaint();
60} 60}
61 61
62void EmailListItem::setItemSelected(bool enable) 62void EmailListItem::setItemSelected(bool enable)
63{ 63{
64 selected = enable; 64 selected = enable;
65 setSelected(enable); 65 setSelected(enable);
66 repaint(); 66 repaint();
67} 67}
68 68
69bool EmailListItem::isItemSelected() 69bool EmailListItem::isItemSelected()
70{ 70{
71 return selected; 71 return selected;
72} 72}
73 73
74void EmailListItem::paintCell( QPainter *p, const QColorGroup &cg, 74void EmailListItem::paintCell( QPainter *p, const QColorGroup &cg,
75 int column, int width, int alignment ) 75 int column, int width, int alignment )
76{ 76{
77 77
78 QColorGroup _cg( cg ); 78 QColorGroup _cg( cg );
79 QColor c = _cg.text(); 79 QColor c = _cg.text();
80 80
81 if ( (! mail.read) && (mail.received) ) 81 if ( (! mail.read) && (mail.received) )
82 _cg.setColor( QColorGroup::Text, Qt::blue); 82 _cg.setColor( QColorGroup::Text, Qt::blue);
83 if (!mail.downloaded) 83 if (!mail.downloaded)
84 _cg.setColor( QColorGroup::Text, Qt::red); 84 _cg.setColor( QColorGroup::Text, Qt::red);
85 85
86 /*if (selected) { 86/* if (selected) {
87 _cg.setColor(QColorGroup::Base, Qt::blue); 87 _cg.setColor(QColorGroup::Base, Qt::blue);
88 _cg.setColor(QColorGroup::Text, Qt::yellow); 88 _cg.setColor(QColorGroup::Text, Qt::yellow);
89 if (isSelected()) { 89 if (isSelected()) {
90 _cg.setColor(QColorGroup::HighlightedText, Qt::yellow); 90 _cg.setColor(QColorGroup::HighlightedText, Qt::yellow);
91 } else { 91 } else {
92 _cg.setColor(QColorGroup::Highlight, Qt::blue); 92 _cg.setColor(QColorGroup::Highlight, Qt::blue);
93 } 93 }
94 } 94 }
95 */ 95*/
96 QListViewItem::paintCell( p, _cg, column, width, alignment ); 96 QListViewItem::paintCell( p, _cg, column, width, alignment );
97 97
98 _cg.setColor( QColorGroup::Text, c ); 98 _cg.setColor( QColorGroup::Text, c );
99} 99}
diff --git a/noncore/net/mailit/popclient.cpp b/noncore/net/mailit/popclient.cpp
index fedc4e2..dc0116d 100644
--- a/noncore/net/mailit/popclient.cpp
+++ b/noncore/net/mailit/popclient.cpp
@@ -1,327 +1,327 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include "popclient.h" 20#include "popclient.h"
21#include "emailhandler.h" 21#include "emailhandler.h"
22//#define APOP_TEST 22//#define APOP_TEST
23 23
24extern "C" { 24extern "C" {
25#include "md5.h" 25#include "md5.h"
26} 26}
27 27
28#include <qcstring.h> 28#include <qcstring.h>
29 29
30PopClient::PopClient() 30PopClient::PopClient()
31{ 31{
32 32
33 socket = new QSocket(this, "popClient"); 33 socket = new QSocket(this, "popClient");
34 connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int))); 34 connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int)));
35 connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished())); 35 connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished()));
36 connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData())); 36 connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData()));
37 37
38 stream = new QTextStream(socket); 38 stream = new QTextStream(socket);
39 39
40 receiving = FALSE; 40 receiving = FALSE;
41 synchronize = FALSE; 41 synchronize = FALSE;
42 lastSync = 0; 42 lastSync = 0;
43 headerLimit = 0; 43 headerLimit = 0;
44 preview = FALSE; 44 preview = FALSE;
45} 45}
46 46
47PopClient::~PopClient() 47PopClient::~PopClient()
48{ 48{
49 delete socket; 49 delete socket;
50 delete stream; 50 delete stream;
51} 51}
52 52
53void PopClient::newConnection(QString target, int port) 53void PopClient::newConnection(const QString &target, int port)
54{ 54{
55 if (receiving) { 55 if (receiving) {
56 qWarning("socket in use, connection refused"); 56 qWarning("socket in use, connection refused");
57 return; 57 return;
58 } 58 }
59 59
60 status = Init; 60 status = Init;
61 61
62 socket->connectToHost(target, port); 62 socket->connectToHost(target, port);
63 receiving = TRUE; 63 receiving = TRUE;
64 //selected = FALSE; 64 //selected = FALSE;
65 65
66 emit updateStatus("DNS lookup"); 66 emit updateStatus("DNS lookup");
67} 67}
68 68
69void PopClient::setAccount(QString popUser, QString popPasswd) 69void PopClient::setAccount(const QString &popUser, const QString &popPasswd)
70{ 70{
71 popUserName = popUser; 71 popUserName = popUser;
72 popPassword = popPasswd; 72 popPassword = popPasswd;
73} 73}
74 74
75void PopClient::setSynchronize(int lastCount) 75void PopClient::setSynchronize(int lastCount)
76{ 76{
77 synchronize = TRUE; 77 synchronize = TRUE;
78 lastSync = lastCount; 78 lastSync = lastCount;
79} 79}
80 80
81void PopClient::removeSynchronize() 81void PopClient::removeSynchronize()
82{ 82{
83 synchronize = FALSE; 83 synchronize = FALSE;
84 lastSync = 0; 84 lastSync = 0;
85} 85}
86 86
87void PopClient::headersOnly(bool headers, int limit) 87void PopClient::headersOnly(bool headers, int limit)
88{ 88{
89 preview = headers; 89 preview = headers;
90 headerLimit = limit; 90 headerLimit = limit;
91} 91}
92 92
93void PopClient::setSelectedMails(MailList *list) 93void PopClient::setSelectedMails(MailList *list)
94{ 94{
95 selected = TRUE; 95 selected = TRUE;
96 mailList = list; 96 mailList = list;
97} 97}
98 98
99void PopClient::connectionEstablished() 99void PopClient::connectionEstablished()
100{ 100{
101 emit updateStatus(tr("Connection established")); 101 emit updateStatus(tr("Connection established"));
102} 102}
103 103
104void PopClient::errorHandling(int status) 104void PopClient::errorHandling(int status)
105{ 105{
106 emit updateStatus(tr("Error Occured")); 106 emit updateStatus(tr("Error Occured"));
107 emit errorOccurred(status); 107 emit errorOccurred(status);
108 socket->close(); 108 socket->close();
109 receiving = FALSE; 109 receiving = FALSE;
110} 110}
111 111
112void PopClient::incomingData() 112void PopClient::incomingData()
113{ 113{
114 QString response, temp, temp2, timeStamp; 114 QString response, temp, temp2, timeStamp;
115 QString md5Source; 115 QString md5Source;
116 int start, end; 116 int start, end;
117// char *md5Digest; 117// char *md5Digest;
118 char md5Digest[16]; 118 char md5Digest[16];
119// if ( !socket->canReadLine() ) 119// if ( !socket->canReadLine() )
120// return; 120// return;
121 121
122 122
123 response = socket->readLine(); 123 response = socket->readLine();
124 124
125 switch(status) { 125 switch(status) {
126 //logging in 126 //logging in
127 case Init: { 127 case Init: {
128#ifdef APOP_TEST 128#ifdef APOP_TEST
129 start = response.find('<',0); 129 start = response.find('<',0);
130 end = response.find('>', start); 130 end = response.find('>', start);
131 if( start >= 0 && end > start ) 131 if( start >= 0 && end > start )
132 { 132 {
133 timeStamp = response.mid( start , end - start + 1); 133 timeStamp = response.mid( start , end - start + 1);
134 md5Source = timeStamp + popPassword; 134 md5Source = timeStamp + popPassword;
135 135
136 md5_buffer( (char const *)md5Source, md5Source.length(),&md5Digest[0]); 136 md5_buffer( (char const *)md5Source, md5Source.length(),&md5Digest[0]);
137 137
138 for(int j =0;j < MD5_DIGEST_LENGTH ;j++) 138 for(int j =0;j < MD5_DIGEST_LENGTH ;j++)
139 { 139 {
140 printf("%x", md5Digest[j]); 140 printf("%x", md5Digest[j]);
141 } 141 }
142 printf("\n"); 142 printf("\n");
143// qDebug(md5Digest); 143// qDebug(md5Digest);
144 *stream << "APOP " << popUserName << " " << md5Digest << "\r\n"; 144 *stream << "APOP " << popUserName << " " << md5Digest << "\r\n";
145 // qDebug("%s", stream); 145 // qDebug("%s", stream);
146 status = Stat; 146 status = Stat;
147 } 147 }
148 else 148 else
149#endif 149#endif
150 { 150 {
151 timeStamp = ""; 151 timeStamp = "";
152 *stream << "USER " << popUserName << "\r\n"; 152 *stream << "USER " << popUserName << "\r\n";
153 status = Pass; 153 status = Pass;
154 } 154 }
155 155
156 break; 156 break;
157 } 157 }
158 158
159 case Pass: { 159 case Pass: {
160 *stream << "PASS " << popPassword << "\r\n"; 160 *stream << "PASS " << popPassword << "\r\n";
161 status = Stat; 161 status = Stat;
162 162
163 break; 163 break;
164 } 164 }
165 //ask for number of messages 165 //ask for number of messages
166 case Stat: { 166 case Stat: {
167 if (response[0] == '+') { 167 if (response[0] == '+') {
168 *stream << "STAT" << "\r\n"; 168 *stream << "STAT" << "\r\n";
169 status = Mcnt; 169 status = Mcnt;
170 } else errorHandling(ErrLoginFailed); 170 } else errorHandling(ErrLoginFailed);
171 break; 171 break;
172 } 172 }
173 //get count of messages, eg "+OK 4 900.." -> int 4 173 //get count of messages, eg "+OK 4 900.." -> int 4
174 case Mcnt: { 174 case Mcnt: {
175 if (response[0] == '+') { 175 if (response[0] == '+') {
176 temp = response.replace(0, 4, ""); 176 temp = response.replace(0, 4, "");
177 int x = temp.find(" ", 0); 177 int x = temp.find(" ", 0);
178 temp.truncate((uint) x); 178 temp.truncate((uint) x);
179 newMessages = temp.toInt(); 179 newMessages = temp.toInt();
180 messageCount = 1; 180 messageCount = 1;
181 status = List; 181 status = List;
182 182
183 if (synchronize) { 183 if (synchronize) {
184 //messages deleted from server, reload all 184 //messages deleted from server, reload all
185 if (newMessages < lastSync) 185 if (newMessages < lastSync)
186 lastSync = 0; 186 lastSync = 0;
187 messageCount = 1; 187 messageCount = 1;
188 } 188 }
189 189
190 if (selected) { 190 if (selected) {
191 int *ptr = mailList->first(); 191 int *ptr = mailList->first();
192 if (ptr != 0) { 192 if (ptr != 0) {
193 newMessages++; //to ensure no early jumpout 193 newMessages++; //to ensure no early jumpout
194 messageCount = *ptr; 194 messageCount = *ptr;
195 } else newMessages = 0; 195 } else newMessages = 0;
196 } 196 }
197 197
198 } else errorHandling(ErrUnknownResponse); 198 } else errorHandling(ErrUnknownResponse);
199 } 199 }
200 //Read message number x, count upwards to messageCount 200 //Read message number x, count upwards to messageCount
201 case List: { 201 case List: {
202 if (messageCount <= newMessages) { 202 if (messageCount <= newMessages) {
203 *stream << "LIST " << messageCount << "\r\n"; 203 *stream << "LIST " << messageCount << "\r\n";
204 status = Size; 204 status = Size;
205 temp2.setNum(newMessages - lastSync); 205 temp2.setNum(newMessages - lastSync);
206 temp.setNum(messageCount - lastSync); 206 temp.setNum(messageCount - lastSync);
207 if (!selected) { 207 if (!selected) {
208 emit updateStatus(tr("Retrieving ") + temp + "/" + temp2); 208 emit updateStatus(tr("Retrieving ") + temp + "/" + temp2);
209 } else { 209 } else {
210 //completing a previously closed transfer 210 //completing a previously closed transfer
211 /* if ( (messageCount - lastSync) <= 0) { 211 /* if ( (messageCount - lastSync) <= 0) {
212 temp.setNum(messageCount); 212 temp.setNum(messageCount);
213 emit updateStatus(tr("Previous message ") + temp); 213 emit updateStatus(tr("Previous message ") + temp);
214 } else {*/ 214 } else {*/
215 emit updateStatus(tr("Completing message ") + temp); 215 emit updateStatus(tr("Completing message ") + temp);
216 //} 216 //}
217 } 217 }
218 break; 218 break;
219 } else { 219 } else {
220 emit updateStatus(tr("No new Messages")); 220 emit updateStatus(tr("No new Messages"));
221 status = Quit; 221 status = Quit;
222 } 222 }
223 } 223 }
224 //get size of message, eg "500 characters in message.." -> int 500 224 //get size of message, eg "500 characters in message.." -> int 500
225 case Size: { 225 case Size: {
226 if (status != Quit) { //because of idiotic switch 226 if (status != Quit) { //because of idiotic switch
227 if (response[0] == '+') { 227 if (response[0] == '+') {
228 temp = response.replace(0, 4, ""); 228 temp = response.replace(0, 4, "");
229 int x = temp.find(" ", 0); 229 int x = temp.find(" ", 0);
230 temp = temp.right(temp.length() - ((uint) x + 1) ); 230 temp = temp.right(temp.length() - ((uint) x + 1) );
231 mailSize = temp.toInt(); 231 mailSize = temp.toInt();
232 emit currentMailSize(mailSize); 232 emit currentMailSize(mailSize);
233 233
234 status = Retr; 234 status = Retr;
235 } else { 235 } else {
236 //qWarning(response); 236 //qWarning(response);
237 errorHandling(ErrUnknownResponse); 237 errorHandling(ErrUnknownResponse);
238 } 238 }
239 } 239 }
240 } 240 }
241 //Read message number x, count upwards to messageCount 241 //Read message number x, count upwards to messageCount
242 case Retr: { 242 case Retr: {
243 if (status != Quit) { 243 if (status != Quit) {
244 if ((selected)||(mailSize <= headerLimit)) 244 if ((selected)||(mailSize <= headerLimit))
245 { 245 {
246 *stream << "RETR " << messageCount << "\r\n"; 246 *stream << "RETR " << messageCount << "\r\n";
247 } else { //only header 247 } else { //only header
248 *stream << "TOP " << messageCount << " 0\r\n"; 248 *stream << "TOP " << messageCount << " 0\r\n";
249 } 249 }
250 messageCount++; 250 messageCount++;
251 status = Ignore; 251 status = Ignore;
252 break; 252 break;
253 } } 253 } }
254 case Ignore: { 254 case Ignore: {
255 if (status != Quit) { //because of idiotic switch 255 if (status != Quit) { //because of idiotic switch
256 if (response[0] == '+') { 256 if (response[0] == '+') {
257 message = ""; 257 message = "";
258 status = Read; 258 status = Read;
259 if (!socket->canReadLine()) //sync. problems 259 if (!socket->canReadLine()) //sync. problems
260 break; 260 break;
261 response = socket->readLine(); 261 response = socket->readLine();
262 } else errorHandling(ErrUnknownResponse); 262 } else errorHandling(ErrUnknownResponse);
263 } 263 }
264 } 264 }
265 //add all incoming lines to body. When size is reached, send 265 //add all incoming lines to body. When size is reached, send
266 //message, and go back to read new message 266 //message, and go back to read new message
267 case Read: { 267 case Read: {
268 if (status != Quit) { //because of idiotic switch 268 if (status != Quit) { //because of idiotic switch
269 message += response; 269 message += response;
270 while ( socket->canReadLine() ) { 270 while ( socket->canReadLine() ) {
271 response = socket->readLine(); 271 response = socket->readLine();
272 message += response; 272 message += response;
273 } 273 }
274 emit downloadedSize(message.length()); 274 emit downloadedSize(message.length());
275 int x = message.find("\r\n.\r\n",-5); 275 int x = message.find("\r\n.\r\n",-5);
276 if (x == -1) { 276 if (x == -1) {
277 break; 277 break;
278 } else { //message reach entire size 278 } else { //message reach entire size
279 if ( (selected)||(mailSize <= headerLimit)) //mail size limit is not used if late download is active 279 if ( (selected)||(mailSize <= headerLimit)) //mail size limit is not used if late download is active
280 { 280 {
281 emit newMessage(message, messageCount-1, mailSize, TRUE); 281 emit newMessage(message, messageCount-1, mailSize, TRUE);
282 } else { //incomplete mail downloaded 282 } else { //incomplete mail downloaded
283 emit newMessage(message, messageCount-1, mailSize, FALSE); 283 emit newMessage(message, messageCount-1, mailSize, FALSE);
284 } 284 }
285 285
286 if ((messageCount > newMessages)||(selected)) //last message ? 286 if ((messageCount > newMessages)||(selected)) //last message ?
287 { 287 {
288 status = Quit; 288 status = Quit;
289 if (selected) { //grab next from queue 289 if (selected) { //grab next from queue
290 newMessages--; 290 newMessages--;
291 status = Quit; 291 status = Quit;
292 } 292 }
293 } 293 }
294 else 294 else
295 { 295 {
296 *stream << "LIST " << messageCount << "\r\n"; 296 *stream << "LIST " << messageCount << "\r\n";
297 status = Size; 297 status = Size;
298 temp2.setNum(newMessages - lastSync); 298 temp2.setNum(newMessages - lastSync);
299 temp.setNum(messageCount - lastSync); 299 temp.setNum(messageCount - lastSync);
300 emit updateStatus(tr("Retrieving ") + temp + "/" + temp2); 300 emit updateStatus(tr("Retrieving ") + temp + "/" + temp2);
301 301
302 break; 302 break;
303 } 303 }
304 } 304 }
305 } 305 }
306 if (status != Quit) 306 if (status != Quit)
307 break; 307 break;
308 } 308 }
309 case Quit: { 309 case Quit: {
310 *stream << "Quit\r\n"; 310 *stream << "Quit\r\n";
311 status = Done; 311 status = Done;
312 int newM = newMessages - lastSync; 312 int newM = newMessages - lastSync;
313 if (newM > 0) { 313 if (newM > 0) {
314 temp.setNum(newM); 314 temp.setNum(newM);
315 emit updateStatus(temp + tr(" new messages")); 315 emit updateStatus(temp + tr(" new messages"));
316 } else { 316 } else {
317 emit updateStatus(tr("No new messages")); 317 emit updateStatus(tr("No new messages"));
318 } 318 }
319 319
320 socket->close(); 320 socket->close();
321 receiving = FALSE; 321 receiving = FALSE;
322 emit mailTransfered(newM); 322 emit mailTransfered(newM);
323 break; 323 break;
324 } 324 }
325 } 325 }
326 326
327} 327}
diff --git a/noncore/net/mailit/popclient.h b/noncore/net/mailit/popclient.h
index 10b71ab..c58bc48 100644
--- a/noncore/net/mailit/popclient.h
+++ b/noncore/net/mailit/popclient.h
@@ -1,76 +1,76 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef PopClient_H 20#ifndef PopClient_H
21#define PopClient_H 21#define PopClient_H
22 22
23#include <stdio.h> 23#include <stdio.h>
24#include <qsocket.h> 24#include <qsocket.h>
25#include <qstring.h> 25#include <qstring.h>
26#include <qobject.h> 26#include <qobject.h>
27#include <qtextstream.h> 27#include <qtextstream.h>
28#include <qlist.h> 28#include <qlist.h>
29#include "maillist.h" 29#include "maillist.h"
30 30
31class PopClient: public QObject 31class PopClient: public QObject
32{ 32{
33 Q_OBJECT 33 Q_OBJECT
34 34
35public: 35public:
36 PopClient(); 36 PopClient();
37 ~PopClient(); 37 ~PopClient();
38 void newConnection(QString target, int port); 38 void newConnection(const QString &target, int port);
39 void setAccount(QString popUser, QString popPasswd); 39 void setAccount(const QString &popUser, const QString &popPasswd);
40 void setSynchronize(int lastCount); 40 void setSynchronize(int lastCount);
41 void removeSynchronize(); 41 void removeSynchronize();
42 void headersOnly(bool headers, int limit); 42 void headersOnly(bool headers, int limit);
43 void setSelectedMails(MailList *list); 43 void setSelectedMails(MailList *list);
44 44
45signals: 45signals:
46 void newMessage(const QString &, int, uint, bool); 46 void newMessage(const QString &, int, uint, bool);
47 void errorOccurred(int status); 47 void errorOccurred(int status);
48 void updateStatus(const QString &); 48 void updateStatus(const QString &);
49 void mailTransfered(int); 49 void mailTransfered(int);
50 void mailboxSize(int); 50 void mailboxSize(int);
51 void currentMailSize(int); 51 void currentMailSize(int);
52 void downloadedSize(int); 52 void downloadedSize(int);
53 53
54public slots: 54public slots:
55 void errorHandling(int); 55 void errorHandling(int);
56 56
57protected slots: 57protected slots:
58 void connectionEstablished(); 58 void connectionEstablished();
59 void incomingData(); 59 void incomingData();
60 60
61private: 61private:
62 QSocket *socket; 62 QSocket *socket;
63 QTextStream *stream; 63 QTextStream *stream;
64 enum transferStatus 64 enum transferStatus
65 { 65 {
66 Init, Pass, Stat, Mcnt, Read, List, Size, Retr, Acks, 66 Init, Pass, Stat, Mcnt, Read, List, Size, Retr, Acks,
67 Quit, Done, Ignore 67 Quit, Done, Ignore
68 }; 68 };
69 int status, lastSync; 69 int status, lastSync;
70 int messageCount, newMessages, mailSize, headerLimit; 70 int messageCount, newMessages, mailSize, headerLimit;
71 bool receiving, synchronize, preview, selected; 71 bool receiving, synchronize, preview, selected;
72 QString popUserName, popPassword, message; 72 QString popUserName, popPassword, message;
73 MailList *mailList; 73 MailList *mailList;
74}; 74};
75 75
76#endif 76#endif
diff --git a/noncore/net/mailit/smtpclient.cpp b/noncore/net/mailit/smtpclient.cpp
index 8a51a5b..2916f45 100644
--- a/noncore/net/mailit/smtpclient.cpp
+++ b/noncore/net/mailit/smtpclient.cpp
@@ -1,163 +1,163 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include "smtpclient.h" 20#include "smtpclient.h"
21#include "emailhandler.h" 21#include "emailhandler.h"
22 22
23SmtpClient::SmtpClient() 23SmtpClient::SmtpClient()
24{ 24{
25 socket = new QSocket(this, "smtpClient"); 25 socket = new QSocket(this, "smtpClient");
26 stream = new QTextStream(socket); 26 stream = new QTextStream(socket);
27 mailList.setAutoDelete(TRUE); 27 mailList.setAutoDelete(TRUE);
28 28
29 connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int))); 29 connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int)));
30 connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished())); 30 connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished()));
31 connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData())); 31 connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData()));
32 32
33 sending = FALSE; 33 sending = FALSE;
34} 34}
35 35
36SmtpClient::~SmtpClient() 36SmtpClient::~SmtpClient()
37{ 37{
38 delete socket; 38 delete socket;
39 delete stream; 39 delete stream;
40} 40}
41 41
42void SmtpClient::newConnection(QString target, int port) 42void SmtpClient::newConnection(const QString &target, int port)
43{ 43{
44 if (sending) { 44 if (sending) {
45 qWarning("socket in use, connection refused"); 45 qWarning("socket in use, connection refused");
46 return; 46 return;
47 } 47 }
48 48
49 status = Init; 49 status = Init;
50 sending = TRUE; 50 sending = TRUE;
51 socket->connectToHost(target, port); 51 socket->connectToHost(target, port);
52 52
53 emit updateStatus(tr("DNS lookup")); 53 emit updateStatus(tr("DNS lookup"));
54} 54}
55 55
56void SmtpClient::addMail(QString from, QString subject, QStringList to, QString body) 56void SmtpClient::addMail(const QString &from, const QString &subject, const QStringList &to, const QString &body)
57{ 57{
58 RawEmail *mail = new RawEmail; 58 RawEmail *mail = new RawEmail;
59 59
60 mail->from = from; 60 mail->from = from;
61 mail->subject = subject; 61 mail->subject = subject;
62 mail->to = to; 62 mail->to = to;
63 mail->body = body; 63 mail->body = body;
64 64
65 mailList.append(mail); 65 mailList.append(mail);
66} 66}
67 67
68void SmtpClient::connectionEstablished() 68void SmtpClient::connectionEstablished()
69{ 69{
70 emit updateStatus(tr("Connection established")); 70 emit updateStatus(tr("Connection established"));
71 71
72} 72}
73 73
74void SmtpClient::errorHandling(int status) 74void SmtpClient::errorHandling(int status)
75{ 75{
76 emit errorOccurred(status); 76 emit errorOccurred(status);
77 socket->close(); 77 socket->close();
78 mailList.clear(); 78 mailList.clear();
79 sending = FALSE; 79 sending = FALSE;
80} 80}
81 81
82void SmtpClient::incomingData() 82void SmtpClient::incomingData()
83{ 83{
84 QString response; 84 QString response;
85 85
86 if (!socket->canReadLine()) 86 if (!socket->canReadLine())
87 return; 87 return;
88 88
89 response = socket->readLine(); 89 response = socket->readLine();
90 90
91 switch(status) { 91 switch(status) {
92 case Init: { 92 case Init: {
93 if (response[0] == '2') { 93 if (response[0] == '2') {
94 status = From; 94 status = From;
95 mailPtr = mailList.first(); 95 mailPtr = mailList.first();
96 *stream << "HELO there\r\n"; 96 *stream << "HELO there\r\n";
97 } else errorHandling(ErrUnknownResponse); 97 } else errorHandling(ErrUnknownResponse);
98 break; 98 break;
99 } 99 }
100 case From: { 100 case From: {
101 if (response[0] == '2') { 101 if (response[0] == '2') {
102 *stream << "MAIL FROM: " << mailPtr->from << "\r\n"; 102 *stream << "MAIL FROM: " << mailPtr->from << "\r\n";
103 status = Recv; 103 status = Recv;
104 } else errorHandling(ErrUnknownResponse); 104 } else errorHandling(ErrUnknownResponse);
105 break; 105 break;
106 } 106 }
107 case Recv: { 107 case Recv: {
108 if (response[0] == '2') { 108 if (response[0] == '2') {
109 it = mailPtr->to.begin(); 109 it = mailPtr->to.begin();
110 if (it == NULL) 110 if (it == NULL)
111 errorHandling(ErrUnknownResponse); 111 errorHandling(ErrUnknownResponse);
112 *stream << "RCPT TO: " << *it << ">\r\n"; 112 *stream << "RCPT TO: " << *it << ">\r\n";
113 status = MRcv; 113 status = MRcv;
114 } else errorHandling(ErrUnknownResponse); 114 } else errorHandling(ErrUnknownResponse);
115 break; 115 break;
116 } 116 }
117 case MRcv: { 117 case MRcv: {
118 if (response[0] == '2') { 118 if (response[0] == '2') {
119 it++; 119 it++;
120 if ( it != mailPtr->to.end() ) { 120 if ( it != mailPtr->to.end() ) {
121 *stream << "RCPT TO: <" << *it << ">\r\n"; 121 *stream << "RCPT TO: <" << *it << ">\r\n";
122 break; 122 break;
123 } else { 123 } else {
124 status = Data; 124 status = Data;
125 } 125 }
126 } else errorHandling(ErrUnknownResponse); 126 } else errorHandling(ErrUnknownResponse);
127 } 127 }
128 case Data: { 128 case Data: {
129 if (response[0] == '2') { 129 if (response[0] == '2') {
130 *stream << "DATA\r\n"; 130 *stream << "DATA\r\n";
131 status = Body; 131 status = Body;
132 emit updateStatus(tr("Sending: ") + mailPtr->subject); 132 emit updateStatus(tr("Sending: ") + mailPtr->subject);
133 } else errorHandling(ErrUnknownResponse); 133 } else errorHandling(ErrUnknownResponse);
134 break; 134 break;
135 } 135 }
136 case Body: { 136 case Body: {
137 if (response[0] == '3') { 137 if (response[0] == '3') {
138 *stream << mailPtr->body << "\r\n.\r\n"; 138 *stream << mailPtr->body << "\r\n.\r\n";
139 mailPtr = mailList.next(); 139 mailPtr = mailList.next();
140 if (mailPtr != NULL) { 140 if (mailPtr != NULL) {
141 status = From; 141 status = From;
142 } else { 142 } else {
143 status = Quit; 143 status = Quit;
144 } 144 }
145 } else errorHandling(ErrUnknownResponse); 145 } else errorHandling(ErrUnknownResponse);
146 break; 146 break;
147 } 147 }
148 case Quit: { 148 case Quit: {
149 if (response[0] == '2') { 149 if (response[0] == '2') {
150 *stream << "QUIT\r\n"; 150 *stream << "QUIT\r\n";
151 status = Done; 151 status = Done;
152 QString temp; 152 QString temp;
153 temp.setNum(mailList.count()); 153 temp.setNum(mailList.count());
154 emit updateStatus(tr("Sent ") + temp + tr(" messages")); 154 emit updateStatus(tr("Sent ") + temp + tr(" messages"));
155 emit mailSent(); 155 emit mailSent();
156 mailList.clear(); 156 mailList.clear();
157 sending = FALSE; 157 sending = FALSE;
158 socket->close(); 158 socket->close();
159 } else errorHandling(ErrUnknownResponse); 159 } else errorHandling(ErrUnknownResponse);
160 break; 160 break;
161 } 161 }
162 } 162 }
163} 163}
diff --git a/noncore/net/mailit/smtpclient.h b/noncore/net/mailit/smtpclient.h
index ca65af4..45c0703 100644
--- a/noncore/net/mailit/smtpclient.h
+++ b/noncore/net/mailit/smtpclient.h
@@ -1,75 +1,75 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef SmtpClient_H 20#ifndef SmtpClient_H
21#define SmtpClient_H 21#define SmtpClient_H
22 22
23//#include <stdio.h> 23//#include <stdio.h>
24#include <qsocket.h> 24#include <qsocket.h>
25#include <qstring.h> 25#include <qstring.h>
26#include <qobject.h> 26#include <qobject.h>
27#include <qtextstream.h> 27#include <qtextstream.h>
28#include <qstringlist.h> 28#include <qstringlist.h>
29#include <qlist.h> 29#include <qlist.h>
30 30
31struct RawEmail 31struct RawEmail
32{ 32{
33 QString from; 33 QString from;
34 QString subject; 34 QString subject;
35 QStringList to; 35 QStringList to;
36 QString body; 36 QString body;
37}; 37};
38 38
39class SmtpClient: public QObject 39class SmtpClient: public QObject
40{ 40{
41 Q_OBJECT 41 Q_OBJECT
42 42
43public: 43public:
44 SmtpClient(); 44 SmtpClient();
45 ~SmtpClient(); 45 ~SmtpClient();
46 void newConnection(QString target, int port); 46 void newConnection(const QString &target, int port);
47 void addMail(QString from, QString subject, QStringList to, QString body); 47 void addMail(const QString &from, const QString &subject, const QStringList &to, const QString &body);
48 48
49signals: 49signals:
50 void errorOccurred(int); 50 void errorOccurred(int);
51 void updateStatus(const QString &); 51 void updateStatus(const QString &);
52 void mailSent(); 52 void mailSent();
53 53
54public slots: 54public slots:
55 void errorHandling(int); 55 void errorHandling(int);
56 56
57protected slots: 57protected slots:
58 void connectionEstablished(); 58 void connectionEstablished();
59 void incomingData(); 59 void incomingData();
60 60
61private: 61private:
62 QSocket *socket; 62 QSocket *socket;
63 QTextStream *stream; 63 QTextStream *stream;
64 enum transferStatus 64 enum transferStatus
65 { 65 {
66 Init, From, Recv, MRcv, Data, Body, Quit, Done 66 Init, From, Recv, MRcv, Data, Body, Quit, Done
67 }; 67 };
68 int status; 68 int status;
69 QList<RawEmail> mailList; 69 QList<RawEmail> mailList;
70 RawEmail *mailPtr; 70 RawEmail *mailPtr;
71 bool sending; 71 bool sending;
72 QStringList::Iterator it; 72 QStringList::Iterator it;
73}; 73};
74 74
75#endif 75#endif
diff --git a/noncore/net/mailit/textparser.cpp b/noncore/net/mailit/textparser.cpp
index 3fa5f6e..e5c9f7c 100644
--- a/noncore/net/mailit/textparser.cpp
+++ b/noncore/net/mailit/textparser.cpp
@@ -1,304 +1,304 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include "textparser.h" 20#include "textparser.h"
21 21
22TextParser::TextParser(QString in, QString lineBreak) 22TextParser::TextParser(const QString &in, const QString &lineBreak)
23{ 23{
24 data = in; 24 data = in;
25 lineSep = lineBreak; 25 lineSep = lineBreak;
26 26
27 init(); 27 init();
28 createSeparators(); 28 createSeparators();
29 split(); 29 split();
30} 30}
31 31
32TextParser::TextParser(QString in, QString lineBreak, QString sep) 32TextParser::TextParser(const QString &in, const QString &lineBreak, const QString &sep)
33{ 33{
34 data = in; 34 data = in;
35 lineSep = lineBreak; 35 lineSep = lineBreak;
36 36
37 init(); 37 init();
38 separators = sep; 38 separators = sep;
39 split(); 39 split();
40} 40}
41 41
42void TextParser::init() 42void TextParser::init()
43{ 43{
44 lineCount = 0; 44 lineCount = 0;
45 linePos = 0; 45 linePos = 0;
46 totalElmCount = 0; 46 totalElmCount = 0;
47 separatorPos = -1; //not initialized 47 separatorPos = -1; //not initialized
48 wordPos = -1; //not initialized 48 wordPos = -1; //not initialized
49 sepAtLine = 0; 49 sepAtLine = 0;
50 sepAtPosElm = -1; //such that nextSep equals 0 50 sepAtPosElm = -1; //such that nextSep equals 0
51 wordAtLine = 0; 51 wordAtLine = 0;
52 wordAtPosElm = -1; //such that nextWord equals 0 52 wordAtPosElm = -1; //such that nextWord equals 0
53 atLine = 0; 53 atLine = 0;
54 atPosElm = 0; 54 atPosElm = 0;
55} 55}
56 56
57void TextParser::createSeparators() 57void TextParser::createSeparators()
58{ 58{
59 separators = " @#,.:;<>*/(){}|'?-+=_"; 59 separators = " @#,.:;<>*/(){}|'?-+=_";
60} 60}
61 61
62 /*Returns pos of given search criteria, -1 if not found */ 62/* Returns pos of given search criteria, -1 if not found */
63int TextParser::find(QString target, QChar sep, int pos, bool upperCase) 63int TextParser::find(const QString &target, QChar sep, int pos, bool upperCase)
64{ 64{
65 65
66 t_splitElm parsstr; 66 t_splitElm parsstr;
67 QString pString; 67 QString pString, pTarget;
68 68 pTarget = target;
69 int atLine = 0, atPosElm = 0; 69 int atLine = 0, atPosElm = 0;
70 70
71 getLineReference(pos,&atLine,&atPosElm); 71 getLineReference(pos,&atLine,&atPosElm);
72 72
73 for (int x = pos; x < totalElmCount; x++) 73 for (int x = pos; x < totalElmCount; x++)
74 { 74 {
75 parsstr=splitDone[atLine].elm[atPosElm++]; 75 parsstr=splitDone[atLine].elm[atPosElm++];
76 76
77 if (upperCase) 77 if (upperCase)
78 { 78 {
79 pString=parsstr.str.upper(); 79 pString=parsstr.str.upper();
80 target=target.upper(); 80 pTarget=pTarget.upper();
81 } 81 }
82 else 82 else
83 { 83 {
84 pString=parsstr.str; 84 pString=parsstr.str;
85 } 85 }
86 if ((pString == target) && (parsstr.separator == sep)) 86 if ((pString == pTarget) && (parsstr.separator == sep))
87 { 87 {
88 return x; 88 return x;
89 } 89 }
90 if (atPosElm >= splitDone[atLine].elmCount) 90 if (atPosElm >= splitDone[atLine].elmCount)
91 { //new Line 91 { //new Line
92 atLine++; 92 atLine++;
93 atPosElm = 0; 93 atPosElm = 0;
94 } 94 }
95 } 95 }
96 return -1; 96 return -1;
97} 97}
98 98
99int TextParser::elmCount() 99int TextParser::elmCount()
100{ 100{
101 return totalElmCount; 101 return totalElmCount;
102} 102}
103 103
104QChar TextParser::separatorAt(int pos) 104QChar TextParser::separatorAt(int pos)
105{ 105{
106 if (getLineReference(pos, &sepAtLine, &sepAtPosElm) == -1) 106 if (getLineReference(pos, &sepAtLine, &sepAtPosElm) == -1)
107 return QChar::null; 107 return QChar::null;
108 108
109 separatorPos = pos; 109 separatorPos = pos;
110 return splitDone[sepAtLine].elm[sepAtPosElm].separator; 110 return splitDone[sepAtLine].elm[sepAtPosElm].separator;
111} 111}
112 112
113QChar TextParser::nextSeparator() 113QChar TextParser::nextSeparator()
114{ 114{
115 sepAtPosElm++; 115 sepAtPosElm++;
116 if (splitDone[sepAtLine].elmCount <= sepAtPosElm) { 116 if (splitDone[sepAtLine].elmCount <= sepAtPosElm) {
117 sepAtLine++; 117 sepAtLine++;
118 sepAtPosElm = 0; 118 sepAtPosElm = 0;
119 } 119 }
120 120
121 separatorPos++; 121 separatorPos++;
122 return splitDone[sepAtLine].elm[sepAtPosElm].separator; 122 return splitDone[sepAtLine].elm[sepAtPosElm].separator;
123} 123}
124 124
125bool TextParser::hasNextSeparator() 125bool TextParser::hasNextSeparator()
126{ 126{
127 return ((separatorPos+1) < totalElmCount); 127 return ((separatorPos+1) < totalElmCount);
128} 128}
129 129
130QString TextParser::wordAt(int pos) 130QString TextParser::wordAt(int pos)
131{ 131{
132 if (getLineReference(pos, &wordAtLine, &wordAtPosElm) == -1) 132 if (getLineReference(pos, &wordAtLine, &wordAtPosElm) == -1)
133 return NULL; 133 return NULL;
134 134
135 wordPos = pos; 135 wordPos = pos;
136 return splitDone[wordAtLine].elm[wordAtPosElm].str; 136 return splitDone[wordAtLine].elm[wordAtPosElm].str;
137} 137}
138 138
139QString TextParser::nextWord() 139QString TextParser::nextWord()
140{ 140{
141 wordAtPosElm++; 141 wordAtPosElm++;
142 if (splitDone[wordAtLine].elmCount <= wordAtPosElm) { 142 if (splitDone[wordAtLine].elmCount <= wordAtPosElm) {
143 wordAtLine++; 143 wordAtLine++;
144 wordAtPosElm = 0; 144 wordAtPosElm = 0;
145 } 145 }
146 146
147 wordPos++; 147 wordPos++;
148 return splitDone[wordAtLine].elm[wordAtPosElm].str; 148 return splitDone[wordAtLine].elm[wordAtPosElm].str;
149} 149}
150 150
151bool TextParser::hasNextWord() 151bool TextParser::hasNextWord()
152{ 152{
153 return ((wordPos + 1) < totalElmCount); 153 return ((wordPos + 1) < totalElmCount);
154} 154}
155 155
156QString TextParser::getString(int *pos, QChar stop, bool lineEnd = false) 156QString TextParser::getString(int *pos, QChar stop, bool lineEnd = false)
157{ 157{
158 QString returnStr = wordAt(*pos); 158 QString returnStr = wordAt(*pos);
159 QChar chr = separatorAt(*pos); 159 QChar chr = separatorAt(*pos);
160 QString s; 160 QString s;
161 161
162 if (returnStr == "") 162 if (returnStr == "")
163 return ""; 163 return "";
164 if (chr == stop) 164 if (chr == stop)
165 return returnStr; 165 return returnStr;
166 166
167 if (!lineEnd) { 167 if (!lineEnd) {
168 while ((chr != stop) && hasNextWord()) { 168 while ((chr != stop) && hasNextWord()) {
169 returnStr.append(chr); 169 returnStr.append(chr);
170 returnStr += nextWord(); 170 returnStr += nextWord();
171 chr = nextSeparator(); 171 chr = nextSeparator();
172 } 172 }
173 } else { //copy from pos to end of line 173 } else { //copy from pos to end of line
174 getLineReference(*pos, &atLine, &atPosElm); 174 getLineReference(*pos, &atLine, &atPosElm);
175 returnStr = ""; 175 returnStr = "";
176 while (atPosElm < splitDone[atLine].elmCount) { 176 while (atPosElm < splitDone[atLine].elmCount) {
177 if (splitDone[atLine].elm[atPosElm].str != "") { 177 if (splitDone[atLine].elm[atPosElm].str != "") {
178 returnStr += splitDone[atLine].elm[atPosElm].str; 178 returnStr += splitDone[atLine].elm[atPosElm].str;
179 } 179 }
180 chr = splitDone[atLine].elm[atPosElm].separator; 180 chr = splitDone[atLine].elm[atPosElm].separator;
181 if (!chr.isNull() && (int) chr != 0) { 181 if (!chr.isNull() && (int) chr != 0) {
182 returnStr.append(splitDone[atLine].elm[atPosElm].separator); 182 returnStr.append(splitDone[atLine].elm[atPosElm].separator);
183 } 183 }
184 atPosElm++; 184 atPosElm++;
185 } 185 }
186 } 186 }
187 187
188 *pos = wordPos; 188 *pos = wordPos;
189 return returnStr; 189 return returnStr;
190} 190}
191 191
192QString TextParser::getNextLine() 192QString TextParser::getNextLine()
193{ 193{
194 atLine++; 194 atLine++;
195 atPosElm = 0; 195 atPosElm = 0;
196 if (atLine < lineCount) 196 if (atLine < lineCount)
197 return splitDone[atLine].str; 197 return splitDone[atLine].str;
198 return ""; 198 return "";
199} 199}
200 200
201bool TextParser::hasNextLine() 201bool TextParser::hasNextLine()
202{ 202{
203 if (atLine+1 < lineCount) 203 if (atLine+1 < lineCount)
204 return TRUE;; 204 return TRUE;;
205 return FALSE; 205 return FALSE;
206} 206}
207 207
208int TextParser::endLinePos(int pos) 208int TextParser::endLinePos(int pos)
209{ 209{
210 if ( (getLineReference(pos, &atLine, &atPosElm)) == -1) 210 if ( (getLineReference(pos, &atLine, &atPosElm)) == -1)
211 return -1; 211 return -1;
212 212
213 return (pos + (splitDone[atLine].elmCount - atPosElm) + 1); 213 return (pos + (splitDone[atLine].elmCount - atPosElm) + 1);
214} 214}
215 215
216int TextParser::getLineReference(int pos, int *line, int *inLinePos) 216int TextParser::getLineReference(int pos, int *line, int *inLinePos)
217{ 217{
218 int currentPos = 0; 218 int currentPos = 0;
219 219
220 for (int x = 0; x < lineCount; x++) { 220 for (int x = 0; x < lineCount; x++) {
221 if ( currentPos + splitDone[x].elmCount > pos) { 221 if ( currentPos + splitDone[x].elmCount > pos) {
222 *line = x; 222 *line = x;
223 *inLinePos = pos - currentPos; 223 *inLinePos = pos - currentPos;
224 return 0; //pos found okay 224 return 0; //pos found okay
225 } 225 }
226 currentPos += splitDone[x].elmCount; 226 currentPos += splitDone[x].elmCount;
227 } 227 }
228 return -1; //no reference found 228 return -1; //no reference found
229} 229}
230 230
231void TextParser::split() 231void TextParser::split()
232{ 232{
233 t_splitLine newLine; 233 t_splitLine newLine;
234 234
235 while ((uint) linePos < data.length()) { 235 while ((uint) linePos < data.length()) {
236 newLine = nextLine(); 236 newLine = nextLine();
237 splitDone[lineCount] = splitLine(newLine); 237 splitDone[lineCount] = splitLine(newLine);
238 totalElmCount += splitDone[lineCount].elmCount; 238 totalElmCount += splitDone[lineCount].elmCount;
239 lineCount++; 239 lineCount++;
240 } 240 }
241} 241}
242 242
243t_splitLine TextParser::splitLine(t_splitLine line) 243t_splitLine TextParser::splitLine(t_splitLine line)
244{ 244{
245 uint pos = 0; 245 uint pos = 0;
246 uint elmCount = 0; 246 uint elmCount = 0;
247 t_splitLine tempLine = line; 247 t_splitLine tempLine = line;
248 248
249 tempLine.str = line.str.simplifyWhiteSpace(); 249 tempLine.str = line.str.simplifyWhiteSpace();
250 tempLine.elm[0].str = ""; 250 tempLine.elm[0].str = "";
251 while ( pos < line.str.length() ) { 251 while ( pos < line.str.length() ) {
252 if ( isSeparator(tempLine.str[pos]) ) { 252 if ( isSeparator(tempLine.str[pos]) ) {
253 tempLine.elm[elmCount].separator = tempLine.str[pos]; 253 tempLine.elm[elmCount].separator = tempLine.str[pos];
254 elmCount++; 254 elmCount++;
255 pos++; 255 pos++;
256 while (tempLine.str[pos] == ' ') 256 while (tempLine.str[pos] == ' ')
257 pos++; 257 pos++;
258 if (pos > line.str.length()) 258 if (pos > line.str.length())
259 elmCount--; 259 elmCount--;
260 tempLine.elm[elmCount].str = ""; 260 tempLine.elm[elmCount].str = "";
261 } else { 261 } else {
262 if (!tempLine.str[pos].isNull()) 262 if (!tempLine.str[pos].isNull())
263 tempLine.elm[elmCount].str += tempLine.str[pos]; 263 tempLine.elm[elmCount].str += tempLine.str[pos];
264 pos++; 264 pos++;
265 } 265 }
266 } 266 }
267 267
268 tempLine.elmCount = elmCount + 1; 268 tempLine.elmCount = elmCount + 1;
269 return tempLine; 269 return tempLine;
270} 270}
271 271
272bool TextParser::isSeparator(QChar chr) 272bool TextParser::isSeparator(QChar chr)
273{ 273{
274 for (uint x = 0; x < separators.length(); x++) { 274 for (uint x = 0; x < separators.length(); x++) {
275 if (chr == separators[x]) 275 if (chr == separators[x])
276 return true; 276 return true;
277 } 277 }
278 return false; 278 return false;
279} 279}
280 280
281t_splitLine TextParser::nextLine() 281t_splitLine TextParser::nextLine()
282{ 282{
283 int newLinePos; 283 int newLinePos;
284 t_splitLine lineType; 284 t_splitLine lineType;
285 285
286 newLinePos = data.find(lineSep, linePos); 286 newLinePos = data.find(lineSep, linePos);
287 287
288 lineType.lineType = NewLine; 288 lineType.lineType = NewLine;
289 lineType.str = ""; 289 lineType.str = "";
290 290
291 if (newLinePos == -1) { 291 if (newLinePos == -1) {
292 newLinePos = data.length(); 292 newLinePos = data.length();
293 lineType.lineType = LastLine; 293 lineType.lineType = LastLine;
294 } 294 }
295 295
296 for (int x = linePos; x < newLinePos; x++) 296 for (int x = linePos; x < newLinePos; x++)
297 lineType.str += data[x]; 297 lineType.str += data[x];
298 298
299 linePos = newLinePos; 299 linePos = newLinePos;
300 if ((uint) linePos < data.length()) //if not EOF, add length of lineSep 300 if ((uint) linePos < data.length()) //if not EOF, add length of lineSep
301 linePos += lineSep.length(); 301 linePos += lineSep.length();
302 302
303 return lineType; 303 return lineType;
304} 304}
diff --git a/noncore/net/mailit/textparser.h b/noncore/net/mailit/textparser.h
index c5e88a0..03bb6d5 100644
--- a/noncore/net/mailit/textparser.h
+++ b/noncore/net/mailit/textparser.h
@@ -1,85 +1,85 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include <qobject.h> 20#include <qobject.h>
21#include <qstring.h> 21#include <qstring.h>
22 22
23#ifndef TEXTPARSER_H 23#ifndef TEXTPARSER_H
24#define TEXTPARSER_H 24#define TEXTPARSER_H
25 25
26enum t_strType { Word, Number}; 26enum t_strType { Word, Number};
27enum t_lineType {NewLine, LastLine}; 27enum t_lineType {NewLine, LastLine};
28 28
29const uint MAX_ELEMENTS = 200; //Should be dynamic 29const uint MAX_ELEMENTS = 200; //Should be dynamic
30const uint MAX_LINES = 500; //Should be dynamic 30const uint MAX_LINES = 500; //Should be dynamic
31 31
32struct t_splitElm 32struct t_splitElm
33{ 33{
34 QChar separator; 34 QChar separator;
35 int strType; 35 int strType;
36 QString str; 36 QString str;
37}; 37};
38 38
39struct t_splitLine 39struct t_splitLine
40{ 40{
41 t_lineType lineType; 41 t_lineType lineType;
42 QString str; //a bit redundant... 42 QString str; //a bit redundant...
43 t_splitElm elm[MAX_ELEMENTS]; 43 t_splitElm elm[MAX_ELEMENTS];
44 int elmCount; 44 int elmCount;
45}; 45};
46 46
47class TextParser: public QObject 47class TextParser: public QObject
48{ 48{
49 Q_OBJECT 49 Q_OBJECT
50 50
51public: 51public:
52 TextParser(QString in, QString lineBreak); 52 TextParser(const QString &in, const QString &lineBreak);
53 TextParser(QString in, QString lineBreak, QString sep); 53 TextParser(const QString &in, const QString &lineBreak, const QString &sep);
54 int find(QString target, QChar sep, int pos, bool upperCase); 54 int find(const QString &target, QChar sep, int pos, bool upperCase);
55 int elmCount(); 55 int elmCount();
56 QChar separatorAt(int pos); 56 QChar separatorAt(int pos);
57 QChar nextSeparator(); 57 QChar nextSeparator();
58 bool hasNextSeparator(); 58 bool hasNextSeparator();
59 QString wordAt(int pos); 59 QString wordAt(int pos);
60 QString nextWord(); 60 QString nextWord();
61 bool hasNextWord(); 61 bool hasNextWord();
62 QString getString(int *pos, QChar stop, bool lineEnd); 62 QString getString(int *pos, QChar stop, bool lineEnd);
63 QString getNextLine(); 63 QString getNextLine();
64 bool hasNextLine(); 64 bool hasNextLine();
65 int endLinePos(int pos); 65 int endLinePos(int pos);
66 66
67private: 67private:
68 void init(); 68 void init();
69 void createSeparators(); 69 void createSeparators();
70 t_splitLine nextLine(); 70 t_splitLine nextLine();
71 void split(); 71 void split();
72 t_splitLine splitLine(t_splitLine line); 72 t_splitLine splitLine(t_splitLine line);
73 bool isSeparator(QChar chr); 73 bool isSeparator(QChar chr);
74 t_splitLine splitDone[MAX_LINES]; 74 t_splitLine splitDone[MAX_LINES];
75 int getLineReference(int pos, int *line, int *inLinePos); 75 int getLineReference(int pos, int *line, int *inLinePos);
76 76
77 int lineCount, linePos, totalElmCount; 77 int lineCount, linePos, totalElmCount;
78 int separatorPos, wordPos; 78 int separatorPos, wordPos;
79 QString data, separators, lineSep; 79 QString data, separators, lineSep;
80 int sepAtLine, sepAtPosElm; 80 int sepAtLine, sepAtPosElm;
81 int wordAtLine, wordAtPosElm; 81 int wordAtLine, wordAtPosElm;
82 int atLine, atPosElm; 82 int atLine, atPosElm;
83}; 83};
84 84
85#endif 85#endif
diff --git a/noncore/unsupported/mailit/addresslist.cpp b/noncore/unsupported/mailit/addresslist.cpp
index 7d60ebf..18d14bc 100644
--- a/noncore/unsupported/mailit/addresslist.cpp
+++ b/noncore/unsupported/mailit/addresslist.cpp
@@ -1,161 +1,161 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include <qfile.h> 20#include <qfile.h>
21#include <qtextstream.h> 21#include <qtextstream.h>
22#include <opie/ocontactaccess.h> 22#include <opie/ocontactaccess.h>
23#include <opie/ocontact.h> 23#include <opie/ocontact.h>
24 24
25#include "addresslist.h" 25#include "addresslist.h"
26 26
27AddressList::AddressList() 27AddressList::AddressList()
28{ 28{
29 addresses.setAutoDelete(TRUE); 29 addresses.setAutoDelete(TRUE);
30 read(); 30 read();
31 dirty = FALSE; 31 dirty = FALSE;
32} 32}
33 33
34AddressList::~AddressList() 34AddressList::~AddressList()
35{ 35{
36 addresses.clear(); 36 addresses.clear();
37} 37}
38 38
39void AddressList::addContact(QString email, QString name) 39void AddressList::addContact(const QString &email, const QString &name)
40{ 40{
41 //skip if not a valid email address, 41 //skip if not a valid email address,
42 if (email.find( '@') == -1) 42 if (email.find( '@') == -1)
43 return; 43 return;
44 44
45 if ( ! containsEmail(email) ) { 45 if ( ! containsEmail(email) ) {
46 Contact *in = new Contact; 46 Contact *in = new Contact;
47 in->email = email; 47 in->email = email;
48 in->name = name; 48 in->name = name;
49 addresses.append(in); 49 addresses.append(in);
50 dirty = TRUE; 50 dirty = TRUE;
51 } 51 }
52} 52}
53 53
54bool AddressList::containsEmail(QString email) 54bool AddressList::containsEmail(const QString &email)
55{ 55{
56 return ( getEmailRef(email) != -1 ); 56 return ( getEmailRef(email) != -1 );
57} 57}
58 58
59bool AddressList::containsName(QString name) 59bool AddressList::containsName(const QString &name)
60{ 60{
61 return ( getNameRef(name) != -1 ); 61 return ( getNameRef(name) != -1 );
62} 62}
63 63
64QString AddressList::getNameByEmail(QString email) 64QString AddressList::getNameByEmail(const QString &email)
65{ 65{
66 int pos = getEmailRef(email); 66 int pos = getEmailRef(email);
67 if (pos != -1) { 67 if (pos != -1) {
68 Contact *ptr = addresses.at(pos); 68 Contact *ptr = addresses.at(pos);
69 return ptr->name; 69 return ptr->name;
70 } 70 }
71 71
72 return NULL; 72 return NULL;
73} 73}
74 74
75QString AddressList::getEmailByName(QString name) 75QString AddressList::getEmailByName(const QString &name)
76{ 76{
77 int pos = getNameRef(name); 77 int pos = getNameRef(name);
78 if (pos != -1) { 78 if (pos != -1) {
79 Contact *ptr = addresses.at(pos); 79 Contact *ptr = addresses.at(pos);
80 return ptr->email; 80 return ptr->email;
81 } 81 }
82 82
83 return NULL; 83 return NULL;
84} 84}
85 85
86int AddressList::getEmailRef(QString email) 86int AddressList::getEmailRef(const QString &email)
87{ 87{
88 int pos = 0; 88 int pos = 0;
89 Contact *ptr; 89 Contact *ptr;
90 90
91 for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) { 91 for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) {
92 if (ptr->email == email) 92 if (ptr->email == email)
93 return pos; 93 return pos;
94 pos++; 94 pos++;
95 } 95 }
96 return -1; 96 return -1;
97} 97}
98 98
99int AddressList::getNameRef(QString name) 99int AddressList::getNameRef(const QString &name)
100{ 100{
101 int pos = 0; 101 int pos = 0;
102 Contact *ptr; 102 Contact *ptr;
103 103
104 for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) { 104 for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) {
105 if (ptr->name == name) 105 if (ptr->name == name)
106 return pos; 106 return pos;
107 pos++; 107 pos++;
108 } 108 }
109 return -1; 109 return -1;
110} 110}
111 111
112QList<Contact>* AddressList::getContactList() 112QList<Contact>* AddressList::getContactList()
113{ 113{
114 return &addresses; 114 return &addresses;
115} 115}
116 116
117void AddressList::read() 117void AddressList::read()
118{ 118{
119 OContactAccess::List::Iterator it; 119 OContactAccess::List::Iterator it;
120 120
121 QString lineEmail, lineName, email, name; 121 QString lineEmail, lineName, email, name;
122 OContactAccess m_contactdb("mailit"); 122 OContactAccess m_contactdb("mailit");
123 OContactAccess::List m_list = m_contactdb.sorted( true, 0, 0, 0 ); 123 OContactAccess::List m_list = m_contactdb.sorted( true, 0, 0, 0 );
124 //OContact* oc;(*it).defaultEmail() 124 //OContact* oc;(*it).defaultEmail()
125 125
126 for ( it = m_list.begin(); it != m_list.end(); ++it ) 126 for ( it = m_list.begin(); it != m_list.end(); ++it )
127 { 127 {
128 //oc=(OContact*) it; 128 //oc=(OContact*) it;
129 if ((*it).defaultEmail().length()!=0) 129 if ((*it).defaultEmail().length()!=0)
130 addContact((*it).defaultEmail(),(*it).fileAs()); 130 addContact((*it).defaultEmail(),(*it).fileAs());
131 } 131 }
132 132
133 /*if (! f.open(IO_ReadOnly) ) 133 /*if (! f.open(IO_ReadOnly) )
134 return; 134 return;
135 135
136 QTextStream stream(&f); 136 QTextStream stream(&f);
137 137
138 while (! stream.atEnd() ) { 138 while (! stream.atEnd() ) {
139 lineEmail = stream.readLine(); 139 lineEmail = stream.readLine();
140 if (! stream.atEnd() ) 140 if (! stream.atEnd() )
141 lineName = stream.readLine(); 141 lineName = stream.readLine();
142 else return; 142 else return;
143 143
144 email = getRightString(lineEmail); 144 email = getRightString(lineEmail);
145 name = getRightString(lineName); 145 name = getRightString(lineName);
146 addContact(email, name); 146 addContact(email, name);
147 } 147 }
148 f.close();*/ 148 f.close();*/
149} 149}
150 150
151QString AddressList::getRightString(QString in) 151QString AddressList::getRightString(const QString &in)
152{ 152{
153 QString out = ""; 153 QString out = "";
154 154
155 int pos = in.find('='); 155 int pos = in.find('=');
156 if (pos != -1) { 156 if (pos != -1) {
157 out = in.mid(pos+1).stripWhiteSpace(); 157 out = in.mid(pos+1).stripWhiteSpace();
158 } 158 }
159 return out; 159 return out;
160} 160}
161 161
diff --git a/noncore/unsupported/mailit/addresslist.h b/noncore/unsupported/mailit/addresslist.h
index 99cef9a..b46d467 100644
--- a/noncore/unsupported/mailit/addresslist.h
+++ b/noncore/unsupported/mailit/addresslist.h
@@ -1,58 +1,58 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef ADDRESSLIST_H 20#ifndef ADDRESSLIST_H
21#define ADDRESSLIST_H 21#define ADDRESSLIST_H
22 22
23#include <qobject.h> 23#include <qobject.h>
24#include <qlist.h> 24#include <qlist.h>
25 25
26struct Contact 26struct Contact
27{ 27{
28 QString email; 28 QString email;
29 QString name; 29 QString name;
30}; 30};
31 31
32class AddressList : public QObject 32class AddressList : public QObject
33{ 33{
34 Q_OBJECT 34 Q_OBJECT
35 35
36public: 36public:
37 AddressList(); 37 AddressList();
38 ~AddressList(); 38 ~AddressList();
39 void addContact(QString email, QString name); 39 void addContact(const QString &email, const QString &name);
40 bool containsEmail(QString email); 40 bool containsEmail(const QString &email);
41 bool containsName(QString name); 41 bool containsName(const QString &name);
42 QString getNameByEmail(QString email); 42 QString getNameByEmail(const QString &email);
43 QString getEmailByName(QString name); 43 QString getEmailByName(const QString &name);
44 QList<Contact>* getContactList(); 44 QList<Contact>* getContactList();
45 45
46private: 46private:
47 int getEmailRef(QString email); 47 int getEmailRef(const QString &email);
48 int getNameRef(QString name); 48 int getNameRef(const QString &name);
49 QString getRightString(QString in); 49 QString getRightString(const QString &in);
50 void read(); 50 void read();
51 51
52private: 52private:
53 QList<Contact> addresses; 53 QList<Contact> addresses;
54 QString filename; 54 QString filename;
55 bool dirty; 55 bool dirty;
56}; 56};
57 57
58#endif 58#endif
diff --git a/noncore/unsupported/mailit/emailclient.cpp b/noncore/unsupported/mailit/emailclient.cpp
index b039cc4..2102ba7 100644
--- a/noncore/unsupported/mailit/emailclient.cpp
+++ b/noncore/unsupported/mailit/emailclient.cpp
@@ -176,861 +176,862 @@ void EmailClient::init()
176// grid_2->setMargin( 11 ); 176// grid_2->setMargin( 11 );
177 177
178 inboxView = new QListView( widget, "inboxView" ); 178 inboxView = new QListView( widget, "inboxView" );
179 inboxView->addColumn( tr( "From" ) ); 179 inboxView->addColumn( tr( "From" ) );
180 inboxView->addColumn( tr( "Subject" ) ); 180 inboxView->addColumn( tr( "Subject" ) );
181 inboxView->addColumn( tr( "Date" ) ); 181 inboxView->addColumn( tr( "Date" ) );
182 inboxView->setMinimumSize( QSize( 0, 0 ) ); 182 inboxView->setMinimumSize( QSize( 0, 0 ) );
183 inboxView->setAllColumnsShowFocus(TRUE); 183 inboxView->setAllColumnsShowFocus(TRUE);
184 QWhatsThis::add(inboxView,QWidget::tr("This is the inbox view.\n" 184 QWhatsThis::add(inboxView,QWidget::tr("This is the inbox view.\n"
185 "It keeps the fetched mail which can be \n" 185 "It keeps the fetched mail which can be \n"
186 "viewed by double clicking the entry.\n" 186 "viewed by double clicking the entry.\n"
187 "blue attachment icon shows whether this \n" 187 "blue attachment icon shows whether this \n"
188 "mailhas attachments.\n")); 188 "mailhas attachments.\n"));
189 189
190 grid_2->addWidget( inboxView, 2, 0 ); 190 grid_2->addWidget( inboxView, 2, 0 );
191 mailboxView->addTab( widget, "mailit/inbox", tr( "Inbox" ) ); 191 mailboxView->addTab( widget, "mailit/inbox", tr( "Inbox" ) );
192 192
193 QWidget* widget_2 = new QWidget( mailboxView, "widget_2" ); 193 QWidget* widget_2 = new QWidget( mailboxView, "widget_2" );
194 grid_3 = new QGridLayout( widget_2 ); 194 grid_3 = new QGridLayout( widget_2 );
195// grid_3->setSpacing(6); 195// grid_3->setSpacing(6);
196// grid_3->setMargin( 11 ); 196// grid_3->setMargin( 11 );
197 197
198 outboxView = new QListView( widget_2, "outboxView" ); 198 outboxView = new QListView( widget_2, "outboxView" );
199 outboxView->addColumn( tr( "To" ) ); 199 outboxView->addColumn( tr( "To" ) );
200 outboxView->addColumn( tr( "Subject" ) ); 200 outboxView->addColumn( tr( "Subject" ) );
201 outboxView->setAllColumnsShowFocus(TRUE); 201 outboxView->setAllColumnsShowFocus(TRUE);
202 202
203 QWhatsThis::add(outboxView,QWidget::tr("This is the outbox view.\n" 203 QWhatsThis::add(outboxView,QWidget::tr("This is the outbox view.\n"
204 "It keeps the queued mails to send which can be \n" 204 "It keeps the queued mails to send which can be \n"
205 "reviewed by double clicking the entry.")); 205 "reviewed by double clicking the entry."));
206 grid_3->addWidget( outboxView, 0, 0 ); 206 grid_3->addWidget( outboxView, 0, 0 );
207 mailboxView->addTab( widget_2,"mailit/outbox", tr( "Outbox" ) ); 207 mailboxView->addTab( widget_2,"mailit/outbox", tr( "Outbox" ) );
208 208
209 setCentralWidget(mailboxView); 209 setCentralWidget(mailboxView);
210 210
211} 211}
212 212
213void EmailClient::initStatusBar(QWidget* parent) 213void EmailClient::initStatusBar(QWidget* parent)
214{ 214{
215 statusBar = new QStatusBar(parent); 215 statusBar = new QStatusBar(parent);
216 statusBar->setSizeGripEnabled(FALSE); 216 statusBar->setSizeGripEnabled(FALSE);
217 217
218 status1Label = new QLabel( tr("Idle"), statusBar); 218 status1Label = new QLabel( tr("Idle"), statusBar);
219 status2Label = new QLabel("", statusBar); 219 status2Label = new QLabel("", statusBar);
220 connect(emailHandler, SIGNAL(updatePopStatus(const QString &)), 220 connect(emailHandler, SIGNAL(updatePopStatus(const QString &)),
221 status2Label, SLOT(setText(const QString &)) ); 221 status2Label, SLOT(setText(const QString &)) );
222 connect(emailHandler, SIGNAL(updateSmtpStatus(const QString &)), 222 connect(emailHandler, SIGNAL(updateSmtpStatus(const QString &)),
223 status2Label, SLOT(setText(const QString &)) ); 223 status2Label, SLOT(setText(const QString &)) );
224 224
225 progressBar = new QProgressBar(statusBar); 225 progressBar = new QProgressBar(statusBar);
226 226
227 connect(emailHandler, SIGNAL(mailboxSize(int)), 227 connect(emailHandler, SIGNAL(mailboxSize(int)),
228 this, SLOT(setTotalSize(int)) ); 228 this, SLOT(setTotalSize(int)) );
229 connect(emailHandler, SIGNAL(currentMailSize(int)), 229 connect(emailHandler, SIGNAL(currentMailSize(int)),
230 this, SLOT(setMailSize(int)) ); 230 this, SLOT(setMailSize(int)) );
231 connect(emailHandler, SIGNAL(downloadedSize(int)), 231 connect(emailHandler, SIGNAL(downloadedSize(int)),
232 this, SLOT(setDownloadedSize(int)) ); 232 this, SLOT(setDownloadedSize(int)) );
233 233
234 statusBar->addWidget(status1Label); 234 statusBar->addWidget(status1Label);
235 statusBar->addWidget(progressBar); 235 statusBar->addWidget(progressBar);
236 statusBar->addWidget(status2Label); 236 statusBar->addWidget(status2Label);
237 237
238} 238}
239 239
240void EmailClient::compose() 240void EmailClient::compose()
241{ 241{
242 emit composeRequested(); 242 emit composeRequested();
243} 243}
244 244
245void EmailClient::cancel() 245void EmailClient::cancel()
246{ 246{
247 emailHandler->cancel(); 247 emailHandler->cancel();
248} 248}
249 249
250AddressList* EmailClient::getAdrListRef() 250AddressList* EmailClient::getAdrListRef()
251{ 251{
252 return addressList; 252 return addressList;
253} 253}
254 254
255//this needs to be rewritten to syncronize with outboxView 255//this needs to be rewritten to syncronize with outboxView
256void EmailClient::enqueMail(const Email &mail) 256void EmailClient::enqueMail(const Email &mail)
257{ 257{
258 if (accountList.count() == 0) { 258 if (accountList.count() == 0) {
259 QMessageBox::warning(qApp->activeWindow(), 259 QMessageBox::warning(qApp->activeWindow(),
260 tr("No account selected"), tr("You must create an account"), "OK\n"); 260 tr("No account selected"), tr("You must create an account"), "OK\n");
261 return; 261 return;
262 } 262 }
263 263
264 if (accountList.count() > 0) { 264 if (accountList.count() > 0) {
265 currentAccount = accountList.first(); 265 currentAccount = accountList.first();
266 qWarning("using account " + currentAccount->name); 266 qWarning("using account " + currentAccount->name);
267 } 267 }
268 268
269 Email addMail = mail; 269 Email addMail = mail;
270 addMail.from = currentAccount->name; 270 addMail.from = currentAccount->name;
271 addMail.fromMail = currentAccount->emailAddress; 271 addMail.fromMail = currentAccount->emailAddress;
272 addMail.rawMail.prepend("From: " + addMail.from + "<" + addMail.fromMail + ">\n"); 272 addMail.rawMail.prepend("From: " + addMail.from + "<" + addMail.fromMail + ">\n");
273 item = new EmailListItem(outboxView, addMail, false); 273 item = new EmailListItem(outboxView, addMail, false);
274 274
275 mailboxView->setCurrentTab(1); 275 mailboxView->setCurrentTab(1);
276 276
277} 277}
278 278
279void EmailClient::sendQuedMail() 279void EmailClient::sendQuedMail()
280{ 280{
281 int count = 0; 281 int count = 0;
282 282
283 if (accountList.count() == 0) { 283 if (accountList.count() == 0) {
284 QMessageBox::warning(qApp->activeWindow(), "No account selected", "You must create an account", "OK\n"); 284 QMessageBox::warning(qApp->activeWindow(), "No account selected", "You must create an account", "OK\n");
285 return; 285 return;
286 } 286 }
287 //traverse listview, find messages to send 287 //traverse listview, find messages to send
288 if (! sending) { 288 if (! sending) {
289 item = (EmailListItem *) outboxView->firstChild(); 289 item = (EmailListItem *) outboxView->firstChild();
290 if (item != NULL) { 290 if (item != NULL) {
291 while (item != NULL) { 291 while (item != NULL) {
292 quedMessages.append(item->getMail()); 292 quedMessages.append(item->getMail());
293 item = (EmailListItem *) item->nextSibling(); 293 item = (EmailListItem *) item->nextSibling();
294 count++; 294 count++;
295 } 295 }
296 setMailAccount(); 296 setMailAccount();
297 emailHandler->sendMail(&quedMessages); 297 emailHandler->sendMail(&quedMessages);
298 sending = TRUE; 298 sending = TRUE;
299 sendMailButton->setEnabled(FALSE); 299 sendMailButton->setEnabled(FALSE);
300 cancelButton->setEnabled(TRUE); 300 cancelButton->setEnabled(TRUE);
301 } else { 301 } else {
302 qWarning("sendQuedMail(): no messages to send"); 302 qWarning("sendQuedMail(): no messages to send");
303 } 303 }
304 } 304 }
305} 305}
306 306
307void EmailClient::setMailAccount() 307void EmailClient::setMailAccount()
308{ 308{
309 emailHandler->setAccount(*currentAccount); 309 emailHandler->setAccount(*currentAccount);
310} 310}
311 311
312void EmailClient::mailSent() 312void EmailClient::mailSent()
313{ 313{
314 sending = FALSE; 314 sending = FALSE;
315 sendMailButton->setEnabled(TRUE); 315 sendMailButton->setEnabled(TRUE);
316 316
317 quedMessages.clear(); 317 quedMessages.clear();
318 outboxView->clear(); //should be moved to an sentBox 318 outboxView->clear(); //should be moved to an sentBox
319} 319}
320 320
321void EmailClient::getNewMail() { 321void EmailClient::getNewMail() {
322 322
323 if (accountList.count() == 0) { 323 if (accountList.count() == 0) {
324 QMessageBox::warning(qApp->activeWindow(),"No account selected", 324 QMessageBox::warning(qApp->activeWindow(),"No account selected",
325 "You must create an account", "OK\n"); 325 "You must create an account", "OK\n");
326 return; 326 return;
327 } 327 }
328 328
329 setMailAccount(); 329 setMailAccount();
330 330
331 receiving = TRUE; 331 receiving = TRUE;
332 previewingMail = TRUE; 332 previewingMail = TRUE;
333 getMailButton->setEnabled(FALSE); 333 getMailButton->setEnabled(FALSE);
334 cancelButton->setEnabled(TRUE); 334 cancelButton->setEnabled(TRUE);
335 selectAccountMenu->setEnabled(FALSE); 335 selectAccountMenu->setEnabled(FALSE);
336 336
337 status1Label->setText(currentAccount->accountName + " headers"); 337 status1Label->setText(currentAccount->accountName + " headers");
338 progressBar->reset(); 338 progressBar->reset();
339 339
340 //get any previous mails not downloaded and add to queue 340 //get any previous mails not downloaded and add to queue
341 /*mailDownloadList.clear(); 341 /*mailDownloadList.clear();
342 Email *mailPtr; 342 Email *mailPtr;
343 item = (EmailListItem *) inboxView->firstChild(); 343 item = (EmailListItem *) inboxView->firstChild();
344 while (item != NULL) { 344 while (item != NULL) {
345 mailPtr = item->getMail(); 345 mailPtr = item->getMail();
346 if ( (!mailPtr->downloaded) && (mailPtr->fromAccountId == currentAccount->id) ) { 346 if ( (!mailPtr->downloaded) && (mailPtr->fromAccountId == currentAccount->id) ) {
347 mailDownloadList.sizeInsert(mailPtr->serverId, mailPtr->size); 347 mailDownloadList.sizeInsert(mailPtr->serverId, mailPtr->size);
348 } 348 }
349 item = (EmailListItem *) item->nextSibling(); 349 item = (EmailListItem *) item->nextSibling();
350 }*/ 350 }*/
351 351
352 emailHandler->getMailHeaders(); 352 emailHandler->getMailHeaders();
353 353
354} 354}
355 355
356void EmailClient::getAllNewMail() 356void EmailClient::getAllNewMail()
357{ 357{
358 allAccounts = TRUE; 358 allAccounts = TRUE;
359 currentAccount = accountList.first(); 359 currentAccount = accountList.first();
360 getNewMail(); 360 getNewMail();
361} 361}
362 362
363void EmailClient::mailArrived(const Email &mail, bool fromDisk) 363void EmailClient::mailArrived(const Email &mail, bool fromDisk)
364{ 364{
365 Enclosure *ePtr; 365 Enclosure *ePtr;
366 Email newMail; 366 Email newMail;
367 int thisMailId; 367 int thisMailId;
368 emailHandler->parse(mail.rawMail, lineShift, &newMail); 368 emailHandler->parse( mail.rawMail, lineShift, &newMail);
369 mailconf->setGroup(newMail.id); 369 mailconf->setGroup(newMail.id);
370 370
371 if (fromDisk) 371 if (fromDisk)
372 { 372 {
373 373
374 newMail.downloaded = mailconf->readBoolEntry("downloaded"); 374 newMail.downloaded = mailconf->readBoolEntry("downloaded");
375 newMail.size = mailconf->readNumEntry("size"); 375 newMail.size = mailconf->readNumEntry("size");
376 newMail.serverId = mailconf->readNumEntry("serverid"); 376 newMail.serverId = mailconf->readNumEntry("serverid");
377 newMail.fromAccountId = mailconf->readNumEntry("fromaccountid"); 377 newMail.fromAccountId = mailconf->readNumEntry("fromaccountid");
378 } 378 }
379 else 379 else
380 { //mail arrived from server 380 { //mail arrived from server
381 381
382 newMail.serverId = mail.serverId; 382 newMail.serverId = mail.serverId;
383 newMail.size = mail.size; 383 newMail.size = mail.size;
384 newMail.downloaded = mail.downloaded; 384 newMail.downloaded = mail.downloaded;
385 385
386 newMail.fromAccountId = emailHandler->getAccount()->id; 386 newMail.fromAccountId = emailHandler->getAccount()->id;
387 mailconf->writeEntry("fromaccountid", newMail.fromAccountId); 387 mailconf->writeEntry("fromaccountid", newMail.fromAccountId);
388 } 388 }
389 389
390 //add if read or not 390 //add if read or not
391 newMail.read = mailconf->readBoolEntry("mailread"); 391 newMail.read = mailconf->readBoolEntry("mailread");
392 392
393 //check if new mail 393 //check if new mail
394 if ( (thisMailId = mailconf->readNumEntry("internalmailid", -1)) == -1) { 394 if ( (thisMailId = mailconf->readNumEntry("internalmailid", -1)) == -1) {
395 thisMailId = mailIdCount; 395 thisMailId = mailIdCount;
396 mailIdCount++; 396 mailIdCount++;
397 397
398 //set server count, so that if the user aborts, the new 398 //set server count, so that if the user aborts, the new
399 //header is not reloaded 399 //header is not reloaded
400 if ((currentAccount)&&(currentAccount->synchronize)) 400 if ((currentAccount)&&(currentAccount->synchronize))
401 currentAccount->lastServerMailCount++; 401 currentAccount->lastServerMailCount++;
402 402
403 mailconf->writeEntry("internalmailid", thisMailId); 403 mailconf->writeEntry("internalmailid", thisMailId);
404 mailconf->writeEntry("downloaded", newMail.downloaded); 404 mailconf->writeEntry("downloaded", newMail.downloaded);
405 mailconf->writeEntry("size", (int) newMail.size); 405 mailconf->writeEntry("size", (int) newMail.size);
406 mailconf->writeEntry("serverid", newMail.serverId); 406 mailconf->writeEntry("serverid", newMail.serverId);
407 407
408 //addressList->addContact(newMail.fromMail, newMail.from); 408 //addressList->addContact(newMail.fromMail, newMail.from);
409 } 409 }
410 410
411 mailconf->writeEntry("downloaded", newMail.downloaded); 411 mailconf->writeEntry("downloaded", newMail.downloaded);
412 412
413 QString stringMailId; 413 QString stringMailId;
414 stringMailId.setNum(thisMailId); 414 stringMailId.setNum(thisMailId);
415 //see if any attatchments needs to be stored 415 //see if any attatchments needs to be stored
416 416
417 for ( ePtr=newMail.files.first(); ePtr != 0; ePtr=newMail.files.next() ) { 417 for ( ePtr=newMail.files.first(); ePtr != 0; ePtr=newMail.files.next() ) {
418 QString stringId; 418 QString stringId;
419 stringId.setNum(ePtr->id); 419 stringId.setNum(ePtr->id);
420 420
421 int id = mailconf->readNumEntry("enclosureid_" + stringId); 421 int id = mailconf->readNumEntry("enclosureid_" + stringId);
422 if (id != ePtr->id) { //new entry 422 if (id != ePtr->id) { //new entry
423 mailconf->writeEntry("enclosureid_" + stringId, ePtr->id); 423 mailconf->writeEntry("enclosureid_" + stringId, ePtr->id);
424 mailconf->writeEntry("name_" + stringId, ePtr->originalName); 424 mailconf->writeEntry("name_" + stringId, ePtr->originalName);
425 mailconf->writeEntry("contenttype_" + stringId, ePtr->contentType); 425 mailconf->writeEntry("contenttype_" + stringId, ePtr->contentType);
426 mailconf->writeEntry("contentattribute_" + stringId, ePtr->contentAttribute); 426 mailconf->writeEntry("contentattribute_" + stringId, ePtr->contentAttribute);
427 mailconf->writeEntry("saved_" + stringId, ePtr->saved); 427 mailconf->writeEntry("saved_" + stringId, ePtr->saved);
428 mailconf->writeEntry("installed_" + stringId, FALSE); 428 mailconf->writeEntry("installed_" + stringId, FALSE);
429 429
430 ePtr->name = stringMailId + "_" + stringId; 430 ePtr->name = stringMailId + "_" + stringId;
431 ePtr->path = getPath(TRUE); 431 ePtr->path = getPath(TRUE);
432 if (emailHandler->getEnclosure(ePtr)) { //file saved 432 if (emailHandler->getEnclosure(ePtr)) { //file saved
433 ePtr->saved = TRUE; 433 ePtr->saved = TRUE;
434 mailconf->writeEntry("saved_" + stringId, ePtr->saved); 434 mailconf->writeEntry("saved_" + stringId, ePtr->saved);
435 mailconf->writeEntry("filename_" + stringId, ePtr->name); 435 mailconf->writeEntry("filename_" + stringId, ePtr->name);
436 mailconf->writeEntry("path_" + stringId, ePtr->path); 436 mailconf->writeEntry("path_" + stringId, ePtr->path);
437 } else { 437 } else {
438 ePtr->saved = FALSE; 438 ePtr->saved = FALSE;
439 mailconf->writeEntry("saved_" + stringId, ePtr->saved); 439 mailconf->writeEntry("saved_" + stringId, ePtr->saved);
440 } 440 }
441 } else { 441 } else {
442 ePtr->saved = mailconf->readBoolEntry("saved_" + stringId); 442 ePtr->saved = mailconf->readBoolEntry("saved_" + stringId);
443 ePtr->installed = mailconf->readBoolEntry("installed_" + stringId); 443 ePtr->installed = mailconf->readBoolEntry("installed_" + stringId);
444 if (ePtr->saved) { 444 if (ePtr->saved) {
445 ePtr->name = mailconf->readEntry("filename_" + stringId); 445 ePtr->name = mailconf->readEntry("filename_" + stringId);
446 ePtr->path = mailconf->readEntry("path_" + stringId); 446 ePtr->path = mailconf->readEntry("path_" + stringId);
447 } 447 }
448 } 448 }
449 } 449 }
450 450
451 bool found=false; 451 bool found=false;
452 452
453 if (!fromDisk) 453 if (!fromDisk)
454 { 454 {
455 455
456 Email *mailPtr; 456 Email *mailPtr;
457 item = (EmailListItem *) inboxView->firstChild(); 457 item = (EmailListItem *) inboxView->firstChild();
458 while ((item != NULL)&&(!found)) 458 while ((item != NULL)&&(!found))
459 { 459 {
460 mailPtr = item->getMail(); 460 mailPtr = item->getMail();
461 if (mailPtr->id == newMail.id) { 461 if (mailPtr->id == newMail.id) {
462 item->setMail(newMail); 462 item->setMail(newMail);
463 emit mailUpdated(item->getMail()); 463 emit mailUpdated(item->getMail());
464 found = true; 464 found = true;
465 } 465 }
466 item = (EmailListItem *) item->nextSibling(); 466 item = (EmailListItem *) item->nextSibling();
467 } 467 }
468 } 468 }
469 if ((!found)||(fromDisk)) item = new EmailListItem(inboxView, newMail, TRUE); 469 if ((!found)||(fromDisk)) {
470 470 item = new EmailListItem(inboxView, newMail, TRUE);
471 if (item->getMail()->files.count()>0) 471 }
472 { 472 if (item->getMail()->files.count()>0)
473 item->setPixmap(0, Resource::loadPixmap("mailit/attach")); 473 {
474 } 474 item->setPixmap(0, Resource::loadPixmap("mailit/attach"));
475 }
475 /*if (!newMail.downloaded) 476 /*if (!newMail.downloaded)
476 mailDownloadList.sizeInsert(newMail.serverId, newMail.size);*/ 477 mailDownloadList.sizeInsert(newMail.serverId, newMail.size);*/
477 478
478 mailboxView->setCurrentTab(0); 479 mailboxView->setCurrentTab(0);
479 480
480} 481}
481 482
482void EmailClient::allMailArrived(int count) 483void EmailClient::allMailArrived(int count)
483{ 484{
484 // not previewing means all mailtransfer has been done 485 // not previewing means all mailtransfer has been done
485 /*if (!previewingMail) {*/ 486 /*if (!previewingMail) {*/
486 if ( (allAccounts) && ( (currentAccount = accountList.next()) !=0 ) ) { 487 if ( (allAccounts) && ( (currentAccount = accountList.next()) !=0 ) ) {
487 emit newCaption("Mailit - " + currentAccount->accountName); 488 emit newCaption("Mailit - " + currentAccount->accountName);
488 getNewMail(); 489 getNewMail();
489 return; 490 return;
490 } else { 491 } else {
491 allAccounts = FALSE; 492 allAccounts = FALSE;
492 receiving = FALSE; 493 receiving = FALSE;
493 getMailButton->setEnabled(TRUE); 494 getMailButton->setEnabled(TRUE);
494 cancelButton->setEnabled(FALSE); 495 cancelButton->setEnabled(FALSE);
495 selectAccountMenu->setEnabled(TRUE); 496 selectAccountMenu->setEnabled(TRUE);
496 status1Label->setText("Idle"); 497 status1Label->setText("Idle");
497 498
498 progressBar->reset(); 499 progressBar->reset();
499 return; 500 return;
500 } 501 }
501 //} 502 //}
502 503
503 // all headers downloaded from server, start downloading remaining mails 504 // all headers downloaded from server, start downloading remaining mails
504 previewingMail = FALSE; 505 previewingMail = FALSE;
505 status1Label->setText(currentAccount->accountName); 506 status1Label->setText(currentAccount->accountName);
506 progressBar->reset(); 507 progressBar->reset();
507 508
508 509
509 mailboxView->setCurrentTab(0); 510 mailboxView->setCurrentTab(0);
510} 511}
511 512
512 513
513void EmailClient::moveMailFront(Email *mailPtr) 514void EmailClient::moveMailFront(Email *mailPtr)
514{ 515{
515 if ( (receiving) && (mailPtr->fromAccountId == currentAccount->id) ) { 516 if ( (receiving) && (mailPtr->fromAccountId == currentAccount->id) ) {
516 mailDownloadList.moveFront(mailPtr->serverId, mailPtr->size); 517 mailDownloadList.moveFront(mailPtr->serverId, mailPtr->size);
517 } 518 }
518} 519}
519 520
520void EmailClient::smtpError(int code) 521void EmailClient::smtpError(int code)
521{ 522{
522 QString temp; 523 QString temp;
523 524
524 if (code == ErrUnknownResponse) 525 if (code == ErrUnknownResponse)
525 temp = "Unknown response from server"; 526 temp = "Unknown response from server";
526 527
527 if (code == QSocket::ErrHostNotFound) 528 if (code == QSocket::ErrHostNotFound)
528 temp = "host not found"; 529 temp = "host not found";
529 if (code == QSocket::ErrConnectionRefused) 530 if (code == QSocket::ErrConnectionRefused)
530 temp = "connection refused"; 531 temp = "connection refused";
531 if (code == QSocket::ErrSocketRead) 532 if (code == QSocket::ErrSocketRead)
532 temp = "socket packet error"; 533 temp = "socket packet error";
533 534
534 if (code != ErrCancel) { 535 if (code != ErrCancel) {
535 QMessageBox::warning(qApp->activeWindow(), "Sending error", temp, "OK\n"); 536 QMessageBox::warning(qApp->activeWindow(), "Sending error", temp, "OK\n");
536 } else { 537 } else {
537 status2Label->setText("Aborted by user"); 538 status2Label->setText("Aborted by user");
538 } 539 }
539 540
540 sending = FALSE; 541 sending = FALSE;
541 sendMailButton->setEnabled(TRUE); 542 sendMailButton->setEnabled(TRUE);
542 cancelButton->setEnabled(FALSE); 543 cancelButton->setEnabled(FALSE);
543 quedMessages.clear(); 544 quedMessages.clear();
544} 545}
545 546
546void EmailClient::popError(int code) 547void EmailClient::popError(int code)
547{ 548{
548 QString temp; 549 QString temp;
549 550
550 if (code == ErrUnknownResponse) 551 if (code == ErrUnknownResponse)
551 temp = "Unknown response from server"; 552 temp = "Unknown response from server";
552 if (code == ErrLoginFailed) 553 if (code == ErrLoginFailed)
553 temp = "Login failed\nCheck user name and password"; 554 temp = "Login failed\nCheck user name and password";
554 555
555 if (code == QSocket::ErrHostNotFound) 556 if (code == QSocket::ErrHostNotFound)
556 temp = "host not found"; 557 temp = "host not found";
557 if (code == QSocket::ErrConnectionRefused) 558 if (code == QSocket::ErrConnectionRefused)
558 temp = "connection refused"; 559 temp = "connection refused";
559 if (code == QSocket::ErrSocketRead) 560 if (code == QSocket::ErrSocketRead)
560 temp = "socket packet error"; 561 temp = "socket packet error";
561 562
562 if (code != ErrCancel) { 563 if (code != ErrCancel) {
563 QMessageBox::warning(qApp->activeWindow(), "Receiving error", temp, "OK\n"); 564 QMessageBox::warning(qApp->activeWindow(), "Receiving error", temp, "OK\n");
564 } else { 565 } else {
565 status2Label->setText("Aborted by user"); 566 status2Label->setText("Aborted by user");
566 } 567 }
567 568
568 receiving = FALSE; 569 receiving = FALSE;
569 getMailButton->setEnabled(TRUE); 570 getMailButton->setEnabled(TRUE);
570 cancelButton->setEnabled(FALSE); 571 cancelButton->setEnabled(FALSE);
571 selectAccountMenu->setEnabled(TRUE); 572 selectAccountMenu->setEnabled(TRUE);
572} 573}
573 574
574void EmailClient::inboxItemSelected() 575void EmailClient::inboxItemSelected()
575{ 576{
576 //killTimer(timerID); 577 //killTimer(timerID);
577 578
578 item = (EmailListItem*) inboxView->selectedItem(); 579 item = (EmailListItem*) inboxView->selectedItem();
579 if (item != NULL) { 580 if (item != NULL) {
580 emit viewEmail(inboxView, item->getMail()); 581 emit viewEmail(inboxView, item->getMail());
581 } 582 }
582} 583}
583 584
584void EmailClient::outboxItemSelected() 585void EmailClient::outboxItemSelected()
585{ 586{
586 //killTimer(timerID); 587 //killTimer(timerID);
587 588
588 item = (EmailListItem*) outboxView->selectedItem(); 589 item = (EmailListItem*) outboxView->selectedItem();
589 if (item != NULL) { 590 if (item != NULL) {
590 emit viewEmail(outboxView, item->getMail()); 591 emit viewEmail(outboxView, item->getMail());
591 } 592 }
592 593
593} 594}
594 595
595void EmailClient::readMail() 596void EmailClient::readMail()
596{ 597{
597 Email mail; 598 Email mail;
598 int start, stop; 599 int start, stop;
599 QString s, del; 600 QString s, del;
600 601
601 QFile f(getPath(FALSE) + "inbox.txt"); 602 QFile f(getPath(FALSE) + "inbox.txt");
602 603
603 if ( f.open(IO_ReadOnly) ) { // file opened successfully 604 if ( f.open(IO_ReadOnly) ) { // file opened successfully
604 QTextStream t( &f ); // use a text stream 605 QTextStream t( &f ); // use a text stream
605 s = t.read(); 606 s = t.read();
606 f.close(); 607 f.close();
607 608
608 start = 0; 609 start = 0;
609 del = "\n.\n"; 610 del = "\n.\n";
610 while ((uint) start < s.length()) { 611 while ((uint) start < s.length()) {
611 stop = s.find(del, start); 612 stop = s.find(del, start);
612 if (stop == -1) 613 if (stop == -1)
613 stop = s.length() - del.length(); 614 stop = s.length() - del.length();
614 615
615 mail.rawMail = s.mid(start, stop + del.length() - start ); 616 mail.rawMail = s.mid(start, stop + del.length() - start );
616 start = stop + del.length(); 617 start = stop + del.length();
617 mailArrived(mail, TRUE); 618 mailArrived(mail, TRUE);
618 } 619 }
619 } 620 }
620 621
621 QFile fo(getPath(FALSE) + "outbox.txt"); 622 QFile fo(getPath(FALSE) + "outbox.txt");
622 if ( fo.open(IO_ReadOnly) ) { // file opened successfully 623 if ( fo.open(IO_ReadOnly) ) { // file opened successfully
623 QTextStream t( &fo ); // use a text stream 624 QTextStream t( &fo ); // use a text stream
624 s = t.read(); 625 s = t.read();
625 fo.close(); 626 fo.close();
626 627
627 start = 0; 628 start = 0;
628 del = "\n.\n"; 629 del = "\n.\n";
629 while ((uint) start < s.length()) { 630 while ((uint) start < s.length()) {
630 stop = s.find(del, start); 631 stop = s.find(del, start);
631 if (stop == -1) 632 if (stop == -1)
632 stop = s.length() - del.length(); 633 stop = s.length() - del.length();
633 634
634 mail.rawMail = s.mid(start, stop + del.length() - start ); 635 mail.rawMail = s.mid(start, stop + del.length() - start );
635 start = stop + del.length(); 636 start = stop + del.length();
636 emailHandler->parse(mail.rawMail, lineShift, &mail); 637 emailHandler->parse(mail.rawMail, lineShift, &mail);
637 mail.sent = false; 638 mail.sent = false;
638 mail.received = false; 639 mail.received = false;
639 enqueMail(mail); 640 enqueMail(mail);
640 641
641 } 642 }
642 } 643 }
643} 644}
644 645
645void EmailClient::saveMail(QString fileName, QListView *view) 646void EmailClient::saveMail(const QString &fileName, QListView *view)
646{ 647{
647 QFile f(fileName); 648 QFile f(fileName);
648 Email *mail; 649 Email *mail;
649 650
650 if (! f.open(IO_WriteOnly) ) { 651 if (! f.open(IO_WriteOnly) ) {
651 qWarning("could not open file"); 652 qWarning("could not open file");
652 return; 653 return;
653 } 654 }
654 item = (EmailListItem *) view->firstChild(); 655 item = (EmailListItem *) view->firstChild();
655 QTextStream t(&f); 656 QTextStream t(&f);
656 while (item != NULL) { 657 while (item != NULL) {
657 mail = item->getMail(); 658 mail = item->getMail();
658 t << mail->rawMail; 659 t << mail->rawMail;
659 660
660 mailconf->setGroup(mail->id); 661 mailconf->setGroup(mail->id);
661 mailconf->writeEntry("mailread", mail->read); 662 mailconf->writeEntry("mailread", mail->read);
662 663
663 item = (EmailListItem *) item->nextSibling(); 664 item = (EmailListItem *) item->nextSibling();
664 } 665 }
665 f.close(); 666 f.close();
666} 667}
667 668
668//paths for mailit, is settings, inbox, enclosures 669//paths for mailit, is settings, inbox, enclosures
669QString EmailClient::getPath(bool enclosurePath) 670QString EmailClient::getPath(bool enclosurePath)
670{ 671{
671 QString basePath = "qtmail"; 672 QString basePath = "qtmail";
672 QString enclosures = "enclosures"; 673 QString enclosures = "enclosures";
673 674
674 QDir dir = (QString(getenv("HOME")) + "/Applications/" + basePath); 675 QDir dir = (QString(getenv("HOME")) + "/Applications/" + basePath);
675 if ( !dir.exists() ) 676 if ( !dir.exists() )
676 dir.mkdir( dir.path() ); 677 dir.mkdir( dir.path() );
677 678
678 if (enclosurePath) { 679 if (enclosurePath) {
679 dir = (QString(getenv("HOME")) + "/Applications/" + basePath + "/" + enclosures); 680 dir = (QString(getenv("HOME")) + "/Applications/" + basePath + "/" + enclosures);
680 681
681 if ( !dir.exists() ) 682 if ( !dir.exists() )
682 dir.mkdir( dir.path() ); 683 dir.mkdir( dir.path() );
683 684
684 return (dir.path() + "/"); 685 return (dir.path() + "/");
685 686
686 } 687 }
687 return (dir.path() + "/"); 688 return (dir.path() + "/");
688} 689}
689 690
690void EmailClient::readSettings() 691void EmailClient::readSettings()
691{ 692{
692 int y,acc_count; 693 int y,acc_count;
693 694
694 mailconf->setGroup("mailitglobal"); 695 mailconf->setGroup("mailitglobal");
695 acc_count=mailconf->readNumEntry("Accounts",0); 696 acc_count=mailconf->readNumEntry("Accounts",0);
696 697
697 for (int accountPos = 0;accountPos<acc_count ; accountPos++) 698 for (int accountPos = 0;accountPos<acc_count ; accountPos++)
698 { 699 {
699 mailconf->setGroup("Account_"+QString::number(accountPos+1)); //Account numbers start at 1 ... 700 mailconf->setGroup("Account_"+QString::number(accountPos+1)); //Account numbers start at 1 ...
700 account.accountName = mailconf->readEntry("AccName",""); 701 account.accountName = mailconf->readEntry("AccName","");
701 account.name = mailconf->readEntry("UserName",""); 702 account.name = mailconf->readEntry("UserName","");
702 account.emailAddress = mailconf->readEntry("Email",""); 703 account.emailAddress = mailconf->readEntry("Email","");
703 account.popUserName = mailconf->readEntry("POPUser",""); 704 account.popUserName = mailconf->readEntry("POPUser","");
704 account.popPasswd = mailconf->readEntryCrypt("POPPassword",""); 705 account.popPasswd = mailconf->readEntryCrypt("POPPassword","");
705 account.popServer = mailconf->readEntry("POPServer",""); 706 account.popServer = mailconf->readEntry("POPServer","");
706 account.smtpServer = mailconf->readEntry("SMTPServer",""); 707 account.smtpServer = mailconf->readEntry("SMTPServer","");
707 account.id = mailconf->readNumEntry("AccountId",0); 708 account.id = mailconf->readNumEntry("AccountId",0);
708 account.syncLimit = mailconf->readNumEntry("HeaderLimit",0); 709 account.syncLimit = mailconf->readNumEntry("HeaderLimit",0);
709 account.lastServerMailCount = 0; 710 account.lastServerMailCount = 0;
710 account.synchronize = FALSE; 711 account.synchronize = FALSE;
711 712
712 account.synchronize = (mailconf->readEntry("Synchronize","No")=="Yes"); 713 account.synchronize = (mailconf->readEntry("Synchronize","No")=="Yes");
713 if (account.synchronize) 714 if (account.synchronize)
714 { 715 {
715 mailconf->readNumEntry("LASTSERVERMAILCOUNT",0); 716 mailconf->readNumEntry("LASTSERVERMAILCOUNT",0);
716 } 717 }
717 718
718 accountList.append(&account); 719 accountList.append(&account);
719 } 720 }
720 721
721 mailconf->setGroup("mailitglobal"); 722 mailconf->setGroup("mailitglobal");
722 723
723 if ( (y = mailconf->readNumEntry("mailidcount", -1)) != -1) 724 if ( (y = mailconf->readNumEntry("mailidcount", -1)) != -1)
724 { 725 {
725 mailIdCount = y; 726 mailIdCount = y;
726 } 727 }
727 if ( (y = mailconf->readNumEntry("accountidcount", -1)) != -1) 728 if ( (y = mailconf->readNumEntry("accountidcount", -1)) != -1)
728 { 729 {
729 accountIdCount = y; 730 accountIdCount = y;
730 } 731 }
731} 732}
732 733
733void EmailClient::saveSettings() 734void EmailClient::saveSettings()
734{ 735{
735 int acc_count=0; 736 int acc_count=0;
736 MailAccount *accountPtr; 737 MailAccount *accountPtr;
737 738
738 739
739 if (!mailconf) 740 if (!mailconf)
740 { 741 {
741 qWarning("could not save settings"); 742 qWarning("could not save settings");
742 return; 743 return;
743 } 744 }
744 745
745 for (accountPtr = accountList.first(); accountPtr != 0; 746 for (accountPtr = accountList.first(); accountPtr != 0;
746 accountPtr = accountList.next()) 747 accountPtr = accountList.next())
747 { 748 {
748 mailconf->setGroup("Account_"+QString::number(++acc_count)); 749 mailconf->setGroup("Account_"+QString::number(++acc_count));
749 mailconf->writeEntry("AccName",accountPtr->accountName ); 750 mailconf->writeEntry("AccName",accountPtr->accountName );
750 mailconf->writeEntry("UserName",accountPtr->name); 751 mailconf->writeEntry("UserName",accountPtr->name);
751 mailconf->writeEntry("Email",accountPtr->emailAddress); 752 mailconf->writeEntry("Email",accountPtr->emailAddress);
752 mailconf->writeEntry("POPUser",accountPtr->popUserName); 753 mailconf->writeEntry("POPUser",accountPtr->popUserName);
753 mailconf->writeEntryCrypt("POPPassword",accountPtr->popPasswd); 754 mailconf->writeEntryCrypt("POPPassword",accountPtr->popPasswd);
754 mailconf->writeEntry("POPServer",accountPtr->popServer); 755 mailconf->writeEntry("POPServer",accountPtr->popServer);
755 mailconf->writeEntry("SMTPServer",accountPtr->smtpServer); 756 mailconf->writeEntry("SMTPServer",accountPtr->smtpServer);
756 mailconf->writeEntry("AccountId",accountPtr->id); 757 mailconf->writeEntry("AccountId",accountPtr->id);
757 if (accountPtr->synchronize) 758 if (accountPtr->synchronize)
758 { 759 {
759 mailconf->writeEntry("Synchronize","Yes"); 760 mailconf->writeEntry("Synchronize","Yes");
760 mailconf->writeEntry("HeaderLimit",accountPtr->syncLimit); 761 mailconf->writeEntry("HeaderLimit",accountPtr->syncLimit);
761 mailconf->writeEntry("LastServerMailCount",accountPtr->lastServerMailCount); 762 mailconf->writeEntry("LastServerMailCount",accountPtr->lastServerMailCount);
762 } 763 }
763 else 764 else
764 { 765 {
765 mailconf->writeEntry("Synchronize", "No"); 766 mailconf->writeEntry("Synchronize", "No");
766 } 767 }
767 } 768 }
768 769
769 mailconf->setGroup("mailitglobal"); 770 mailconf->setGroup("mailitglobal");
770 mailconf->writeEntry("Accounts",acc_count); 771 mailconf->writeEntry("Accounts",acc_count);
771 mailconf->writeEntry("mailidcount", mailIdCount); 772 mailconf->writeEntry("mailidcount", mailIdCount);
772 mailconf->writeEntry("accountidcount", accountIdCount); 773 mailconf->writeEntry("accountidcount", accountIdCount);
773} 774}
774 775
775void EmailClient::selectAccount(int id) 776void EmailClient::selectAccount(int id)
776{ 777{
777 if (accountList.count() > 0) { 778 if (accountList.count() > 0) {
778 currentAccount = accountList.at(id); 779 currentAccount = accountList.at(id);
779 emit newCaption("Mailit - " + currentAccount->accountName); 780 emit newCaption("Mailit - " + currentAccount->accountName);
780 getNewMail(); 781 getNewMail();
781 } else { 782 } else {
782 emit newCaption("Mailit ! No account defined"); 783 emit newCaption("Mailit ! No account defined");
783 } 784 }
784} 785}
785 786
786void EmailClient::editAccount(int id) 787void EmailClient::editAccount(int id)
787{ 788{
788 MailAccount *newAccount; 789 MailAccount *newAccount;
789 790
790 editAccountView = new EditAccount(this, "account", TRUE); 791 editAccountView = new EditAccount(this, "account", TRUE);
791 if (id == newAccountId) { //new account 792 if (id == newAccountId) { //new account
792 newAccount = new MailAccount; 793 newAccount = new MailAccount;
793 editAccountView->setAccount(newAccount); 794 editAccountView->setAccount(newAccount);
794 } else { 795 } else {
795 newAccount = accountList.at(id); 796 newAccount = accountList.at(id);
796 editAccountView->setAccount(newAccount, FALSE); 797 editAccountView->setAccount(newAccount, FALSE);
797 } 798 }
798 799
799 editAccountView->showMaximized(); 800 editAccountView->showMaximized();
800 editAccountView->exec(); 801 editAccountView->exec();
801 802
802 if (editAccountView->result() == QDialog::Accepted) { 803 if (editAccountView->result() == QDialog::Accepted) {
803 if (id == newAccountId) { 804 if (id == newAccountId) {
804 newAccount->id = accountIdCount; 805 newAccount->id = accountIdCount;
805 accountIdCount++; 806 accountIdCount++;
806 accountList.append(newAccount); 807 accountList.append(newAccount);
807 updateAccounts(); 808 updateAccounts();
808 } else { 809 } else {
809 updateAccounts(); 810 updateAccounts();
810 } 811 }
811 } 812 }
812 813
813 delete editAccountView; 814 delete editAccountView;
814} 815}
815 816
816void EmailClient::deleteAccount(int id) 817void EmailClient::deleteAccount(int id)
817{ 818{
818 MailAccount *newAccount; 819 MailAccount *newAccount;
819 QString message; 820 QString message;
820 821
821 newAccount = accountList.at(id); 822 newAccount = accountList.at(id);
822 message = "Delete account:\n" + newAccount->accountName; 823 message = "Delete account:\n" + newAccount->accountName;
823 switch( QMessageBox::warning( this, "Mailit", message, 824 switch( QMessageBox::warning( this, "Mailit", message,
824 "Yes", "No", 0, 0, 1 ) ) { 825 "Yes", "No", 0, 0, 1 ) ) {
825 826
826 case 0: accountList.remove(id); 827 case 0: accountList.remove(id);
827 updateAccounts(); 828 updateAccounts();
828 break; 829 break;
829 case 1: 830 case 1:
830 break; 831 break;
831 } 832 }
832} 833}
833 834
834void EmailClient::updateAccounts() 835void EmailClient::updateAccounts()
835{ 836{
836 MailAccount *accountPtr; 837 MailAccount *accountPtr;
837 838
838 //rebuild menus, clear all first 839 //rebuild menus, clear all first
839 editAccountMenu->clear(); 840 editAccountMenu->clear();
840 selectAccountMenu->clear(); 841 selectAccountMenu->clear();
841 deleteAccountMenu->clear(); 842 deleteAccountMenu->clear();
842 843
843 newAccountId = editAccountMenu->insertItem("New", this, 844 newAccountId = editAccountMenu->insertItem("New", this,
844 SLOT(editAccount(int)) ); 845 SLOT(editAccount(int)) );
845 editAccountMenu->insertSeparator(); 846 editAccountMenu->insertSeparator();
846 847
847 idCount = 0; 848 idCount = 0;
848 for (accountPtr = accountList.first(); accountPtr != 0; 849 for (accountPtr = accountList.first(); accountPtr != 0;
849 accountPtr = accountList.next()) { 850 accountPtr = accountList.next()) {
850 851
851 editAccountMenu->insertItem(accountPtr->accountName, 852 editAccountMenu->insertItem(accountPtr->accountName,
852 this, SLOT(editAccount(int)), 0, idCount); 853 this, SLOT(editAccount(int)), 0, idCount);
853 selectAccountMenu->insertItem(accountPtr->accountName, 854 selectAccountMenu->insertItem(accountPtr->accountName,
854 this, SLOT(selectAccount(int)), 0, idCount); 855 this, SLOT(selectAccount(int)), 0, idCount);
855 deleteAccountMenu->insertItem(accountPtr->accountName, 856 deleteAccountMenu->insertItem(accountPtr->accountName,
856 this, SLOT(deleteAccount(int)), 0, idCount); 857 this, SLOT(deleteAccount(int)), 0, idCount);
857 idCount++; 858 idCount++;
858 } 859 }
859} 860}
860 861
861void EmailClient::deleteMail(EmailListItem *mailItem, bool &inbox) 862void EmailClient::deleteMail(EmailListItem *mailItem, bool &inbox)
862{ 863{
863 Email *mPtr; 864 Email *mPtr;
864 Enclosure *ePtr; 865 Enclosure *ePtr;
865 866
866 if (inbox) 867 if (inbox)
867 { 868 {
868 mPtr = mailItem->getMail(); 869 mPtr = mailItem->getMail();
869 870
870 //if mail is in queue for download, remove it from 871 //if mail is in queue for download, remove it from
871 //queue if possible 872 //queue if possible
872 if ( (receiving) && (mPtr->fromAccountId == currentAccount->id) ) { 873 if ( (receiving) && (mPtr->fromAccountId == currentAccount->id) ) {
873 if ( !mPtr->downloaded ) 874 if ( !mPtr->downloaded )
874 mailDownloadList.remove(mPtr->serverId, mPtr->size); 875 mailDownloadList.remove(mPtr->serverId, mPtr->size);
875 } 876 }
876 877
877 mailconf->setGroup(mPtr->id); 878 mailconf->setGroup(mPtr->id);
878 mailconf->clearGroup(); 879 mailconf->clearGroup();
879 880
880 //delete any temporary attatchemnts storing 881 //delete any temporary attatchemnts storing
881 for ( ePtr=mPtr->files.first(); ePtr != 0; ePtr=mPtr->files.next() ) { 882 for ( ePtr=mPtr->files.first(); ePtr != 0; ePtr=mPtr->files.next() ) {
882 if (ePtr->saved) { 883 if (ePtr->saved) {
883 QFile::remove( (ePtr->path + ePtr->name) ); 884 QFile::remove( (ePtr->path + ePtr->name) );
884 } 885 }
885 } 886 }
886 inboxView->takeItem(mailItem); 887 inboxView->takeItem(mailItem);
887 } 888 }
888 else 889 else
889 { 890 {
890 outboxView->takeItem(mailItem); 891 outboxView->takeItem(mailItem);
891 } 892 }
892} 893}
893 894
894void EmailClient::setMailSize(int size) 895void EmailClient::setMailSize(int size)
895{ 896{
896 progressBar->reset(); 897 progressBar->reset();
897 progressBar->setTotalSteps(size); 898 progressBar->setTotalSteps(size);
898} 899}
899 900
900void EmailClient::setTotalSize(int size) 901void EmailClient::setTotalSize(int size)
901{ 902{
902 903
903} 904}
904 905
905void EmailClient::setDownloadedSize(int size) 906void EmailClient::setDownloadedSize(int size)
906{ 907{
907 int total = progressBar->totalSteps(); 908 int total = progressBar->totalSteps();
908 909
909 if (size < total) { 910 if (size < total) {
910 progressBar->setProgress(size); 911 progressBar->setProgress(size);
911 } else { 912 } else {
912 progressBar->setProgress(total); 913 progressBar->setProgress(total);
913 } 914 }
914} 915}
915 916
916void EmailClient::deleteItem() 917void EmailClient::deleteItem()
917{ 918{
918 bool inbox=mailboxView->currentTab()==0; 919 bool inbox=mailboxView->currentTab()==0;
919 QListView* box; 920 QListView* box;
920 921
921 EmailListItem* eli; 922 EmailListItem* eli;
922 int pos; 923 int pos;
923 924
924 inbox ? box=inboxView : box=outboxView; 925 inbox ? box=inboxView : box=outboxView;
925 926
926 eli=(EmailListItem*)box->selectedItem(); 927 eli=(EmailListItem*)box->selectedItem();
927 928
928 if (eli) 929 if (eli)
929 { 930 {
930 box->setSelected(eli->itemBelow(),true);//select the previous item 931 box->setSelected(eli->itemBelow(),true); //select the previous item
931 932
932 deleteMail(eli,(bool&)inbox); //remove mail entry 933 deleteMail(eli,(bool&)inbox); //remove mail entry
933 } 934 }
934} 935}
935 936
936void EmailClient::inboxItemPressed() 937void EmailClient::inboxItemPressed()
937{ 938{
938 //timerID=startTimer(500); 939// timerID=startTimer(500);
939} 940}
940 941
941void EmailClient::inboxItemReleased() 942void EmailClient::inboxItemReleased()
942{ 943{
943 //killTimer(timerID); 944 // killTimer(timerID);
944} 945}
945 946
946/*void EmailClient::timerEvent(QTimerEvent *e) 947/*void EmailClient::timerEvent(QTimerEvent *e)
947{ 948{
948 /*killTimer(timerID); 949 /*killTimer(timerID);
949 950
950 951
951 QPopupMenu *action = new QPopupMenu(this); 952 QPopupMenu *action = new QPopupMenu(this);
952 953
953 int reply=0; 954 int reply=0;
954 955
955 action->insertItem(tr( "Reply To" ),this,SLOT(reply())); 956 action->insertItem(tr( "Reply To" ),this,SLOT(reply()));
956 action->insertItem( tr( "Reply All" ),this,SLOT(replyAll())); 957 action->insertItem( tr( "Reply All" ),this,SLOT(replyAll()));
957 action->insertItem( tr( "Forward" ), this,SLOT(forward())); 958 action->insertItem( tr( "Forward" ), this,SLOT(forward()));
958 action->insertItem( tr( "Remove Mail" ), this,SLOT(remove())); 959 action->insertItem( tr( "Remove Mail" ), this,SLOT(remove()));
959 960
960 action->exec(QCursor::pos()); 961 action->exec(QCursor::pos());
961 962
962 if (action) delete action; 963 if (action) delete action;
963 964
964}*/ 965}*/
965 966
966Email* EmailClient::getCurrentMail() 967Email* EmailClient::getCurrentMail()
967{ 968{
968 EmailListItem *eli=(EmailListItem* ) (inboxView->selectedItem()); 969 EmailListItem *eli=(EmailListItem* ) (inboxView->selectedItem());
969 if (eli!=NULL) 970 if (eli!=NULL)
970 return eli->getMail(); 971 return eli->getMail();
971 else 972 else
972 return NULL; 973 return NULL;
973} 974}
974 975
975void EmailClient::download(Email* mail) 976void EmailClient::download(Email* mail)
976{ 977{
977 MailAccount* acc=0; 978 MailAccount* acc=0;
978 979
979 tempMailDownloadList.clear(); 980 tempMailDownloadList.clear();
980 tempMailDownloadList.sizeInsert(mail->serverId, mail->size); 981 tempMailDownloadList.sizeInsert(mail->serverId, mail->size);
981 982
982 acc=accountList.at(mail->fromAccountId-1); 983 acc=accountList.at(mail->fromAccountId-1);
983 if (acc) 984 if (acc)
984 { 985 {
985 emailHandler->setAccount(*acc); 986 emailHandler->setAccount(*acc);
986 emailHandler->getMailByList(&tempMailDownloadList); 987 emailHandler->getMailByList(&tempMailDownloadList);
987 } 988 }
988 else 989 else
989 QMessageBox::warning(qApp->activeWindow(), 990 QMessageBox::warning(qApp->activeWindow(),
990 tr("No account associated"), tr("There is no active account \nassociated to this mail\n it can not be downloaded"), "Abort\n"); 991 tr("No account associated"), tr("There is no active account \nassociated to this mail\n it can not be downloaded"), "Abort\n");
991} 992}
992 993
993void EmailClient::receive(const QCString& msg, const QByteArray& data) 994void EmailClient::receive(const QCString& msg, const QByteArray& data)
994{ 995{
995 /*if (msg=="getMail()") 996 /*if (msg=="getMail()")
996 { 997 {
997 /*QDialog qd(qApp->activeWindow(),"Getting mail",true); 998 /*QDialog qd(qApp->activeWindow(),"Getting mail",true);
998 QVBoxLayout *vbProg = new QVBoxLayout( &qd ); 999 QVBoxLayout *vbProg = new QVBoxLayout( &qd );
999 1000
1000 initStatusBar(&qd); 1001 initStatusBar(&qd);
1001 1002
1002 if (statusBar==0) 1003 if (statusBar==0)
1003 { 1004 {
1004 qDebug("No Bar ..."); 1005 qDebug("No Bar ...");
1005 //statusBar=new ProgressBar(&qd); 1006 //statusBar=new ProgressBar(&qd);
1006 } 1007 }
1007 statusBar->show(); 1008 statusBar->show();
1008 vbProg->addWidget(statusBar); 1009 vbProg->addWidget(statusBar);
1009 qd.showMaximized(); 1010 qd.showMaximized();
1010 qd.show(); 1011 qd.show();
1011 emit getAllNewMail(); 1012 emit getAllNewMail();
1012 //qd.exec(); 1013 //qd.exec();
1013 } 1014 }
1014 else if (msg=="compose()") 1015 else if (msg=="compose()")
1015 { 1016 {
1016 QDialog qd(qApp->activeWindow(),"Getting mail",true); 1017 QDialog qd(qApp->activeWindow(),"Getting mail",true);
1017 1018
1018 WriteMail wm(&qd,"write new mail"); 1019 WriteMail wm(&qd,"write new mail");
1019 QVBoxLayout vbProg( &qd ); 1020 QVBoxLayout vbProg( &qd );
1020 1021
1021 wm.showMaximized(); 1022 wm.showMaximized();
1022 vbProg.addWidget(&wm); 1023 vbProg.addWidget(&wm);
1023 1024
1024 qd.showMaximized(); 1025 qd.showMaximized();
1025 1026
1026 emit composeRequested(); 1027 emit composeRequested();
1027 qd.exec(); 1028 qd.exec();
1028 1029
1029 QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n"); 1030 QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n");
1030 } 1031 }
1031 1032
1032 else if (msg=="dialog()") 1033 else if (msg=="dialog()")
1033 { 1034 {
1034 QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n"); 1035 QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n");
1035 }*/ 1036 }*/
1036} 1037}
diff --git a/noncore/unsupported/mailit/emailclient.h b/noncore/unsupported/mailit/emailclient.h
index 994fec5..c98cfce 100644
--- a/noncore/unsupported/mailit/emailclient.h
+++ b/noncore/unsupported/mailit/emailclient.h
@@ -1,181 +1,181 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef EMAILCLIENT_H 20#ifndef EMAILCLIENT_H
21#define EMAILCLIENT_H 21#define EMAILCLIENT_H
22 22
23#include <qlist.h> 23#include <qlist.h>
24#include <qcstring.h> 24#include <qcstring.h>
25#include <qmainwindow.h> 25#include <qmainwindow.h>
26 26
27#include <qtoolbar.h> 27#include <qtoolbar.h>
28#include <qcheckbox.h> 28#include <qcheckbox.h>
29#include <qlabel.h> 29#include <qlabel.h>
30#include <qlineedit.h> 30#include <qlineedit.h>
31#include <qlistview.h> 31#include <qlistview.h>
32#include <qaction.h> 32#include <qaction.h>
33#include <qlayout.h> 33#include <qlayout.h>
34#include <qtooltip.h> 34#include <qtooltip.h>
35#include <qtoolbutton.h> 35#include <qtoolbutton.h>
36#include <qimage.h> 36#include <qimage.h>
37#include <qpixmap.h> 37#include <qpixmap.h>
38#include <qstringlist.h> 38#include <qstringlist.h>
39#include <qprogressbar.h> 39#include <qprogressbar.h>
40#include <qstatusbar.h> 40#include <qstatusbar.h>
41#include <qdir.h> 41#include <qdir.h>
42#include <stdlib.h> 42#include <stdlib.h>
43#include <opie/otabwidget.h> 43#include <opie/otabwidget.h>
44#include <qpe/qcopenvelope_qws.h> 44#include <qpe/qcopenvelope_qws.h>
45#include <qtimer.h> 45#include <qtimer.h>
46 46
47#include "emailhandler.h" 47#include "emailhandler.h"
48#include "emaillistitem.h" 48#include "emaillistitem.h"
49#include "textparser.h" 49#include "textparser.h"
50#include "editaccount.h" 50#include "editaccount.h"
51#include "maillist.h" 51#include "maillist.h"
52#include "addresslist.h" 52#include "addresslist.h"
53 53
54#include <qpe/config.h> 54#include <qpe/config.h>
55 55
56class AccountList : public QList<MailAccount> 56class AccountList : public QList<MailAccount>
57{ 57{
58public: 58public:
59 Item newItem(Item d); 59 Item newItem(Item d);
60private: 60private:
61 MailAccount* dupl(MailAccount *in); 61 MailAccount* dupl(MailAccount *in);
62 MailAccount *ac; 62 MailAccount *ac;
63}; 63};
64 64
65//class EmailClient : public EmailClientBase 65//class EmailClient : public EmailClientBase
66class EmailClient : public QMainWindow 66class EmailClient : public QMainWindow
67{ 67{
68 Q_OBJECT 68 Q_OBJECT
69 69
70public: 70public:
71 EmailClient( QWidget* parent, const char* name, WFlags fl = 0 ); 71 EmailClient( QWidget* parent, const char* name, WFlags fl = 0 );
72 ~EmailClient(); 72 ~EmailClient();
73 AddressList* getAdrListRef(); 73 AddressList* getAdrListRef();
74 74
75protected: 75protected:
76 //void timerEvent(QTimerEvent*); 76 //void timerEvent(QTimerEvent*);
77 77
78signals: 78signals:
79 void composeRequested(); 79 void composeRequested();
80 void viewEmail(QListView *, Email *); 80 void viewEmail(QListView *, Email *);
81 void mailUpdated(Email *); 81 void mailUpdated(Email *);
82 void newCaption(const QString &); 82 void newCaption(const QString &);
83 void replyRequested(Email&, bool&); 83 void replyRequested(Email&, bool&);
84 void forwardRequested(Email&); 84 void forwardRequested(Email&);
85 void removeItem(EmailListItem*, bool&); 85 void removeItem(EmailListItem*, bool&);
86 /*void reply(Email&); 86 /*void reply(Email&);
87 void replyAll(Email&); 87 void replyAll(Email&);
88 void remove(Email&); 88 void remove(Email&);
89 void forward(Email&);*/ 89 void forward(Email&);*/
90 90
91public slots: 91public slots:
92 void compose(); 92 void compose();
93 void cancel(); 93 void cancel();
94 void enqueMail(const Email &mail); 94 void enqueMail(const Email &mail);
95 void setMailAccount(); 95 void setMailAccount();
96 void sendQuedMail(); 96 void sendQuedMail();
97 void mailSent(); 97 void mailSent();
98 void deleteItem(); 98 void deleteItem();
99 void getNewMail(); 99 void getNewMail();
100 void getAllNewMail(); 100 void getAllNewMail();
101 void smtpError(int code); 101 void smtpError(int code);
102 void popError(int code); 102 void popError(int code);
103 void inboxItemSelected(); 103 void inboxItemSelected();
104 void outboxItemSelected(); 104 void outboxItemSelected();
105 void inboxItemPressed(); 105 void inboxItemPressed();
106 void inboxItemReleased(); 106 void inboxItemReleased();
107 void mailArrived(const Email &mail, bool fromDisk); 107 void mailArrived(const Email &mail, bool fromDisk);
108 void allMailArrived(int); 108 void allMailArrived(int);
109 void saveMail(QString fileName, QListView *view); 109 void saveMail(const QString &fileName, QListView *view);
110 void selectAccount(int); 110 void selectAccount(int);
111 void editAccount(int); 111 void editAccount(int);
112 void updateAccounts(); 112 void updateAccounts();
113 void deleteAccount(int); 113 void deleteAccount(int);
114 void deleteMail(EmailListItem *mailItem, bool &inbox); 114 void deleteMail(EmailListItem *mailItem, bool &inbox);
115 void setTotalSize(int); 115 void setTotalSize(int);
116 void setMailSize(int); 116 void setMailSize(int);
117 void setDownloadedSize(int); 117 void setDownloadedSize(int);
118 void moveMailFront(Email *mailPtr); 118 void moveMailFront(Email *mailPtr);
119 void download(Email*); 119 void download(Email*);
120/* void reply(); 120/* void reply();
121 void replyAll(); 121 void replyAll();
122 void forward(); 122 void forward();
123 void remove();*/ 123 void remove();*/
124 124
125private slots: 125private slots:
126 void receive(const QCString&, const QByteArray&); 126 void receive(const QCString&, const QByteArray&);
127 127
128private: 128private:
129 void init(); 129 void init();
130 void initStatusBar(QWidget*); 130 void initStatusBar(QWidget*);
131 void readMail(); 131 void readMail();
132 QString getPath(bool enclosurePath); 132 QString getPath(bool enclosurePath);
133 void readSettings(); 133 void readSettings();
134 void saveSettings(); 134 void saveSettings();
135 Email* getCurrentMail(); 135 Email* getCurrentMail();
136 int timerID; 136 int timerID;
137 Config *mailconf; 137 Config *mailconf;
138 int newAccountId, idCount, mailIdCount; 138 int newAccountId, idCount, mailIdCount;
139 int accountIdCount; 139 int accountIdCount;
140 AccountList accountList; 140 AccountList accountList;
141 AddressList *addressList; 141 AddressList *addressList;
142 142
143 EditAccount *editAccountView; 143 EditAccount *editAccountView;
144 EmailListItem *item; 144 EmailListItem *item;
145 EmailHandler *emailHandler; 145 EmailHandler *emailHandler;
146 QList<Email> quedMessages; 146 QList<Email> quedMessages;
147 MailList mailDownloadList; 147 MailList mailDownloadList;
148 MailList tempMailDownloadList; 148 MailList tempMailDownloadList;
149 149
150 bool sending, receiving, previewingMail, allAccounts; 150 bool sending, receiving, previewingMail, allAccounts;
151 QString lineShift; 151 QString lineShift;
152 MailAccount account, *currentAccount; 152 MailAccount account, *currentAccount;
153 153
154 QCopChannel* channel; 154 QCopChannel* channel;
155 155
156 QToolBar *bar; 156 QToolBar *bar;
157 QProgressBar *progressBar; 157 QProgressBar *progressBar;
158 QStatusBar *statusBar; 158 QStatusBar *statusBar;
159 QLabel *status1Label, *status2Label; 159 QLabel *status1Label, *status2Label;
160 QToolButton *getMailButton; 160 QToolButton *getMailButton;
161 QAction *sendMailButton; 161 QAction *sendMailButton;
162 QAction *composeButton; 162 QAction *composeButton;
163 QAction *cancelButton; 163 QAction *cancelButton;
164 QAction *deleteButton; 164 QAction *deleteButton;
165 //QToolButton *setAccountButton; 165 //QToolButton *setAccountButton;
166 166
167 QMenuBar *mb; 167 QMenuBar *mb;
168 QPopupMenu *selectAccountMenu; 168 QPopupMenu *selectAccountMenu;
169 QPopupMenu *editAccountMenu; 169 QPopupMenu *editAccountMenu;
170 QPopupMenu *deleteAccountMenu; 170 QPopupMenu *deleteAccountMenu;
171 QPopupMenu *setAccountMenu; 171 QPopupMenu *setAccountMenu;
172 172
173 OTabWidget* mailboxView; 173 OTabWidget* mailboxView;
174 QListView* inboxView; 174 QListView* inboxView;
175 QListView* outboxView; 175 QListView* outboxView;
176 176
177 QGridLayout* grid_2; 177 QGridLayout* grid_2;
178 QGridLayout* grid_3; 178 QGridLayout* grid_3;
179}; 179};
180 180
181#endif // EMAILCLIENT_H 181#endif // EMAILCLIENT_H
diff --git a/noncore/unsupported/mailit/emailhandler.cpp b/noncore/unsupported/mailit/emailhandler.cpp
index 62fa64f..59ccd90 100644
--- a/noncore/unsupported/mailit/emailhandler.cpp
+++ b/noncore/unsupported/mailit/emailhandler.cpp
@@ -1,621 +1,621 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include <qfileinfo.h> 20#include <qfileinfo.h>
21#include <stdlib.h> 21#include <stdlib.h>
22#include <qapplication.h> 22#include <qapplication.h>
23#include <qmessagebox.h> 23#include <qmessagebox.h>
24#include <qcstring.h> 24#include <qcstring.h>
25#include "emailhandler.h" 25#include "emailhandler.h"
26#include <qpe/applnk.h> 26#include <qpe/applnk.h>
27#include <qpe/filemanager.h> 27#include <qpe/filemanager.h>
28 28
29QCollection::Item EnclosureList::newItem(QCollection::Item d) 29QCollection::Item EnclosureList::newItem(QCollection::Item d)
30{ 30{
31 return dupl( (Enclosure *) d); 31 return dupl( (Enclosure *) d);
32} 32}
33 33
34Enclosure* EnclosureList::dupl(Enclosure *in) 34Enclosure* EnclosureList::dupl(Enclosure *in)
35{ 35{
36 ac = new Enclosure(*in); 36 ac = new Enclosure(*in);
37 return ac; 37 return ac;
38} 38}
39 39
40EmailHandler::EmailHandler() 40EmailHandler::EmailHandler()
41{ 41{
42 qDebug("EMailHandler::EmailHandler"); 42 qDebug("EMailHandler::EmailHandler");
43 43
44 smtpClient = new SmtpClient(); 44 smtpClient = new SmtpClient();
45 popClient = new PopClient(); 45 popClient = new PopClient();
46 46
47 connect(smtpClient, SIGNAL(errorOccurred(int)), this, 47 connect(smtpClient, SIGNAL(errorOccurred(int)), this,
48 SIGNAL(smtpError(int)) ); 48 SIGNAL(smtpError(int)) );
49 connect(smtpClient, SIGNAL(mailSent()), this, SIGNAL(mailSent()) ); 49 connect(smtpClient, SIGNAL(mailSent()), this, SIGNAL(mailSent()) );
50 connect(smtpClient, SIGNAL(updateStatus(const QString &)), this, 50 connect(smtpClient, SIGNAL(updateStatus(const QString &)), this,
51 SIGNAL(updateSmtpStatus(const QString &)) ); 51 SIGNAL(updateSmtpStatus(const QString &)) );
52 52
53 connect(popClient, SIGNAL(errorOccurred(int)), this, 53 connect(popClient, SIGNAL(errorOccurred(int)), this,
54 SIGNAL(popError(int)) ); 54 SIGNAL(popError(int)) );
55 connect(popClient, SIGNAL(newMessage(const QString &, int, uint, bool)), 55 connect(popClient, SIGNAL(newMessage(const QString &, int, uint, bool)),
56 this, SLOT(messageArrived(const QString &, int, uint, bool)) ); 56 this, SLOT(messageArrived(const QString &, int, uint, bool)) );
57 connect(popClient, SIGNAL(updateStatus(const QString &)), this, 57 connect(popClient, SIGNAL(updateStatus(const QString &)), this,
58 SIGNAL(updatePopStatus(const QString &)) ); 58 SIGNAL(updatePopStatus(const QString &)) );
59 connect(popClient, SIGNAL(mailTransfered(int)), this, 59 connect(popClient, SIGNAL(mailTransfered(int)), this,
60 SIGNAL(mailTransfered(int)) ); 60 SIGNAL(mailTransfered(int)) );
61 61
62 62
63 //relaying size information 63 //relaying size information
64 connect(popClient, SIGNAL(currentMailSize(int)), 64 connect(popClient, SIGNAL(currentMailSize(int)),
65 this, SIGNAL(currentMailSize(int)) ); 65 this, SIGNAL(currentMailSize(int)) );
66 connect(popClient, SIGNAL(downloadedSize(int)), 66 connect(popClient, SIGNAL(downloadedSize(int)),
67 this, SIGNAL(downloadedSize(int)) ); 67 this, SIGNAL(downloadedSize(int)) );
68} 68}
69 69
70void EmailHandler::sendMail(QList<Email> *mailList) 70void EmailHandler::sendMail(QList<Email> *mailList)
71{ 71{
72 Email *currentMail; 72 Email *currentMail;
73 QString temp; 73 QString temp;
74 QString userName = mailAccount.name; 74 QString userName = mailAccount.name;
75 userName += " <" + mailAccount.emailAddress + ">"; 75 userName += " <" + mailAccount.emailAddress + ">";
76 76
77 for (currentMail = mailList->first(); currentMail != 0; 77 for (currentMail = mailList->first(); currentMail != 0;
78 currentMail = mailList->next()) { 78 currentMail = mailList->next()) {
79 79
80 if (encodeMime(currentMail) == 0) { 80 if (encodeMime(currentMail) == 0) {
81 smtpClient->addMail(userName, currentMail->subject, 81 smtpClient->addMail(userName, currentMail->subject,
82 currentMail->recipients, currentMail->rawMail); 82 currentMail->recipients, currentMail->rawMail);
83 } else { //error 83 } else { //error
84 temp = tr("Could not locate all files in \nmail with subject: ") + 84 temp = tr("Could not locate all files in \nmail with subject: ") +
85 currentMail->subject; 85 currentMail->subject;
86 temp += tr("\nMail has NOT been sent"); 86 temp += tr("\nMail has NOT been sent");
87 QMessageBox::warning(qApp->activeWindow(), tr("Attachment error"), temp, tr("OK\n")); 87 QMessageBox::warning(qApp->activeWindow(), tr("Attachment error"), temp, tr("OK\n"));
88 88
89 } 89 }
90 } 90 }
91 smtpClient->newConnection(mailAccount.smtpServer, 25); 91 smtpClient->newConnection(mailAccount.smtpServer, 25);
92} 92}
93 93
94void EmailHandler::setAccount(MailAccount account) 94void EmailHandler::setAccount(MailAccount account)
95{ 95{
96 mailAccount = account; 96 mailAccount = account;
97} 97}
98 98
99void EmailHandler::getMail() 99void EmailHandler::getMail()
100{ 100{
101 popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd); 101 popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd);
102 if (mailAccount.synchronize) { 102 if (mailAccount.synchronize) {
103 popClient->setSynchronize(mailAccount.lastServerMailCount); 103 popClient->setSynchronize(mailAccount.lastServerMailCount);
104 } else { 104 } else {
105 popClient->removeSynchronize(); 105 popClient->removeSynchronize();
106 } 106 }
107 107
108 headers = FALSE; 108 headers = FALSE;
109 //popClient->headersOnly(headers, 0); 109 //popClient->headersOnly(headers, 0);
110 popClient->newConnection(mailAccount.popServer, 110); 110 popClient->newConnection(mailAccount.popServer, 110);
111} 111}
112 112
113void EmailHandler::getMailHeaders() 113void EmailHandler::getMailHeaders()
114{ 114{
115 popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd); 115 popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd);
116 mailAccount.synchronize ? popClient->setSynchronize(mailAccount.lastServerMailCount): popClient->removeSynchronize(); 116 mailAccount.synchronize ? popClient->setSynchronize(mailAccount.lastServerMailCount): popClient->removeSynchronize();
117 117
118 headers = TRUE; 118 headers = TRUE;
119 popClient->headersOnly(headers, mailAccount.syncLimit); //less than requested syncLimit, download all 119 popClient->headersOnly(headers, mailAccount.syncLimit); //less than requested syncLimit, download all
120 qDebug("Initiating connection"); 120 qDebug("Initiating connection");
121 popClient->newConnection(mailAccount.popServer, 110); 121 popClient->newConnection(mailAccount.popServer, 110);
122} 122}
123 123
124void EmailHandler::getMailByList(MailList *mailList) 124void EmailHandler::getMailByList(MailList *mailList)
125{ 125{
126 if (mailList->count() == 0) { //should not occur though 126 if (mailList->count() == 0) { //should not occur though
127 emit mailTransfered(0); 127 emit mailTransfered(0);
128 return; 128 return;
129 } 129 }
130 130
131 headers = FALSE; 131 headers = FALSE;
132 popClient->headersOnly(FALSE, 0); 132 popClient->headersOnly(FALSE, 0);
133 133
134 popClient->setAccount(mailAccount.popUserName,mailAccount.popPasswd); 134 popClient->setAccount(mailAccount.popUserName,mailAccount.popPasswd);
135 popClient->setSelectedMails(mailList); 135 popClient->setSelectedMails(mailList);
136 popClient->newConnection(mailAccount.popServer, 110); 136 popClient->newConnection(mailAccount.popServer, 110);
137 } 137 }
138 138
139void EmailHandler::messageArrived(const QString &message, int id, uint size, bool complete) 139void EmailHandler::messageArrived(const QString &message, int id, uint size, bool complete)
140{ 140{
141 Email mail; 141 Email mail;
142 142
143 mail.rawMail = message; 143 mail.rawMail = message;
144 mail.serverId = id; 144 mail.serverId = id;
145 mail.size = size; 145 mail.size = size;
146 mail.downloaded = complete; 146 mail.downloaded = complete;
147 147
148 emit mailArrived(mail, FALSE); 148 emit mailArrived(mail, FALSE);
149} 149}
150 150
151bool EmailHandler::parse(QString in, QString lineShift, Email *mail) 151bool EmailHandler::parse(const QString &in, const QString &lineShift, Email *mail)
152{ 152{
153 QString temp, boundary; 153 QString temp, boundary;
154 int pos; 154 int pos;
155 QString delimiter, header, body, mimeHeader, mimeBody; 155 QString delimiter, header, body, mimeHeader, mimeBody;
156 QString content, contentType, contentAttribute, id, encoding; 156 QString content, contentType, contentAttribute, id, encoding;
157 QString fileName, storedName; 157 QString fileName, storedName;
158 int enclosureId = 0; 158 int enclosureId = 0;
159 159
160 mail->rawMail = in; 160 mail->rawMail = in;
161 mail->received = TRUE; 161 mail->received = TRUE;
162 mail->files.setAutoDelete(TRUE); 162 mail->files.setAutoDelete(TRUE);
163 163
164 temp = lineShift + "." + lineShift; 164 temp = lineShift + "." + lineShift;
165 165
166 if (in.right(temp.length()) != temp) { 166 if (in.right(temp.length()) != temp) {
167 mail->rawMail += temp; 167 mail->rawMail += temp;
168 } 168 }
169 169
170 170
171 delimiter = lineShift + lineShift; // "\n\n" or "\r\n\r\n" 171 delimiter = lineShift + lineShift; // "\n\n" or "\r\n\r\n"
172 pos = in.find(delimiter, 0, FALSE); 172 pos = in.find(delimiter, 0, FALSE);
173 header = in.left(pos); 173 header = in.left(pos);
174 body = in.right(in.length() - pos - delimiter.length()); 174 body = in.right(in.length() - pos - delimiter.length());
175 if ((body.at(body.length()-2) == '.') && (body.at(body.length()-3) == '\n')) 175 if ((body.at(body.length()-2) == '.') && (body.at(body.length()-3) == '\n'))
176 body.truncate(body.length()-2); 176 body.truncate(body.length()-2);
177 177
178 TextParser p(header, lineShift); 178 TextParser p(header, lineShift);
179 179
180 if ((pos = p.find("FROM",':', 0, TRUE)) != -1) { 180 if ((pos = p.find("FROM",':', 0, TRUE)) != -1) {
181 pos++; 181 pos++;
182 if (p.separatorAt(pos) == ' ') { 182 if (p.separatorAt(pos) == ' ') {
183 mail->from = p.getString(&pos, '<', false); 183 mail->from = p.getString(&pos, '<', false);
184 mail->from = mail->from.stripWhiteSpace(); 184 mail->from = mail->from.stripWhiteSpace();
185 if ( (mail->from.length() > 2) && (mail->from[0] == '"') ) { 185 if ( (mail->from.length() > 2) && (mail->from[0] == '"') ) {
186 mail->from = mail->from.left(mail->from.length() - 1); 186 mail->from = mail->from.left(mail->from.length() - 1);
187 mail->from = mail->from.right(mail->from.length() - 1); 187 mail->from = mail->from.right(mail->from.length() - 1);
188 } 188 }
189 pos++; 189 pos++;
190 mail->fromMail = p.getString(&pos, '>', false); 190 mail->fromMail = p.getString(&pos, '>', false);
191 } else { 191 } else {
192 if (p.separatorAt(pos) == '<') //No name.. nasty 192 if (p.separatorAt(pos) == '<') //No name.. nasty
193 pos++; 193 pos++;
194 //pos++; 194 //pos++;
195 mail->fromMail = p.getString(&pos, 'z', TRUE); 195 mail->fromMail = p.getString(&pos, 'z', TRUE);
196 if (mail->fromMail.at(mail->fromMail.length()-1) == '>') 196 if (mail->fromMail.at(mail->fromMail.length()-1) == '>')
197 mail->fromMail.truncate(mail->fromMail.length() - 1); 197 mail->fromMail.truncate(mail->fromMail.length() - 1);
198 mail->from=mail->fromMail; 198 mail->from=mail->fromMail;
199 } 199 }
200 } 200 }
201 201
202 pos=0; 202 pos=0;
203 203
204 //Search for To: after the FROM: attribute to prevent hitting the Delivered-To: 204 //Search for To: after the FROM: attribute to prevent hitting the Delivered-To:
205 while((pos = p.find("TO",':', pos+1, TRUE))!=-1) 205 while((pos = p.find("TO",':', pos+1, TRUE))!=-1)
206 { 206 {
207 QString rec; 207 QString rec;
208 208
209 if (p.separatorAt(pos-1)!='-')//The - separator means that this is a Delivered-To: or Reply-To: 209 if (p.separatorAt(pos-1)!='-') //The - separator means that this is a Delivered-To: or Reply-To:
210 { 210 {
211 pos++; 211 pos++;
212 mail->recipients.append(p.getString(&pos, '\r', TRUE)); 212 mail->recipients.append(p.getString(&pos, '\r', TRUE));
213 } 213 }
214 } 214 }
215 // 215 //
216 //if (pos==-1) mail->recipients.append (tr("undisclosed recipients") ); 216 //if (pos==-1) mail->recipients.append (tr("undisclosed recipients") );
217 217
218 if ((pos = p.find("CC",':', 0, TRUE)) != -1) 218 if ((pos = p.find("CC",':', 0, TRUE)) != -1)
219 { 219 {
220 pos++; 220 pos++;
221 mail->carbonCopies.append (p.getString(&pos, 'z', TRUE) ); 221 mail->carbonCopies.append (p.getString(&pos, 'z', TRUE) );
222 } 222 }
223 223
224 if ((pos = p.find("SUBJECT",':', 0, TRUE)) != -1) { 224 if ((pos = p.find("SUBJECT",':', 0, TRUE)) != -1) {
225 pos++; 225 pos++;
226 mail->subject = p.getString(&pos, 'z', TRUE); 226 mail->subject = p.getString(&pos, 'z', TRUE);
227 } 227 }
228 228
229 if ((pos = p.find("DATE",':', 0, TRUE)) != -1) { 229 if ((pos = p.find("DATE",':', 0, TRUE)) != -1) {
230 pos++; 230 pos++;
231 mail->date = p.getString(&pos, 'z', TRUE); 231 mail->date = p.getString(&pos, 'z', TRUE);
232 } 232 }
233 233
234 234
235 235
236 if ((pos = p.find("MESSAGE",'-', 0, TRUE)) != -1) { 236 if ((pos = p.find("MESSAGE",'-', 0, TRUE)) != -1) {
237 pos++; 237 pos++;
238 if ( (p.wordAt(pos).upper() == "ID") && 238 if ( (p.wordAt(pos).upper() == "ID") &&
239 (p.separatorAt(pos) == ':') ) { 239 (p.separatorAt(pos) == ':') ) {
240 240
241 id = p.getString(&pos, 'z', TRUE); 241 id = p.getString(&pos, 'z', TRUE);
242 mail->id = id; 242 mail->id = id;
243 } 243 }
244 } 244 }
245 245
246 pos = 0; 246 pos = 0;
247 while ( ((pos = p.find("MIME",'-', pos, TRUE)) != -1) ) { 247 while ( ((pos = p.find("MIME",'-', pos, TRUE)) != -1) ) {
248 pos++; 248 pos++;
249 if ( (p.wordAt(pos).upper() == "VERSION") && 249 if ( (p.wordAt(pos).upper() == "VERSION") &&
250 (p.separatorAt(pos) == ':') ) { 250 (p.separatorAt(pos) == ':') ) {
251 pos++; 251 pos++;
252 if (p.getString(&pos, 'z', true) == "1.0") { 252 if (p.getString(&pos, 'z', true) == "1.0") {
253 mail->mimeType = 1; 253 mail->mimeType = 1;
254 } 254 }
255 } 255 }
256 } 256 }
257 257
258 if (mail->mimeType == 1) { 258 if (mail->mimeType == 1) {
259 boundary = ""; 259 boundary = "";
260 if ((pos = p.find("BOUNDARY", '=', 0, TRUE)) != -1) { 260 if ((pos = p.find("BOUNDARY", '=', 0, TRUE)) != -1) {
261 pos++; 261 pos++;
262 boundary = p.getString(&pos, 'z', true); 262 boundary = p.getString(&pos, 'z', true);
263 if (boundary[0] == '"') { 263 if (boundary[0] == '"') {
264 boundary = boundary.left(boundary.length() - 1); //strip " 264 boundary = boundary.left(boundary.length() - 1); //strip "
265 boundary = boundary.right(boundary.length() - 1); //strip " 265 boundary = boundary.right(boundary.length() - 1); //strip "
266 } 266 }
267 boundary = "--" + boundary; //create boundary field 267 boundary = "--" + boundary; //create boundary field
268 } 268 }
269 269
270 if (boundary == "") { //fooled by Mime-Version 270 if (boundary == "") { //fooled by Mime-Version
271 mail->body = body; 271 mail->body = body;
272 mail->bodyPlain = body; 272 mail->bodyPlain = body;
273 return mail; 273 return mail;
274 } 274 }
275 275
276 while (body.length() > 0) { 276 while (body.length() > 0) {
277 pos = body.find(boundary, 0, FALSE); 277 pos = body.find(boundary, 0, FALSE);
278 pos = body.find(delimiter, pos, FALSE); 278 pos = body.find(delimiter, pos, FALSE);
279 mimeHeader = body.left(pos); 279 mimeHeader = body.left(pos);
280 mimeBody = body.right(body.length() - pos - delimiter.length()); 280 mimeBody = body.right(body.length() - pos - delimiter.length());
281 TextParser bp(mimeHeader, lineShift); 281 TextParser bp(mimeHeader, lineShift);
282 282
283 contentType = ""; 283 contentType = "";
284 contentAttribute = ""; 284 contentAttribute = "";
285 fileName = ""; 285 fileName = "";
286 if ((pos = bp.find("CONTENT",'-', 0, TRUE)) != -1) { 286 if ((pos = bp.find("CONTENT",'-', 0, TRUE)) != -1) {
287 pos++; 287 pos++;
288 if ( (bp.wordAt(pos).upper() == "TYPE") && 288 if ( (bp.wordAt(pos).upper() == "TYPE") &&
289 (bp.separatorAt(pos) == ':') ) { 289 (bp.separatorAt(pos) == ':') ) {
290 contentType = bp.nextWord().upper(); 290 contentType = bp.nextWord().upper();
291 if (bp.nextSeparator() == '/') 291 if (bp.nextSeparator() == '/')
292 contentAttribute = bp.nextWord().upper(); 292 contentAttribute = bp.nextWord().upper();
293 content = contentType + "/" + contentAttribute; 293 content = contentType + "/" + contentAttribute;
294 } 294 }
295 if ((pos = bp.find("ENCODING",':', 0, TRUE)) != -1) { 295 if ((pos = bp.find("ENCODING",':', 0, TRUE)) != -1) {
296 pos++; 296 pos++;
297 encoding = bp.getString(&pos, 'z', TRUE); 297 encoding = bp.getString(&pos, 'z', TRUE);
298 } 298 }
299 299
300 if ( (pos = bp.find("FILENAME",'=', 0, TRUE)) != -1) { 300 if ( (pos = bp.find("FILENAME",'=', 0, TRUE)) != -1) {
301 pos++; 301 pos++;
302 fileName = bp.getString(&pos, 'z', TRUE); 302 fileName = bp.getString(&pos, 'z', TRUE);
303 fileName = fileName.right(fileName.length() - 1); 303 fileName = fileName.right(fileName.length() - 1);
304 fileName = fileName.left(fileName.length() - 1); 304 fileName = fileName.left(fileName.length() - 1);
305 } 305 }
306 306
307 } 307 }
308 pos = mimeBody.find(boundary, 0, FALSE); 308 pos = mimeBody.find(boundary, 0, FALSE);
309 if (pos == -1) //should not occur, malformed mail 309 if (pos == -1) //should not occur, malformed mail
310 pos = mimeBody.length(); 310 pos = mimeBody.length();
311 body = mimeBody.right(mimeBody.length() - pos); 311 body = mimeBody.right(mimeBody.length() - pos);
312 mimeBody = mimeBody.left(pos); 312 mimeBody = mimeBody.left(pos);
313 313
314 if (fileName != "") { //attatchments of some type, audio, image etc. 314 if (fileName != "") { //attatchments of some type, audio, image etc.
315 315
316 Enclosure e; 316 Enclosure e;
317 e.id = enclosureId; 317 e.id = enclosureId;
318 e.originalName = fileName; 318 e.originalName = fileName;
319 e.contentType = contentType; 319 e.contentType = contentType;
320 e.contentAttribute = contentAttribute; 320 e.contentAttribute = contentAttribute;
321 e.encoding = encoding; 321 e.encoding = encoding;
322 e.body = mimeBody; 322 e.body = mimeBody;
323 e.saved = FALSE; 323 e.saved = FALSE;
324 mail->addEnclosure(&e); 324 mail->addEnclosure(&e);
325 enclosureId++; 325 enclosureId++;
326 326
327 } else if (contentType == "TEXT") { 327 } else if (contentType == "TEXT") {
328 if (contentAttribute == "PLAIN") { 328 if (contentAttribute == "PLAIN") {
329 mail->body = mimeBody; 329 mail->body = mimeBody;
330 mail->bodyPlain = mimeBody; 330 mail->bodyPlain = mimeBody;
331 } 331 }
332 if (contentAttribute == "HTML") { 332 if (contentAttribute == "HTML") {
333 mail->body = mimeBody; 333 mail->body = mimeBody;
334 } 334 }
335 } 335 }
336 } 336 }
337 } else { 337 } else {
338 mail->bodyPlain = body; 338 mail->bodyPlain = body;
339 mail->body = body; 339 mail->body = body;
340 } 340 }
341 return TRUE; 341 return TRUE;
342} 342}
343 343
344bool EmailHandler::getEnclosure(Enclosure *ePtr) 344bool EmailHandler::getEnclosure(Enclosure *ePtr)
345{ 345{
346 QFile f(ePtr->path + ePtr->name); 346 QFile f(ePtr->path + ePtr->name);
347 char src[4]; 347 char src[4];
348 char *destPtr; 348 char *destPtr;
349 QByteArray buffer; 349 QByteArray buffer;
350 uint bufCount, pos, decodedCount, size, x; 350 uint bufCount, pos, decodedCount, size, x;
351 351
352 if (! f.open(IO_WriteOnly) ) { 352 if (! f.open(IO_WriteOnly) ) {
353 qWarning("could not save: " + ePtr->path + ePtr->name); 353 qWarning("could not save: " + ePtr->path + ePtr->name);
354 return FALSE; 354 return FALSE;
355 } 355 }
356 356
357 if (ePtr->encoding.upper() == "BASE64") { 357 if (ePtr->encoding.upper() == "BASE64") {
358 size = (ePtr->body.length() * 3 / 4); //approximate size (always above) 358 size = (ePtr->body.length() * 3 / 4); //approximate size (always above)
359 buffer.resize(size); 359 buffer.resize(size);
360 bufCount = 0; 360 bufCount = 0;
361 pos = 0; 361 pos = 0;
362 destPtr = buffer.data(); 362 destPtr = buffer.data();
363 363
364 while (pos < ePtr->body.length()) { 364 while (pos < ePtr->body.length()) {
365 decodedCount = 4; 365 decodedCount = 4;
366 x = 0; 366 x = 0;
367 while ( (x < 4) && (pos < ePtr->body.length()) ) { 367 while ( (x < 4) && (pos < ePtr->body.length()) ) {
368 src[x] = ePtr->body[pos].latin1(); 368 src[x] = ePtr->body[pos].latin1();
369 pos++; 369 pos++;
370 if (src[x] == '\r' || src[x] == '\n' || src[x] == ' ') 370 if (src[x] == '\r' || src[x] == '\n' || src[x] == ' ')
371 x--; 371 x--;
372 x++; 372 x++;
373 } 373 }
374 if (x > 1) { 374 if (x > 1) {
375 decodedCount = parse64base(src, destPtr); 375 decodedCount = parse64base(src, destPtr);
376 destPtr += decodedCount; 376 destPtr += decodedCount;
377 bufCount += decodedCount; 377 bufCount += decodedCount;
378 } 378 }
379 } 379 }
380 380
381 buffer.resize(bufCount); //set correct length of file 381 buffer.resize(bufCount); //set correct length of file
382 f.writeBlock(buffer); 382 f.writeBlock(buffer);
383 } else { 383 } else {
384 QTextStream t(&f); 384 QTextStream t(&f);
385 t << ePtr->body; 385 t << ePtr->body;
386 } 386 }
387 return TRUE; 387 return TRUE;
388} 388}
389 389
390int EmailHandler::parse64base(char *src, char *bufOut) { 390int EmailHandler::parse64base(char *src, char *bufOut) {
391 391
392 char c, z; 392 char c, z;
393 char li[4]; 393 char li[4];
394 int processed; 394 int processed;
395 395
396 //conversion table withouth table... 396 //conversion table withouth table...
397 for (int x = 0; x < 4; x++) { 397 for (int x = 0; x < 4; x++) {
398 c = src[x]; 398 c = src[x];
399 399
400 if ( (int) c >= 'A' && (int) c <= 'Z') 400 if ( (int) c >= 'A' && (int) c <= 'Z')
401 li[x] = (int) c - (int) 'A'; 401 li[x] = (int) c - (int) 'A';
402 if ( (int) c >= 'a' && (int) c <= 'z') 402 if ( (int) c >= 'a' && (int) c <= 'z')
403 li[x] = (int) c - (int) 'a' + 26; 403 li[x] = (int) c - (int) 'a' + 26;
404 if ( (int) c >= '0' && (int) c <= '9') 404 if ( (int) c >= '0' && (int) c <= '9')
405 li[x] = (int) c - (int) '0' + 52; 405 li[x] = (int) c - (int) '0' + 52;
406 if (c == '+') 406 if (c == '+')
407 li[x] = 62; 407 li[x] = 62;
408 if (c == '/') 408 if (c == '/')
409 li[x] = 63; 409 li[x] = 63;
410 } 410 }
411 411
412 processed = 1; 412 processed = 1;
413 bufOut[0] = (char) li[0] & (32+16+8+4+2+1); //mask out top 2 bits 413 bufOut[0] = (char) li[0] & (32+16+8+4+2+1); //mask out top 2 bits
414 bufOut[0] <<= 2; 414 bufOut[0] <<= 2;
415 z = li[1] >> 4; 415 z = li[1] >> 4;
416 bufOut[0] = bufOut[0] | z; //first byte retrived 416 bufOut[0] = bufOut[0] | z; //first byte retrived
417 417
418 if (src[2] != '=') { 418 if (src[2] != '=') {
419 bufOut[1] = (char) li[1] & (8+4+2+1); //mask out top 4 bits 419 bufOut[1] = (char) li[1] & (8+4+2+1); //mask out top 4 bits
420 bufOut[1] <<= 4; 420 bufOut[1] <<= 4;
421 z = li[2] >> 2; 421 z = li[2] >> 2;
422 bufOut[1] = bufOut[1] | z; //second byte retrived 422 bufOut[1] = bufOut[1] | z; //second byte retrived
423 processed++; 423 processed++;
424 424
425 if (src[3] != '=') { 425 if (src[3] != '=') {
426 bufOut[2] = (char) li[2] & (2+1); //mask out top 6 bits 426 bufOut[2] = (char) li[2] & (2+1); //mask out top 6 bits
427 bufOut[2] <<= 6; 427 bufOut[2] <<= 6;
428 z = li[3]; 428 z = li[3];
429 bufOut[2] = bufOut[2] | z; //third byte retrieved 429 bufOut[2] = bufOut[2] | z; //third byte retrieved
430 processed++; 430 processed++;
431 } 431 }
432 } 432 }
433 return processed; 433 return processed;
434} 434}
435 435
436int EmailHandler::encodeMime(Email *mail) 436int EmailHandler::encodeMime(Email *mail)
437{ 437{
438 438
439 QString fileName, fileType, contentType, newBody, boundary; 439 QString fileName, fileType, contentType, newBody, boundary;
440 Enclosure *ePtr; 440 Enclosure *ePtr;
441 441
442 QString userName = mailAccount.name; 442 QString userName = mailAccount.name;
443 if (userName.length()>0)//only embrace it if there is a user name 443 if (userName.length()>0) //only embrace it if there is a user name
444 userName += " <" + mailAccount.emailAddress + ">"; 444 userName += " <" + mailAccount.emailAddress + ">";
445 445
446 //add standard headers 446 //add standard headers
447 newBody = "From: " + userName + "\r\nTo: "; 447 newBody = "From: " + userName + "\r\nTo: ";
448 for (QStringList::Iterator it = mail->recipients.begin(); it != mail->recipients.end(); ++it ) { 448 for (QStringList::Iterator it = mail->recipients.begin(); it != mail->recipients.end(); ++it ) {
449 newBody += *it + " "; 449 newBody += *it + " ";
450 } 450 }
451 451
452 newBody += "\r\nCC: "; 452 newBody += "\r\nCC: ";
453 453
454 for (QStringList::Iterator it = mail->carbonCopies.begin(); it != mail->carbonCopies.end(); ++it ) { 454 for (QStringList::Iterator it = mail->carbonCopies.begin(); it != mail->carbonCopies.end(); ++it ) {
455 newBody += *it + " "; 455 newBody += *it + " ";
456 } 456 }
457 457
458 newBody += "\r\nSubject: " + mail->subject + "\r\n"; 458 newBody += "\r\nSubject: " + mail->subject + "\r\n";
459 459
460 if (mail->files.count() == 0) { //just a simple mail 460 if (mail->files.count() == 0) { //just a simple mail
461 newBody += "\r\n" + mail->body; 461 newBody += "\r\n" + mail->body;
462 mail->rawMail = newBody; 462 mail->rawMail = newBody;
463 return 0; 463 return 0;
464 } 464 }
465 465
466 //Build mime encoded mail 466 //Build mime encoded mail
467 boundary = "-----4345=next_bound=0495----"; 467 boundary = "-----4345=next_bound=0495----";
468 468
469 newBody += "Mime-Version: 1.0\r\n"; 469 newBody += "Mime-Version: 1.0\r\n";
470 newBody += "Content-Type: multipart/mixed; boundary=\"" + 470 newBody += "Content-Type: multipart/mixed; boundary=\"" +
471 boundary + "\"\r\n\r\n"; 471 boundary + "\"\r\n\r\n";
472 472
473 newBody += "This is a multipart message in Mime 1.0 format\r\n\r\n"; 473 newBody += "This is a multipart message in Mime 1.0 format\r\n\r\n";
474 newBody += "--" + boundary + "\r\nContent-Type: text/plain\r\n\r\n"; 474 newBody += "--" + boundary + "\r\nContent-Type: text/plain\r\n\r\n";
475 newBody += mail->body; 475 newBody += mail->body;
476 476
477 for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) { 477 for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) {
478 fileName = ePtr->originalName; 478 fileName = ePtr->originalName;
479 fileType = ePtr->contentType; 479 fileType = ePtr->contentType;
480 QFileInfo fi(fileName); 480 QFileInfo fi(fileName);
481 481
482 // This specification of contentType is temporary 482 // This specification of contentType is temporary
483 contentType = ""; 483 contentType = "";
484 if (fileType == "Picture") { 484 if (fileType == "Picture") {
485 contentType = "image/x-image"; 485 contentType = "image/x-image";
486 } else if (fileType == "Document") { 486 } else if (fileType == "Document") {
487 contentType = "text/plain"; 487 contentType = "text/plain";
488 } else if (fileType == "Sound") { 488 } else if (fileType == "Sound") {
489 contentType = "audio/x-wav"; 489 contentType = "audio/x-wav";
490 } else if (fileType == "Movie") { 490 } else if (fileType == "Movie") {
491 contentType = "video/mpeg"; 491 contentType = "video/mpeg";
492 } else { 492 } else {
493 contentType = "application/octet-stream"; 493 contentType = "application/octet-stream";
494 } 494 }
495 495
496 newBody += "\r\n\r\n--" + boundary + "\r\n"; 496 newBody += "\r\n\r\n--" + boundary + "\r\n";
497 newBody += "Content-Type: " + contentType + "; name=\"" + 497 newBody += "Content-Type: " + contentType + "; name=\"" +
498 fi.fileName() + "\"\r\n"; 498 fi.fileName() + "\"\r\n";
499 newBody += "Content-Transfer-Encoding: base64\r\n"; 499 newBody += "Content-Transfer-Encoding: base64\r\n";
500 newBody += "Content-Disposition: inline; filename=\"" + 500 newBody += "Content-Disposition: inline; filename=\"" +
501 fi.fileName() + "\"\r\n\r\n"; 501 fi.fileName() + "\"\r\n\r\n";
502 502
503 if (encodeFile(fileName, &newBody) == -1) //file not found? 503 if (encodeFile(fileName, &newBody) == -1) //file not found?
504 return -1; 504 return -1;
505 } 505 }
506 506
507 newBody += "\r\n\r\n--" + boundary + "--"; 507 newBody += "\r\n\r\n--" + boundary + "--";
508 mail->rawMail = newBody; 508 mail->rawMail = newBody;
509 509
510 return 0; 510 return 0;
511} 511}
512 512
513int EmailHandler::encodeFile(QString fileName, QString *toBody) 513int EmailHandler::encodeFile(const QString &fileName, QString *toBody)
514{ 514{
515 char *fileData; 515 char *fileData;
516 char *dataPtr; 516 char *dataPtr;
517 QString temp; 517 QString temp;
518 uint dataSize, count; 518 uint dataSize, count;
519 QFile f(fileName); 519 QFile f(fileName);
520 520
521 if (! f.open(IO_ReadOnly) ) { 521 if (! f.open(IO_ReadOnly) ) {
522 qWarning("could not open file: " + fileName); 522 qWarning("could not open file: " + fileName);
523 return -1; 523 return -1;
524 } 524 }
525 QTextStream s(&f); 525 QTextStream s(&f);
526 dataSize = f.size(); 526 dataSize = f.size();
527 fileData = (char *) malloc(dataSize + 3); 527 fileData = (char *) malloc(dataSize + 3);
528 s.readRawBytes(fileData, dataSize); 528 s.readRawBytes(fileData, dataSize);
529 529
530 temp = ""; 530 temp = "";
531 dataPtr = fileData; 531 dataPtr = fileData;
532 count = 0; 532 count = 0;
533 while (dataSize > 0) { 533 while (dataSize > 0) {
534 if (dataSize < 3) { 534 if (dataSize < 3) {
535 encode64base(dataPtr, &temp, dataSize); 535 encode64base(dataPtr, &temp, dataSize);
536 dataSize = 0; 536 dataSize = 0;
537 } else { 537 } else {
538 encode64base(dataPtr, &temp, 3); 538 encode64base(dataPtr, &temp, 3);
539 dataSize -= 3; 539 dataSize -= 3;
540 dataPtr += 3; 540 dataPtr += 3;
541 count += 4; 541 count += 4;
542 } 542 }
543 if (count > 72) { 543 if (count > 72) {
544 count = 0; 544 count = 0;
545 temp += "\r\n"; 545 temp += "\r\n";
546 } 546 }
547 } 547 }
548 toBody->append(temp); 548 toBody->append(temp);
549 549
550 delete(fileData); 550 delete(fileData);
551 f.close(); 551 f.close();
552 return 0; 552 return 0;
553} 553}
554 554
555void EmailHandler::encode64base(char *src, QString *dest, int len) 555void EmailHandler::encode64base(char *src, QString *dest, int len)
556{ 556{
557 QString temp; 557 QString temp;
558 uchar c; 558 uchar c;
559 uchar bufOut[4]; 559 uchar bufOut[4];
560 560
561 bufOut[0] = src[0]; 561 bufOut[0] = src[0];
562 bufOut[0] >>= 2; //Done byte 0 562 bufOut[0] >>= 2; //Done byte 0
563 563
564 bufOut[1] = src[0]; 564 bufOut[1] = src[0];
565 bufOut[1] = bufOut[1] & (1 + 2); //mask out top 6 bits 565 bufOut[1] = bufOut[1] & (1 + 2); //mask out top 6 bits
566 bufOut[1] <<= 4; //copy up 4 places 566 bufOut[1] <<= 4; //copy up 4 places
567 if (len > 1) { 567 if (len > 1) {
568 c = src[1]; 568 c = src[1];
569 } else { 569 } else {
570 c = 0; 570 c = 0;
571 } 571 }
572 572
573 c = c & (16 + 32 + 64 + 128); 573 c = c & (16 + 32 + 64 + 128);
574 c >>= 4; 574 c >>= 4;
575 bufOut[1] = bufOut[1] | c; //Done byte 1 575 bufOut[1] = bufOut[1] | c; //Done byte 1
576 576
577 bufOut[2] = src[1]; 577 bufOut[2] = src[1];
578 bufOut[2] = bufOut[2] & (1 + 2 + 4 + 8); 578 bufOut[2] = bufOut[2] & (1 + 2 + 4 + 8);
579 bufOut[2] <<= 2; 579 bufOut[2] <<= 2;
580 if (len > 2) { 580 if (len > 2) {
581 c = src[2]; 581 c = src[2];
582 } else { 582 } else {
583 c = 0; 583 c = 0;
584 } 584 }
585 c >>= 6; 585 c >>= 6;
586 bufOut[2] = bufOut[2] | c; 586 bufOut[2] = bufOut[2] | c;
587 587
588 bufOut[3] = src[2]; 588 bufOut[3] = src[2];
589 bufOut[3] = bufOut[3] & (1 + 2 + 4 + 8 + 16 + 32); 589 bufOut[3] = bufOut[3] & (1 + 2 + 4 + 8 + 16 + 32);
590 590
591 if (len == 1) { 591 if (len == 1) {
592 bufOut[2] = 64; 592 bufOut[2] = 64;
593 bufOut[3] = 64; 593 bufOut[3] = 64;
594 } 594 }
595 if (len == 2) { 595 if (len == 2) {
596 bufOut[3] = 64; 596 bufOut[3] = 64;
597 } 597 }
598 for (int x = 0; x < 4; x++) { 598 for (int x = 0; x < 4; x++) {
599 if (bufOut[x] <= 25) 599 if (bufOut[x] <= 25)
600 bufOut[x] += (uint) 'A'; 600 bufOut[x] += (uint) 'A';
601 else if (bufOut[x] >= 26 && bufOut[x] <= 51) 601 else if (bufOut[x] >= 26 && bufOut[x] <= 51)
602 bufOut[x] += (uint) 'a' - 26; 602 bufOut[x] += (uint) 'a' - 26;
603 else if (bufOut[x] >= 52 && bufOut[x] <= 61) 603 else if (bufOut[x] >= 52 && bufOut[x] <= 61)
604 bufOut[x] += (uint) '0' - 52; 604 bufOut[x] += (uint) '0' - 52;
605 else if (bufOut[x] == 62) 605 else if (bufOut[x] == 62)
606 bufOut[x] = '+'; 606 bufOut[x] = '+';
607 else if (bufOut[x] == 63) 607 else if (bufOut[x] == 63)
608 bufOut[x] = '/'; 608 bufOut[x] = '/';
609 else if (bufOut[x] == 64) 609 else if (bufOut[x] == 64)
610 bufOut[x] = '='; 610 bufOut[x] = '=';
611 611
612 dest->append(bufOut[x]); 612 dest->append(bufOut[x]);
613 } 613 }
614} 614}
615 615
616void EmailHandler::cancel() 616void EmailHandler::cancel()
617{ 617{
618 popClient->errorHandling(ErrCancel); 618 popClient->errorHandling(ErrCancel);
619 smtpClient->errorHandling(ErrCancel); 619 smtpClient->errorHandling(ErrCancel);
620} 620}
621 621
diff --git a/noncore/unsupported/mailit/emailhandler.h b/noncore/unsupported/mailit/emailhandler.h
index 5b59f65..e4e7f46 100644
--- a/noncore/unsupported/mailit/emailhandler.h
+++ b/noncore/unsupported/mailit/emailhandler.h
@@ -1,150 +1,150 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef EmailHandler_H 20#ifndef EmailHandler_H
21#define EmailHandler_H 21#define EmailHandler_H
22 22
23#include <qobject.h> 23#include <qobject.h>
24#include <qstring.h> 24#include <qstring.h>
25#include <qdatetime.h> 25#include <qdatetime.h>
26#include <qlist.h> 26#include <qlist.h>
27#include <qstringlist.h> 27#include <qstringlist.h>
28#include <qfile.h> 28#include <qfile.h>
29#include <qstringlist.h> 29#include <qstringlist.h>
30#include <qcollection.h> 30#include <qcollection.h>
31#include <qpe/qcopenvelope_qws.h> 31#include <qpe/qcopenvelope_qws.h>
32 32
33#include "smtpclient.h" 33#include "smtpclient.h"
34#include "popclient.h" 34#include "popclient.h"
35#include "textparser.h" 35#include "textparser.h"
36#include "maillist.h" 36#include "maillist.h"
37 37
38struct Enclosure 38struct Enclosure
39{ 39{
40 int id; 40 int id;
41 QString originalName; 41 QString originalName;
42 QString name; 42 QString name;
43 QString path; 43 QString path;
44 QString contentType; 44 QString contentType;
45 QString contentAttribute; 45 QString contentAttribute;
46 QString encoding; 46 QString encoding;
47 QString body; //might use to much mem. check!! 47 QString body; //might use to much mem. check!!
48 bool saved, installed; 48 bool saved, installed;
49}; 49};
50 50
51class EnclosureList : public QList<Enclosure> 51class EnclosureList : public QList<Enclosure>
52{ 52{
53public: 53public:
54 Item newItem(Item d); 54 Item newItem(Item d);
55private: 55private:
56 Enclosure* dupl(Enclosure *in); 56 Enclosure* dupl(Enclosure *in);
57 Enclosure *ac; 57 Enclosure *ac;
58}; 58};
59 59
60struct Email 60struct Email
61{ 61{
62 QString id; 62 QString id;
63 QString from; 63 QString from;
64 QString fromMail; 64 QString fromMail;
65 QStringList recipients; 65 QStringList recipients;
66 QStringList carbonCopies; 66 QStringList carbonCopies;
67 QString date; 67 QString date;
68 QString subject; 68 QString subject;
69 QString body; 69 QString body;
70 QString bodyPlain; 70 QString bodyPlain;
71 bool sent, received, read, downloaded; 71 bool sent, received, read, downloaded;
72 QString rawMail; 72 QString rawMail;
73 int mimeType; //1 = Mime 1.0 73 int mimeType; //1 = Mime 1.0
74 int serverId; 74 int serverId;
75 int internalId; 75 int internalId;
76 int fromAccountId; 76 int fromAccountId;
77 QString contentType; //0 = text 77 QString contentType; //0 = text
78 QString contentAttribute; //0 = plain, 1 = html 78 QString contentAttribute; //0 = plain, 1 = html
79 EnclosureList files; 79 EnclosureList files;
80 uint size; 80 uint size;
81 81
82 void addEnclosure(Enclosure *e) 82 void addEnclosure(Enclosure *e)
83 { 83 {
84 files.append(e); 84 files.append(e);
85 } 85 }
86}; 86};
87 87
88struct MailAccount 88struct MailAccount
89{ 89{
90 QString accountName; 90 QString accountName;
91 QString name; 91 QString name;
92 QString emailAddress; 92 QString emailAddress;
93 QString popUserName; 93 QString popUserName;
94 QString popPasswd; 94 QString popPasswd;
95 QString popServer; 95 QString popServer;
96 QString smtpServer; 96 QString smtpServer;
97 bool synchronize; 97 bool synchronize;
98 int syncLimit; 98 int syncLimit;
99 int lastServerMailCount; 99 int lastServerMailCount;
100 int id; 100 int id;
101}; 101};
102 102
103 const int ErrUnknownResponse = 1001; 103 const int ErrUnknownResponse = 1001;
104 const int ErrLoginFailed = 1002; 104 const int ErrLoginFailed = 1002;
105 const int ErrCancel = 1003; 105 const int ErrCancel = 1003;
106 106
107 107
108class EmailHandler : public QObject 108class EmailHandler : public QObject
109{ 109{
110 Q_OBJECT 110 Q_OBJECT
111 111
112public: 112public:
113 EmailHandler(); 113 EmailHandler();
114 void setAccount(MailAccount account); 114 void setAccount(MailAccount account);
115 MailAccount* getAccount(){return &mailAccount;} 115 MailAccount* getAccount(){return &mailAccount;}
116 void sendMail(QList<Email> *mailList); 116 void sendMail(QList<Email> *mailList);
117 void getMail(); 117 void getMail();
118 void getMailHeaders(); 118 void getMailHeaders();
119 void getMailByList(MailList *mailList); 119 void getMailByList(MailList *mailList);
120 bool parse(QString in, QString lineShift, Email *mail); 120 bool parse(const QString &in, const QString &lineShift, Email *mail);
121 bool getEnclosure(Enclosure *ePtr); 121 bool getEnclosure(Enclosure *ePtr);
122 int parse64base(char *src, char *dest); 122 int parse64base(char *src, char *dest);
123 int encodeMime(Email *mail); 123 int encodeMime(Email *mail);
124 int encodeFile(QString fileName, QString *toBody); 124 int encodeFile(const QString &fileName, QString *toBody);
125 void encode64base(char *src, QString *dest, int len); 125 void encode64base(char *src, QString *dest, int len);
126 void cancel(); 126 void cancel();
127 127
128signals: 128signals:
129 void mailSent(); 129 void mailSent();
130 void smtpError(int); 130 void smtpError(int);
131 void popError(int); 131 void popError(int);
132 void mailArrived(const Email &, bool); 132 void mailArrived(const Email &, bool);
133 void updatePopStatus(const QString &); 133 void updatePopStatus(const QString &);
134 void updateSmtpStatus(const QString &); 134 void updateSmtpStatus(const QString &);
135 void mailTransfered(int); 135 void mailTransfered(int);
136 void mailboxSize(int); 136 void mailboxSize(int);
137 void currentMailSize(int); 137 void currentMailSize(int);
138 void downloadedSize(int); 138 void downloadedSize(int);
139 139
140public slots: 140public slots:
141 void messageArrived(const QString &, int id, uint size, bool complete); 141 void messageArrived(const QString &, int id, uint size, bool complete);
142 142
143private: 143private:
144 MailAccount mailAccount; 144 MailAccount mailAccount;
145 SmtpClient *smtpClient; 145 SmtpClient *smtpClient;
146 PopClient *popClient; 146 PopClient *popClient;
147 bool headers; 147 bool headers;
148}; 148};
149 149
150#endif 150#endif
diff --git a/noncore/unsupported/mailit/emaillistitem.cpp b/noncore/unsupported/mailit/emaillistitem.cpp
index b925a1c..fc9f766 100644
--- a/noncore/unsupported/mailit/emaillistitem.cpp
+++ b/noncore/unsupported/mailit/emaillistitem.cpp
@@ -1,99 +1,99 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include <qstring.h> 20#include <qstring.h>
21#include <qpe/resource.h> 21#include <qpe/resource.h>
22#include "emaillistitem.h" 22#include "emaillistitem.h"
23 23
24EmailListItem::EmailListItem(QListView *parent, Email mailIn, bool inbox) 24EmailListItem::EmailListItem(QListView *parent, Email mailIn, bool inbox)
25 : QListViewItem(parent) 25 : QListViewItem(parent)
26{ 26{
27 QString temp; 27 QString temp;
28 28
29 mail = mailIn; 29 mail = mailIn;
30 30
31 if (inbox) { 31 if (inbox) {
32 setText(0, mail.from); 32 setText(0, mail.from);
33 } else { 33 } else {
34 QStringList::Iterator it = mail.recipients.begin(); 34 QStringList::Iterator it = mail.recipients.begin();
35 temp = *it; 35 temp = *it;
36 if (mail.recipients.count() > 1) 36 if (mail.recipients.count() > 1)
37 temp += "..."; 37 temp += "...";
38 setText(0, temp); 38 setText(0, temp);
39 } 39 }
40 setText(1, mail.subject); 40 setText(1, mail.subject);
41 setText(2,mail.date); 41 setText(2,mail.date);
42 42
43 if (mailIn.files.count()>0) 43 if (mailIn.files.count()>0)
44 { 44 {
45 setPixmap(0, Resource::loadPixmap("mailit/attach")); 45 setPixmap(0, Resource::loadPixmap("mailit/attach"));
46 } 46 }
47 47
48 selected = FALSE; 48 selected = FALSE;
49} 49}
50 50
51Email* EmailListItem::getMail() 51Email* EmailListItem::getMail()
52{ 52{
53 return &mail; 53 return &mail;
54} 54}
55 55
56void EmailListItem::setMail(Email newMail) 56void EmailListItem::setMail(Email newMail)
57{ 57{
58 mail = newMail; 58 mail = newMail;
59 repaint(); 59 repaint();
60} 60}
61 61
62void EmailListItem::setItemSelected(bool enable) 62void EmailListItem::setItemSelected(bool enable)
63{ 63{
64 selected = enable; 64 selected = enable;
65 setSelected(enable); 65 setSelected(enable);
66 repaint(); 66 repaint();
67} 67}
68 68
69bool EmailListItem::isItemSelected() 69bool EmailListItem::isItemSelected()
70{ 70{
71 return selected; 71 return selected;
72} 72}
73 73
74void EmailListItem::paintCell( QPainter *p, const QColorGroup &cg, 74void EmailListItem::paintCell( QPainter *p, const QColorGroup &cg,
75 int column, int width, int alignment ) 75 int column, int width, int alignment )
76{ 76{
77 77
78 QColorGroup _cg( cg ); 78 QColorGroup _cg( cg );
79 QColor c = _cg.text(); 79 QColor c = _cg.text();
80 80
81 if ( (! mail.read) && (mail.received) ) 81 if ( (! mail.read) && (mail.received) )
82 _cg.setColor( QColorGroup::Text, Qt::blue); 82 _cg.setColor( QColorGroup::Text, Qt::blue);
83 if (!mail.downloaded) 83 if (!mail.downloaded)
84 _cg.setColor( QColorGroup::Text, Qt::red); 84 _cg.setColor( QColorGroup::Text, Qt::red);
85 85
86 /*if (selected) { 86/* if (selected) {
87 _cg.setColor(QColorGroup::Base, Qt::blue); 87 _cg.setColor(QColorGroup::Base, Qt::blue);
88 _cg.setColor(QColorGroup::Text, Qt::yellow); 88 _cg.setColor(QColorGroup::Text, Qt::yellow);
89 if (isSelected()) { 89 if (isSelected()) {
90 _cg.setColor(QColorGroup::HighlightedText, Qt::yellow); 90 _cg.setColor(QColorGroup::HighlightedText, Qt::yellow);
91 } else { 91 } else {
92 _cg.setColor(QColorGroup::Highlight, Qt::blue); 92 _cg.setColor(QColorGroup::Highlight, Qt::blue);
93 } 93 }
94 } 94 }
95 */ 95*/
96 QListViewItem::paintCell( p, _cg, column, width, alignment ); 96 QListViewItem::paintCell( p, _cg, column, width, alignment );
97 97
98 _cg.setColor( QColorGroup::Text, c ); 98 _cg.setColor( QColorGroup::Text, c );
99} 99}
diff --git a/noncore/unsupported/mailit/popclient.cpp b/noncore/unsupported/mailit/popclient.cpp
index fedc4e2..dc0116d 100644
--- a/noncore/unsupported/mailit/popclient.cpp
+++ b/noncore/unsupported/mailit/popclient.cpp
@@ -1,327 +1,327 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include "popclient.h" 20#include "popclient.h"
21#include "emailhandler.h" 21#include "emailhandler.h"
22//#define APOP_TEST 22//#define APOP_TEST
23 23
24extern "C" { 24extern "C" {
25#include "md5.h" 25#include "md5.h"
26} 26}
27 27
28#include <qcstring.h> 28#include <qcstring.h>
29 29
30PopClient::PopClient() 30PopClient::PopClient()
31{ 31{
32 32
33 socket = new QSocket(this, "popClient"); 33 socket = new QSocket(this, "popClient");
34 connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int))); 34 connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int)));
35 connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished())); 35 connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished()));
36 connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData())); 36 connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData()));
37 37
38 stream = new QTextStream(socket); 38 stream = new QTextStream(socket);
39 39
40 receiving = FALSE; 40 receiving = FALSE;
41 synchronize = FALSE; 41 synchronize = FALSE;
42 lastSync = 0; 42 lastSync = 0;
43 headerLimit = 0; 43 headerLimit = 0;
44 preview = FALSE; 44 preview = FALSE;
45} 45}
46 46
47PopClient::~PopClient() 47PopClient::~PopClient()
48{ 48{
49 delete socket; 49 delete socket;
50 delete stream; 50 delete stream;
51} 51}
52 52
53void PopClient::newConnection(QString target, int port) 53void PopClient::newConnection(const QString &target, int port)
54{ 54{
55 if (receiving) { 55 if (receiving) {
56 qWarning("socket in use, connection refused"); 56 qWarning("socket in use, connection refused");
57 return; 57 return;
58 } 58 }
59 59
60 status = Init; 60 status = Init;
61 61
62 socket->connectToHost(target, port); 62 socket->connectToHost(target, port);
63 receiving = TRUE; 63 receiving = TRUE;
64 //selected = FALSE; 64 //selected = FALSE;
65 65
66 emit updateStatus("DNS lookup"); 66 emit updateStatus("DNS lookup");
67} 67}
68 68
69void PopClient::setAccount(QString popUser, QString popPasswd) 69void PopClient::setAccount(const QString &popUser, const QString &popPasswd)
70{ 70{
71 popUserName = popUser; 71 popUserName = popUser;
72 popPassword = popPasswd; 72 popPassword = popPasswd;
73} 73}
74 74
75void PopClient::setSynchronize(int lastCount) 75void PopClient::setSynchronize(int lastCount)
76{ 76{
77 synchronize = TRUE; 77 synchronize = TRUE;
78 lastSync = lastCount; 78 lastSync = lastCount;
79} 79}
80 80
81void PopClient::removeSynchronize() 81void PopClient::removeSynchronize()
82{ 82{
83 synchronize = FALSE; 83 synchronize = FALSE;
84 lastSync = 0; 84 lastSync = 0;
85} 85}
86 86
87void PopClient::headersOnly(bool headers, int limit) 87void PopClient::headersOnly(bool headers, int limit)
88{ 88{
89 preview = headers; 89 preview = headers;
90 headerLimit = limit; 90 headerLimit = limit;
91} 91}
92 92
93void PopClient::setSelectedMails(MailList *list) 93void PopClient::setSelectedMails(MailList *list)
94{ 94{
95 selected = TRUE; 95 selected = TRUE;
96 mailList = list; 96 mailList = list;
97} 97}
98 98
99void PopClient::connectionEstablished() 99void PopClient::connectionEstablished()
100{ 100{
101 emit updateStatus(tr("Connection established")); 101 emit updateStatus(tr("Connection established"));
102} 102}
103 103
104void PopClient::errorHandling(int status) 104void PopClient::errorHandling(int status)
105{ 105{
106 emit updateStatus(tr("Error Occured")); 106 emit updateStatus(tr("Error Occured"));
107 emit errorOccurred(status); 107 emit errorOccurred(status);
108 socket->close(); 108 socket->close();
109 receiving = FALSE; 109 receiving = FALSE;
110} 110}
111 111
112void PopClient::incomingData() 112void PopClient::incomingData()
113{ 113{
114 QString response, temp, temp2, timeStamp; 114 QString response, temp, temp2, timeStamp;
115 QString md5Source; 115 QString md5Source;
116 int start, end; 116 int start, end;
117// char *md5Digest; 117// char *md5Digest;
118 char md5Digest[16]; 118 char md5Digest[16];
119// if ( !socket->canReadLine() ) 119// if ( !socket->canReadLine() )
120// return; 120// return;
121 121
122 122
123 response = socket->readLine(); 123 response = socket->readLine();
124 124
125 switch(status) { 125 switch(status) {
126 //logging in 126 //logging in
127 case Init: { 127 case Init: {
128#ifdef APOP_TEST 128#ifdef APOP_TEST
129 start = response.find('<',0); 129 start = response.find('<',0);
130 end = response.find('>', start); 130 end = response.find('>', start);
131 if( start >= 0 && end > start ) 131 if( start >= 0 && end > start )
132 { 132 {
133 timeStamp = response.mid( start , end - start + 1); 133 timeStamp = response.mid( start , end - start + 1);
134 md5Source = timeStamp + popPassword; 134 md5Source = timeStamp + popPassword;
135 135
136 md5_buffer( (char const *)md5Source, md5Source.length(),&md5Digest[0]); 136 md5_buffer( (char const *)md5Source, md5Source.length(),&md5Digest[0]);
137 137
138 for(int j =0;j < MD5_DIGEST_LENGTH ;j++) 138 for(int j =0;j < MD5_DIGEST_LENGTH ;j++)
139 { 139 {
140 printf("%x", md5Digest[j]); 140 printf("%x", md5Digest[j]);
141 } 141 }
142 printf("\n"); 142 printf("\n");
143// qDebug(md5Digest); 143// qDebug(md5Digest);
144 *stream << "APOP " << popUserName << " " << md5Digest << "\r\n"; 144 *stream << "APOP " << popUserName << " " << md5Digest << "\r\n";
145 // qDebug("%s", stream); 145 // qDebug("%s", stream);
146 status = Stat; 146 status = Stat;
147 } 147 }
148 else 148 else
149#endif 149#endif
150 { 150 {
151 timeStamp = ""; 151 timeStamp = "";
152 *stream << "USER " << popUserName << "\r\n"; 152 *stream << "USER " << popUserName << "\r\n";
153 status = Pass; 153 status = Pass;
154 } 154 }
155 155
156 break; 156 break;
157 } 157 }
158 158
159 case Pass: { 159 case Pass: {
160 *stream << "PASS " << popPassword << "\r\n"; 160 *stream << "PASS " << popPassword << "\r\n";
161 status = Stat; 161 status = Stat;
162 162
163 break; 163 break;
164 } 164 }
165 //ask for number of messages 165 //ask for number of messages
166 case Stat: { 166 case Stat: {
167 if (response[0] == '+') { 167 if (response[0] == '+') {
168 *stream << "STAT" << "\r\n"; 168 *stream << "STAT" << "\r\n";
169 status = Mcnt; 169 status = Mcnt;
170 } else errorHandling(ErrLoginFailed); 170 } else errorHandling(ErrLoginFailed);
171 break; 171 break;
172 } 172 }
173 //get count of messages, eg "+OK 4 900.." -> int 4 173 //get count of messages, eg "+OK 4 900.." -> int 4
174 case Mcnt: { 174 case Mcnt: {
175 if (response[0] == '+') { 175 if (response[0] == '+') {
176 temp = response.replace(0, 4, ""); 176 temp = response.replace(0, 4, "");
177 int x = temp.find(" ", 0); 177 int x = temp.find(" ", 0);
178 temp.truncate((uint) x); 178 temp.truncate((uint) x);
179 newMessages = temp.toInt(); 179 newMessages = temp.toInt();
180 messageCount = 1; 180 messageCount = 1;
181 status = List; 181 status = List;
182 182
183 if (synchronize) { 183 if (synchronize) {
184 //messages deleted from server, reload all 184 //messages deleted from server, reload all
185 if (newMessages < lastSync) 185 if (newMessages < lastSync)
186 lastSync = 0; 186 lastSync = 0;
187 messageCount = 1; 187 messageCount = 1;
188 } 188 }
189 189
190 if (selected) { 190 if (selected) {
191 int *ptr = mailList->first(); 191 int *ptr = mailList->first();
192 if (ptr != 0) { 192 if (ptr != 0) {
193 newMessages++; //to ensure no early jumpout 193 newMessages++; //to ensure no early jumpout
194 messageCount = *ptr; 194 messageCount = *ptr;
195 } else newMessages = 0; 195 } else newMessages = 0;
196 } 196 }
197 197
198 } else errorHandling(ErrUnknownResponse); 198 } else errorHandling(ErrUnknownResponse);
199 } 199 }
200 //Read message number x, count upwards to messageCount 200 //Read message number x, count upwards to messageCount
201 case List: { 201 case List: {
202 if (messageCount <= newMessages) { 202 if (messageCount <= newMessages) {
203 *stream << "LIST " << messageCount << "\r\n"; 203 *stream << "LIST " << messageCount << "\r\n";
204 status = Size; 204 status = Size;
205 temp2.setNum(newMessages - lastSync); 205 temp2.setNum(newMessages - lastSync);
206 temp.setNum(messageCount - lastSync); 206 temp.setNum(messageCount - lastSync);
207 if (!selected) { 207 if (!selected) {
208 emit updateStatus(tr("Retrieving ") + temp + "/" + temp2); 208 emit updateStatus(tr("Retrieving ") + temp + "/" + temp2);
209 } else { 209 } else {
210 //completing a previously closed transfer 210 //completing a previously closed transfer
211 /* if ( (messageCount - lastSync) <= 0) { 211 /* if ( (messageCount - lastSync) <= 0) {
212 temp.setNum(messageCount); 212 temp.setNum(messageCount);
213 emit updateStatus(tr("Previous message ") + temp); 213 emit updateStatus(tr("Previous message ") + temp);
214 } else {*/ 214 } else {*/
215 emit updateStatus(tr("Completing message ") + temp); 215 emit updateStatus(tr("Completing message ") + temp);
216 //} 216 //}
217 } 217 }
218 break; 218 break;
219 } else { 219 } else {
220 emit updateStatus(tr("No new Messages")); 220 emit updateStatus(tr("No new Messages"));
221 status = Quit; 221 status = Quit;
222 } 222 }
223 } 223 }
224 //get size of message, eg "500 characters in message.." -> int 500 224 //get size of message, eg "500 characters in message.." -> int 500
225 case Size: { 225 case Size: {
226 if (status != Quit) { //because of idiotic switch 226 if (status != Quit) { //because of idiotic switch
227 if (response[0] == '+') { 227 if (response[0] == '+') {
228 temp = response.replace(0, 4, ""); 228 temp = response.replace(0, 4, "");
229 int x = temp.find(" ", 0); 229 int x = temp.find(" ", 0);
230 temp = temp.right(temp.length() - ((uint) x + 1) ); 230 temp = temp.right(temp.length() - ((uint) x + 1) );
231 mailSize = temp.toInt(); 231 mailSize = temp.toInt();
232 emit currentMailSize(mailSize); 232 emit currentMailSize(mailSize);
233 233
234 status = Retr; 234 status = Retr;
235 } else { 235 } else {
236 //qWarning(response); 236 //qWarning(response);
237 errorHandling(ErrUnknownResponse); 237 errorHandling(ErrUnknownResponse);
238 } 238 }
239 } 239 }
240 } 240 }
241 //Read message number x, count upwards to messageCount 241 //Read message number x, count upwards to messageCount
242 case Retr: { 242 case Retr: {
243 if (status != Quit) { 243 if (status != Quit) {
244 if ((selected)||(mailSize <= headerLimit)) 244 if ((selected)||(mailSize <= headerLimit))
245 { 245 {
246 *stream << "RETR " << messageCount << "\r\n"; 246 *stream << "RETR " << messageCount << "\r\n";
247 } else { //only header 247 } else { //only header
248 *stream << "TOP " << messageCount << " 0\r\n"; 248 *stream << "TOP " << messageCount << " 0\r\n";
249 } 249 }
250 messageCount++; 250 messageCount++;
251 status = Ignore; 251 status = Ignore;
252 break; 252 break;
253 } } 253 } }
254 case Ignore: { 254 case Ignore: {
255 if (status != Quit) { //because of idiotic switch 255 if (status != Quit) { //because of idiotic switch
256 if (response[0] == '+') { 256 if (response[0] == '+') {
257 message = ""; 257 message = "";
258 status = Read; 258 status = Read;
259 if (!socket->canReadLine()) //sync. problems 259 if (!socket->canReadLine()) //sync. problems
260 break; 260 break;
261 response = socket->readLine(); 261 response = socket->readLine();
262 } else errorHandling(ErrUnknownResponse); 262 } else errorHandling(ErrUnknownResponse);
263 } 263 }
264 } 264 }
265 //add all incoming lines to body. When size is reached, send 265 //add all incoming lines to body. When size is reached, send
266 //message, and go back to read new message 266 //message, and go back to read new message
267 case Read: { 267 case Read: {
268 if (status != Quit) { //because of idiotic switch 268 if (status != Quit) { //because of idiotic switch
269 message += response; 269 message += response;
270 while ( socket->canReadLine() ) { 270 while ( socket->canReadLine() ) {
271 response = socket->readLine(); 271 response = socket->readLine();
272 message += response; 272 message += response;
273 } 273 }
274 emit downloadedSize(message.length()); 274 emit downloadedSize(message.length());
275 int x = message.find("\r\n.\r\n",-5); 275 int x = message.find("\r\n.\r\n",-5);
276 if (x == -1) { 276 if (x == -1) {
277 break; 277 break;
278 } else { //message reach entire size 278 } else { //message reach entire size
279 if ( (selected)||(mailSize <= headerLimit)) //mail size limit is not used if late download is active 279 if ( (selected)||(mailSize <= headerLimit)) //mail size limit is not used if late download is active
280 { 280 {
281 emit newMessage(message, messageCount-1, mailSize, TRUE); 281 emit newMessage(message, messageCount-1, mailSize, TRUE);
282 } else { //incomplete mail downloaded 282 } else { //incomplete mail downloaded
283 emit newMessage(message, messageCount-1, mailSize, FALSE); 283 emit newMessage(message, messageCount-1, mailSize, FALSE);
284 } 284 }
285 285
286 if ((messageCount > newMessages)||(selected)) //last message ? 286 if ((messageCount > newMessages)||(selected)) //last message ?
287 { 287 {
288 status = Quit; 288 status = Quit;
289 if (selected) { //grab next from queue 289 if (selected) { //grab next from queue
290 newMessages--; 290 newMessages--;
291 status = Quit; 291 status = Quit;
292 } 292 }
293 } 293 }
294 else 294 else
295 { 295 {
296 *stream << "LIST " << messageCount << "\r\n"; 296 *stream << "LIST " << messageCount << "\r\n";
297 status = Size; 297 status = Size;
298 temp2.setNum(newMessages - lastSync); 298 temp2.setNum(newMessages - lastSync);
299 temp.setNum(messageCount - lastSync); 299 temp.setNum(messageCount - lastSync);
300 emit updateStatus(tr("Retrieving ") + temp + "/" + temp2); 300 emit updateStatus(tr("Retrieving ") + temp + "/" + temp2);
301 301
302 break; 302 break;
303 } 303 }
304 } 304 }
305 } 305 }
306 if (status != Quit) 306 if (status != Quit)
307 break; 307 break;
308 } 308 }
309 case Quit: { 309 case Quit: {
310 *stream << "Quit\r\n"; 310 *stream << "Quit\r\n";
311 status = Done; 311 status = Done;
312 int newM = newMessages - lastSync; 312 int newM = newMessages - lastSync;
313 if (newM > 0) { 313 if (newM > 0) {
314 temp.setNum(newM); 314 temp.setNum(newM);
315 emit updateStatus(temp + tr(" new messages")); 315 emit updateStatus(temp + tr(" new messages"));
316 } else { 316 } else {
317 emit updateStatus(tr("No new messages")); 317 emit updateStatus(tr("No new messages"));
318 } 318 }
319 319
320 socket->close(); 320 socket->close();
321 receiving = FALSE; 321 receiving = FALSE;
322 emit mailTransfered(newM); 322 emit mailTransfered(newM);
323 break; 323 break;
324 } 324 }
325 } 325 }
326 326
327} 327}
diff --git a/noncore/unsupported/mailit/popclient.h b/noncore/unsupported/mailit/popclient.h
index 10b71ab..c58bc48 100644
--- a/noncore/unsupported/mailit/popclient.h
+++ b/noncore/unsupported/mailit/popclient.h
@@ -1,76 +1,76 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef PopClient_H 20#ifndef PopClient_H
21#define PopClient_H 21#define PopClient_H
22 22
23#include <stdio.h> 23#include <stdio.h>
24#include <qsocket.h> 24#include <qsocket.h>
25#include <qstring.h> 25#include <qstring.h>
26#include <qobject.h> 26#include <qobject.h>
27#include <qtextstream.h> 27#include <qtextstream.h>
28#include <qlist.h> 28#include <qlist.h>
29#include "maillist.h" 29#include "maillist.h"
30 30
31class PopClient: public QObject 31class PopClient: public QObject
32{ 32{
33 Q_OBJECT 33 Q_OBJECT
34 34
35public: 35public:
36 PopClient(); 36 PopClient();
37 ~PopClient(); 37 ~PopClient();
38 void newConnection(QString target, int port); 38 void newConnection(const QString &target, int port);
39 void setAccount(QString popUser, QString popPasswd); 39 void setAccount(const QString &popUser, const QString &popPasswd);
40 void setSynchronize(int lastCount); 40 void setSynchronize(int lastCount);
41 void removeSynchronize(); 41 void removeSynchronize();
42 void headersOnly(bool headers, int limit); 42 void headersOnly(bool headers, int limit);
43 void setSelectedMails(MailList *list); 43 void setSelectedMails(MailList *list);
44 44
45signals: 45signals:
46 void newMessage(const QString &, int, uint, bool); 46 void newMessage(const QString &, int, uint, bool);
47 void errorOccurred(int status); 47 void errorOccurred(int status);
48 void updateStatus(const QString &); 48 void updateStatus(const QString &);
49 void mailTransfered(int); 49 void mailTransfered(int);
50 void mailboxSize(int); 50 void mailboxSize(int);
51 void currentMailSize(int); 51 void currentMailSize(int);
52 void downloadedSize(int); 52 void downloadedSize(int);
53 53
54public slots: 54public slots:
55 void errorHandling(int); 55 void errorHandling(int);
56 56
57protected slots: 57protected slots:
58 void connectionEstablished(); 58 void connectionEstablished();
59 void incomingData(); 59 void incomingData();
60 60
61private: 61private:
62 QSocket *socket; 62 QSocket *socket;
63 QTextStream *stream; 63 QTextStream *stream;
64 enum transferStatus 64 enum transferStatus
65 { 65 {
66 Init, Pass, Stat, Mcnt, Read, List, Size, Retr, Acks, 66 Init, Pass, Stat, Mcnt, Read, List, Size, Retr, Acks,
67 Quit, Done, Ignore 67 Quit, Done, Ignore
68 }; 68 };
69 int status, lastSync; 69 int status, lastSync;
70 int messageCount, newMessages, mailSize, headerLimit; 70 int messageCount, newMessages, mailSize, headerLimit;
71 bool receiving, synchronize, preview, selected; 71 bool receiving, synchronize, preview, selected;
72 QString popUserName, popPassword, message; 72 QString popUserName, popPassword, message;
73 MailList *mailList; 73 MailList *mailList;
74}; 74};
75 75
76#endif 76#endif
diff --git a/noncore/unsupported/mailit/smtpclient.cpp b/noncore/unsupported/mailit/smtpclient.cpp
index 8a51a5b..2916f45 100644
--- a/noncore/unsupported/mailit/smtpclient.cpp
+++ b/noncore/unsupported/mailit/smtpclient.cpp
@@ -1,163 +1,163 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include "smtpclient.h" 20#include "smtpclient.h"
21#include "emailhandler.h" 21#include "emailhandler.h"
22 22
23SmtpClient::SmtpClient() 23SmtpClient::SmtpClient()
24{ 24{
25 socket = new QSocket(this, "smtpClient"); 25 socket = new QSocket(this, "smtpClient");
26 stream = new QTextStream(socket); 26 stream = new QTextStream(socket);
27 mailList.setAutoDelete(TRUE); 27 mailList.setAutoDelete(TRUE);
28 28
29 connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int))); 29 connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int)));
30 connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished())); 30 connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished()));
31 connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData())); 31 connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData()));
32 32
33 sending = FALSE; 33 sending = FALSE;
34} 34}
35 35
36SmtpClient::~SmtpClient() 36SmtpClient::~SmtpClient()
37{ 37{
38 delete socket; 38 delete socket;
39 delete stream; 39 delete stream;
40} 40}
41 41
42void SmtpClient::newConnection(QString target, int port) 42void SmtpClient::newConnection(const QString &target, int port)
43{ 43{
44 if (sending) { 44 if (sending) {
45 qWarning("socket in use, connection refused"); 45 qWarning("socket in use, connection refused");
46 return; 46 return;
47 } 47 }
48 48
49 status = Init; 49 status = Init;
50 sending = TRUE; 50 sending = TRUE;
51 socket->connectToHost(target, port); 51 socket->connectToHost(target, port);
52 52
53 emit updateStatus(tr("DNS lookup")); 53 emit updateStatus(tr("DNS lookup"));
54} 54}
55 55
56void SmtpClient::addMail(QString from, QString subject, QStringList to, QString body) 56void SmtpClient::addMail(const QString &from, const QString &subject, const QStringList &to, const QString &body)
57{ 57{
58 RawEmail *mail = new RawEmail; 58 RawEmail *mail = new RawEmail;
59 59
60 mail->from = from; 60 mail->from = from;
61 mail->subject = subject; 61 mail->subject = subject;
62 mail->to = to; 62 mail->to = to;
63 mail->body = body; 63 mail->body = body;
64 64
65 mailList.append(mail); 65 mailList.append(mail);
66} 66}
67 67
68void SmtpClient::connectionEstablished() 68void SmtpClient::connectionEstablished()
69{ 69{
70 emit updateStatus(tr("Connection established")); 70 emit updateStatus(tr("Connection established"));
71 71
72} 72}
73 73
74void SmtpClient::errorHandling(int status) 74void SmtpClient::errorHandling(int status)
75{ 75{
76 emit errorOccurred(status); 76 emit errorOccurred(status);
77 socket->close(); 77 socket->close();
78 mailList.clear(); 78 mailList.clear();
79 sending = FALSE; 79 sending = FALSE;
80} 80}
81 81
82void SmtpClient::incomingData() 82void SmtpClient::incomingData()
83{ 83{
84 QString response; 84 QString response;
85 85
86 if (!socket->canReadLine()) 86 if (!socket->canReadLine())
87 return; 87 return;
88 88
89 response = socket->readLine(); 89 response = socket->readLine();
90 90
91 switch(status) { 91 switch(status) {
92 case Init: { 92 case Init: {
93 if (response[0] == '2') { 93 if (response[0] == '2') {
94 status = From; 94 status = From;
95 mailPtr = mailList.first(); 95 mailPtr = mailList.first();
96 *stream << "HELO there\r\n"; 96 *stream << "HELO there\r\n";
97 } else errorHandling(ErrUnknownResponse); 97 } else errorHandling(ErrUnknownResponse);
98 break; 98 break;
99 } 99 }
100 case From: { 100 case From: {
101 if (response[0] == '2') { 101 if (response[0] == '2') {
102 *stream << "MAIL FROM: " << mailPtr->from << "\r\n"; 102 *stream << "MAIL FROM: " << mailPtr->from << "\r\n";
103 status = Recv; 103 status = Recv;
104 } else errorHandling(ErrUnknownResponse); 104 } else errorHandling(ErrUnknownResponse);
105 break; 105 break;
106 } 106 }
107 case Recv: { 107 case Recv: {
108 if (response[0] == '2') { 108 if (response[0] == '2') {
109 it = mailPtr->to.begin(); 109 it = mailPtr->to.begin();
110 if (it == NULL) 110 if (it == NULL)
111 errorHandling(ErrUnknownResponse); 111 errorHandling(ErrUnknownResponse);
112 *stream << "RCPT TO: " << *it << ">\r\n"; 112 *stream << "RCPT TO: " << *it << ">\r\n";
113 status = MRcv; 113 status = MRcv;
114 } else errorHandling(ErrUnknownResponse); 114 } else errorHandling(ErrUnknownResponse);
115 break; 115 break;
116 } 116 }
117 case MRcv: { 117 case MRcv: {
118 if (response[0] == '2') { 118 if (response[0] == '2') {
119 it++; 119 it++;
120 if ( it != mailPtr->to.end() ) { 120 if ( it != mailPtr->to.end() ) {
121 *stream << "RCPT TO: <" << *it << ">\r\n"; 121 *stream << "RCPT TO: <" << *it << ">\r\n";
122 break; 122 break;
123 } else { 123 } else {
124 status = Data; 124 status = Data;
125 } 125 }
126 } else errorHandling(ErrUnknownResponse); 126 } else errorHandling(ErrUnknownResponse);
127 } 127 }
128 case Data: { 128 case Data: {
129 if (response[0] == '2') { 129 if (response[0] == '2') {
130 *stream << "DATA\r\n"; 130 *stream << "DATA\r\n";
131 status = Body; 131 status = Body;
132 emit updateStatus(tr("Sending: ") + mailPtr->subject); 132 emit updateStatus(tr("Sending: ") + mailPtr->subject);
133 } else errorHandling(ErrUnknownResponse); 133 } else errorHandling(ErrUnknownResponse);
134 break; 134 break;
135 } 135 }
136 case Body: { 136 case Body: {
137 if (response[0] == '3') { 137 if (response[0] == '3') {
138 *stream << mailPtr->body << "\r\n.\r\n"; 138 *stream << mailPtr->body << "\r\n.\r\n";
139 mailPtr = mailList.next(); 139 mailPtr = mailList.next();
140 if (mailPtr != NULL) { 140 if (mailPtr != NULL) {
141 status = From; 141 status = From;
142 } else { 142 } else {
143 status = Quit; 143 status = Quit;
144 } 144 }
145 } else errorHandling(ErrUnknownResponse); 145 } else errorHandling(ErrUnknownResponse);
146 break; 146 break;
147 } 147 }
148 case Quit: { 148 case Quit: {
149 if (response[0] == '2') { 149 if (response[0] == '2') {
150 *stream << "QUIT\r\n"; 150 *stream << "QUIT\r\n";
151 status = Done; 151 status = Done;
152 QString temp; 152 QString temp;
153 temp.setNum(mailList.count()); 153 temp.setNum(mailList.count());
154 emit updateStatus(tr("Sent ") + temp + tr(" messages")); 154 emit updateStatus(tr("Sent ") + temp + tr(" messages"));
155 emit mailSent(); 155 emit mailSent();
156 mailList.clear(); 156 mailList.clear();
157 sending = FALSE; 157 sending = FALSE;
158 socket->close(); 158 socket->close();
159 } else errorHandling(ErrUnknownResponse); 159 } else errorHandling(ErrUnknownResponse);
160 break; 160 break;
161 } 161 }
162 } 162 }
163} 163}
diff --git a/noncore/unsupported/mailit/smtpclient.h b/noncore/unsupported/mailit/smtpclient.h
index ca65af4..45c0703 100644
--- a/noncore/unsupported/mailit/smtpclient.h
+++ b/noncore/unsupported/mailit/smtpclient.h
@@ -1,75 +1,75 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef SmtpClient_H 20#ifndef SmtpClient_H
21#define SmtpClient_H 21#define SmtpClient_H
22 22
23//#include <stdio.h> 23//#include <stdio.h>
24#include <qsocket.h> 24#include <qsocket.h>
25#include <qstring.h> 25#include <qstring.h>
26#include <qobject.h> 26#include <qobject.h>
27#include <qtextstream.h> 27#include <qtextstream.h>
28#include <qstringlist.h> 28#include <qstringlist.h>
29#include <qlist.h> 29#include <qlist.h>
30 30
31struct RawEmail 31struct RawEmail
32{ 32{
33 QString from; 33 QString from;
34 QString subject; 34 QString subject;
35 QStringList to; 35 QStringList to;
36 QString body; 36 QString body;
37}; 37};
38 38
39class SmtpClient: public QObject 39class SmtpClient: public QObject
40{ 40{
41 Q_OBJECT 41 Q_OBJECT
42 42
43public: 43public:
44 SmtpClient(); 44 SmtpClient();
45 ~SmtpClient(); 45 ~SmtpClient();
46 void newConnection(QString target, int port); 46 void newConnection(const QString &target, int port);
47 void addMail(QString from, QString subject, QStringList to, QString body); 47 void addMail(const QString &from, const QString &subject, const QStringList &to, const QString &body);
48 48
49signals: 49signals:
50 void errorOccurred(int); 50 void errorOccurred(int);
51 void updateStatus(const QString &); 51 void updateStatus(const QString &);
52 void mailSent(); 52 void mailSent();
53 53
54public slots: 54public slots:
55 void errorHandling(int); 55 void errorHandling(int);
56 56
57protected slots: 57protected slots:
58 void connectionEstablished(); 58 void connectionEstablished();
59 void incomingData(); 59 void incomingData();
60 60
61private: 61private:
62 QSocket *socket; 62 QSocket *socket;
63 QTextStream *stream; 63 QTextStream *stream;
64 enum transferStatus 64 enum transferStatus
65 { 65 {
66 Init, From, Recv, MRcv, Data, Body, Quit, Done 66 Init, From, Recv, MRcv, Data, Body, Quit, Done
67 }; 67 };
68 int status; 68 int status;
69 QList<RawEmail> mailList; 69 QList<RawEmail> mailList;
70 RawEmail *mailPtr; 70 RawEmail *mailPtr;
71 bool sending; 71 bool sending;
72 QStringList::Iterator it; 72 QStringList::Iterator it;
73}; 73};
74 74
75#endif 75#endif
diff --git a/noncore/unsupported/mailit/textparser.cpp b/noncore/unsupported/mailit/textparser.cpp
index 3fa5f6e..e5c9f7c 100644
--- a/noncore/unsupported/mailit/textparser.cpp
+++ b/noncore/unsupported/mailit/textparser.cpp
@@ -1,304 +1,304 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include "textparser.h" 20#include "textparser.h"
21 21
22TextParser::TextParser(QString in, QString lineBreak) 22TextParser::TextParser(const QString &in, const QString &lineBreak)
23{ 23{
24 data = in; 24 data = in;
25 lineSep = lineBreak; 25 lineSep = lineBreak;
26 26
27 init(); 27 init();
28 createSeparators(); 28 createSeparators();
29 split(); 29 split();
30} 30}
31 31
32TextParser::TextParser(QString in, QString lineBreak, QString sep) 32TextParser::TextParser(const QString &in, const QString &lineBreak, const QString &sep)
33{ 33{
34 data = in; 34 data = in;
35 lineSep = lineBreak; 35 lineSep = lineBreak;
36 36
37 init(); 37 init();
38 separators = sep; 38 separators = sep;
39 split(); 39 split();
40} 40}
41 41
42void TextParser::init() 42void TextParser::init()
43{ 43{
44 lineCount = 0; 44 lineCount = 0;
45 linePos = 0; 45 linePos = 0;
46 totalElmCount = 0; 46 totalElmCount = 0;
47 separatorPos = -1; //not initialized 47 separatorPos = -1; //not initialized
48 wordPos = -1; //not initialized 48 wordPos = -1; //not initialized
49 sepAtLine = 0; 49 sepAtLine = 0;
50 sepAtPosElm = -1; //such that nextSep equals 0 50 sepAtPosElm = -1; //such that nextSep equals 0
51 wordAtLine = 0; 51 wordAtLine = 0;
52 wordAtPosElm = -1; //such that nextWord equals 0 52 wordAtPosElm = -1; //such that nextWord equals 0
53 atLine = 0; 53 atLine = 0;
54 atPosElm = 0; 54 atPosElm = 0;
55} 55}
56 56
57void TextParser::createSeparators() 57void TextParser::createSeparators()
58{ 58{
59 separators = " @#,.:;<>*/(){}|'?-+=_"; 59 separators = " @#,.:;<>*/(){}|'?-+=_";
60} 60}
61 61
62 /*Returns pos of given search criteria, -1 if not found */ 62/* Returns pos of given search criteria, -1 if not found */
63int TextParser::find(QString target, QChar sep, int pos, bool upperCase) 63int TextParser::find(const QString &target, QChar sep, int pos, bool upperCase)
64{ 64{
65 65
66 t_splitElm parsstr; 66 t_splitElm parsstr;
67 QString pString; 67 QString pString, pTarget;
68 68 pTarget = target;
69 int atLine = 0, atPosElm = 0; 69 int atLine = 0, atPosElm = 0;
70 70
71 getLineReference(pos,&atLine,&atPosElm); 71 getLineReference(pos,&atLine,&atPosElm);
72 72
73 for (int x = pos; x < totalElmCount; x++) 73 for (int x = pos; x < totalElmCount; x++)
74 { 74 {
75 parsstr=splitDone[atLine].elm[atPosElm++]; 75 parsstr=splitDone[atLine].elm[atPosElm++];
76 76
77 if (upperCase) 77 if (upperCase)
78 { 78 {
79 pString=parsstr.str.upper(); 79 pString=parsstr.str.upper();
80 target=target.upper(); 80 pTarget=pTarget.upper();
81 } 81 }
82 else 82 else
83 { 83 {
84 pString=parsstr.str; 84 pString=parsstr.str;
85 } 85 }
86 if ((pString == target) && (parsstr.separator == sep)) 86 if ((pString == pTarget) && (parsstr.separator == sep))
87 { 87 {
88 return x; 88 return x;
89 } 89 }
90 if (atPosElm >= splitDone[atLine].elmCount) 90 if (atPosElm >= splitDone[atLine].elmCount)
91 { //new Line 91 { //new Line
92 atLine++; 92 atLine++;
93 atPosElm = 0; 93 atPosElm = 0;
94 } 94 }
95 } 95 }
96 return -1; 96 return -1;
97} 97}
98 98
99int TextParser::elmCount() 99int TextParser::elmCount()
100{ 100{
101 return totalElmCount; 101 return totalElmCount;
102} 102}
103 103
104QChar TextParser::separatorAt(int pos) 104QChar TextParser::separatorAt(int pos)
105{ 105{
106 if (getLineReference(pos, &sepAtLine, &sepAtPosElm) == -1) 106 if (getLineReference(pos, &sepAtLine, &sepAtPosElm) == -1)
107 return QChar::null; 107 return QChar::null;
108 108
109 separatorPos = pos; 109 separatorPos = pos;
110 return splitDone[sepAtLine].elm[sepAtPosElm].separator; 110 return splitDone[sepAtLine].elm[sepAtPosElm].separator;
111} 111}
112 112
113QChar TextParser::nextSeparator() 113QChar TextParser::nextSeparator()
114{ 114{
115 sepAtPosElm++; 115 sepAtPosElm++;
116 if (splitDone[sepAtLine].elmCount <= sepAtPosElm) { 116 if (splitDone[sepAtLine].elmCount <= sepAtPosElm) {
117 sepAtLine++; 117 sepAtLine++;
118 sepAtPosElm = 0; 118 sepAtPosElm = 0;
119 } 119 }
120 120
121 separatorPos++; 121 separatorPos++;
122 return splitDone[sepAtLine].elm[sepAtPosElm].separator; 122 return splitDone[sepAtLine].elm[sepAtPosElm].separator;
123} 123}
124 124
125bool TextParser::hasNextSeparator() 125bool TextParser::hasNextSeparator()
126{ 126{
127 return ((separatorPos+1) < totalElmCount); 127 return ((separatorPos+1) < totalElmCount);
128} 128}
129 129
130QString TextParser::wordAt(int pos) 130QString TextParser::wordAt(int pos)
131{ 131{
132 if (getLineReference(pos, &wordAtLine, &wordAtPosElm) == -1) 132 if (getLineReference(pos, &wordAtLine, &wordAtPosElm) == -1)
133 return NULL; 133 return NULL;
134 134
135 wordPos = pos; 135 wordPos = pos;
136 return splitDone[wordAtLine].elm[wordAtPosElm].str; 136 return splitDone[wordAtLine].elm[wordAtPosElm].str;
137} 137}
138 138
139QString TextParser::nextWord() 139QString TextParser::nextWord()
140{ 140{
141 wordAtPosElm++; 141 wordAtPosElm++;
142 if (splitDone[wordAtLine].elmCount <= wordAtPosElm) { 142 if (splitDone[wordAtLine].elmCount <= wordAtPosElm) {
143 wordAtLine++; 143 wordAtLine++;
144 wordAtPosElm = 0; 144 wordAtPosElm = 0;
145 } 145 }
146 146
147 wordPos++; 147 wordPos++;
148 return splitDone[wordAtLine].elm[wordAtPosElm].str; 148 return splitDone[wordAtLine].elm[wordAtPosElm].str;
149} 149}
150 150
151bool TextParser::hasNextWord() 151bool TextParser::hasNextWord()
152{ 152{
153 return ((wordPos + 1) < totalElmCount); 153 return ((wordPos + 1) < totalElmCount);
154} 154}
155 155
156QString TextParser::getString(int *pos, QChar stop, bool lineEnd = false) 156QString TextParser::getString(int *pos, QChar stop, bool lineEnd = false)
157{ 157{
158 QString returnStr = wordAt(*pos); 158 QString returnStr = wordAt(*pos);
159 QChar chr = separatorAt(*pos); 159 QChar chr = separatorAt(*pos);
160 QString s; 160 QString s;
161 161
162 if (returnStr == "") 162 if (returnStr == "")
163 return ""; 163 return "";
164 if (chr == stop) 164 if (chr == stop)
165 return returnStr; 165 return returnStr;
166 166
167 if (!lineEnd) { 167 if (!lineEnd) {
168 while ((chr != stop) && hasNextWord()) { 168 while ((chr != stop) && hasNextWord()) {
169 returnStr.append(chr); 169 returnStr.append(chr);
170 returnStr += nextWord(); 170 returnStr += nextWord();
171 chr = nextSeparator(); 171 chr = nextSeparator();
172 } 172 }
173 } else { //copy from pos to end of line 173 } else { //copy from pos to end of line
174 getLineReference(*pos, &atLine, &atPosElm); 174 getLineReference(*pos, &atLine, &atPosElm);
175 returnStr = ""; 175 returnStr = "";
176 while (atPosElm < splitDone[atLine].elmCount) { 176 while (atPosElm < splitDone[atLine].elmCount) {
177 if (splitDone[atLine].elm[atPosElm].str != "") { 177 if (splitDone[atLine].elm[atPosElm].str != "") {
178 returnStr += splitDone[atLine].elm[atPosElm].str; 178 returnStr += splitDone[atLine].elm[atPosElm].str;
179 } 179 }
180 chr = splitDone[atLine].elm[atPosElm].separator; 180 chr = splitDone[atLine].elm[atPosElm].separator;
181 if (!chr.isNull() && (int) chr != 0) { 181 if (!chr.isNull() && (int) chr != 0) {
182 returnStr.append(splitDone[atLine].elm[atPosElm].separator); 182 returnStr.append(splitDone[atLine].elm[atPosElm].separator);
183 } 183 }
184 atPosElm++; 184 atPosElm++;
185 } 185 }
186 } 186 }
187 187
188 *pos = wordPos; 188 *pos = wordPos;
189 return returnStr; 189 return returnStr;
190} 190}
191 191
192QString TextParser::getNextLine() 192QString TextParser::getNextLine()
193{ 193{
194 atLine++; 194 atLine++;
195 atPosElm = 0; 195 atPosElm = 0;
196 if (atLine < lineCount) 196 if (atLine < lineCount)
197 return splitDone[atLine].str; 197 return splitDone[atLine].str;
198 return ""; 198 return "";
199} 199}
200 200
201bool TextParser::hasNextLine() 201bool TextParser::hasNextLine()
202{ 202{
203 if (atLine+1 < lineCount) 203 if (atLine+1 < lineCount)
204 return TRUE;; 204 return TRUE;;
205 return FALSE; 205 return FALSE;
206} 206}
207 207
208int TextParser::endLinePos(int pos) 208int TextParser::endLinePos(int pos)
209{ 209{
210 if ( (getLineReference(pos, &atLine, &atPosElm)) == -1) 210 if ( (getLineReference(pos, &atLine, &atPosElm)) == -1)
211 return -1; 211 return -1;
212 212
213 return (pos + (splitDone[atLine].elmCount - atPosElm) + 1); 213 return (pos + (splitDone[atLine].elmCount - atPosElm) + 1);
214} 214}
215 215
216int TextParser::getLineReference(int pos, int *line, int *inLinePos) 216int TextParser::getLineReference(int pos, int *line, int *inLinePos)
217{ 217{
218 int currentPos = 0; 218 int currentPos = 0;
219 219
220 for (int x = 0; x < lineCount; x++) { 220 for (int x = 0; x < lineCount; x++) {
221 if ( currentPos + splitDone[x].elmCount > pos) { 221 if ( currentPos + splitDone[x].elmCount > pos) {
222 *line = x; 222 *line = x;
223 *inLinePos = pos - currentPos; 223 *inLinePos = pos - currentPos;
224 return 0; //pos found okay 224 return 0; //pos found okay
225 } 225 }
226 currentPos += splitDone[x].elmCount; 226 currentPos += splitDone[x].elmCount;
227 } 227 }
228 return -1; //no reference found 228 return -1; //no reference found
229} 229}
230 230
231void TextParser::split() 231void TextParser::split()
232{ 232{
233 t_splitLine newLine; 233 t_splitLine newLine;
234 234
235 while ((uint) linePos < data.length()) { 235 while ((uint) linePos < data.length()) {
236 newLine = nextLine(); 236 newLine = nextLine();
237 splitDone[lineCount] = splitLine(newLine); 237 splitDone[lineCount] = splitLine(newLine);
238 totalElmCount += splitDone[lineCount].elmCount; 238 totalElmCount += splitDone[lineCount].elmCount;
239 lineCount++; 239 lineCount++;
240 } 240 }
241} 241}
242 242
243t_splitLine TextParser::splitLine(t_splitLine line) 243t_splitLine TextParser::splitLine(t_splitLine line)
244{ 244{
245 uint pos = 0; 245 uint pos = 0;
246 uint elmCount = 0; 246 uint elmCount = 0;
247 t_splitLine tempLine = line; 247 t_splitLine tempLine = line;
248 248
249 tempLine.str = line.str.simplifyWhiteSpace(); 249 tempLine.str = line.str.simplifyWhiteSpace();
250 tempLine.elm[0].str = ""; 250 tempLine.elm[0].str = "";
251 while ( pos < line.str.length() ) { 251 while ( pos < line.str.length() ) {
252 if ( isSeparator(tempLine.str[pos]) ) { 252 if ( isSeparator(tempLine.str[pos]) ) {
253 tempLine.elm[elmCount].separator = tempLine.str[pos]; 253 tempLine.elm[elmCount].separator = tempLine.str[pos];
254 elmCount++; 254 elmCount++;
255 pos++; 255 pos++;
256 while (tempLine.str[pos] == ' ') 256 while (tempLine.str[pos] == ' ')
257 pos++; 257 pos++;
258 if (pos > line.str.length()) 258 if (pos > line.str.length())
259 elmCount--; 259 elmCount--;
260 tempLine.elm[elmCount].str = ""; 260 tempLine.elm[elmCount].str = "";
261 } else { 261 } else {
262 if (!tempLine.str[pos].isNull()) 262 if (!tempLine.str[pos].isNull())
263 tempLine.elm[elmCount].str += tempLine.str[pos]; 263 tempLine.elm[elmCount].str += tempLine.str[pos];
264 pos++; 264 pos++;
265 } 265 }
266 } 266 }
267 267
268 tempLine.elmCount = elmCount + 1; 268 tempLine.elmCount = elmCount + 1;
269 return tempLine; 269 return tempLine;
270} 270}
271 271
272bool TextParser::isSeparator(QChar chr) 272bool TextParser::isSeparator(QChar chr)
273{ 273{
274 for (uint x = 0; x < separators.length(); x++) { 274 for (uint x = 0; x < separators.length(); x++) {
275 if (chr == separators[x]) 275 if (chr == separators[x])
276 return true; 276 return true;
277 } 277 }
278 return false; 278 return false;
279} 279}
280 280
281t_splitLine TextParser::nextLine() 281t_splitLine TextParser::nextLine()
282{ 282{
283 int newLinePos; 283 int newLinePos;
284 t_splitLine lineType; 284 t_splitLine lineType;
285 285
286 newLinePos = data.find(lineSep, linePos); 286 newLinePos = data.find(lineSep, linePos);
287 287
288 lineType.lineType = NewLine; 288 lineType.lineType = NewLine;
289 lineType.str = ""; 289 lineType.str = "";
290 290
291 if (newLinePos == -1) { 291 if (newLinePos == -1) {
292 newLinePos = data.length(); 292 newLinePos = data.length();
293 lineType.lineType = LastLine; 293 lineType.lineType = LastLine;
294 } 294 }
295 295
296 for (int x = linePos; x < newLinePos; x++) 296 for (int x = linePos; x < newLinePos; x++)
297 lineType.str += data[x]; 297 lineType.str += data[x];
298 298
299 linePos = newLinePos; 299 linePos = newLinePos;
300 if ((uint) linePos < data.length()) //if not EOF, add length of lineSep 300 if ((uint) linePos < data.length()) //if not EOF, add length of lineSep
301 linePos += lineSep.length(); 301 linePos += lineSep.length();
302 302
303 return lineType; 303 return lineType;
304} 304}
diff --git a/noncore/unsupported/mailit/textparser.h b/noncore/unsupported/mailit/textparser.h
index c5e88a0..03bb6d5 100644
--- a/noncore/unsupported/mailit/textparser.h
+++ b/noncore/unsupported/mailit/textparser.h
@@ -1,85 +1,85 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include <qobject.h> 20#include <qobject.h>
21#include <qstring.h> 21#include <qstring.h>
22 22
23#ifndef TEXTPARSER_H 23#ifndef TEXTPARSER_H
24#define TEXTPARSER_H 24#define TEXTPARSER_H
25 25
26enum t_strType { Word, Number}; 26enum t_strType { Word, Number};
27enum t_lineType {NewLine, LastLine}; 27enum t_lineType {NewLine, LastLine};
28 28
29const uint MAX_ELEMENTS = 200; //Should be dynamic 29const uint MAX_ELEMENTS = 200; //Should be dynamic
30const uint MAX_LINES = 500; //Should be dynamic 30const uint MAX_LINES = 500; //Should be dynamic
31 31
32struct t_splitElm 32struct t_splitElm
33{ 33{
34 QChar separator; 34 QChar separator;
35 int strType; 35 int strType;
36 QString str; 36 QString str;
37}; 37};
38 38
39struct t_splitLine 39struct t_splitLine
40{ 40{
41 t_lineType lineType; 41 t_lineType lineType;
42 QString str; //a bit redundant... 42 QString str; //a bit redundant...
43 t_splitElm elm[MAX_ELEMENTS]; 43 t_splitElm elm[MAX_ELEMENTS];
44 int elmCount; 44 int elmCount;
45}; 45};
46 46
47class TextParser: public QObject 47class TextParser: public QObject
48{ 48{
49 Q_OBJECT 49 Q_OBJECT
50 50
51public: 51public:
52 TextParser(QString in, QString lineBreak); 52 TextParser(const QString &in, const QString &lineBreak);
53 TextParser(QString in, QString lineBreak, QString sep); 53 TextParser(const QString &in, const QString &lineBreak, const QString &sep);
54 int find(QString target, QChar sep, int pos, bool upperCase); 54 int find(const QString &target, QChar sep, int pos, bool upperCase);
55 int elmCount(); 55 int elmCount();
56 QChar separatorAt(int pos); 56 QChar separatorAt(int pos);
57 QChar nextSeparator(); 57 QChar nextSeparator();
58 bool hasNextSeparator(); 58 bool hasNextSeparator();
59 QString wordAt(int pos); 59 QString wordAt(int pos);
60 QString nextWord(); 60 QString nextWord();
61 bool hasNextWord(); 61 bool hasNextWord();
62 QString getString(int *pos, QChar stop, bool lineEnd); 62 QString getString(int *pos, QChar stop, bool lineEnd);
63 QString getNextLine(); 63 QString getNextLine();
64 bool hasNextLine(); 64 bool hasNextLine();
65 int endLinePos(int pos); 65 int endLinePos(int pos);
66 66
67private: 67private:
68 void init(); 68 void init();
69 void createSeparators(); 69 void createSeparators();
70 t_splitLine nextLine(); 70 t_splitLine nextLine();
71 void split(); 71 void split();
72 t_splitLine splitLine(t_splitLine line); 72 t_splitLine splitLine(t_splitLine line);
73 bool isSeparator(QChar chr); 73 bool isSeparator(QChar chr);
74 t_splitLine splitDone[MAX_LINES]; 74 t_splitLine splitDone[MAX_LINES];
75 int getLineReference(int pos, int *line, int *inLinePos); 75 int getLineReference(int pos, int *line, int *inLinePos);
76 76
77 int lineCount, linePos, totalElmCount; 77 int lineCount, linePos, totalElmCount;
78 int separatorPos, wordPos; 78 int separatorPos, wordPos;
79 QString data, separators, lineSep; 79 QString data, separators, lineSep;
80 int sepAtLine, sepAtPosElm; 80 int sepAtLine, sepAtPosElm;
81 int wordAtLine, wordAtPosElm; 81 int wordAtLine, wordAtPosElm;
82 int atLine, atPosElm; 82 int atLine, atPosElm;
83}; 83};
84 84
85#endif 85#endif