From: Arun Ravindran <[email protected]>

---
 src/backend.cpp |   51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 src/backend.h   |    5 ++++-
 2 files changed, 55 insertions(+), 1 deletions(-)

diff --git a/src/backend.cpp b/src/backend.cpp
index 14b8703..1cdb922 100644
--- a/src/backend.cpp
+++ b/src/backend.cpp
@@ -248,6 +248,9 @@ void Backend::getPropertiesFinished(QDBusPendingCallWatcher 
*call)
         if (!mSmsManagerInterface->isValid()) {
             qCritical("unable to connect to " TELEPHONY_SMSMGR_INTERFACE);
         }
+        // Connect signal for incoming sms
+        connect(mSmsManagerInterface, SIGNAL(IncomingMessage(const QString, 
const QVariantMap)), this,
+                                                  SLOT(messageReceived(const 
QString , const QVariantMap)));
     }
     delete call;
 }
@@ -367,6 +370,54 @@ void Backend::messagesRemoved(const QMailMessageIdList 
&ids)
     emit smsRemoved(messageids);
 }
 
+void Backend:: messageReceived(const QString in0, const QVariantMap in1)
+{
+    QStringList keylist = in1.keys();
+    QVariantList valuelist = in1.values();
+    QString sender,time,localtime;
+
+    qDebug()<< "Received sms: " << in0;
+
+    for(int loop=0;loop < keylist.size();loop++) {
+        if(keylist.at(loop) == QString("Sender")) {
+            sender = valuelist.at(loop).toString();            
+        } else if(keylist.at(loop) == QString("SentTime")) {
+            time = valuelist.at(loop).toString();
+        } else if(keylist.at(loop) == QString("LocalSentTime")) {
+            localtime = valuelist.at(loop).toString();
+        }
+    } //end for
+
+    QMailMessage *msg = new QMailMessage();
+    msg->setMessageType(QMailMessage::Sms);
+    msg->setParentAccountId(mAccountId);
+    msg->setParentFolderId(QMailFolder::LocalStorageFolderId);
+    msg->setStatus(QMailMessage::Incoming, true);
+    msg->setStatus(QMailMessage::Outgoing, false);
+    msg->setStatus(QMailMessage::Read, false);
+    msg->setStatus(QMailMessage::Draft, false);
+    msg->setFrom(QMailAddress(sender));
+    msg->setBody(QMailMessageBody::fromData(in0, 
QMailMessageContentType("text/plain"), QMailMessageBody::NoEncoding));
+    msg->setDate(QMailTimeStamp(time)); //do we neeed to set the local time
+    if (!mMailStore->addMessage(msg)) {
+        qCritical("messageReceived: addMessage failed: %d", 
mMailStore->lastError());
+    }
+    //Display sms notification
+    displaySmsNotification(in0,sender);
+}
+
+void Backend::displaySmsNotification(const QString &text, const QString 
&sender)
+{
+    QString message;
+    message.append("NewMessage\n");
+    message.append("From: ");
+    message.append(sender);
+    message.append("\nText: ");
+    message.append(text);
+    MMessageBox dialog(message);
+    dialog.exec();
+}
+
 void Backend::messagesUpdated(const QMailMessageIdList &ids)
 {
     QList<SmsData> messages;
diff --git a/src/backend.h b/src/backend.h
index 68637bc..779303b 100644
--- a/src/backend.h
+++ b/src/backend.h
@@ -60,11 +60,14 @@ private slots:
         void messagesAdded(const QMailMessageIdList&);
         void messagesRemoved(const QMailMessageIdList&);
         void messagesUpdated(const QMailMessageIdList&);
-
+        //Process received incoming sms
+        void messageReceived(const QString in0, const QVariantMap in1);
 private:
         bool isMessageServerRunning();
         bool startMessageServer();
         void setupAccount();
+        //Incoming sms dialog
+        void displaySmsNotification(const QString&, const QString&);
 
         ManagerInterface *mManagerInterface;
         SmsManagerInterface *mSmsManagerInterface;
-- 
1.7.0.4

_______________________________________________
MeeGo-dev mailing list
[email protected]
http://lists.meego.com/listinfo/meego-dev

Reply via email to