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 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <qfile.h> #include <qtextstream.h> #include <opie/ocontactaccess.h> #include <opie/ocontact.h> #include "addresslist.h" AddressList::AddressList() { - addresses.setAutoDelete(TRUE); - read(); - dirty = FALSE; + addresses.setAutoDelete(TRUE); + read(); + dirty = FALSE; } AddressList::~AddressList() { - addresses.clear(); + addresses.clear(); } -void AddressList::addContact(QString email, QString name) +void AddressList::addContact(const QString &email, const QString &name) { - //skip if not a valid email address, - if (email.find( '@') == -1) - return; - - if ( ! containsEmail(email) ) { - Contact *in = new Contact; - in->email = email; - in->name = name; - addresses.append(in); - dirty = TRUE; - } + //skip if not a valid email address, + if (email.find( '@') == -1) + return; + + if ( ! containsEmail(email) ) { + Contact *in = new Contact; + in->email = email; + in->name = name; + addresses.append(in); + dirty = TRUE; + } } -bool AddressList::containsEmail(QString email) +bool AddressList::containsEmail(const QString &email) { - return ( getEmailRef(email) != -1 ); + return ( getEmailRef(email) != -1 ); } -bool AddressList::containsName(QString name) +bool AddressList::containsName(const QString &name) { - return ( getNameRef(name) != -1 ); + return ( getNameRef(name) != -1 ); } -QString AddressList::getNameByEmail(QString email) +QString AddressList::getNameByEmail(const QString &email) { - int pos = getEmailRef(email); - if (pos != -1) { - Contact *ptr = addresses.at(pos); - return ptr->name; - } - - return NULL; + int pos = getEmailRef(email); + if (pos != -1) { + Contact *ptr = addresses.at(pos); + return ptr->name; + } + + return NULL; } -QString AddressList::getEmailByName(QString name) +QString AddressList::getEmailByName(const QString &name) { - int pos = getNameRef(name); - if (pos != -1) { - Contact *ptr = addresses.at(pos); - return ptr->email; - } - - return NULL; + int pos = getNameRef(name); + if (pos != -1) { + Contact *ptr = addresses.at(pos); + return ptr->email; + } + + return NULL; } -int AddressList::getEmailRef(QString email) +int AddressList::getEmailRef(const QString &email) { - int pos = 0; - Contact *ptr; - - for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) { - if (ptr->email == email) - return pos; - pos++; - } - return -1; + int pos = 0; + Contact *ptr; + + for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) { + if (ptr->email == email) + return pos; + pos++; + } + return -1; } -int AddressList::getNameRef(QString name) +int AddressList::getNameRef(const QString &name) { - int pos = 0; - Contact *ptr; - - for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) { - if (ptr->name == name) - return pos; - pos++; - } - return -1; + int pos = 0; + Contact *ptr; + + for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) { + if (ptr->name == name) + return pos; + pos++; + } + return -1; } QList<Contact>* AddressList::getContactList() { - return &addresses; + return &addresses; } void AddressList::read() { - OContactAccess::List::Iterator it; - - QString lineEmail, lineName, email, name; - OContactAccess m_contactdb("mailit"); - OContactAccess::List m_list = m_contactdb.sorted( true, 0, 0, 0 ); - //OContact* oc;(*it).defaultEmail() - - for ( it = m_list.begin(); it != m_list.end(); ++it ) - { - //oc=(OContact*) it; - if ((*it).defaultEmail().length()!=0) - addContact((*it).defaultEmail(),(*it).fileAs()); - } - - /*if (! f.open(IO_ReadOnly) ) - return; - - QTextStream stream(&f); - - while (! stream.atEnd() ) { - lineEmail = stream.readLine(); - if (! stream.atEnd() ) - lineName = stream.readLine(); - else return; - - email = getRightString(lineEmail); - name = getRightString(lineName); - addContact(email, name); - } - f.close();*/ + OContactAccess::List::Iterator it; + + QString lineEmail, lineName, email, name; + OContactAccess m_contactdb("mailit"); + OContactAccess::List m_list = m_contactdb.sorted( true, 0, 0, 0 ); + //OContact* oc;(*it).defaultEmail() + + for ( it = m_list.begin(); it != m_list.end(); ++it ) + { + //oc=(OContact*) it; + if ((*it).defaultEmail().length()!=0) + addContact((*it).defaultEmail(),(*it).fileAs()); + } + + /*if (! f.open(IO_ReadOnly) ) + return; + + QTextStream stream(&f); + + while (! stream.atEnd() ) { + lineEmail = stream.readLine(); + if (! stream.atEnd() ) + lineName = stream.readLine(); + else return; + + email = getRightString(lineEmail); + name = getRightString(lineName); + addContact(email, name); + } + f.close();*/ } -QString AddressList::getRightString(QString in) +QString AddressList::getRightString(const QString &in) { - QString out = ""; - - int pos = in.find('='); - if (pos != -1) { - out = in.mid(pos+1).stripWhiteSpace(); - } - return out; + QString out = ""; + + int pos = in.find('='); + if (pos != -1) { + out = in.mid(pos+1).stripWhiteSpace(); + } + return out; } 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 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef ADDRESSLIST_H #define ADDRESSLIST_H #include <qobject.h> #include <qlist.h> struct Contact { - QString email; - QString name; + QString email; + QString name; }; class AddressList : public QObject { - Q_OBJECT + Q_OBJECT public: - AddressList(); - ~AddressList(); - void addContact(QString email, QString name); - bool containsEmail(QString email); - bool containsName(QString name); - QString getNameByEmail(QString email); - QString getEmailByName(QString name); - QList<Contact>* getContactList(); + AddressList(); + ~AddressList(); + void addContact(const QString &email, const QString &name); + bool containsEmail(const QString &email); + bool containsName(const QString &name); + QString getNameByEmail(const QString &email); + QString getEmailByName(const QString &name); + QList<Contact>* getContactList(); private: - int getEmailRef(QString email); - int getNameRef(QString name); - QString getRightString(QString in); - void read(); + int getEmailRef(const QString &email); + int getNameRef(const QString &name); + QString getRightString(const QString &in); + void read(); private: - QList<Contact> addresses; - QString filename; - bool dirty; + QList<Contact> addresses; + QString filename; + bool dirty; }; #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 @@ -320,203 +320,204 @@ void EmailClient::mailSent() void EmailClient::getNewMail() { if (accountList.count() == 0) { QMessageBox::warning(qApp->activeWindow(),"No account selected", "You must create an account", "OK\n"); return; } setMailAccount(); receiving = TRUE; previewingMail = TRUE; getMailButton->setEnabled(FALSE); cancelButton->setEnabled(TRUE); selectAccountMenu->setEnabled(FALSE); status1Label->setText(currentAccount->accountName + " headers"); progressBar->reset(); //get any previous mails not downloaded and add to queue /*mailDownloadList.clear(); Email *mailPtr; item = (EmailListItem *) inboxView->firstChild(); while (item != NULL) { mailPtr = item->getMail(); if ( (!mailPtr->downloaded) && (mailPtr->fromAccountId == currentAccount->id) ) { mailDownloadList.sizeInsert(mailPtr->serverId, mailPtr->size); } item = (EmailListItem *) item->nextSibling(); }*/ emailHandler->getMailHeaders(); } void EmailClient::getAllNewMail() { allAccounts = TRUE; currentAccount = accountList.first(); getNewMail(); } void EmailClient::mailArrived(const Email &mail, bool fromDisk) { Enclosure *ePtr; Email newMail; int thisMailId; - emailHandler->parse(mail.rawMail, lineShift, &newMail); + emailHandler->parse( mail.rawMail, lineShift, &newMail); mailconf->setGroup(newMail.id); if (fromDisk) { newMail.downloaded = mailconf->readBoolEntry("downloaded"); newMail.size = mailconf->readNumEntry("size"); newMail.serverId = mailconf->readNumEntry("serverid"); newMail.fromAccountId = mailconf->readNumEntry("fromaccountid"); } else { //mail arrived from server newMail.serverId = mail.serverId; newMail.size = mail.size; newMail.downloaded = mail.downloaded; newMail.fromAccountId = emailHandler->getAccount()->id; mailconf->writeEntry("fromaccountid", newMail.fromAccountId); } //add if read or not newMail.read = mailconf->readBoolEntry("mailread"); //check if new mail if ( (thisMailId = mailconf->readNumEntry("internalmailid", -1)) == -1) { thisMailId = mailIdCount; mailIdCount++; //set server count, so that if the user aborts, the new //header is not reloaded if ((currentAccount)&&(currentAccount->synchronize)) currentAccount->lastServerMailCount++; mailconf->writeEntry("internalmailid", thisMailId); mailconf->writeEntry("downloaded", newMail.downloaded); mailconf->writeEntry("size", (int) newMail.size); mailconf->writeEntry("serverid", newMail.serverId); //addressList->addContact(newMail.fromMail, newMail.from); } mailconf->writeEntry("downloaded", newMail.downloaded); QString stringMailId; stringMailId.setNum(thisMailId); //see if any attatchments needs to be stored for ( ePtr=newMail.files.first(); ePtr != 0; ePtr=newMail.files.next() ) { QString stringId; stringId.setNum(ePtr->id); int id = mailconf->readNumEntry("enclosureid_" + stringId); if (id != ePtr->id) { //new entry mailconf->writeEntry("enclosureid_" + stringId, ePtr->id); mailconf->writeEntry("name_" + stringId, ePtr->originalName); mailconf->writeEntry("contenttype_" + stringId, ePtr->contentType); mailconf->writeEntry("contentattribute_" + stringId, ePtr->contentAttribute); mailconf->writeEntry("saved_" + stringId, ePtr->saved); mailconf->writeEntry("installed_" + stringId, FALSE); ePtr->name = stringMailId + "_" + stringId; ePtr->path = getPath(TRUE); if (emailHandler->getEnclosure(ePtr)) { //file saved ePtr->saved = TRUE; mailconf->writeEntry("saved_" + stringId, ePtr->saved); mailconf->writeEntry("filename_" + stringId, ePtr->name); mailconf->writeEntry("path_" + stringId, ePtr->path); } else { ePtr->saved = FALSE; mailconf->writeEntry("saved_" + stringId, ePtr->saved); } } else { ePtr->saved = mailconf->readBoolEntry("saved_" + stringId); ePtr->installed = mailconf->readBoolEntry("installed_" + stringId); if (ePtr->saved) { ePtr->name = mailconf->readEntry("filename_" + stringId); ePtr->path = mailconf->readEntry("path_" + stringId); } } } bool found=false; if (!fromDisk) { Email *mailPtr; item = (EmailListItem *) inboxView->firstChild(); while ((item != NULL)&&(!found)) { mailPtr = item->getMail(); if (mailPtr->id == newMail.id) { item->setMail(newMail); emit mailUpdated(item->getMail()); - found = true; + found = true; } item = (EmailListItem *) item->nextSibling(); } } - if ((!found)||(fromDisk)) item = new EmailListItem(inboxView, newMail, TRUE); - - if (item->getMail()->files.count()>0) - { - item->setPixmap(0, Resource::loadPixmap("mailit/attach")); - } + if ((!found)||(fromDisk)) { + item = new EmailListItem(inboxView, newMail, TRUE); + } + if (item->getMail()->files.count()>0) + { + item->setPixmap(0, Resource::loadPixmap("mailit/attach")); + } /*if (!newMail.downloaded) mailDownloadList.sizeInsert(newMail.serverId, newMail.size);*/ mailboxView->setCurrentTab(0); } void EmailClient::allMailArrived(int count) { // not previewing means all mailtransfer has been done /*if (!previewingMail) {*/ if ( (allAccounts) && ( (currentAccount = accountList.next()) !=0 ) ) { emit newCaption("Mailit - " + currentAccount->accountName); getNewMail(); return; } else { allAccounts = FALSE; receiving = FALSE; getMailButton->setEnabled(TRUE); cancelButton->setEnabled(FALSE); selectAccountMenu->setEnabled(TRUE); status1Label->setText("Idle"); progressBar->reset(); return; } //} // all headers downloaded from server, start downloading remaining mails previewingMail = FALSE; status1Label->setText(currentAccount->accountName); progressBar->reset(); mailboxView->setCurrentTab(0); } void EmailClient::moveMailFront(Email *mailPtr) { if ( (receiving) && (mailPtr->fromAccountId == currentAccount->id) ) { mailDownloadList.moveFront(mailPtr->serverId, mailPtr->size); } } void EmailClient::smtpError(int code) { QString temp; @@ -597,167 +598,167 @@ void EmailClient::readMail() Email mail; int start, stop; QString s, del; QFile f(getPath(FALSE) + "inbox.txt"); if ( f.open(IO_ReadOnly) ) { // file opened successfully QTextStream t( &f ); // use a text stream s = t.read(); f.close(); start = 0; del = "\n.\n"; while ((uint) start < s.length()) { stop = s.find(del, start); if (stop == -1) stop = s.length() - del.length(); mail.rawMail = s.mid(start, stop + del.length() - start ); start = stop + del.length(); mailArrived(mail, TRUE); } } QFile fo(getPath(FALSE) + "outbox.txt"); if ( fo.open(IO_ReadOnly) ) { // file opened successfully QTextStream t( &fo ); // use a text stream s = t.read(); fo.close(); start = 0; del = "\n.\n"; while ((uint) start < s.length()) { stop = s.find(del, start); if (stop == -1) stop = s.length() - del.length(); mail.rawMail = s.mid(start, stop + del.length() - start ); start = stop + del.length(); emailHandler->parse(mail.rawMail, lineShift, &mail); mail.sent = false; mail.received = false; enqueMail(mail); } } } -void EmailClient::saveMail(QString fileName, QListView *view) +void EmailClient::saveMail(const QString &fileName, QListView *view) { QFile f(fileName); Email *mail; if (! f.open(IO_WriteOnly) ) { qWarning("could not open file"); return; } item = (EmailListItem *) view->firstChild(); QTextStream t(&f); while (item != NULL) { mail = item->getMail(); t << mail->rawMail; mailconf->setGroup(mail->id); mailconf->writeEntry("mailread", mail->read); item = (EmailListItem *) item->nextSibling(); } f.close(); } //paths for mailit, is settings, inbox, enclosures QString EmailClient::getPath(bool enclosurePath) { QString basePath = "qtmail"; QString enclosures = "enclosures"; QDir dir = (QString(getenv("HOME")) + "/Applications/" + basePath); if ( !dir.exists() ) dir.mkdir( dir.path() ); if (enclosurePath) { dir = (QString(getenv("HOME")) + "/Applications/" + basePath + "/" + enclosures); if ( !dir.exists() ) dir.mkdir( dir.path() ); return (dir.path() + "/"); } return (dir.path() + "/"); } void EmailClient::readSettings() { int y,acc_count; mailconf->setGroup("mailitglobal"); acc_count=mailconf->readNumEntry("Accounts",0); for (int accountPos = 0;accountPos<acc_count ; accountPos++) { mailconf->setGroup("Account_"+QString::number(accountPos+1)); //Account numbers start at 1 ... account.accountName = mailconf->readEntry("AccName",""); account.name = mailconf->readEntry("UserName",""); account.emailAddress = mailconf->readEntry("Email",""); account.popUserName = mailconf->readEntry("POPUser",""); account.popPasswd = mailconf->readEntryCrypt("POPPassword",""); account.popServer = mailconf->readEntry("POPServer",""); account.smtpServer = mailconf->readEntry("SMTPServer",""); account.id = mailconf->readNumEntry("AccountId",0); account.syncLimit = mailconf->readNumEntry("HeaderLimit",0); account.lastServerMailCount = 0; account.synchronize = FALSE; account.synchronize = (mailconf->readEntry("Synchronize","No")=="Yes"); if (account.synchronize) { - mailconf->readNumEntry("LASTSERVERMAILCOUNT",0); + mailconf->readNumEntry("LASTSERVERMAILCOUNT",0); } accountList.append(&account); } mailconf->setGroup("mailitglobal"); if ( (y = mailconf->readNumEntry("mailidcount", -1)) != -1) { mailIdCount = y; } if ( (y = mailconf->readNumEntry("accountidcount", -1)) != -1) { accountIdCount = y; } } void EmailClient::saveSettings() { int acc_count=0; MailAccount *accountPtr; if (!mailconf) { qWarning("could not save settings"); return; } for (accountPtr = accountList.first(); accountPtr != 0; accountPtr = accountList.next()) { mailconf->setGroup("Account_"+QString::number(++acc_count)); mailconf->writeEntry("AccName",accountPtr->accountName ); mailconf->writeEntry("UserName",accountPtr->name); mailconf->writeEntry("Email",accountPtr->emailAddress); mailconf->writeEntry("POPUser",accountPtr->popUserName); mailconf->writeEntryCrypt("POPPassword",accountPtr->popPasswd); mailconf->writeEntry("POPServer",accountPtr->popServer); mailconf->writeEntry("SMTPServer",accountPtr->smtpServer); mailconf->writeEntry("AccountId",accountPtr->id); if (accountPtr->synchronize) { mailconf->writeEntry("Synchronize","Yes"); mailconf->writeEntry("HeaderLimit",accountPtr->syncLimit); mailconf->writeEntry("LastServerMailCount",accountPtr->lastServerMailCount); } else @@ -870,167 +871,167 @@ void EmailClient::deleteMail(EmailListItem *mailItem, bool &inbox) //if mail is in queue for download, remove it from //queue if possible if ( (receiving) && (mPtr->fromAccountId == currentAccount->id) ) { if ( !mPtr->downloaded ) mailDownloadList.remove(mPtr->serverId, mPtr->size); } mailconf->setGroup(mPtr->id); mailconf->clearGroup(); //delete any temporary attatchemnts storing for ( ePtr=mPtr->files.first(); ePtr != 0; ePtr=mPtr->files.next() ) { if (ePtr->saved) { QFile::remove( (ePtr->path + ePtr->name) ); } } inboxView->takeItem(mailItem); } else { outboxView->takeItem(mailItem); } } void EmailClient::setMailSize(int size) { progressBar->reset(); progressBar->setTotalSteps(size); } void EmailClient::setTotalSize(int size) { } void EmailClient::setDownloadedSize(int size) { int total = progressBar->totalSteps(); if (size < total) { progressBar->setProgress(size); } else { progressBar->setProgress(total); } } void EmailClient::deleteItem() { - bool inbox=mailboxView->currentTab()==0; - QListView* box; - - EmailListItem* eli; - int pos; - - inbox ? box=inboxView : box=outboxView; - - eli=(EmailListItem*)box->selectedItem(); - - if (eli) - { - box->setSelected(eli->itemBelow(),true); //select the previous item - - deleteMail(eli,(bool&)inbox); //remove mail entry - } + bool inbox=mailboxView->currentTab()==0; + QListView* box; + + EmailListItem* eli; + int pos; + + inbox ? box=inboxView : box=outboxView; + + eli=(EmailListItem*)box->selectedItem(); + + if (eli) + { + box->setSelected(eli->itemBelow(),true); //select the previous item + + deleteMail(eli,(bool&)inbox); //remove mail entry + } } void EmailClient::inboxItemPressed() { -// timerID=startTimer(500); +// timerID=startTimer(500); } void EmailClient::inboxItemReleased() { - // killTimer(timerID); + // killTimer(timerID); } /*void EmailClient::timerEvent(QTimerEvent *e) { /*killTimer(timerID); QPopupMenu *action = new QPopupMenu(this); int reply=0; action->insertItem(tr( "Reply To" ),this,SLOT(reply())); action->insertItem( tr( "Reply All" ),this,SLOT(replyAll())); action->insertItem( tr( "Forward" ), this,SLOT(forward())); action->insertItem( tr( "Remove Mail" ), this,SLOT(remove())); action->exec(QCursor::pos()); if (action) delete action; }*/ Email* EmailClient::getCurrentMail() { - EmailListItem *eli=(EmailListItem* ) (inboxView->selectedItem()); - if (eli!=NULL) - return eli->getMail(); - else - return NULL; + EmailListItem *eli=(EmailListItem* ) (inboxView->selectedItem()); + if (eli!=NULL) + return eli->getMail(); + else + return NULL; } void EmailClient::download(Email* mail) { - MailAccount* acc=0; - - tempMailDownloadList.clear(); - tempMailDownloadList.sizeInsert(mail->serverId, mail->size); - - acc=accountList.at(mail->fromAccountId-1); - if (acc) - { - emailHandler->setAccount(*acc); - emailHandler->getMailByList(&tempMailDownloadList); - } - else - QMessageBox::warning(qApp->activeWindow(), - tr("No account associated"), tr("There is no active account \nassociated to this mail\n it can not be downloaded"), "Abort\n"); + MailAccount* acc=0; + + tempMailDownloadList.clear(); + tempMailDownloadList.sizeInsert(mail->serverId, mail->size); + + acc=accountList.at(mail->fromAccountId-1); + if (acc) + { + emailHandler->setAccount(*acc); + emailHandler->getMailByList(&tempMailDownloadList); + } + else + QMessageBox::warning(qApp->activeWindow(), + tr("No account associated"), tr("There is no active account \nassociated to this mail\n it can not be downloaded"), "Abort\n"); } void EmailClient::receive(const QCString& msg, const QByteArray& data) { - /*if (msg=="getMail()") - { - /*QDialog qd(qApp->activeWindow(),"Getting mail",true); - QVBoxLayout *vbProg = new QVBoxLayout( &qd ); - - initStatusBar(&qd); - - if (statusBar==0) - { - qDebug("No Bar ..."); - //statusBar=new ProgressBar(&qd); - } - statusBar->show(); - vbProg->addWidget(statusBar); - qd.showMaximized(); - qd.show(); - emit getAllNewMail(); - //qd.exec(); - } - else if (msg=="compose()") - { - QDialog qd(qApp->activeWindow(),"Getting mail",true); - - WriteMail wm(&qd,"write new mail"); - QVBoxLayout vbProg( &qd ); - - wm.showMaximized(); - vbProg.addWidget(&wm); - - qd.showMaximized(); - - emit composeRequested(); - qd.exec(); - - QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n"); - } - - else if (msg=="dialog()") - { - QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n"); - }*/ + /*if (msg=="getMail()") + { + /*QDialog qd(qApp->activeWindow(),"Getting mail",true); + QVBoxLayout *vbProg = new QVBoxLayout( &qd ); + + initStatusBar(&qd); + + if (statusBar==0) + { + qDebug("No Bar ..."); + //statusBar=new ProgressBar(&qd); + } + statusBar->show(); + vbProg->addWidget(statusBar); + qd.showMaximized(); + qd.show(); + emit getAllNewMail(); + //qd.exec(); + } + else if (msg=="compose()") + { + QDialog qd(qApp->activeWindow(),"Getting mail",true); + + WriteMail wm(&qd,"write new mail"); + QVBoxLayout vbProg( &qd ); + + wm.showMaximized(); + vbProg.addWidget(&wm); + + qd.showMaximized(); + + emit composeRequested(); + qd.exec(); + + QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n"); + } + + else if (msg=="dialog()") + { + QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n"); + }*/ } 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 @@ -61,97 +61,97 @@ private: MailAccount* dupl(MailAccount *in); MailAccount *ac; }; //class EmailClient : public EmailClientBase class EmailClient : public QMainWindow { Q_OBJECT public: EmailClient( QWidget* parent, const char* name, WFlags fl = 0 ); ~EmailClient(); AddressList* getAdrListRef(); protected: //void timerEvent(QTimerEvent*); signals: void composeRequested(); void viewEmail(QListView *, Email *); void mailUpdated(Email *); void newCaption(const QString &); void replyRequested(Email&, bool&); void forwardRequested(Email&); void removeItem(EmailListItem*, bool&); /*void reply(Email&); void replyAll(Email&); void remove(Email&); void forward(Email&);*/ public slots: void compose(); void cancel(); void enqueMail(const Email &mail); void setMailAccount(); void sendQuedMail(); void mailSent(); void deleteItem(); void getNewMail(); void getAllNewMail(); void smtpError(int code); void popError(int code); void inboxItemSelected(); void outboxItemSelected(); void inboxItemPressed(); void inboxItemReleased(); void mailArrived(const Email &mail, bool fromDisk); void allMailArrived(int); - void saveMail(QString fileName, QListView *view); + void saveMail(const QString &fileName, QListView *view); void selectAccount(int); void editAccount(int); void updateAccounts(); void deleteAccount(int); void deleteMail(EmailListItem *mailItem, bool &inbox); void setTotalSize(int); void setMailSize(int); void setDownloadedSize(int); void moveMailFront(Email *mailPtr); void download(Email*); /* void reply(); void replyAll(); void forward(); void remove();*/ private slots: void receive(const QCString&, const QByteArray&); private: void init(); void initStatusBar(QWidget*); void readMail(); QString getPath(bool enclosurePath); void readSettings(); void saveSettings(); Email* getCurrentMail(); int timerID; Config *mailconf; int newAccountId, idCount, mailIdCount; int accountIdCount; AccountList accountList; AddressList *addressList; EditAccount *editAccountView; EmailListItem *item; EmailHandler *emailHandler; QList<Email> quedMessages; MailList mailDownloadList; MailList tempMailDownloadList; bool sending, receiving, previewingMail, allAccounts; QString lineShift; MailAccount account, *currentAccount; QCopChannel* channel; QToolBar *bar; QProgressBar *progressBar; 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,90 +1,90 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <qfileinfo.h> #include <stdlib.h> #include <qapplication.h> #include <qmessagebox.h> #include <qcstring.h> #include "emailhandler.h" #include <qpe/applnk.h> #include <qpe/filemanager.h> QCollection::Item EnclosureList::newItem(QCollection::Item d) { return dupl( (Enclosure *) d); } Enclosure* EnclosureList::dupl(Enclosure *in) { ac = new Enclosure(*in); return ac; } EmailHandler::EmailHandler() { - qDebug("EMailHandler::EmailHandler"); + qDebug("EMailHandler::EmailHandler"); smtpClient = new SmtpClient(); popClient = new PopClient(); connect(smtpClient, SIGNAL(errorOccurred(int)), this, SIGNAL(smtpError(int)) ); connect(smtpClient, SIGNAL(mailSent()), this, SIGNAL(mailSent()) ); connect(smtpClient, SIGNAL(updateStatus(const QString &)), this, SIGNAL(updateSmtpStatus(const QString &)) ); connect(popClient, SIGNAL(errorOccurred(int)), this, SIGNAL(popError(int)) ); connect(popClient, SIGNAL(newMessage(const QString &, int, uint, bool)), this, SLOT(messageArrived(const QString &, int, uint, bool)) ); connect(popClient, SIGNAL(updateStatus(const QString &)), this, SIGNAL(updatePopStatus(const QString &)) ); connect(popClient, SIGNAL(mailTransfered(int)), this, SIGNAL(mailTransfered(int)) ); //relaying size information connect(popClient, SIGNAL(currentMailSize(int)), this, SIGNAL(currentMailSize(int)) ); connect(popClient, SIGNAL(downloadedSize(int)), this, SIGNAL(downloadedSize(int)) ); } void EmailHandler::sendMail(QList<Email> *mailList) { Email *currentMail; QString temp; QString userName = mailAccount.name; userName += " <" + mailAccount.emailAddress + ">"; for (currentMail = mailList->first(); currentMail != 0; currentMail = mailList->next()) { if (encodeMime(currentMail) == 0) { smtpClient->addMail(userName, currentMail->subject, currentMail->recipients, currentMail->rawMail); } else { //error temp = tr("Could not locate all files in \nmail with subject: ") + currentMail->subject; temp += tr("\nMail has NOT been sent"); QMessageBox::warning(qApp->activeWindow(), tr("Attachment error"), temp, tr("OK\n")); } } @@ -103,167 +103,167 @@ void EmailHandler::getMail() popClient->setSynchronize(mailAccount.lastServerMailCount); } else { popClient->removeSynchronize(); } headers = FALSE; //popClient->headersOnly(headers, 0); popClient->newConnection(mailAccount.popServer, 110); } void EmailHandler::getMailHeaders() { popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd); mailAccount.synchronize ? popClient->setSynchronize(mailAccount.lastServerMailCount): popClient->removeSynchronize(); headers = TRUE; popClient->headersOnly(headers, mailAccount.syncLimit); //less than requested syncLimit, download all qDebug("Initiating connection"); popClient->newConnection(mailAccount.popServer, 110); } void EmailHandler::getMailByList(MailList *mailList) { if (mailList->count() == 0) { //should not occur though emit mailTransfered(0); return; } headers = FALSE; popClient->headersOnly(FALSE, 0); popClient->setAccount(mailAccount.popUserName,mailAccount.popPasswd); popClient->setSelectedMails(mailList); popClient->newConnection(mailAccount.popServer, 110); } void EmailHandler::messageArrived(const QString &message, int id, uint size, bool complete) { Email mail; mail.rawMail = message; mail.serverId = id; mail.size = size; mail.downloaded = complete; emit mailArrived(mail, FALSE); } -bool EmailHandler::parse(QString in, QString lineShift, Email *mail) +bool EmailHandler::parse(const QString &in, const QString &lineShift, Email *mail) { QString temp, boundary; int pos; QString delimiter, header, body, mimeHeader, mimeBody; QString content, contentType, contentAttribute, id, encoding; QString fileName, storedName; int enclosureId = 0; mail->rawMail = in; mail->received = TRUE; mail->files.setAutoDelete(TRUE); temp = lineShift + "." + lineShift; if (in.right(temp.length()) != temp) { mail->rawMail += temp; } delimiter = lineShift + lineShift; // "\n\n" or "\r\n\r\n" pos = in.find(delimiter, 0, FALSE); header = in.left(pos); body = in.right(in.length() - pos - delimiter.length()); if ((body.at(body.length()-2) == '.') && (body.at(body.length()-3) == '\n')) body.truncate(body.length()-2); TextParser p(header, lineShift); if ((pos = p.find("FROM",':', 0, TRUE)) != -1) { pos++; if (p.separatorAt(pos) == ' ') { mail->from = p.getString(&pos, '<', false); mail->from = mail->from.stripWhiteSpace(); if ( (mail->from.length() > 2) && (mail->from[0] == '"') ) { mail->from = mail->from.left(mail->from.length() - 1); mail->from = mail->from.right(mail->from.length() - 1); } pos++; mail->fromMail = p.getString(&pos, '>', false); } else { if (p.separatorAt(pos) == '<') //No name.. nasty pos++; //pos++; mail->fromMail = p.getString(&pos, 'z', TRUE); if (mail->fromMail.at(mail->fromMail.length()-1) == '>') mail->fromMail.truncate(mail->fromMail.length() - 1); mail->from=mail->fromMail; } } pos=0; //Search for To: after the FROM: attribute to prevent hitting the Delivered-To: while((pos = p.find("TO",':', pos+1, TRUE))!=-1) { - QString rec; - - if (p.separatorAt(pos-1)!='-') //The - separator means that this is a Delivered-To: or Reply-To: - { - pos++; - mail->recipients.append(p.getString(&pos, '\r', TRUE)); - } + QString rec; + + if (p.separatorAt(pos-1)!='-') //The - separator means that this is a Delivered-To: or Reply-To: + { + pos++; + mail->recipients.append(p.getString(&pos, '\r', TRUE)); + } } // //if (pos==-1) mail->recipients.append (tr("undisclosed recipients") ); if ((pos = p.find("CC",':', 0, TRUE)) != -1) { - pos++; - mail->carbonCopies.append (p.getString(&pos, 'z', TRUE) ); + pos++; + mail->carbonCopies.append (p.getString(&pos, 'z', TRUE) ); } if ((pos = p.find("SUBJECT",':', 0, TRUE)) != -1) { pos++; mail->subject = p.getString(&pos, 'z', TRUE); } if ((pos = p.find("DATE",':', 0, TRUE)) != -1) { pos++; mail->date = p.getString(&pos, 'z', TRUE); } if ((pos = p.find("MESSAGE",'-', 0, TRUE)) != -1) { pos++; if ( (p.wordAt(pos).upper() == "ID") && (p.separatorAt(pos) == ':') ) { id = p.getString(&pos, 'z', TRUE); mail->id = id; } } pos = 0; while ( ((pos = p.find("MIME",'-', pos, TRUE)) != -1) ) { pos++; if ( (p.wordAt(pos).upper() == "VERSION") && (p.separatorAt(pos) == ':') ) { pos++; if (p.getString(&pos, 'z', true) == "1.0") { mail->mimeType = 1; } } } if (mail->mimeType == 1) { boundary = ""; if ((pos = p.find("BOUNDARY", '=', 0, TRUE)) != -1) { pos++; boundary = p.getString(&pos, 'z', true); if (boundary[0] == '"') { boundary = boundary.left(boundary.length() - 1); //strip " boundary = boundary.right(boundary.length() - 1); //strip " } boundary = "--" + boundary; //create boundary field } @@ -395,167 +395,167 @@ int EmailHandler::parse64base(char *src, char *bufOut) { //conversion table withouth table... for (int x = 0; x < 4; x++) { c = src[x]; if ( (int) c >= 'A' && (int) c <= 'Z') li[x] = (int) c - (int) 'A'; if ( (int) c >= 'a' && (int) c <= 'z') li[x] = (int) c - (int) 'a' + 26; if ( (int) c >= '0' && (int) c <= '9') li[x] = (int) c - (int) '0' + 52; if (c == '+') li[x] = 62; if (c == '/') li[x] = 63; } processed = 1; bufOut[0] = (char) li[0] & (32+16+8+4+2+1); //mask out top 2 bits bufOut[0] <<= 2; z = li[1] >> 4; bufOut[0] = bufOut[0] | z; //first byte retrived if (src[2] != '=') { bufOut[1] = (char) li[1] & (8+4+2+1); //mask out top 4 bits bufOut[1] <<= 4; z = li[2] >> 2; bufOut[1] = bufOut[1] | z; //second byte retrived processed++; if (src[3] != '=') { bufOut[2] = (char) li[2] & (2+1); //mask out top 6 bits bufOut[2] <<= 6; z = li[3]; bufOut[2] = bufOut[2] | z; //third byte retrieved processed++; } } return processed; } int EmailHandler::encodeMime(Email *mail) { QString fileName, fileType, contentType, newBody, boundary; Enclosure *ePtr; QString userName = mailAccount.name; - if (userName.length()>0) //only embrace it if there is a user name - userName += " <" + mailAccount.emailAddress + ">"; + if (userName.length()>0) //only embrace it if there is a user name + userName += " <" + mailAccount.emailAddress + ">"; //add standard headers newBody = "From: " + userName + "\r\nTo: "; for (QStringList::Iterator it = mail->recipients.begin(); it != mail->recipients.end(); ++it ) { newBody += *it + " "; } newBody += "\r\nCC: "; for (QStringList::Iterator it = mail->carbonCopies.begin(); it != mail->carbonCopies.end(); ++it ) { newBody += *it + " "; } newBody += "\r\nSubject: " + mail->subject + "\r\n"; if (mail->files.count() == 0) { //just a simple mail newBody += "\r\n" + mail->body; mail->rawMail = newBody; return 0; } //Build mime encoded mail boundary = "-----4345=next_bound=0495----"; newBody += "Mime-Version: 1.0\r\n"; newBody += "Content-Type: multipart/mixed; boundary=\"" + boundary + "\"\r\n\r\n"; newBody += "This is a multipart message in Mime 1.0 format\r\n\r\n"; newBody += "--" + boundary + "\r\nContent-Type: text/plain\r\n\r\n"; newBody += mail->body; for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) { fileName = ePtr->originalName; fileType = ePtr->contentType; QFileInfo fi(fileName); // This specification of contentType is temporary contentType = ""; if (fileType == "Picture") { contentType = "image/x-image"; } else if (fileType == "Document") { contentType = "text/plain"; } else if (fileType == "Sound") { contentType = "audio/x-wav"; } else if (fileType == "Movie") { contentType = "video/mpeg"; } else { contentType = "application/octet-stream"; } newBody += "\r\n\r\n--" + boundary + "\r\n"; newBody += "Content-Type: " + contentType + "; name=\"" + fi.fileName() + "\"\r\n"; newBody += "Content-Transfer-Encoding: base64\r\n"; newBody += "Content-Disposition: inline; filename=\"" + fi.fileName() + "\"\r\n\r\n"; if (encodeFile(fileName, &newBody) == -1) //file not found? return -1; } newBody += "\r\n\r\n--" + boundary + "--"; mail->rawMail = newBody; return 0; } -int EmailHandler::encodeFile(QString fileName, QString *toBody) +int EmailHandler::encodeFile(const QString &fileName, QString *toBody) { char *fileData; char *dataPtr; QString temp; uint dataSize, count; QFile f(fileName); if (! f.open(IO_ReadOnly) ) { qWarning("could not open file: " + fileName); return -1; } QTextStream s(&f); dataSize = f.size(); fileData = (char *) malloc(dataSize + 3); s.readRawBytes(fileData, dataSize); temp = ""; dataPtr = fileData; count = 0; while (dataSize > 0) { if (dataSize < 3) { encode64base(dataPtr, &temp, dataSize); dataSize = 0; } else { encode64base(dataPtr, &temp, 3); dataSize -= 3; dataPtr += 3; count += 4; } if (count > 72) { count = 0; temp += "\r\n"; } } toBody->append(temp); delete(fileData); f.close(); return 0; } void EmailHandler::encode64base(char *src, QString *dest, int len) { QString temp; uchar c; uchar bufOut[4]; bufOut[0] = src[0]; 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 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef EmailHandler_H #define EmailHandler_H #include <qobject.h> #include <qstring.h> #include <qdatetime.h> #include <qlist.h> #include <qstringlist.h> #include <qfile.h> #include <qstringlist.h> #include <qcollection.h> #include <qpe/qcopenvelope_qws.h> #include "smtpclient.h" #include "popclient.h" #include "textparser.h" #include "maillist.h" struct Enclosure { - int id; - QString originalName; - QString name; - QString path; - QString contentType; - QString contentAttribute; - QString encoding; - QString body; //might use to much mem. check!! - bool saved, installed; + int id; + QString originalName; + QString name; + QString path; + QString contentType; + QString contentAttribute; + QString encoding; + QString body; //might use to much mem. check!! + bool saved, installed; }; class EnclosureList : public QList<Enclosure> { public: - Item newItem(Item d); + Item newItem(Item d); private: - Enclosure* dupl(Enclosure *in); - Enclosure *ac; + Enclosure* dupl(Enclosure *in); + Enclosure *ac; }; struct Email { - QString id; - QString from; - QString fromMail; - QStringList recipients; - QStringList carbonCopies; - QString date; - QString subject; - QString body; - QString bodyPlain; - bool sent, received, read, downloaded; - QString rawMail; - int mimeType; //1 = Mime 1.0 - int serverId; - int internalId; - int fromAccountId; - QString contentType; //0 = text - QString contentAttribute; //0 = plain, 1 = html - EnclosureList files; - uint size; - - void addEnclosure(Enclosure *e) - { - files.append(e); - } + QString id; + QString from; + QString fromMail; + QStringList recipients; + QStringList carbonCopies; + QString date; + QString subject; + QString body; + QString bodyPlain; + bool sent, received, read, downloaded; + QString rawMail; + int mimeType; //1 = Mime 1.0 + int serverId; + int internalId; + int fromAccountId; + QString contentType; //0 = text + QString contentAttribute; //0 = plain, 1 = html + EnclosureList files; + uint size; + + void addEnclosure(Enclosure *e) + { + files.append(e); + } }; struct MailAccount { - QString accountName; - QString name; - QString emailAddress; - QString popUserName; - QString popPasswd; - QString popServer; - QString smtpServer; - bool synchronize; - int syncLimit; - int lastServerMailCount; - int id; + QString accountName; + QString name; + QString emailAddress; + QString popUserName; + QString popPasswd; + QString popServer; + QString smtpServer; + bool synchronize; + int syncLimit; + int lastServerMailCount; + int id; }; - const int ErrUnknownResponse = 1001; - const int ErrLoginFailed = 1002; - const int ErrCancel = 1003; - + const int ErrUnknownResponse = 1001; + const int ErrLoginFailed = 1002; + const int ErrCancel = 1003; + class EmailHandler : public QObject { - Q_OBJECT + Q_OBJECT public: - EmailHandler(); - void setAccount(MailAccount account); - MailAccount* getAccount(){return &mailAccount;} - void sendMail(QList<Email> *mailList); - void getMail(); - void getMailHeaders(); - void getMailByList(MailList *mailList); - bool parse(QString in, QString lineShift, Email *mail); - bool getEnclosure(Enclosure *ePtr); - int parse64base(char *src, char *dest); - int encodeMime(Email *mail); - int encodeFile(QString fileName, QString *toBody); - void encode64base(char *src, QString *dest, int len); - void cancel(); - + EmailHandler(); + void setAccount(MailAccount account); + MailAccount* getAccount(){return &mailAccount;} + void sendMail(QList<Email> *mailList); + void getMail(); + void getMailHeaders(); + void getMailByList(MailList *mailList); + bool parse(const QString &in, const QString &lineShift, Email *mail); + bool getEnclosure(Enclosure *ePtr); + int parse64base(char *src, char *dest); + int encodeMime(Email *mail); + int encodeFile(const QString &fileName, QString *toBody); + void encode64base(char *src, QString *dest, int len); + void cancel(); + signals: - void mailSent(); - void smtpError(int); - void popError(int); - void mailArrived(const Email &, bool); - void updatePopStatus(const QString &); - void updateSmtpStatus(const QString &); - void mailTransfered(int); - void mailboxSize(int); - void currentMailSize(int); - void downloadedSize(int); + void mailSent(); + void smtpError(int); + void popError(int); + void mailArrived(const Email &, bool); + void updatePopStatus(const QString &); + void updateSmtpStatus(const QString &); + void mailTransfered(int); + void mailboxSize(int); + void currentMailSize(int); + void downloadedSize(int); public slots: - void messageArrived(const QString &, int id, uint size, bool complete); - + void messageArrived(const QString &, int id, uint size, bool complete); + private: - MailAccount mailAccount; - SmtpClient *smtpClient; - PopClient *popClient; - bool headers; + MailAccount mailAccount; + SmtpClient *smtpClient; + PopClient *popClient; + bool headers; }; #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 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <qstring.h> #include <qpe/resource.h> #include "emaillistitem.h" EmailListItem::EmailListItem(QListView *parent, Email mailIn, bool inbox) - : QListViewItem(parent) + : QListViewItem(parent) { - QString temp; - - mail = mailIn; - - if (inbox) { - setText(0, mail.from); - } else { - QStringList::Iterator it = mail.recipients.begin(); - temp = *it; - if (mail.recipients.count() > 1) - temp += "..."; - setText(0, temp); - } - setText(1, mail.subject); - setText(2,mail.date); - - if (mailIn.files.count()>0) - { - setPixmap(0, Resource::loadPixmap("mailit/attach")); - } - - selected = FALSE; + QString temp; + + mail = mailIn; + + if (inbox) { + setText(0, mail.from); + } else { + QStringList::Iterator it = mail.recipients.begin(); + temp = *it; + if (mail.recipients.count() > 1) + temp += "..."; + setText(0, temp); + } + setText(1, mail.subject); + setText(2,mail.date); + + if (mailIn.files.count()>0) + { + setPixmap(0, Resource::loadPixmap("mailit/attach")); + } + + selected = FALSE; } Email* EmailListItem::getMail() { - return &mail; + return &mail; } void EmailListItem::setMail(Email newMail) { - mail = newMail; - repaint(); + mail = newMail; + repaint(); } void EmailListItem::setItemSelected(bool enable) { - selected = enable; - setSelected(enable); - repaint(); + selected = enable; + setSelected(enable); + repaint(); } bool EmailListItem::isItemSelected() { - return selected; + return selected; } void EmailListItem::paintCell( QPainter *p, const QColorGroup &cg, - int column, int width, int alignment ) + int column, int width, int alignment ) { - QColorGroup _cg( cg ); - QColor c = _cg.text(); + QColorGroup _cg( cg ); + QColor c = _cg.text(); - if ( (! mail.read) && (mail.received) ) - _cg.setColor( QColorGroup::Text, Qt::blue); - if (!mail.downloaded) - _cg.setColor( QColorGroup::Text, Qt::red); - -/* if (selected) { - _cg.setColor(QColorGroup::Base, Qt::blue); - _cg.setColor(QColorGroup::Text, Qt::yellow); - if (isSelected()) { - _cg.setColor(QColorGroup::HighlightedText, Qt::yellow); - } else { - _cg.setColor(QColorGroup::Highlight, Qt::blue); - } - } -*/ + if ( (! mail.read) && (mail.received) ) + _cg.setColor( QColorGroup::Text, Qt::blue); + if (!mail.downloaded) + _cg.setColor( QColorGroup::Text, Qt::red); + +/* if (selected) { + _cg.setColor(QColorGroup::Base, Qt::blue); + _cg.setColor(QColorGroup::Text, Qt::yellow); + if (isSelected()) { + _cg.setColor(QColorGroup::HighlightedText, Qt::yellow); + } else { + _cg.setColor(QColorGroup::Highlight, Qt::blue); + } + } +*/ QListViewItem::paintCell( p, _cg, column, width, alignment ); _cg.setColor( QColorGroup::Text, c ); } 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 @@ -5,323 +5,323 @@ ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "popclient.h" #include "emailhandler.h" //#define APOP_TEST extern "C" { #include "md5.h" } #include <qcstring.h> PopClient::PopClient() { socket = new QSocket(this, "popClient"); connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int))); connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished())); connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData())); stream = new QTextStream(socket); receiving = FALSE; synchronize = FALSE; lastSync = 0; headerLimit = 0; preview = FALSE; } PopClient::~PopClient() { delete socket; delete stream; } -void PopClient::newConnection(QString target, int port) +void PopClient::newConnection(const QString &target, int port) { if (receiving) { qWarning("socket in use, connection refused"); return; } status = Init; socket->connectToHost(target, port); receiving = TRUE; //selected = FALSE; emit updateStatus("DNS lookup"); } -void PopClient::setAccount(QString popUser, QString popPasswd) +void PopClient::setAccount(const QString &popUser, const QString &popPasswd) { popUserName = popUser; popPassword = popPasswd; } void PopClient::setSynchronize(int lastCount) { synchronize = TRUE; lastSync = lastCount; } void PopClient::removeSynchronize() { synchronize = FALSE; lastSync = 0; } void PopClient::headersOnly(bool headers, int limit) { preview = headers; headerLimit = limit; } void PopClient::setSelectedMails(MailList *list) { selected = TRUE; mailList = list; } void PopClient::connectionEstablished() { emit updateStatus(tr("Connection established")); } void PopClient::errorHandling(int status) { emit updateStatus(tr("Error Occured")); emit errorOccurred(status); socket->close(); receiving = FALSE; } void PopClient::incomingData() { QString response, temp, temp2, timeStamp; QString md5Source; int start, end; // char *md5Digest; char md5Digest[16]; // if ( !socket->canReadLine() ) // return; response = socket->readLine(); switch(status) { //logging in case Init: { #ifdef APOP_TEST start = response.find('<',0); end = response.find('>', start); if( start >= 0 && end > start ) { timeStamp = response.mid( start , end - start + 1); md5Source = timeStamp + popPassword; md5_buffer( (char const *)md5Source, md5Source.length(),&md5Digest[0]); for(int j =0;j < MD5_DIGEST_LENGTH ;j++) { printf("%x", md5Digest[j]); } printf("\n"); // qDebug(md5Digest); *stream << "APOP " << popUserName << " " << md5Digest << "\r\n"; // qDebug("%s", stream); status = Stat; } else #endif { timeStamp = ""; *stream << "USER " << popUserName << "\r\n"; status = Pass; } break; } case Pass: { *stream << "PASS " << popPassword << "\r\n"; - status = Stat; - + status = Stat; + break; } //ask for number of messages case Stat: { if (response[0] == '+') { *stream << "STAT" << "\r\n"; - status = Mcnt; + status = Mcnt; } else errorHandling(ErrLoginFailed); break; } //get count of messages, eg "+OK 4 900.." -> int 4 case Mcnt: { if (response[0] == '+') { temp = response.replace(0, 4, ""); int x = temp.find(" ", 0); temp.truncate((uint) x); newMessages = temp.toInt(); messageCount = 1; status = List; if (synchronize) { //messages deleted from server, reload all - if (newMessages < lastSync) - lastSync = 0; + if (newMessages < lastSync) + lastSync = 0; messageCount = 1; } - if (selected) { + if (selected) { int *ptr = mailList->first(); if (ptr != 0) { newMessages++; //to ensure no early jumpout messageCount = *ptr; } else newMessages = 0; - } + } } else errorHandling(ErrUnknownResponse); } //Read message number x, count upwards to messageCount case List: { if (messageCount <= newMessages) { *stream << "LIST " << messageCount << "\r\n"; status = Size; temp2.setNum(newMessages - lastSync); temp.setNum(messageCount - lastSync); if (!selected) { emit updateStatus(tr("Retrieving ") + temp + "/" + temp2); } else { //completing a previously closed transfer /* if ( (messageCount - lastSync) <= 0) { temp.setNum(messageCount); emit updateStatus(tr("Previous message ") + temp); } else {*/ emit updateStatus(tr("Completing message ") + temp); //} } break; } else { emit updateStatus(tr("No new Messages")); status = Quit; } } //get size of message, eg "500 characters in message.." -> int 500 case Size: { if (status != Quit) { //because of idiotic switch if (response[0] == '+') { temp = response.replace(0, 4, ""); int x = temp.find(" ", 0); temp = temp.right(temp.length() - ((uint) x + 1) ); mailSize = temp.toInt(); emit currentMailSize(mailSize); status = Retr; } else { //qWarning(response); errorHandling(ErrUnknownResponse); } } } //Read message number x, count upwards to messageCount case Retr: { if (status != Quit) { if ((selected)||(mailSize <= headerLimit)) - { + { *stream << "RETR " << messageCount << "\r\n"; } else { //only header - *stream << "TOP " << messageCount << " 0\r\n"; + *stream << "TOP " << messageCount << " 0\r\n"; } messageCount++; status = Ignore; break; } } case Ignore: { if (status != Quit) { //because of idiotic switch if (response[0] == '+') { message = ""; status = Read; if (!socket->canReadLine()) //sync. problems break; response = socket->readLine(); } else errorHandling(ErrUnknownResponse); } } //add all incoming lines to body. When size is reached, send //message, and go back to read new message case Read: { if (status != Quit) { //because of idiotic switch message += response; while ( socket->canReadLine() ) { response = socket->readLine(); message += response; } emit downloadedSize(message.length()); int x = message.find("\r\n.\r\n",-5); if (x == -1) { break; } else { //message reach entire size - if ( (selected)||(mailSize <= headerLimit)) //mail size limit is not used if late download is active - { - emit newMessage(message, messageCount-1, mailSize, TRUE); + if ( (selected)||(mailSize <= headerLimit)) //mail size limit is not used if late download is active + { + emit newMessage(message, messageCount-1, mailSize, TRUE); } else { //incomplete mail downloaded - emit newMessage(message, messageCount-1, mailSize, FALSE); + emit newMessage(message, messageCount-1, mailSize, FALSE); } - + if ((messageCount > newMessages)||(selected)) //last message ? - { + { status = Quit; if (selected) { //grab next from queue newMessages--; status = Quit; } - } + } else - { + { *stream << "LIST " << messageCount << "\r\n"; status = Size; temp2.setNum(newMessages - lastSync); temp.setNum(messageCount - lastSync); emit updateStatus(tr("Retrieving ") + temp + "/" + temp2); break; } } } if (status != Quit) break; } case Quit: { *stream << "Quit\r\n"; status = Done; int newM = newMessages - lastSync; if (newM > 0) { temp.setNum(newM); emit updateStatus(temp + tr(" new messages")); } else { emit updateStatus(tr("No new messages")); } socket->close(); receiving = FALSE; emit mailTransfered(newM); break; } } } 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 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef PopClient_H #define PopClient_H #include <stdio.h> #include <qsocket.h> #include <qstring.h> #include <qobject.h> #include <qtextstream.h> #include <qlist.h> #include "maillist.h" class PopClient: public QObject { Q_OBJECT public: PopClient(); ~PopClient(); - void newConnection(QString target, int port); - void setAccount(QString popUser, QString popPasswd); + void newConnection(const QString &target, int port); + void setAccount(const QString &popUser, const QString &popPasswd); void setSynchronize(int lastCount); void removeSynchronize(); void headersOnly(bool headers, int limit); void setSelectedMails(MailList *list); signals: void newMessage(const QString &, int, uint, bool); void errorOccurred(int status); void updateStatus(const QString &); void mailTransfered(int); void mailboxSize(int); void currentMailSize(int); void downloadedSize(int); public slots: void errorHandling(int); protected slots: void connectionEstablished(); void incomingData(); private: QSocket *socket; QTextStream *stream; enum transferStatus { Init, Pass, Stat, Mcnt, Read, List, Size, Retr, Acks, Quit, Done, Ignore }; int status, lastSync; int messageCount, newMessages, mailSize, headerLimit; bool receiving, synchronize, preview, selected; QString popUserName, popPassword, message; MailList *mailList; }; #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,104 +1,104 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "smtpclient.h" #include "emailhandler.h" SmtpClient::SmtpClient() { socket = new QSocket(this, "smtpClient"); stream = new QTextStream(socket); mailList.setAutoDelete(TRUE); connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int))); connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished())); connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData())); sending = FALSE; } SmtpClient::~SmtpClient() { delete socket; delete stream; } -void SmtpClient::newConnection(QString target, int port) +void SmtpClient::newConnection(const QString &target, int port) { if (sending) { qWarning("socket in use, connection refused"); return; } status = Init; sending = TRUE; socket->connectToHost(target, port); emit updateStatus(tr("DNS lookup")); } -void SmtpClient::addMail(QString from, QString subject, QStringList to, QString body) +void SmtpClient::addMail(const QString &from, const QString &subject, const QStringList &to, const QString &body) { RawEmail *mail = new RawEmail; mail->from = from; mail->subject = subject; mail->to = to; mail->body = body; mailList.append(mail); } void SmtpClient::connectionEstablished() { emit updateStatus(tr("Connection established")); } void SmtpClient::errorHandling(int status) { emit errorOccurred(status); socket->close(); mailList.clear(); sending = FALSE; } void SmtpClient::incomingData() { QString response; if (!socket->canReadLine()) return; response = socket->readLine(); switch(status) { case Init: { if (response[0] == '2') { status = From; mailPtr = mailList.first(); *stream << "HELO there\r\n"; } else errorHandling(ErrUnknownResponse); break; } case From: { if (response[0] == '2') { *stream << "MAIL FROM: " << mailPtr->from << "\r\n"; status = Recv; } else errorHandling(ErrUnknownResponse); 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 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef SmtpClient_H #define SmtpClient_H //#include <stdio.h> #include <qsocket.h> #include <qstring.h> #include <qobject.h> #include <qtextstream.h> #include <qstringlist.h> #include <qlist.h> struct RawEmail { - QString from; - QString subject; - QStringList to; - QString body; + QString from; + QString subject; + QStringList to; + QString body; }; class SmtpClient: public QObject { - Q_OBJECT - + Q_OBJECT + public: - SmtpClient(); - ~SmtpClient(); - void newConnection(QString target, int port); - void addMail(QString from, QString subject, QStringList to, QString body); + SmtpClient(); + ~SmtpClient(); + void newConnection(const QString &target, int port); + void addMail(const QString &from, const QString &subject, const QStringList &to, const QString &body); signals: - void errorOccurred(int); - void updateStatus(const QString &); - void mailSent(); - + void errorOccurred(int); + void updateStatus(const QString &); + void mailSent(); + public slots: - void errorHandling(int); + void errorHandling(int); protected slots: - void connectionEstablished(); - void incomingData(); - + void connectionEstablished(); + void incomingData(); + private: - QSocket *socket; - QTextStream *stream; - enum transferStatus - { - Init, From, Recv, MRcv, Data, Body, Quit, Done - }; - int status; - QList<RawEmail> mailList; - RawEmail *mailPtr; - bool sending; - QStringList::Iterator it; + QSocket *socket; + QTextStream *stream; + enum transferStatus + { + Init, From, Recv, MRcv, Data, Body, Quit, Done + }; + int status; + QList<RawEmail> mailList; + RawEmail *mailPtr; + bool sending; + QStringList::Iterator it; }; #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 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "textparser.h" -TextParser::TextParser(QString in, QString lineBreak) +TextParser::TextParser(const QString &in, const QString &lineBreak) { - data = in; - lineSep = lineBreak; - - init(); - createSeparators(); - split(); + data = in; + lineSep = lineBreak; + + init(); + createSeparators(); + split(); } -TextParser::TextParser(QString in, QString lineBreak, QString sep) +TextParser::TextParser(const QString &in, const QString &lineBreak, const QString &sep) { - data = in; - lineSep = lineBreak; - - init(); - separators = sep; - split(); + data = in; + lineSep = lineBreak; + + init(); + separators = sep; + split(); } void TextParser::init() { - lineCount = 0; - linePos = 0; - totalElmCount = 0; - separatorPos = -1; //not initialized - wordPos = -1; //not initialized - sepAtLine = 0; - sepAtPosElm = -1; //such that nextSep equals 0 - wordAtLine = 0; - wordAtPosElm = -1; //such that nextWord equals 0 - atLine = 0; - atPosElm = 0; + lineCount = 0; + linePos = 0; + totalElmCount = 0; + separatorPos = -1; //not initialized + wordPos = -1; //not initialized + sepAtLine = 0; + sepAtPosElm = -1; //such that nextSep equals 0 + wordAtLine = 0; + wordAtPosElm = -1; //such that nextWord equals 0 + atLine = 0; + atPosElm = 0; } void TextParser::createSeparators() { - separators = " @#,.:;<>*/(){}|'?-+=_"; + separators = " @#,.:;<>*/(){}|'?-+=_"; } -/* Returns pos of given search criteria, -1 if not found */ -int TextParser::find(QString target, QChar sep, int pos, bool upperCase) +/* Returns pos of given search criteria, -1 if not found */ +int TextParser::find(const QString &target, QChar sep, int pos, bool upperCase) { - - t_splitElm parsstr; - QString pString; - - int atLine = 0, atPosElm = 0; - - getLineReference(pos,&atLine,&atPosElm); - - for (int x = pos; x < totalElmCount; x++) - { - parsstr=splitDone[atLine].elm[atPosElm++]; - - if (upperCase) - { - pString=parsstr.str.upper(); - target=target.upper(); - } - else - { - pString=parsstr.str; - } - if ((pString == target) && (parsstr.separator == sep)) - { - return x; - } - if (atPosElm >= splitDone[atLine].elmCount) - { //new Line - atLine++; - atPosElm = 0; - } - } - return -1; + + t_splitElm parsstr; + QString pString, pTarget; + pTarget = target; + int atLine = 0, atPosElm = 0; + + getLineReference(pos,&atLine,&atPosElm); + + for (int x = pos; x < totalElmCount; x++) + { + parsstr=splitDone[atLine].elm[atPosElm++]; + + if (upperCase) + { + pString=parsstr.str.upper(); + pTarget=pTarget.upper(); + } + else + { + pString=parsstr.str; + } + if ((pString == pTarget) && (parsstr.separator == sep)) + { + return x; + } + if (atPosElm >= splitDone[atLine].elmCount) + { //new Line + atLine++; + atPosElm = 0; + } + } + return -1; } int TextParser::elmCount() { - return totalElmCount; + return totalElmCount; } QChar TextParser::separatorAt(int pos) { - if (getLineReference(pos, &sepAtLine, &sepAtPosElm) == -1) - return QChar::null; - - separatorPos = pos; - return splitDone[sepAtLine].elm[sepAtPosElm].separator; + if (getLineReference(pos, &sepAtLine, &sepAtPosElm) == -1) + return QChar::null; + + separatorPos = pos; + return splitDone[sepAtLine].elm[sepAtPosElm].separator; } QChar TextParser::nextSeparator() { - sepAtPosElm++; - if (splitDone[sepAtLine].elmCount <= sepAtPosElm) { - sepAtLine++; - sepAtPosElm = 0; - } - - separatorPos++; - return splitDone[sepAtLine].elm[sepAtPosElm].separator; + sepAtPosElm++; + if (splitDone[sepAtLine].elmCount <= sepAtPosElm) { + sepAtLine++; + sepAtPosElm = 0; + } + + separatorPos++; + return splitDone[sepAtLine].elm[sepAtPosElm].separator; } bool TextParser::hasNextSeparator() { - return ((separatorPos+1) < totalElmCount); + return ((separatorPos+1) < totalElmCount); } QString TextParser::wordAt(int pos) { - if (getLineReference(pos, &wordAtLine, &wordAtPosElm) == -1) - return NULL; - - wordPos = pos; - return splitDone[wordAtLine].elm[wordAtPosElm].str; + if (getLineReference(pos, &wordAtLine, &wordAtPosElm) == -1) + return NULL; + + wordPos = pos; + return splitDone[wordAtLine].elm[wordAtPosElm].str; } QString TextParser::nextWord() { - wordAtPosElm++; - if (splitDone[wordAtLine].elmCount <= wordAtPosElm) { - wordAtLine++; - wordAtPosElm = 0; - } - - wordPos++; - return splitDone[wordAtLine].elm[wordAtPosElm].str; + wordAtPosElm++; + if (splitDone[wordAtLine].elmCount <= wordAtPosElm) { + wordAtLine++; + wordAtPosElm = 0; + } + + wordPos++; + return splitDone[wordAtLine].elm[wordAtPosElm].str; } bool TextParser::hasNextWord() { - return ((wordPos + 1) < totalElmCount); + return ((wordPos + 1) < totalElmCount); } QString TextParser::getString(int *pos, QChar stop, bool lineEnd = false) { - QString returnStr = wordAt(*pos); - QChar chr = separatorAt(*pos); - QString s; - - if (returnStr == "") - return ""; - if (chr == stop) - return returnStr; - - if (!lineEnd) { - while ((chr != stop) && hasNextWord()) { - returnStr.append(chr); - returnStr += nextWord(); - chr = nextSeparator(); - } - } else { //copy from pos to end of line - getLineReference(*pos, &atLine, &atPosElm); - returnStr = ""; - while (atPosElm < splitDone[atLine].elmCount) { - if (splitDone[atLine].elm[atPosElm].str != "") { - returnStr += splitDone[atLine].elm[atPosElm].str; - } - chr = splitDone[atLine].elm[atPosElm].separator; - if (!chr.isNull() && (int) chr != 0) { - returnStr.append(splitDone[atLine].elm[atPosElm].separator); - } - atPosElm++; - } - } - - *pos = wordPos; - return returnStr; + QString returnStr = wordAt(*pos); + QChar chr = separatorAt(*pos); + QString s; + + if (returnStr == "") + return ""; + if (chr == stop) + return returnStr; + + if (!lineEnd) { + while ((chr != stop) && hasNextWord()) { + returnStr.append(chr); + returnStr += nextWord(); + chr = nextSeparator(); + } + } else { //copy from pos to end of line + getLineReference(*pos, &atLine, &atPosElm); + returnStr = ""; + while (atPosElm < splitDone[atLine].elmCount) { + if (splitDone[atLine].elm[atPosElm].str != "") { + returnStr += splitDone[atLine].elm[atPosElm].str; + } + chr = splitDone[atLine].elm[atPosElm].separator; + if (!chr.isNull() && (int) chr != 0) { + returnStr.append(splitDone[atLine].elm[atPosElm].separator); + } + atPosElm++; + } + } + + *pos = wordPos; + return returnStr; } QString TextParser::getNextLine() { - atLine++; - atPosElm = 0; - if (atLine < lineCount) - return splitDone[atLine].str; - return ""; + atLine++; + atPosElm = 0; + if (atLine < lineCount) + return splitDone[atLine].str; + return ""; } bool TextParser::hasNextLine() { - if (atLine+1 < lineCount) - return TRUE;; - return FALSE; + if (atLine+1 < lineCount) + return TRUE;; + return FALSE; } int TextParser::endLinePos(int pos) { - if ( (getLineReference(pos, &atLine, &atPosElm)) == -1) - return -1; - - return (pos + (splitDone[atLine].elmCount - atPosElm) + 1); + if ( (getLineReference(pos, &atLine, &atPosElm)) == -1) + return -1; + + return (pos + (splitDone[atLine].elmCount - atPosElm) + 1); } int TextParser::getLineReference(int pos, int *line, int *inLinePos) { - int currentPos = 0; - - for (int x = 0; x < lineCount; x++) { - if ( currentPos + splitDone[x].elmCount > pos) { - *line = x; - *inLinePos = pos - currentPos; - return 0; //pos found okay - } - currentPos += splitDone[x].elmCount; - } - return -1; //no reference found + int currentPos = 0; + + for (int x = 0; x < lineCount; x++) { + if ( currentPos + splitDone[x].elmCount > pos) { + *line = x; + *inLinePos = pos - currentPos; + return 0; //pos found okay + } + currentPos += splitDone[x].elmCount; + } + return -1; //no reference found } void TextParser::split() { - t_splitLine newLine; + t_splitLine newLine; - while ((uint) linePos < data.length()) { - newLine = nextLine(); - splitDone[lineCount] = splitLine(newLine); - totalElmCount += splitDone[lineCount].elmCount; - lineCount++; - } + while ((uint) linePos < data.length()) { + newLine = nextLine(); + splitDone[lineCount] = splitLine(newLine); + totalElmCount += splitDone[lineCount].elmCount; + lineCount++; + } } t_splitLine TextParser::splitLine(t_splitLine line) { - uint pos = 0; - uint elmCount = 0; - t_splitLine tempLine = line; - - tempLine.str = line.str.simplifyWhiteSpace(); - tempLine.elm[0].str = ""; - while ( pos < line.str.length() ) { - if ( isSeparator(tempLine.str[pos]) ) { - tempLine.elm[elmCount].separator = tempLine.str[pos]; - elmCount++; - pos++; - while (tempLine.str[pos] == ' ') - pos++; - if (pos > line.str.length()) - elmCount--; - tempLine.elm[elmCount].str = ""; - } else { - if (!tempLine.str[pos].isNull()) - tempLine.elm[elmCount].str += tempLine.str[pos]; - pos++; - } - } - - tempLine.elmCount = elmCount + 1; - return tempLine; + uint pos = 0; + uint elmCount = 0; + t_splitLine tempLine = line; + + tempLine.str = line.str.simplifyWhiteSpace(); + tempLine.elm[0].str = ""; + while ( pos < line.str.length() ) { + if ( isSeparator(tempLine.str[pos]) ) { + tempLine.elm[elmCount].separator = tempLine.str[pos]; + elmCount++; + pos++; + while (tempLine.str[pos] == ' ') + pos++; + if (pos > line.str.length()) + elmCount--; + tempLine.elm[elmCount].str = ""; + } else { + if (!tempLine.str[pos].isNull()) + tempLine.elm[elmCount].str += tempLine.str[pos]; + pos++; + } + } + + tempLine.elmCount = elmCount + 1; + return tempLine; } bool TextParser::isSeparator(QChar chr) { - for (uint x = 0; x < separators.length(); x++) { - if (chr == separators[x]) - return true; - } - return false; + for (uint x = 0; x < separators.length(); x++) { + if (chr == separators[x]) + return true; + } + return false; } t_splitLine TextParser::nextLine() { - int newLinePos; - t_splitLine lineType; - - newLinePos = data.find(lineSep, linePos); - - lineType.lineType = NewLine; - lineType.str = ""; - - if (newLinePos == -1) { - newLinePos = data.length(); - lineType.lineType = LastLine; - } - - for (int x = linePos; x < newLinePos; x++) - lineType.str += data[x]; - - linePos = newLinePos; - if ((uint) linePos < data.length()) //if not EOF, add length of lineSep - linePos += lineSep.length(); - - return lineType; + int newLinePos; + t_splitLine lineType; + + newLinePos = data.find(lineSep, linePos); + + lineType.lineType = NewLine; + lineType.str = ""; + + if (newLinePos == -1) { + newLinePos = data.length(); + lineType.lineType = LastLine; + } + + for (int x = linePos; x < newLinePos; x++) + lineType.str += data[x]; + + linePos = newLinePos; + if ((uint) linePos < data.length()) //if not EOF, add length of lineSep + linePos += lineSep.length(); + + return lineType; } 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 @@ -4,82 +4,82 @@ ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <qobject.h> #include <qstring.h> #ifndef TEXTPARSER_H #define TEXTPARSER_H enum t_strType { Word, Number}; enum t_lineType {NewLine, LastLine}; const uint MAX_ELEMENTS = 200; //Should be dynamic const uint MAX_LINES = 500; //Should be dynamic struct t_splitElm { QChar separator; int strType; QString str; }; struct t_splitLine { t_lineType lineType; QString str; //a bit redundant... t_splitElm elm[MAX_ELEMENTS]; int elmCount; }; class TextParser: public QObject { Q_OBJECT public: - TextParser(QString in, QString lineBreak); - TextParser(QString in, QString lineBreak, QString sep); - int find(QString target, QChar sep, int pos, bool upperCase); + TextParser(const QString &in, const QString &lineBreak); + TextParser(const QString &in, const QString &lineBreak, const QString &sep); + int find(const QString &target, QChar sep, int pos, bool upperCase); int elmCount(); QChar separatorAt(int pos); QChar nextSeparator(); bool hasNextSeparator(); QString wordAt(int pos); QString nextWord(); bool hasNextWord(); QString getString(int *pos, QChar stop, bool lineEnd); QString getNextLine(); bool hasNextLine(); int endLinePos(int pos); private: void init(); void createSeparators(); t_splitLine nextLine(); void split(); t_splitLine splitLine(t_splitLine line); bool isSeparator(QChar chr); t_splitLine splitDone[MAX_LINES]; int getLineReference(int pos, int *line, int *inLinePos); int lineCount, linePos, totalElmCount; int separatorPos, wordPos; QString data, separators, lineSep; int sepAtLine, sepAtPosElm; int wordAtLine, wordAtPosElm; int atLine, atPosElm; }; #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 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <qfile.h> #include <qtextstream.h> #include <opie/ocontactaccess.h> #include <opie/ocontact.h> #include "addresslist.h" AddressList::AddressList() { - addresses.setAutoDelete(TRUE); - read(); - dirty = FALSE; + addresses.setAutoDelete(TRUE); + read(); + dirty = FALSE; } AddressList::~AddressList() { - addresses.clear(); + addresses.clear(); } -void AddressList::addContact(QString email, QString name) +void AddressList::addContact(const QString &email, const QString &name) { - //skip if not a valid email address, - if (email.find( '@') == -1) - return; - - if ( ! containsEmail(email) ) { - Contact *in = new Contact; - in->email = email; - in->name = name; - addresses.append(in); - dirty = TRUE; - } + //skip if not a valid email address, + if (email.find( '@') == -1) + return; + + if ( ! containsEmail(email) ) { + Contact *in = new Contact; + in->email = email; + in->name = name; + addresses.append(in); + dirty = TRUE; + } } -bool AddressList::containsEmail(QString email) +bool AddressList::containsEmail(const QString &email) { - return ( getEmailRef(email) != -1 ); + return ( getEmailRef(email) != -1 ); } -bool AddressList::containsName(QString name) +bool AddressList::containsName(const QString &name) { - return ( getNameRef(name) != -1 ); + return ( getNameRef(name) != -1 ); } -QString AddressList::getNameByEmail(QString email) +QString AddressList::getNameByEmail(const QString &email) { - int pos = getEmailRef(email); - if (pos != -1) { - Contact *ptr = addresses.at(pos); - return ptr->name; - } - - return NULL; + int pos = getEmailRef(email); + if (pos != -1) { + Contact *ptr = addresses.at(pos); + return ptr->name; + } + + return NULL; } -QString AddressList::getEmailByName(QString name) +QString AddressList::getEmailByName(const QString &name) { - int pos = getNameRef(name); - if (pos != -1) { - Contact *ptr = addresses.at(pos); - return ptr->email; - } - - return NULL; + int pos = getNameRef(name); + if (pos != -1) { + Contact *ptr = addresses.at(pos); + return ptr->email; + } + + return NULL; } -int AddressList::getEmailRef(QString email) +int AddressList::getEmailRef(const QString &email) { - int pos = 0; - Contact *ptr; - - for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) { - if (ptr->email == email) - return pos; - pos++; - } - return -1; + int pos = 0; + Contact *ptr; + + for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) { + if (ptr->email == email) + return pos; + pos++; + } + return -1; } -int AddressList::getNameRef(QString name) +int AddressList::getNameRef(const QString &name) { - int pos = 0; - Contact *ptr; - - for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) { - if (ptr->name == name) - return pos; - pos++; - } - return -1; + int pos = 0; + Contact *ptr; + + for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) { + if (ptr->name == name) + return pos; + pos++; + } + return -1; } QList<Contact>* AddressList::getContactList() { - return &addresses; + return &addresses; } void AddressList::read() { - OContactAccess::List::Iterator it; - - QString lineEmail, lineName, email, name; - OContactAccess m_contactdb("mailit"); - OContactAccess::List m_list = m_contactdb.sorted( true, 0, 0, 0 ); - //OContact* oc;(*it).defaultEmail() - - for ( it = m_list.begin(); it != m_list.end(); ++it ) - { - //oc=(OContact*) it; - if ((*it).defaultEmail().length()!=0) - addContact((*it).defaultEmail(),(*it).fileAs()); - } - - /*if (! f.open(IO_ReadOnly) ) - return; - - QTextStream stream(&f); - - while (! stream.atEnd() ) { - lineEmail = stream.readLine(); - if (! stream.atEnd() ) - lineName = stream.readLine(); - else return; - - email = getRightString(lineEmail); - name = getRightString(lineName); - addContact(email, name); - } - f.close();*/ + OContactAccess::List::Iterator it; + + QString lineEmail, lineName, email, name; + OContactAccess m_contactdb("mailit"); + OContactAccess::List m_list = m_contactdb.sorted( true, 0, 0, 0 ); + //OContact* oc;(*it).defaultEmail() + + for ( it = m_list.begin(); it != m_list.end(); ++it ) + { + //oc=(OContact*) it; + if ((*it).defaultEmail().length()!=0) + addContact((*it).defaultEmail(),(*it).fileAs()); + } + + /*if (! f.open(IO_ReadOnly) ) + return; + + QTextStream stream(&f); + + while (! stream.atEnd() ) { + lineEmail = stream.readLine(); + if (! stream.atEnd() ) + lineName = stream.readLine(); + else return; + + email = getRightString(lineEmail); + name = getRightString(lineName); + addContact(email, name); + } + f.close();*/ } -QString AddressList::getRightString(QString in) +QString AddressList::getRightString(const QString &in) { - QString out = ""; - - int pos = in.find('='); - if (pos != -1) { - out = in.mid(pos+1).stripWhiteSpace(); - } - return out; + QString out = ""; + + int pos = in.find('='); + if (pos != -1) { + out = in.mid(pos+1).stripWhiteSpace(); + } + return out; } 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 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef ADDRESSLIST_H #define ADDRESSLIST_H #include <qobject.h> #include <qlist.h> struct Contact { - QString email; - QString name; + QString email; + QString name; }; class AddressList : public QObject { - Q_OBJECT + Q_OBJECT public: - AddressList(); - ~AddressList(); - void addContact(QString email, QString name); - bool containsEmail(QString email); - bool containsName(QString name); - QString getNameByEmail(QString email); - QString getEmailByName(QString name); - QList<Contact>* getContactList(); + AddressList(); + ~AddressList(); + void addContact(const QString &email, const QString &name); + bool containsEmail(const QString &email); + bool containsName(const QString &name); + QString getNameByEmail(const QString &email); + QString getEmailByName(const QString &name); + QList<Contact>* getContactList(); private: - int getEmailRef(QString email); - int getNameRef(QString name); - QString getRightString(QString in); - void read(); + int getEmailRef(const QString &email); + int getNameRef(const QString &name); + QString getRightString(const QString &in); + void read(); private: - QList<Contact> addresses; - QString filename; - bool dirty; + QList<Contact> addresses; + QString filename; + bool dirty; }; #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 @@ -320,203 +320,204 @@ void EmailClient::mailSent() void EmailClient::getNewMail() { if (accountList.count() == 0) { QMessageBox::warning(qApp->activeWindow(),"No account selected", "You must create an account", "OK\n"); return; } setMailAccount(); receiving = TRUE; previewingMail = TRUE; getMailButton->setEnabled(FALSE); cancelButton->setEnabled(TRUE); selectAccountMenu->setEnabled(FALSE); status1Label->setText(currentAccount->accountName + " headers"); progressBar->reset(); //get any previous mails not downloaded and add to queue /*mailDownloadList.clear(); Email *mailPtr; item = (EmailListItem *) inboxView->firstChild(); while (item != NULL) { mailPtr = item->getMail(); if ( (!mailPtr->downloaded) && (mailPtr->fromAccountId == currentAccount->id) ) { mailDownloadList.sizeInsert(mailPtr->serverId, mailPtr->size); } item = (EmailListItem *) item->nextSibling(); }*/ emailHandler->getMailHeaders(); } void EmailClient::getAllNewMail() { allAccounts = TRUE; currentAccount = accountList.first(); getNewMail(); } void EmailClient::mailArrived(const Email &mail, bool fromDisk) { Enclosure *ePtr; Email newMail; int thisMailId; - emailHandler->parse(mail.rawMail, lineShift, &newMail); + emailHandler->parse( mail.rawMail, lineShift, &newMail); mailconf->setGroup(newMail.id); if (fromDisk) { newMail.downloaded = mailconf->readBoolEntry("downloaded"); newMail.size = mailconf->readNumEntry("size"); newMail.serverId = mailconf->readNumEntry("serverid"); newMail.fromAccountId = mailconf->readNumEntry("fromaccountid"); } else { //mail arrived from server newMail.serverId = mail.serverId; newMail.size = mail.size; newMail.downloaded = mail.downloaded; newMail.fromAccountId = emailHandler->getAccount()->id; mailconf->writeEntry("fromaccountid", newMail.fromAccountId); } //add if read or not newMail.read = mailconf->readBoolEntry("mailread"); //check if new mail if ( (thisMailId = mailconf->readNumEntry("internalmailid", -1)) == -1) { thisMailId = mailIdCount; mailIdCount++; //set server count, so that if the user aborts, the new //header is not reloaded if ((currentAccount)&&(currentAccount->synchronize)) currentAccount->lastServerMailCount++; mailconf->writeEntry("internalmailid", thisMailId); mailconf->writeEntry("downloaded", newMail.downloaded); mailconf->writeEntry("size", (int) newMail.size); mailconf->writeEntry("serverid", newMail.serverId); //addressList->addContact(newMail.fromMail, newMail.from); } mailconf->writeEntry("downloaded", newMail.downloaded); QString stringMailId; stringMailId.setNum(thisMailId); //see if any attatchments needs to be stored for ( ePtr=newMail.files.first(); ePtr != 0; ePtr=newMail.files.next() ) { QString stringId; stringId.setNum(ePtr->id); int id = mailconf->readNumEntry("enclosureid_" + stringId); if (id != ePtr->id) { //new entry mailconf->writeEntry("enclosureid_" + stringId, ePtr->id); mailconf->writeEntry("name_" + stringId, ePtr->originalName); mailconf->writeEntry("contenttype_" + stringId, ePtr->contentType); mailconf->writeEntry("contentattribute_" + stringId, ePtr->contentAttribute); mailconf->writeEntry("saved_" + stringId, ePtr->saved); mailconf->writeEntry("installed_" + stringId, FALSE); ePtr->name = stringMailId + "_" + stringId; ePtr->path = getPath(TRUE); if (emailHandler->getEnclosure(ePtr)) { //file saved ePtr->saved = TRUE; mailconf->writeEntry("saved_" + stringId, ePtr->saved); mailconf->writeEntry("filename_" + stringId, ePtr->name); mailconf->writeEntry("path_" + stringId, ePtr->path); } else { ePtr->saved = FALSE; mailconf->writeEntry("saved_" + stringId, ePtr->saved); } } else { ePtr->saved = mailconf->readBoolEntry("saved_" + stringId); ePtr->installed = mailconf->readBoolEntry("installed_" + stringId); if (ePtr->saved) { ePtr->name = mailconf->readEntry("filename_" + stringId); ePtr->path = mailconf->readEntry("path_" + stringId); } } } bool found=false; if (!fromDisk) { Email *mailPtr; item = (EmailListItem *) inboxView->firstChild(); while ((item != NULL)&&(!found)) { mailPtr = item->getMail(); if (mailPtr->id == newMail.id) { item->setMail(newMail); emit mailUpdated(item->getMail()); - found = true; + found = true; } item = (EmailListItem *) item->nextSibling(); } } - if ((!found)||(fromDisk)) item = new EmailListItem(inboxView, newMail, TRUE); - - if (item->getMail()->files.count()>0) - { - item->setPixmap(0, Resource::loadPixmap("mailit/attach")); - } + if ((!found)||(fromDisk)) { + item = new EmailListItem(inboxView, newMail, TRUE); + } + if (item->getMail()->files.count()>0) + { + item->setPixmap(0, Resource::loadPixmap("mailit/attach")); + } /*if (!newMail.downloaded) mailDownloadList.sizeInsert(newMail.serverId, newMail.size);*/ mailboxView->setCurrentTab(0); } void EmailClient::allMailArrived(int count) { // not previewing means all mailtransfer has been done /*if (!previewingMail) {*/ if ( (allAccounts) && ( (currentAccount = accountList.next()) !=0 ) ) { emit newCaption("Mailit - " + currentAccount->accountName); getNewMail(); return; } else { allAccounts = FALSE; receiving = FALSE; getMailButton->setEnabled(TRUE); cancelButton->setEnabled(FALSE); selectAccountMenu->setEnabled(TRUE); status1Label->setText("Idle"); progressBar->reset(); return; } //} // all headers downloaded from server, start downloading remaining mails previewingMail = FALSE; status1Label->setText(currentAccount->accountName); progressBar->reset(); mailboxView->setCurrentTab(0); } void EmailClient::moveMailFront(Email *mailPtr) { if ( (receiving) && (mailPtr->fromAccountId == currentAccount->id) ) { mailDownloadList.moveFront(mailPtr->serverId, mailPtr->size); } } void EmailClient::smtpError(int code) { QString temp; @@ -597,167 +598,167 @@ void EmailClient::readMail() Email mail; int start, stop; QString s, del; QFile f(getPath(FALSE) + "inbox.txt"); if ( f.open(IO_ReadOnly) ) { // file opened successfully QTextStream t( &f ); // use a text stream s = t.read(); f.close(); start = 0; del = "\n.\n"; while ((uint) start < s.length()) { stop = s.find(del, start); if (stop == -1) stop = s.length() - del.length(); mail.rawMail = s.mid(start, stop + del.length() - start ); start = stop + del.length(); mailArrived(mail, TRUE); } } QFile fo(getPath(FALSE) + "outbox.txt"); if ( fo.open(IO_ReadOnly) ) { // file opened successfully QTextStream t( &fo ); // use a text stream s = t.read(); fo.close(); start = 0; del = "\n.\n"; while ((uint) start < s.length()) { stop = s.find(del, start); if (stop == -1) stop = s.length() - del.length(); mail.rawMail = s.mid(start, stop + del.length() - start ); start = stop + del.length(); emailHandler->parse(mail.rawMail, lineShift, &mail); mail.sent = false; mail.received = false; enqueMail(mail); } } } -void EmailClient::saveMail(QString fileName, QListView *view) +void EmailClient::saveMail(const QString &fileName, QListView *view) { QFile f(fileName); Email *mail; if (! f.open(IO_WriteOnly) ) { qWarning("could not open file"); return; } item = (EmailListItem *) view->firstChild(); QTextStream t(&f); while (item != NULL) { mail = item->getMail(); t << mail->rawMail; mailconf->setGroup(mail->id); mailconf->writeEntry("mailread", mail->read); item = (EmailListItem *) item->nextSibling(); } f.close(); } //paths for mailit, is settings, inbox, enclosures QString EmailClient::getPath(bool enclosurePath) { QString basePath = "qtmail"; QString enclosures = "enclosures"; QDir dir = (QString(getenv("HOME")) + "/Applications/" + basePath); if ( !dir.exists() ) dir.mkdir( dir.path() ); if (enclosurePath) { dir = (QString(getenv("HOME")) + "/Applications/" + basePath + "/" + enclosures); if ( !dir.exists() ) dir.mkdir( dir.path() ); return (dir.path() + "/"); } return (dir.path() + "/"); } void EmailClient::readSettings() { int y,acc_count; mailconf->setGroup("mailitglobal"); acc_count=mailconf->readNumEntry("Accounts",0); for (int accountPos = 0;accountPos<acc_count ; accountPos++) { mailconf->setGroup("Account_"+QString::number(accountPos+1)); //Account numbers start at 1 ... account.accountName = mailconf->readEntry("AccName",""); account.name = mailconf->readEntry("UserName",""); account.emailAddress = mailconf->readEntry("Email",""); account.popUserName = mailconf->readEntry("POPUser",""); account.popPasswd = mailconf->readEntryCrypt("POPPassword",""); account.popServer = mailconf->readEntry("POPServer",""); account.smtpServer = mailconf->readEntry("SMTPServer",""); account.id = mailconf->readNumEntry("AccountId",0); account.syncLimit = mailconf->readNumEntry("HeaderLimit",0); account.lastServerMailCount = 0; account.synchronize = FALSE; account.synchronize = (mailconf->readEntry("Synchronize","No")=="Yes"); if (account.synchronize) { - mailconf->readNumEntry("LASTSERVERMAILCOUNT",0); + mailconf->readNumEntry("LASTSERVERMAILCOUNT",0); } accountList.append(&account); } mailconf->setGroup("mailitglobal"); if ( (y = mailconf->readNumEntry("mailidcount", -1)) != -1) { mailIdCount = y; } if ( (y = mailconf->readNumEntry("accountidcount", -1)) != -1) { accountIdCount = y; } } void EmailClient::saveSettings() { int acc_count=0; MailAccount *accountPtr; if (!mailconf) { qWarning("could not save settings"); return; } for (accountPtr = accountList.first(); accountPtr != 0; accountPtr = accountList.next()) { mailconf->setGroup("Account_"+QString::number(++acc_count)); mailconf->writeEntry("AccName",accountPtr->accountName ); mailconf->writeEntry("UserName",accountPtr->name); mailconf->writeEntry("Email",accountPtr->emailAddress); mailconf->writeEntry("POPUser",accountPtr->popUserName); mailconf->writeEntryCrypt("POPPassword",accountPtr->popPasswd); mailconf->writeEntry("POPServer",accountPtr->popServer); mailconf->writeEntry("SMTPServer",accountPtr->smtpServer); mailconf->writeEntry("AccountId",accountPtr->id); if (accountPtr->synchronize) { mailconf->writeEntry("Synchronize","Yes"); mailconf->writeEntry("HeaderLimit",accountPtr->syncLimit); mailconf->writeEntry("LastServerMailCount",accountPtr->lastServerMailCount); } else @@ -870,167 +871,167 @@ void EmailClient::deleteMail(EmailListItem *mailItem, bool &inbox) //if mail is in queue for download, remove it from //queue if possible if ( (receiving) && (mPtr->fromAccountId == currentAccount->id) ) { if ( !mPtr->downloaded ) mailDownloadList.remove(mPtr->serverId, mPtr->size); } mailconf->setGroup(mPtr->id); mailconf->clearGroup(); //delete any temporary attatchemnts storing for ( ePtr=mPtr->files.first(); ePtr != 0; ePtr=mPtr->files.next() ) { if (ePtr->saved) { QFile::remove( (ePtr->path + ePtr->name) ); } } inboxView->takeItem(mailItem); } else { outboxView->takeItem(mailItem); } } void EmailClient::setMailSize(int size) { progressBar->reset(); progressBar->setTotalSteps(size); } void EmailClient::setTotalSize(int size) { } void EmailClient::setDownloadedSize(int size) { int total = progressBar->totalSteps(); if (size < total) { progressBar->setProgress(size); } else { progressBar->setProgress(total); } } void EmailClient::deleteItem() { - bool inbox=mailboxView->currentTab()==0; - QListView* box; - - EmailListItem* eli; - int pos; - - inbox ? box=inboxView : box=outboxView; - - eli=(EmailListItem*)box->selectedItem(); - - if (eli) - { - box->setSelected(eli->itemBelow(),true); //select the previous item - - deleteMail(eli,(bool&)inbox); //remove mail entry - } + bool inbox=mailboxView->currentTab()==0; + QListView* box; + + EmailListItem* eli; + int pos; + + inbox ? box=inboxView : box=outboxView; + + eli=(EmailListItem*)box->selectedItem(); + + if (eli) + { + box->setSelected(eli->itemBelow(),true); //select the previous item + + deleteMail(eli,(bool&)inbox); //remove mail entry + } } void EmailClient::inboxItemPressed() { -// timerID=startTimer(500); +// timerID=startTimer(500); } void EmailClient::inboxItemReleased() { - // killTimer(timerID); + // killTimer(timerID); } /*void EmailClient::timerEvent(QTimerEvent *e) { /*killTimer(timerID); QPopupMenu *action = new QPopupMenu(this); int reply=0; action->insertItem(tr( "Reply To" ),this,SLOT(reply())); action->insertItem( tr( "Reply All" ),this,SLOT(replyAll())); action->insertItem( tr( "Forward" ), this,SLOT(forward())); action->insertItem( tr( "Remove Mail" ), this,SLOT(remove())); action->exec(QCursor::pos()); if (action) delete action; }*/ Email* EmailClient::getCurrentMail() { - EmailListItem *eli=(EmailListItem* ) (inboxView->selectedItem()); - if (eli!=NULL) - return eli->getMail(); - else - return NULL; + EmailListItem *eli=(EmailListItem* ) (inboxView->selectedItem()); + if (eli!=NULL) + return eli->getMail(); + else + return NULL; } void EmailClient::download(Email* mail) { - MailAccount* acc=0; - - tempMailDownloadList.clear(); - tempMailDownloadList.sizeInsert(mail->serverId, mail->size); - - acc=accountList.at(mail->fromAccountId-1); - if (acc) - { - emailHandler->setAccount(*acc); - emailHandler->getMailByList(&tempMailDownloadList); - } - else - QMessageBox::warning(qApp->activeWindow(), - tr("No account associated"), tr("There is no active account \nassociated to this mail\n it can not be downloaded"), "Abort\n"); + MailAccount* acc=0; + + tempMailDownloadList.clear(); + tempMailDownloadList.sizeInsert(mail->serverId, mail->size); + + acc=accountList.at(mail->fromAccountId-1); + if (acc) + { + emailHandler->setAccount(*acc); + emailHandler->getMailByList(&tempMailDownloadList); + } + else + QMessageBox::warning(qApp->activeWindow(), + tr("No account associated"), tr("There is no active account \nassociated to this mail\n it can not be downloaded"), "Abort\n"); } void EmailClient::receive(const QCString& msg, const QByteArray& data) { - /*if (msg=="getMail()") - { - /*QDialog qd(qApp->activeWindow(),"Getting mail",true); - QVBoxLayout *vbProg = new QVBoxLayout( &qd ); - - initStatusBar(&qd); - - if (statusBar==0) - { - qDebug("No Bar ..."); - //statusBar=new ProgressBar(&qd); - } - statusBar->show(); - vbProg->addWidget(statusBar); - qd.showMaximized(); - qd.show(); - emit getAllNewMail(); - //qd.exec(); - } - else if (msg=="compose()") - { - QDialog qd(qApp->activeWindow(),"Getting mail",true); - - WriteMail wm(&qd,"write new mail"); - QVBoxLayout vbProg( &qd ); - - wm.showMaximized(); - vbProg.addWidget(&wm); - - qd.showMaximized(); - - emit composeRequested(); - qd.exec(); - - QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n"); - } - - else if (msg=="dialog()") - { - QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n"); - }*/ + /*if (msg=="getMail()") + { + /*QDialog qd(qApp->activeWindow(),"Getting mail",true); + QVBoxLayout *vbProg = new QVBoxLayout( &qd ); + + initStatusBar(&qd); + + if (statusBar==0) + { + qDebug("No Bar ..."); + //statusBar=new ProgressBar(&qd); + } + statusBar->show(); + vbProg->addWidget(statusBar); + qd.showMaximized(); + qd.show(); + emit getAllNewMail(); + //qd.exec(); + } + else if (msg=="compose()") + { + QDialog qd(qApp->activeWindow(),"Getting mail",true); + + WriteMail wm(&qd,"write new mail"); + QVBoxLayout vbProg( &qd ); + + wm.showMaximized(); + vbProg.addWidget(&wm); + + qd.showMaximized(); + + emit composeRequested(); + qd.exec(); + + QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n"); + } + + else if (msg=="dialog()") + { + QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n"); + }*/ } 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 @@ -61,97 +61,97 @@ private: MailAccount* dupl(MailAccount *in); MailAccount *ac; }; //class EmailClient : public EmailClientBase class EmailClient : public QMainWindow { Q_OBJECT public: EmailClient( QWidget* parent, const char* name, WFlags fl = 0 ); ~EmailClient(); AddressList* getAdrListRef(); protected: //void timerEvent(QTimerEvent*); signals: void composeRequested(); void viewEmail(QListView *, Email *); void mailUpdated(Email *); void newCaption(const QString &); void replyRequested(Email&, bool&); void forwardRequested(Email&); void removeItem(EmailListItem*, bool&); /*void reply(Email&); void replyAll(Email&); void remove(Email&); void forward(Email&);*/ public slots: void compose(); void cancel(); void enqueMail(const Email &mail); void setMailAccount(); void sendQuedMail(); void mailSent(); void deleteItem(); void getNewMail(); void getAllNewMail(); void smtpError(int code); void popError(int code); void inboxItemSelected(); void outboxItemSelected(); void inboxItemPressed(); void inboxItemReleased(); void mailArrived(const Email &mail, bool fromDisk); void allMailArrived(int); - void saveMail(QString fileName, QListView *view); + void saveMail(const QString &fileName, QListView *view); void selectAccount(int); void editAccount(int); void updateAccounts(); void deleteAccount(int); void deleteMail(EmailListItem *mailItem, bool &inbox); void setTotalSize(int); void setMailSize(int); void setDownloadedSize(int); void moveMailFront(Email *mailPtr); void download(Email*); /* void reply(); void replyAll(); void forward(); void remove();*/ private slots: void receive(const QCString&, const QByteArray&); private: void init(); void initStatusBar(QWidget*); void readMail(); QString getPath(bool enclosurePath); void readSettings(); void saveSettings(); Email* getCurrentMail(); int timerID; Config *mailconf; int newAccountId, idCount, mailIdCount; int accountIdCount; AccountList accountList; AddressList *addressList; EditAccount *editAccountView; EmailListItem *item; EmailHandler *emailHandler; QList<Email> quedMessages; MailList mailDownloadList; MailList tempMailDownloadList; bool sending, receiving, previewingMail, allAccounts; QString lineShift; MailAccount account, *currentAccount; QCopChannel* channel; QToolBar *bar; QProgressBar *progressBar; 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,90 +1,90 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <qfileinfo.h> #include <stdlib.h> #include <qapplication.h> #include <qmessagebox.h> #include <qcstring.h> #include "emailhandler.h" #include <qpe/applnk.h> #include <qpe/filemanager.h> QCollection::Item EnclosureList::newItem(QCollection::Item d) { return dupl( (Enclosure *) d); } Enclosure* EnclosureList::dupl(Enclosure *in) { ac = new Enclosure(*in); return ac; } EmailHandler::EmailHandler() { - qDebug("EMailHandler::EmailHandler"); + qDebug("EMailHandler::EmailHandler"); smtpClient = new SmtpClient(); popClient = new PopClient(); connect(smtpClient, SIGNAL(errorOccurred(int)), this, SIGNAL(smtpError(int)) ); connect(smtpClient, SIGNAL(mailSent()), this, SIGNAL(mailSent()) ); connect(smtpClient, SIGNAL(updateStatus(const QString &)), this, SIGNAL(updateSmtpStatus(const QString &)) ); connect(popClient, SIGNAL(errorOccurred(int)), this, SIGNAL(popError(int)) ); connect(popClient, SIGNAL(newMessage(const QString &, int, uint, bool)), this, SLOT(messageArrived(const QString &, int, uint, bool)) ); connect(popClient, SIGNAL(updateStatus(const QString &)), this, SIGNAL(updatePopStatus(const QString &)) ); connect(popClient, SIGNAL(mailTransfered(int)), this, SIGNAL(mailTransfered(int)) ); //relaying size information connect(popClient, SIGNAL(currentMailSize(int)), this, SIGNAL(currentMailSize(int)) ); connect(popClient, SIGNAL(downloadedSize(int)), this, SIGNAL(downloadedSize(int)) ); } void EmailHandler::sendMail(QList<Email> *mailList) { Email *currentMail; QString temp; QString userName = mailAccount.name; userName += " <" + mailAccount.emailAddress + ">"; for (currentMail = mailList->first(); currentMail != 0; currentMail = mailList->next()) { if (encodeMime(currentMail) == 0) { smtpClient->addMail(userName, currentMail->subject, currentMail->recipients, currentMail->rawMail); } else { //error temp = tr("Could not locate all files in \nmail with subject: ") + currentMail->subject; temp += tr("\nMail has NOT been sent"); QMessageBox::warning(qApp->activeWindow(), tr("Attachment error"), temp, tr("OK\n")); } } @@ -103,167 +103,167 @@ void EmailHandler::getMail() popClient->setSynchronize(mailAccount.lastServerMailCount); } else { popClient->removeSynchronize(); } headers = FALSE; //popClient->headersOnly(headers, 0); popClient->newConnection(mailAccount.popServer, 110); } void EmailHandler::getMailHeaders() { popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd); mailAccount.synchronize ? popClient->setSynchronize(mailAccount.lastServerMailCount): popClient->removeSynchronize(); headers = TRUE; popClient->headersOnly(headers, mailAccount.syncLimit); //less than requested syncLimit, download all qDebug("Initiating connection"); popClient->newConnection(mailAccount.popServer, 110); } void EmailHandler::getMailByList(MailList *mailList) { if (mailList->count() == 0) { //should not occur though emit mailTransfered(0); return; } headers = FALSE; popClient->headersOnly(FALSE, 0); popClient->setAccount(mailAccount.popUserName,mailAccount.popPasswd); popClient->setSelectedMails(mailList); popClient->newConnection(mailAccount.popServer, 110); } void EmailHandler::messageArrived(const QString &message, int id, uint size, bool complete) { Email mail; mail.rawMail = message; mail.serverId = id; mail.size = size; mail.downloaded = complete; emit mailArrived(mail, FALSE); } -bool EmailHandler::parse(QString in, QString lineShift, Email *mail) +bool EmailHandler::parse(const QString &in, const QString &lineShift, Email *mail) { QString temp, boundary; int pos; QString delimiter, header, body, mimeHeader, mimeBody; QString content, contentType, contentAttribute, id, encoding; QString fileName, storedName; int enclosureId = 0; mail->rawMail = in; mail->received = TRUE; mail->files.setAutoDelete(TRUE); temp = lineShift + "." + lineShift; if (in.right(temp.length()) != temp) { mail->rawMail += temp; } delimiter = lineShift + lineShift; // "\n\n" or "\r\n\r\n" pos = in.find(delimiter, 0, FALSE); header = in.left(pos); body = in.right(in.length() - pos - delimiter.length()); if ((body.at(body.length()-2) == '.') && (body.at(body.length()-3) == '\n')) body.truncate(body.length()-2); TextParser p(header, lineShift); if ((pos = p.find("FROM",':', 0, TRUE)) != -1) { pos++; if (p.separatorAt(pos) == ' ') { mail->from = p.getString(&pos, '<', false); mail->from = mail->from.stripWhiteSpace(); if ( (mail->from.length() > 2) && (mail->from[0] == '"') ) { mail->from = mail->from.left(mail->from.length() - 1); mail->from = mail->from.right(mail->from.length() - 1); } pos++; mail->fromMail = p.getString(&pos, '>', false); } else { if (p.separatorAt(pos) == '<') //No name.. nasty pos++; //pos++; mail->fromMail = p.getString(&pos, 'z', TRUE); if (mail->fromMail.at(mail->fromMail.length()-1) == '>') mail->fromMail.truncate(mail->fromMail.length() - 1); mail->from=mail->fromMail; } } pos=0; //Search for To: after the FROM: attribute to prevent hitting the Delivered-To: while((pos = p.find("TO",':', pos+1, TRUE))!=-1) { - QString rec; - - if (p.separatorAt(pos-1)!='-') //The - separator means that this is a Delivered-To: or Reply-To: - { - pos++; - mail->recipients.append(p.getString(&pos, '\r', TRUE)); - } + QString rec; + + if (p.separatorAt(pos-1)!='-') //The - separator means that this is a Delivered-To: or Reply-To: + { + pos++; + mail->recipients.append(p.getString(&pos, '\r', TRUE)); + } } // //if (pos==-1) mail->recipients.append (tr("undisclosed recipients") ); if ((pos = p.find("CC",':', 0, TRUE)) != -1) { - pos++; - mail->carbonCopies.append (p.getString(&pos, 'z', TRUE) ); + pos++; + mail->carbonCopies.append (p.getString(&pos, 'z', TRUE) ); } if ((pos = p.find("SUBJECT",':', 0, TRUE)) != -1) { pos++; mail->subject = p.getString(&pos, 'z', TRUE); } if ((pos = p.find("DATE",':', 0, TRUE)) != -1) { pos++; mail->date = p.getString(&pos, 'z', TRUE); } if ((pos = p.find("MESSAGE",'-', 0, TRUE)) != -1) { pos++; if ( (p.wordAt(pos).upper() == "ID") && (p.separatorAt(pos) == ':') ) { id = p.getString(&pos, 'z', TRUE); mail->id = id; } } pos = 0; while ( ((pos = p.find("MIME",'-', pos, TRUE)) != -1) ) { pos++; if ( (p.wordAt(pos).upper() == "VERSION") && (p.separatorAt(pos) == ':') ) { pos++; if (p.getString(&pos, 'z', true) == "1.0") { mail->mimeType = 1; } } } if (mail->mimeType == 1) { boundary = ""; if ((pos = p.find("BOUNDARY", '=', 0, TRUE)) != -1) { pos++; boundary = p.getString(&pos, 'z', true); if (boundary[0] == '"') { boundary = boundary.left(boundary.length() - 1); //strip " boundary = boundary.right(boundary.length() - 1); //strip " } boundary = "--" + boundary; //create boundary field } @@ -395,167 +395,167 @@ int EmailHandler::parse64base(char *src, char *bufOut) { //conversion table withouth table... for (int x = 0; x < 4; x++) { c = src[x]; if ( (int) c >= 'A' && (int) c <= 'Z') li[x] = (int) c - (int) 'A'; if ( (int) c >= 'a' && (int) c <= 'z') li[x] = (int) c - (int) 'a' + 26; if ( (int) c >= '0' && (int) c <= '9') li[x] = (int) c - (int) '0' + 52; if (c == '+') li[x] = 62; if (c == '/') li[x] = 63; } processed = 1; bufOut[0] = (char) li[0] & (32+16+8+4+2+1); //mask out top 2 bits bufOut[0] <<= 2; z = li[1] >> 4; bufOut[0] = bufOut[0] | z; //first byte retrived if (src[2] != '=') { bufOut[1] = (char) li[1] & (8+4+2+1); //mask out top 4 bits bufOut[1] <<= 4; z = li[2] >> 2; bufOut[1] = bufOut[1] | z; //second byte retrived processed++; if (src[3] != '=') { bufOut[2] = (char) li[2] & (2+1); //mask out top 6 bits bufOut[2] <<= 6; z = li[3]; bufOut[2] = bufOut[2] | z; //third byte retrieved processed++; } } return processed; } int EmailHandler::encodeMime(Email *mail) { QString fileName, fileType, contentType, newBody, boundary; Enclosure *ePtr; QString userName = mailAccount.name; - if (userName.length()>0) //only embrace it if there is a user name - userName += " <" + mailAccount.emailAddress + ">"; + if (userName.length()>0) //only embrace it if there is a user name + userName += " <" + mailAccount.emailAddress + ">"; //add standard headers newBody = "From: " + userName + "\r\nTo: "; for (QStringList::Iterator it = mail->recipients.begin(); it != mail->recipients.end(); ++it ) { newBody += *it + " "; } newBody += "\r\nCC: "; for (QStringList::Iterator it = mail->carbonCopies.begin(); it != mail->carbonCopies.end(); ++it ) { newBody += *it + " "; } newBody += "\r\nSubject: " + mail->subject + "\r\n"; if (mail->files.count() == 0) { //just a simple mail newBody += "\r\n" + mail->body; mail->rawMail = newBody; return 0; } //Build mime encoded mail boundary = "-----4345=next_bound=0495----"; newBody += "Mime-Version: 1.0\r\n"; newBody += "Content-Type: multipart/mixed; boundary=\"" + boundary + "\"\r\n\r\n"; newBody += "This is a multipart message in Mime 1.0 format\r\n\r\n"; newBody += "--" + boundary + "\r\nContent-Type: text/plain\r\n\r\n"; newBody += mail->body; for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) { fileName = ePtr->originalName; fileType = ePtr->contentType; QFileInfo fi(fileName); // This specification of contentType is temporary contentType = ""; if (fileType == "Picture") { contentType = "image/x-image"; } else if (fileType == "Document") { contentType = "text/plain"; } else if (fileType == "Sound") { contentType = "audio/x-wav"; } else if (fileType == "Movie") { contentType = "video/mpeg"; } else { contentType = "application/octet-stream"; } newBody += "\r\n\r\n--" + boundary + "\r\n"; newBody += "Content-Type: " + contentType + "; name=\"" + fi.fileName() + "\"\r\n"; newBody += "Content-Transfer-Encoding: base64\r\n"; newBody += "Content-Disposition: inline; filename=\"" + fi.fileName() + "\"\r\n\r\n"; if (encodeFile(fileName, &newBody) == -1) //file not found? return -1; } newBody += "\r\n\r\n--" + boundary + "--"; mail->rawMail = newBody; return 0; } -int EmailHandler::encodeFile(QString fileName, QString *toBody) +int EmailHandler::encodeFile(const QString &fileName, QString *toBody) { char *fileData; char *dataPtr; QString temp; uint dataSize, count; QFile f(fileName); if (! f.open(IO_ReadOnly) ) { qWarning("could not open file: " + fileName); return -1; } QTextStream s(&f); dataSize = f.size(); fileData = (char *) malloc(dataSize + 3); s.readRawBytes(fileData, dataSize); temp = ""; dataPtr = fileData; count = 0; while (dataSize > 0) { if (dataSize < 3) { encode64base(dataPtr, &temp, dataSize); dataSize = 0; } else { encode64base(dataPtr, &temp, 3); dataSize -= 3; dataPtr += 3; count += 4; } if (count > 72) { count = 0; temp += "\r\n"; } } toBody->append(temp); delete(fileData); f.close(); return 0; } void EmailHandler::encode64base(char *src, QString *dest, int len) { QString temp; uchar c; uchar bufOut[4]; bufOut[0] = src[0]; 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 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef EmailHandler_H #define EmailHandler_H #include <qobject.h> #include <qstring.h> #include <qdatetime.h> #include <qlist.h> #include <qstringlist.h> #include <qfile.h> #include <qstringlist.h> #include <qcollection.h> #include <qpe/qcopenvelope_qws.h> #include "smtpclient.h" #include "popclient.h" #include "textparser.h" #include "maillist.h" struct Enclosure { - int id; - QString originalName; - QString name; - QString path; - QString contentType; - QString contentAttribute; - QString encoding; - QString body; //might use to much mem. check!! - bool saved, installed; + int id; + QString originalName; + QString name; + QString path; + QString contentType; + QString contentAttribute; + QString encoding; + QString body; //might use to much mem. check!! + bool saved, installed; }; class EnclosureList : public QList<Enclosure> { public: - Item newItem(Item d); + Item newItem(Item d); private: - Enclosure* dupl(Enclosure *in); - Enclosure *ac; + Enclosure* dupl(Enclosure *in); + Enclosure *ac; }; struct Email { - QString id; - QString from; - QString fromMail; - QStringList recipients; - QStringList carbonCopies; - QString date; - QString subject; - QString body; - QString bodyPlain; - bool sent, received, read, downloaded; - QString rawMail; - int mimeType; //1 = Mime 1.0 - int serverId; - int internalId; - int fromAccountId; - QString contentType; //0 = text - QString contentAttribute; //0 = plain, 1 = html - EnclosureList files; - uint size; - - void addEnclosure(Enclosure *e) - { - files.append(e); - } + QString id; + QString from; + QString fromMail; + QStringList recipients; + QStringList carbonCopies; + QString date; + QString subject; + QString body; + QString bodyPlain; + bool sent, received, read, downloaded; + QString rawMail; + int mimeType; //1 = Mime 1.0 + int serverId; + int internalId; + int fromAccountId; + QString contentType; //0 = text + QString contentAttribute; //0 = plain, 1 = html + EnclosureList files; + uint size; + + void addEnclosure(Enclosure *e) + { + files.append(e); + } }; struct MailAccount { - QString accountName; - QString name; - QString emailAddress; - QString popUserName; - QString popPasswd; - QString popServer; - QString smtpServer; - bool synchronize; - int syncLimit; - int lastServerMailCount; - int id; + QString accountName; + QString name; + QString emailAddress; + QString popUserName; + QString popPasswd; + QString popServer; + QString smtpServer; + bool synchronize; + int syncLimit; + int lastServerMailCount; + int id; }; - const int ErrUnknownResponse = 1001; - const int ErrLoginFailed = 1002; - const int ErrCancel = 1003; - + const int ErrUnknownResponse = 1001; + const int ErrLoginFailed = 1002; + const int ErrCancel = 1003; + class EmailHandler : public QObject { - Q_OBJECT + Q_OBJECT public: - EmailHandler(); - void setAccount(MailAccount account); - MailAccount* getAccount(){return &mailAccount;} - void sendMail(QList<Email> *mailList); - void getMail(); - void getMailHeaders(); - void getMailByList(MailList *mailList); - bool parse(QString in, QString lineShift, Email *mail); - bool getEnclosure(Enclosure *ePtr); - int parse64base(char *src, char *dest); - int encodeMime(Email *mail); - int encodeFile(QString fileName, QString *toBody); - void encode64base(char *src, QString *dest, int len); - void cancel(); - + EmailHandler(); + void setAccount(MailAccount account); + MailAccount* getAccount(){return &mailAccount;} + void sendMail(QList<Email> *mailList); + void getMail(); + void getMailHeaders(); + void getMailByList(MailList *mailList); + bool parse(const QString &in, const QString &lineShift, Email *mail); + bool getEnclosure(Enclosure *ePtr); + int parse64base(char *src, char *dest); + int encodeMime(Email *mail); + int encodeFile(const QString &fileName, QString *toBody); + void encode64base(char *src, QString *dest, int len); + void cancel(); + signals: - void mailSent(); - void smtpError(int); - void popError(int); - void mailArrived(const Email &, bool); - void updatePopStatus(const QString &); - void updateSmtpStatus(const QString &); - void mailTransfered(int); - void mailboxSize(int); - void currentMailSize(int); - void downloadedSize(int); + void mailSent(); + void smtpError(int); + void popError(int); + void mailArrived(const Email &, bool); + void updatePopStatus(const QString &); + void updateSmtpStatus(const QString &); + void mailTransfered(int); + void mailboxSize(int); + void currentMailSize(int); + void downloadedSize(int); public slots: - void messageArrived(const QString &, int id, uint size, bool complete); - + void messageArrived(const QString &, int id, uint size, bool complete); + private: - MailAccount mailAccount; - SmtpClient *smtpClient; - PopClient *popClient; - bool headers; + MailAccount mailAccount; + SmtpClient *smtpClient; + PopClient *popClient; + bool headers; }; #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 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <qstring.h> #include <qpe/resource.h> #include "emaillistitem.h" EmailListItem::EmailListItem(QListView *parent, Email mailIn, bool inbox) - : QListViewItem(parent) + : QListViewItem(parent) { - QString temp; - - mail = mailIn; - - if (inbox) { - setText(0, mail.from); - } else { - QStringList::Iterator it = mail.recipients.begin(); - temp = *it; - if (mail.recipients.count() > 1) - temp += "..."; - setText(0, temp); - } - setText(1, mail.subject); - setText(2,mail.date); - - if (mailIn.files.count()>0) - { - setPixmap(0, Resource::loadPixmap("mailit/attach")); - } - - selected = FALSE; + QString temp; + + mail = mailIn; + + if (inbox) { + setText(0, mail.from); + } else { + QStringList::Iterator it = mail.recipients.begin(); + temp = *it; + if (mail.recipients.count() > 1) + temp += "..."; + setText(0, temp); + } + setText(1, mail.subject); + setText(2,mail.date); + + if (mailIn.files.count()>0) + { + setPixmap(0, Resource::loadPixmap("mailit/attach")); + } + + selected = FALSE; } Email* EmailListItem::getMail() { - return &mail; + return &mail; } void EmailListItem::setMail(Email newMail) { - mail = newMail; - repaint(); + mail = newMail; + repaint(); } void EmailListItem::setItemSelected(bool enable) { - selected = enable; - setSelected(enable); - repaint(); + selected = enable; + setSelected(enable); + repaint(); } bool EmailListItem::isItemSelected() { - return selected; + return selected; } void EmailListItem::paintCell( QPainter *p, const QColorGroup &cg, - int column, int width, int alignment ) + int column, int width, int alignment ) { - QColorGroup _cg( cg ); - QColor c = _cg.text(); + QColorGroup _cg( cg ); + QColor c = _cg.text(); - if ( (! mail.read) && (mail.received) ) - _cg.setColor( QColorGroup::Text, Qt::blue); - if (!mail.downloaded) - _cg.setColor( QColorGroup::Text, Qt::red); - -/* if (selected) { - _cg.setColor(QColorGroup::Base, Qt::blue); - _cg.setColor(QColorGroup::Text, Qt::yellow); - if (isSelected()) { - _cg.setColor(QColorGroup::HighlightedText, Qt::yellow); - } else { - _cg.setColor(QColorGroup::Highlight, Qt::blue); - } - } -*/ + if ( (! mail.read) && (mail.received) ) + _cg.setColor( QColorGroup::Text, Qt::blue); + if (!mail.downloaded) + _cg.setColor( QColorGroup::Text, Qt::red); + +/* if (selected) { + _cg.setColor(QColorGroup::Base, Qt::blue); + _cg.setColor(QColorGroup::Text, Qt::yellow); + if (isSelected()) { + _cg.setColor(QColorGroup::HighlightedText, Qt::yellow); + } else { + _cg.setColor(QColorGroup::Highlight, Qt::blue); + } + } +*/ QListViewItem::paintCell( p, _cg, column, width, alignment ); _cg.setColor( QColorGroup::Text, c ); } 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 @@ -5,323 +5,323 @@ ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "popclient.h" #include "emailhandler.h" //#define APOP_TEST extern "C" { #include "md5.h" } #include <qcstring.h> PopClient::PopClient() { socket = new QSocket(this, "popClient"); connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int))); connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished())); connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData())); stream = new QTextStream(socket); receiving = FALSE; synchronize = FALSE; lastSync = 0; headerLimit = 0; preview = FALSE; } PopClient::~PopClient() { delete socket; delete stream; } -void PopClient::newConnection(QString target, int port) +void PopClient::newConnection(const QString &target, int port) { if (receiving) { qWarning("socket in use, connection refused"); return; } status = Init; socket->connectToHost(target, port); receiving = TRUE; //selected = FALSE; emit updateStatus("DNS lookup"); } -void PopClient::setAccount(QString popUser, QString popPasswd) +void PopClient::setAccount(const QString &popUser, const QString &popPasswd) { popUserName = popUser; popPassword = popPasswd; } void PopClient::setSynchronize(int lastCount) { synchronize = TRUE; lastSync = lastCount; } void PopClient::removeSynchronize() { synchronize = FALSE; lastSync = 0; } void PopClient::headersOnly(bool headers, int limit) { preview = headers; headerLimit = limit; } void PopClient::setSelectedMails(MailList *list) { selected = TRUE; mailList = list; } void PopClient::connectionEstablished() { emit updateStatus(tr("Connection established")); } void PopClient::errorHandling(int status) { emit updateStatus(tr("Error Occured")); emit errorOccurred(status); socket->close(); receiving = FALSE; } void PopClient::incomingData() { QString response, temp, temp2, timeStamp; QString md5Source; int start, end; // char *md5Digest; char md5Digest[16]; // if ( !socket->canReadLine() ) // return; response = socket->readLine(); switch(status) { //logging in case Init: { #ifdef APOP_TEST start = response.find('<',0); end = response.find('>', start); if( start >= 0 && end > start ) { timeStamp = response.mid( start , end - start + 1); md5Source = timeStamp + popPassword; md5_buffer( (char const *)md5Source, md5Source.length(),&md5Digest[0]); for(int j =0;j < MD5_DIGEST_LENGTH ;j++) { printf("%x", md5Digest[j]); } printf("\n"); // qDebug(md5Digest); *stream << "APOP " << popUserName << " " << md5Digest << "\r\n"; // qDebug("%s", stream); status = Stat; } else #endif { timeStamp = ""; *stream << "USER " << popUserName << "\r\n"; status = Pass; } break; } case Pass: { *stream << "PASS " << popPassword << "\r\n"; - status = Stat; - + status = Stat; + break; } //ask for number of messages case Stat: { if (response[0] == '+') { *stream << "STAT" << "\r\n"; - status = Mcnt; + status = Mcnt; } else errorHandling(ErrLoginFailed); break; } //get count of messages, eg "+OK 4 900.." -> int 4 case Mcnt: { if (response[0] == '+') { temp = response.replace(0, 4, ""); int x = temp.find(" ", 0); temp.truncate((uint) x); newMessages = temp.toInt(); messageCount = 1; status = List; if (synchronize) { //messages deleted from server, reload all - if (newMessages < lastSync) - lastSync = 0; + if (newMessages < lastSync) + lastSync = 0; messageCount = 1; } - if (selected) { + if (selected) { int *ptr = mailList->first(); if (ptr != 0) { newMessages++; //to ensure no early jumpout messageCount = *ptr; } else newMessages = 0; - } + } } else errorHandling(ErrUnknownResponse); } //Read message number x, count upwards to messageCount case List: { if (messageCount <= newMessages) { *stream << "LIST " << messageCount << "\r\n"; status = Size; temp2.setNum(newMessages - lastSync); temp.setNum(messageCount - lastSync); if (!selected) { emit updateStatus(tr("Retrieving ") + temp + "/" + temp2); } else { //completing a previously closed transfer /* if ( (messageCount - lastSync) <= 0) { temp.setNum(messageCount); emit updateStatus(tr("Previous message ") + temp); } else {*/ emit updateStatus(tr("Completing message ") + temp); //} } break; } else { emit updateStatus(tr("No new Messages")); status = Quit; } } //get size of message, eg "500 characters in message.." -> int 500 case Size: { if (status != Quit) { //because of idiotic switch if (response[0] == '+') { temp = response.replace(0, 4, ""); int x = temp.find(" ", 0); temp = temp.right(temp.length() - ((uint) x + 1) ); mailSize = temp.toInt(); emit currentMailSize(mailSize); status = Retr; } else { //qWarning(response); errorHandling(ErrUnknownResponse); } } } //Read message number x, count upwards to messageCount case Retr: { if (status != Quit) { if ((selected)||(mailSize <= headerLimit)) - { + { *stream << "RETR " << messageCount << "\r\n"; } else { //only header - *stream << "TOP " << messageCount << " 0\r\n"; + *stream << "TOP " << messageCount << " 0\r\n"; } messageCount++; status = Ignore; break; } } case Ignore: { if (status != Quit) { //because of idiotic switch if (response[0] == '+') { message = ""; status = Read; if (!socket->canReadLine()) //sync. problems break; response = socket->readLine(); } else errorHandling(ErrUnknownResponse); } } //add all incoming lines to body. When size is reached, send //message, and go back to read new message case Read: { if (status != Quit) { //because of idiotic switch message += response; while ( socket->canReadLine() ) { response = socket->readLine(); message += response; } emit downloadedSize(message.length()); int x = message.find("\r\n.\r\n",-5); if (x == -1) { break; } else { //message reach entire size - if ( (selected)||(mailSize <= headerLimit)) //mail size limit is not used if late download is active - { - emit newMessage(message, messageCount-1, mailSize, TRUE); + if ( (selected)||(mailSize <= headerLimit)) //mail size limit is not used if late download is active + { + emit newMessage(message, messageCount-1, mailSize, TRUE); } else { //incomplete mail downloaded - emit newMessage(message, messageCount-1, mailSize, FALSE); + emit newMessage(message, messageCount-1, mailSize, FALSE); } - + if ((messageCount > newMessages)||(selected)) //last message ? - { + { status = Quit; if (selected) { //grab next from queue newMessages--; status = Quit; } - } + } else - { + { *stream << "LIST " << messageCount << "\r\n"; status = Size; temp2.setNum(newMessages - lastSync); temp.setNum(messageCount - lastSync); emit updateStatus(tr("Retrieving ") + temp + "/" + temp2); break; } } } if (status != Quit) break; } case Quit: { *stream << "Quit\r\n"; status = Done; int newM = newMessages - lastSync; if (newM > 0) { temp.setNum(newM); emit updateStatus(temp + tr(" new messages")); } else { emit updateStatus(tr("No new messages")); } socket->close(); receiving = FALSE; emit mailTransfered(newM); break; } } } 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 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef PopClient_H #define PopClient_H #include <stdio.h> #include <qsocket.h> #include <qstring.h> #include <qobject.h> #include <qtextstream.h> #include <qlist.h> #include "maillist.h" class PopClient: public QObject { Q_OBJECT public: PopClient(); ~PopClient(); - void newConnection(QString target, int port); - void setAccount(QString popUser, QString popPasswd); + void newConnection(const QString &target, int port); + void setAccount(const QString &popUser, const QString &popPasswd); void setSynchronize(int lastCount); void removeSynchronize(); void headersOnly(bool headers, int limit); void setSelectedMails(MailList *list); signals: void newMessage(const QString &, int, uint, bool); void errorOccurred(int status); void updateStatus(const QString &); void mailTransfered(int); void mailboxSize(int); void currentMailSize(int); void downloadedSize(int); public slots: void errorHandling(int); protected slots: void connectionEstablished(); void incomingData(); private: QSocket *socket; QTextStream *stream; enum transferStatus { Init, Pass, Stat, Mcnt, Read, List, Size, Retr, Acks, Quit, Done, Ignore }; int status, lastSync; int messageCount, newMessages, mailSize, headerLimit; bool receiving, synchronize, preview, selected; QString popUserName, popPassword, message; MailList *mailList; }; #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,104 +1,104 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "smtpclient.h" #include "emailhandler.h" SmtpClient::SmtpClient() { socket = new QSocket(this, "smtpClient"); stream = new QTextStream(socket); mailList.setAutoDelete(TRUE); connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int))); connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished())); connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData())); sending = FALSE; } SmtpClient::~SmtpClient() { delete socket; delete stream; } -void SmtpClient::newConnection(QString target, int port) +void SmtpClient::newConnection(const QString &target, int port) { if (sending) { qWarning("socket in use, connection refused"); return; } status = Init; sending = TRUE; socket->connectToHost(target, port); emit updateStatus(tr("DNS lookup")); } -void SmtpClient::addMail(QString from, QString subject, QStringList to, QString body) +void SmtpClient::addMail(const QString &from, const QString &subject, const QStringList &to, const QString &body) { RawEmail *mail = new RawEmail; mail->from = from; mail->subject = subject; mail->to = to; mail->body = body; mailList.append(mail); } void SmtpClient::connectionEstablished() { emit updateStatus(tr("Connection established")); } void SmtpClient::errorHandling(int status) { emit errorOccurred(status); socket->close(); mailList.clear(); sending = FALSE; } void SmtpClient::incomingData() { QString response; if (!socket->canReadLine()) return; response = socket->readLine(); switch(status) { case Init: { if (response[0] == '2') { status = From; mailPtr = mailList.first(); *stream << "HELO there\r\n"; } else errorHandling(ErrUnknownResponse); break; } case From: { if (response[0] == '2') { *stream << "MAIL FROM: " << mailPtr->from << "\r\n"; status = Recv; } else errorHandling(ErrUnknownResponse); 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 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef SmtpClient_H #define SmtpClient_H //#include <stdio.h> #include <qsocket.h> #include <qstring.h> #include <qobject.h> #include <qtextstream.h> #include <qstringlist.h> #include <qlist.h> struct RawEmail { - QString from; - QString subject; - QStringList to; - QString body; + QString from; + QString subject; + QStringList to; + QString body; }; class SmtpClient: public QObject { - Q_OBJECT - + Q_OBJECT + public: - SmtpClient(); - ~SmtpClient(); - void newConnection(QString target, int port); - void addMail(QString from, QString subject, QStringList to, QString body); + SmtpClient(); + ~SmtpClient(); + void newConnection(const QString &target, int port); + void addMail(const QString &from, const QString &subject, const QStringList &to, const QString &body); signals: - void errorOccurred(int); - void updateStatus(const QString &); - void mailSent(); - + void errorOccurred(int); + void updateStatus(const QString &); + void mailSent(); + public slots: - void errorHandling(int); + void errorHandling(int); protected slots: - void connectionEstablished(); - void incomingData(); - + void connectionEstablished(); + void incomingData(); + private: - QSocket *socket; - QTextStream *stream; - enum transferStatus - { - Init, From, Recv, MRcv, Data, Body, Quit, Done - }; - int status; - QList<RawEmail> mailList; - RawEmail *mailPtr; - bool sending; - QStringList::Iterator it; + QSocket *socket; + QTextStream *stream; + enum transferStatus + { + Init, From, Recv, MRcv, Data, Body, Quit, Done + }; + int status; + QList<RawEmail> mailList; + RawEmail *mailPtr; + bool sending; + QStringList::Iterator it; }; #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 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "textparser.h" -TextParser::TextParser(QString in, QString lineBreak) +TextParser::TextParser(const QString &in, const QString &lineBreak) { - data = in; - lineSep = lineBreak; - - init(); - createSeparators(); - split(); + data = in; + lineSep = lineBreak; + + init(); + createSeparators(); + split(); } -TextParser::TextParser(QString in, QString lineBreak, QString sep) +TextParser::TextParser(const QString &in, const QString &lineBreak, const QString &sep) { - data = in; - lineSep = lineBreak; - - init(); - separators = sep; - split(); + data = in; + lineSep = lineBreak; + + init(); + separators = sep; + split(); } void TextParser::init() { - lineCount = 0; - linePos = 0; - totalElmCount = 0; - separatorPos = -1; //not initialized - wordPos = -1; //not initialized - sepAtLine = 0; - sepAtPosElm = -1; //such that nextSep equals 0 - wordAtLine = 0; - wordAtPosElm = -1; //such that nextWord equals 0 - atLine = 0; - atPosElm = 0; + lineCount = 0; + linePos = 0; + totalElmCount = 0; + separatorPos = -1; //not initialized + wordPos = -1; //not initialized + sepAtLine = 0; + sepAtPosElm = -1; //such that nextSep equals 0 + wordAtLine = 0; + wordAtPosElm = -1; //such that nextWord equals 0 + atLine = 0; + atPosElm = 0; } void TextParser::createSeparators() { - separators = " @#,.:;<>*/(){}|'?-+=_"; + separators = " @#,.:;<>*/(){}|'?-+=_"; } -/* Returns pos of given search criteria, -1 if not found */ -int TextParser::find(QString target, QChar sep, int pos, bool upperCase) +/* Returns pos of given search criteria, -1 if not found */ +int TextParser::find(const QString &target, QChar sep, int pos, bool upperCase) { - - t_splitElm parsstr; - QString pString; - - int atLine = 0, atPosElm = 0; - - getLineReference(pos,&atLine,&atPosElm); - - for (int x = pos; x < totalElmCount; x++) - { - parsstr=splitDone[atLine].elm[atPosElm++]; - - if (upperCase) - { - pString=parsstr.str.upper(); - target=target.upper(); - } - else - { - pString=parsstr.str; - } - if ((pString == target) && (parsstr.separator == sep)) - { - return x; - } - if (atPosElm >= splitDone[atLine].elmCount) - { //new Line - atLine++; - atPosElm = 0; - } - } - return -1; + + t_splitElm parsstr; + QString pString, pTarget; + pTarget = target; + int atLine = 0, atPosElm = 0; + + getLineReference(pos,&atLine,&atPosElm); + + for (int x = pos; x < totalElmCount; x++) + { + parsstr=splitDone[atLine].elm[atPosElm++]; + + if (upperCase) + { + pString=parsstr.str.upper(); + pTarget=pTarget.upper(); + } + else + { + pString=parsstr.str; + } + if ((pString == pTarget) && (parsstr.separator == sep)) + { + return x; + } + if (atPosElm >= splitDone[atLine].elmCount) + { //new Line + atLine++; + atPosElm = 0; + } + } + return -1; } int TextParser::elmCount() { - return totalElmCount; + return totalElmCount; } QChar TextParser::separatorAt(int pos) { - if (getLineReference(pos, &sepAtLine, &sepAtPosElm) == -1) - return QChar::null; - - separatorPos = pos; - return splitDone[sepAtLine].elm[sepAtPosElm].separator; + if (getLineReference(pos, &sepAtLine, &sepAtPosElm) == -1) + return QChar::null; + + separatorPos = pos; + return splitDone[sepAtLine].elm[sepAtPosElm].separator; } QChar TextParser::nextSeparator() { - sepAtPosElm++; - if (splitDone[sepAtLine].elmCount <= sepAtPosElm) { - sepAtLine++; - sepAtPosElm = 0; - } - - separatorPos++; - return splitDone[sepAtLine].elm[sepAtPosElm].separator; + sepAtPosElm++; + if (splitDone[sepAtLine].elmCount <= sepAtPosElm) { + sepAtLine++; + sepAtPosElm = 0; + } + + separatorPos++; + return splitDone[sepAtLine].elm[sepAtPosElm].separator; } bool TextParser::hasNextSeparator() { - return ((separatorPos+1) < totalElmCount); + return ((separatorPos+1) < totalElmCount); } QString TextParser::wordAt(int pos) { - if (getLineReference(pos, &wordAtLine, &wordAtPosElm) == -1) - return NULL; - - wordPos = pos; - return splitDone[wordAtLine].elm[wordAtPosElm].str; + if (getLineReference(pos, &wordAtLine, &wordAtPosElm) == -1) + return NULL; + + wordPos = pos; + return splitDone[wordAtLine].elm[wordAtPosElm].str; } QString TextParser::nextWord() { - wordAtPosElm++; - if (splitDone[wordAtLine].elmCount <= wordAtPosElm) { - wordAtLine++; - wordAtPosElm = 0; - } - - wordPos++; - return splitDone[wordAtLine].elm[wordAtPosElm].str; + wordAtPosElm++; + if (splitDone[wordAtLine].elmCount <= wordAtPosElm) { + wordAtLine++; + wordAtPosElm = 0; + } + + wordPos++; + return splitDone[wordAtLine].elm[wordAtPosElm].str; } bool TextParser::hasNextWord() { - return ((wordPos + 1) < totalElmCount); + return ((wordPos + 1) < totalElmCount); } QString TextParser::getString(int *pos, QChar stop, bool lineEnd = false) { - QString returnStr = wordAt(*pos); - QChar chr = separatorAt(*pos); - QString s; - - if (returnStr == "") - return ""; - if (chr == stop) - return returnStr; - - if (!lineEnd) { - while ((chr != stop) && hasNextWord()) { - returnStr.append(chr); - returnStr += nextWord(); - chr = nextSeparator(); - } - } else { //copy from pos to end of line - getLineReference(*pos, &atLine, &atPosElm); - returnStr = ""; - while (atPosElm < splitDone[atLine].elmCount) { - if (splitDone[atLine].elm[atPosElm].str != "") { - returnStr += splitDone[atLine].elm[atPosElm].str; - } - chr = splitDone[atLine].elm[atPosElm].separator; - if (!chr.isNull() && (int) chr != 0) { - returnStr.append(splitDone[atLine].elm[atPosElm].separator); - } - atPosElm++; - } - } - - *pos = wordPos; - return returnStr; + QString returnStr = wordAt(*pos); + QChar chr = separatorAt(*pos); + QString s; + + if (returnStr == "") + return ""; + if (chr == stop) + return returnStr; + + if (!lineEnd) { + while ((chr != stop) && hasNextWord()) { + returnStr.append(chr); + returnStr += nextWord(); + chr = nextSeparator(); + } + } else { //copy from pos to end of line + getLineReference(*pos, &atLine, &atPosElm); + returnStr = ""; + while (atPosElm < splitDone[atLine].elmCount) { + if (splitDone[atLine].elm[atPosElm].str != "") { + returnStr += splitDone[atLine].elm[atPosElm].str; + } + chr = splitDone[atLine].elm[atPosElm].separator; + if (!chr.isNull() && (int) chr != 0) { + returnStr.append(splitDone[atLine].elm[atPosElm].separator); + } + atPosElm++; + } + } + + *pos = wordPos; + return returnStr; } QString TextParser::getNextLine() { - atLine++; - atPosElm = 0; - if (atLine < lineCount) - return splitDone[atLine].str; - return ""; + atLine++; + atPosElm = 0; + if (atLine < lineCount) + return splitDone[atLine].str; + return ""; } bool TextParser::hasNextLine() { - if (atLine+1 < lineCount) - return TRUE;; - return FALSE; + if (atLine+1 < lineCount) + return TRUE;; + return FALSE; } int TextParser::endLinePos(int pos) { - if ( (getLineReference(pos, &atLine, &atPosElm)) == -1) - return -1; - - return (pos + (splitDone[atLine].elmCount - atPosElm) + 1); + if ( (getLineReference(pos, &atLine, &atPosElm)) == -1) + return -1; + + return (pos + (splitDone[atLine].elmCount - atPosElm) + 1); } int TextParser::getLineReference(int pos, int *line, int *inLinePos) { - int currentPos = 0; - - for (int x = 0; x < lineCount; x++) { - if ( currentPos + splitDone[x].elmCount > pos) { - *line = x; - *inLinePos = pos - currentPos; - return 0; //pos found okay - } - currentPos += splitDone[x].elmCount; - } - return -1; //no reference found + int currentPos = 0; + + for (int x = 0; x < lineCount; x++) { + if ( currentPos + splitDone[x].elmCount > pos) { + *line = x; + *inLinePos = pos - currentPos; + return 0; //pos found okay + } + currentPos += splitDone[x].elmCount; + } + return -1; //no reference found } void TextParser::split() { - t_splitLine newLine; + t_splitLine newLine; - while ((uint) linePos < data.length()) { - newLine = nextLine(); - splitDone[lineCount] = splitLine(newLine); - totalElmCount += splitDone[lineCount].elmCount; - lineCount++; - } + while ((uint) linePos < data.length()) { + newLine = nextLine(); + splitDone[lineCount] = splitLine(newLine); + totalElmCount += splitDone[lineCount].elmCount; + lineCount++; + } } t_splitLine TextParser::splitLine(t_splitLine line) { - uint pos = 0; - uint elmCount = 0; - t_splitLine tempLine = line; - - tempLine.str = line.str.simplifyWhiteSpace(); - tempLine.elm[0].str = ""; - while ( pos < line.str.length() ) { - if ( isSeparator(tempLine.str[pos]) ) { - tempLine.elm[elmCount].separator = tempLine.str[pos]; - elmCount++; - pos++; - while (tempLine.str[pos] == ' ') - pos++; - if (pos > line.str.length()) - elmCount--; - tempLine.elm[elmCount].str = ""; - } else { - if (!tempLine.str[pos].isNull()) - tempLine.elm[elmCount].str += tempLine.str[pos]; - pos++; - } - } - - tempLine.elmCount = elmCount + 1; - return tempLine; + uint pos = 0; + uint elmCount = 0; + t_splitLine tempLine = line; + + tempLine.str = line.str.simplifyWhiteSpace(); + tempLine.elm[0].str = ""; + while ( pos < line.str.length() ) { + if ( isSeparator(tempLine.str[pos]) ) { + tempLine.elm[elmCount].separator = tempLine.str[pos]; + elmCount++; + pos++; + while (tempLine.str[pos] == ' ') + pos++; + if (pos > line.str.length()) + elmCount--; + tempLine.elm[elmCount].str = ""; + } else { + if (!tempLine.str[pos].isNull()) + tempLine.elm[elmCount].str += tempLine.str[pos]; + pos++; + } + } + + tempLine.elmCount = elmCount + 1; + return tempLine; } bool TextParser::isSeparator(QChar chr) { - for (uint x = 0; x < separators.length(); x++) { - if (chr == separators[x]) - return true; - } - return false; + for (uint x = 0; x < separators.length(); x++) { + if (chr == separators[x]) + return true; + } + return false; } t_splitLine TextParser::nextLine() { - int newLinePos; - t_splitLine lineType; - - newLinePos = data.find(lineSep, linePos); - - lineType.lineType = NewLine; - lineType.str = ""; - - if (newLinePos == -1) { - newLinePos = data.length(); - lineType.lineType = LastLine; - } - - for (int x = linePos; x < newLinePos; x++) - lineType.str += data[x]; - - linePos = newLinePos; - if ((uint) linePos < data.length()) //if not EOF, add length of lineSep - linePos += lineSep.length(); - - return lineType; + int newLinePos; + t_splitLine lineType; + + newLinePos = data.find(lineSep, linePos); + + lineType.lineType = NewLine; + lineType.str = ""; + + if (newLinePos == -1) { + newLinePos = data.length(); + lineType.lineType = LastLine; + } + + for (int x = linePos; x < newLinePos; x++) + lineType.str += data[x]; + + linePos = newLinePos; + if ((uint) linePos < data.length()) //if not EOF, add length of lineSep + linePos += lineSep.length(); + + return lineType; } 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 @@ -4,82 +4,82 @@ ** This file is part of Qt Palmtop Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <qobject.h> #include <qstring.h> #ifndef TEXTPARSER_H #define TEXTPARSER_H enum t_strType { Word, Number}; enum t_lineType {NewLine, LastLine}; const uint MAX_ELEMENTS = 200; //Should be dynamic const uint MAX_LINES = 500; //Should be dynamic struct t_splitElm { QChar separator; int strType; QString str; }; struct t_splitLine { t_lineType lineType; QString str; //a bit redundant... t_splitElm elm[MAX_ELEMENTS]; int elmCount; }; class TextParser: public QObject { Q_OBJECT public: - TextParser(QString in, QString lineBreak); - TextParser(QString in, QString lineBreak, QString sep); - int find(QString target, QChar sep, int pos, bool upperCase); + TextParser(const QString &in, const QString &lineBreak); + TextParser(const QString &in, const QString &lineBreak, const QString &sep); + int find(const QString &target, QChar sep, int pos, bool upperCase); int elmCount(); QChar separatorAt(int pos); QChar nextSeparator(); bool hasNextSeparator(); QString wordAt(int pos); QString nextWord(); bool hasNextWord(); QString getString(int *pos, QChar stop, bool lineEnd); QString getNextLine(); bool hasNextLine(); int endLinePos(int pos); private: void init(); void createSeparators(); t_splitLine nextLine(); void split(); t_splitLine splitLine(t_splitLine line); bool isSeparator(QChar chr); t_splitLine splitDone[MAX_LINES]; int getLineReference(int pos, int *line, int *inLinePos); int lineCount, linePos, totalElmCount; int separatorPos, wordPos; QString data, separators, lineSep; int sepAtLine, sepAtPosElm; int wordAtLine, wordAtPosElm; int atLine, atPosElm; }; #endif |