summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2003-06-09 01:37:23 (UTC)
committer llornkcor <llornkcor>2003-06-09 01:37:23 (UTC)
commit364e6e65b4c3b4ceec2b1b6688f2ca2b3dce4560 (patch) (side-by-side diff)
tree1be5d3150c2bda4b3a55f9e7d2529d73fe6d72db
parent5ee1c7dff5679454d46e3c5bd5747c60ea63c959 (diff)
downloadopie-364e6e65b4c3b4ceec2b1b6688f2ca2b3dce4560.zip
opie-364e6e65b4c3b4ceec2b1b6688f2ca2b3dce4560.tar.gz
opie-364e6e65b4c3b4ceec2b1b6688f2ca2b3dce4560.tar.bz2
patch from wim delvaux. fix from me
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mailit/addatt.cpp4
-rw-r--r--noncore/net/mailit/emailclient.cpp73
-rw-r--r--noncore/net/mailit/emailclient.h4
-rw-r--r--noncore/net/mailit/emailhandler.cpp10
-rw-r--r--noncore/net/mailit/emailhandler.h4
-rw-r--r--noncore/net/mailit/mailit.pro1
-rw-r--r--noncore/net/mailit/mailitwindow.cpp4
-rw-r--r--noncore/net/mailit/maillist.cpp160
-rw-r--r--noncore/net/mailit/popclient.cpp16
-rw-r--r--noncore/net/mailit/popclient.h3
-rw-r--r--noncore/net/mailit/smtpclient.cpp35
-rw-r--r--noncore/net/mailit/smtpclient.h3
-rw-r--r--noncore/net/mailit/viewatt.cpp14
-rw-r--r--noncore/net/mailit/writemail.cpp598
-rw-r--r--noncore/unsupported/mailit/addatt.cpp4
-rw-r--r--noncore/unsupported/mailit/emailclient.cpp73
-rw-r--r--noncore/unsupported/mailit/emailclient.h4
-rw-r--r--noncore/unsupported/mailit/emailhandler.cpp10
-rw-r--r--noncore/unsupported/mailit/emailhandler.h4
-rw-r--r--noncore/unsupported/mailit/mailit.pro1
-rw-r--r--noncore/unsupported/mailit/mailitwindow.cpp4
-rw-r--r--noncore/unsupported/mailit/maillist.cpp160
-rw-r--r--noncore/unsupported/mailit/popclient.cpp16
-rw-r--r--noncore/unsupported/mailit/popclient.h3
-rw-r--r--noncore/unsupported/mailit/smtpclient.cpp35
-rw-r--r--noncore/unsupported/mailit/smtpclient.h3
-rw-r--r--noncore/unsupported/mailit/viewatt.cpp14
-rw-r--r--noncore/unsupported/mailit/writemail.cpp598
28 files changed, 948 insertions, 910 deletions
diff --git a/noncore/net/mailit/addatt.cpp b/noncore/net/mailit/addatt.cpp
index daefac6..19ac58f 100644
--- a/noncore/net/mailit/addatt.cpp
+++ b/noncore/net/mailit/addatt.cpp
@@ -1,224 +1,224 @@
/**********************************************************************
** 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 <qlayout.h>
#include <qhbox.h>
#include <qdir.h>
#include <qstringlist.h>
#include <qpe/resource.h>
#include "addatt.h"
FileItem::FileItem(QListView *parent, DocLnk* dl)
: QListViewItem(parent)
{
/*file = fileInfo;
type = fileType;*/
doclnk=dl;
setText(0, doclnk->name());
/* if (fileType == "Picture") {
setPixmap(0, Resource::loadPixmap("pixmap"));
} else if (fileType == "Document") {
setPixmap(0, Resource::loadPixmap("txt"));
} else if (fileType == "Sound") {
setPixmap(0, Resource::loadPixmap("play"));
} else if (fileType == "Movie") {
setPixmap(0, Resource::loadPixmap("MPEGPlayer"));
} else if (fileType == "File") {
setPixmap(0, Resource::loadPixmap("exec"));
}*/
}
FileItem::~FileItem()
{
if (doclnk!=NULL) delete doclnk;
doclnk=NULL;
}
AddAtt::AddAtt(QWidget *parent, const char *name, WFlags f)
: QDialog(parent, name, f)
{
- setCaption("Adding attachments");
+ setCaption(tr("Adding attachments") );
QGridLayout *top = new QGridLayout(this, 1,1 );
QHBox *buttons=new QHBox(this);
/*fileCategoryButton = new QPushButton(this);*/
attachButton = new QPushButton(tr("attach..."), buttons);
removeButton = new QPushButton(tr("Remove"), buttons);
/*fileCategories = new QPopupMenu(fileCategoryButton);
fileCategoryButton->setPopup(fileCategories);
fileCategories->insertItem("Document");
fileCategories->insertItem("Picture");
fileCategories->insertItem("Sound");
fileCategories->insertItem("Movie");
fileCategories->insertItem("File");
fileCategoryButton->setText("Document");
top->addWidget(fileCategoryButton, 0, 0);*/
top->addWidget(buttons,1,0);
//buttons->addWidget(attachButton,0,0);
//buttons->addWidget(removeButton,0,1);
//connect(fileCategories, SIGNAL(activated(int)), this,
// SLOT(fileCategorySelected(int)) );*/
connect(attachButton, SIGNAL(clicked()), this,
SLOT(addattachment()) );
connect(removeButton, SIGNAL(clicked()), this,
SLOT(removeattachment()) );
/*listView = new QListView(this, "AttView");
listView->addColumn("Documents");*
connect(listView, SIGNAL(doubleClicked(QListViewItem *)), this,
SLOT(addattachment()) );*/
attView = new QListView(this, "Selected");
attView->addColumn(tr("Attached"));
attView->addColumn(tr("File type"));
connect(attView, SIGNAL(doubleClicked(QListViewItem *)), this,
SLOT(removeattachment()) );
//top->addWidget(ofs, 0,0);
top->addWidget(attView, 0,0);
clear();
}
void AddAtt::clear()
{
attView->clear();
//getFiles();
modified = FALSE;
}
/*void AddAtt::fileCategorySelected(int id)
{
fileCategoryButton->setText(fileCategories->text(id));
getFiles();
}*/
void AddAtt::addattachment()
-{
+{ // ### FIXME wrong use -zecke
OFileDialog ofs("Attachments",this,0,0,"/root/Documents");
ofs.showMaximized();
if (ofs.exec()==QDialog::Accepted)
{
DocLnk* dl=new DocLnk(ofs.selectedDocument());
FileItem* fi=new FileItem(attView,dl);
fi->setPixmap(0,dl->pixmap());
fi->setText(1,dl->type());
attView->insertItem(fi);
modified = TRUE;
}
}
void AddAtt::removeattachment()
{
if (attView->selectedItem() != NULL)
{
attView->takeItem(attView->selectedItem());
}
modified = TRUE;
}
void AddAtt::reject()
{
if (modified) {
attView->clear();
modified = FALSE;
}
}
void AddAtt::accept()
{
modified = FALSE;
hide();
}
void AddAtt::getFiles()
{
QString path, selected;
/*listView->clear();
selected = fileCategoryButton->text();
if (selected == "Picture") {
path = "../pics/";
} else if (selected == "Document") {
path = "" ; //sub-dirs not decided
} else if (selected == "Sound") {
path = "../sounds/"; //sub-dirs not decided
} else if (selected == "Movie") {
path = ""; //sub-dirs not decided
} else if (selected == "File") {
path = ""; //sub-dirs not decided
}
dir = new QDir(path);
dir->setFilter(QDir::Files);
const QFileInfoList *dirInfoList = dir->entryInfoList();
QFileInfoListIterator it(*dirInfoList); // create list iterator
while ( (fi=it.current()) ) { // for each file...
item = new FileItem(lis+ütView, *fi, selected);
++it; // goto next list element
}*/
}
QStringList AddAtt::returnattachedFiles()
{
QFileInfo info;
QStringList list;
item = (FileItem *) attView->firstChild();
while (item != NULL) {
DocLnk* dl=item->getDocLnk();
list+=dl->file();
/*info = item->getFileInfo();
list += info.filePath();*/
item = (FileItem *) item->nextSibling();
}
return list;
}
QStringList AddAtt::returnFileTypes()
{
QStringList list;
item = (FileItem *) attView->firstChild();
while (item != NULL) {
list += item->getDocLnk()->type();
item = (FileItem *) item->nextSibling();
}
return list;
}
diff --git a/noncore/net/mailit/emailclient.cpp b/noncore/net/mailit/emailclient.cpp
index da1226c..749a4e9 100644
--- a/noncore/net/mailit/emailclient.cpp
+++ b/noncore/net/mailit/emailclient.cpp
@@ -1,1037 +1,1042 @@
/**********************************************************************
** 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 <qapplication.h>
#include <qmessagebox.h>
#include <qvbox.h>
#include <qfile.h>
#include <qcheckbox.h>
#include <qmenubar.h>
#include <qaction.h>
#include <qwhatsthis.h>
#include <qpe/resource.h>
#include "emailclient.h"
#include "writemail.h"
QCollection::Item AccountList::newItem(QCollection::Item d)
{
return dupl( (MailAccount *) d);
}
MailAccount* AccountList::dupl(MailAccount *in)
{
ac = new MailAccount(*in);
return ac;
}
EmailClient::EmailClient( QWidget* parent, const char* name, WFlags fl )
: QMainWindow( parent, name, fl )
{
emailHandler = new EmailHandler();
addressList = new AddressList();
sending = FALSE;
receiving = FALSE;
previewingMail = FALSE;
mailIdCount = 1;
accountIdCount = 1;
allAccounts = FALSE;
init();
connect(emailHandler, SIGNAL(mailSent()), this, SLOT(mailSent()) );
- connect(emailHandler, SIGNAL(smtpError(int)), this,
- SLOT(smtpError(int)) );
- connect(emailHandler, SIGNAL(popError(int)), this,
- SLOT(popError(int)) );
+ connect(emailHandler, SIGNAL(smtpError(int,const QString &)), this,
+ SLOT(smtpError(int,const QString &)) );
+ connect(emailHandler, SIGNAL(popError(int,const QString &)), this,
+ SLOT(popError(int,const QString &)) );
connect(inboxView, SIGNAL(doubleClicked(QListViewItem *)), this, SLOT(inboxItemSelected()) );
connect(outboxView, SIGNAL(doubleClicked(QListViewItem *)), this, SLOT(outboxItemSelected()) );
connect(inboxView, SIGNAL(pressed(QListViewItem *)), this, SLOT(inboxItemPressed()) );
connect(inboxView, SIGNAL(clicked(QListViewItem *)), this, SLOT(inboxItemReleased()) );
connect(emailHandler, SIGNAL(mailArrived(const Email &, bool)), this,
SLOT(mailArrived(const Email &, bool)) );
connect(emailHandler, SIGNAL(mailTransfered(int)), this,
SLOT(allMailArrived(int)) );
mailconf = new Config("mailit");
//In case Synchronize is not defined in settings.txt
readSettings();
updateAccounts();
lineShift = "\n";
readMail();
lineShift = "\r\n";
mailboxView->setCurrentTab(0); //ensure that inbox has focus
/*channel = new QCopChannel( "QPE/Application/mailit", this );
connect( channel, SIGNAL(received(const QCString&, const QByteArray&)),
this, SLOT(receive(const QCString&, const QByteArray&)) );*/
}
EmailClient::~EmailClient()
{
//needs to be moved from destructor to closewindow event
saveMail(getPath(FALSE) + "inbox.txt", inboxView);
//does not currently work. Defining outbox in the same
//format as inbox is not a good solution as they have
//different properties
saveMail(getPath(FALSE) + "outbox.txt", outboxView);
saveSettings();
mailconf->write();
delete mailconf;
}
void EmailClient::init()
{
initStatusBar(this);
setToolBarsMovable(FALSE);
bar = new QToolBar(this);
QWhatsThis::add(bar,tr("Main operation toolbar"));
bar->setHorizontalStretchable( TRUE );
mb = new QMenuBar( bar );
QPopupMenu *mail = new QPopupMenu(mb);
mb->insertItem( tr( "&Mail" ), mail);
QPopupMenu *configure = new QPopupMenu(mb);
mb->insertItem( tr( "Accounts" ), configure);
selectAccountMenu = new QPopupMenu(mb);
editAccountMenu = new QPopupMenu(mb);
deleteAccountMenu = new QPopupMenu(mb);
mail->insertItem(tr("Get Mail in"), selectAccountMenu);
configure->insertItem(tr("Edit account"), editAccountMenu);
configure->insertItem(tr("Delete account"), deleteAccountMenu);
bar = new QToolBar(this);
getMailButton = new QToolButton(Resource::loadPixmap("mailit/getmail"),tr("getMail"),tr("select account"), this,SLOT(getAllNewMail()),bar);
QWhatsThis::add(getMailButton,tr("Click to download mail via all available accounts.\n Press and hold to select the desired account."));
getMailButton->setPopup(selectAccountMenu);
sendMailButton = new QAction(tr("Send mail"), Resource::loadPixmap("mailit/sendqueue"), QString::null, 0, this, 0);
connect(sendMailButton, SIGNAL(activated()), this, SLOT(sendQuedMail()) );
sendMailButton->addTo(bar);
sendMailButton->addTo(mail);
sendMailButton->setWhatsThis("Send mail queued in the outbox");
composeButton = new QAction(tr("Compose"), Resource::loadPixmap("new"), QString::null, 0, this, 0);
connect(composeButton, SIGNAL(activated()), this, SLOT(compose()) );
composeButton->addTo(bar);
composeButton->addTo(mail);
composeButton->setWhatsThis("Compose a new mail");
cancelButton = new QAction(tr("Cancel transfer"), Resource::loadPixmap("close"), QString::null, 0, this, 0);
connect(cancelButton, SIGNAL(activated()), this, SLOT(cancel()) );
cancelButton->addTo(mail);
cancelButton->addTo(bar);
cancelButton->setEnabled(FALSE);
cancelButton->setWhatsThis("Stop the currently active mail transfer");
deleteButton = new QAction( tr( "Delete" ), Resource::loadPixmap( "trash" ), QString::null, 0, this, 0 );
connect( deleteButton, SIGNAL( activated() ), this, SLOT( deleteItem() ) );
deleteButton->addTo(bar);
deleteButton->setWhatsThis("Remove the currently selected eMail(s)");
mailboxView = new OTabWidget( this, "mailboxView" );
QWidget* widget = new QWidget( mailboxView, "widget" );
grid_2 = new QGridLayout( widget );
// grid_2->setSpacing(6);
// grid_2->setMargin( 11 );
inboxView = new QListView( widget, "inboxView" );
inboxView->addColumn( tr( "From" ) );
inboxView->addColumn( tr( "Subject" ) );
inboxView->addColumn( tr( "Date" ) );
inboxView->setMinimumSize( QSize( 0, 0 ) );
inboxView->setAllColumnsShowFocus(TRUE);
QWhatsThis::add(inboxView,QWidget::tr("This is the inbox view.\n"
"It keeps the fetched mail which can be \n"
"viewed by double clicking the entry.\n"
"blue attachment icon shows whether this \n"
"mailhas attachments.\n"));
grid_2->addWidget( inboxView, 2, 0 );
mailboxView->addTab( widget, "mailit/inbox", tr( "Inbox" ) );
QWidget* widget_2 = new QWidget( mailboxView, "widget_2" );
grid_3 = new QGridLayout( widget_2 );
// grid_3->setSpacing(6);
// grid_3->setMargin( 11 );
outboxView = new QListView( widget_2, "outboxView" );
outboxView->addColumn( tr( "To" ) );
outboxView->addColumn( tr( "Subject" ) );
outboxView->setAllColumnsShowFocus(TRUE);
QWhatsThis::add(outboxView,QWidget::tr("This is the outbox view.\n"
"It keeps the queued mails to send which can be \n"
"reviewed by double clicking the entry."));
grid_3->addWidget( outboxView, 0, 0 );
mailboxView->addTab( widget_2,"mailit/outbox", tr( "Outbox" ) );
setCentralWidget(mailboxView);
}
void EmailClient::initStatusBar(QWidget* parent)
{
statusBar = new QStatusBar(parent);
statusBar->setSizeGripEnabled(FALSE);
status1Label = new QLabel( tr("Idle"), statusBar);
status2Label = new QLabel("", statusBar);
connect(emailHandler, SIGNAL(updatePopStatus(const QString &)),
status2Label, SLOT(setText(const QString &)) );
connect(emailHandler, SIGNAL(updateSmtpStatus(const QString &)),
status2Label, SLOT(setText(const QString &)) );
progressBar = new QProgressBar(statusBar);
connect(emailHandler, SIGNAL(mailboxSize(int)),
this, SLOT(setTotalSize(int)) );
connect(emailHandler, SIGNAL(currentMailSize(int)),
this, SLOT(setMailSize(int)) );
connect(emailHandler, SIGNAL(downloadedSize(int)),
this, SLOT(setDownloadedSize(int)) );
statusBar->addWidget(status1Label);
statusBar->addWidget(progressBar);
statusBar->addWidget(status2Label);
}
void EmailClient::compose()
{
emit composeRequested();
}
void EmailClient::cancel()
{
emailHandler->cancel();
}
AddressList* EmailClient::getAdrListRef()
{
return addressList;
}
//this needs to be rewritten to syncronize with outboxView
void EmailClient::enqueMail(const Email &mail)
{
if (accountList.count() == 0) {
QMessageBox::warning(qApp->activeWindow(),
tr("No account selected"), tr("You must create an account"), "OK\n");
return;
}
if (accountList.count() > 0) {
currentAccount = accountList.first();
qWarning("using account " + currentAccount->name);
}
Email addMail = mail;
addMail.from = currentAccount->name;
addMail.fromMail = currentAccount->emailAddress;
addMail.rawMail.prepend("From: " + addMail.from + "<" + addMail.fromMail + ">\n");
item = new EmailListItem(outboxView, addMail, false);
mailboxView->setCurrentTab(1);
}
void EmailClient::sendQuedMail()
{
int count = 0;
if (accountList.count() == 0) {
QMessageBox::warning(qApp->activeWindow(), "No account selected", "You must create an account", "OK\n");
return;
}
//traverse listview, find messages to send
if (! sending) {
item = (EmailListItem *) outboxView->firstChild();
if (item != NULL) {
while (item != NULL) {
quedMessages.append(item->getMail());
item = (EmailListItem *) item->nextSibling();
count++;
}
setMailAccount();
emailHandler->sendMail(&quedMessages);
sending = TRUE;
sendMailButton->setEnabled(FALSE);
cancelButton->setEnabled(TRUE);
} else {
qWarning("sendQuedMail(): no messages to send");
}
}
}
void EmailClient::setMailAccount()
{
emailHandler->setAccount(*currentAccount);
}
void EmailClient::mailSent()
{
sending = FALSE;
sendMailButton->setEnabled(TRUE);
quedMessages.clear();
outboxView->clear(); //should be moved to an sentBox
}
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);
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;
}
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 (!newMail.downloaded)
mailDownloadList.sizeInsert(newMail.serverId, newMail.size);*/
mailboxView->setCurrentTab(0);
}
-void EmailClient::allMailArrived(int count)
+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)
+void EmailClient::smtpError(int code, const QString & Msg)
{
QString temp;
- if (code == ErrUnknownResponse)
- temp = "Unknown response from server";
-
- if (code == QSocket::ErrHostNotFound)
- temp = "host not found";
- if (code == QSocket::ErrConnectionRefused)
- temp = "connection refused";
- if (code == QSocket::ErrSocketRead)
- temp = "socket packet error";
+ if (code == ErrUnknownResponse) {
+ temp = tr("<qt>Unknown response from server</qt>");
+ if( ! Msg.isEmpty() )
+ temp += Msg;
+ } else if (code == QSocket::ErrHostNotFound) {
+ temp = tr("<qt>host not found</qt>");
+ } else if (code == QSocket::ErrConnectionRefused) {
+ temp = tr("<qt>connection refused</qt>");
+ } else if (code == QSocket::ErrSocketRead) {
+ temp = tr("<qt>socket packet error</qt>");
+ }
if (code != ErrCancel) {
QMessageBox::warning(qApp->activeWindow(), "Sending error", temp, "OK\n");
} else {
status2Label->setText("Aborted by user");
}
sending = FALSE;
sendMailButton->setEnabled(TRUE);
cancelButton->setEnabled(FALSE);
quedMessages.clear();
}
-void EmailClient::popError(int code)
+void EmailClient::popError(int code, const QString & Msg)
{
QString temp;
- if (code == ErrUnknownResponse)
- temp = "Unknown response from server";
- if (code == ErrLoginFailed)
- temp = "Login failed\nCheck user name and password";
-
- if (code == QSocket::ErrHostNotFound)
- temp = "host not found";
- if (code == QSocket::ErrConnectionRefused)
- temp = "connection refused";
- if (code == QSocket::ErrSocketRead)
- temp = "socket packet error";
-
+ if (code == ErrUnknownResponse) {
+ temp = tr("<qt>Unknown response from server</qt>");
+ if( ! Msg.isEmpty() )
+ temp += Msg;
+ } else if (code == ErrLoginFailed) {
+ temp = tr("<qt>Login failed\nCheck user name and password</qt>");
+ } else if (code == QSocket::ErrHostNotFound) {
+ temp = tr("<qt>host not found</qt>");
+ } else if (code == QSocket::ErrConnectionRefused) {
+ temp = tr("<qt>connection refused</qt>");
+ } else if (code == QSocket::ErrSocketRead) {
+ temp = tr("<qt>socket packet error</qt>");
+ }
+
if (code != ErrCancel) {
- QMessageBox::warning(qApp->activeWindow(), "Receiving error", temp, "OK\n");
+ QMessageBox::warning(qApp->activeWindow(), tr("Receiving error"), temp, tr("OK\n"));
+
} else {
status2Label->setText("Aborted by user");
}
receiving = FALSE;
getMailButton->setEnabled(TRUE);
cancelButton->setEnabled(FALSE);
selectAccountMenu->setEnabled(TRUE);
}
void EmailClient::inboxItemSelected()
{
//killTimer(timerID);
item = (EmailListItem*) inboxView->selectedItem();
if (item != NULL) {
emit viewEmail(inboxView, item->getMail());
}
}
void EmailClient::outboxItemSelected()
{
//killTimer(timerID);
item = (EmailListItem*) outboxView->selectedItem();
if (item != NULL) {
emit viewEmail(outboxView, item->getMail());
}
}
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(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);
}
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
{
mailconf->writeEntry("Synchronize", "No");
}
}
mailconf->setGroup("mailitglobal");
mailconf->writeEntry("Accounts",acc_count);
mailconf->writeEntry("mailidcount", mailIdCount);
mailconf->writeEntry("accountidcount", accountIdCount);
}
void EmailClient::selectAccount(int id)
{
if (accountList.count() > 0) {
currentAccount = accountList.at(id);
emit newCaption("Mailit - " + currentAccount->accountName);
getNewMail();
} else {
emit newCaption("Mailit ! No account defined");
}
}
void EmailClient::editAccount(int id)
{
MailAccount *newAccount;
editAccountView = new EditAccount(this, "account", TRUE);
if (id == newAccountId) { //new account
newAccount = new MailAccount;
editAccountView->setAccount(newAccount);
} else {
newAccount = accountList.at(id);
editAccountView->setAccount(newAccount, FALSE);
}
editAccountView->showMaximized();
editAccountView->exec();
if (editAccountView->result() == QDialog::Accepted) {
if (id == newAccountId) {
newAccount->id = accountIdCount;
accountIdCount++;
accountList.append(newAccount);
updateAccounts();
} else {
updateAccounts();
}
}
delete editAccountView;
}
void EmailClient::deleteAccount(int id)
{
MailAccount *newAccount;
QString message;
newAccount = accountList.at(id);
message = "Delete account:\n" + newAccount->accountName;
switch( QMessageBox::warning( this, "Mailit", message,
"Yes", "No", 0, 0, 1 ) ) {
case 0: accountList.remove(id);
updateAccounts();
break;
case 1:
break;
}
}
void EmailClient::updateAccounts()
{
MailAccount *accountPtr;
//rebuild menus, clear all first
editAccountMenu->clear();
selectAccountMenu->clear();
deleteAccountMenu->clear();
newAccountId = editAccountMenu->insertItem("New", this,
SLOT(editAccount(int)) );
editAccountMenu->insertSeparator();
idCount = 0;
for (accountPtr = accountList.first(); accountPtr != 0;
accountPtr = accountList.next()) {
editAccountMenu->insertItem(accountPtr->accountName,
this, SLOT(editAccount(int)), 0, idCount);
selectAccountMenu->insertItem(accountPtr->accountName,
this, SLOT(selectAccount(int)), 0, idCount);
deleteAccountMenu->insertItem(accountPtr->accountName,
this, SLOT(deleteAccount(int)), 0, idCount);
idCount++;
}
}
void EmailClient::deleteMail(EmailListItem *mailItem, bool &inbox)
{
Email *mPtr;
Enclosure *ePtr;
if (inbox)
{
mPtr = mailItem->getMail();
//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::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;
+ // 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);
}
void EmailClient::inboxItemReleased()
{
// killTimer(timerID);
}
/*void EmailClient::timerEvent(QTimerEvent *e)
{
- /*killTimer(timerID);
+ //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;
}
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");
}
-void EmailClient::receive(const QCString& msg, const QByteArray& data)
+void EmailClient::receive(const QCString& /*msg*/, const QByteArray& /*data*/)
{
/*if (msg=="getMail()")
{
- /*QDialog qd(qApp->activeWindow(),"Getting mail",true);
+ //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 c98cfce..80c6d31 100644
--- a/noncore/net/mailit/emailclient.h
+++ b/noncore/net/mailit/emailclient.h
@@ -1,181 +1,181 @@
/**********************************************************************
** 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 EMAILCLIENT_H
#define EMAILCLIENT_H
#include <qlist.h>
#include <qcstring.h>
#include <qmainwindow.h>
#include <qtoolbar.h>
#include <qcheckbox.h>
#include <qlabel.h>
#include <qlineedit.h>
#include <qlistview.h>
#include <qaction.h>
#include <qlayout.h>
#include <qtooltip.h>
#include <qtoolbutton.h>
#include <qimage.h>
#include <qpixmap.h>
#include <qstringlist.h>
#include <qprogressbar.h>
#include <qstatusbar.h>
#include <qdir.h>
#include <stdlib.h>
#include <opie/otabwidget.h>
#include <qpe/qcopenvelope_qws.h>
#include <qtimer.h>
#include "emailhandler.h"
#include "emaillistitem.h"
#include "textparser.h"
#include "editaccount.h"
#include "maillist.h"
#include "addresslist.h"
#include <qpe/config.h>
class AccountList : public QList<MailAccount>
{
public:
Item newItem(Item d);
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 smtpError(int code, const QString & Msg );
+ void popError(int code, const QString & Msg);
void inboxItemSelected();
void outboxItemSelected();
void inboxItemPressed();
void inboxItemReleased();
void mailArrived(const Email &mail, bool fromDisk);
void allMailArrived(int);
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;
QStatusBar *statusBar;
QLabel *status1Label, *status2Label;
QToolButton *getMailButton;
QAction *sendMailButton;
QAction *composeButton;
QAction *cancelButton;
QAction *deleteButton;
//QToolButton *setAccountButton;
QMenuBar *mb;
QPopupMenu *selectAccountMenu;
QPopupMenu *editAccountMenu;
QPopupMenu *deleteAccountMenu;
QPopupMenu *setAccountMenu;
OTabWidget* mailboxView;
QListView* inboxView;
QListView* outboxView;
QGridLayout* grid_2;
QGridLayout* grid_3;
};
#endif // EMAILCLIENT_H
diff --git a/noncore/net/mailit/emailhandler.cpp b/noncore/net/mailit/emailhandler.cpp
index 39f693d..5b8bda1 100644
--- a/noncore/net/mailit/emailhandler.cpp
+++ b/noncore/net/mailit/emailhandler.cpp
@@ -1,549 +1,549 @@
/**********************************************************************
** 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");
smtpClient = new SmtpClient();
popClient = new PopClient();
- connect(smtpClient, SIGNAL(errorOccurred(int)), this,
- SIGNAL(smtpError(int)) );
+ connect(smtpClient, SIGNAL(errorOccurred(int, const QString &)), this,
+ SIGNAL(smtpError(int, const QString &)) );
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(errorOccurred(int, const QString &)), this,
+ SIGNAL(popError(int, const QString &)) );
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"));
}
}
smtpClient->newConnection(mailAccount.smtpServer, 25);
}
void EmailHandler::setAccount(MailAccount account)
{
mailAccount = account;
}
void EmailHandler::getMail()
{
popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd);
if (mailAccount.synchronize) {
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(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);
TextParser * lp = new TextParser(header, lineShift);
#define p (*lp)
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));
}
}
//
//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) );
}
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
}
if (boundary == "") { //fooled by Mime-Version
mail->body = body;
mail->bodyPlain = body;
delete lp;
return mail;
}
while (body.length() > 0) {
pos = body.find(boundary, 0, FALSE);
pos = body.find(delimiter, pos, FALSE);
mimeHeader = body.left(pos);
mimeBody = body.right(body.length() - pos - delimiter.length());
TextParser bp(mimeHeader, lineShift);
contentType = "";
contentAttribute = "";
fileName = "";
if ((pos = bp.find("CONTENT",'-', 0, TRUE)) != -1) {
pos++;
if ( (bp.wordAt(pos).upper() == "TYPE") &&
(bp.separatorAt(pos) == ':') ) {
contentType = bp.nextWord().upper();
if (bp.nextSeparator() == '/')
contentAttribute = bp.nextWord().upper();
content = contentType + "/" + contentAttribute;
}
if ((pos = bp.find("ENCODING",':', 0, TRUE)) != -1) {
pos++;
encoding = bp.getString(&pos, 'z', TRUE);
}
if ( (pos = bp.find("FILENAME",'=', 0, TRUE)) != -1) {
pos++;
fileName = bp.getString(&pos, 'z', TRUE);
fileName = fileName.right(fileName.length() - 1);
fileName = fileName.left(fileName.length() - 1);
}
}
pos = mimeBody.find(boundary, 0, FALSE);
if (pos == -1) //should not occur, malformed mail
pos = mimeBody.length();
body = mimeBody.right(mimeBody.length() - pos);
mimeBody = mimeBody.left(pos);
if (fileName != "") { //attatchments of some type, audio, image etc.
Enclosure e;
e.id = enclosureId;
e.originalName = fileName;
e.contentType = contentType;
e.contentAttribute = contentAttribute;
e.encoding = encoding;
e.body = mimeBody;
e.saved = FALSE;
mail->addEnclosure(&e);
enclosureId++;
} else if (contentType == "TEXT") {
if (contentAttribute == "PLAIN") {
mail->body = mimeBody;
mail->bodyPlain = mimeBody;
}
if (contentAttribute == "HTML") {
mail->body = mimeBody;
}
}
}
} else {
mail->bodyPlain = body;
mail->body = body;
}
delete lp;
return TRUE;
}
bool EmailHandler::getEnclosure(Enclosure *ePtr)
{
QFile f(ePtr->path + ePtr->name);
char src[4];
char *destPtr;
QByteArray buffer;
uint bufCount, pos, decodedCount, size, x;
if (! f.open(IO_WriteOnly) ) {
qWarning("could not save: " + ePtr->path + ePtr->name);
return FALSE;
}
if (ePtr->encoding.upper() == "BASE64") {
size = (ePtr->body.length() * 3 / 4); //approximate size (always above)
buffer.resize(size);
bufCount = 0;
pos = 0;
destPtr = buffer.data();
while (pos < ePtr->body.length()) {
decodedCount = 4;
x = 0;
while ( (x < 4) && (pos < ePtr->body.length()) ) {
src[x] = ePtr->body[pos].latin1();
pos++;
if (src[x] == '\r' || src[x] == '\n' || src[x] == ' ')
x--;
x++;
}
if (x > 1) {
decodedCount = parse64base(src, destPtr);
destPtr += decodedCount;
bufCount += decodedCount;
}
}
buffer.resize(bufCount); //set correct length of file
f.writeBlock(buffer);
} else {
QTextStream t(&f);
t << ePtr->body;
}
return TRUE;
}
int EmailHandler::parse64base(char *src, char *bufOut) {
char c, z;
char li[4];
int processed;
//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 + ">";
//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(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";
diff --git a/noncore/net/mailit/emailhandler.h b/noncore/net/mailit/emailhandler.h
index e4e7f46..74a8e4c 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;
};
class EnclosureList : public QList<Enclosure>
{
public:
Item newItem(Item d);
private:
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);
}
};
struct MailAccount
{
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;
class EmailHandler : public QObject
{
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(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 smtpError(int, const QString & Msg );
+ void popError(int, const QString & Msg );
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);
private:
MailAccount mailAccount;
SmtpClient *smtpClient;
PopClient *popClient;
bool headers;
};
#endif
diff --git a/noncore/net/mailit/mailit.pro b/noncore/net/mailit/mailit.pro
index cfbda36..5e9a83a 100644
--- a/noncore/net/mailit/mailit.pro
+++ b/noncore/net/mailit/mailit.pro
@@ -1,62 +1,63 @@
TEMPLATE = app
+TARGET = mailit
CONFIG = qt warn_on release
HEADERS = emailclient.h \
emailhandler.h \
emaillistitem.h \
mailitwindow.h \
md5.h \
popclient.h \
readmail.h \
smtpclient.h \
writemail.h \
textparser.h \
viewatt.h \
addatt.h \
editaccount.h \
maillist.h \
addresslist.h
SOURCES = emailclient.cpp \
emailhandler.cpp \
emaillistitem.cpp \
mailitwindow.cpp \
main.cpp \
md5.c \
popclient.cpp \
readmail.cpp \
smtpclient.cpp \
writemail.cpp \
textparser.cpp \
viewatt.cpp \
addatt.cpp \
editaccount.cpp \
maillist.cpp \
addresslist.cpp
INCLUDEPATH += $(OPIEDIR)/include
DEPENDPATH += $(OPIEDIR)/include
LIBS += -lqpe -lopie
# -lssl
MOC_DIR=qpeobj
OBJECTS_DIR=qpeobj
DESTDIR=$(OPIEDIR)/bin
TRANSLATIONS = ../../../i18n/de/mailit.ts \
../../../i18n/nl/mailit.ts \
../../../i18n/da/mailit.ts \
../../../i18n/xx/mailit.ts \
../../../i18n/it/mailit.ts \
../../../i18n/en/mailit.ts \
../../../i18n/es/mailit.ts \
../../../i18n/fr/mailit.ts \
../../../i18n/hu/mailit.ts \
../../../i18n/ja/mailit.ts \
../../../i18n/ko/mailit.ts \
../../../i18n/no/mailit.ts \
../../../i18n/pl/mailit.ts \
../../../i18n/pt/mailit.ts \
../../../i18n/pt_BR/mailit.ts \
../../../i18n/sl/mailit.ts \
../../../i18n/zh_CN/mailit.ts \
../../../i18n/zh_TW/mailit.ts
include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/net/mailit/mailitwindow.cpp b/noncore/net/mailit/mailitwindow.cpp
index f945a0f..6e298c7 100644
--- a/noncore/net/mailit/mailitwindow.cpp
+++ b/noncore/net/mailit/mailitwindow.cpp
@@ -1,168 +1,168 @@
/**********************************************************************
** 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 <qwhatsthis.h>
#include <qmessagebox.h>
#include "mailitwindow.h"
-MailItWindow::MailItWindow(QWidget *parent, const char *name, WFlags fl)
+MailItWindow::MailItWindow(QWidget *parent, const char *name, WFlags /*fl*/)
: QMainWindow(parent, name, WStyle_ContextHelp)
{
- currentCaption = "Mailit";
+ currentCaption = tr("Mailit");
setCaption(tr(currentCaption));
views = new QWidgetStack(this);
setCentralWidget(views);
QWhatsThis::add(views,tr("Central view area"));
emailClient = new EmailClient(views, "client");
writeMail = new WriteMail(views, "writing");
readMail = new ReadMail(views, "reading");
views->raiseWidget(emailClient);
connect(emailClient, SIGNAL(composeRequested()),
this, SLOT(compose()) );
connect(emailClient, SIGNAL(viewEmail(QListView *, Email *)), this,
SLOT(viewMail(QListView *, Email *)) );
connect(emailClient, SIGNAL(mailUpdated(Email *)), this,
SLOT(updateMailView(Email *)) );
connect(writeMail, SIGNAL(cancelMail()), this, SLOT(showEmailClient()) );
connect(writeMail, SIGNAL(sendMailRequested(const Email &)), this,
SLOT(showEmailClient()) );
connect(writeMail, SIGNAL(sendMailRequested(const Email &)), emailClient,
SLOT(enqueMail(const Email &)) );
connect(readMail, SIGNAL(cancelView()), this, SLOT(showEmailClient()) );
connect(readMail, SIGNAL(replyRequested(Email &, bool&)), this,
SLOT(composeReply(Email &, bool&)) );
connect(readMail, SIGNAL(forwardRequested(Email &)), this,
SLOT(composeForward(Email &)) );
connect(readMail, SIGNAL(removeItem(EmailListItem *, bool &)), emailClient,
SLOT(deleteMail(EmailListItem *, bool &)) );
connect(readMail, SIGNAL(viewingMail(Email *)), emailClient,
SLOT(moveMailFront(Email *)) );
connect(emailClient, SIGNAL(newCaption(const QString &)),
this, SLOT(updateCaption(const QString &)) );
connect(readMail, SIGNAL(download(Email *)), emailClient, SLOT(download(Email*)) );
viewingMail = FALSE;
}
MailItWindow::~MailItWindow()
{
}
void MailItWindow::closeEvent(QCloseEvent *e)
{
if (views->visibleWidget() == emailClient) {
e->accept();
} else {
showEmailClient();
}
}
void MailItWindow::compose()
{
viewingMail = FALSE;
emailClient->hide();
readMail->hide();
views->raiseWidget(writeMail);
writeMail->setAddressList(emailClient->getAdrListRef());
writeMail->newMail();
setCaption( tr( "Write mail" ) );
}
void MailItWindow::composeReply(Email &mail, bool& replyAll)
{
compose();
writeMail->reply(mail,replyAll) ;
}
void MailItWindow::composeForward(Email &mail)
{
compose();
writeMail->forward(mail) ;
}
void MailItWindow::showEmailClient()
{
viewingMail = FALSE;
writeMail->hide();
readMail->hide();
views->raiseWidget(emailClient);
setCaption( tr(currentCaption) );
}
void MailItWindow::viewMail(QListView *view, Email *mail)
{
viewingMail = TRUE;
emailClient->hide();
int result=0;
if ((mail->received)&&(!mail->downloaded))
{
QMessageBox mb( tr("Mail not downloaded"),
tr("The mail you have clicked \n"
"has not been downloaded yet.\n "
"Would you like to do it now ?"),
QMessageBox::Information,
QMessageBox::Yes | QMessageBox::Default,
QMessageBox::No | QMessageBox::Escape,0 );
result=mb.exec();
if (result==QMessageBox::Yes)
{
emailClient->download(mail);
}
}
readMail->update(view, mail);
views->raiseWidget(readMail);
setCaption( tr( "Read Mail" ) );
}
void MailItWindow::updateMailView(Email *mail)
{
if (viewingMail) {
readMail->mailUpdated(mail);
}
}
void MailItWindow::updateCaption(const QString &newCaption)
{
currentCaption = newCaption;
setCaption(tr(currentCaption));
}
void MailItWindow::setDocument(const QString &_address)
{
// strip leading 'mailto:'
QString address = _address;
if (address.startsWith("mailto:"))
address = address.mid(6);
compose();
writeMail->setRecipient(address);
}
diff --git a/noncore/net/mailit/maillist.cpp b/noncore/net/mailit/maillist.cpp
index b5325a9..8c34295 100644
--- a/noncore/net/mailit/maillist.cpp
+++ b/noncore/net/mailit/maillist.cpp
@@ -1,131 +1,131 @@
/**********************************************************************
** 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 "maillist.h"
void MailList::clear()
{
- sortedList.setAutoDelete(TRUE);
- sortedList.clear();
- currentPos = 0;
+ sortedList.setAutoDelete(TRUE);
+ sortedList.clear();
+ currentPos = 0;
}
int MailList::count()
{
- return sortedList.count();
+ return sortedList.count();
}
int* MailList::first()
{
- dList *mPtr;
-
- if (sortedList.count() == 0)
- return NULL;
-
- mPtr = sortedList.at(0);
- currentPos = 1;
- return &(mPtr->serverId);
+ dList *mPtr;
+
+ if (sortedList.count() == 0)
+ return NULL;
+
+ mPtr = sortedList.at(0);
+ currentPos = 1;
+ return &(mPtr->serverId);
}
int* MailList::next()
{
- dList *mPtr;
-
- if ( (currentPos) >= sortedList.count())
- return NULL;
-
- mPtr = sortedList.at(currentPos);
- currentPos++;
- return &(mPtr->serverId);
+ dList *mPtr;
+
+ if ( (currentPos) >= sortedList.count())
+ return NULL;
+
+ mPtr = sortedList.at(currentPos);
+ currentPos++;
+ return &(mPtr->serverId);
}
void MailList::sizeInsert(int serverId, uint size)
{
- dList *tempPtr;
- int x;
-
- dList *newEntry = new dList;
- newEntry->serverId = serverId;
- newEntry->size = size;
-
- for (tempPtr = sortedList.first(); tempPtr != NULL; tempPtr = sortedList.next() ) {
- if (newEntry->size < tempPtr->size) {
- x = sortedList.at();
- sortedList.insert(x, newEntry);
- return;
- }
- }
- sortedList.append(newEntry);
+ dList *tempPtr;
+ int x;
+
+ dList *newEntry = new dList;
+ newEntry->serverId = serverId;
+ newEntry->size = size;
+
+ for (tempPtr = sortedList.first(); tempPtr != NULL; tempPtr = sortedList.next() ) {
+ if (newEntry->size < tempPtr->size) {
+ x = sortedList.at();
+ sortedList.insert(x, newEntry);
+ return;
+ }
+ }
+ sortedList.append(newEntry);
}
-void MailList::moveFront(int serverId, uint size)
+void MailList::moveFront(int serverId, uint/* size*/)
{
- dList *currentPtr;
- uint tempPos;
- QString temp;
-
- tempPos = currentPos;
- if ( tempPos >= sortedList.count() )
- return;
- currentPtr = sortedList.at(tempPos);
- while ( ((tempPos+1) < sortedList.count()) && ( currentPtr->serverId != serverId) ) {
- tempPos++;
- currentPtr = sortedList.at(tempPos);
- }
-
- if ( (currentPtr != NULL) && (currentPtr->serverId == serverId) ) {
- temp.setNum(currentPtr->serverId);
- qWarning("moved to front, message: " + temp);
-
- dList *itemPtr = sortedList.take(tempPos);
- sortedList.insert(currentPos, itemPtr);
- }
+ dList *currentPtr;
+ uint tempPos;
+ QString temp;
+
+ tempPos = currentPos;
+ if ( tempPos >= sortedList.count() )
+ return;
+ currentPtr = sortedList.at(tempPos);
+ while ( ((tempPos+1) < sortedList.count()) && ( currentPtr->serverId != serverId) ) {
+ tempPos++;
+ currentPtr = sortedList.at(tempPos);
+ }
+
+ if ( (currentPtr != NULL) && (currentPtr->serverId == serverId) ) {
+ temp.setNum(currentPtr->serverId);
+ qWarning("moved to front, message: " + temp);
+
+ dList *itemPtr = sortedList.take(tempPos);
+ sortedList.insert(currentPos, itemPtr);
+ }
}
//only works if mail is not already in download
-bool MailList::remove(int serverId, uint size)
+bool MailList::remove(int serverId, uint /*size*/)
{
- dList *currentPtr;
- uint tempPos;
- QString temp;
-
- tempPos = currentPos;
- if ( tempPos >=sortedList.count() )
- return FALSE;
- currentPtr = sortedList.at(tempPos);
- while ( ((tempPos + 1) < sortedList.count()) && ( currentPtr->serverId != serverId) ) {
- tempPos++;
- currentPtr = sortedList.at(tempPos);
- }
-
- if ( (currentPtr != NULL) && (currentPtr->serverId == serverId) ) {
- temp.setNum(currentPtr->serverId);
- qWarning("deleted message: " + temp);
- sortedList.remove(tempPos);
-
- return TRUE;
- }
- return FALSE;
+ dList *currentPtr;
+ uint tempPos;
+ QString temp;
+
+ tempPos = currentPos;
+ if ( tempPos >=sortedList.count() )
+ return FALSE;
+ currentPtr = sortedList.at(tempPos);
+ while ( ((tempPos + 1) < sortedList.count()) && ( currentPtr->serverId != serverId) ) {
+ tempPos++;
+ currentPtr = sortedList.at(tempPos);
+ }
+
+ if ( (currentPtr != NULL) && (currentPtr->serverId == serverId) ) {
+ temp.setNum(currentPtr->serverId);
+ qWarning("deleted message: " + temp);
+ sortedList.remove(tempPos);
+
+ return TRUE;
+ }
+ return FALSE;
}
-void MailList::insert(int pos, int serverId, uint size)
+void MailList::insert(int /*pos*/, int /*serverId*/, uint/* size*/)
{
-// sortedList.insert(pos, mPtr);
+// sortedList.insert(pos, mPtr);
}
diff --git a/noncore/net/mailit/popclient.cpp b/noncore/net/mailit/popclient.cpp
index dc0116d..5da3bcb 100644
--- a/noncore/net/mailit/popclient.cpp
+++ b/noncore/net/mailit/popclient.cpp
@@ -1,327 +1,331 @@
/**********************************************************************
** 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 "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(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");
+ emit updateStatus(tr("DNS lookup"));
}
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)
{
+ errorHandlingWithMsg( status, QString::null );
+}
+void PopClient::errorHandlingWithMsg(int status, const QString & Msg )
+{
emit updateStatus(tr("Error Occured"));
- emit errorOccurred(status);
+ emit errorOccurred(status, Msg);
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;
break;
}
//ask for number of messages
case Stat: {
if (response[0] == '+') {
*stream << "STAT" << "\r\n";
status = Mcnt;
- } else errorHandling(ErrLoginFailed);
+ } else errorHandlingWithMsg(ErrLoginFailed, response);
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;
messageCount = 1;
}
if (selected) {
int *ptr = mailList->first();
if (ptr != 0) {
newMessages++; //to ensure no early jumpout
messageCount = *ptr;
} else newMessages = 0;
}
- } else errorHandling(ErrUnknownResponse);
+ } else errorHandlingWithMsg(ErrUnknownResponse, response);
}
//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);
+ errorHandlingWithMsg(ErrUnknownResponse, response);
}
}
}
//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";
}
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);
+ } else errorHandlingWithMsg(ErrUnknownResponse, response);
}
}
//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);
} else { //incomplete mail downloaded
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 c58bc48..6774ceb 100644
--- a/noncore/net/mailit/popclient.h
+++ b/noncore/net/mailit/popclient.h
@@ -1,76 +1,77 @@
/**********************************************************************
** 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(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 errorOccurred(int status, const QString & Msg );
void updateStatus(const QString &);
void mailTransfered(int);
void mailboxSize(int);
void currentMailSize(int);
void downloadedSize(int);
public slots:
void errorHandling(int);
+ void errorHandlingWithMsg(int, const QString & );
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 2916f45..5b5ef52 100644
--- a/noncore/net/mailit/smtpclient.cpp
+++ b/noncore/net/mailit/smtpclient.cpp
@@ -1,163 +1,170 @@
/**********************************************************************
** 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(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(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);
+ errorHandlingWithMsg( status, QString::null );
+}
+
+void SmtpClient::errorHandlingWithMsg(int status, const QString & EMsg )
+{
+ emit errorOccurred(status, EMsg );
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);
+ } else errorHandlingWithMsg(ErrUnknownResponse,response);
break;
}
case From: {
if (response[0] == '2') {
- *stream << "MAIL FROM: " << mailPtr->from << "\r\n";
+ qDebug(mailPtr->from);
+ *stream << "MAIL FROM: <" << mailPtr->from << ">\r\n";
status = Recv;
- } else errorHandling(ErrUnknownResponse);
+ } else errorHandlingWithMsg(ErrUnknownResponse, response );
break;
}
case Recv: {
- if (response[0] == '2') {
+ if (response[0] == '2') {
it = mailPtr->to.begin();
- if (it == NULL)
- errorHandling(ErrUnknownResponse);
- *stream << "RCPT TO: " << *it << ">\r\n";
+ if (it == NULL) {
+ errorHandlingWithMsg(ErrUnknownResponse,response);
+ }
+ *stream << "RCPT TO: <" << *it << ">\r\n";
status = MRcv;
- } else errorHandling(ErrUnknownResponse);
+ } else errorHandlingWithMsg(ErrUnknownResponse,response);
break;
}
case MRcv: {
if (response[0] == '2') {
it++;
if ( it != mailPtr->to.end() ) {
*stream << "RCPT TO: <" << *it << ">\r\n";
break;
} else {
status = Data;
}
- } else errorHandling(ErrUnknownResponse);
+ } else errorHandlingWithMsg(ErrUnknownResponse,response);
}
case Data: {
if (response[0] == '2') {
*stream << "DATA\r\n";
status = Body;
emit updateStatus(tr("Sending: ") + mailPtr->subject);
- } else errorHandling(ErrUnknownResponse);
+
+ } else errorHandlingWithMsg(ErrUnknownResponse,response);
break;
}
case Body: {
if (response[0] == '3') {
*stream << mailPtr->body << "\r\n.\r\n";
mailPtr = mailList.next();
if (mailPtr != NULL) {
status = From;
} else {
status = Quit;
}
- } else errorHandling(ErrUnknownResponse);
+ } else errorHandlingWithMsg(ErrUnknownResponse,response);
break;
}
case Quit: {
if (response[0] == '2') {
*stream << "QUIT\r\n";
status = Done;
QString temp;
temp.setNum(mailList.count());
emit updateStatus(tr("Sent ") + temp + tr(" messages"));
emit mailSent();
mailList.clear();
sending = FALSE;
socket->close();
- } else errorHandling(ErrUnknownResponse);
+ } else errorHandlingWithMsg(ErrUnknownResponse,response);
break;
}
}
}
diff --git a/noncore/net/mailit/smtpclient.h b/noncore/net/mailit/smtpclient.h
index 45c0703..554ba3f 100644
--- a/noncore/net/mailit/smtpclient.h
+++ b/noncore/net/mailit/smtpclient.h
@@ -1,75 +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 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;
};
class SmtpClient: public QObject
{
Q_OBJECT
public:
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 errorOccurred(int, const QString & LR );
void updateStatus(const QString &);
void mailSent();
public slots:
void errorHandling(int);
+ void errorHandlingWithMsg(int, const QString & LastResponse );
protected slots:
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;
};
#endif
diff --git a/noncore/net/mailit/viewatt.cpp b/noncore/net/mailit/viewatt.cpp
index 21885c2..293e137 100644
--- a/noncore/net/mailit/viewatt.cpp
+++ b/noncore/net/mailit/viewatt.cpp
@@ -1,121 +1,121 @@
/**********************************************************************
** 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 "resource.h"
#include "viewatt.h"
#include <qwhatsthis.h>
#include <qpe/applnk.h>
#include <qpe/mimetype.h>
ViewAtt::ViewAtt(QWidget *parent, const char *name, WFlags f)
: QMainWindow(parent, name, f)
{
- setCaption("Exploring attatchments");
+ setCaption(tr("Exploring attatchments"));
setToolBarsMovable( FALSE );
bar = new QToolBar(this);
installButton = new QAction( tr( "Install" ), Resource::loadPixmap( "exec" ), QString::null, CTRL + Key_C, this, 0 );
connect(installButton, SIGNAL(activated()), this, SLOT(install()) );
installButton->setWhatsThis(tr("Click here to install the attachment to your Documents"));
listView = new QListView(this, "AttView");
- listView->addColumn( "Attatchment" );
- listView->addColumn( "Type" );
- listView->addColumn( "Installed" );
+ listView->addColumn( tr("Attatchment") );
+ listView->addColumn( tr("Type") );
+ listView->addColumn( tr("Installed") );
setCentralWidget(listView);
QWhatsThis::add(listView,QWidget::tr("This is an overview about all attachments in the mail"));
}
void ViewAtt::update(Email *mailIn, bool inbox)
{
QListViewItem *item;
Enclosure *ePtr;
listView->clear();
if (inbox) {
bar->clear();
installButton->addTo( bar );
bar->show();
} else {
bar->hide();
}
mail = mailIn;
for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) {
- QString isInstalled = "No";
+ QString isInstalled = tr("No");
if (ePtr->installed)
- isInstalled = "Yes";
+ isInstalled = tr("Yes");
item = new QListViewItem(listView, ePtr->originalName, ePtr->contentType, isInstalled);
const QString& mtypeDef=(const QString&) ePtr->contentType+"/"+ePtr->contentAttribute;
MimeType mt(mtypeDef);
item->setPixmap(0, mt.pixmap());
/*
if (ePtr->contentType == "TEXT") {
actions = new QAction( tr("View"), Resource::loadPixmap("TextEditor"), QString::null, CTRL + Key_C, this, 0);
actions->addTo(bar);
}
if (ePtr->contentType == "AUDIO") {
actions = new QAction( tr("Play"), Resource::loadPixmap("SoundPlayer"), QString::null, CTRL + Key_C, this, 0);
actions->addTo(bar);
item->setPixmap(0, Resource::loadPixmap("play"));
}
if (ePtr->contentType == "IMAGE") {
actions = new QAction( tr("Show"), Resource::loadPixmap("pixmap"), QString::null, CTRL + Key_C, this, 0);
actions->addTo(bar);
item->setPixmap(0, Resource::loadPixmap("pixmap"));
}*/
}
}
void ViewAtt::install()
{
Enclosure *ePtr, *selPtr;
QListViewItem *item;
QString filename;
DocLnk d;
item = listView->selectedItem();
if (item != NULL) {
filename = item->text(0);
selPtr = NULL;
for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) {
if (ePtr->originalName == filename)
selPtr = ePtr;
}
if (selPtr == NULL) {
qWarning("Internal error, file is not installed to documents");
return;
}
d.setName(selPtr->originalName);
d.setFile(selPtr->path + selPtr->name);
d.setType(selPtr->contentType + "/" + selPtr->contentAttribute);
d.writeLink();
selPtr->installed = TRUE;
- item->setText(2, "Yes");
+ item->setText(2, tr("Yes"));
}
}
diff --git a/noncore/net/mailit/writemail.cpp b/noncore/net/mailit/writemail.cpp
index 0298cb3..26b9660 100644
--- a/noncore/net/mailit/writemail.cpp
+++ b/noncore/net/mailit/writemail.cpp
@@ -1,402 +1,402 @@
/**********************************************************************
** 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 <qmessagebox.h>
#include <qwhatsthis.h>
#include "writemail.h"
#include <qpe/resource.h>
WriteMail::WriteMail( QWidget* parent, const char* name, WFlags fl ):QMainWindow( parent, name, fl )
{
- showingAddressList = FALSE;
- init();
-
- addAtt = new AddAtt(0, "Add Attachments");
+ showingAddressList = FALSE;
+ init();
+
+ addAtt = new AddAtt(0, "Add Attachments");
}
WriteMail::~WriteMail()
{
- delete addAtt;
+ delete addAtt;
}
void WriteMail::setAddressList(AddressList *list)
{
- AContact *cPtr;
-
- addressList = list;
-
- addressView->clear();
- QList<AContact> *cListPtr = addressList->getContactList();
- QListViewItem *item;
- for (cPtr = cListPtr->first(); cPtr != 0; cPtr = cListPtr->next() ) {
- item = new QListViewItem(addressView, cPtr->name, cPtr->email);
- }
+ AContact *cPtr;
+
+ addressList = list;
+
+ addressView->clear();
+ QList<AContact> *cListPtr = addressList->getContactList();
+ QListViewItem *item;
+ for (cPtr = cListPtr->first(); cPtr != 0; cPtr = cListPtr->next() ) {
+ item = new QListViewItem(addressView, cPtr->name, cPtr->email);
+ }
}
void WriteMail::init()
{
- setToolBarsMovable(FALSE);
-
- bar = new QToolBar(this);
- bar->setHorizontalStretchable( TRUE );
+ setToolBarsMovable(FALSE);
+
+ bar = new QToolBar(this);
+ bar->setHorizontalStretchable( TRUE );
- menu = new QMenuBar( bar );
+ menu = new QMenuBar( bar );
- mailMenu = new QPopupMenu(menu);
- menu->insertItem( tr( "&Mail" ), mailMenu);
- addMenu = new QPopupMenu(menu);
- menu->insertItem( tr( "&Add" ), addMenu);
-
- bar = new QToolBar(this);
- attachButton = new QAction(tr("Attachment"), Resource::loadPixmap("mailit/attach"), QString::null, 0, this, 0);
- attachButton->addTo(bar);
- attachButton->addTo(addMenu);
- connect( attachButton, SIGNAL( activated() ), this, SLOT( attachFile() ) );
- attachButton->setWhatsThis(tr("Click here to attach files to your mail"));
-
- confirmButton = new QAction(tr("Enque mail"), Resource::loadPixmap("OKButton"), QString::null, 0, this, 0);
- confirmButton->addTo(bar);
- confirmButton->addTo(mailMenu);
- connect( confirmButton, SIGNAL( activated() ), this, SLOT( accept() ) );
- confirmButton->setWhatsThis(tr("This button puts your mail in the send queue"));
-
- newButton = new QAction(tr("New mail"), Resource::loadPixmap("new"), QString::null, 0, this, 0);
- newButton->addTo(mailMenu);
- connect( newButton, SIGNAL( activated() ), this, SLOT( newMail() ) );
- newButton->setWhatsThis(tr("Click here to create a new mail"));
+ mailMenu = new QPopupMenu(menu);
+ menu->insertItem( tr( "&Mail" ), mailMenu);
+ addMenu = new QPopupMenu(menu);
+ menu->insertItem( tr( "&Add" ), addMenu);
+
+ bar = new QToolBar(this);
+ attachButton = new QAction(tr("Attachment"), Resource::loadPixmap("mailit/attach"), QString::null, 0, this, 0);
+ attachButton->addTo(bar);
+ attachButton->addTo(addMenu);
+ connect( attachButton, SIGNAL( activated() ), this, SLOT( attachFile() ) );
+ attachButton->setWhatsThis(tr("Click here to attach files to your mail"));
+
+ confirmButton = new QAction(tr("Enque mail"), Resource::loadPixmap("OKButton"), QString::null, 0, this, 0);
+ confirmButton->addTo(bar);
+ confirmButton->addTo(mailMenu);
+ connect( confirmButton, SIGNAL( activated() ), this, SLOT( accept() ) );
+ confirmButton->setWhatsThis(tr("This button puts your mail in the send queue"));
+
+ newButton = new QAction(tr("New mail"), Resource::loadPixmap("new"), QString::null, 0, this, 0);
+ newButton->addTo(mailMenu);
+ connect( newButton, SIGNAL( activated() ), this, SLOT( newMail() ) );
+ newButton->setWhatsThis(tr("Click here to create a new mail"));
- widget = new QWidget(this, "widget");
- grid = new QGridLayout( widget );
+ widget = new QWidget(this, "widget");
+ grid = new QGridLayout( widget );
- recipientsBox = new QComboBox( FALSE, widget, "toLabel" );
- recipientsBox->insertItem( tr( "To:" ) );
- recipientsBox->insertItem( tr( "CC:" ) );
- recipientsBox->setCurrentItem(0);
- grid->addWidget( recipientsBox, 0, 0 );
- connect(recipientsBox,SIGNAL(activated(int)),this, SLOT(changeRecipients(int)));
-
- subjetLabel = new QLabel( widget, "subjetLabel" );
- subjetLabel->setText( tr( "Subject:" ) );
+ recipientsBox = new QComboBox( FALSE, widget, "toLabel" );
+ recipientsBox->insertItem( tr( "To:" ) );
+ recipientsBox->insertItem( tr( "CC:" ) );
+ recipientsBox->setCurrentItem(0);
+ grid->addWidget( recipientsBox, 0, 0 );
+ connect(recipientsBox,SIGNAL(activated(int)),this, SLOT(changeRecipients(int)));
+
+ subjetLabel = new QLabel( widget, "subjetLabel" );
+ subjetLabel->setText( tr( "Subject:" ) );
- grid->addWidget( subjetLabel, 1, 0 );
+ grid->addWidget( subjetLabel, 1, 0 );
- ToolButton13_2 = new QToolButton( widget, "ToolButton13_2" );
- ToolButton13_2->setText( tr( "..." ) );
- grid->addWidget( ToolButton13_2, 1, 2 );
+ ToolButton13_2 = new QToolButton( widget, "ToolButton13_2" );
+ ToolButton13_2->setText( tr( "..." ) );
+ grid->addWidget( ToolButton13_2, 1, 2 );
- subjectInput = new QLineEdit( widget, "subjectInput" );
- grid->addWidget( subjectInput, 1, 1 );
- QWhatsThis::add(subjectInput,QWidget::tr("The mail subject should be entered here"));
+ subjectInput = new QLineEdit( widget, "subjectInput" );
+ grid->addWidget( subjectInput, 1, 1 );
+ QWhatsThis::add(subjectInput,QWidget::tr("The mail subject should be entered here"));
- toInput = new QLineEdit( widget, "toInput" );
- grid->addWidget( toInput, 0, 1 );
- QWhatsThis::add(recipientsBox,QWidget::tr("Recipients can be entered here"));
+ toInput = new QLineEdit( widget, "toInput" );
+ grid->addWidget( toInput, 0, 1 );
+ QWhatsThis::add(recipientsBox,QWidget::tr("Recipients can be entered here"));
- ccInput = new QLineEdit( widget, "ccInput" );
- ccInput->hide();
- grid->addWidget( ccInput, 0, 1 );
- QWhatsThis::add(ccInput,QWidget::tr("If you would like to send copies of your mail they can be entered here"));
+ ccInput = new QLineEdit( widget, "ccInput" );
+ ccInput->hide();
+ grid->addWidget( ccInput, 0, 1 );
+ QWhatsThis::add(ccInput,QWidget::tr("If you would like to send copies of your mail they can be entered here"));
- addressButton = new QToolButton( widget, "addressButton" );
- addressButton->setPixmap( Resource::loadPixmap("AddressBook") );
- addressButton->setToggleButton(TRUE);
- grid->addWidget( addressButton, 0, 2 );
- connect(addressButton, SIGNAL(clicked()), this, SLOT(getAddress()) );
- QWhatsThis::add(addressButton,QWidget::tr("This button opens the address selector with all mail adresses from your OPIE addressbook"));
+ addressButton = new QToolButton( widget, "addressButton" );
+ addressButton->setPixmap( Resource::loadPixmap("AddressBook") );
+ addressButton->setToggleButton(TRUE);
+ grid->addWidget( addressButton, 0, 2 );
+ connect(addressButton, SIGNAL(clicked()), this, SLOT(getAddress()) );
+ QWhatsThis::add(addressButton,QWidget::tr("This button opens the address selector with all mail adresses from your Opie addressbook"));
- emailInput = new QMultiLineEdit( widget, "emailInput" );
- grid->addMultiCellWidget( emailInput, 2, 2, 0, 2);
- QWhatsThis::add(emailInput,QWidget::tr("Enter your mail text here"));
+ emailInput = new QMultiLineEdit( widget, "emailInput" );
+ grid->addMultiCellWidget( emailInput, 2, 2, 0, 2);
+ QWhatsThis::add(emailInput,QWidget::tr("Enter your mail text here"));
- addressView = new QListView( widget, "addressView");
- addressView->addColumn("Name");
- addressView->addColumn("EMail");
- addressView->setAllColumnsShowFocus(TRUE);
- addressView->setMultiSelection(TRUE);
- addressView->hide();
- grid->addMultiCellWidget( addressView, 3, 3, 0, 2);
- QWhatsThis::add(recipientsBox,QWidget::tr("Choose the recipients from this list"));
+ addressView = new QListView( widget, "addressView");
+ addressView->addColumn(tr("Name"));
+ addressView->addColumn(tr("EMail") );
+ addressView->setAllColumnsShowFocus(TRUE);
+ addressView->setMultiSelection(TRUE);
+ addressView->hide();
+ grid->addMultiCellWidget( addressView, 3, 3, 0, 2);
+ QWhatsThis::add(recipientsBox,QWidget::tr("Choose the recipients from this list"));
- okButton = new QToolButton(bar, "ok");
- okButton->setPixmap( Resource::loadPixmap("enter") );
- okButton->hide();
- connect(okButton, SIGNAL(clicked()), this, SLOT(addRecipients()) );
- QWhatsThis::add(okButton,QWidget::tr("Queue your mail by clicking here"));
-
- setCentralWidget(widget);
+ okButton = new QToolButton(bar, "ok");
+ okButton->setPixmap( Resource::loadPixmap("enter") );
+ okButton->hide();
+ connect(okButton, SIGNAL(clicked()), this, SLOT(addRecipients()) );
+ QWhatsThis::add(okButton,QWidget::tr("Queue your mail by clicking here"));
+
+ setCentralWidget(widget);
}
void WriteMail::reject()
{
- emit cancelMail();
+ emit cancelMail();
}
void WriteMail::accept()
{
- QStringList attachedFiles, attachmentsType;
- int idCount = 0;
-
- if (toInput->text() == "")
- {
- QMessageBox::warning(this,tr("No recipient"), tr("Send mail to whom?"), tr("OK\n"));
- return;
- }
-
- if (! getRecipients(false) )
- {
- QMessageBox::warning(this,tr("Incorrect recipient separator"),
- tr("Recipients must be separated by ;\nand be valid emailaddresses"), tr("OK\n"));
- return;
- }
-
- if ((ccInput->text()!="") && (! getRecipients(true) ))
- {
- QMessageBox::warning(this,tr("Incorrect carbon copy separator"),
- tr("CC Recipients must be separated by ;\nand be valid emailaddresses"), tr("OK\n"));
- return;
- }
-
- mail.subject = subjectInput->text();
- mail.body = emailInput->text();
- mail.sent = false;
- mail.received = false;
-
- mail.rawMail = "To: ";
-
- for (QStringList::Iterator it = mail.recipients.begin();
- it != mail.recipients.end(); ++it) {
-
- mail.rawMail += (*it);
- mail.rawMail += ",\n";
- }
-
- mail.rawMail.truncate(mail.rawMail.length()-2);
-
- mail.rawMail += "\nCC: ";
-
- for (QStringList::Iterator it = mail.carbonCopies.begin();
- it != mail.carbonCopies.end(); ++it) {
-
- mail.rawMail += (*it);
- mail.rawMail += ",\n";
- }
+ QStringList attachedFiles, attachmentsType;
+ int idCount = 0;
+
+ if (toInput->text() == "")
+ {
+ QMessageBox::warning(this,tr("No recipient"), tr("Send mail to whom?"), tr("OK\n"));
+ return;
+ }
+
+ if (! getRecipients(false) )
+ {
+ QMessageBox::warning(this,tr("Incorrect recipient separator"),
+ tr("Recipients must be separated by ;\nand be valid emailaddresses"), tr("OK\n"));
+ return;
+ }
+
+ if ((ccInput->text()!="") && (! getRecipients(true) ))
+ {
+ QMessageBox::warning(this,tr("Incorrect carbon copy separator"),
+ tr("CC Recipients must be separated by ;\nand be valid emailaddresses"), tr("OK\n"));
+ return;
+ }
+
+ mail.subject = subjectInput->text();
+ mail.body = emailInput->text();
+ mail.sent = false;
+ mail.received = false;
+
+ mail.rawMail = "To: ";
+
+ for (QStringList::Iterator it = mail.recipients.begin();
+ it != mail.recipients.end(); ++it) {
+
+ mail.rawMail += (*it);
+ mail.rawMail += ",\n";
+ }
+
+ mail.rawMail.truncate(mail.rawMail.length()-2);
+
+ mail.rawMail += "\nCC: ";
+
+ for (QStringList::Iterator it = mail.carbonCopies.begin();
+ it != mail.carbonCopies.end(); ++it) {
+
+ mail.rawMail += (*it);
+ mail.rawMail += ",\n";
+ }
- mail.rawMail += mail.from;
- mail.rawMail += "\nSubject: ";
- mail.rawMail += mail.subject;
- mail.rawMail += "\n\n";
-
- attachedFiles = addAtt->returnattachedFiles();
- attachmentsType = addAtt->returnFileTypes();
+ mail.rawMail += mail.from;
+ mail.rawMail += "\nSubject: ";
+ mail.rawMail += mail.subject;
+ mail.rawMail += "\n\n";
+
+ attachedFiles = addAtt->returnattachedFiles();
+ attachmentsType = addAtt->returnFileTypes();
- QStringList::Iterator itType = attachmentsType.begin();
-
- Enclosure e;
- for ( QStringList::Iterator it = attachedFiles.begin(); it != attachedFiles.end(); ++it ) {
- e.id = idCount;
- e.originalName = (*it).latin1();
- e.contentType = (*itType).latin1();
- e.contentAttribute = (*itType).latin1();
- e.saved = TRUE;
- mail.addEnclosure(&e);
-
- itType++;
- idCount++;
- }
- mail.rawMail += mail.body;
- mail.rawMail += "\n";
- mail.rawMail += ".\n";
- emit sendMailRequested(mail);
- addAtt->clear();
+ QStringList::Iterator itType = attachmentsType.begin();
+
+ Enclosure e;
+ for ( QStringList::Iterator it = attachedFiles.begin(); it != attachedFiles.end(); ++it ) {
+ e.id = idCount;
+ e.originalName = (*it).latin1();
+ e.contentType = (*itType).latin1();
+ e.contentAttribute = (*itType).latin1();
+ e.saved = TRUE;
+ mail.addEnclosure(&e);
+
+ itType++;
+ idCount++;
+ }
+ mail.rawMail += mail.body;
+ mail.rawMail += "\n";
+ mail.rawMail += ".\n";
+ emit sendMailRequested(mail);
+ addAtt->clear();
}
void WriteMail::getAddress()
{
- showingAddressList = !showingAddressList;
-
- if (showingAddressList) {
- emailInput->hide();
- addressView->show();
- okButton->show();
-
- } else {
- addressView->hide();
- okButton->hide();
- emailInput->show();
- }
+ showingAddressList = !showingAddressList;
+
+ if (showingAddressList) {
+ emailInput->hide();
+ addressView->show();
+ okButton->show();
+
+ } else {
+ addressView->hide();
+ okButton->hide();
+ emailInput->show();
+ }
}
void WriteMail::attachFile()
{
- addAtt->showMaximized();
+ addAtt->showMaximized();
}
void WriteMail::reply(Email replyMail, bool replyAll)
{
- int pos;
- QString ccRecipients;
-
- mail = replyMail;
- mail.files.clear();
-
- toInput->setText(mail.fromMail);
-
- if (replyAll)
- {
- for (QStringList::Iterator it = mail.carbonCopies.begin();it != mail.carbonCopies.end(); ++it)
- {
- ccRecipients.append(*it);
- ccRecipients.append(";");
- }
- ccRecipients.truncate(ccRecipients.length()-1); //no ; at the end
- ccInput->setText(ccRecipients);
- }
- else ccInput->clear();
-
- subjectInput->setText(tr("Re: ") + mail.subject);
-
- QString citation=mail.fromMail;
- citation.append(tr(" wrote on "));
- citation.append(mail.date);
- citation.append(":\n");
-
+ int pos;
+ QString ccRecipients;
+
+ mail = replyMail;
+ mail.files.clear();
+
+ toInput->setText(mail.fromMail);
+
+ if (replyAll)
+ {
+ for (QStringList::Iterator it = mail.carbonCopies.begin();it != mail.carbonCopies.end(); ++it)
+ {
+ ccRecipients.append(*it);
+ ccRecipients.append(";");
+ }
+ ccRecipients.truncate(ccRecipients.length()-1); //no ; at the end
+ ccInput->setText(ccRecipients);
+ }
+ else ccInput->clear();
+
+ subjectInput->setText(tr("Re: ") + mail.subject);
+
+ QString citation=mail.fromMail;
+ citation.append(tr(" wrote on "));
+ citation.append(mail.date);
+ citation.append(":\n");
+
- //mail.body.insert(0,tr("On"));
- pos = 0;
- mail.body.insert(pos, ">");
- while (pos != -1) {
- pos = mail.body.find('\n', pos);
- if (pos != -1)
- mail.body.insert(++pos, ">>");
- }
- mail.body.insert(0,citation);
- emailInput->setText(mail.body);
+ //mail.body.insert(0,tr("On"));
+ pos = 0;
+ mail.body.insert(pos, ">");
+ while (pos != -1) {
+ pos = mail.body.find('\n', pos);
+ if (pos != -1)
+ mail.body.insert(++pos, ">");
+ }
+ mail.body.insert(0,citation);
+ emailInput->setText(mail.body);
}
void WriteMail::forward(Email forwMail)
{
- int pos=0;
-
- QString fwdBody=tr("======forwarded message from ");
- fwdBody.append(forwMail.fromMail);
- fwdBody.append(tr(" starts======\n\n"));
-
- mail=forwMail;
- toInput->setText("");
- ccInput->setText("");
- subjectInput->setText(tr("FWD: ") + mail.subject);
-
- fwdBody+=mail.body;
- fwdBody+=QString(tr("======end of forwarded message======\n\n"));
-
- emailInput->setText(fwdBody);
+ // int pos=0;
+
+ QString fwdBody=tr("======forwarded message from ");
+ fwdBody.append(forwMail.fromMail);
+ fwdBody.append(tr(" starts======\n\n"));
+
+ mail=forwMail;
+ toInput->setText("");
+ ccInput->setText("");
+ subjectInput->setText(tr("FWD: ") + mail.subject);
+
+ fwdBody+=mail.body;
+ fwdBody+=QString(tr("======end of forwarded message======\n\n"));
+
+ emailInput->setText(fwdBody);
}
bool WriteMail::getRecipients(bool ccField)
{
- QString str, temp;
- int pos = 0;
-
- if (ccField)
- {
- mail.carbonCopies.clear();
- temp = ccInput->text();
- }
- else
- {
- mail.recipients.clear();
- temp=toInput->text() ;
- }
-
- while ( (pos = temp.find(';')) != -1) {
- str = temp.left(pos).stripWhiteSpace();
- temp = temp.right(temp.length() - (pos + 1));
- if ( str.find('@') == -1)
- return false;
- ccField ? mail.carbonCopies.append(str) : mail.recipients.append(str);
- //addressList->addContact(str, "");
- }
- temp = temp.stripWhiteSpace();
- if ( temp.find('@') == -1)
- return false;
- ccField ? mail.carbonCopies.append(temp) : mail.recipients.append(temp);
- //addressList->addContact(temp, "");
-
- return TRUE;
+ QString str, temp;
+ int pos = 0;
+
+ if (ccField)
+ {
+ mail.carbonCopies.clear();
+ temp = ccInput->text();
+ }
+ else
+ {
+ mail.recipients.clear();
+ temp=toInput->text() ;
+ }
+
+ while ( (pos = temp.find(';')) != -1) {
+ str = temp.left(pos).stripWhiteSpace();
+ temp = temp.right(temp.length() - (pos + 1));
+ if ( str.find('@') == -1)
+ return false;
+ ccField ? mail.carbonCopies.append(str) : mail.recipients.append(str);
+ //addressList->addContact(str, "");
+ }
+ temp = temp.stripWhiteSpace();
+ if ( temp.find('@') == -1)
+ return false;
+ ccField ? mail.carbonCopies.append(temp) : mail.recipients.append(temp);
+ //addressList->addContact(temp, "");
+
+ return TRUE;
}
void WriteMail::addRecipients()
{
- toInput->isVisible() ? addRecipients(false) : addRecipients(true);
-}
+ toInput->isVisible() ? addRecipients(false) : addRecipients(true);
+}
void WriteMail::addRecipients(bool ccField)
{
- QString recipients = "";
-
- mail.recipients.clear();
-
- QListViewItem *item = addressView->firstChild();
- while (item != NULL) {
- if ( item->isSelected() ) {
- if (recipients == "") {
- recipients = item->text(1);
- } else {
- recipients += "; " + item->text(1);
- }
- }
- item = item->nextSibling();
- }
-
- ccField ? ccInput->setText(recipients):toInput->setText(recipients);
-
- addressView->hide();
- okButton->hide();
- emailInput->show();
- addressButton->setOn(FALSE);
- showingAddressList = !showingAddressList;
+ QString recipients = "";
+
+ mail.recipients.clear();
+
+ QListViewItem *item = addressView->firstChild();
+ while (item != NULL) {
+ if ( item->isSelected() ) {
+ if (recipients == "") {
+ recipients = item->text(1);
+ } else {
+ recipients += "; " + item->text(1);
+ }
+ }
+ item = item->nextSibling();
+ }
+
+ ccField ? ccInput->setText(recipients):toInput->setText(recipients);
+
+ addressView->hide();
+ okButton->hide();
+ emailInput->show();
+ addressButton->setOn(FALSE);
+ showingAddressList = !showingAddressList;
}
void WriteMail::changeRecipients(int selection)
{
- if (selection==0)
- {
- toInput->show();
- ccInput->hide();
- }
- else if (selection==1)
- {
- toInput->hide();
- ccInput->show();
- }
+ if (selection==0)
+ {
+ toInput->show();
+ ccInput->hide();
+ }
+ else if (selection==1)
+ {
+ toInput->hide();
+ ccInput->show();
+ }
}
void WriteMail::setRecipient(const QString &recipient)
{
toInput->setText(recipient);
}
void WriteMail::newMail()
{
- toInput->clear();
- ccInput->clear();
- subjectInput->clear();
- emailInput->clear();
- setAddressList(addressList);
+ toInput->clear();
+ ccInput->clear();
+ subjectInput->clear();
+ emailInput->clear();
+ setAddressList(addressList);
}
diff --git a/noncore/unsupported/mailit/addatt.cpp b/noncore/unsupported/mailit/addatt.cpp
index daefac6..19ac58f 100644
--- a/noncore/unsupported/mailit/addatt.cpp
+++ b/noncore/unsupported/mailit/addatt.cpp
@@ -1,224 +1,224 @@
/**********************************************************************
** 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 <qlayout.h>
#include <qhbox.h>
#include <qdir.h>
#include <qstringlist.h>
#include <qpe/resource.h>
#include "addatt.h"
FileItem::FileItem(QListView *parent, DocLnk* dl)
: QListViewItem(parent)
{
/*file = fileInfo;
type = fileType;*/
doclnk=dl;
setText(0, doclnk->name());
/* if (fileType == "Picture") {
setPixmap(0, Resource::loadPixmap("pixmap"));
} else if (fileType == "Document") {
setPixmap(0, Resource::loadPixmap("txt"));
} else if (fileType == "Sound") {
setPixmap(0, Resource::loadPixmap("play"));
} else if (fileType == "Movie") {
setPixmap(0, Resource::loadPixmap("MPEGPlayer"));
} else if (fileType == "File") {
setPixmap(0, Resource::loadPixmap("exec"));
}*/
}
FileItem::~FileItem()
{
if (doclnk!=NULL) delete doclnk;
doclnk=NULL;
}
AddAtt::AddAtt(QWidget *parent, const char *name, WFlags f)
: QDialog(parent, name, f)
{
- setCaption("Adding attachments");
+ setCaption(tr("Adding attachments") );
QGridLayout *top = new QGridLayout(this, 1,1 );
QHBox *buttons=new QHBox(this);
/*fileCategoryButton = new QPushButton(this);*/
attachButton = new QPushButton(tr("attach..."), buttons);
removeButton = new QPushButton(tr("Remove"), buttons);
/*fileCategories = new QPopupMenu(fileCategoryButton);
fileCategoryButton->setPopup(fileCategories);
fileCategories->insertItem("Document");
fileCategories->insertItem("Picture");
fileCategories->insertItem("Sound");
fileCategories->insertItem("Movie");
fileCategories->insertItem("File");
fileCategoryButton->setText("Document");
top->addWidget(fileCategoryButton, 0, 0);*/
top->addWidget(buttons,1,0);
//buttons->addWidget(attachButton,0,0);
//buttons->addWidget(removeButton,0,1);
//connect(fileCategories, SIGNAL(activated(int)), this,
// SLOT(fileCategorySelected(int)) );*/
connect(attachButton, SIGNAL(clicked()), this,
SLOT(addattachment()) );
connect(removeButton, SIGNAL(clicked()), this,
SLOT(removeattachment()) );
/*listView = new QListView(this, "AttView");
listView->addColumn("Documents");*
connect(listView, SIGNAL(doubleClicked(QListViewItem *)), this,
SLOT(addattachment()) );*/
attView = new QListView(this, "Selected");
attView->addColumn(tr("Attached"));
attView->addColumn(tr("File type"));
connect(attView, SIGNAL(doubleClicked(QListViewItem *)), this,
SLOT(removeattachment()) );
//top->addWidget(ofs, 0,0);
top->addWidget(attView, 0,0);
clear();
}
void AddAtt::clear()
{
attView->clear();
//getFiles();
modified = FALSE;
}
/*void AddAtt::fileCategorySelected(int id)
{
fileCategoryButton->setText(fileCategories->text(id));
getFiles();
}*/
void AddAtt::addattachment()
-{
+{ // ### FIXME wrong use -zecke
OFileDialog ofs("Attachments",this,0,0,"/root/Documents");
ofs.showMaximized();
if (ofs.exec()==QDialog::Accepted)
{
DocLnk* dl=new DocLnk(ofs.selectedDocument());
FileItem* fi=new FileItem(attView,dl);
fi->setPixmap(0,dl->pixmap());
fi->setText(1,dl->type());
attView->insertItem(fi);
modified = TRUE;
}
}
void AddAtt::removeattachment()
{
if (attView->selectedItem() != NULL)
{
attView->takeItem(attView->selectedItem());
}
modified = TRUE;
}
void AddAtt::reject()
{
if (modified) {
attView->clear();
modified = FALSE;
}
}
void AddAtt::accept()
{
modified = FALSE;
hide();
}
void AddAtt::getFiles()
{
QString path, selected;
/*listView->clear();
selected = fileCategoryButton->text();
if (selected == "Picture") {
path = "../pics/";
} else if (selected == "Document") {
path = "" ; //sub-dirs not decided
} else if (selected == "Sound") {
path = "../sounds/"; //sub-dirs not decided
} else if (selected == "Movie") {
path = ""; //sub-dirs not decided
} else if (selected == "File") {
path = ""; //sub-dirs not decided
}
dir = new QDir(path);
dir->setFilter(QDir::Files);
const QFileInfoList *dirInfoList = dir->entryInfoList();
QFileInfoListIterator it(*dirInfoList); // create list iterator
while ( (fi=it.current()) ) { // for each file...
item = new FileItem(lis+ütView, *fi, selected);
++it; // goto next list element
}*/
}
QStringList AddAtt::returnattachedFiles()
{
QFileInfo info;
QStringList list;
item = (FileItem *) attView->firstChild();
while (item != NULL) {
DocLnk* dl=item->getDocLnk();
list+=dl->file();
/*info = item->getFileInfo();
list += info.filePath();*/
item = (FileItem *) item->nextSibling();
}
return list;
}
QStringList AddAtt::returnFileTypes()
{
QStringList list;
item = (FileItem *) attView->firstChild();
while (item != NULL) {
list += item->getDocLnk()->type();
item = (FileItem *) item->nextSibling();
}
return list;
}
diff --git a/noncore/unsupported/mailit/emailclient.cpp b/noncore/unsupported/mailit/emailclient.cpp
index da1226c..749a4e9 100644
--- a/noncore/unsupported/mailit/emailclient.cpp
+++ b/noncore/unsupported/mailit/emailclient.cpp
@@ -1,1037 +1,1042 @@
/**********************************************************************
** 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 <qapplication.h>
#include <qmessagebox.h>
#include <qvbox.h>
#include <qfile.h>
#include <qcheckbox.h>
#include <qmenubar.h>
#include <qaction.h>
#include <qwhatsthis.h>
#include <qpe/resource.h>
#include "emailclient.h"
#include "writemail.h"
QCollection::Item AccountList::newItem(QCollection::Item d)
{
return dupl( (MailAccount *) d);
}
MailAccount* AccountList::dupl(MailAccount *in)
{
ac = new MailAccount(*in);
return ac;
}
EmailClient::EmailClient( QWidget* parent, const char* name, WFlags fl )
: QMainWindow( parent, name, fl )
{
emailHandler = new EmailHandler();
addressList = new AddressList();
sending = FALSE;
receiving = FALSE;
previewingMail = FALSE;
mailIdCount = 1;
accountIdCount = 1;
allAccounts = FALSE;
init();
connect(emailHandler, SIGNAL(mailSent()), this, SLOT(mailSent()) );
- connect(emailHandler, SIGNAL(smtpError(int)), this,
- SLOT(smtpError(int)) );
- connect(emailHandler, SIGNAL(popError(int)), this,
- SLOT(popError(int)) );
+ connect(emailHandler, SIGNAL(smtpError(int,const QString &)), this,
+ SLOT(smtpError(int,const QString &)) );
+ connect(emailHandler, SIGNAL(popError(int,const QString &)), this,
+ SLOT(popError(int,const QString &)) );
connect(inboxView, SIGNAL(doubleClicked(QListViewItem *)), this, SLOT(inboxItemSelected()) );
connect(outboxView, SIGNAL(doubleClicked(QListViewItem *)), this, SLOT(outboxItemSelected()) );
connect(inboxView, SIGNAL(pressed(QListViewItem *)), this, SLOT(inboxItemPressed()) );
connect(inboxView, SIGNAL(clicked(QListViewItem *)), this, SLOT(inboxItemReleased()) );
connect(emailHandler, SIGNAL(mailArrived(const Email &, bool)), this,
SLOT(mailArrived(const Email &, bool)) );
connect(emailHandler, SIGNAL(mailTransfered(int)), this,
SLOT(allMailArrived(int)) );
mailconf = new Config("mailit");
//In case Synchronize is not defined in settings.txt
readSettings();
updateAccounts();
lineShift = "\n";
readMail();
lineShift = "\r\n";
mailboxView->setCurrentTab(0); //ensure that inbox has focus
/*channel = new QCopChannel( "QPE/Application/mailit", this );
connect( channel, SIGNAL(received(const QCString&, const QByteArray&)),
this, SLOT(receive(const QCString&, const QByteArray&)) );*/
}
EmailClient::~EmailClient()
{
//needs to be moved from destructor to closewindow event
saveMail(getPath(FALSE) + "inbox.txt", inboxView);
//does not currently work. Defining outbox in the same
//format as inbox is not a good solution as they have
//different properties
saveMail(getPath(FALSE) + "outbox.txt", outboxView);
saveSettings();
mailconf->write();
delete mailconf;
}
void EmailClient::init()
{
initStatusBar(this);
setToolBarsMovable(FALSE);
bar = new QToolBar(this);
QWhatsThis::add(bar,tr("Main operation toolbar"));
bar->setHorizontalStretchable( TRUE );
mb = new QMenuBar( bar );
QPopupMenu *mail = new QPopupMenu(mb);
mb->insertItem( tr( "&Mail" ), mail);
QPopupMenu *configure = new QPopupMenu(mb);
mb->insertItem( tr( "Accounts" ), configure);
selectAccountMenu = new QPopupMenu(mb);
editAccountMenu = new QPopupMenu(mb);
deleteAccountMenu = new QPopupMenu(mb);
mail->insertItem(tr("Get Mail in"), selectAccountMenu);
configure->insertItem(tr("Edit account"), editAccountMenu);
configure->insertItem(tr("Delete account"), deleteAccountMenu);
bar = new QToolBar(this);
getMailButton = new QToolButton(Resource::loadPixmap("mailit/getmail"),tr("getMail"),tr("select account"), this,SLOT(getAllNewMail()),bar);
QWhatsThis::add(getMailButton,tr("Click to download mail via all available accounts.\n Press and hold to select the desired account."));
getMailButton->setPopup(selectAccountMenu);
sendMailButton = new QAction(tr("Send mail"), Resource::loadPixmap("mailit/sendqueue"), QString::null, 0, this, 0);
connect(sendMailButton, SIGNAL(activated()), this, SLOT(sendQuedMail()) );
sendMailButton->addTo(bar);
sendMailButton->addTo(mail);
sendMailButton->setWhatsThis("Send mail queued in the outbox");
composeButton = new QAction(tr("Compose"), Resource::loadPixmap("new"), QString::null, 0, this, 0);
connect(composeButton, SIGNAL(activated()), this, SLOT(compose()) );
composeButton->addTo(bar);
composeButton->addTo(mail);
composeButton->setWhatsThis("Compose a new mail");
cancelButton = new QAction(tr("Cancel transfer"), Resource::loadPixmap("close"), QString::null, 0, this, 0);
connect(cancelButton, SIGNAL(activated()), this, SLOT(cancel()) );
cancelButton->addTo(mail);
cancelButton->addTo(bar);
cancelButton->setEnabled(FALSE);
cancelButton->setWhatsThis("Stop the currently active mail transfer");
deleteButton = new QAction( tr( "Delete" ), Resource::loadPixmap( "trash" ), QString::null, 0, this, 0 );
connect( deleteButton, SIGNAL( activated() ), this, SLOT( deleteItem() ) );
deleteButton->addTo(bar);
deleteButton->setWhatsThis("Remove the currently selected eMail(s)");
mailboxView = new OTabWidget( this, "mailboxView" );
QWidget* widget = new QWidget( mailboxView, "widget" );
grid_2 = new QGridLayout( widget );
// grid_2->setSpacing(6);
// grid_2->setMargin( 11 );
inboxView = new QListView( widget, "inboxView" );
inboxView->addColumn( tr( "From" ) );
inboxView->addColumn( tr( "Subject" ) );
inboxView->addColumn( tr( "Date" ) );
inboxView->setMinimumSize( QSize( 0, 0 ) );
inboxView->setAllColumnsShowFocus(TRUE);
QWhatsThis::add(inboxView,QWidget::tr("This is the inbox view.\n"
"It keeps the fetched mail which can be \n"
"viewed by double clicking the entry.\n"
"blue attachment icon shows whether this \n"
"mailhas attachments.\n"));
grid_2->addWidget( inboxView, 2, 0 );
mailboxView->addTab( widget, "mailit/inbox", tr( "Inbox" ) );
QWidget* widget_2 = new QWidget( mailboxView, "widget_2" );
grid_3 = new QGridLayout( widget_2 );
// grid_3->setSpacing(6);
// grid_3->setMargin( 11 );
outboxView = new QListView( widget_2, "outboxView" );
outboxView->addColumn( tr( "To" ) );
outboxView->addColumn( tr( "Subject" ) );
outboxView->setAllColumnsShowFocus(TRUE);
QWhatsThis::add(outboxView,QWidget::tr("This is the outbox view.\n"
"It keeps the queued mails to send which can be \n"
"reviewed by double clicking the entry."));
grid_3->addWidget( outboxView, 0, 0 );
mailboxView->addTab( widget_2,"mailit/outbox", tr( "Outbox" ) );
setCentralWidget(mailboxView);
}
void EmailClient::initStatusBar(QWidget* parent)
{
statusBar = new QStatusBar(parent);
statusBar->setSizeGripEnabled(FALSE);
status1Label = new QLabel( tr("Idle"), statusBar);
status2Label = new QLabel("", statusBar);
connect(emailHandler, SIGNAL(updatePopStatus(const QString &)),
status2Label, SLOT(setText(const QString &)) );
connect(emailHandler, SIGNAL(updateSmtpStatus(const QString &)),
status2Label, SLOT(setText(const QString &)) );
progressBar = new QProgressBar(statusBar);
connect(emailHandler, SIGNAL(mailboxSize(int)),
this, SLOT(setTotalSize(int)) );
connect(emailHandler, SIGNAL(currentMailSize(int)),
this, SLOT(setMailSize(int)) );
connect(emailHandler, SIGNAL(downloadedSize(int)),
this, SLOT(setDownloadedSize(int)) );
statusBar->addWidget(status1Label);
statusBar->addWidget(progressBar);
statusBar->addWidget(status2Label);
}
void EmailClient::compose()
{
emit composeRequested();
}
void EmailClient::cancel()
{
emailHandler->cancel();
}
AddressList* EmailClient::getAdrListRef()
{
return addressList;
}
//this needs to be rewritten to syncronize with outboxView
void EmailClient::enqueMail(const Email &mail)
{
if (accountList.count() == 0) {
QMessageBox::warning(qApp->activeWindow(),
tr("No account selected"), tr("You must create an account"), "OK\n");
return;
}
if (accountList.count() > 0) {
currentAccount = accountList.first();
qWarning("using account " + currentAccount->name);
}
Email addMail = mail;
addMail.from = currentAccount->name;
addMail.fromMail = currentAccount->emailAddress;
addMail.rawMail.prepend("From: " + addMail.from + "<" + addMail.fromMail + ">\n");
item = new EmailListItem(outboxView, addMail, false);
mailboxView->setCurrentTab(1);
}
void EmailClient::sendQuedMail()
{
int count = 0;
if (accountList.count() == 0) {
QMessageBox::warning(qApp->activeWindow(), "No account selected", "You must create an account", "OK\n");
return;
}
//traverse listview, find messages to send
if (! sending) {
item = (EmailListItem *) outboxView->firstChild();
if (item != NULL) {
while (item != NULL) {
quedMessages.append(item->getMail());
item = (EmailListItem *) item->nextSibling();
count++;
}
setMailAccount();
emailHandler->sendMail(&quedMessages);
sending = TRUE;
sendMailButton->setEnabled(FALSE);
cancelButton->setEnabled(TRUE);
} else {
qWarning("sendQuedMail(): no messages to send");
}
}
}
void EmailClient::setMailAccount()
{
emailHandler->setAccount(*currentAccount);
}
void EmailClient::mailSent()
{
sending = FALSE;
sendMailButton->setEnabled(TRUE);
quedMessages.clear();
outboxView->clear(); //should be moved to an sentBox
}
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);
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;
}
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 (!newMail.downloaded)
mailDownloadList.sizeInsert(newMail.serverId, newMail.size);*/
mailboxView->setCurrentTab(0);
}
-void EmailClient::allMailArrived(int count)
+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)
+void EmailClient::smtpError(int code, const QString & Msg)
{
QString temp;
- if (code == ErrUnknownResponse)
- temp = "Unknown response from server";
-
- if (code == QSocket::ErrHostNotFound)
- temp = "host not found";
- if (code == QSocket::ErrConnectionRefused)
- temp = "connection refused";
- if (code == QSocket::ErrSocketRead)
- temp = "socket packet error";
+ if (code == ErrUnknownResponse) {
+ temp = tr("<qt>Unknown response from server</qt>");
+ if( ! Msg.isEmpty() )
+ temp += Msg;
+ } else if (code == QSocket::ErrHostNotFound) {
+ temp = tr("<qt>host not found</qt>");
+ } else if (code == QSocket::ErrConnectionRefused) {
+ temp = tr("<qt>connection refused</qt>");
+ } else if (code == QSocket::ErrSocketRead) {
+ temp = tr("<qt>socket packet error</qt>");
+ }
if (code != ErrCancel) {
QMessageBox::warning(qApp->activeWindow(), "Sending error", temp, "OK\n");
} else {
status2Label->setText("Aborted by user");
}
sending = FALSE;
sendMailButton->setEnabled(TRUE);
cancelButton->setEnabled(FALSE);
quedMessages.clear();
}
-void EmailClient::popError(int code)
+void EmailClient::popError(int code, const QString & Msg)
{
QString temp;
- if (code == ErrUnknownResponse)
- temp = "Unknown response from server";
- if (code == ErrLoginFailed)
- temp = "Login failed\nCheck user name and password";
-
- if (code == QSocket::ErrHostNotFound)
- temp = "host not found";
- if (code == QSocket::ErrConnectionRefused)
- temp = "connection refused";
- if (code == QSocket::ErrSocketRead)
- temp = "socket packet error";
-
+ if (code == ErrUnknownResponse) {
+ temp = tr("<qt>Unknown response from server</qt>");
+ if( ! Msg.isEmpty() )
+ temp += Msg;
+ } else if (code == ErrLoginFailed) {
+ temp = tr("<qt>Login failed\nCheck user name and password</qt>");
+ } else if (code == QSocket::ErrHostNotFound) {
+ temp = tr("<qt>host not found</qt>");
+ } else if (code == QSocket::ErrConnectionRefused) {
+ temp = tr("<qt>connection refused</qt>");
+ } else if (code == QSocket::ErrSocketRead) {
+ temp = tr("<qt>socket packet error</qt>");
+ }
+
if (code != ErrCancel) {
- QMessageBox::warning(qApp->activeWindow(), "Receiving error", temp, "OK\n");
+ QMessageBox::warning(qApp->activeWindow(), tr("Receiving error"), temp, tr("OK\n"));
+
} else {
status2Label->setText("Aborted by user");
}
receiving = FALSE;
getMailButton->setEnabled(TRUE);
cancelButton->setEnabled(FALSE);
selectAccountMenu->setEnabled(TRUE);
}
void EmailClient::inboxItemSelected()
{
//killTimer(timerID);
item = (EmailListItem*) inboxView->selectedItem();
if (item != NULL) {
emit viewEmail(inboxView, item->getMail());
}
}
void EmailClient::outboxItemSelected()
{
//killTimer(timerID);
item = (EmailListItem*) outboxView->selectedItem();
if (item != NULL) {
emit viewEmail(outboxView, item->getMail());
}
}
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(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);
}
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
{
mailconf->writeEntry("Synchronize", "No");
}
}
mailconf->setGroup("mailitglobal");
mailconf->writeEntry("Accounts",acc_count);
mailconf->writeEntry("mailidcount", mailIdCount);
mailconf->writeEntry("accountidcount", accountIdCount);
}
void EmailClient::selectAccount(int id)
{
if (accountList.count() > 0) {
currentAccount = accountList.at(id);
emit newCaption("Mailit - " + currentAccount->accountName);
getNewMail();
} else {
emit newCaption("Mailit ! No account defined");
}
}
void EmailClient::editAccount(int id)
{
MailAccount *newAccount;
editAccountView = new EditAccount(this, "account", TRUE);
if (id == newAccountId) { //new account
newAccount = new MailAccount;
editAccountView->setAccount(newAccount);
} else {
newAccount = accountList.at(id);
editAccountView->setAccount(newAccount, FALSE);
}
editAccountView->showMaximized();
editAccountView->exec();
if (editAccountView->result() == QDialog::Accepted) {
if (id == newAccountId) {
newAccount->id = accountIdCount;
accountIdCount++;
accountList.append(newAccount);
updateAccounts();
} else {
updateAccounts();
}
}
delete editAccountView;
}
void EmailClient::deleteAccount(int id)
{
MailAccount *newAccount;
QString message;
newAccount = accountList.at(id);
message = "Delete account:\n" + newAccount->accountName;
switch( QMessageBox::warning( this, "Mailit", message,
"Yes", "No", 0, 0, 1 ) ) {
case 0: accountList.remove(id);
updateAccounts();
break;
case 1:
break;
}
}
void EmailClient::updateAccounts()
{
MailAccount *accountPtr;
//rebuild menus, clear all first
editAccountMenu->clear();
selectAccountMenu->clear();
deleteAccountMenu->clear();
newAccountId = editAccountMenu->insertItem("New", this,
SLOT(editAccount(int)) );
editAccountMenu->insertSeparator();
idCount = 0;
for (accountPtr = accountList.first(); accountPtr != 0;
accountPtr = accountList.next()) {
editAccountMenu->insertItem(accountPtr->accountName,
this, SLOT(editAccount(int)), 0, idCount);
selectAccountMenu->insertItem(accountPtr->accountName,
this, SLOT(selectAccount(int)), 0, idCount);
deleteAccountMenu->insertItem(accountPtr->accountName,
this, SLOT(deleteAccount(int)), 0, idCount);
idCount++;
}
}
void EmailClient::deleteMail(EmailListItem *mailItem, bool &inbox)
{
Email *mPtr;
Enclosure *ePtr;
if (inbox)
{
mPtr = mailItem->getMail();
//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::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;
+ // 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);
}
void EmailClient::inboxItemReleased()
{
// killTimer(timerID);
}
/*void EmailClient::timerEvent(QTimerEvent *e)
{
- /*killTimer(timerID);
+ //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;
}
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");
}
-void EmailClient::receive(const QCString& msg, const QByteArray& data)
+void EmailClient::receive(const QCString& /*msg*/, const QByteArray& /*data*/)
{
/*if (msg=="getMail()")
{
- /*QDialog qd(qApp->activeWindow(),"Getting mail",true);
+ //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 c98cfce..80c6d31 100644
--- a/noncore/unsupported/mailit/emailclient.h
+++ b/noncore/unsupported/mailit/emailclient.h
@@ -1,181 +1,181 @@
/**********************************************************************
** 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 EMAILCLIENT_H
#define EMAILCLIENT_H
#include <qlist.h>
#include <qcstring.h>
#include <qmainwindow.h>
#include <qtoolbar.h>
#include <qcheckbox.h>
#include <qlabel.h>
#include <qlineedit.h>
#include <qlistview.h>
#include <qaction.h>
#include <qlayout.h>
#include <qtooltip.h>
#include <qtoolbutton.h>
#include <qimage.h>
#include <qpixmap.h>
#include <qstringlist.h>
#include <qprogressbar.h>
#include <qstatusbar.h>
#include <qdir.h>
#include <stdlib.h>
#include <opie/otabwidget.h>
#include <qpe/qcopenvelope_qws.h>
#include <qtimer.h>
#include "emailhandler.h"
#include "emaillistitem.h"
#include "textparser.h"
#include "editaccount.h"
#include "maillist.h"
#include "addresslist.h"
#include <qpe/config.h>
class AccountList : public QList<MailAccount>
{
public:
Item newItem(Item d);
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 smtpError(int code, const QString & Msg );
+ void popError(int code, const QString & Msg);
void inboxItemSelected();
void outboxItemSelected();
void inboxItemPressed();
void inboxItemReleased();
void mailArrived(const Email &mail, bool fromDisk);
void allMailArrived(int);
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;
QStatusBar *statusBar;
QLabel *status1Label, *status2Label;
QToolButton *getMailButton;
QAction *sendMailButton;
QAction *composeButton;
QAction *cancelButton;
QAction *deleteButton;
//QToolButton *setAccountButton;
QMenuBar *mb;
QPopupMenu *selectAccountMenu;
QPopupMenu *editAccountMenu;
QPopupMenu *deleteAccountMenu;
QPopupMenu *setAccountMenu;
OTabWidget* mailboxView;
QListView* inboxView;
QListView* outboxView;
QGridLayout* grid_2;
QGridLayout* grid_3;
};
#endif // EMAILCLIENT_H
diff --git a/noncore/unsupported/mailit/emailhandler.cpp b/noncore/unsupported/mailit/emailhandler.cpp
index 39f693d..5b8bda1 100644
--- a/noncore/unsupported/mailit/emailhandler.cpp
+++ b/noncore/unsupported/mailit/emailhandler.cpp
@@ -1,549 +1,549 @@
/**********************************************************************
** 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");
smtpClient = new SmtpClient();
popClient = new PopClient();
- connect(smtpClient, SIGNAL(errorOccurred(int)), this,
- SIGNAL(smtpError(int)) );
+ connect(smtpClient, SIGNAL(errorOccurred(int, const QString &)), this,
+ SIGNAL(smtpError(int, const QString &)) );
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(errorOccurred(int, const QString &)), this,
+ SIGNAL(popError(int, const QString &)) );
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"));
}
}
smtpClient->newConnection(mailAccount.smtpServer, 25);
}
void EmailHandler::setAccount(MailAccount account)
{
mailAccount = account;
}
void EmailHandler::getMail()
{
popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd);
if (mailAccount.synchronize) {
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(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);
TextParser * lp = new TextParser(header, lineShift);
#define p (*lp)
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));
}
}
//
//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) );
}
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
}
if (boundary == "") { //fooled by Mime-Version
mail->body = body;
mail->bodyPlain = body;
delete lp;
return mail;
}
while (body.length() > 0) {
pos = body.find(boundary, 0, FALSE);
pos = body.find(delimiter, pos, FALSE);
mimeHeader = body.left(pos);
mimeBody = body.right(body.length() - pos - delimiter.length());
TextParser bp(mimeHeader, lineShift);
contentType = "";
contentAttribute = "";
fileName = "";
if ((pos = bp.find("CONTENT",'-', 0, TRUE)) != -1) {
pos++;
if ( (bp.wordAt(pos).upper() == "TYPE") &&
(bp.separatorAt(pos) == ':') ) {
contentType = bp.nextWord().upper();
if (bp.nextSeparator() == '/')
contentAttribute = bp.nextWord().upper();
content = contentType + "/" + contentAttribute;
}
if ((pos = bp.find("ENCODING",':', 0, TRUE)) != -1) {
pos++;
encoding = bp.getString(&pos, 'z', TRUE);
}
if ( (pos = bp.find("FILENAME",'=', 0, TRUE)) != -1) {
pos++;
fileName = bp.getString(&pos, 'z', TRUE);
fileName = fileName.right(fileName.length() - 1);
fileName = fileName.left(fileName.length() - 1);
}
}
pos = mimeBody.find(boundary, 0, FALSE);
if (pos == -1) //should not occur, malformed mail
pos = mimeBody.length();
body = mimeBody.right(mimeBody.length() - pos);
mimeBody = mimeBody.left(pos);
if (fileName != "") { //attatchments of some type, audio, image etc.
Enclosure e;
e.id = enclosureId;
e.originalName = fileName;
e.contentType = contentType;
e.contentAttribute = contentAttribute;
e.encoding = encoding;
e.body = mimeBody;
e.saved = FALSE;
mail->addEnclosure(&e);
enclosureId++;
} else if (contentType == "TEXT") {
if (contentAttribute == "PLAIN") {
mail->body = mimeBody;
mail->bodyPlain = mimeBody;
}
if (contentAttribute == "HTML") {
mail->body = mimeBody;
}
}
}
} else {
mail->bodyPlain = body;
mail->body = body;
}
delete lp;
return TRUE;
}
bool EmailHandler::getEnclosure(Enclosure *ePtr)
{
QFile f(ePtr->path + ePtr->name);
char src[4];
char *destPtr;
QByteArray buffer;
uint bufCount, pos, decodedCount, size, x;
if (! f.open(IO_WriteOnly) ) {
qWarning("could not save: " + ePtr->path + ePtr->name);
return FALSE;
}
if (ePtr->encoding.upper() == "BASE64") {
size = (ePtr->body.length() * 3 / 4); //approximate size (always above)
buffer.resize(size);
bufCount = 0;
pos = 0;
destPtr = buffer.data();
while (pos < ePtr->body.length()) {
decodedCount = 4;
x = 0;
while ( (x < 4) && (pos < ePtr->body.length()) ) {
src[x] = ePtr->body[pos].latin1();
pos++;
if (src[x] == '\r' || src[x] == '\n' || src[x] == ' ')
x--;
x++;
}
if (x > 1) {
decodedCount = parse64base(src, destPtr);
destPtr += decodedCount;
bufCount += decodedCount;
}
}
buffer.resize(bufCount); //set correct length of file
f.writeBlock(buffer);
} else {
QTextStream t(&f);
t << ePtr->body;
}
return TRUE;
}
int EmailHandler::parse64base(char *src, char *bufOut) {
char c, z;
char li[4];
int processed;
//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 + ">";
//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(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";
diff --git a/noncore/unsupported/mailit/emailhandler.h b/noncore/unsupported/mailit/emailhandler.h
index e4e7f46..74a8e4c 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;
};
class EnclosureList : public QList<Enclosure>
{
public:
Item newItem(Item d);
private:
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);
}
};
struct MailAccount
{
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;
class EmailHandler : public QObject
{
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(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 smtpError(int, const QString & Msg );
+ void popError(int, const QString & Msg );
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);
private:
MailAccount mailAccount;
SmtpClient *smtpClient;
PopClient *popClient;
bool headers;
};
#endif
diff --git a/noncore/unsupported/mailit/mailit.pro b/noncore/unsupported/mailit/mailit.pro
index cfbda36..5e9a83a 100644
--- a/noncore/unsupported/mailit/mailit.pro
+++ b/noncore/unsupported/mailit/mailit.pro
@@ -1,62 +1,63 @@
TEMPLATE = app
+TARGET = mailit
CONFIG = qt warn_on release
HEADERS = emailclient.h \
emailhandler.h \
emaillistitem.h \
mailitwindow.h \
md5.h \
popclient.h \
readmail.h \
smtpclient.h \
writemail.h \
textparser.h \
viewatt.h \
addatt.h \
editaccount.h \
maillist.h \
addresslist.h
SOURCES = emailclient.cpp \
emailhandler.cpp \
emaillistitem.cpp \
mailitwindow.cpp \
main.cpp \
md5.c \
popclient.cpp \
readmail.cpp \
smtpclient.cpp \
writemail.cpp \
textparser.cpp \
viewatt.cpp \
addatt.cpp \
editaccount.cpp \
maillist.cpp \
addresslist.cpp
INCLUDEPATH += $(OPIEDIR)/include
DEPENDPATH += $(OPIEDIR)/include
LIBS += -lqpe -lopie
# -lssl
MOC_DIR=qpeobj
OBJECTS_DIR=qpeobj
DESTDIR=$(OPIEDIR)/bin
TRANSLATIONS = ../../../i18n/de/mailit.ts \
../../../i18n/nl/mailit.ts \
../../../i18n/da/mailit.ts \
../../../i18n/xx/mailit.ts \
../../../i18n/it/mailit.ts \
../../../i18n/en/mailit.ts \
../../../i18n/es/mailit.ts \
../../../i18n/fr/mailit.ts \
../../../i18n/hu/mailit.ts \
../../../i18n/ja/mailit.ts \
../../../i18n/ko/mailit.ts \
../../../i18n/no/mailit.ts \
../../../i18n/pl/mailit.ts \
../../../i18n/pt/mailit.ts \
../../../i18n/pt_BR/mailit.ts \
../../../i18n/sl/mailit.ts \
../../../i18n/zh_CN/mailit.ts \
../../../i18n/zh_TW/mailit.ts
include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/unsupported/mailit/mailitwindow.cpp b/noncore/unsupported/mailit/mailitwindow.cpp
index f945a0f..6e298c7 100644
--- a/noncore/unsupported/mailit/mailitwindow.cpp
+++ b/noncore/unsupported/mailit/mailitwindow.cpp
@@ -1,168 +1,168 @@
/**********************************************************************
** 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 <qwhatsthis.h>
#include <qmessagebox.h>
#include "mailitwindow.h"
-MailItWindow::MailItWindow(QWidget *parent, const char *name, WFlags fl)
+MailItWindow::MailItWindow(QWidget *parent, const char *name, WFlags /*fl*/)
: QMainWindow(parent, name, WStyle_ContextHelp)
{
- currentCaption = "Mailit";
+ currentCaption = tr("Mailit");
setCaption(tr(currentCaption));
views = new QWidgetStack(this);
setCentralWidget(views);
QWhatsThis::add(views,tr("Central view area"));
emailClient = new EmailClient(views, "client");
writeMail = new WriteMail(views, "writing");
readMail = new ReadMail(views, "reading");
views->raiseWidget(emailClient);
connect(emailClient, SIGNAL(composeRequested()),
this, SLOT(compose()) );
connect(emailClient, SIGNAL(viewEmail(QListView *, Email *)), this,
SLOT(viewMail(QListView *, Email *)) );
connect(emailClient, SIGNAL(mailUpdated(Email *)), this,
SLOT(updateMailView(Email *)) );
connect(writeMail, SIGNAL(cancelMail()), this, SLOT(showEmailClient()) );
connect(writeMail, SIGNAL(sendMailRequested(const Email &)), this,
SLOT(showEmailClient()) );
connect(writeMail, SIGNAL(sendMailRequested(const Email &)), emailClient,
SLOT(enqueMail(const Email &)) );
connect(readMail, SIGNAL(cancelView()), this, SLOT(showEmailClient()) );
connect(readMail, SIGNAL(replyRequested(Email &, bool&)), this,
SLOT(composeReply(Email &, bool&)) );
connect(readMail, SIGNAL(forwardRequested(Email &)), this,
SLOT(composeForward(Email &)) );
connect(readMail, SIGNAL(removeItem(EmailListItem *, bool &)), emailClient,
SLOT(deleteMail(EmailListItem *, bool &)) );
connect(readMail, SIGNAL(viewingMail(Email *)), emailClient,
SLOT(moveMailFront(Email *)) );
connect(emailClient, SIGNAL(newCaption(const QString &)),
this, SLOT(updateCaption(const QString &)) );
connect(readMail, SIGNAL(download(Email *)), emailClient, SLOT(download(Email*)) );
viewingMail = FALSE;
}
MailItWindow::~MailItWindow()
{
}
void MailItWindow::closeEvent(QCloseEvent *e)
{
if (views->visibleWidget() == emailClient) {
e->accept();
} else {
showEmailClient();
}
}
void MailItWindow::compose()
{
viewingMail = FALSE;
emailClient->hide();
readMail->hide();
views->raiseWidget(writeMail);
writeMail->setAddressList(emailClient->getAdrListRef());
writeMail->newMail();
setCaption( tr( "Write mail" ) );
}
void MailItWindow::composeReply(Email &mail, bool& replyAll)
{
compose();
writeMail->reply(mail,replyAll) ;
}
void MailItWindow::composeForward(Email &mail)
{
compose();
writeMail->forward(mail) ;
}
void MailItWindow::showEmailClient()
{
viewingMail = FALSE;
writeMail->hide();
readMail->hide();
views->raiseWidget(emailClient);
setCaption( tr(currentCaption) );
}
void MailItWindow::viewMail(QListView *view, Email *mail)
{
viewingMail = TRUE;
emailClient->hide();
int result=0;
if ((mail->received)&&(!mail->downloaded))
{
QMessageBox mb( tr("Mail not downloaded"),
tr("The mail you have clicked \n"
"has not been downloaded yet.\n "
"Would you like to do it now ?"),
QMessageBox::Information,
QMessageBox::Yes | QMessageBox::Default,
QMessageBox::No | QMessageBox::Escape,0 );
result=mb.exec();
if (result==QMessageBox::Yes)
{
emailClient->download(mail);
}
}
readMail->update(view, mail);
views->raiseWidget(readMail);
setCaption( tr( "Read Mail" ) );
}
void MailItWindow::updateMailView(Email *mail)
{
if (viewingMail) {
readMail->mailUpdated(mail);
}
}
void MailItWindow::updateCaption(const QString &newCaption)
{
currentCaption = newCaption;
setCaption(tr(currentCaption));
}
void MailItWindow::setDocument(const QString &_address)
{
// strip leading 'mailto:'
QString address = _address;
if (address.startsWith("mailto:"))
address = address.mid(6);
compose();
writeMail->setRecipient(address);
}
diff --git a/noncore/unsupported/mailit/maillist.cpp b/noncore/unsupported/mailit/maillist.cpp
index b5325a9..8c34295 100644
--- a/noncore/unsupported/mailit/maillist.cpp
+++ b/noncore/unsupported/mailit/maillist.cpp
@@ -1,131 +1,131 @@
/**********************************************************************
** 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 "maillist.h"
void MailList::clear()
{
- sortedList.setAutoDelete(TRUE);
- sortedList.clear();
- currentPos = 0;
+ sortedList.setAutoDelete(TRUE);
+ sortedList.clear();
+ currentPos = 0;
}
int MailList::count()
{
- return sortedList.count();
+ return sortedList.count();
}
int* MailList::first()
{
- dList *mPtr;
-
- if (sortedList.count() == 0)
- return NULL;
-
- mPtr = sortedList.at(0);
- currentPos = 1;
- return &(mPtr->serverId);
+ dList *mPtr;
+
+ if (sortedList.count() == 0)
+ return NULL;
+
+ mPtr = sortedList.at(0);
+ currentPos = 1;
+ return &(mPtr->serverId);
}
int* MailList::next()
{
- dList *mPtr;
-
- if ( (currentPos) >= sortedList.count())
- return NULL;
-
- mPtr = sortedList.at(currentPos);
- currentPos++;
- return &(mPtr->serverId);
+ dList *mPtr;
+
+ if ( (currentPos) >= sortedList.count())
+ return NULL;
+
+ mPtr = sortedList.at(currentPos);
+ currentPos++;
+ return &(mPtr->serverId);
}
void MailList::sizeInsert(int serverId, uint size)
{
- dList *tempPtr;
- int x;
-
- dList *newEntry = new dList;
- newEntry->serverId = serverId;
- newEntry->size = size;
-
- for (tempPtr = sortedList.first(); tempPtr != NULL; tempPtr = sortedList.next() ) {
- if (newEntry->size < tempPtr->size) {
- x = sortedList.at();
- sortedList.insert(x, newEntry);
- return;
- }
- }
- sortedList.append(newEntry);
+ dList *tempPtr;
+ int x;
+
+ dList *newEntry = new dList;
+ newEntry->serverId = serverId;
+ newEntry->size = size;
+
+ for (tempPtr = sortedList.first(); tempPtr != NULL; tempPtr = sortedList.next() ) {
+ if (newEntry->size < tempPtr->size) {
+ x = sortedList.at();
+ sortedList.insert(x, newEntry);
+ return;
+ }
+ }
+ sortedList.append(newEntry);
}
-void MailList::moveFront(int serverId, uint size)
+void MailList::moveFront(int serverId, uint/* size*/)
{
- dList *currentPtr;
- uint tempPos;
- QString temp;
-
- tempPos = currentPos;
- if ( tempPos >= sortedList.count() )
- return;
- currentPtr = sortedList.at(tempPos);
- while ( ((tempPos+1) < sortedList.count()) && ( currentPtr->serverId != serverId) ) {
- tempPos++;
- currentPtr = sortedList.at(tempPos);
- }
-
- if ( (currentPtr != NULL) && (currentPtr->serverId == serverId) ) {
- temp.setNum(currentPtr->serverId);
- qWarning("moved to front, message: " + temp);
-
- dList *itemPtr = sortedList.take(tempPos);
- sortedList.insert(currentPos, itemPtr);
- }
+ dList *currentPtr;
+ uint tempPos;
+ QString temp;
+
+ tempPos = currentPos;
+ if ( tempPos >= sortedList.count() )
+ return;
+ currentPtr = sortedList.at(tempPos);
+ while ( ((tempPos+1) < sortedList.count()) && ( currentPtr->serverId != serverId) ) {
+ tempPos++;
+ currentPtr = sortedList.at(tempPos);
+ }
+
+ if ( (currentPtr != NULL) && (currentPtr->serverId == serverId) ) {
+ temp.setNum(currentPtr->serverId);
+ qWarning("moved to front, message: " + temp);
+
+ dList *itemPtr = sortedList.take(tempPos);
+ sortedList.insert(currentPos, itemPtr);
+ }
}
//only works if mail is not already in download
-bool MailList::remove(int serverId, uint size)
+bool MailList::remove(int serverId, uint /*size*/)
{
- dList *currentPtr;
- uint tempPos;
- QString temp;
-
- tempPos = currentPos;
- if ( tempPos >=sortedList.count() )
- return FALSE;
- currentPtr = sortedList.at(tempPos);
- while ( ((tempPos + 1) < sortedList.count()) && ( currentPtr->serverId != serverId) ) {
- tempPos++;
- currentPtr = sortedList.at(tempPos);
- }
-
- if ( (currentPtr != NULL) && (currentPtr->serverId == serverId) ) {
- temp.setNum(currentPtr->serverId);
- qWarning("deleted message: " + temp);
- sortedList.remove(tempPos);
-
- return TRUE;
- }
- return FALSE;
+ dList *currentPtr;
+ uint tempPos;
+ QString temp;
+
+ tempPos = currentPos;
+ if ( tempPos >=sortedList.count() )
+ return FALSE;
+ currentPtr = sortedList.at(tempPos);
+ while ( ((tempPos + 1) < sortedList.count()) && ( currentPtr->serverId != serverId) ) {
+ tempPos++;
+ currentPtr = sortedList.at(tempPos);
+ }
+
+ if ( (currentPtr != NULL) && (currentPtr->serverId == serverId) ) {
+ temp.setNum(currentPtr->serverId);
+ qWarning("deleted message: " + temp);
+ sortedList.remove(tempPos);
+
+ return TRUE;
+ }
+ return FALSE;
}
-void MailList::insert(int pos, int serverId, uint size)
+void MailList::insert(int /*pos*/, int /*serverId*/, uint/* size*/)
{
-// sortedList.insert(pos, mPtr);
+// sortedList.insert(pos, mPtr);
}
diff --git a/noncore/unsupported/mailit/popclient.cpp b/noncore/unsupported/mailit/popclient.cpp
index dc0116d..5da3bcb 100644
--- a/noncore/unsupported/mailit/popclient.cpp
+++ b/noncore/unsupported/mailit/popclient.cpp
@@ -1,327 +1,331 @@
/**********************************************************************
** 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 "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(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");
+ emit updateStatus(tr("DNS lookup"));
}
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)
{
+ errorHandlingWithMsg( status, QString::null );
+}
+void PopClient::errorHandlingWithMsg(int status, const QString & Msg )
+{
emit updateStatus(tr("Error Occured"));
- emit errorOccurred(status);
+ emit errorOccurred(status, Msg);
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;
break;
}
//ask for number of messages
case Stat: {
if (response[0] == '+') {
*stream << "STAT" << "\r\n";
status = Mcnt;
- } else errorHandling(ErrLoginFailed);
+ } else errorHandlingWithMsg(ErrLoginFailed, response);
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;
messageCount = 1;
}
if (selected) {
int *ptr = mailList->first();
if (ptr != 0) {
newMessages++; //to ensure no early jumpout
messageCount = *ptr;
} else newMessages = 0;
}
- } else errorHandling(ErrUnknownResponse);
+ } else errorHandlingWithMsg(ErrUnknownResponse, response);
}
//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);
+ errorHandlingWithMsg(ErrUnknownResponse, response);
}
}
}
//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";
}
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);
+ } else errorHandlingWithMsg(ErrUnknownResponse, response);
}
}
//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);
} else { //incomplete mail downloaded
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 c58bc48..6774ceb 100644
--- a/noncore/unsupported/mailit/popclient.h
+++ b/noncore/unsupported/mailit/popclient.h
@@ -1,76 +1,77 @@
/**********************************************************************
** 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(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 errorOccurred(int status, const QString & Msg );
void updateStatus(const QString &);
void mailTransfered(int);
void mailboxSize(int);
void currentMailSize(int);
void downloadedSize(int);
public slots:
void errorHandling(int);
+ void errorHandlingWithMsg(int, const QString & );
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 2916f45..5b5ef52 100644
--- a/noncore/unsupported/mailit/smtpclient.cpp
+++ b/noncore/unsupported/mailit/smtpclient.cpp
@@ -1,163 +1,170 @@
/**********************************************************************
** 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(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(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);
+ errorHandlingWithMsg( status, QString::null );
+}
+
+void SmtpClient::errorHandlingWithMsg(int status, const QString & EMsg )
+{
+ emit errorOccurred(status, EMsg );
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);
+ } else errorHandlingWithMsg(ErrUnknownResponse,response);
break;
}
case From: {
if (response[0] == '2') {
- *stream << "MAIL FROM: " << mailPtr->from << "\r\n";
+ qDebug(mailPtr->from);
+ *stream << "MAIL FROM: <" << mailPtr->from << ">\r\n";
status = Recv;
- } else errorHandling(ErrUnknownResponse);
+ } else errorHandlingWithMsg(ErrUnknownResponse, response );
break;
}
case Recv: {
- if (response[0] == '2') {
+ if (response[0] == '2') {
it = mailPtr->to.begin();
- if (it == NULL)
- errorHandling(ErrUnknownResponse);
- *stream << "RCPT TO: " << *it << ">\r\n";
+ if (it == NULL) {
+ errorHandlingWithMsg(ErrUnknownResponse,response);
+ }
+ *stream << "RCPT TO: <" << *it << ">\r\n";
status = MRcv;
- } else errorHandling(ErrUnknownResponse);
+ } else errorHandlingWithMsg(ErrUnknownResponse,response);
break;
}
case MRcv: {
if (response[0] == '2') {
it++;
if ( it != mailPtr->to.end() ) {
*stream << "RCPT TO: <" << *it << ">\r\n";
break;
} else {
status = Data;
}
- } else errorHandling(ErrUnknownResponse);
+ } else errorHandlingWithMsg(ErrUnknownResponse,response);
}
case Data: {
if (response[0] == '2') {
*stream << "DATA\r\n";
status = Body;
emit updateStatus(tr("Sending: ") + mailPtr->subject);
- } else errorHandling(ErrUnknownResponse);
+
+ } else errorHandlingWithMsg(ErrUnknownResponse,response);
break;
}
case Body: {
if (response[0] == '3') {
*stream << mailPtr->body << "\r\n.\r\n";
mailPtr = mailList.next();
if (mailPtr != NULL) {
status = From;
} else {
status = Quit;
}
- } else errorHandling(ErrUnknownResponse);
+ } else errorHandlingWithMsg(ErrUnknownResponse,response);
break;
}
case Quit: {
if (response[0] == '2') {
*stream << "QUIT\r\n";
status = Done;
QString temp;
temp.setNum(mailList.count());
emit updateStatus(tr("Sent ") + temp + tr(" messages"));
emit mailSent();
mailList.clear();
sending = FALSE;
socket->close();
- } else errorHandling(ErrUnknownResponse);
+ } else errorHandlingWithMsg(ErrUnknownResponse,response);
break;
}
}
}
diff --git a/noncore/unsupported/mailit/smtpclient.h b/noncore/unsupported/mailit/smtpclient.h
index 45c0703..554ba3f 100644
--- a/noncore/unsupported/mailit/smtpclient.h
+++ b/noncore/unsupported/mailit/smtpclient.h
@@ -1,75 +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 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;
};
class SmtpClient: public QObject
{
Q_OBJECT
public:
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 errorOccurred(int, const QString & LR );
void updateStatus(const QString &);
void mailSent();
public slots:
void errorHandling(int);
+ void errorHandlingWithMsg(int, const QString & LastResponse );
protected slots:
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;
};
#endif
diff --git a/noncore/unsupported/mailit/viewatt.cpp b/noncore/unsupported/mailit/viewatt.cpp
index 21885c2..293e137 100644
--- a/noncore/unsupported/mailit/viewatt.cpp
+++ b/noncore/unsupported/mailit/viewatt.cpp
@@ -1,121 +1,121 @@
/**********************************************************************
** 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 "resource.h"
#include "viewatt.h"
#include <qwhatsthis.h>
#include <qpe/applnk.h>
#include <qpe/mimetype.h>
ViewAtt::ViewAtt(QWidget *parent, const char *name, WFlags f)
: QMainWindow(parent, name, f)
{
- setCaption("Exploring attatchments");
+ setCaption(tr("Exploring attatchments"));
setToolBarsMovable( FALSE );
bar = new QToolBar(this);
installButton = new QAction( tr( "Install" ), Resource::loadPixmap( "exec" ), QString::null, CTRL + Key_C, this, 0 );
connect(installButton, SIGNAL(activated()), this, SLOT(install()) );
installButton->setWhatsThis(tr("Click here to install the attachment to your Documents"));
listView = new QListView(this, "AttView");
- listView->addColumn( "Attatchment" );
- listView->addColumn( "Type" );
- listView->addColumn( "Installed" );
+ listView->addColumn( tr("Attatchment") );
+ listView->addColumn( tr("Type") );
+ listView->addColumn( tr("Installed") );
setCentralWidget(listView);
QWhatsThis::add(listView,QWidget::tr("This is an overview about all attachments in the mail"));
}
void ViewAtt::update(Email *mailIn, bool inbox)
{
QListViewItem *item;
Enclosure *ePtr;
listView->clear();
if (inbox) {
bar->clear();
installButton->addTo( bar );
bar->show();
} else {
bar->hide();
}
mail = mailIn;
for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) {
- QString isInstalled = "No";
+ QString isInstalled = tr("No");
if (ePtr->installed)
- isInstalled = "Yes";
+ isInstalled = tr("Yes");
item = new QListViewItem(listView, ePtr->originalName, ePtr->contentType, isInstalled);
const QString& mtypeDef=(const QString&) ePtr->contentType+"/"+ePtr->contentAttribute;
MimeType mt(mtypeDef);
item->setPixmap(0, mt.pixmap());
/*
if (ePtr->contentType == "TEXT") {
actions = new QAction( tr("View"), Resource::loadPixmap("TextEditor"), QString::null, CTRL + Key_C, this, 0);
actions->addTo(bar);
}
if (ePtr->contentType == "AUDIO") {
actions = new QAction( tr("Play"), Resource::loadPixmap("SoundPlayer"), QString::null, CTRL + Key_C, this, 0);
actions->addTo(bar);
item->setPixmap(0, Resource::loadPixmap("play"));
}
if (ePtr->contentType == "IMAGE") {
actions = new QAction( tr("Show"), Resource::loadPixmap("pixmap"), QString::null, CTRL + Key_C, this, 0);
actions->addTo(bar);
item->setPixmap(0, Resource::loadPixmap("pixmap"));
}*/
}
}
void ViewAtt::install()
{
Enclosure *ePtr, *selPtr;
QListViewItem *item;
QString filename;
DocLnk d;
item = listView->selectedItem();
if (item != NULL) {
filename = item->text(0);
selPtr = NULL;
for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) {
if (ePtr->originalName == filename)
selPtr = ePtr;
}
if (selPtr == NULL) {
qWarning("Internal error, file is not installed to documents");
return;
}
d.setName(selPtr->originalName);
d.setFile(selPtr->path + selPtr->name);
d.setType(selPtr->contentType + "/" + selPtr->contentAttribute);
d.writeLink();
selPtr->installed = TRUE;
- item->setText(2, "Yes");
+ item->setText(2, tr("Yes"));
}
}
diff --git a/noncore/unsupported/mailit/writemail.cpp b/noncore/unsupported/mailit/writemail.cpp
index 0298cb3..26b9660 100644
--- a/noncore/unsupported/mailit/writemail.cpp
+++ b/noncore/unsupported/mailit/writemail.cpp
@@ -1,402 +1,402 @@
/**********************************************************************
** 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 <qmessagebox.h>
#include <qwhatsthis.h>
#include "writemail.h"
#include <qpe/resource.h>
WriteMail::WriteMail( QWidget* parent, const char* name, WFlags fl ):QMainWindow( parent, name, fl )
{
- showingAddressList = FALSE;
- init();
-
- addAtt = new AddAtt(0, "Add Attachments");
+ showingAddressList = FALSE;
+ init();
+
+ addAtt = new AddAtt(0, "Add Attachments");
}
WriteMail::~WriteMail()
{
- delete addAtt;
+ delete addAtt;
}
void WriteMail::setAddressList(AddressList *list)
{
- AContact *cPtr;
-
- addressList = list;
-
- addressView->clear();
- QList<AContact> *cListPtr = addressList->getContactList();
- QListViewItem *item;
- for (cPtr = cListPtr->first(); cPtr != 0; cPtr = cListPtr->next() ) {
- item = new QListViewItem(addressView, cPtr->name, cPtr->email);
- }
+ AContact *cPtr;
+
+ addressList = list;
+
+ addressView->clear();
+ QList<AContact> *cListPtr = addressList->getContactList();
+ QListViewItem *item;
+ for (cPtr = cListPtr->first(); cPtr != 0; cPtr = cListPtr->next() ) {
+ item = new QListViewItem(addressView, cPtr->name, cPtr->email);
+ }
}
void WriteMail::init()
{
- setToolBarsMovable(FALSE);
-
- bar = new QToolBar(this);
- bar->setHorizontalStretchable( TRUE );
+ setToolBarsMovable(FALSE);
+
+ bar = new QToolBar(this);
+ bar->setHorizontalStretchable( TRUE );
- menu = new QMenuBar( bar );
+ menu = new QMenuBar( bar );
- mailMenu = new QPopupMenu(menu);
- menu->insertItem( tr( "&Mail" ), mailMenu);
- addMenu = new QPopupMenu(menu);
- menu->insertItem( tr( "&Add" ), addMenu);
-
- bar = new QToolBar(this);
- attachButton = new QAction(tr("Attachment"), Resource::loadPixmap("mailit/attach"), QString::null, 0, this, 0);
- attachButton->addTo(bar);
- attachButton->addTo(addMenu);
- connect( attachButton, SIGNAL( activated() ), this, SLOT( attachFile() ) );
- attachButton->setWhatsThis(tr("Click here to attach files to your mail"));
-
- confirmButton = new QAction(tr("Enque mail"), Resource::loadPixmap("OKButton"), QString::null, 0, this, 0);
- confirmButton->addTo(bar);
- confirmButton->addTo(mailMenu);
- connect( confirmButton, SIGNAL( activated() ), this, SLOT( accept() ) );
- confirmButton->setWhatsThis(tr("This button puts your mail in the send queue"));
-
- newButton = new QAction(tr("New mail"), Resource::loadPixmap("new"), QString::null, 0, this, 0);
- newButton->addTo(mailMenu);
- connect( newButton, SIGNAL( activated() ), this, SLOT( newMail() ) );
- newButton->setWhatsThis(tr("Click here to create a new mail"));
+ mailMenu = new QPopupMenu(menu);
+ menu->insertItem( tr( "&Mail" ), mailMenu);
+ addMenu = new QPopupMenu(menu);
+ menu->insertItem( tr( "&Add" ), addMenu);
+
+ bar = new QToolBar(this);
+ attachButton = new QAction(tr("Attachment"), Resource::loadPixmap("mailit/attach"), QString::null, 0, this, 0);
+ attachButton->addTo(bar);
+ attachButton->addTo(addMenu);
+ connect( attachButton, SIGNAL( activated() ), this, SLOT( attachFile() ) );
+ attachButton->setWhatsThis(tr("Click here to attach files to your mail"));
+
+ confirmButton = new QAction(tr("Enque mail"), Resource::loadPixmap("OKButton"), QString::null, 0, this, 0);
+ confirmButton->addTo(bar);
+ confirmButton->addTo(mailMenu);
+ connect( confirmButton, SIGNAL( activated() ), this, SLOT( accept() ) );
+ confirmButton->setWhatsThis(tr("This button puts your mail in the send queue"));
+
+ newButton = new QAction(tr("New mail"), Resource::loadPixmap("new"), QString::null, 0, this, 0);
+ newButton->addTo(mailMenu);
+ connect( newButton, SIGNAL( activated() ), this, SLOT( newMail() ) );
+ newButton->setWhatsThis(tr("Click here to create a new mail"));
- widget = new QWidget(this, "widget");
- grid = new QGridLayout( widget );
+ widget = new QWidget(this, "widget");
+ grid = new QGridLayout( widget );
- recipientsBox = new QComboBox( FALSE, widget, "toLabel" );
- recipientsBox->insertItem( tr( "To:" ) );
- recipientsBox->insertItem( tr( "CC:" ) );
- recipientsBox->setCurrentItem(0);
- grid->addWidget( recipientsBox, 0, 0 );
- connect(recipientsBox,SIGNAL(activated(int)),this, SLOT(changeRecipients(int)));
-
- subjetLabel = new QLabel( widget, "subjetLabel" );
- subjetLabel->setText( tr( "Subject:" ) );
+ recipientsBox = new QComboBox( FALSE, widget, "toLabel" );
+ recipientsBox->insertItem( tr( "To:" ) );
+ recipientsBox->insertItem( tr( "CC:" ) );
+ recipientsBox->setCurrentItem(0);
+ grid->addWidget( recipientsBox, 0, 0 );
+ connect(recipientsBox,SIGNAL(activated(int)),this, SLOT(changeRecipients(int)));
+
+ subjetLabel = new QLabel( widget, "subjetLabel" );
+ subjetLabel->setText( tr( "Subject:" ) );
- grid->addWidget( subjetLabel, 1, 0 );
+ grid->addWidget( subjetLabel, 1, 0 );
- ToolButton13_2 = new QToolButton( widget, "ToolButton13_2" );
- ToolButton13_2->setText( tr( "..." ) );
- grid->addWidget( ToolButton13_2, 1, 2 );
+ ToolButton13_2 = new QToolButton( widget, "ToolButton13_2" );
+ ToolButton13_2->setText( tr( "..." ) );
+ grid->addWidget( ToolButton13_2, 1, 2 );
- subjectInput = new QLineEdit( widget, "subjectInput" );
- grid->addWidget( subjectInput, 1, 1 );
- QWhatsThis::add(subjectInput,QWidget::tr("The mail subject should be entered here"));
+ subjectInput = new QLineEdit( widget, "subjectInput" );
+ grid->addWidget( subjectInput, 1, 1 );
+ QWhatsThis::add(subjectInput,QWidget::tr("The mail subject should be entered here"));
- toInput = new QLineEdit( widget, "toInput" );
- grid->addWidget( toInput, 0, 1 );
- QWhatsThis::add(recipientsBox,QWidget::tr("Recipients can be entered here"));
+ toInput = new QLineEdit( widget, "toInput" );
+ grid->addWidget( toInput, 0, 1 );
+ QWhatsThis::add(recipientsBox,QWidget::tr("Recipients can be entered here"));
- ccInput = new QLineEdit( widget, "ccInput" );
- ccInput->hide();
- grid->addWidget( ccInput, 0, 1 );
- QWhatsThis::add(ccInput,QWidget::tr("If you would like to send copies of your mail they can be entered here"));
+ ccInput = new QLineEdit( widget, "ccInput" );
+ ccInput->hide();
+ grid->addWidget( ccInput, 0, 1 );
+ QWhatsThis::add(ccInput,QWidget::tr("If you would like to send copies of your mail they can be entered here"));
- addressButton = new QToolButton( widget, "addressButton" );
- addressButton->setPixmap( Resource::loadPixmap("AddressBook") );
- addressButton->setToggleButton(TRUE);
- grid->addWidget( addressButton, 0, 2 );
- connect(addressButton, SIGNAL(clicked()), this, SLOT(getAddress()) );
- QWhatsThis::add(addressButton,QWidget::tr("This button opens the address selector with all mail adresses from your OPIE addressbook"));
+ addressButton = new QToolButton( widget, "addressButton" );
+ addressButton->setPixmap( Resource::loadPixmap("AddressBook") );
+ addressButton->setToggleButton(TRUE);
+ grid->addWidget( addressButton, 0, 2 );
+ connect(addressButton, SIGNAL(clicked()), this, SLOT(getAddress()) );
+ QWhatsThis::add(addressButton,QWidget::tr("This button opens the address selector with all mail adresses from your Opie addressbook"));
- emailInput = new QMultiLineEdit( widget, "emailInput" );
- grid->addMultiCellWidget( emailInput, 2, 2, 0, 2);
- QWhatsThis::add(emailInput,QWidget::tr("Enter your mail text here"));
+ emailInput = new QMultiLineEdit( widget, "emailInput" );
+ grid->addMultiCellWidget( emailInput, 2, 2, 0, 2);
+ QWhatsThis::add(emailInput,QWidget::tr("Enter your mail text here"));
- addressView = new QListView( widget, "addressView");
- addressView->addColumn("Name");
- addressView->addColumn("EMail");
- addressView->setAllColumnsShowFocus(TRUE);
- addressView->setMultiSelection(TRUE);
- addressView->hide();
- grid->addMultiCellWidget( addressView, 3, 3, 0, 2);
- QWhatsThis::add(recipientsBox,QWidget::tr("Choose the recipients from this list"));
+ addressView = new QListView( widget, "addressView");
+ addressView->addColumn(tr("Name"));
+ addressView->addColumn(tr("EMail") );
+ addressView->setAllColumnsShowFocus(TRUE);
+ addressView->setMultiSelection(TRUE);
+ addressView->hide();
+ grid->addMultiCellWidget( addressView, 3, 3, 0, 2);
+ QWhatsThis::add(recipientsBox,QWidget::tr("Choose the recipients from this list"));
- okButton = new QToolButton(bar, "ok");
- okButton->setPixmap( Resource::loadPixmap("enter") );
- okButton->hide();
- connect(okButton, SIGNAL(clicked()), this, SLOT(addRecipients()) );
- QWhatsThis::add(okButton,QWidget::tr("Queue your mail by clicking here"));
-
- setCentralWidget(widget);
+ okButton = new QToolButton(bar, "ok");
+ okButton->setPixmap( Resource::loadPixmap("enter") );
+ okButton->hide();
+ connect(okButton, SIGNAL(clicked()), this, SLOT(addRecipients()) );
+ QWhatsThis::add(okButton,QWidget::tr("Queue your mail by clicking here"));
+
+ setCentralWidget(widget);
}
void WriteMail::reject()
{
- emit cancelMail();
+ emit cancelMail();
}
void WriteMail::accept()
{
- QStringList attachedFiles, attachmentsType;
- int idCount = 0;
-
- if (toInput->text() == "")
- {
- QMessageBox::warning(this,tr("No recipient"), tr("Send mail to whom?"), tr("OK\n"));
- return;
- }
-
- if (! getRecipients(false) )
- {
- QMessageBox::warning(this,tr("Incorrect recipient separator"),
- tr("Recipients must be separated by ;\nand be valid emailaddresses"), tr("OK\n"));
- return;
- }
-
- if ((ccInput->text()!="") && (! getRecipients(true) ))
- {
- QMessageBox::warning(this,tr("Incorrect carbon copy separator"),
- tr("CC Recipients must be separated by ;\nand be valid emailaddresses"), tr("OK\n"));
- return;
- }
-
- mail.subject = subjectInput->text();
- mail.body = emailInput->text();
- mail.sent = false;
- mail.received = false;
-
- mail.rawMail = "To: ";
-
- for (QStringList::Iterator it = mail.recipients.begin();
- it != mail.recipients.end(); ++it) {
-
- mail.rawMail += (*it);
- mail.rawMail += ",\n";
- }
-
- mail.rawMail.truncate(mail.rawMail.length()-2);
-
- mail.rawMail += "\nCC: ";
-
- for (QStringList::Iterator it = mail.carbonCopies.begin();
- it != mail.carbonCopies.end(); ++it) {
-
- mail.rawMail += (*it);
- mail.rawMail += ",\n";
- }
+ QStringList attachedFiles, attachmentsType;
+ int idCount = 0;
+
+ if (toInput->text() == "")
+ {
+ QMessageBox::warning(this,tr("No recipient"), tr("Send mail to whom?"), tr("OK\n"));
+ return;
+ }
+
+ if (! getRecipients(false) )
+ {
+ QMessageBox::warning(this,tr("Incorrect recipient separator"),
+ tr("Recipients must be separated by ;\nand be valid emailaddresses"), tr("OK\n"));
+ return;
+ }
+
+ if ((ccInput->text()!="") && (! getRecipients(true) ))
+ {
+ QMessageBox::warning(this,tr("Incorrect carbon copy separator"),
+ tr("CC Recipients must be separated by ;\nand be valid emailaddresses"), tr("OK\n"));
+ return;
+ }
+
+ mail.subject = subjectInput->text();
+ mail.body = emailInput->text();
+ mail.sent = false;
+ mail.received = false;
+
+ mail.rawMail = "To: ";
+
+ for (QStringList::Iterator it = mail.recipients.begin();
+ it != mail.recipients.end(); ++it) {
+
+ mail.rawMail += (*it);
+ mail.rawMail += ",\n";
+ }
+
+ mail.rawMail.truncate(mail.rawMail.length()-2);
+
+ mail.rawMail += "\nCC: ";
+
+ for (QStringList::Iterator it = mail.carbonCopies.begin();
+ it != mail.carbonCopies.end(); ++it) {
+
+ mail.rawMail += (*it);
+ mail.rawMail += ",\n";
+ }
- mail.rawMail += mail.from;
- mail.rawMail += "\nSubject: ";
- mail.rawMail += mail.subject;
- mail.rawMail += "\n\n";
-
- attachedFiles = addAtt->returnattachedFiles();
- attachmentsType = addAtt->returnFileTypes();
+ mail.rawMail += mail.from;
+ mail.rawMail += "\nSubject: ";
+ mail.rawMail += mail.subject;
+ mail.rawMail += "\n\n";
+
+ attachedFiles = addAtt->returnattachedFiles();
+ attachmentsType = addAtt->returnFileTypes();
- QStringList::Iterator itType = attachmentsType.begin();
-
- Enclosure e;
- for ( QStringList::Iterator it = attachedFiles.begin(); it != attachedFiles.end(); ++it ) {
- e.id = idCount;
- e.originalName = (*it).latin1();
- e.contentType = (*itType).latin1();
- e.contentAttribute = (*itType).latin1();
- e.saved = TRUE;
- mail.addEnclosure(&e);
-
- itType++;
- idCount++;
- }
- mail.rawMail += mail.body;
- mail.rawMail += "\n";
- mail.rawMail += ".\n";
- emit sendMailRequested(mail);
- addAtt->clear();
+ QStringList::Iterator itType = attachmentsType.begin();
+
+ Enclosure e;
+ for ( QStringList::Iterator it = attachedFiles.begin(); it != attachedFiles.end(); ++it ) {
+ e.id = idCount;
+ e.originalName = (*it).latin1();
+ e.contentType = (*itType).latin1();
+ e.contentAttribute = (*itType).latin1();
+ e.saved = TRUE;
+ mail.addEnclosure(&e);
+
+ itType++;
+ idCount++;
+ }
+ mail.rawMail += mail.body;
+ mail.rawMail += "\n";
+ mail.rawMail += ".\n";
+ emit sendMailRequested(mail);
+ addAtt->clear();
}
void WriteMail::getAddress()
{
- showingAddressList = !showingAddressList;
-
- if (showingAddressList) {
- emailInput->hide();
- addressView->show();
- okButton->show();
-
- } else {
- addressView->hide();
- okButton->hide();
- emailInput->show();
- }
+ showingAddressList = !showingAddressList;
+
+ if (showingAddressList) {
+ emailInput->hide();
+ addressView->show();
+ okButton->show();
+
+ } else {
+ addressView->hide();
+ okButton->hide();
+ emailInput->show();
+ }
}
void WriteMail::attachFile()
{
- addAtt->showMaximized();
+ addAtt->showMaximized();
}
void WriteMail::reply(Email replyMail, bool replyAll)
{
- int pos;
- QString ccRecipients;
-
- mail = replyMail;
- mail.files.clear();
-
- toInput->setText(mail.fromMail);
-
- if (replyAll)
- {
- for (QStringList::Iterator it = mail.carbonCopies.begin();it != mail.carbonCopies.end(); ++it)
- {
- ccRecipients.append(*it);
- ccRecipients.append(";");
- }
- ccRecipients.truncate(ccRecipients.length()-1); //no ; at the end
- ccInput->setText(ccRecipients);
- }
- else ccInput->clear();
-
- subjectInput->setText(tr("Re: ") + mail.subject);
-
- QString citation=mail.fromMail;
- citation.append(tr(" wrote on "));
- citation.append(mail.date);
- citation.append(":\n");
-
+ int pos;
+ QString ccRecipients;
+
+ mail = replyMail;
+ mail.files.clear();
+
+ toInput->setText(mail.fromMail);
+
+ if (replyAll)
+ {
+ for (QStringList::Iterator it = mail.carbonCopies.begin();it != mail.carbonCopies.end(); ++it)
+ {
+ ccRecipients.append(*it);
+ ccRecipients.append(";");
+ }
+ ccRecipients.truncate(ccRecipients.length()-1); //no ; at the end
+ ccInput->setText(ccRecipients);
+ }
+ else ccInput->clear();
+
+ subjectInput->setText(tr("Re: ") + mail.subject);
+
+ QString citation=mail.fromMail;
+ citation.append(tr(" wrote on "));
+ citation.append(mail.date);
+ citation.append(":\n");
+
- //mail.body.insert(0,tr("On"));
- pos = 0;
- mail.body.insert(pos, ">");
- while (pos != -1) {
- pos = mail.body.find('\n', pos);
- if (pos != -1)
- mail.body.insert(++pos, ">>");
- }
- mail.body.insert(0,citation);
- emailInput->setText(mail.body);
+ //mail.body.insert(0,tr("On"));
+ pos = 0;
+ mail.body.insert(pos, ">");
+ while (pos != -1) {
+ pos = mail.body.find('\n', pos);
+ if (pos != -1)
+ mail.body.insert(++pos, ">");
+ }
+ mail.body.insert(0,citation);
+ emailInput->setText(mail.body);
}
void WriteMail::forward(Email forwMail)
{
- int pos=0;
-
- QString fwdBody=tr("======forwarded message from ");
- fwdBody.append(forwMail.fromMail);
- fwdBody.append(tr(" starts======\n\n"));
-
- mail=forwMail;
- toInput->setText("");
- ccInput->setText("");
- subjectInput->setText(tr("FWD: ") + mail.subject);
-
- fwdBody+=mail.body;
- fwdBody+=QString(tr("======end of forwarded message======\n\n"));
-
- emailInput->setText(fwdBody);
+ // int pos=0;
+
+ QString fwdBody=tr("======forwarded message from ");
+ fwdBody.append(forwMail.fromMail);
+ fwdBody.append(tr(" starts======\n\n"));
+
+ mail=forwMail;
+ toInput->setText("");
+ ccInput->setText("");
+ subjectInput->setText(tr("FWD: ") + mail.subject);
+
+ fwdBody+=mail.body;
+ fwdBody+=QString(tr("======end of forwarded message======\n\n"));
+
+ emailInput->setText(fwdBody);
}
bool WriteMail::getRecipients(bool ccField)
{
- QString str, temp;
- int pos = 0;
-
- if (ccField)
- {
- mail.carbonCopies.clear();
- temp = ccInput->text();
- }
- else
- {
- mail.recipients.clear();
- temp=toInput->text() ;
- }
-
- while ( (pos = temp.find(';')) != -1) {
- str = temp.left(pos).stripWhiteSpace();
- temp = temp.right(temp.length() - (pos + 1));
- if ( str.find('@') == -1)
- return false;
- ccField ? mail.carbonCopies.append(str) : mail.recipients.append(str);
- //addressList->addContact(str, "");
- }
- temp = temp.stripWhiteSpace();
- if ( temp.find('@') == -1)
- return false;
- ccField ? mail.carbonCopies.append(temp) : mail.recipients.append(temp);
- //addressList->addContact(temp, "");
-
- return TRUE;
+ QString str, temp;
+ int pos = 0;
+
+ if (ccField)
+ {
+ mail.carbonCopies.clear();
+ temp = ccInput->text();
+ }
+ else
+ {
+ mail.recipients.clear();
+ temp=toInput->text() ;
+ }
+
+ while ( (pos = temp.find(';')) != -1) {
+ str = temp.left(pos).stripWhiteSpace();
+ temp = temp.right(temp.length() - (pos + 1));
+ if ( str.find('@') == -1)
+ return false;
+ ccField ? mail.carbonCopies.append(str) : mail.recipients.append(str);
+ //addressList->addContact(str, "");
+ }
+ temp = temp.stripWhiteSpace();
+ if ( temp.find('@') == -1)
+ return false;
+ ccField ? mail.carbonCopies.append(temp) : mail.recipients.append(temp);
+ //addressList->addContact(temp, "");
+
+ return TRUE;
}
void WriteMail::addRecipients()
{
- toInput->isVisible() ? addRecipients(false) : addRecipients(true);
-}
+ toInput->isVisible() ? addRecipients(false) : addRecipients(true);
+}
void WriteMail::addRecipients(bool ccField)
{
- QString recipients = "";
-
- mail.recipients.clear();
-
- QListViewItem *item = addressView->firstChild();
- while (item != NULL) {
- if ( item->isSelected() ) {
- if (recipients == "") {
- recipients = item->text(1);
- } else {
- recipients += "; " + item->text(1);
- }
- }
- item = item->nextSibling();
- }
-
- ccField ? ccInput->setText(recipients):toInput->setText(recipients);
-
- addressView->hide();
- okButton->hide();
- emailInput->show();
- addressButton->setOn(FALSE);
- showingAddressList = !showingAddressList;
+ QString recipients = "";
+
+ mail.recipients.clear();
+
+ QListViewItem *item = addressView->firstChild();
+ while (item != NULL) {
+ if ( item->isSelected() ) {
+ if (recipients == "") {
+ recipients = item->text(1);
+ } else {
+ recipients += "; " + item->text(1);
+ }
+ }
+ item = item->nextSibling();
+ }
+
+ ccField ? ccInput->setText(recipients):toInput->setText(recipients);
+
+ addressView->hide();
+ okButton->hide();
+ emailInput->show();
+ addressButton->setOn(FALSE);
+ showingAddressList = !showingAddressList;
}
void WriteMail::changeRecipients(int selection)
{
- if (selection==0)
- {
- toInput->show();
- ccInput->hide();
- }
- else if (selection==1)
- {
- toInput->hide();
- ccInput->show();
- }
+ if (selection==0)
+ {
+ toInput->show();
+ ccInput->hide();
+ }
+ else if (selection==1)
+ {
+ toInput->hide();
+ ccInput->show();
+ }
}
void WriteMail::setRecipient(const QString &recipient)
{
toInput->setText(recipient);
}
void WriteMail::newMail()
{
- toInput->clear();
- ccInput->clear();
- subjectInput->clear();
- emailInput->clear();
- setAddressList(addressList);
+ toInput->clear();
+ ccInput->clear();
+ subjectInput->clear();
+ emailInput->clear();
+ setAddressList(addressList);
}