summaryrefslogtreecommitdiff
authoralwin <alwin>2004-10-24 00:50:03 (UTC)
committer alwin <alwin>2004-10-24 00:50:03 (UTC)
commite16312f45d5df483d21b02d03d5851bc34674f39 (patch) (side-by-side diff)
tree63920b8a2018910d1e25f08d3278b3eb59e889fb
parent9c5964f8d2be467aa53d3d8255b499890556e320 (diff)
downloadopie-e16312f45d5df483d21b02d03d5851bc34674f39.zip
opie-e16312f45d5df483d21b02d03d5851bc34674f39.tar.gz
opie-e16312f45d5df483d21b02d03d5851bc34674f39.tar.bz2
a small helperclass ValueExplode inserted
it splits a string like a=4&b=2&c=1 into it key - value - pairs the runtime-example in constructor of OpieMail should be removed ;)
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/net/mail/opiemail.cpp85
1 files changed, 85 insertions, 0 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,56 +1,141 @@
#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;