qtmobility/plugins/contacts/symbiansim/src/cntsimcontactsaverequest.cpp
changeset 4 90517678cc4f
parent 1 2b40d63a9c3d
--- a/qtmobility/plugins/contacts/symbiansim/src/cntsimcontactsaverequest.cpp	Fri Apr 16 15:51:22 2010 +0300
+++ b/qtmobility/plugins/contacts/symbiansim/src/cntsimcontactsaverequest.cpp	Mon May 03 13:18:40 2010 +0300
@@ -43,11 +43,9 @@
 #include "cntsymbiansimengine.h"
 #include "cntsimstore.h"
 #include <qcontactsaverequest.h>
-#include <QTimer>
 
 CntSimContactSaveRequest::CntSimContactSaveRequest(CntSymbianSimEngine *engine, QContactSaveRequest *req)
-    :CntAbstractSimRequest(engine),
-     m_req(req)
+    :CntAbstractSimRequest(engine, req)
 {
     connect( simStore(), SIGNAL(writeComplete(QContact, QContactManager::Error)),
         this, SLOT(writeComplete(QContact, QContactManager::Error)), Qt::QueuedConnection );
@@ -58,45 +56,45 @@
     cancel();
 }
 
-bool CntSimContactSaveRequest::start()
+void CntSimContactSaveRequest::run()
 {
-    if (simStore()->isBusy())
-        return false;
+    QContactSaveRequest *r = req<QContactSaveRequest>();
     
-    m_contacts = m_req->contacts();
+    if (!r->isActive())
+        return;
+    
+    m_contacts = r->contacts();
     m_errorMap.clear();
     m_index = 0;
-    singleShotTimer(0, this, SLOT(writeNext()));
-    QContactManagerEngine::updateRequestState(m_req, QContactAbstractRequest::ActiveState);
-    return true; 
-}
-
-bool CntSimContactSaveRequest::cancel()
-{
-    if (m_req->isActive()) {
-        cancelTimer();
-        simStore()->cancel();
-        QContactManagerEngine::updateRequestState(m_req, QContactAbstractRequest::CanceledState);
-        return true;
-    }
-    return false;
+    
+    writeNext();
 }
 
 void CntSimContactSaveRequest::writeComplete(QContact contact, QContactManager::Error error)
 {
+    if (!req()->isActive())
+        return;
+    
     if (error)
         m_errorMap.insert(m_index, error);
     engine()->updateDisplayLabel(contact);
     m_contacts[m_index] = contact;
     m_index++;
-    writeNext();
+    singleShotTimer(KRequestDelay, this, SLOT(writeNext()));
 }
 
 void CntSimContactSaveRequest::writeNext()
 {
-    if (m_req->isCanceled())
+    QContactSaveRequest *r = req<QContactSaveRequest>();
+    
+    if (!r->isActive())
         return;
     
+    if (r->contacts().count() == 0) {
+        QContactManagerEngine::updateContactSaveRequest(r, QList<QContact>(), QContactManager::BadArgumentError, m_errorMap, QContactAbstractRequest::FinishedState);
+        return;
+    }    
+    
     // All contacts written?
     if (m_index >= m_contacts.count())
     {
@@ -104,9 +102,8 @@
         QContactManager::Error error = QContactManager::NoError;
         if (m_errorMap.count())
             error = m_errorMap.begin().value();
-
-        QContactManagerEngine::updateRequestState(m_req, QContactAbstractRequest::FinishedState);
-        QContactManagerEngine::updateContactSaveRequest(m_req, m_contacts, error, m_errorMap);
+        
+        QContactManagerEngine::updateContactSaveRequest(r, m_contacts, error, m_errorMap, QContactAbstractRequest::FinishedState);
         return;
     }
 
@@ -114,13 +111,13 @@
     QContact contact = m_contacts.at(m_index);
     
     // Validate & write contact 
-    QContactManager::Error error;
-    if (engine()->validateContact(contact, error))
-        error = simStore()->write(contact);
+    QContactManager::Error error = QContactManager::NoError;
+    if (engine()->validateContact(contact, &error))
+        simStore()->write(contact, &error);
 
     if (error) {
         m_errorMap.insert(m_index, error);
         m_index++;
-        singleShotTimer(0, this, SLOT(writeNext()));
+        singleShotTimer(KRequestDelay, this, SLOT(writeNext()));
     }
 }