--- a/qtmobility/plugins/contacts/symbian/src/cntsymbianengine.cpp Fri May 14 16:41:33 2010 +0300
+++ b/qtmobility/plugins/contacts/symbian/src/cntsymbianengine.cpp Thu May 27 13:42:11 2010 +0300
@@ -88,31 +88,21 @@
m_contactFilter = new CntSymbianFilter(*this, *m_dataBase->contactDatabase(), *m_transformContact);
#else
m_contactFilter = new CntSymbianFilter(*m_dataBase->contactDatabase());
+ m_contactSorter = new CntSymbianSorterDbms(*m_dataBase->contactDatabase(), *m_transformContact);
#endif
- m_contactSorter = new CntSymbianSorterDbms(*m_dataBase->contactDatabase(), *m_transformContact);
m_relationship = new CntRelationship(m_dataBase->contactDatabase(), m_managerUri);
m_displayLabel = new CntDisplayLabel();
}
}
-CntSymbianEngine::CntSymbianEngine(const CntSymbianEngine& other)
- : QContactManagerEngine(),
- m_dataBase(other.m_dataBase),
- m_managerUri(other.m_managerUri),
- m_transformContact(other.m_transformContact),
- m_contactFilter(other.m_contactFilter),
- m_contactSorter(other.m_contactSorter),
- m_relationship(other.m_relationship),
- m_displayLabel(other.m_displayLabel)
-{
-}
-
CntSymbianEngine::~CntSymbianEngine()
{
delete m_contactFilter; // needs to be deleted before database
delete m_dataBase;
delete m_transformContact;
+#ifndef SYMBIAN_BACKEND_USE_SQLITE
delete m_contactSorter;
+#endif
delete m_relationship;
delete m_displayLabel;
}
@@ -187,45 +177,6 @@
return result;
}
-#if 0
-// These functions are not used anymore - there is always a filter (which may be the default filter)
-QList<QContactLocalId> CntSymbianEngine::contactIds(const QList<QContactSortOrder>& sortOrders, QContactManager::Error* error) const
-{
- // Check if sorting is supported by backend
- if(m_contactSorter->sortOrderSupported(sortOrders))
- return m_contactSorter->contacts(sortOrders,error);
-
- // Backend does not support this sorting.
- // Fall back to slow QContact-level sorting method.
-
- // Get unsorted contact ids
- QList<QContactSortOrder> noSortOrders;
- QList<QContactLocalId> unsortedIds = m_contactSorter->contacts(noSortOrders, error);
- if (*error != QContactManager::NoError)
- return QList<QContactLocalId>();
-
- // Sort contacts
- return slowSort(unsortedIds, sortOrders, error);
-}
-
-QList<QContact> CntSymbianEngine::contacts(const QList<QContactSortOrder>& sortOrders, const QStringList& definitionRestrictions, QContactManager::Error* error) const
-{
- *error = QContactManager::NoError;
- QList<QContact> contacts;
- QList<QContactLocalId> contactIds = this->contactIds(sortOrders, error);
- if (*error == QContactManager::NoError ) {
- foreach (QContactLocalId id, contactIds) {
- QContact contact = this->contact(id, definitionRestrictions, error);
- if (*error != QContactManager::NoError) {
- return QList<QContact>(); // return empty list if error occurred
- }
- contacts.append(contact);
- }
- }
- return contacts;
-}
-#endif
-
QList<QContact> CntSymbianEngine::contacts(const QContactFilter& filter, const QList<QContactSortOrder>& sortOrders, const QContactFetchHint& fh, QContactManager::Error* error) const
{
*error = QContactManager::NoError;
@@ -489,10 +440,13 @@
contactId->setLocalId(QContactLocalId(id));
contactId->setManagerUri(m_managerUri);
contact.setId(*contactId);
+ CleanupStack::PopAndDestroy(contactItem);
+ contactItem = 0;
//update contact, will add the fields to the already saved group
updateContactL(contact);
// Transform details that are not available until the contact has been saved
+ contactItem = m_dataBase->contactDatabase()->ReadContactLC(id);
m_transformContact->transformPostSaveDetailsL(*contactItem, contact, *m_dataBase->contactDatabase(), m_managerUri);
CleanupStack::PopAndDestroy(contactItem);
@@ -554,6 +508,13 @@
// note commitContactL removes empty fields from the contact
m_dataBase->contactDatabase()->CommitContactL(*contactItem);
+ // Update "last modified" time stamp; the contact item needs to be
+ // explicitly refreshed by reading it again from the database
+ CleanupStack::PopAndDestroy(contactItem);
+ contactItem = 0;
+ contactItem = m_dataBase->contactDatabase()->ReadContactLC(contact.localId());
+ m_transformContact->transformPostSaveDetailsL(*contactItem, contact, *m_dataBase->contactDatabase(), m_managerUri);
+
updateDisplayLabel(contact);
CleanupStack::PopAndDestroy(contactItem);