qtmobility/plugins/contacts/qtcontacts-tracker/qtrackerrelationshipsaverequest.cpp
changeset 4 90517678cc4f
parent 1 2b40d63a9c3d
child 11 06b8e2af4411
--- a/qtmobility/plugins/contacts/qtcontacts-tracker/qtrackerrelationshipsaverequest.cpp	Fri Apr 16 15:51:22 2010 +0300
+++ b/qtmobility/plugins/contacts/qtcontacts-tracker/qtrackerrelationshipsaverequest.cpp	Mon May 03 13:18:40 2010 +0300
@@ -62,8 +62,7 @@
     if(links.isEmpty()) {
         QMap<int, QContactManager::Error> errors;
         errors[0] = QContactManager::BadArgumentError;
-        QContactManagerEngine::updateRelationshipSaveRequest(r, links, QContactManager::BadArgumentError, errors);
-        QContactManagerEngine::updateRequestState(req, QContactAbstractRequest::FinishedState);
+        QContactManagerEngine::updateRelationshipSaveRequest(r, links, QContactManager::BadArgumentError, errors, QContactAbstractRequest::FinishedState);
         return;
     }
     QContactManagerEngine::updateRequestState(req, QContactAbstractRequest::ActiveState);
@@ -83,10 +82,10 @@
     RDFVariable contact;
     QStringList idstrings(QStringList(ids.toList()));
     contact.property<nco::contactUID>().isMemberOf(idstrings);
-    nodes = ::tracker()->modelVariable(contact);
+    m_nodes = ::tracker()->modelVariable(contact);
 
     // need to store LiveNodes in order to receive notification from model
-    QObject::connect(nodes.model(), SIGNAL(modelUpdated()), this, SLOT(nodesDataReady()));
+    QObject::connect(m_nodes.model(), SIGNAL(modelUpdated()), this, SLOT(nodesDataReady()));
 
 }
 
@@ -98,9 +97,9 @@
     connect(transaction_.data(), SIGNAL(commitError(QString)), this, SLOT(commitError(QString)));
 
     QHash<QString, Live<nco::PersonContact> > lContacts;
-    for(int i = 0; i < nodes->rowCount();i++)
+    for(int i = 0; i < m_nodes->rowCount(); i++)
     {
-        Live<nco::PersonContact> contact = nodes->liveNode(i);
+        Live<nco::PersonContact> contact = m_nodes->liveNode(i);
         lContacts[contact->getContactUID()] = contact;
     }
     QContactRelationshipSaveRequest* r = qobject_cast<QContactRelationshipSaveRequest*>(req);
@@ -109,9 +108,10 @@
     QList<QContactRelationship> links = r->relationships();
     foreach(QContactRelationship rel, links)
     {
-        Live<nco::PersonContact> first = lContacts[QString::number(rel.first().localId())];
-        Live<nco::PersonContact> second = lContacts[QString::number(rel.second().localId())];
-        second->setMetacontact(first->getMetacontact());
+        Live<nco::PersonContact> first = lContacts.value(QString::number(rel.first().localId()));
+        Live<nco::PersonContact> second = lContacts.value(QString::number(rel.second().localId()));
+        //TODO: we should prefer the local contact information over the remote info.
+        mergeContacts(first, second);
     }
 
     transaction_->commit(false);
@@ -119,6 +119,14 @@
     commitFinished();
 }
 
+void QTrackerRelationshipSaveRequest::mergeContacts(const Live<nco::PersonContact>& preferedContact, const Live<nco::PersonContact>& inferiorContact)
+{
+   QList<LiveNode> mergedNodes = preferedContact->getHasIMAddresss();
+   mergedNodes += inferiorContact->getHasIMAddresss();
+   preferedContact->setHasIMAddresss( mergedNodes );
+   inferiorContact->remove();
+}
+
 void QTrackerRelationshipSaveRequest::commitFinished()
 {
     QContactRelationshipSaveRequest* r = qobject_cast<QContactRelationshipSaveRequest*>(req);
@@ -127,8 +135,7 @@
         QContactManager::Error error = QContactManager::NoError;
         QMap<int, QContactManager::Error> errors;
         errors[0] = error;
-        QContactManagerEngine::updateRelationshipSaveRequest(r, r->relationships(), error, errors);
-        QContactManagerEngine::updateRequestState(req, QContactAbstractRequest::FinishedState);
+        QContactManagerEngine::updateRelationshipSaveRequest(r, r->relationships(), error, errors, QContactAbstractRequest::FinishedState);
     }
     else
         qWarning()<<Q_FUNC_INFO<<r;
@@ -143,15 +150,13 @@
         QContactManager::Error error = QContactManager::InvalidRelationshipError;
         QMap<int, QContactManager::Error> errors; 
         errors[0] = error;
-        QContactManagerEngine::updateRelationshipSaveRequest(r, r->relationships(), error, errors);
-        QContactManagerEngine::updateRequestState(req, QContactAbstractRequest::FinishedState);
+        QContactManagerEngine::updateRelationshipSaveRequest(r, r->relationships(), error, errors, QContactAbstractRequest::FinishedState);
     }
     else
     {
         QMap<int, QContactManager::Error> errors;
         errors[0] = QContactManager::UnspecifiedError;
-        QContactManagerEngine::updateRelationshipSaveRequest(r, QList<QContactRelationship>(), QContactManager::UnspecifiedError, errors);
-        QContactManagerEngine::updateRequestState(req, QContactAbstractRequest::FinishedState);
+        QContactManagerEngine::updateRelationshipSaveRequest(r, QList<QContactRelationship>(), QContactManager::UnspecifiedError, errors, QContactAbstractRequest::FinishedState);
         return;
     }
 }