emailservices/nmutilities/src/nmuriparser.cpp
changeset 74 6c59112cfd31
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/nmutilities/src/nmuriparser.cpp	Thu Sep 30 11:43:07 2010 +0300
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: A utility class for parsing URI strings
+*
+*/
+#include "nmuriparser.h"
+#include "emailtrace.h"
+
+#include <QUrl>
+
+
+/*!
+    Keys for parsing data.
+*/
+static const QString NmUriParserEmailSendSubjectKey = "subject";
+static const QString NmUriParserEmailEmailSendToKey = "to";
+static const QString NmUriParserEmailSendCcKey = "cc";
+static const QString NmUriParserEmailSendBccKey = "bcc";
+static const QString NmUriParserEmailSendBodyTextKey = "body";
+
+/*!
+    Class constructor.
+*/
+NmUriParser::NmUriParser()
+{
+    NM_FUNCTION;
+}
+
+/*!
+    Class destructor.
+*/
+NmUriParser::~NmUriParser()
+{
+    NM_FUNCTION;
+}
+
+/*!
+    Extracts the data from the given QString into the class members.
+    \param data QString containing the data.
+    \return True if success, false otherwise.
+*/
+bool NmUriParser::extractData(const QString &data)
+{
+    NM_FUNCTION;
+    
+    bool success(false);
+    
+    QUrl uri(data);
+    
+    if (uri.isValid()) {
+        
+        mSubject = uri.queryItemValue(NmUriParserEmailSendSubjectKey);
+        QString to = uri.path();
+        QString cc = uri.queryItemValue(NmUriParserEmailSendCcKey);
+        QString bcc = uri.queryItemValue(NmUriParserEmailSendBccKey);
+        QString bodyText = uri.queryItemValue(NmUriParserEmailSendBodyTextKey);
+        if (bodyText.length()) {
+            mBodyText = bodyText;
+        }
+        
+        addAddressesToList(to, mToAddresses);
+        addAddressesToList(cc, mCcAddresses);
+        addAddressesToList(bcc, mBccAddresses);
+        
+        success = true;
+    }
+    
+    return success;
+}
+
+/*!
+    Appends the given addresses into the given list.
+    \param address The addresses to append.
+    \param list The list where the addresses are appended to.
+*/
+void NmUriParser::addAddressesToList(QString &addresses, QStringList &list)
+{
+    NM_FUNCTION;
+    
+    if (!addresses.isEmpty()) {
+
+        QStringList foundAddresses;
+                
+        // Process multiple addresses.
+        if (addresses.contains(",")) {
+            QString str;               
+            while (addresses.contains(",")) {
+                str = addresses.section(",", 0, 0); // Get the occurance.
+                addresses.remove(0, (addresses.indexOf(",")+1)); // Remove the occurance.
+                if (!str.isEmpty()) { // In case str would be empty on some error data. 
+                    foundAddresses.append(str);    
+                }
+            }
+        }
+        if (!addresses.isEmpty()) { // In case addresses would be empty on some error data. 
+            // Last one or single address.
+            foundAddresses.append(addresses);
+        }
+        // Append the found addresses into the given list.
+        list.append(foundAddresses);
+    }
+}
+    
+/*!
+    Resets the data.
+*/
+void NmUriParser::resetData()
+{
+    NM_FUNCTION;
+    
+    mSubject.clear();
+    mToAddresses.clear();
+    mCcAddresses.clear();
+    mBccAddresses.clear();
+    mBodyText.clear();
+}
+
+/*!
+    Getter for subject
+    \return QString subject of parsed uri
+*/
+QString NmUriParser::subject() const
+{
+    return mSubject;
+}
+/*!
+    Getter for to-addresses
+    \return QStringList list of parsed to-addresses
+*/
+QStringList NmUriParser::toAddresses() const
+{
+    return mToAddresses;
+}
+/*!
+    Getter for ccAddresses
+    \return QStringList list of parsed cc-addresses
+*/
+QStringList NmUriParser::ccAddresses() const
+{
+    return mCcAddresses;
+}
+/*!
+    Getter for bcc-Addresses
+    \return QStringList list of parsed bcc-addresses
+*/
+QStringList NmUriParser::bccAddresses() const
+{
+    return mBccAddresses;
+}
+/*!
+    Getter for bcc-Addresses
+    \return QString parsed body text
+*/
+QString NmUriParser::bodyText() const
+{
+    return mBodyText;
+}