author | groucho <groucho> | 2003-04-29 08:04:34 (UTC) |
---|---|---|
committer | groucho <groucho> | 2003-04-29 08:04:34 (UTC) |
commit | f09f685be0540e98cc33bc4f664a812aed756926 (patch) (side-by-side diff) | |
tree | 10a2193eafd1dc0ae25cd458f3bfa9f0f23522e1 | |
parent | e096c9d1f2be1ec74ede583fc4221871a56ef508 (diff) | |
download | opie-f09f685be0540e98cc33bc4f664a812aed756926.zip opie-f09f685be0540e98cc33bc4f664a812aed756926.tar.gz opie-f09f685be0540e98cc33bc4f664a812aed756926.tar.bz2 |
- added ReplyAll for CC: addressing
- added a download button in mail view
- smaller layout fixes
- now it's getting to be real useful
-rw-r--r-- | noncore/net/mailit/emailclient.cpp | 140 | ||||
-rw-r--r-- | noncore/net/mailit/emailclient.h | 11 | ||||
-rw-r--r-- | noncore/net/mailit/emailhandler.cpp | 4 | ||||
-rw-r--r-- | noncore/net/mailit/emailhandler.h | 1 | ||||
-rw-r--r-- | noncore/net/mailit/mailitwindow.cpp | 3 | ||||
-rw-r--r-- | noncore/net/mailit/popclient.cpp | 14 | ||||
-rw-r--r-- | noncore/net/mailit/readmail.cpp | 64 | ||||
-rw-r--r-- | noncore/net/mailit/readmail.h | 8 | ||||
-rw-r--r-- | noncore/net/mailit/writemail.cpp | 35 | ||||
-rw-r--r-- | noncore/unsupported/mailit/emailclient.cpp | 140 | ||||
-rw-r--r-- | noncore/unsupported/mailit/emailclient.h | 11 | ||||
-rw-r--r-- | noncore/unsupported/mailit/emailhandler.cpp | 4 | ||||
-rw-r--r-- | noncore/unsupported/mailit/emailhandler.h | 1 | ||||
-rw-r--r-- | noncore/unsupported/mailit/mailitwindow.cpp | 3 | ||||
-rw-r--r-- | noncore/unsupported/mailit/popclient.cpp | 14 | ||||
-rw-r--r-- | noncore/unsupported/mailit/readmail.cpp | 64 | ||||
-rw-r--r-- | noncore/unsupported/mailit/readmail.h | 8 | ||||
-rw-r--r-- | noncore/unsupported/mailit/writemail.cpp | 35 |
18 files changed, 412 insertions, 148 deletions
diff --git a/noncore/net/mailit/emailclient.cpp b/noncore/net/mailit/emailclient.cpp index dff1888..2cedc51 100644 --- a/noncore/net/mailit/emailclient.cpp +++ b/noncore/net/mailit/emailclient.cpp @@ -16,19 +16,21 @@ ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <qapplication.h> #include <qmessagebox.h> +#include <qvbox.h> #include <qfile.h> #include <qcheckbox.h> #include <qmenubar.h> #include <qaction.h> #include <qwhatsthis.h> #include <qpe/resource.h> #include "emailclient.h" +#include "writemail.h" QCollection::Item AccountList::newItem(QCollection::Item d) { return dupl( (MailAccount *) d); } @@ -37,39 +39,40 @@ MailAccount* AccountList::dupl(MailAccount *in) ac = new MailAccount(*in); return ac; } EmailClient::EmailClient( QWidget* parent, const char* name, WFlags fl ) : QMainWindow( parent, name, fl ) -{ +{ emailHandler = new EmailHandler(); addressList = new AddressList(); sending = FALSE; receiving = FALSE; previewingMail = FALSE; mailIdCount = 1; accountIdCount = 1; allAccounts = FALSE; init(); + + connect(emailHandler, SIGNAL(mailSent()), this, SLOT(mailSent()) ); connect(emailHandler, SIGNAL(smtpError(int)), this, SLOT(smtpError(int)) ); connect(emailHandler, SIGNAL(popError(int)), this, SLOT(popError(int)) ); connect(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"); @@ -81,12 +84,17 @@ EmailClient::EmailClient( QWidget* parent, const char* name, WFlags fl ) lineShift = "\n"; readMail(); lineShift = "\r\n"; mailboxView->setCurrentTab(0); //ensure that inbox has focus + + /*channel = new QCopChannel( "QPE/Application/mailit", this ); + connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), + this, SLOT(receive(const QCString&, const QByteArray&)) );*/ + } EmailClient::~EmailClient() { //needs to be moved from destructor to closewindow event @@ -101,35 +109,14 @@ EmailClient::~EmailClient() 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); - + initStatusBar(this); + setToolBarsMovable(FALSE); bar = new QToolBar(this); QWhatsThis::add(bar,tr("Main operation toolbar")); bar->setHorizontalStretchable( TRUE ); @@ -191,14 +178,17 @@ void EmailClient::init() 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.")); + QWhatsThis::add(inboxView,QWidget::tr("This is the inbox view.\n" + "It keeps the fetched mail which can be \n" + "viewed by double clicking the entry.\n" + "blue attachment icon shows whether this \n" + "mailhas attachments.\n")); grid_2->addWidget( inboxView, 2, 0 ); mailboxView->addTab( widget, "mailit/inbox", tr( "Inbox" ) ); QWidget* widget_2 = new QWidget( mailboxView, "widget_2" ); grid_3 = new QGridLayout( widget_2 ); @@ -207,20 +197,49 @@ void EmailClient::init() 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.")); + QWhatsThis::add(outboxView,QWidget::tr("This is the outbox view.\n" + "It keeps the queued mails to send which can be \n" + "reviewed by double clicking the entry.")); grid_3->addWidget( outboxView, 0, 0 ); mailboxView->addTab( widget_2,"mailit/outbox", tr( "Outbox" ) ); setCentralWidget(mailboxView); } +void EmailClient::initStatusBar(QWidget* parent) +{ + statusBar = new QStatusBar(parent); + statusBar->setSizeGripEnabled(FALSE); + + status1Label = new QLabel( tr("Idle"), statusBar); + status2Label = new QLabel("", statusBar); + connect(emailHandler, SIGNAL(updatePopStatus(const QString &)), + status2Label, SLOT(setText(const QString &)) ); + connect(emailHandler, SIGNAL(updateSmtpStatus(const QString &)), + status2Label, SLOT(setText(const QString &)) ); + + progressBar = new QProgressBar(statusBar); + + connect(emailHandler, SIGNAL(mailboxSize(int)), + this, SLOT(setTotalSize(int)) ); + connect(emailHandler, SIGNAL(currentMailSize(int)), + this, SLOT(setMailSize(int)) ); + connect(emailHandler, SIGNAL(downloadedSize(int)), + this, SLOT(setDownloadedSize(int)) ); + + statusBar->addWidget(status1Label); + statusBar->addWidget(progressBar); + statusBar->addWidget(status2Label); + +} + void EmailClient::compose() { emit composeRequested(); } void EmailClient::cancel() @@ -316,51 +335,53 @@ void EmailClient::getNewMail() { 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(); + getNewMail(); } void EmailClient::mailArrived(const Email &mail, bool fromDisk) { Enclosure *ePtr; Email newMail; int thisMailId; emailHandler->parse(mail.rawMail, lineShift, &newMail); mailconf->setGroup(newMail.id); - + if (fromDisk) { + newMail.downloaded = mailconf->readBoolEntry("downloaded"); newMail.size = mailconf->readNumEntry("size"); newMail.serverId = mailconf->readNumEntry("serverid"); newMail.fromAccountId = mailconf->readNumEntry("fromaccountid"); } else { //mail arrived from server + newMail.serverId = mail.serverId; newMail.size = mail.size; newMail.downloaded = mail.downloaded; newMail.fromAccountId = emailHandler->getAccount()->id; mailconf->writeEntry("fromaccountid", newMail.fromAccountId); @@ -915,13 +936,13 @@ void EmailClient::inboxItemPressed() void EmailClient::inboxItemReleased() { // killTimer(timerID); } -void EmailClient::timerEvent(QTimerEvent *e) +/*void EmailClient::timerEvent(QTimerEvent *e) { /*killTimer(timerID); QPopupMenu *action = new QPopupMenu(this); @@ -932,14 +953,14 @@ void EmailClient::timerEvent(QTimerEvent *e) action->insertItem( tr( "Forward" ), this,SLOT(forward())); action->insertItem( tr( "Remove Mail" ), this,SLOT(remove())); action->exec(QCursor::pos()); if (action) delete action; - */ -} + +}*/ Email* EmailClient::getCurrentMail() { EmailListItem *eli=(EmailListItem* ) (inboxView->selectedItem()); if (eli!=NULL) return eli->getMail(); @@ -950,19 +971,62 @@ Email* EmailClient::getCurrentMail() void EmailClient::download(Email* mail) { MailAccount* acc=0; tempMailDownloadList.clear(); tempMailDownloadList.sizeInsert(mail->serverId, mail->size); - if (accountList.count()>0) - qDebug("Accounts present"); acc=accountList.at(mail->fromAccountId-1); if (acc) { emailHandler->setAccount(*acc); emailHandler->getMailByList(&tempMailDownloadList); } else QMessageBox::warning(qApp->activeWindow(), tr("No account associated"), tr("There is no active account \nassociated to this mail\n it can not be downloaded"), "Abort\n"); } + +void EmailClient::receive(const QCString& msg, const QByteArray& data) +{ + /*if (msg=="getMail()") + { + /*QDialog qd(qApp->activeWindow(),"Getting mail",true); + QVBoxLayout *vbProg = new QVBoxLayout( &qd ); + + initStatusBar(&qd); + + if (statusBar==0) + { + qDebug("No Bar ..."); + //statusBar=new ProgressBar(&qd); + } + statusBar->show(); + vbProg->addWidget(statusBar); + qd.showMaximized(); + qd.show(); + emit getAllNewMail(); + //qd.exec(); + } + else if (msg=="compose()") + { + QDialog qd(qApp->activeWindow(),"Getting mail",true); + + WriteMail wm(&qd,"write new mail"); + QVBoxLayout vbProg( &qd ); + + wm.showMaximized(); + vbProg.addWidget(&wm); + + qd.showMaximized(); + + emit composeRequested(); + qd.exec(); + + QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n"); + } + + else if (msg=="dialog()") + { + QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n"); + }*/ +} diff --git a/noncore/net/mailit/emailclient.h b/noncore/net/mailit/emailclient.h index 549683b..994fec5 100644 --- a/noncore/net/mailit/emailclient.h +++ b/noncore/net/mailit/emailclient.h @@ -38,12 +38,13 @@ #include <qstringlist.h> #include <qprogressbar.h> #include <qstatusbar.h> #include <qdir.h> #include <stdlib.h> #include <opie/otabwidget.h> +#include <qpe/qcopenvelope_qws.h> #include <qtimer.h> #include "emailhandler.h" #include "emaillistitem.h" #include "textparser.h" #include "editaccount.h" @@ -67,16 +68,15 @@ class EmailClient : public QMainWindow Q_OBJECT public: EmailClient( QWidget* parent, const char* name, WFlags fl = 0 ); ~EmailClient(); AddressList* getAdrListRef(); - void download(Email*); protected: - void timerEvent(QTimerEvent*); + //void timerEvent(QTimerEvent*); signals: void composeRequested(); void viewEmail(QListView *, Email *); void mailUpdated(Email *); void newCaption(const QString &); @@ -113,19 +113,24 @@ public slots: void deleteAccount(int); void deleteMail(EmailListItem *mailItem, bool &inbox); void setTotalSize(int); void setMailSize(int); void setDownloadedSize(int); void moveMailFront(Email *mailPtr); + void download(Email*); /* void reply(); void replyAll(); void forward(); void remove();*/ +private slots: + void receive(const QCString&, const QByteArray&); + private: void init(); + void initStatusBar(QWidget*); void readMail(); QString getPath(bool enclosurePath); void readSettings(); void saveSettings(); Email* getCurrentMail(); int timerID; @@ -143,12 +148,14 @@ private: MailList tempMailDownloadList; bool sending, receiving, previewingMail, allAccounts; QString lineShift; MailAccount account, *currentAccount; + QCopChannel* channel; + QToolBar *bar; QProgressBar *progressBar; QStatusBar *statusBar; QLabel *status1Label, *status2Label; QToolButton *getMailButton; QAction *sendMailButton; diff --git a/noncore/net/mailit/emailhandler.cpp b/noncore/net/mailit/emailhandler.cpp index fbbada7..c7b27a0 100644 --- a/noncore/net/mailit/emailhandler.cpp +++ b/noncore/net/mailit/emailhandler.cpp @@ -36,12 +36,14 @@ Enclosure* EnclosureList::dupl(Enclosure *in) ac = new Enclosure(*in); return ac; } EmailHandler::EmailHandler() { + qDebug("EMailHandler::EmailHandler"); + smtpClient = new SmtpClient(); popClient = new PopClient(); connect(smtpClient, SIGNAL(errorOccurred(int)), this, SIGNAL(smtpError(int)) ); connect(smtpClient, SIGNAL(mailSent()), this, SIGNAL(mailSent()) ); @@ -112,12 +114,13 @@ void EmailHandler::getMailHeaders() { popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd); mailAccount.synchronize ? popClient->setSynchronize(mailAccount.lastServerMailCount): popClient->removeSynchronize(); headers = TRUE; popClient->headersOnly(headers, mailAccount.syncLimit); //less than requested syncLimit, download all + qDebug("Initiating connection"); popClient->newConnection(mailAccount.popServer, 110); } void EmailHandler::getMailByList(MailList *mailList) { if (mailList->count() == 0) { //should not occur though @@ -623,6 +626,7 @@ void EmailHandler::encode64base(char *src, QString *dest, int len) void EmailHandler::cancel() { popClient->errorHandling(ErrCancel); smtpClient->errorHandling(ErrCancel); } + diff --git a/noncore/net/mailit/emailhandler.h b/noncore/net/mailit/emailhandler.h index b645868..5b59f65 100644 --- a/noncore/net/mailit/emailhandler.h +++ b/noncore/net/mailit/emailhandler.h @@ -25,12 +25,13 @@ #include <qdatetime.h> #include <qlist.h> #include <qstringlist.h> #include <qfile.h> #include <qstringlist.h> #include <qcollection.h> +#include <qpe/qcopenvelope_qws.h> #include "smtpclient.h" #include "popclient.h" #include "textparser.h" #include "maillist.h" diff --git a/noncore/net/mailit/mailitwindow.cpp b/noncore/net/mailit/mailitwindow.cpp index ffee67e..a111241 100644 --- a/noncore/net/mailit/mailitwindow.cpp +++ b/noncore/net/mailit/mailitwindow.cpp @@ -58,12 +58,15 @@ MailItWindow::MailItWindow(QWidget *parent, const char *name, WFlags fl) SLOT(deleteMail(EmailListItem *, bool &)) ); connect(readMail, SIGNAL(viewingMail(Email *)), emailClient, SLOT(moveMailFront(Email *)) ); connect(emailClient, SIGNAL(newCaption(const QString &)), this, SLOT(updateCaption(const QString &)) ); + + connect(readMail, SIGNAL(download(Email *)), emailClient, SLOT(download(Email*)) ); + viewingMail = FALSE; } MailItWindow::~MailItWindow() { } diff --git a/noncore/net/mailit/popclient.cpp b/noncore/net/mailit/popclient.cpp index 6105d09..fedc4e2 100644 --- a/noncore/net/mailit/popclient.cpp +++ b/noncore/net/mailit/popclient.cpp @@ -26,12 +26,13 @@ extern "C" { } #include <qcstring.h> PopClient::PopClient() { + socket = new QSocket(this, "popClient"); connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int))); connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished())); connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData())); stream = new QTextStream(socket); @@ -114,12 +115,13 @@ void PopClient::incomingData() QString md5Source; int start, end; // char *md5Digest; char md5Digest[16]; // if ( !socket->canReadLine() ) // return; + response = socket->readLine(); switch(status) { //logging in case Init: { @@ -148,25 +150,26 @@ void PopClient::incomingData() { timeStamp = ""; *stream << "USER " << popUserName << "\r\n"; status = Pass; } - break; + break; } case Pass: { *stream << "PASS " << popPassword << "\r\n"; - status = Stat; + status = Stat; + break; } //ask for number of messages case Stat: { if (response[0] == '+') { *stream << "STAT" << "\r\n"; - status = Mcnt; + status = Mcnt; } else errorHandling(ErrLoginFailed); break; } //get count of messages, eg "+OK 4 900.." -> int 4 case Mcnt: { if (response[0] == '+') { @@ -176,14 +179,14 @@ void PopClient::incomingData() newMessages = temp.toInt(); messageCount = 1; status = List; if (synchronize) { //messages deleted from server, reload all - if (newMessages < lastSync) - lastSync = 0; + if (newMessages < lastSync) + lastSync = 0; messageCount = 1; } if (selected) { int *ptr = mailList->first(); if (ptr != 0) { @@ -270,13 +273,12 @@ void PopClient::incomingData() } emit downloadedSize(message.length()); int x = message.find("\r\n.\r\n",-5); if (x == -1) { break; } else { //message reach entire size - if ( (selected)||(mailSize <= headerLimit)) //mail size limit is not used if late download is active { emit newMessage(message, messageCount-1, mailSize, TRUE); } else { //incomplete mail downloaded emit newMessage(message, messageCount-1, mailSize, FALSE); } diff --git a/noncore/net/mailit/readmail.cpp b/noncore/net/mailit/readmail.cpp index 4eae7f6..1682675 100644 --- a/noncore/net/mailit/readmail.cpp +++ b/noncore/net/mailit/readmail.cpp @@ -16,14 +16,16 @@ ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "readmail.h" #include <qimage.h> +#include <qwhatsthis.h> #include <qmime.h> #include <qaction.h> +#include <qpopupmenu.h> #include <qpe/resource.h> ReadMail::ReadMail( QWidget* parent, const char* name, WFlags fl ) : QMainWindow(parent, name, fl) { plainTxt = FALSE; @@ -39,12 +41,14 @@ ReadMail::~ReadMail() } void ReadMail::init() { setToolBarsMovable(FALSE); + QPopupMenu* mailaction=new QPopupMenu(this); + bar = new QToolBar(this); bar->setHorizontalStretchable( TRUE ); menu = new QMenuBar( bar ); viewMenu = new QPopupMenu(menu); @@ -52,23 +56,17 @@ void ReadMail::init() 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")); + downloadButton = new QAction( tr( "Download" ), Resource::loadPixmap( "mailit/download" ),QString::null, 0, this, 0 ); + connect(downloadButton, SIGNAL(activated()), this, SLOT(download()) ); + downloadButton->setWhatsThis(tr("Click here to download 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")); @@ -91,12 +89,29 @@ void ReadMail::init() 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" )); + //reply dependant on viewing inbox + replyButton = new QToolButton(Resource::loadPixmap("mailit/reply"),tr("reply"),tr("reply to mail"), this,SLOT(reply()),bar); + QWhatsThis::add(replyButton,tr("Click here to reply to the selected mail\nPress and hold for more options.")); + replyButton->setPopup(mailaction); + + replyAllButton = new QAction( tr( "Reply all" ), Resource::loadPixmap( "mailit/reply" ),QString::null, 0, this, 0 ); + connect(replyAllButton, SIGNAL(activated()), this, SLOT(replyAll())); + replyAllButton->setWhatsThis(tr("Click here to reply to the selected mail to CC: addresses also")); + replyAllButton->addTo(mailaction); + + 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")); + forwardButton->addTo(mailaction); + + 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")); @@ -116,25 +131,32 @@ void ReadMail::updateView() QString mailStringSize; QString text, temp; mail->read = TRUE; //mark as read inbox = mail->received; - replyButton->removeFrom(mailMenu); - replyButton->removeFrom(bar); + replyButton->setEnabled(false); + /*replyButton->removeFrom(bar); forwardButton->removeFrom(mailMenu); - forwardButton->removeFrom(bar); + forwardButton->removeFrom(bar);*/ + downloadButton->removeFrom(bar); + + //downloadButton->setEnabled(!mail->downloaded); + if (inbox == TRUE) { - replyButton->addTo(bar); - replyButton->addTo(mailMenu); + replyButton->setEnabled(true); + /*replyButton->addTo(mailMenu); forwardButton->addTo(bar); - forwardButton->addTo(mailMenu); + forwardButton->addTo(mailMenu);*/ if (!mail->downloaded) { + + downloadButton->addTo(bar); + //report currently viewed mail so that it will be //placed first in the queue of new mails to download emit viewingMail(mail); double mailSize = (double) mail->size; if (mailSize < 1024) { @@ -354,14 +376,24 @@ void ReadMail::viewAttachments() viewAtt->update(mail, inbox); viewAtt->showMaximized(); } void ReadMail::reply() { + emit replyRequested(*mail, (bool&)FALSE); +} + +void ReadMail::replyAll() +{ emit replyRequested(*mail, (bool&)TRUE); } void ReadMail::forward() { emit forwardRequested(*mail); } +void ReadMail::download() +{ + emit download(mail); +} + diff --git a/noncore/net/mailit/readmail.h b/noncore/net/mailit/readmail.h index df32c34..6700595 100644 --- a/noncore/net/mailit/readmail.h +++ b/noncore/net/mailit/readmail.h @@ -25,12 +25,13 @@ #include <qmenubar.h> #include <qpopupmenu.h> #include <qlabel.h> #include <qlistview.h> #include <qlayout.h> #include <qtextview.h> +#include <qtoolbutton.h> #include "emailhandler.h" #include "emaillistitem.h" #include "viewatt.h" class ReadMail : public QMainWindow @@ -47,22 +48,25 @@ public: signals: void cancelView(); void replyRequested(Email &, bool &); void forwardRequested(Email&); void removeItem(EmailListItem *, bool &); void viewingMail(Email *); + void download (Email*); public slots: void close(); void next(); void previous(); void deleteItem(); void shiftText(); void viewAttachments(); void reply(); + void replyAll(); void forward(); + void download(); private: void init(); void updateButtons(); private: @@ -79,11 +83,13 @@ private: QMimeSourceFactory *mime; QAction *plainTextButton; QAction *nextButton; QTextView *emailView; QAction *attachmentButton; QAction *previousButton; - QAction *replyButton; + QToolButton *replyButton; QAction *forwardButton; + QAction *replyAllButton; + QAction *downloadButton; }; #endif // READMAIL_H diff --git a/noncore/net/mailit/writemail.cpp b/noncore/net/mailit/writemail.cpp index dcf0c6e..c75494e 100644 --- a/noncore/net/mailit/writemail.cpp +++ b/noncore/net/mailit/writemail.cpp @@ -19,14 +19,13 @@ **********************************************************************/ #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 ) +WriteMail::WriteMail( QWidget* parent, const char* name, WFlags fl ):QMainWindow( parent, name, fl ) { showingAddressList = FALSE; init(); addAtt = new AddAtt(0, "Add Attachments"); } @@ -256,34 +255,40 @@ void WriteMail::reply(Email replyMail, bool replyAll) mail = replyMail; mail.files.clear(); toInput->setText(mail.fromMail); if (replyAll) - { + { for (QStringList::Iterator it = mail.carbonCopies.begin();it != mail.carbonCopies.end(); ++it) { ccRecipients.append(*it); ccRecipients.append(";"); } ccRecipients.truncate(ccRecipients.length()-1); //no ; at the end ccInput->setText(ccRecipients); } - - addRecipients(replyAll); + else ccInput->clear(); subjectInput->setText(tr("Re: ") + mail.subject); + QString citation=mail.fromMail; + citation.append(tr(" wrote on ")); + citation.append(mail.date); + citation.append(":\n"); + + + //mail.body.insert(0,tr("On")); pos = 0; mail.body.insert(pos, ">"); while (pos != -1) { pos = mail.body.find('\n', pos); if (pos != -1) mail.body.insert(++pos, ">>"); } - + mail.body.insert(0,citation); emailInput->setText(mail.body); } void WriteMail::forward(Email forwMail) { int pos=0; @@ -305,29 +310,36 @@ void WriteMail::forward(Email forwMail) bool WriteMail::getRecipients(bool ccField) { QString str, temp; int pos = 0; - mail.recipients.clear(); - - ccField ? temp = ccInput->text() : temp=toInput->text() ; + if (ccField) + { + mail.carbonCopies.clear(); + temp = ccInput->text(); + } + else + { + mail.recipients.clear(); + temp=toInput->text() ; + } while ( (pos = temp.find(';')) != -1) { str = temp.left(pos).stripWhiteSpace(); temp = temp.right(temp.length() - (pos + 1)); if ( str.find('@') == -1) return false; ccField ? mail.carbonCopies.append(str) : mail.recipients.append(str); - addressList->addContact(str, ""); + //addressList->addContact(str, ""); } temp = temp.stripWhiteSpace(); if ( temp.find('@') == -1) return false; ccField ? mail.carbonCopies.append(temp) : mail.recipients.append(temp); - addressList->addContact(temp, ""); + //addressList->addContact(temp, ""); return TRUE; } void WriteMail::addRecipients() { @@ -380,10 +392,11 @@ void WriteMail::setRecipient(const QString &recipient) toInput->setText(recipient); } void WriteMail::newMail() { toInput->clear(); + ccInput->clear(); subjectInput->clear(); emailInput->clear(); setAddressList(addressList); } diff --git a/noncore/unsupported/mailit/emailclient.cpp b/noncore/unsupported/mailit/emailclient.cpp index dff1888..2cedc51 100644 --- a/noncore/unsupported/mailit/emailclient.cpp +++ b/noncore/unsupported/mailit/emailclient.cpp @@ -16,19 +16,21 @@ ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <qapplication.h> #include <qmessagebox.h> +#include <qvbox.h> #include <qfile.h> #include <qcheckbox.h> #include <qmenubar.h> #include <qaction.h> #include <qwhatsthis.h> #include <qpe/resource.h> #include "emailclient.h" +#include "writemail.h" QCollection::Item AccountList::newItem(QCollection::Item d) { return dupl( (MailAccount *) d); } @@ -37,39 +39,40 @@ MailAccount* AccountList::dupl(MailAccount *in) ac = new MailAccount(*in); return ac; } EmailClient::EmailClient( QWidget* parent, const char* name, WFlags fl ) : QMainWindow( parent, name, fl ) -{ +{ emailHandler = new EmailHandler(); addressList = new AddressList(); sending = FALSE; receiving = FALSE; previewingMail = FALSE; mailIdCount = 1; accountIdCount = 1; allAccounts = FALSE; init(); + + connect(emailHandler, SIGNAL(mailSent()), this, SLOT(mailSent()) ); connect(emailHandler, SIGNAL(smtpError(int)), this, SLOT(smtpError(int)) ); connect(emailHandler, SIGNAL(popError(int)), this, SLOT(popError(int)) ); connect(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"); @@ -81,12 +84,17 @@ EmailClient::EmailClient( QWidget* parent, const char* name, WFlags fl ) lineShift = "\n"; readMail(); lineShift = "\r\n"; mailboxView->setCurrentTab(0); //ensure that inbox has focus + + /*channel = new QCopChannel( "QPE/Application/mailit", this ); + connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), + this, SLOT(receive(const QCString&, const QByteArray&)) );*/ + } EmailClient::~EmailClient() { //needs to be moved from destructor to closewindow event @@ -101,35 +109,14 @@ EmailClient::~EmailClient() 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); - + initStatusBar(this); + setToolBarsMovable(FALSE); bar = new QToolBar(this); QWhatsThis::add(bar,tr("Main operation toolbar")); bar->setHorizontalStretchable( TRUE ); @@ -191,14 +178,17 @@ void EmailClient::init() 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.")); + QWhatsThis::add(inboxView,QWidget::tr("This is the inbox view.\n" + "It keeps the fetched mail which can be \n" + "viewed by double clicking the entry.\n" + "blue attachment icon shows whether this \n" + "mailhas attachments.\n")); grid_2->addWidget( inboxView, 2, 0 ); mailboxView->addTab( widget, "mailit/inbox", tr( "Inbox" ) ); QWidget* widget_2 = new QWidget( mailboxView, "widget_2" ); grid_3 = new QGridLayout( widget_2 ); @@ -207,20 +197,49 @@ void EmailClient::init() 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.")); + QWhatsThis::add(outboxView,QWidget::tr("This is the outbox view.\n" + "It keeps the queued mails to send which can be \n" + "reviewed by double clicking the entry.")); grid_3->addWidget( outboxView, 0, 0 ); mailboxView->addTab( widget_2,"mailit/outbox", tr( "Outbox" ) ); setCentralWidget(mailboxView); } +void EmailClient::initStatusBar(QWidget* parent) +{ + statusBar = new QStatusBar(parent); + statusBar->setSizeGripEnabled(FALSE); + + status1Label = new QLabel( tr("Idle"), statusBar); + status2Label = new QLabel("", statusBar); + connect(emailHandler, SIGNAL(updatePopStatus(const QString &)), + status2Label, SLOT(setText(const QString &)) ); + connect(emailHandler, SIGNAL(updateSmtpStatus(const QString &)), + status2Label, SLOT(setText(const QString &)) ); + + progressBar = new QProgressBar(statusBar); + + connect(emailHandler, SIGNAL(mailboxSize(int)), + this, SLOT(setTotalSize(int)) ); + connect(emailHandler, SIGNAL(currentMailSize(int)), + this, SLOT(setMailSize(int)) ); + connect(emailHandler, SIGNAL(downloadedSize(int)), + this, SLOT(setDownloadedSize(int)) ); + + statusBar->addWidget(status1Label); + statusBar->addWidget(progressBar); + statusBar->addWidget(status2Label); + +} + void EmailClient::compose() { emit composeRequested(); } void EmailClient::cancel() @@ -316,51 +335,53 @@ void EmailClient::getNewMail() { 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(); + getNewMail(); } void EmailClient::mailArrived(const Email &mail, bool fromDisk) { Enclosure *ePtr; Email newMail; int thisMailId; emailHandler->parse(mail.rawMail, lineShift, &newMail); mailconf->setGroup(newMail.id); - + if (fromDisk) { + newMail.downloaded = mailconf->readBoolEntry("downloaded"); newMail.size = mailconf->readNumEntry("size"); newMail.serverId = mailconf->readNumEntry("serverid"); newMail.fromAccountId = mailconf->readNumEntry("fromaccountid"); } else { //mail arrived from server + newMail.serverId = mail.serverId; newMail.size = mail.size; newMail.downloaded = mail.downloaded; newMail.fromAccountId = emailHandler->getAccount()->id; mailconf->writeEntry("fromaccountid", newMail.fromAccountId); @@ -915,13 +936,13 @@ void EmailClient::inboxItemPressed() void EmailClient::inboxItemReleased() { // killTimer(timerID); } -void EmailClient::timerEvent(QTimerEvent *e) +/*void EmailClient::timerEvent(QTimerEvent *e) { /*killTimer(timerID); QPopupMenu *action = new QPopupMenu(this); @@ -932,14 +953,14 @@ void EmailClient::timerEvent(QTimerEvent *e) action->insertItem( tr( "Forward" ), this,SLOT(forward())); action->insertItem( tr( "Remove Mail" ), this,SLOT(remove())); action->exec(QCursor::pos()); if (action) delete action; - */ -} + +}*/ Email* EmailClient::getCurrentMail() { EmailListItem *eli=(EmailListItem* ) (inboxView->selectedItem()); if (eli!=NULL) return eli->getMail(); @@ -950,19 +971,62 @@ Email* EmailClient::getCurrentMail() void EmailClient::download(Email* mail) { MailAccount* acc=0; tempMailDownloadList.clear(); tempMailDownloadList.sizeInsert(mail->serverId, mail->size); - if (accountList.count()>0) - qDebug("Accounts present"); acc=accountList.at(mail->fromAccountId-1); if (acc) { emailHandler->setAccount(*acc); emailHandler->getMailByList(&tempMailDownloadList); } else QMessageBox::warning(qApp->activeWindow(), tr("No account associated"), tr("There is no active account \nassociated to this mail\n it can not be downloaded"), "Abort\n"); } + +void EmailClient::receive(const QCString& msg, const QByteArray& data) +{ + /*if (msg=="getMail()") + { + /*QDialog qd(qApp->activeWindow(),"Getting mail",true); + QVBoxLayout *vbProg = new QVBoxLayout( &qd ); + + initStatusBar(&qd); + + if (statusBar==0) + { + qDebug("No Bar ..."); + //statusBar=new ProgressBar(&qd); + } + statusBar->show(); + vbProg->addWidget(statusBar); + qd.showMaximized(); + qd.show(); + emit getAllNewMail(); + //qd.exec(); + } + else if (msg=="compose()") + { + QDialog qd(qApp->activeWindow(),"Getting mail",true); + + WriteMail wm(&qd,"write new mail"); + QVBoxLayout vbProg( &qd ); + + wm.showMaximized(); + vbProg.addWidget(&wm); + + qd.showMaximized(); + + emit composeRequested(); + qd.exec(); + + QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n"); + } + + else if (msg=="dialog()") + { + QMessageBox::warning(qApp->activeWindow(),tr("Info"), tr("Info"), "OK\n"); + }*/ +} diff --git a/noncore/unsupported/mailit/emailclient.h b/noncore/unsupported/mailit/emailclient.h index 549683b..994fec5 100644 --- a/noncore/unsupported/mailit/emailclient.h +++ b/noncore/unsupported/mailit/emailclient.h @@ -38,12 +38,13 @@ #include <qstringlist.h> #include <qprogressbar.h> #include <qstatusbar.h> #include <qdir.h> #include <stdlib.h> #include <opie/otabwidget.h> +#include <qpe/qcopenvelope_qws.h> #include <qtimer.h> #include "emailhandler.h" #include "emaillistitem.h" #include "textparser.h" #include "editaccount.h" @@ -67,16 +68,15 @@ class EmailClient : public QMainWindow Q_OBJECT public: EmailClient( QWidget* parent, const char* name, WFlags fl = 0 ); ~EmailClient(); AddressList* getAdrListRef(); - void download(Email*); protected: - void timerEvent(QTimerEvent*); + //void timerEvent(QTimerEvent*); signals: void composeRequested(); void viewEmail(QListView *, Email *); void mailUpdated(Email *); void newCaption(const QString &); @@ -113,19 +113,24 @@ public slots: void deleteAccount(int); void deleteMail(EmailListItem *mailItem, bool &inbox); void setTotalSize(int); void setMailSize(int); void setDownloadedSize(int); void moveMailFront(Email *mailPtr); + void download(Email*); /* void reply(); void replyAll(); void forward(); void remove();*/ +private slots: + void receive(const QCString&, const QByteArray&); + private: void init(); + void initStatusBar(QWidget*); void readMail(); QString getPath(bool enclosurePath); void readSettings(); void saveSettings(); Email* getCurrentMail(); int timerID; @@ -143,12 +148,14 @@ private: MailList tempMailDownloadList; bool sending, receiving, previewingMail, allAccounts; QString lineShift; MailAccount account, *currentAccount; + QCopChannel* channel; + QToolBar *bar; QProgressBar *progressBar; QStatusBar *statusBar; QLabel *status1Label, *status2Label; QToolButton *getMailButton; QAction *sendMailButton; diff --git a/noncore/unsupported/mailit/emailhandler.cpp b/noncore/unsupported/mailit/emailhandler.cpp index fbbada7..c7b27a0 100644 --- a/noncore/unsupported/mailit/emailhandler.cpp +++ b/noncore/unsupported/mailit/emailhandler.cpp @@ -36,12 +36,14 @@ Enclosure* EnclosureList::dupl(Enclosure *in) ac = new Enclosure(*in); return ac; } EmailHandler::EmailHandler() { + qDebug("EMailHandler::EmailHandler"); + smtpClient = new SmtpClient(); popClient = new PopClient(); connect(smtpClient, SIGNAL(errorOccurred(int)), this, SIGNAL(smtpError(int)) ); connect(smtpClient, SIGNAL(mailSent()), this, SIGNAL(mailSent()) ); @@ -112,12 +114,13 @@ void EmailHandler::getMailHeaders() { popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd); mailAccount.synchronize ? popClient->setSynchronize(mailAccount.lastServerMailCount): popClient->removeSynchronize(); headers = TRUE; popClient->headersOnly(headers, mailAccount.syncLimit); //less than requested syncLimit, download all + qDebug("Initiating connection"); popClient->newConnection(mailAccount.popServer, 110); } void EmailHandler::getMailByList(MailList *mailList) { if (mailList->count() == 0) { //should not occur though @@ -623,6 +626,7 @@ void EmailHandler::encode64base(char *src, QString *dest, int len) void EmailHandler::cancel() { popClient->errorHandling(ErrCancel); smtpClient->errorHandling(ErrCancel); } + diff --git a/noncore/unsupported/mailit/emailhandler.h b/noncore/unsupported/mailit/emailhandler.h index b645868..5b59f65 100644 --- a/noncore/unsupported/mailit/emailhandler.h +++ b/noncore/unsupported/mailit/emailhandler.h @@ -25,12 +25,13 @@ #include <qdatetime.h> #include <qlist.h> #include <qstringlist.h> #include <qfile.h> #include <qstringlist.h> #include <qcollection.h> +#include <qpe/qcopenvelope_qws.h> #include "smtpclient.h" #include "popclient.h" #include "textparser.h" #include "maillist.h" diff --git a/noncore/unsupported/mailit/mailitwindow.cpp b/noncore/unsupported/mailit/mailitwindow.cpp index ffee67e..a111241 100644 --- a/noncore/unsupported/mailit/mailitwindow.cpp +++ b/noncore/unsupported/mailit/mailitwindow.cpp @@ -58,12 +58,15 @@ MailItWindow::MailItWindow(QWidget *parent, const char *name, WFlags fl) SLOT(deleteMail(EmailListItem *, bool &)) ); connect(readMail, SIGNAL(viewingMail(Email *)), emailClient, SLOT(moveMailFront(Email *)) ); connect(emailClient, SIGNAL(newCaption(const QString &)), this, SLOT(updateCaption(const QString &)) ); + + connect(readMail, SIGNAL(download(Email *)), emailClient, SLOT(download(Email*)) ); + viewingMail = FALSE; } MailItWindow::~MailItWindow() { } diff --git a/noncore/unsupported/mailit/popclient.cpp b/noncore/unsupported/mailit/popclient.cpp index 6105d09..fedc4e2 100644 --- a/noncore/unsupported/mailit/popclient.cpp +++ b/noncore/unsupported/mailit/popclient.cpp @@ -26,12 +26,13 @@ extern "C" { } #include <qcstring.h> PopClient::PopClient() { + socket = new QSocket(this, "popClient"); connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int))); connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished())); connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData())); stream = new QTextStream(socket); @@ -114,12 +115,13 @@ void PopClient::incomingData() QString md5Source; int start, end; // char *md5Digest; char md5Digest[16]; // if ( !socket->canReadLine() ) // return; + response = socket->readLine(); switch(status) { //logging in case Init: { @@ -148,25 +150,26 @@ void PopClient::incomingData() { timeStamp = ""; *stream << "USER " << popUserName << "\r\n"; status = Pass; } - break; + break; } case Pass: { *stream << "PASS " << popPassword << "\r\n"; - status = Stat; + status = Stat; + break; } //ask for number of messages case Stat: { if (response[0] == '+') { *stream << "STAT" << "\r\n"; - status = Mcnt; + status = Mcnt; } else errorHandling(ErrLoginFailed); break; } //get count of messages, eg "+OK 4 900.." -> int 4 case Mcnt: { if (response[0] == '+') { @@ -176,14 +179,14 @@ void PopClient::incomingData() newMessages = temp.toInt(); messageCount = 1; status = List; if (synchronize) { //messages deleted from server, reload all - if (newMessages < lastSync) - lastSync = 0; + if (newMessages < lastSync) + lastSync = 0; messageCount = 1; } if (selected) { int *ptr = mailList->first(); if (ptr != 0) { @@ -270,13 +273,12 @@ void PopClient::incomingData() } emit downloadedSize(message.length()); int x = message.find("\r\n.\r\n",-5); if (x == -1) { break; } else { //message reach entire size - if ( (selected)||(mailSize <= headerLimit)) //mail size limit is not used if late download is active { emit newMessage(message, messageCount-1, mailSize, TRUE); } else { //incomplete mail downloaded emit newMessage(message, messageCount-1, mailSize, FALSE); } diff --git a/noncore/unsupported/mailit/readmail.cpp b/noncore/unsupported/mailit/readmail.cpp index 4eae7f6..1682675 100644 --- a/noncore/unsupported/mailit/readmail.cpp +++ b/noncore/unsupported/mailit/readmail.cpp @@ -16,14 +16,16 @@ ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "readmail.h" #include <qimage.h> +#include <qwhatsthis.h> #include <qmime.h> #include <qaction.h> +#include <qpopupmenu.h> #include <qpe/resource.h> ReadMail::ReadMail( QWidget* parent, const char* name, WFlags fl ) : QMainWindow(parent, name, fl) { plainTxt = FALSE; @@ -39,12 +41,14 @@ ReadMail::~ReadMail() } void ReadMail::init() { setToolBarsMovable(FALSE); + QPopupMenu* mailaction=new QPopupMenu(this); + bar = new QToolBar(this); bar->setHorizontalStretchable( TRUE ); menu = new QMenuBar( bar ); viewMenu = new QPopupMenu(menu); @@ -52,23 +56,17 @@ void ReadMail::init() 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")); + downloadButton = new QAction( tr( "Download" ), Resource::loadPixmap( "mailit/download" ),QString::null, 0, this, 0 ); + connect(downloadButton, SIGNAL(activated()), this, SLOT(download()) ); + downloadButton->setWhatsThis(tr("Click here to download 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")); @@ -91,12 +89,29 @@ void ReadMail::init() 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" )); + //reply dependant on viewing inbox + replyButton = new QToolButton(Resource::loadPixmap("mailit/reply"),tr("reply"),tr("reply to mail"), this,SLOT(reply()),bar); + QWhatsThis::add(replyButton,tr("Click here to reply to the selected mail\nPress and hold for more options.")); + replyButton->setPopup(mailaction); + + replyAllButton = new QAction( tr( "Reply all" ), Resource::loadPixmap( "mailit/reply" ),QString::null, 0, this, 0 ); + connect(replyAllButton, SIGNAL(activated()), this, SLOT(replyAll())); + replyAllButton->setWhatsThis(tr("Click here to reply to the selected mail to CC: addresses also")); + replyAllButton->addTo(mailaction); + + 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")); + forwardButton->addTo(mailaction); + + 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")); @@ -116,25 +131,32 @@ void ReadMail::updateView() QString mailStringSize; QString text, temp; mail->read = TRUE; //mark as read inbox = mail->received; - replyButton->removeFrom(mailMenu); - replyButton->removeFrom(bar); + replyButton->setEnabled(false); + /*replyButton->removeFrom(bar); forwardButton->removeFrom(mailMenu); - forwardButton->removeFrom(bar); + forwardButton->removeFrom(bar);*/ + downloadButton->removeFrom(bar); + + //downloadButton->setEnabled(!mail->downloaded); + if (inbox == TRUE) { - replyButton->addTo(bar); - replyButton->addTo(mailMenu); + replyButton->setEnabled(true); + /*replyButton->addTo(mailMenu); forwardButton->addTo(bar); - forwardButton->addTo(mailMenu); + forwardButton->addTo(mailMenu);*/ if (!mail->downloaded) { + + downloadButton->addTo(bar); + //report currently viewed mail so that it will be //placed first in the queue of new mails to download emit viewingMail(mail); double mailSize = (double) mail->size; if (mailSize < 1024) { @@ -354,14 +376,24 @@ void ReadMail::viewAttachments() viewAtt->update(mail, inbox); viewAtt->showMaximized(); } void ReadMail::reply() { + emit replyRequested(*mail, (bool&)FALSE); +} + +void ReadMail::replyAll() +{ emit replyRequested(*mail, (bool&)TRUE); } void ReadMail::forward() { emit forwardRequested(*mail); } +void ReadMail::download() +{ + emit download(mail); +} + diff --git a/noncore/unsupported/mailit/readmail.h b/noncore/unsupported/mailit/readmail.h index df32c34..6700595 100644 --- a/noncore/unsupported/mailit/readmail.h +++ b/noncore/unsupported/mailit/readmail.h @@ -25,12 +25,13 @@ #include <qmenubar.h> #include <qpopupmenu.h> #include <qlabel.h> #include <qlistview.h> #include <qlayout.h> #include <qtextview.h> +#include <qtoolbutton.h> #include "emailhandler.h" #include "emaillistitem.h" #include "viewatt.h" class ReadMail : public QMainWindow @@ -47,22 +48,25 @@ public: signals: void cancelView(); void replyRequested(Email &, bool &); void forwardRequested(Email&); void removeItem(EmailListItem *, bool &); void viewingMail(Email *); + void download (Email*); public slots: void close(); void next(); void previous(); void deleteItem(); void shiftText(); void viewAttachments(); void reply(); + void replyAll(); void forward(); + void download(); private: void init(); void updateButtons(); private: @@ -79,11 +83,13 @@ private: QMimeSourceFactory *mime; QAction *plainTextButton; QAction *nextButton; QTextView *emailView; QAction *attachmentButton; QAction *previousButton; - QAction *replyButton; + QToolButton *replyButton; QAction *forwardButton; + QAction *replyAllButton; + QAction *downloadButton; }; #endif // READMAIL_H diff --git a/noncore/unsupported/mailit/writemail.cpp b/noncore/unsupported/mailit/writemail.cpp index dcf0c6e..c75494e 100644 --- a/noncore/unsupported/mailit/writemail.cpp +++ b/noncore/unsupported/mailit/writemail.cpp @@ -19,14 +19,13 @@ **********************************************************************/ #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 ) +WriteMail::WriteMail( QWidget* parent, const char* name, WFlags fl ):QMainWindow( parent, name, fl ) { showingAddressList = FALSE; init(); addAtt = new AddAtt(0, "Add Attachments"); } @@ -256,34 +255,40 @@ void WriteMail::reply(Email replyMail, bool replyAll) mail = replyMail; mail.files.clear(); toInput->setText(mail.fromMail); if (replyAll) - { + { for (QStringList::Iterator it = mail.carbonCopies.begin();it != mail.carbonCopies.end(); ++it) { ccRecipients.append(*it); ccRecipients.append(";"); } ccRecipients.truncate(ccRecipients.length()-1); //no ; at the end ccInput->setText(ccRecipients); } - - addRecipients(replyAll); + else ccInput->clear(); subjectInput->setText(tr("Re: ") + mail.subject); + QString citation=mail.fromMail; + citation.append(tr(" wrote on ")); + citation.append(mail.date); + citation.append(":\n"); + + + //mail.body.insert(0,tr("On")); pos = 0; mail.body.insert(pos, ">"); while (pos != -1) { pos = mail.body.find('\n', pos); if (pos != -1) mail.body.insert(++pos, ">>"); } - + mail.body.insert(0,citation); emailInput->setText(mail.body); } void WriteMail::forward(Email forwMail) { int pos=0; @@ -305,29 +310,36 @@ void WriteMail::forward(Email forwMail) bool WriteMail::getRecipients(bool ccField) { QString str, temp; int pos = 0; - mail.recipients.clear(); - - ccField ? temp = ccInput->text() : temp=toInput->text() ; + if (ccField) + { + mail.carbonCopies.clear(); + temp = ccInput->text(); + } + else + { + mail.recipients.clear(); + temp=toInput->text() ; + } while ( (pos = temp.find(';')) != -1) { str = temp.left(pos).stripWhiteSpace(); temp = temp.right(temp.length() - (pos + 1)); if ( str.find('@') == -1) return false; ccField ? mail.carbonCopies.append(str) : mail.recipients.append(str); - addressList->addContact(str, ""); + //addressList->addContact(str, ""); } temp = temp.stripWhiteSpace(); if ( temp.find('@') == -1) return false; ccField ? mail.carbonCopies.append(temp) : mail.recipients.append(temp); - addressList->addContact(temp, ""); + //addressList->addContact(temp, ""); return TRUE; } void WriteMail::addRecipients() { @@ -380,10 +392,11 @@ void WriteMail::setRecipient(const QString &recipient) toInput->setText(recipient); } void WriteMail::newMail() { toInput->clear(); + ccInput->clear(); subjectInput->clear(); emailInput->clear(); setAddressList(addressList); } |