Early out parsing if we're only processing incoming OR outgoing.
[qwerkisync] / EventParsers / VMGEntities / VMessage.cpp
index 59097d7..443070e 100644 (file)
 
 #include "EventTypes/SMS.h"
 #include "Factory.h"
+#include "Settings.h"
+#include "VBody.h"
 #include "VCard.h"
 #include "VEnvelope.h"
-#include "VBody.h"
 
 #include <QDateTime>
 #include <QTextStream>
@@ -31,8 +32,8 @@
 
 using namespace EventParsers::VMGEntities;
 
-VMessage::VMessage(const SMSEntity* parent) :
-       SMSEntity(parent), m_Version(1.1)
+VMessage::VMessage(const Settings &settings, const SMSEntity *parent) :
+       SMSEntity(settings, parent), m_Version(1.1)
 {
 }
 
@@ -40,8 +41,8 @@ VMessage::VMessage(const SMSEntity* parent) :
 //{
 //}
 
-VMessage::VMessage(const SMSEntity* parent, float version) :
-       SMSEntity(parent), m_Version(version)
+VMessage::VMessage(const Settings &settings, const SMSEntity *parent, float version) :
+       SMSEntity(settings, parent), m_Version(version)
 {
 }
 
@@ -49,7 +50,7 @@ VMessage::~VMessage()
 {
 }
 
-bool VMessage::Read(const QString & initialLine, QTextStream & stream, EventTypes::SMS & event)
+bool VMessage::Read(const QString &initialLine, QTextStream &stream, EventTypes::SMS &event)
 {
        if(getParent() != NULL)
        {
@@ -88,6 +89,14 @@ bool VMessage::Read(const QString & initialLine, QTextStream & stream, EventType
                {
                        QString box = lineData.mid(lineData.indexOf(":") + 1);
                        bool isOutgoing(box == "SENT");
+
+                       // Early out once we know we're not processing this type of message
+                       if((!isOutgoing && !CurrentSettings().ShouldProcess(Settings::INCOMING, EventTypes::EVENT_TYPE_SMS))
+                               || isOutgoing && !CurrentSettings().ShouldProcess(Settings::OUTGOING, EventTypes::EVENT_TYPE_SMS))
+                       {
+                               return false;
+                       }
+
                        if (isOutgoing == false && box != "INBOX")
                        {
                                qDebug() << "Unexpected box: " << box;
@@ -105,7 +114,7 @@ bool VMessage::Read(const QString & initialLine, QTextStream & stream, EventType
                }
                else if(lineData.startsWith("BEGIN:"))
                {
-                       iReader* reader = Factory::Instantiate(lineData, this);
+                       iReader* reader = Factory::Instantiate(CurrentSettings(), lineData, this);
                        bool valid(NULL != reader && reader->Read(lineData, stream, event));
                        delete reader;
 
@@ -141,24 +150,24 @@ void VMessage::Write(QTextStream &stream, const EventTypes::SMS &event)
        stream << "X-IRMC-BOX:" << ( event.Destination() == EventTypes::SMS::SENT ? "SENT" : "INBOX") << "\n";
        stream << "X-NOK-DT:" << event.Timestamp().toUTC().toString("yyyyMMddThhmmssZ") << "\n";
 
-       VEnvelope msgEnvelope(this);
+       VEnvelope msgEnvelope(CurrentSettings(), this);
 
        // Add in the empty vcard for outgoing messages
        if(event.Destination() == EventTypes::SMS::SENT)
        {
-               VCard(this, 2.1, VCard::VCARD_LOCAL).Write(stream, event);
+               VCard(CurrentSettings(), this, 2.1, VCard::VCARD_LOCAL).Write(stream, event);
 
-               msgEnvelope.getContentWriters().append(new VCard(&msgEnvelope, 2.1, VCard::VCARD_REMOTE));
+               msgEnvelope.getContentWriters().append(new VCard(CurrentSettings(), &msgEnvelope, 2.1, VCard::VCARD_REMOTE));
 
-               VEnvelope *bodyEnvelope = new VEnvelope(this);
-               bodyEnvelope->getContentWriters().append(new VBody(bodyEnvelope));
+               VEnvelope *bodyEnvelope = new VEnvelope(CurrentSettings(), this);
+               bodyEnvelope->getContentWriters().append(new VBody(CurrentSettings(), bodyEnvelope));
                msgEnvelope.getContentWriters().append(bodyEnvelope);
        }
        else
        {
-               VCard(this, 2.1, VCard::VCARD_REMOTE).Write(stream, event);
+               VCard(CurrentSettings(), this, 2.1, VCard::VCARD_REMOTE).Write(stream, event);
 
-               msgEnvelope.getContentWriters().append(new VBody(&msgEnvelope));
+               msgEnvelope.getContentWriters().append(new VBody(CurrentSettings(), &msgEnvelope));
        }
 
        msgEnvelope.Write(stream, event);