summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/opiemail.cpp87
1 files changed, 86 insertions, 1 deletions
diff --git a/noncore/net/mail/opiemail.cpp b/noncore/net/mail/opiemail.cpp
index b153292..5654476 100644
--- a/noncore/net/mail/opiemail.cpp
+++ b/noncore/net/mail/opiemail.cpp
@@ -1,124 +1,209 @@
#include "settingsdialog.h"
#include "opiemail.h"
#include "editaccounts.h"
#include "composemail.h"
#include "mailistviewitem.h"
#include "viewmail.h"
#include "selectstore.h"
#include "selectsmtp.h"
#include <libmailwrapper/smtpwrapper.h>
#include <libmailwrapper/mailtypes.h>
#include <libmailwrapper/abstractmail.h>
/* OPIE */
#include <opie2/odebug.h>
#include <qpe/resource.h>
#include <qpe/qpeapplication.h>
/* QT */
+#include <qmap.h>
+#include <qvaluelist.h>
/* UNIX */
#include <signal.h>
using namespace Opie::Core;
+typedef QMapNode<QString,QString> tkeyvalues;
+typedef QValueList<tkeyvalues> tvaluelist;
+
+class ValueExplode
+{
+protected:
+ //! what was parsed last
+ tvaluelist m_LastParsed;
+ //! the delemiter to use
+ QString mDelemiter;
+ //! the inner delemiter
+ QString m2Delemiter;
+ //! the real split routine
+ void splitit();
+ //! the content
+ QString m_Command;
+ //! constructor
+ ValueExplode(){}
+public:
+ //! constructor
+ /*!
+ * \param aCommand the string to be splitted
+ * \param aDelemiter which sign will be the delemiter character
+ * \param a2Delemiter which sign will delemiter the key-value-pairs between other delemiters
+ */
+ ValueExplode(const QString&aCommand,const char aDelemiter = '&',const char a2Delemiter='=');
+ //! destructor
+ virtual ~ValueExplode();
+ //! assigen operator
+ /*!
+ * \return a list of substrings
+ */
+ operator const tvaluelist& (){return m_LastParsed;}
+};
+
+ValueExplode::~ValueExplode()
+{
+}
+
+ValueExplode::ValueExplode(const QString&aCommand,const char aDelemiter,const char a2Delemiter)
+ :m_LastParsed(),m_Command(aCommand)
+{
+ mDelemiter = aDelemiter;
+ m2Delemiter = a2Delemiter;
+ splitit();
+}
+
+void ValueExplode::splitit()
+{
+ QString iLine;
+ m_LastParsed.clear();
+ if (mDelemiter.isEmpty()||m2Delemiter.isEmpty()) {
+ m_LastParsed.append(tkeyvalues(m_Command,""));
+ return;
+ }
+ int pos,pos2,startpos;
+ startpos = 0;
+ iLine = m_Command;
+ while ( (pos = iLine.find(mDelemiter,startpos))!=-1) {
+ pos2 = iLine.find(m2Delemiter,startpos);
+ if (pos2==-1||pos2>pos) {
+ m_LastParsed.append(tkeyvalues(iLine.mid(startpos,pos-startpos),""));
+ } else {
+ m_LastParsed.append(tkeyvalues(iLine.mid(startpos,pos2-startpos),iLine.mid(pos2+1,pos-pos2-1)));
+ }
+ startpos = pos+1;
+ }
+ if (startpos<iLine.length()) {
+ pos2 = iLine.find(m2Delemiter,startpos);
+ if (pos2==-1) {
+ m_LastParsed.append(tkeyvalues(iLine.mid(startpos),""));
+ } else {
+ m_LastParsed.append(tkeyvalues(iLine.mid(startpos,pos2-startpos),iLine.mid(pos2+1)));
+ }
+ }
+}
+
OpieMail::OpieMail( QWidget *parent, const char *name, WFlags )
: MainWindow( parent, name, WStyle_ContextHelp )
{
setup_signalblocking();
settings = new Settings();
folderView->populate( settings->getAccounts() );
+#if 1
+ tvaluelist s = ValueExplode("a=1&b=holladiewaldfee&c=3&d=&e=3450");
+ for (int i = 0; i < s.count();++i) {
+ odebug<<"Key: " << s[i].key << " Value: " << s[i].data << oendl;
+ }
+#endif
}
OpieMail::~OpieMail()
{
if (settings) delete settings;
}
void OpieMail::setup_signalblocking()
{
/* for networking we must block SIGPIPE and Co. */
struct sigaction blocking_action,temp_action;
blocking_action.sa_handler = SIG_IGN;
sigemptyset(&(blocking_action.sa_mask));
blocking_action.sa_flags = 0;
sigaction(SIGPIPE,&blocking_action,&temp_action);
}
void OpieMail::appMessage(const QCString &msg, const QByteArray &data)
{
// copied from old mail2
if (msg == "writeMail(QString,QString)")
{
QDataStream stream(data,IO_ReadOnly);
QString name, email;
stream >> name >> email;
// removing the whitespaces at beginning and end is needed!
slotwriteMail(name.stripWhiteSpace(),email.stripWhiteSpace());
}
else if (msg == "newMail()")
{
slotComposeMail();
}
}
/**
* Konqueror calls us with the mailto:name@address
*/
void OpieMail::setDocument(const QString& mail)
{
/*
* It looks like a mailto address, lets try it
*/
if( mail.startsWith(QString::fromLatin1("mailto:")) )
- slotwriteMail(QString::null, mail.mid(7));
+ slotwriteMail(QString::null, mail.mid(7));
}
void OpieMail::slotwriteMail(const QString&name,const QString&email)
{
ComposeMail compose( settings, this, 0, true , WStyle_ContextHelp );
if (!email.isEmpty())
{
if (!name.isEmpty())
{
compose.setTo("\"" + name + "\"" + " " + "<"+ email + ">");
}
else
{
compose.setTo(email);
}
}
compose.slotAdjustColumns();
QPEApplication::execDialog( &compose );
}
void OpieMail::slotComposeMail()
{
odebug << "Compose Mail" << oendl;
slotwriteMail(0l,0l);
}
void OpieMail::slotSendQueued()
{
odebug << "Send Queued" << oendl;
SMTPaccount *smtp = 0;
QList<Account> list = settings->getAccounts();
QList<SMTPaccount> smtpList;
smtpList.setAutoDelete(false);
Account *it;
for ( it = list.first(); it; it = list.next() )
{
if ( it->getType() == MAILLIB::A_SMTP )
{
smtp = static_cast<SMTPaccount *>(it);
smtpList.append(smtp);
}
}
if (smtpList.count()==0)
{
QMessageBox::information(0,tr("Info"),tr("Define a smtp account first"));
return;
}