summaryrefslogtreecommitdiff
authorgroucho <groucho>2003-04-24 11:19:11 (UTC)
committer groucho <groucho>2003-04-24 11:19:11 (UTC)
commit9671975e21266e3bfa6f3c793a3278b67cea34b7 (patch) (side-by-side diff)
tree876c77939cfd0e00fc844b1b5af09b2978564a6d
parent51e782b9658de61dc02579e115a9c62f396609a3 (diff)
downloadopie-9671975e21266e3bfa6f3c793a3278b67cea34b7.zip
opie-9671975e21266e3bfa6f3c793a3278b67cea34b7.tar.gz
opie-9671975e21266e3bfa6f3c793a3278b67cea34b7.tar.bz2
- reworked size filtering
- started reworking offline download - better tab focus switching - Hello "Whats this" capability - Fixed parsing of To: header files (no more Delivered-To: and Reply-To: matches) - Good bye Settings.txt, hello Config Objects and encrypted passwords - Translation improvements (added trs) - Parser optimizations
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mailit/addatt.cpp22
-rw-r--r--noncore/net/mailit/addatt.h8
-rw-r--r--noncore/net/mailit/addresslist.cpp2
-rw-r--r--noncore/net/mailit/emailclient.cpp231
-rw-r--r--noncore/net/mailit/emailhandler.cpp50
-rw-r--r--noncore/net/mailit/emaillistitem.cpp2
-rw-r--r--noncore/net/mailit/mailitwindow.cpp30
-rw-r--r--noncore/net/mailit/popclient.cpp24
-rw-r--r--noncore/net/mailit/readmail.cpp28
-rw-r--r--noncore/net/mailit/readmail.h4
-rw-r--r--noncore/net/mailit/smtpclient.cpp8
-rw-r--r--noncore/net/mailit/textparser.cpp40
-rw-r--r--noncore/net/mailit/viewatt.cpp3
-rw-r--r--noncore/net/mailit/writemail.cpp44
-rw-r--r--noncore/net/mailit/writemail.h4
-rw-r--r--noncore/unsupported/mailit/addatt.cpp22
-rw-r--r--noncore/unsupported/mailit/addatt.h8
-rw-r--r--noncore/unsupported/mailit/addresslist.cpp2
-rw-r--r--noncore/unsupported/mailit/emailclient.cpp231
-rw-r--r--noncore/unsupported/mailit/emailhandler.cpp50
-rw-r--r--noncore/unsupported/mailit/emaillistitem.cpp2
-rw-r--r--noncore/unsupported/mailit/mailitwindow.cpp30
-rw-r--r--noncore/unsupported/mailit/popclient.cpp24
-rw-r--r--noncore/unsupported/mailit/readmail.cpp28
-rw-r--r--noncore/unsupported/mailit/readmail.h4
-rw-r--r--noncore/unsupported/mailit/smtpclient.cpp8
-rw-r--r--noncore/unsupported/mailit/textparser.cpp40
-rw-r--r--noncore/unsupported/mailit/viewatt.cpp3
-rw-r--r--noncore/unsupported/mailit/writemail.cpp44
-rw-r--r--noncore/unsupported/mailit/writemail.h4
30 files changed, 488 insertions, 512 deletions
diff --git a/noncore/net/mailit/addatt.cpp b/noncore/net/mailit/addatt.cpp
index d268f1f..daefac6 100644
--- a/noncore/net/mailit/addatt.cpp
+++ b/noncore/net/mailit/addatt.cpp
@@ -35,131 +35,131 @@ FileItem::FileItem(QListView *parent, 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 attatchments");
+ setCaption("Adding attachments");
QGridLayout *top = new QGridLayout(this, 1,1 );
QHBox *buttons=new QHBox(this);
/*fileCategoryButton = new QPushButton(this);*/
- attatchButton = new QPushButton(tr("Attatch..."), buttons);
+ 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(attatchButton,0,0);
+ //buttons->addWidget(attachButton,0,0);
//buttons->addWidget(removeButton,0,1);
//connect(fileCategories, SIGNAL(activated(int)), this,
// SLOT(fileCategorySelected(int)) );*/
- connect(attatchButton, SIGNAL(clicked()), this,
- SLOT(addAttatchment()) );
+ connect(attachButton, SIGNAL(clicked()), this,
+ SLOT(addattachment()) );
connect(removeButton, SIGNAL(clicked()), this,
- SLOT(removeAttatchment()) );
+ SLOT(removeattachment()) );
/*listView = new QListView(this, "AttView");
listView->addColumn("Documents");*
connect(listView, SIGNAL(doubleClicked(QListViewItem *)), this,
- SLOT(addAttatchment()) );*/
+ SLOT(addattachment()) );*/
attView = new QListView(this, "Selected");
attView->addColumn(tr("Attached"));
attView->addColumn(tr("File type"));
connect(attView, SIGNAL(doubleClicked(QListViewItem *)), this,
- SLOT(removeAttatchment()) );
+ 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::addAttatchment()
+void AddAtt::addattachment()
{
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::removeAttatchment()
+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()
{
@@ -171,49 +171,49 @@ void AddAtt::getFiles()
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::returnAttatchedFiles()
+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) {
diff --git a/noncore/net/mailit/addatt.h b/noncore/net/mailit/addatt.h
index fcf3279..a365947 100644
--- a/noncore/net/mailit/addatt.h
+++ b/noncore/net/mailit/addatt.h
@@ -28,49 +28,49 @@
#include <qfileinfo.h>
#include <qstringlist.h>
#include <opie/ofiledialog.h>
#include <qpe/applnk.h>
class FileItem : public QListViewItem
{
public:
//FileItem(QListView *parent, QFileInfo fileInfo, QString fileType);
FileItem(QListView*, DocLnk*);
~FileItem();
DocLnk* getDocLnk() {return doclnk;}
private:
DocLnk* doclnk;
};
class AddAtt : public QDialog
{
Q_OBJECT
public:
AddAtt(QWidget *parent = 0, const char *name = 0, WFlags f = 0);
- QStringList returnAttatchedFiles();
+ QStringList returnattachedFiles();
QStringList returnFileTypes();
void getFiles();
void clear();
public slots:
//void fileCategorySelected(int);
- void addAttatchment();
- void removeAttatchment();
+ void addattachment();
+ void removeattachment();
void reject();
void accept();
private:
FileItem* item;
QListView *attView;
- QPushButton *attatchButton, *removeButton;
+ QPushButton *attachButton, *removeButton;
QPopupMenu *fileCategories;
bool modified;
//QFileInfo *fi;
OFileDialog* ofs;
};
#endif
diff --git a/noncore/net/mailit/addresslist.cpp b/noncore/net/mailit/addresslist.cpp
index 8d9ab91..7d60ebf 100644
--- a/noncore/net/mailit/addresslist.cpp
+++ b/noncore/net/mailit/addresslist.cpp
@@ -100,49 +100,49 @@ int AddressList::getNameRef(QString name)
{
int pos = 0;
Contact *ptr;
for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) {
if (ptr->name == name)
return pos;
pos++;
}
return -1;
}
QList<Contact>* AddressList::getContactList()
{
return &addresses;
}
void AddressList::read()
{
OContactAccess::List::Iterator it;
QString lineEmail, lineName, email, name;
OContactAccess m_contactdb("mailit");
OContactAccess::List m_list = m_contactdb.sorted( true, 0, 0, 0 );
- //OContact* oc;
+ //OContact* oc;(*it).defaultEmail()
for ( it = m_list.begin(); it != m_list.end(); ++it )
{
//oc=(OContact*) it;
if ((*it).defaultEmail().length()!=0)
addContact((*it).defaultEmail(),(*it).fileAs());
}
/*if (! f.open(IO_ReadOnly) )
return;
QTextStream stream(&f);
while (! stream.atEnd() ) {
lineEmail = stream.readLine();
if (! stream.atEnd() )
lineName = stream.readLine();
else return;
email = getRightString(lineEmail);
name = getRightString(lineName);
addContact(email, name);
}
f.close();*/
diff --git a/noncore/net/mailit/emailclient.cpp b/noncore/net/mailit/emailclient.cpp
index ad1e0b4..23059cf 100644
--- a/noncore/net/mailit/emailclient.cpp
+++ b/noncore/net/mailit/emailclient.cpp
@@ -2,48 +2,49 @@
** 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 <qfile.h>
#include <qcheckbox.h>
#include <qmenubar.h>
#include <qaction.h>
+#include <qwhatsthis.h>
#include <qpe/resource.h>
#include "emailclient.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;
@@ -61,187 +62,181 @@ EmailClient::EmailClient( QWidget* parent, const char* name, WFlags fl )
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
}
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()
{
statusBar = new QStatusBar(this);
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);
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);
- //connect(setAccountlButton, SIGNAL(activated()), this, SLOT(setCurrentAccount()) );
- // setAccountButton->addTo(bar);
- //setAccountButton->addTo(mail);
-
- /*idCount = 0;
-
- for (MailAccount* accountPtr = accountList.first(); accountPtr != 0;
- accountPtr = accountList.next()) {
-
- selectAccountMenu->insertItem(accountPtr->accountName,this, SLOT(selectAccount(int)), 0, idCount);
- idCount++;
- }*/
+ QWhatsThis::add(getMailButton,tr("Click to download mail via all available accounts.\n Press and hold to select the desired account."));
+
getMailButton->setPopup(selectAccountMenu);
-
-
- /*getMailButton = new QAction(tr("Get all mail"), Resource::loadPixmap("mailit/getmail"), QString::null, 0, this, 0);
- connect(getMailButton, SIGNAL(activated()), this, SLOT(getAllNewMail()) );
- getMailButton->addTo(bar);*/
- //getMailButton->addTo(mail);
-
+
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 viewed by double clicking the entry.\n"
+ " A blue attachment icon shows whether this mail has attachments."));
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 oubox view.\n It keeps the queued mails to send which can be reviewed by double clicking the entry."));
grid_3->addWidget( outboxView, 0, 0 );
mailboxView->addTab( widget_2,"mailit/outbox", tr( "Outbox" ) );
setCentralWidget(mailboxView);
- mailboxView->setCurrentTab(0);
}
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;
@@ -303,198 +298,210 @@ void EmailClient::mailSent()
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();
+ 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) {
+
+ 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
+ }
+ else
+ { //mail arrived from server
newMail.serverId = mail.serverId;
newMail.size = mail.size;
newMail.downloaded = mail.downloaded;
newMail.fromAccountId = currentAccount->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->synchronize)
+ 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);
- } else if (!fromDisk) { //body to header arrived
- mailconf->writeEntry("downloaded", TRUE);
+ //addressList->addContact(newMail.fromMail, newMail.from);
}
+
+ mailconf->writeEntry("downloaded", newMail.downloaded);
+
QString stringMailId;
stringMailId.setNum(thisMailId);
- //se if any attatchments needs to be stored
+ //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);
}
}
}
- if (!previewingMail && !fromDisk) {
+
+ bool found=false;
+
+ if (!fromDisk)
+ {
+
Email *mailPtr;
item = (EmailListItem *) inboxView->firstChild();
- while (item != NULL) {
+ 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();
}
- } else {
- item = new EmailListItem(inboxView, newMail, TRUE);
- if (!newMail.downloaded)
- mailDownloadList.sizeInsert(newMail.serverId, newMail.size);
}
+ if ((!found)||(fromDisk)) item = new EmailListItem(inboxView, newMail, TRUE);
+
+ /*if (!newMail.downloaded)
+ mailDownloadList.sizeInsert(newMail.serverId, newMail.size);*/
mailboxView->setCurrentTab(0);
}
void EmailClient::allMailArrived(int count)
{
// not previewing means all mailtransfer has been done
- if (!previewingMail) {
+ /*if (!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();
- emailHandler->getMailByList(&mailDownloadList);
+ //emailHandler->getMailByList(&mailDownloadList);
mailboxView->setCurrentTab(0);
}
void EmailClient::moveMailFront(Email *mailPtr)
{
if ( (receiving) && (mailPtr->fromAccountId == currentAccount->id) ) {
mailDownloadList.moveFront(mailPtr->serverId, mailPtr->size);
}
}
void EmailClient::smtpError(int code)
{
QString temp;
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";
@@ -520,77 +527,75 @@ void EmailClient::popError(int code)
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 != ErrCancel) {
QMessageBox::warning(qApp->activeWindow(), "Receiving error", temp, "OK\n");
} else {
status2Label->setText("Aborted by user");
}
receiving = FALSE;
getMailButton->setEnabled(TRUE);
cancelButton->setEnabled(FALSE);
selectAccountMenu->setEnabled(TRUE);
}
void EmailClient::inboxItemSelected()
{
- killTimer(timerID);
+ //killTimer(timerID);
item = (EmailListItem*) inboxView->selectedItem();
if (item != NULL) {
emit viewEmail(inboxView, item->getMail());
}
}
void EmailClient::outboxItemSelected()
{
- killTimer(timerID);
+ //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");
-// QFileInfo fi(f);
- //qDebug( f.name());
-
+
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();
@@ -601,192 +606,164 @@ void EmailClient::readMail()
if (stop == -1)
stop = s.length() - del.length();
mail.rawMail = s.mid(start, stop + del.length() - start );
start = stop + del.length();
emailHandler->parse(mail.rawMail, lineShift, &mail);
mail.sent = false;
mail.received = false;
enqueMail(mail);
}
}
}
void EmailClient::saveMail(QString fileName, QListView *view)
{
QFile f(fileName);
Email *mail;
if (! f.open(IO_WriteOnly) ) {
qWarning("could not open file");
return;
}
item = (EmailListItem *) view->firstChild();
- //qDebug (QString("Write : ") );
QTextStream t(&f);
while (item != NULL) {
mail = item->getMail();
- //qDebug(mail->rawMail);
- //qDebug(mail->recipients.first());
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()
{
- TextParser *p;
- QString s;
- int pos, accountPos, y;
- QFile f( getPath(FALSE) + "settings.txt");
-
- if ( f.open(IO_ReadOnly) ) { // file opened successfully
- QTextStream t( &f ); // use a text stream
- s = t.read();
- f.close();
+ int y,acc_count, accountPos=0;
- p = new TextParser(s, "\n");
-
- accountPos = 0;
- while ( (accountPos = p->find("ACCOUNTSTART",';', accountPos, TRUE)) != -1 ) {
- accountPos++;
- if ( (pos = p->find("ACCOUNTNAME",':', accountPos, TRUE)) != -1 )
- account.accountName = p->getString(& ++pos, 'z', TRUE);
- if ( (pos = p->find("NAME",':', accountPos, TRUE)) != -1)
- account.name = p->getString(& ++pos, 'z', TRUE);
- if ( (pos = p->find("EMAIL",':', accountPos, TRUE)) != -1)
- account.emailAddress = p->getString(& ++pos, 'z', TRUE);
- if ( (pos = p->find("POPUSER",':', accountPos, TRUE)) != -1)
- account.popUserName = p->getString(& ++pos, 'z', TRUE);
- if ( (pos = p->find("POPPASSWORD",':', accountPos, TRUE)) != -1)
- account.popPasswd = p->getString(& ++pos, 'z', TRUE);
- if ( (pos = p->find("POPSERVER",':', accountPos, TRUE)) != -1)
- account.popServer = p->getString(& ++pos, 'z', TRUE);
- if ( (pos = p->find("SMTPSERVER",':', accountPos, TRUE)) != -1)
- account.smtpServer = p->getString(& ++pos, 'z', TRUE);
- if ( (pos = p->find("ACCOUNTID",':', accountPos, TRUE)) != -1) {
- s = p->getString(& ++pos, 'z', TRUE);
- account.id = s.toInt();
- }
+ 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;
- if ( (pos = p->find("SYNCHRONIZE",':', accountPos, TRUE)) != -1) {
- if (p->getString(& ++pos, 'z', TRUE).upper() == "YES") {
- account.synchronize = TRUE;
- if ( (pos = p->find("LASTSERVERMAILCOUNT",':', accountPos, TRUE)) != -1) {
- s = p->getString(& ++pos, 'z', TRUE);
- account.lastServerMailCount = s.toInt();
- }
- }
- }
-
- if ( (pos = p->find("SYNCLIMIT",':', accountPos, TRUE)) != -1) {
- account.syncLimit = p->getString(& ++pos, 'z', TRUE).toInt();
+
+ account.synchronize = (mailconf->readEntry("Synchronize","No")=="Yes");
+ if (account.synchronize)
+ {
+ mailconf->readNumEntry("LASTSERVERMAILCOUNT",0);
}
-
accountList.append(&account);
}
- delete p;
- }
+
mailconf->setGroup("mailitglobal");
- if ( (y = mailconf->readNumEntry("mailidcount", -1)) != -1) {
+
+ if ( (y = mailconf->readNumEntry("mailidcount", -1)) != -1)
+ {
mailIdCount = y;
}
- if ( (y = mailconf->readNumEntry("accountidcount", -1)) != -1) {
+ if ( (y = mailconf->readNumEntry("accountidcount", -1)) != -1)
+ {
accountIdCount = y;
}
}
void EmailClient::saveSettings()
{
-
- QString temp;
- QFile f( getPath(FALSE) + "settings.txt");
+ int acc_count=0;
MailAccount *accountPtr;
-
- if (! f.open(IO_WriteOnly) ) {
- qWarning("could not save settings file");
+
+
+ if (!mailconf)
+ {
+ qWarning("could not save settings");
return;
}
- QTextStream t(&f);
- t << "#Settings for OPIE Mailit program\n";
for (accountPtr = accountList.first(); accountPtr != 0;
- accountPtr = accountList.next()) {
-
- t << "accountStart;\n";
- t << "AccountName: " + accountPtr->accountName + "\n";
- t << "Name: " + accountPtr->name + "\n";
- t << "Email: " + accountPtr->emailAddress + "\n";
- t << "POPUser: " + accountPtr->popUserName + "\n";
- t << "POPPAssword: " + accountPtr->popPasswd + "\n";
- t << "POPServer: " + accountPtr->popServer + "\n";
- t << "SMTPServer: " + accountPtr->smtpServer + "\n";
- t << "AccountId: " << accountPtr->id << "\n";
- if (accountPtr->synchronize) {
- t << "Synchronize: Yes\n";
- t << "LastServerMailCount: ";
- t << accountPtr->lastServerMailCount << "\n";
- } else {
- t << "Synchronize: No\n";
+ 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");
}
- t << "SyncLimit: ";
- t << accountPtr->syncLimit << "\n";
- t << "accountEnd;\n";
}
- f.close();
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 {
@@ -980,25 +957,25 @@ void EmailClient::replyAll()
if (mail!=NULL)
{
emit replyAll(*mail);
}
}
void EmailClient::forward()
{
Email* mail=getCurrentMail();
if (mail!=NULL)
{
emit reply(*mail);
}
}
void EmailClient::remove()
{
Email* mail=getCurrentMail();
if (mail!=NULL)
{
emit remove(*mail);
}
-}*/ \ No newline at end of file
+}*/
diff --git a/noncore/net/mailit/emailhandler.cpp b/noncore/net/mailit/emailhandler.cpp
index f6c6d60..b180051 100644
--- a/noncore/net/mailit/emailhandler.cpp
+++ b/noncore/net/mailit/emailhandler.cpp
@@ -83,165 +83,181 @@ void EmailHandler::sendMail(QList<Email> *mailList)
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->headersOnly(headers, 0);
popClient->newConnection(mailAccount.popServer, 110);
}
void EmailHandler::getMailHeaders()
{
popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd);
- if (mailAccount.synchronize) {
- popClient->setSynchronize(mailAccount.lastServerMailCount);
- } else {
- popClient->removeSynchronize();
- }
+ mailAccount.synchronize ? popClient->setSynchronize(mailAccount.lastServerMailCount): popClient->removeSynchronize();
headers = TRUE;
popClient->headersOnly(headers, mailAccount.syncLimit); //less than requested syncLimit, download all
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->newConnection(mailAccount.popServer, 110);
popClient->setSelectedMails(mailList);
}
-void EmailHandler::messageArrived(const QString &message, int id, uint size, bool complete)
+void EmailHandler::messageArrived(const QString &message, int id, uint size, bool incomplete)
{
Email mail;
mail.rawMail = message;
mail.serverId = id;
mail.size = size;
- mail.downloaded = complete;
+ mail.downloaded = incomplete;
emit mailArrived(mail, FALSE);
}
bool EmailHandler::parse(QString in, QString lineShift, Email *mail)
{
QString temp, boundary;
int pos;
QString delimiter, header, body, mimeHeader, mimeBody;
QString content, contentType, contentAttribute, id, encoding;
QString fileName, storedName;
int enclosureId = 0;
mail->rawMail = in;
mail->received = TRUE;
mail->files.setAutoDelete(TRUE);
temp = lineShift + "." + lineShift;
if (in.right(temp.length()) != temp) {
mail->rawMail += temp;
}
delimiter = lineShift + lineShift; // "\n\n" or "\r\n\r\n"
pos = in.find(delimiter, 0, FALSE);
header = in.left(pos);
body = in.right(in.length() - pos - delimiter.length());
if ((body.at(body.length()-2) == '.') && (body.at(body.length()-3) == '\n'))
body.truncate(body.length()-2);
TextParser p(header, lineShift);
if ((pos = p.find("FROM",':', 0, TRUE)) != -1) {
pos++;
if (p.separatorAt(pos) == ' ') {
mail->from = p.getString(&pos, '<', false);
mail->from = mail->from.stripWhiteSpace();
if ( (mail->from.length() > 2) && (mail->from[0] == '"') ) {
mail->from = mail->from.left(mail->from.length() - 1);
mail->from = mail->from.right(mail->from.length() - 1);
}
- pos++;
+ pos++;
+
mail->fromMail = p.getString(&pos, '>', false);
} else {
if ((p.separatorAt(pos) == '<')
|| (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;
}
}
- //@@@ToDo: Rewrite the parser as To: stops at the first occurence- which is Delivered-To:
- if ((pos = p.find("TO",':', 0, TRUE)) != -1)
+ pos=0;
+
+ //Search for To: after the FROM: attribute to prevent hitting the Delivered-To:
+ while((pos = p.find("TO",':', pos+1, TRUE))!=-1)
{
- pos++;
- mail->recipients.append (p.getString(&pos, 'z', TRUE) );
+ QString rec;
+
+ if (p.separatorAt(pos-1)!='-')
+ {
+ pos++;
+ mail->recipients.append(p.getString(&pos, '\r', TRUE));
+ }
+ /*else {
+ if ((p.separatorAt(pos) == '<')|| (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;
+ }
+ mail->recipients.append (p.getString(&pos, 'z', TRUE) );
+ }*/
}
-
- //@@@ToDo: Rewrite the parser as To: stops at the first occurence- which is Delivered-To:
+ //
+ //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);
+ 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;
}
}
diff --git a/noncore/net/mailit/emaillistitem.cpp b/noncore/net/mailit/emaillistitem.cpp
index a325766..b925a1c 100644
--- a/noncore/net/mailit/emaillistitem.cpp
+++ b/noncore/net/mailit/emaillistitem.cpp
@@ -17,53 +17,55 @@
** not clear to you.
**
**********************************************************************/
#include <qstring.h>
#include <qpe/resource.h>
#include "emaillistitem.h"
EmailListItem::EmailListItem(QListView *parent, Email mailIn, bool inbox)
: QListViewItem(parent)
{
QString temp;
mail = mailIn;
if (inbox) {
setText(0, mail.from);
} else {
QStringList::Iterator it = mail.recipients.begin();
temp = *it;
if (mail.recipients.count() > 1)
temp += "...";
setText(0, temp);
}
setText(1, mail.subject);
+ setText(2,mail.date);
if (mailIn.files.count()>0)
{
setPixmap(0, Resource::loadPixmap("mailit/attach"));
}
+
selected = FALSE;
}
Email* EmailListItem::getMail()
{
return &mail;
}
void EmailListItem::setMail(Email newMail)
{
mail = newMail;
repaint();
}
void EmailListItem::setItemSelected(bool enable)
{
selected = enable;
setSelected(enable);
repaint();
}
bool EmailListItem::isItemSelected()
{
return selected;
diff --git a/noncore/net/mailit/mailitwindow.cpp b/noncore/net/mailit/mailitwindow.cpp
index ef5fc09..7181adf 100644
--- a/noncore/net/mailit/mailitwindow.cpp
+++ b/noncore/net/mailit/mailitwindow.cpp
@@ -1,54 +1,55 @@
/**********************************************************************
** 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 "mailitwindow.h"
MailItWindow::MailItWindow(QWidget *parent, const char *name, WFlags fl)
- : QMainWindow(parent, name, fl)
+ : QMainWindow(parent, name, WStyle_ContextHelp)
{
currentCaption = "Mailit";
setCaption(tr(currentCaption));
views = new QWidgetStack(this);
setCentralWidget(views);
-
- emailClient = new EmailClient(views, "client");
+ 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 &)) );
@@ -119,47 +120,24 @@ void MailItWindow::viewMail(QListView *view, Email *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);
}
-
-/*void MailItWindow::reply(Email& mail)
-{
- qDebug("####EmailClient: 0 reached");
- composeReply(mail,(bool&)FALSE);
-}
-
-void MailItWindow::replyAll(Email& mail)
-{
- qDebug("####EmailClient: 1 reached");
- composeReply(mail,(bool&)TRUE);
-}
-
-void MailItWindow::forward(Email& mail)
-{
- qDebug("####EmailClient: 2 reached");
-}
-
-void MailItWindow::remove(Email&)
-{
- qDebug("####EmailClient: 3 reached");
- //emit removeItem(eli,(bool&)TRUE);
-} */ \ No newline at end of file
diff --git a/noncore/net/mailit/popclient.cpp b/noncore/net/mailit/popclient.cpp
index f9cc337..67306be 100644
--- a/noncore/net/mailit/popclient.cpp
+++ b/noncore/net/mailit/popclient.cpp
@@ -98,94 +98,83 @@ void PopClient::setSelectedMails(MailList *list)
void PopClient::connectionEstablished()
{
emit updateStatus(tr("Connection established"));
}
void PopClient::errorHandling(int status)
{
emit updateStatus(tr("Error Occured"));
emit errorOccurred(status);
socket->close();
receiving = FALSE;
}
void PopClient::incomingData()
{
QString response, temp, temp2, timeStamp;
QString md5Source;
int start, end;
// char *md5Digest;
char md5Digest[16];
// if ( !socket->canReadLine() )
// return;
response = socket->readLine();
- //qDebug(response +" %d", status);
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;
- //qDebug( md5Source);
-// for( int i = 0; i < md5Source.length(); i++) {
-// buff[i] = (QChar)md5Source[i];
-// }
md5_buffer( (char const *)md5Source, md5Source.length(),&md5Digest[0]);
-// md5_buffer(char const *buffer, unsigned int len, char *digest);
-
-// MD5_Init( &ctx);
-// MD5_Update( &ctx, buff, sizeof( buff) );
-// MD5_Final( md5Digest, &ctx);
-// MD5( buff, md5Source.length(), md5Digest);
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;
}
- //password shhh. don't tell anyone (implement APOP...)
+
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);
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) {
@@ -227,85 +216,88 @@ void PopClient::incomingData()
emit updateStatus(tr("No new Messages"));
status = Quit;
}
}
//get size of message, eg "500 characters in message.." -> int 500
case Size: {
if (status != Quit) { //because of idiotic switch
if (response[0] == '+') {
temp = response.replace(0, 4, "");
int x = temp.find(" ", 0);
temp = temp.right(temp.length() - ((uint) x + 1) );
mailSize = temp.toInt();
emit currentMailSize(mailSize);
status = Retr;
} else {
//qWarning(response);
errorHandling(ErrUnknownResponse);
}
}
}
//Read message number x, count upwards to messageCount
case Retr: {
if (status != Quit) {
- if (!preview || mailSize <= headerLimit) {
+ if (mailSize <= headerLimit)
+ {
*stream << "RETR " << messageCount << "\r\n";
} else { //only header
- *stream << "TOP " << messageCount << " 0\r\n";
+ *stream << "TOP " << messageCount << " 0\r\n";
}
messageCount++;
status = Ignore;
break;
} }
case Ignore: {
if (status != Quit) { //because of idiotic switch
if (response[0] == '+') {
message = "";
status = Read;
if (!socket->canReadLine()) //sync. problems
break;
response = socket->readLine();
} else errorHandling(ErrUnknownResponse);
}
}
//add all incoming lines to body. When size is reached, send
//message, and go back to read new message
case Read: {
if (status != Quit) { //because of idiotic switch
message += response;
while ( socket->canReadLine() ) {
response = socket->readLine();
message += response;
}
emit downloadedSize(message.length());
int x = message.find("\r\n.\r\n",-5);
if (x == -1) {
break;
} else { //message reach entire size
//complete mail downloaded
- if ( (!preview ) || ((preview) && (mailSize <= headerLimit)) ){
- emit newMessage(message, messageCount-1, mailSize, TRUE);
+ //if ( (!preview ) || ((preview) && (mailSize <= headerLimit)) ){
+ if ( mailSize <= headerLimit)
+ {
+ emit newMessage(message, messageCount-1, mailSize, TRUE);
} else { //incomplete mail downloaded
emit newMessage(message, messageCount-1, mailSize, FALSE);
}
if (messageCount > newMessages) //that was the last message
status = Quit;
else { //ask for new message
if (selected) { //grab next from queue
int *ptr = mailList->next();
if (ptr != 0) {
messageCount = *ptr;
*stream << "LIST " << messageCount << "\r\n";
status = Size;
//completing a previously closed transfer
if ( (messageCount - lastSync) <= 0) {
temp.setNum(messageCount);
emit updateStatus(tr("Previous message ") + temp);
} else {
temp.setNum(messageCount - lastSync);
emit updateStatus(tr("Completing message ") + temp);
}
break;
} else {
newMessages--;
status = Quit;
diff --git a/noncore/net/mailit/readmail.cpp b/noncore/net/mailit/readmail.cpp
index dc98a6f..4eae7f6 100644
--- a/noncore/net/mailit/readmail.cpp
+++ b/noncore/net/mailit/readmail.cpp
@@ -38,78 +38,88 @@ ReadMail::~ReadMail()
delete viewAtt;
}
void ReadMail::init()
{
setToolBarsMovable(FALSE);
bar = new QToolBar(this);
bar->setHorizontalStretchable( TRUE );
menu = new QMenuBar( bar );
viewMenu = new QPopupMenu(menu);
menu->insertItem( tr( "&View" ), viewMenu);
mailMenu = new QPopupMenu(menu);
menu->insertItem( tr( "&Mail" ), mailMenu);
bar = new QToolBar(this);
//reply dependant on viewing inbox
replyButton = new QAction( tr( "Reply" ), Resource::loadPixmap( "mailit/reply" ),
QString::null, 0, this, 0 );
connect(replyButton, SIGNAL(activated()), this, SLOT(reply()) );
-
+ replyButton->setWhatsThis(tr("Click here to reply to the selected mail"));
+
forwardButton = new QAction( tr( "Forward" ), Resource::loadPixmap( "mailit/forward" ),
QString::null, 0, this, 0 );
connect(forwardButton, SIGNAL(activated()), this, SLOT(forward()) );
+ forwardButton->setWhatsThis(tr("Click here to forward the selected mail"));
previousButton = new QAction( tr( "Previous" ), Resource::loadPixmap( "back" ), QString::null, 0, this, 0 );
connect( previousButton, SIGNAL( activated() ), this, SLOT( previous() ) );
previousButton->addTo(bar);
previousButton->addTo(viewMenu);
+ previousButton->setWhatsThis(tr("Read the previous mail in the list"));
nextButton = new QAction( tr( "Next" ), Resource::loadPixmap( "forward" ), QString::null, 0, this, 0 );
connect( nextButton, SIGNAL( activated() ), this, SLOT( next() ) );
nextButton->addTo(bar);
nextButton->addTo(viewMenu);
+ previousButton->setWhatsThis(tr("Read the next mail in the list"));
- attatchmentsButton = new QAction( tr( "Attatchments" ), Resource::loadPixmap( "mailit/attach" ), QString::null, 0, this, 0 );
- connect( attatchmentsButton, SIGNAL( activated() ), this,
- SLOT( viewAttatchments() ) );
- attatchmentsButton->addTo(bar);
- attatchmentsButton->addTo(viewMenu);
+ attachmentButton = new QAction( tr( "Attatchments" ), Resource::loadPixmap( "mailit/attach" ), QString::null, 0, this, 0 );
+ connect( attachmentButton, SIGNAL( activated() ), this,
+ SLOT( viewAttachments() ) );
+ attachmentButton->addTo(bar);
+ attachmentButton->addTo(viewMenu);
+ attachmentButton->setWhatsThis(tr("Click here to add attachments to your mail"));
plainTextButton = new QAction( tr( "Text Format" ), Resource::loadPixmap( "DocsIcon" ), QString::null, 0, this, 0, TRUE);
connect( plainTextButton, SIGNAL( activated() ), this, SLOT( shiftText() ) );
plainTextButton->addTo(bar);
plainTextButton->addTo(viewMenu);
+ plainTextButton->setWhatsThis(tr("The mail view has 2 modes:\n"
+ "<LI><B>RichText</B> shows the mail as HTML with reach features (no standard line breaks)</LI>"
+ "<LI><B>Plain</B> shows the mail as standard plain text</LI>"
+ "Click here to switch between those view modes" ));
deleteButton = new QAction( tr( "Delete" ), Resource::loadPixmap( "trash" ), QString::null, 0, this, 0 );
connect( deleteButton, SIGNAL( activated() ), this, SLOT( deleteItem() ) );
deleteButton->addTo(bar);
deleteButton->addTo(mailMenu);
+ deleteButton->setWhatsThis(tr("Click here to remove the selected mail"));
viewMenu->insertItem(Resource::loadPixmap("close"), "Close", this, SLOT(close()));
emailView = new QTextView( this, "emailView" );
setCentralWidget(emailView);
mime = new QMimeSourceFactory();
emailView->setMimeSourceFactory(mime);
}
void ReadMail::updateView()
{
Enclosure *ePtr;
QString mailStringSize;
QString text, temp;
mail->read = TRUE; //mark as read
inbox = mail->received;
replyButton->removeFrom(mailMenu);
replyButton->removeFrom(bar);
forwardButton->removeFrom(mailMenu);
forwardButton->removeFrom(bar);
@@ -227,50 +237,50 @@ void ReadMail::updateView()
text += "\nDate: " + mail->date + "\n";
if (mail->files.count() > 0) {
text += "Attatchments: ";
for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) {
text += ePtr->originalName + " ";
}
text += "\n\n";
} else text += "\n";
if (!inbox) {
text += mail->body;
} else if (mail->downloaded) {
text += mail->bodyPlain;
} else {
text += "\nAwaiting download\n";
text += "Size of mail: " + mailStringSize;
}
emailView->setText(text);
}
if (mail->files.count() == 0)
- attatchmentsButton->setEnabled(FALSE);
- else attatchmentsButton->setEnabled(TRUE);
+ attachmentButton->setEnabled(FALSE);
+ else attachmentButton->setEnabled(TRUE);
setCaption("Examining mail: " + mail->subject);
}
//update view with current EmailListItem (item)
void ReadMail::update(QListView *thisView, Email *mailIn)
{
view = thisView;
item = (EmailListItem *) view->selectedItem();
mail = mailIn;
updateView();
updateButtons();
}
void ReadMail::mailUpdated(Email *mailIn)
{
if (mailIn == mail) {
updateView();
} else {
updateButtons();
}
}
void ReadMail::close()
@@ -318,40 +328,40 @@ void ReadMail::deleteItem()
} else close(); //no more items to see
}
void ReadMail::updateButtons()
{
EmailListItem *temp;
temp = item;
if ((EmailListItem *) temp->nextSibling() == NULL)
nextButton->setEnabled(FALSE);
else nextButton->setEnabled(TRUE);
temp = item;
if ((EmailListItem *) temp->itemAbove() == NULL)
previousButton->setEnabled(FALSE);
else previousButton->setEnabled(TRUE);
}
void ReadMail::shiftText()
{
plainTxt = ! plainTxt;
updateView();
}
-void ReadMail::viewAttatchments()
+void ReadMail::viewAttachments()
{
viewAtt->update(mail, inbox);
viewAtt->showMaximized();
}
void ReadMail::reply()
{
emit replyRequested(*mail, (bool&)TRUE);
}
void ReadMail::forward()
{
emit forwardRequested(*mail);
}
diff --git a/noncore/net/mailit/readmail.h b/noncore/net/mailit/readmail.h
index 0fe0646..df32c34 100644
--- a/noncore/net/mailit/readmail.h
+++ b/noncore/net/mailit/readmail.h
@@ -36,54 +36,54 @@
class ReadMail : public QMainWindow
{
Q_OBJECT
public:
ReadMail( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
~ReadMail();
void update(QListView *thisView, Email *mailIn);
void updateView();
void mailUpdated(Email *mailIn);
signals:
void cancelView();
void replyRequested(Email &, bool &);
void forwardRequested(Email&);
void removeItem(EmailListItem *, bool &);
void viewingMail(Email *);
public slots:
void close();
void next();
void previous();
void deleteItem();
void shiftText();
- void viewAttatchments();
+ void viewAttachments();
void reply();
void forward();
private:
void init();
void updateButtons();
private:
QListView *view;
EmailListItem *item;
bool plainTxt, inbox;
Email *mail;
ViewAtt *viewAtt;
QToolBar *bar;
QMenuBar *menu;
QPopupMenu *viewMenu, *mailMenu;
QAction *deleteButton;
QMimeSourceFactory *mime;
QAction *plainTextButton;
QAction *nextButton;
QTextView *emailView;
- QAction *attatchmentsButton;
+ QAction *attachmentButton;
QAction *previousButton;
QAction *replyButton;
QAction *forwardButton;
};
#endif // READMAIL_H
diff --git a/noncore/net/mailit/smtpclient.cpp b/noncore/net/mailit/smtpclient.cpp
index b2e38e5..8a51a5b 100644
--- a/noncore/net/mailit/smtpclient.cpp
+++ b/noncore/net/mailit/smtpclient.cpp
@@ -66,106 +66,98 @@ void SmtpClient::addMail(QString from, QString subject, QStringList to, QString
}
void SmtpClient::connectionEstablished()
{
emit updateStatus(tr("Connection established"));
}
void SmtpClient::errorHandling(int status)
{
emit errorOccurred(status);
socket->close();
mailList.clear();
sending = FALSE;
}
void SmtpClient::incomingData()
{
QString response;
if (!socket->canReadLine())
return;
response = socket->readLine();
- //qDebug(response);
switch(status) {
case Init: {
if (response[0] == '2') {
status = From;
mailPtr = mailList.first();
*stream << "HELO there\r\n";
- //qDebug("HELO");
} else errorHandling(ErrUnknownResponse);
break;
}
case From: {
if (response[0] == '2') {
*stream << "MAIL FROM: " << mailPtr->from << "\r\n";
status = Recv;
- //qDebug("MAIL FROM: "+mailPtr->from);
} else errorHandling(ErrUnknownResponse);
break;
}
case Recv: {
if (response[0] == '2') {
it = mailPtr->to.begin();
if (it == NULL)
errorHandling(ErrUnknownResponse);
*stream << "RCPT TO: " << *it << ">\r\n";
- //qDebug("RCPT TO: "+ *it);
status = MRcv;
} else errorHandling(ErrUnknownResponse);
break;
}
case MRcv: {
if (response[0] == '2') {
it++;
if ( it != mailPtr->to.end() ) {
*stream << "RCPT TO: <" << *it << ">\r\n";
- //qDebug("RCPT TO: "+ *it);
break;
} else {
status = Data;
}
} else errorHandling(ErrUnknownResponse);
}
case Data: {
if (response[0] == '2') {
*stream << "DATA\r\n";
status = Body;
- //qDebug("DATA");
emit updateStatus(tr("Sending: ") + mailPtr->subject);
} else errorHandling(ErrUnknownResponse);
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;
}
- //qDebug("BODY");
} else errorHandling(ErrUnknownResponse);
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();
- //qDebug("QUIT");
} else errorHandling(ErrUnknownResponse);
break;
}
}
}
diff --git a/noncore/net/mailit/textparser.cpp b/noncore/net/mailit/textparser.cpp
index f082417..3fa5f6e 100644
--- a/noncore/net/mailit/textparser.cpp
+++ b/noncore/net/mailit/textparser.cpp
@@ -41,69 +41,79 @@ TextParser::TextParser(QString in, QString lineBreak, QString sep)
void TextParser::init()
{
lineCount = 0;
linePos = 0;
totalElmCount = 0;
separatorPos = -1; //not initialized
wordPos = -1; //not initialized
sepAtLine = 0;
sepAtPosElm = -1; //such that nextSep equals 0
wordAtLine = 0;
wordAtPosElm = -1; //such that nextWord equals 0
atLine = 0;
atPosElm = 0;
}
void TextParser::createSeparators()
{
separators = " @#,.:;<>*/(){}|'?-+=_";
}
/* Returns pos of given search criteria, -1 if not found */
int TextParser::find(QString target, QChar sep, int pos, bool upperCase)
{
+
+ t_splitElm parsstr;
+ QString pString;
+
int atLine = 0, atPosElm = 0;
- for (int x = 0; x < totalElmCount; x++) {
- if (x >= pos) {
- if (upperCase) {
- if ((splitDone[atLine].elm[atPosElm].str.upper() == target) &&
- (splitDone[atLine].elm[atPosElm].separator == sep))
- return x;
- } else {
- if ((splitDone[atLine].elm[atPosElm].str == target) &&
- (splitDone[atLine].elm[atPosElm].separator == sep))
- return x;
- }
- }
- atPosElm++;
- if (atPosElm >= splitDone[atLine].elmCount) { //new Line
+ getLineReference(pos,&atLine,&atPosElm);
+
+ for (int x = pos; x < totalElmCount; x++)
+ {
+ parsstr=splitDone[atLine].elm[atPosElm++];
+
+ if (upperCase)
+ {
+ pString=parsstr.str.upper();
+ target=target.upper();
+ }
+ else
+ {
+ pString=parsstr.str;
+ }
+ if ((pString == target) && (parsstr.separator == sep))
+ {
+ return x;
+ }
+ if (atPosElm >= splitDone[atLine].elmCount)
+ { //new Line
atLine++;
atPosElm = 0;
}
}
-
return -1;
}
int TextParser::elmCount()
{
return totalElmCount;
}
QChar TextParser::separatorAt(int pos)
{
if (getLineReference(pos, &sepAtLine, &sepAtPosElm) == -1)
return QChar::null;
separatorPos = pos;
return splitDone[sepAtLine].elm[sepAtPosElm].separator;
}
QChar TextParser::nextSeparator()
{
sepAtPosElm++;
if (splitDone[sepAtLine].elmCount <= sepAtPosElm) {
sepAtLine++;
sepAtPosElm = 0;
}
diff --git a/noncore/net/mailit/viewatt.cpp b/noncore/net/mailit/viewatt.cpp
index b6f5015..21885c2 100644
--- a/noncore/net/mailit/viewatt.cpp
+++ b/noncore/net/mailit/viewatt.cpp
@@ -1,63 +1,66 @@
/**********************************************************************
** 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");
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" );
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";
if (ePtr->installed)
isInstalled = "Yes";
diff --git a/noncore/net/mailit/writemail.cpp b/noncore/net/mailit/writemail.cpp
index a9dcb02..0336c83 100644
--- a/noncore/net/mailit/writemail.cpp
+++ b/noncore/net/mailit/writemail.cpp
@@ -1,170 +1,178 @@
/**********************************************************************
** 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 Attatchments");
+ addAtt = new AddAtt(0, "Add Attachments");
}
WriteMail::~WriteMail()
{
delete addAtt;
}
void WriteMail::setAddressList(AddressList *list)
{
Contact *cPtr;
addressList = list;
addressView->clear();
QList<Contact> *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 );
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);
- attatchButton = new QAction(tr("Attatchment"), Resource::loadPixmap("mailit/attach"), QString::null, 0, this, 0);
- attatchButton->addTo(bar);
- attatchButton->addTo(addMenu);
- connect( attatchButton, SIGNAL( activated() ), this, SLOT( attatchFile() ) );
-
+ 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 );
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 );
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"));
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"));
-
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(recipientsBox,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("Chose 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);
}
void WriteMail::reject()
{
emit cancelMail();
}
// need to insert date
void WriteMail::accept()
{
- QStringList attatchedFiles, attatchmentsType;
+ 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();
@@ -175,109 +183,109 @@ void WriteMail::accept()
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";
- attatchedFiles = addAtt->returnAttatchedFiles();
- attatchmentsType = addAtt->returnFileTypes();
+ attachedFiles = addAtt->returnattachedFiles();
+ attachmentsType = addAtt->returnFileTypes();
- QStringList::Iterator itType = attatchmentsType.begin();
+ QStringList::Iterator itType = attachmentsType.begin();
Enclosure e;
- for ( QStringList::Iterator it = attatchedFiles.begin(); it != attatchedFiles.end(); ++it ) {
+ 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();
}
}
-void WriteMail::attatchFile()
+void WriteMail::attachFile()
{
addAtt->showMaximized();
}
void WriteMail::reply(Email replyMail, bool replyAll)
{
int pos;
mail = replyMail;
mail.files.clear();
toInput->setText(mail.fromMail);
//replyAll ? ccInput->setText(mail.c)
addRecipients(replyAll);
subjectInput->setText(tr("Re: ") + mail.subject);
pos = 0;
- mail.body.insert(pos, ">>");
+ mail.body.insert(pos, ">");
while (pos != -1) {
pos = mail.body.find('\n', pos);
if (pos != -1)
mail.body.insert(++pos, ">>");
}
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"));
diff --git a/noncore/net/mailit/writemail.h b/noncore/net/mailit/writemail.h
index f193b13..921f27e 100644
--- a/noncore/net/mailit/writemail.h
+++ b/noncore/net/mailit/writemail.h
@@ -34,63 +34,63 @@
#include "emailhandler.h"
#include "addresslist.h"
#include "addatt.h"
class WriteMail : public QMainWindow
{
Q_OBJECT
public:
WriteMail( QWidget* parent, const char* name, WFlags fl = 0 );
~WriteMail();
void reply(Email replyMail, bool replyAll);
void setRecipient(const QString &recipient);
void setAddressList(AddressList *list);
void forward(Email forwMail);
signals:
void sendMailRequested(const Email &mail);
void cancelMail();
public slots:
void getAddress();
- void attatchFile();
+ void attachFile();
void addRecipients();
void newMail();
void accept();
void reject();
void changeRecipients(int);
private:
bool getRecipients(bool);
void init();
void addRecipients(bool);
Email mail;
AddAtt *addAtt;
AddressList *addressList;
bool showingAddressList;
QToolBar *bar;
QMenuBar *menu;
QPopupMenu *addMenu, *mailMenu;
QListView *addressView;
QToolButton *okButton;
QWidget *widget;
- QAction *attatchButton;
+ QAction *attachButton;
QAction *confirmButton;
QAction *newButton;
QLabel* subjetLabel;
QToolButton* ToolButton13_2;
QComboBox* recipientsBox;
QLineEdit *subjectInput;
QLineEdit *toInput;
QLineEdit *ccInput;
QToolButton* addressButton;
QMultiLineEdit* emailInput;
QGridLayout* grid;
};
#endif // WRITEMAIL_H
diff --git a/noncore/unsupported/mailit/addatt.cpp b/noncore/unsupported/mailit/addatt.cpp
index d268f1f..daefac6 100644
--- a/noncore/unsupported/mailit/addatt.cpp
+++ b/noncore/unsupported/mailit/addatt.cpp
@@ -35,131 +35,131 @@ FileItem::FileItem(QListView *parent, 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 attatchments");
+ setCaption("Adding attachments");
QGridLayout *top = new QGridLayout(this, 1,1 );
QHBox *buttons=new QHBox(this);
/*fileCategoryButton = new QPushButton(this);*/
- attatchButton = new QPushButton(tr("Attatch..."), buttons);
+ 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(attatchButton,0,0);
+ //buttons->addWidget(attachButton,0,0);
//buttons->addWidget(removeButton,0,1);
//connect(fileCategories, SIGNAL(activated(int)), this,
// SLOT(fileCategorySelected(int)) );*/
- connect(attatchButton, SIGNAL(clicked()), this,
- SLOT(addAttatchment()) );
+ connect(attachButton, SIGNAL(clicked()), this,
+ SLOT(addattachment()) );
connect(removeButton, SIGNAL(clicked()), this,
- SLOT(removeAttatchment()) );
+ SLOT(removeattachment()) );
/*listView = new QListView(this, "AttView");
listView->addColumn("Documents");*
connect(listView, SIGNAL(doubleClicked(QListViewItem *)), this,
- SLOT(addAttatchment()) );*/
+ SLOT(addattachment()) );*/
attView = new QListView(this, "Selected");
attView->addColumn(tr("Attached"));
attView->addColumn(tr("File type"));
connect(attView, SIGNAL(doubleClicked(QListViewItem *)), this,
- SLOT(removeAttatchment()) );
+ 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::addAttatchment()
+void AddAtt::addattachment()
{
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::removeAttatchment()
+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()
{
@@ -171,49 +171,49 @@ void AddAtt::getFiles()
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::returnAttatchedFiles()
+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) {
diff --git a/noncore/unsupported/mailit/addatt.h b/noncore/unsupported/mailit/addatt.h
index fcf3279..a365947 100644
--- a/noncore/unsupported/mailit/addatt.h
+++ b/noncore/unsupported/mailit/addatt.h
@@ -28,49 +28,49 @@
#include <qfileinfo.h>
#include <qstringlist.h>
#include <opie/ofiledialog.h>
#include <qpe/applnk.h>
class FileItem : public QListViewItem
{
public:
//FileItem(QListView *parent, QFileInfo fileInfo, QString fileType);
FileItem(QListView*, DocLnk*);
~FileItem();
DocLnk* getDocLnk() {return doclnk;}
private:
DocLnk* doclnk;
};
class AddAtt : public QDialog
{
Q_OBJECT
public:
AddAtt(QWidget *parent = 0, const char *name = 0, WFlags f = 0);
- QStringList returnAttatchedFiles();
+ QStringList returnattachedFiles();
QStringList returnFileTypes();
void getFiles();
void clear();
public slots:
//void fileCategorySelected(int);
- void addAttatchment();
- void removeAttatchment();
+ void addattachment();
+ void removeattachment();
void reject();
void accept();
private:
FileItem* item;
QListView *attView;
- QPushButton *attatchButton, *removeButton;
+ QPushButton *attachButton, *removeButton;
QPopupMenu *fileCategories;
bool modified;
//QFileInfo *fi;
OFileDialog* ofs;
};
#endif
diff --git a/noncore/unsupported/mailit/addresslist.cpp b/noncore/unsupported/mailit/addresslist.cpp
index 8d9ab91..7d60ebf 100644
--- a/noncore/unsupported/mailit/addresslist.cpp
+++ b/noncore/unsupported/mailit/addresslist.cpp
@@ -100,49 +100,49 @@ int AddressList::getNameRef(QString name)
{
int pos = 0;
Contact *ptr;
for (ptr = addresses.first(); ptr != 0; ptr = addresses.next() ) {
if (ptr->name == name)
return pos;
pos++;
}
return -1;
}
QList<Contact>* AddressList::getContactList()
{
return &addresses;
}
void AddressList::read()
{
OContactAccess::List::Iterator it;
QString lineEmail, lineName, email, name;
OContactAccess m_contactdb("mailit");
OContactAccess::List m_list = m_contactdb.sorted( true, 0, 0, 0 );
- //OContact* oc;
+ //OContact* oc;(*it).defaultEmail()
for ( it = m_list.begin(); it != m_list.end(); ++it )
{
//oc=(OContact*) it;
if ((*it).defaultEmail().length()!=0)
addContact((*it).defaultEmail(),(*it).fileAs());
}
/*if (! f.open(IO_ReadOnly) )
return;
QTextStream stream(&f);
while (! stream.atEnd() ) {
lineEmail = stream.readLine();
if (! stream.atEnd() )
lineName = stream.readLine();
else return;
email = getRightString(lineEmail);
name = getRightString(lineName);
addContact(email, name);
}
f.close();*/
diff --git a/noncore/unsupported/mailit/emailclient.cpp b/noncore/unsupported/mailit/emailclient.cpp
index ad1e0b4..23059cf 100644
--- a/noncore/unsupported/mailit/emailclient.cpp
+++ b/noncore/unsupported/mailit/emailclient.cpp
@@ -2,48 +2,49 @@
** 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 <qfile.h>
#include <qcheckbox.h>
#include <qmenubar.h>
#include <qaction.h>
+#include <qwhatsthis.h>
#include <qpe/resource.h>
#include "emailclient.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;
@@ -61,187 +62,181 @@ EmailClient::EmailClient( QWidget* parent, const char* name, WFlags fl )
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
}
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()
{
statusBar = new QStatusBar(this);
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);
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);
- //connect(setAccountlButton, SIGNAL(activated()), this, SLOT(setCurrentAccount()) );
- // setAccountButton->addTo(bar);
- //setAccountButton->addTo(mail);
-
- /*idCount = 0;
-
- for (MailAccount* accountPtr = accountList.first(); accountPtr != 0;
- accountPtr = accountList.next()) {
-
- selectAccountMenu->insertItem(accountPtr->accountName,this, SLOT(selectAccount(int)), 0, idCount);
- idCount++;
- }*/
+ QWhatsThis::add(getMailButton,tr("Click to download mail via all available accounts.\n Press and hold to select the desired account."));
+
getMailButton->setPopup(selectAccountMenu);
-
-
- /*getMailButton = new QAction(tr("Get all mail"), Resource::loadPixmap("mailit/getmail"), QString::null, 0, this, 0);
- connect(getMailButton, SIGNAL(activated()), this, SLOT(getAllNewMail()) );
- getMailButton->addTo(bar);*/
- //getMailButton->addTo(mail);
-
+
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 viewed by double clicking the entry.\n"
+ " A blue attachment icon shows whether this mail has attachments."));
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 oubox view.\n It keeps the queued mails to send which can be reviewed by double clicking the entry."));
grid_3->addWidget( outboxView, 0, 0 );
mailboxView->addTab( widget_2,"mailit/outbox", tr( "Outbox" ) );
setCentralWidget(mailboxView);
- mailboxView->setCurrentTab(0);
}
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;
@@ -303,198 +298,210 @@ void EmailClient::mailSent()
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();
+ 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) {
+
+ 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
+ }
+ else
+ { //mail arrived from server
newMail.serverId = mail.serverId;
newMail.size = mail.size;
newMail.downloaded = mail.downloaded;
newMail.fromAccountId = currentAccount->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->synchronize)
+ 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);
- } else if (!fromDisk) { //body to header arrived
- mailconf->writeEntry("downloaded", TRUE);
+ //addressList->addContact(newMail.fromMail, newMail.from);
}
+
+ mailconf->writeEntry("downloaded", newMail.downloaded);
+
QString stringMailId;
stringMailId.setNum(thisMailId);
- //se if any attatchments needs to be stored
+ //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);
}
}
}
- if (!previewingMail && !fromDisk) {
+
+ bool found=false;
+
+ if (!fromDisk)
+ {
+
Email *mailPtr;
item = (EmailListItem *) inboxView->firstChild();
- while (item != NULL) {
+ 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();
}
- } else {
- item = new EmailListItem(inboxView, newMail, TRUE);
- if (!newMail.downloaded)
- mailDownloadList.sizeInsert(newMail.serverId, newMail.size);
}
+ if ((!found)||(fromDisk)) item = new EmailListItem(inboxView, newMail, TRUE);
+
+ /*if (!newMail.downloaded)
+ mailDownloadList.sizeInsert(newMail.serverId, newMail.size);*/
mailboxView->setCurrentTab(0);
}
void EmailClient::allMailArrived(int count)
{
// not previewing means all mailtransfer has been done
- if (!previewingMail) {
+ /*if (!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();
- emailHandler->getMailByList(&mailDownloadList);
+ //emailHandler->getMailByList(&mailDownloadList);
mailboxView->setCurrentTab(0);
}
void EmailClient::moveMailFront(Email *mailPtr)
{
if ( (receiving) && (mailPtr->fromAccountId == currentAccount->id) ) {
mailDownloadList.moveFront(mailPtr->serverId, mailPtr->size);
}
}
void EmailClient::smtpError(int code)
{
QString temp;
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";
@@ -520,77 +527,75 @@ void EmailClient::popError(int code)
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 != ErrCancel) {
QMessageBox::warning(qApp->activeWindow(), "Receiving error", temp, "OK\n");
} else {
status2Label->setText("Aborted by user");
}
receiving = FALSE;
getMailButton->setEnabled(TRUE);
cancelButton->setEnabled(FALSE);
selectAccountMenu->setEnabled(TRUE);
}
void EmailClient::inboxItemSelected()
{
- killTimer(timerID);
+ //killTimer(timerID);
item = (EmailListItem*) inboxView->selectedItem();
if (item != NULL) {
emit viewEmail(inboxView, item->getMail());
}
}
void EmailClient::outboxItemSelected()
{
- killTimer(timerID);
+ //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");
-// QFileInfo fi(f);
- //qDebug( f.name());
-
+
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();
@@ -601,192 +606,164 @@ void EmailClient::readMail()
if (stop == -1)
stop = s.length() - del.length();
mail.rawMail = s.mid(start, stop + del.length() - start );
start = stop + del.length();
emailHandler->parse(mail.rawMail, lineShift, &mail);
mail.sent = false;
mail.received = false;
enqueMail(mail);
}
}
}
void EmailClient::saveMail(QString fileName, QListView *view)
{
QFile f(fileName);
Email *mail;
if (! f.open(IO_WriteOnly) ) {
qWarning("could not open file");
return;
}
item = (EmailListItem *) view->firstChild();
- //qDebug (QString("Write : ") );
QTextStream t(&f);
while (item != NULL) {
mail = item->getMail();
- //qDebug(mail->rawMail);
- //qDebug(mail->recipients.first());
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()
{
- TextParser *p;
- QString s;
- int pos, accountPos, y;
- QFile f( getPath(FALSE) + "settings.txt");
-
- if ( f.open(IO_ReadOnly) ) { // file opened successfully
- QTextStream t( &f ); // use a text stream
- s = t.read();
- f.close();
+ int y,acc_count, accountPos=0;
- p = new TextParser(s, "\n");
-
- accountPos = 0;
- while ( (accountPos = p->find("ACCOUNTSTART",';', accountPos, TRUE)) != -1 ) {
- accountPos++;
- if ( (pos = p->find("ACCOUNTNAME",':', accountPos, TRUE)) != -1 )
- account.accountName = p->getString(& ++pos, 'z', TRUE);
- if ( (pos = p->find("NAME",':', accountPos, TRUE)) != -1)
- account.name = p->getString(& ++pos, 'z', TRUE);
- if ( (pos = p->find("EMAIL",':', accountPos, TRUE)) != -1)
- account.emailAddress = p->getString(& ++pos, 'z', TRUE);
- if ( (pos = p->find("POPUSER",':', accountPos, TRUE)) != -1)
- account.popUserName = p->getString(& ++pos, 'z', TRUE);
- if ( (pos = p->find("POPPASSWORD",':', accountPos, TRUE)) != -1)
- account.popPasswd = p->getString(& ++pos, 'z', TRUE);
- if ( (pos = p->find("POPSERVER",':', accountPos, TRUE)) != -1)
- account.popServer = p->getString(& ++pos, 'z', TRUE);
- if ( (pos = p->find("SMTPSERVER",':', accountPos, TRUE)) != -1)
- account.smtpServer = p->getString(& ++pos, 'z', TRUE);
- if ( (pos = p->find("ACCOUNTID",':', accountPos, TRUE)) != -1) {
- s = p->getString(& ++pos, 'z', TRUE);
- account.id = s.toInt();
- }
+ 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;
- if ( (pos = p->find("SYNCHRONIZE",':', accountPos, TRUE)) != -1) {
- if (p->getString(& ++pos, 'z', TRUE).upper() == "YES") {
- account.synchronize = TRUE;
- if ( (pos = p->find("LASTSERVERMAILCOUNT",':', accountPos, TRUE)) != -1) {
- s = p->getString(& ++pos, 'z', TRUE);
- account.lastServerMailCount = s.toInt();
- }
- }
- }
-
- if ( (pos = p->find("SYNCLIMIT",':', accountPos, TRUE)) != -1) {
- account.syncLimit = p->getString(& ++pos, 'z', TRUE).toInt();
+
+ account.synchronize = (mailconf->readEntry("Synchronize","No")=="Yes");
+ if (account.synchronize)
+ {
+ mailconf->readNumEntry("LASTSERVERMAILCOUNT",0);
}
-
accountList.append(&account);
}
- delete p;
- }
+
mailconf->setGroup("mailitglobal");
- if ( (y = mailconf->readNumEntry("mailidcount", -1)) != -1) {
+
+ if ( (y = mailconf->readNumEntry("mailidcount", -1)) != -1)
+ {
mailIdCount = y;
}
- if ( (y = mailconf->readNumEntry("accountidcount", -1)) != -1) {
+ if ( (y = mailconf->readNumEntry("accountidcount", -1)) != -1)
+ {
accountIdCount = y;
}
}
void EmailClient::saveSettings()
{
-
- QString temp;
- QFile f( getPath(FALSE) + "settings.txt");
+ int acc_count=0;
MailAccount *accountPtr;
-
- if (! f.open(IO_WriteOnly) ) {
- qWarning("could not save settings file");
+
+
+ if (!mailconf)
+ {
+ qWarning("could not save settings");
return;
}
- QTextStream t(&f);
- t << "#Settings for OPIE Mailit program\n";
for (accountPtr = accountList.first(); accountPtr != 0;
- accountPtr = accountList.next()) {
-
- t << "accountStart;\n";
- t << "AccountName: " + accountPtr->accountName + "\n";
- t << "Name: " + accountPtr->name + "\n";
- t << "Email: " + accountPtr->emailAddress + "\n";
- t << "POPUser: " + accountPtr->popUserName + "\n";
- t << "POPPAssword: " + accountPtr->popPasswd + "\n";
- t << "POPServer: " + accountPtr->popServer + "\n";
- t << "SMTPServer: " + accountPtr->smtpServer + "\n";
- t << "AccountId: " << accountPtr->id << "\n";
- if (accountPtr->synchronize) {
- t << "Synchronize: Yes\n";
- t << "LastServerMailCount: ";
- t << accountPtr->lastServerMailCount << "\n";
- } else {
- t << "Synchronize: No\n";
+ 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");
}
- t << "SyncLimit: ";
- t << accountPtr->syncLimit << "\n";
- t << "accountEnd;\n";
}
- f.close();
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 {
@@ -980,25 +957,25 @@ void EmailClient::replyAll()
if (mail!=NULL)
{
emit replyAll(*mail);
}
}
void EmailClient::forward()
{
Email* mail=getCurrentMail();
if (mail!=NULL)
{
emit reply(*mail);
}
}
void EmailClient::remove()
{
Email* mail=getCurrentMail();
if (mail!=NULL)
{
emit remove(*mail);
}
-}*/ \ No newline at end of file
+}*/
diff --git a/noncore/unsupported/mailit/emailhandler.cpp b/noncore/unsupported/mailit/emailhandler.cpp
index f6c6d60..b180051 100644
--- a/noncore/unsupported/mailit/emailhandler.cpp
+++ b/noncore/unsupported/mailit/emailhandler.cpp
@@ -83,165 +83,181 @@ void EmailHandler::sendMail(QList<Email> *mailList)
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->headersOnly(headers, 0);
popClient->newConnection(mailAccount.popServer, 110);
}
void EmailHandler::getMailHeaders()
{
popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd);
- if (mailAccount.synchronize) {
- popClient->setSynchronize(mailAccount.lastServerMailCount);
- } else {
- popClient->removeSynchronize();
- }
+ mailAccount.synchronize ? popClient->setSynchronize(mailAccount.lastServerMailCount): popClient->removeSynchronize();
headers = TRUE;
popClient->headersOnly(headers, mailAccount.syncLimit); //less than requested syncLimit, download all
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->newConnection(mailAccount.popServer, 110);
popClient->setSelectedMails(mailList);
}
-void EmailHandler::messageArrived(const QString &message, int id, uint size, bool complete)
+void EmailHandler::messageArrived(const QString &message, int id, uint size, bool incomplete)
{
Email mail;
mail.rawMail = message;
mail.serverId = id;
mail.size = size;
- mail.downloaded = complete;
+ mail.downloaded = incomplete;
emit mailArrived(mail, FALSE);
}
bool EmailHandler::parse(QString in, QString lineShift, Email *mail)
{
QString temp, boundary;
int pos;
QString delimiter, header, body, mimeHeader, mimeBody;
QString content, contentType, contentAttribute, id, encoding;
QString fileName, storedName;
int enclosureId = 0;
mail->rawMail = in;
mail->received = TRUE;
mail->files.setAutoDelete(TRUE);
temp = lineShift + "." + lineShift;
if (in.right(temp.length()) != temp) {
mail->rawMail += temp;
}
delimiter = lineShift + lineShift; // "\n\n" or "\r\n\r\n"
pos = in.find(delimiter, 0, FALSE);
header = in.left(pos);
body = in.right(in.length() - pos - delimiter.length());
if ((body.at(body.length()-2) == '.') && (body.at(body.length()-3) == '\n'))
body.truncate(body.length()-2);
TextParser p(header, lineShift);
if ((pos = p.find("FROM",':', 0, TRUE)) != -1) {
pos++;
if (p.separatorAt(pos) == ' ') {
mail->from = p.getString(&pos, '<', false);
mail->from = mail->from.stripWhiteSpace();
if ( (mail->from.length() > 2) && (mail->from[0] == '"') ) {
mail->from = mail->from.left(mail->from.length() - 1);
mail->from = mail->from.right(mail->from.length() - 1);
}
- pos++;
+ pos++;
+
mail->fromMail = p.getString(&pos, '>', false);
} else {
if ((p.separatorAt(pos) == '<')
|| (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;
}
}
- //@@@ToDo: Rewrite the parser as To: stops at the first occurence- which is Delivered-To:
- if ((pos = p.find("TO",':', 0, TRUE)) != -1)
+ pos=0;
+
+ //Search for To: after the FROM: attribute to prevent hitting the Delivered-To:
+ while((pos = p.find("TO",':', pos+1, TRUE))!=-1)
{
- pos++;
- mail->recipients.append (p.getString(&pos, 'z', TRUE) );
+ QString rec;
+
+ if (p.separatorAt(pos-1)!='-')
+ {
+ pos++;
+ mail->recipients.append(p.getString(&pos, '\r', TRUE));
+ }
+ /*else {
+ if ((p.separatorAt(pos) == '<')|| (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;
+ }
+ mail->recipients.append (p.getString(&pos, 'z', TRUE) );
+ }*/
}
-
- //@@@ToDo: Rewrite the parser as To: stops at the first occurence- which is Delivered-To:
+ //
+ //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);
+ 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;
}
}
diff --git a/noncore/unsupported/mailit/emaillistitem.cpp b/noncore/unsupported/mailit/emaillistitem.cpp
index a325766..b925a1c 100644
--- a/noncore/unsupported/mailit/emaillistitem.cpp
+++ b/noncore/unsupported/mailit/emaillistitem.cpp
@@ -17,53 +17,55 @@
** not clear to you.
**
**********************************************************************/
#include <qstring.h>
#include <qpe/resource.h>
#include "emaillistitem.h"
EmailListItem::EmailListItem(QListView *parent, Email mailIn, bool inbox)
: QListViewItem(parent)
{
QString temp;
mail = mailIn;
if (inbox) {
setText(0, mail.from);
} else {
QStringList::Iterator it = mail.recipients.begin();
temp = *it;
if (mail.recipients.count() > 1)
temp += "...";
setText(0, temp);
}
setText(1, mail.subject);
+ setText(2,mail.date);
if (mailIn.files.count()>0)
{
setPixmap(0, Resource::loadPixmap("mailit/attach"));
}
+
selected = FALSE;
}
Email* EmailListItem::getMail()
{
return &mail;
}
void EmailListItem::setMail(Email newMail)
{
mail = newMail;
repaint();
}
void EmailListItem::setItemSelected(bool enable)
{
selected = enable;
setSelected(enable);
repaint();
}
bool EmailListItem::isItemSelected()
{
return selected;
diff --git a/noncore/unsupported/mailit/mailitwindow.cpp b/noncore/unsupported/mailit/mailitwindow.cpp
index ef5fc09..7181adf 100644
--- a/noncore/unsupported/mailit/mailitwindow.cpp
+++ b/noncore/unsupported/mailit/mailitwindow.cpp
@@ -1,54 +1,55 @@
/**********************************************************************
** 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 "mailitwindow.h"
MailItWindow::MailItWindow(QWidget *parent, const char *name, WFlags fl)
- : QMainWindow(parent, name, fl)
+ : QMainWindow(parent, name, WStyle_ContextHelp)
{
currentCaption = "Mailit";
setCaption(tr(currentCaption));
views = new QWidgetStack(this);
setCentralWidget(views);
-
- emailClient = new EmailClient(views, "client");
+ 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 &)) );
@@ -119,47 +120,24 @@ void MailItWindow::viewMail(QListView *view, Email *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);
}
-
-/*void MailItWindow::reply(Email& mail)
-{
- qDebug("####EmailClient: 0 reached");
- composeReply(mail,(bool&)FALSE);
-}
-
-void MailItWindow::replyAll(Email& mail)
-{
- qDebug("####EmailClient: 1 reached");
- composeReply(mail,(bool&)TRUE);
-}
-
-void MailItWindow::forward(Email& mail)
-{
- qDebug("####EmailClient: 2 reached");
-}
-
-void MailItWindow::remove(Email&)
-{
- qDebug("####EmailClient: 3 reached");
- //emit removeItem(eli,(bool&)TRUE);
-} */ \ No newline at end of file
diff --git a/noncore/unsupported/mailit/popclient.cpp b/noncore/unsupported/mailit/popclient.cpp
index f9cc337..67306be 100644
--- a/noncore/unsupported/mailit/popclient.cpp
+++ b/noncore/unsupported/mailit/popclient.cpp
@@ -98,94 +98,83 @@ void PopClient::setSelectedMails(MailList *list)
void PopClient::connectionEstablished()
{
emit updateStatus(tr("Connection established"));
}
void PopClient::errorHandling(int status)
{
emit updateStatus(tr("Error Occured"));
emit errorOccurred(status);
socket->close();
receiving = FALSE;
}
void PopClient::incomingData()
{
QString response, temp, temp2, timeStamp;
QString md5Source;
int start, end;
// char *md5Digest;
char md5Digest[16];
// if ( !socket->canReadLine() )
// return;
response = socket->readLine();
- //qDebug(response +" %d", status);
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;
- //qDebug( md5Source);
-// for( int i = 0; i < md5Source.length(); i++) {
-// buff[i] = (QChar)md5Source[i];
-// }
md5_buffer( (char const *)md5Source, md5Source.length(),&md5Digest[0]);
-// md5_buffer(char const *buffer, unsigned int len, char *digest);
-
-// MD5_Init( &ctx);
-// MD5_Update( &ctx, buff, sizeof( buff) );
-// MD5_Final( md5Digest, &ctx);
-// MD5( buff, md5Source.length(), md5Digest);
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;
}
- //password shhh. don't tell anyone (implement APOP...)
+
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);
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) {
@@ -227,85 +216,88 @@ void PopClient::incomingData()
emit updateStatus(tr("No new Messages"));
status = Quit;
}
}
//get size of message, eg "500 characters in message.." -> int 500
case Size: {
if (status != Quit) { //because of idiotic switch
if (response[0] == '+') {
temp = response.replace(0, 4, "");
int x = temp.find(" ", 0);
temp = temp.right(temp.length() - ((uint) x + 1) );
mailSize = temp.toInt();
emit currentMailSize(mailSize);
status = Retr;
} else {
//qWarning(response);
errorHandling(ErrUnknownResponse);
}
}
}
//Read message number x, count upwards to messageCount
case Retr: {
if (status != Quit) {
- if (!preview || mailSize <= headerLimit) {
+ if (mailSize <= headerLimit)
+ {
*stream << "RETR " << messageCount << "\r\n";
} else { //only header
- *stream << "TOP " << messageCount << " 0\r\n";
+ *stream << "TOP " << messageCount << " 0\r\n";
}
messageCount++;
status = Ignore;
break;
} }
case Ignore: {
if (status != Quit) { //because of idiotic switch
if (response[0] == '+') {
message = "";
status = Read;
if (!socket->canReadLine()) //sync. problems
break;
response = socket->readLine();
} else errorHandling(ErrUnknownResponse);
}
}
//add all incoming lines to body. When size is reached, send
//message, and go back to read new message
case Read: {
if (status != Quit) { //because of idiotic switch
message += response;
while ( socket->canReadLine() ) {
response = socket->readLine();
message += response;
}
emit downloadedSize(message.length());
int x = message.find("\r\n.\r\n",-5);
if (x == -1) {
break;
} else { //message reach entire size
//complete mail downloaded
- if ( (!preview ) || ((preview) && (mailSize <= headerLimit)) ){
- emit newMessage(message, messageCount-1, mailSize, TRUE);
+ //if ( (!preview ) || ((preview) && (mailSize <= headerLimit)) ){
+ if ( mailSize <= headerLimit)
+ {
+ emit newMessage(message, messageCount-1, mailSize, TRUE);
} else { //incomplete mail downloaded
emit newMessage(message, messageCount-1, mailSize, FALSE);
}
if (messageCount > newMessages) //that was the last message
status = Quit;
else { //ask for new message
if (selected) { //grab next from queue
int *ptr = mailList->next();
if (ptr != 0) {
messageCount = *ptr;
*stream << "LIST " << messageCount << "\r\n";
status = Size;
//completing a previously closed transfer
if ( (messageCount - lastSync) <= 0) {
temp.setNum(messageCount);
emit updateStatus(tr("Previous message ") + temp);
} else {
temp.setNum(messageCount - lastSync);
emit updateStatus(tr("Completing message ") + temp);
}
break;
} else {
newMessages--;
status = Quit;
diff --git a/noncore/unsupported/mailit/readmail.cpp b/noncore/unsupported/mailit/readmail.cpp
index dc98a6f..4eae7f6 100644
--- a/noncore/unsupported/mailit/readmail.cpp
+++ b/noncore/unsupported/mailit/readmail.cpp
@@ -38,78 +38,88 @@ ReadMail::~ReadMail()
delete viewAtt;
}
void ReadMail::init()
{
setToolBarsMovable(FALSE);
bar = new QToolBar(this);
bar->setHorizontalStretchable( TRUE );
menu = new QMenuBar( bar );
viewMenu = new QPopupMenu(menu);
menu->insertItem( tr( "&View" ), viewMenu);
mailMenu = new QPopupMenu(menu);
menu->insertItem( tr( "&Mail" ), mailMenu);
bar = new QToolBar(this);
//reply dependant on viewing inbox
replyButton = new QAction( tr( "Reply" ), Resource::loadPixmap( "mailit/reply" ),
QString::null, 0, this, 0 );
connect(replyButton, SIGNAL(activated()), this, SLOT(reply()) );
-
+ replyButton->setWhatsThis(tr("Click here to reply to the selected mail"));
+
forwardButton = new QAction( tr( "Forward" ), Resource::loadPixmap( "mailit/forward" ),
QString::null, 0, this, 0 );
connect(forwardButton, SIGNAL(activated()), this, SLOT(forward()) );
+ forwardButton->setWhatsThis(tr("Click here to forward the selected mail"));
previousButton = new QAction( tr( "Previous" ), Resource::loadPixmap( "back" ), QString::null, 0, this, 0 );
connect( previousButton, SIGNAL( activated() ), this, SLOT( previous() ) );
previousButton->addTo(bar);
previousButton->addTo(viewMenu);
+ previousButton->setWhatsThis(tr("Read the previous mail in the list"));
nextButton = new QAction( tr( "Next" ), Resource::loadPixmap( "forward" ), QString::null, 0, this, 0 );
connect( nextButton, SIGNAL( activated() ), this, SLOT( next() ) );
nextButton->addTo(bar);
nextButton->addTo(viewMenu);
+ previousButton->setWhatsThis(tr("Read the next mail in the list"));
- attatchmentsButton = new QAction( tr( "Attatchments" ), Resource::loadPixmap( "mailit/attach" ), QString::null, 0, this, 0 );
- connect( attatchmentsButton, SIGNAL( activated() ), this,
- SLOT( viewAttatchments() ) );
- attatchmentsButton->addTo(bar);
- attatchmentsButton->addTo(viewMenu);
+ attachmentButton = new QAction( tr( "Attatchments" ), Resource::loadPixmap( "mailit/attach" ), QString::null, 0, this, 0 );
+ connect( attachmentButton, SIGNAL( activated() ), this,
+ SLOT( viewAttachments() ) );
+ attachmentButton->addTo(bar);
+ attachmentButton->addTo(viewMenu);
+ attachmentButton->setWhatsThis(tr("Click here to add attachments to your mail"));
plainTextButton = new QAction( tr( "Text Format" ), Resource::loadPixmap( "DocsIcon" ), QString::null, 0, this, 0, TRUE);
connect( plainTextButton, SIGNAL( activated() ), this, SLOT( shiftText() ) );
plainTextButton->addTo(bar);
plainTextButton->addTo(viewMenu);
+ plainTextButton->setWhatsThis(tr("The mail view has 2 modes:\n"
+ "<LI><B>RichText</B> shows the mail as HTML with reach features (no standard line breaks)</LI>"
+ "<LI><B>Plain</B> shows the mail as standard plain text</LI>"
+ "Click here to switch between those view modes" ));
deleteButton = new QAction( tr( "Delete" ), Resource::loadPixmap( "trash" ), QString::null, 0, this, 0 );
connect( deleteButton, SIGNAL( activated() ), this, SLOT( deleteItem() ) );
deleteButton->addTo(bar);
deleteButton->addTo(mailMenu);
+ deleteButton->setWhatsThis(tr("Click here to remove the selected mail"));
viewMenu->insertItem(Resource::loadPixmap("close"), "Close", this, SLOT(close()));
emailView = new QTextView( this, "emailView" );
setCentralWidget(emailView);
mime = new QMimeSourceFactory();
emailView->setMimeSourceFactory(mime);
}
void ReadMail::updateView()
{
Enclosure *ePtr;
QString mailStringSize;
QString text, temp;
mail->read = TRUE; //mark as read
inbox = mail->received;
replyButton->removeFrom(mailMenu);
replyButton->removeFrom(bar);
forwardButton->removeFrom(mailMenu);
forwardButton->removeFrom(bar);
@@ -227,50 +237,50 @@ void ReadMail::updateView()
text += "\nDate: " + mail->date + "\n";
if (mail->files.count() > 0) {
text += "Attatchments: ";
for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) {
text += ePtr->originalName + " ";
}
text += "\n\n";
} else text += "\n";
if (!inbox) {
text += mail->body;
} else if (mail->downloaded) {
text += mail->bodyPlain;
} else {
text += "\nAwaiting download\n";
text += "Size of mail: " + mailStringSize;
}
emailView->setText(text);
}
if (mail->files.count() == 0)
- attatchmentsButton->setEnabled(FALSE);
- else attatchmentsButton->setEnabled(TRUE);
+ attachmentButton->setEnabled(FALSE);
+ else attachmentButton->setEnabled(TRUE);
setCaption("Examining mail: " + mail->subject);
}
//update view with current EmailListItem (item)
void ReadMail::update(QListView *thisView, Email *mailIn)
{
view = thisView;
item = (EmailListItem *) view->selectedItem();
mail = mailIn;
updateView();
updateButtons();
}
void ReadMail::mailUpdated(Email *mailIn)
{
if (mailIn == mail) {
updateView();
} else {
updateButtons();
}
}
void ReadMail::close()
@@ -318,40 +328,40 @@ void ReadMail::deleteItem()
} else close(); //no more items to see
}
void ReadMail::updateButtons()
{
EmailListItem *temp;
temp = item;
if ((EmailListItem *) temp->nextSibling() == NULL)
nextButton->setEnabled(FALSE);
else nextButton->setEnabled(TRUE);
temp = item;
if ((EmailListItem *) temp->itemAbove() == NULL)
previousButton->setEnabled(FALSE);
else previousButton->setEnabled(TRUE);
}
void ReadMail::shiftText()
{
plainTxt = ! plainTxt;
updateView();
}
-void ReadMail::viewAttatchments()
+void ReadMail::viewAttachments()
{
viewAtt->update(mail, inbox);
viewAtt->showMaximized();
}
void ReadMail::reply()
{
emit replyRequested(*mail, (bool&)TRUE);
}
void ReadMail::forward()
{
emit forwardRequested(*mail);
}
diff --git a/noncore/unsupported/mailit/readmail.h b/noncore/unsupported/mailit/readmail.h
index 0fe0646..df32c34 100644
--- a/noncore/unsupported/mailit/readmail.h
+++ b/noncore/unsupported/mailit/readmail.h
@@ -36,54 +36,54 @@
class ReadMail : public QMainWindow
{
Q_OBJECT
public:
ReadMail( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
~ReadMail();
void update(QListView *thisView, Email *mailIn);
void updateView();
void mailUpdated(Email *mailIn);
signals:
void cancelView();
void replyRequested(Email &, bool &);
void forwardRequested(Email&);
void removeItem(EmailListItem *, bool &);
void viewingMail(Email *);
public slots:
void close();
void next();
void previous();
void deleteItem();
void shiftText();
- void viewAttatchments();
+ void viewAttachments();
void reply();
void forward();
private:
void init();
void updateButtons();
private:
QListView *view;
EmailListItem *item;
bool plainTxt, inbox;
Email *mail;
ViewAtt *viewAtt;
QToolBar *bar;
QMenuBar *menu;
QPopupMenu *viewMenu, *mailMenu;
QAction *deleteButton;
QMimeSourceFactory *mime;
QAction *plainTextButton;
QAction *nextButton;
QTextView *emailView;
- QAction *attatchmentsButton;
+ QAction *attachmentButton;
QAction *previousButton;
QAction *replyButton;
QAction *forwardButton;
};
#endif // READMAIL_H
diff --git a/noncore/unsupported/mailit/smtpclient.cpp b/noncore/unsupported/mailit/smtpclient.cpp
index b2e38e5..8a51a5b 100644
--- a/noncore/unsupported/mailit/smtpclient.cpp
+++ b/noncore/unsupported/mailit/smtpclient.cpp
@@ -66,106 +66,98 @@ void SmtpClient::addMail(QString from, QString subject, QStringList to, QString
}
void SmtpClient::connectionEstablished()
{
emit updateStatus(tr("Connection established"));
}
void SmtpClient::errorHandling(int status)
{
emit errorOccurred(status);
socket->close();
mailList.clear();
sending = FALSE;
}
void SmtpClient::incomingData()
{
QString response;
if (!socket->canReadLine())
return;
response = socket->readLine();
- //qDebug(response);
switch(status) {
case Init: {
if (response[0] == '2') {
status = From;
mailPtr = mailList.first();
*stream << "HELO there\r\n";
- //qDebug("HELO");
} else errorHandling(ErrUnknownResponse);
break;
}
case From: {
if (response[0] == '2') {
*stream << "MAIL FROM: " << mailPtr->from << "\r\n";
status = Recv;
- //qDebug("MAIL FROM: "+mailPtr->from);
} else errorHandling(ErrUnknownResponse);
break;
}
case Recv: {
if (response[0] == '2') {
it = mailPtr->to.begin();
if (it == NULL)
errorHandling(ErrUnknownResponse);
*stream << "RCPT TO: " << *it << ">\r\n";
- //qDebug("RCPT TO: "+ *it);
status = MRcv;
} else errorHandling(ErrUnknownResponse);
break;
}
case MRcv: {
if (response[0] == '2') {
it++;
if ( it != mailPtr->to.end() ) {
*stream << "RCPT TO: <" << *it << ">\r\n";
- //qDebug("RCPT TO: "+ *it);
break;
} else {
status = Data;
}
} else errorHandling(ErrUnknownResponse);
}
case Data: {
if (response[0] == '2') {
*stream << "DATA\r\n";
status = Body;
- //qDebug("DATA");
emit updateStatus(tr("Sending: ") + mailPtr->subject);
} else errorHandling(ErrUnknownResponse);
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;
}
- //qDebug("BODY");
} else errorHandling(ErrUnknownResponse);
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();
- //qDebug("QUIT");
} else errorHandling(ErrUnknownResponse);
break;
}
}
}
diff --git a/noncore/unsupported/mailit/textparser.cpp b/noncore/unsupported/mailit/textparser.cpp
index f082417..3fa5f6e 100644
--- a/noncore/unsupported/mailit/textparser.cpp
+++ b/noncore/unsupported/mailit/textparser.cpp
@@ -41,69 +41,79 @@ TextParser::TextParser(QString in, QString lineBreak, QString sep)
void TextParser::init()
{
lineCount = 0;
linePos = 0;
totalElmCount = 0;
separatorPos = -1; //not initialized
wordPos = -1; //not initialized
sepAtLine = 0;
sepAtPosElm = -1; //such that nextSep equals 0
wordAtLine = 0;
wordAtPosElm = -1; //such that nextWord equals 0
atLine = 0;
atPosElm = 0;
}
void TextParser::createSeparators()
{
separators = " @#,.:;<>*/(){}|'?-+=_";
}
/* Returns pos of given search criteria, -1 if not found */
int TextParser::find(QString target, QChar sep, int pos, bool upperCase)
{
+
+ t_splitElm parsstr;
+ QString pString;
+
int atLine = 0, atPosElm = 0;
- for (int x = 0; x < totalElmCount; x++) {
- if (x >= pos) {
- if (upperCase) {
- if ((splitDone[atLine].elm[atPosElm].str.upper() == target) &&
- (splitDone[atLine].elm[atPosElm].separator == sep))
- return x;
- } else {
- if ((splitDone[atLine].elm[atPosElm].str == target) &&
- (splitDone[atLine].elm[atPosElm].separator == sep))
- return x;
- }
- }
- atPosElm++;
- if (atPosElm >= splitDone[atLine].elmCount) { //new Line
+ getLineReference(pos,&atLine,&atPosElm);
+
+ for (int x = pos; x < totalElmCount; x++)
+ {
+ parsstr=splitDone[atLine].elm[atPosElm++];
+
+ if (upperCase)
+ {
+ pString=parsstr.str.upper();
+ target=target.upper();
+ }
+ else
+ {
+ pString=parsstr.str;
+ }
+ if ((pString == target) && (parsstr.separator == sep))
+ {
+ return x;
+ }
+ if (atPosElm >= splitDone[atLine].elmCount)
+ { //new Line
atLine++;
atPosElm = 0;
}
}
-
return -1;
}
int TextParser::elmCount()
{
return totalElmCount;
}
QChar TextParser::separatorAt(int pos)
{
if (getLineReference(pos, &sepAtLine, &sepAtPosElm) == -1)
return QChar::null;
separatorPos = pos;
return splitDone[sepAtLine].elm[sepAtPosElm].separator;
}
QChar TextParser::nextSeparator()
{
sepAtPosElm++;
if (splitDone[sepAtLine].elmCount <= sepAtPosElm) {
sepAtLine++;
sepAtPosElm = 0;
}
diff --git a/noncore/unsupported/mailit/viewatt.cpp b/noncore/unsupported/mailit/viewatt.cpp
index b6f5015..21885c2 100644
--- a/noncore/unsupported/mailit/viewatt.cpp
+++ b/noncore/unsupported/mailit/viewatt.cpp
@@ -1,63 +1,66 @@
/**********************************************************************
** 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");
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" );
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";
if (ePtr->installed)
isInstalled = "Yes";
diff --git a/noncore/unsupported/mailit/writemail.cpp b/noncore/unsupported/mailit/writemail.cpp
index a9dcb02..0336c83 100644
--- a/noncore/unsupported/mailit/writemail.cpp
+++ b/noncore/unsupported/mailit/writemail.cpp
@@ -1,170 +1,178 @@
/**********************************************************************
** 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 Attatchments");
+ addAtt = new AddAtt(0, "Add Attachments");
}
WriteMail::~WriteMail()
{
delete addAtt;
}
void WriteMail::setAddressList(AddressList *list)
{
Contact *cPtr;
addressList = list;
addressView->clear();
QList<Contact> *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 );
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);
- attatchButton = new QAction(tr("Attatchment"), Resource::loadPixmap("mailit/attach"), QString::null, 0, this, 0);
- attatchButton->addTo(bar);
- attatchButton->addTo(addMenu);
- connect( attatchButton, SIGNAL( activated() ), this, SLOT( attatchFile() ) );
-
+ 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 );
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 );
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"));
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"));
-
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(recipientsBox,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("Chose 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);
}
void WriteMail::reject()
{
emit cancelMail();
}
// need to insert date
void WriteMail::accept()
{
- QStringList attatchedFiles, attatchmentsType;
+ 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();
@@ -175,109 +183,109 @@ void WriteMail::accept()
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";
- attatchedFiles = addAtt->returnAttatchedFiles();
- attatchmentsType = addAtt->returnFileTypes();
+ attachedFiles = addAtt->returnattachedFiles();
+ attachmentsType = addAtt->returnFileTypes();
- QStringList::Iterator itType = attatchmentsType.begin();
+ QStringList::Iterator itType = attachmentsType.begin();
Enclosure e;
- for ( QStringList::Iterator it = attatchedFiles.begin(); it != attatchedFiles.end(); ++it ) {
+ 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();
}
}
-void WriteMail::attatchFile()
+void WriteMail::attachFile()
{
addAtt->showMaximized();
}
void WriteMail::reply(Email replyMail, bool replyAll)
{
int pos;
mail = replyMail;
mail.files.clear();
toInput->setText(mail.fromMail);
//replyAll ? ccInput->setText(mail.c)
addRecipients(replyAll);
subjectInput->setText(tr("Re: ") + mail.subject);
pos = 0;
- mail.body.insert(pos, ">>");
+ mail.body.insert(pos, ">");
while (pos != -1) {
pos = mail.body.find('\n', pos);
if (pos != -1)
mail.body.insert(++pos, ">>");
}
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"));
diff --git a/noncore/unsupported/mailit/writemail.h b/noncore/unsupported/mailit/writemail.h
index f193b13..921f27e 100644
--- a/noncore/unsupported/mailit/writemail.h
+++ b/noncore/unsupported/mailit/writemail.h
@@ -34,63 +34,63 @@
#include "emailhandler.h"
#include "addresslist.h"
#include "addatt.h"
class WriteMail : public QMainWindow
{
Q_OBJECT
public:
WriteMail( QWidget* parent, const char* name, WFlags fl = 0 );
~WriteMail();
void reply(Email replyMail, bool replyAll);
void setRecipient(const QString &recipient);
void setAddressList(AddressList *list);
void forward(Email forwMail);
signals:
void sendMailRequested(const Email &mail);
void cancelMail();
public slots:
void getAddress();
- void attatchFile();
+ void attachFile();
void addRecipients();
void newMail();
void accept();
void reject();
void changeRecipients(int);
private:
bool getRecipients(bool);
void init();
void addRecipients(bool);
Email mail;
AddAtt *addAtt;
AddressList *addressList;
bool showingAddressList;
QToolBar *bar;
QMenuBar *menu;
QPopupMenu *addMenu, *mailMenu;
QListView *addressView;
QToolButton *okButton;
QWidget *widget;
- QAction *attatchButton;
+ QAction *attachButton;
QAction *confirmButton;
QAction *newButton;
QLabel* subjetLabel;
QToolButton* ToolButton13_2;
QComboBox* recipientsBox;
QLineEdit *subjectInput;
QLineEdit *toInput;
QLineEdit *ccInput;
QToolButton* addressButton;
QMultiLineEdit* emailInput;
QGridLayout* grid;
};
#endif // WRITEMAIL_H