--- 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;
}
}