86 m_transformContact = new CntTransformContact; |
86 m_transformContact = new CntTransformContact; |
87 #ifdef SYMBIAN_BACKEND_USE_SQLITE |
87 #ifdef SYMBIAN_BACKEND_USE_SQLITE |
88 m_contactFilter = new CntSymbianFilter(*this, *m_dataBase->contactDatabase(), *m_transformContact); |
88 m_contactFilter = new CntSymbianFilter(*this, *m_dataBase->contactDatabase(), *m_transformContact); |
89 #else |
89 #else |
90 m_contactFilter = new CntSymbianFilter(*m_dataBase->contactDatabase()); |
90 m_contactFilter = new CntSymbianFilter(*m_dataBase->contactDatabase()); |
|
91 m_contactSorter = new CntSymbianSorterDbms(*m_dataBase->contactDatabase(), *m_transformContact); |
91 #endif |
92 #endif |
92 m_contactSorter = new CntSymbianSorterDbms(*m_dataBase->contactDatabase(), *m_transformContact); |
|
93 m_relationship = new CntRelationship(m_dataBase->contactDatabase(), m_managerUri); |
93 m_relationship = new CntRelationship(m_dataBase->contactDatabase(), m_managerUri); |
94 m_displayLabel = new CntDisplayLabel(); |
94 m_displayLabel = new CntDisplayLabel(); |
95 } |
95 } |
96 } |
|
97 |
|
98 CntSymbianEngine::CntSymbianEngine(const CntSymbianEngine& other) |
|
99 : QContactManagerEngine(), |
|
100 m_dataBase(other.m_dataBase), |
|
101 m_managerUri(other.m_managerUri), |
|
102 m_transformContact(other.m_transformContact), |
|
103 m_contactFilter(other.m_contactFilter), |
|
104 m_contactSorter(other.m_contactSorter), |
|
105 m_relationship(other.m_relationship), |
|
106 m_displayLabel(other.m_displayLabel) |
|
107 { |
|
108 } |
96 } |
109 |
97 |
110 CntSymbianEngine::~CntSymbianEngine() |
98 CntSymbianEngine::~CntSymbianEngine() |
111 { |
99 { |
112 delete m_contactFilter; // needs to be deleted before database |
100 delete m_contactFilter; // needs to be deleted before database |
113 delete m_dataBase; |
101 delete m_dataBase; |
114 delete m_transformContact; |
102 delete m_transformContact; |
|
103 #ifndef SYMBIAN_BACKEND_USE_SQLITE |
115 delete m_contactSorter; |
104 delete m_contactSorter; |
|
105 #endif |
116 delete m_relationship; |
106 delete m_relationship; |
117 delete m_displayLabel; |
107 delete m_displayLabel; |
118 } |
108 } |
119 |
109 |
120 /*! |
110 /*! |
185 #endif |
175 #endif |
186 } |
176 } |
187 return result; |
177 return result; |
188 } |
178 } |
189 |
179 |
190 #if 0 |
|
191 // These functions are not used anymore - there is always a filter (which may be the default filter) |
|
192 QList<QContactLocalId> CntSymbianEngine::contactIds(const QList<QContactSortOrder>& sortOrders, QContactManager::Error* error) const |
|
193 { |
|
194 // Check if sorting is supported by backend |
|
195 if(m_contactSorter->sortOrderSupported(sortOrders)) |
|
196 return m_contactSorter->contacts(sortOrders,error); |
|
197 |
|
198 // Backend does not support this sorting. |
|
199 // Fall back to slow QContact-level sorting method. |
|
200 |
|
201 // Get unsorted contact ids |
|
202 QList<QContactSortOrder> noSortOrders; |
|
203 QList<QContactLocalId> unsortedIds = m_contactSorter->contacts(noSortOrders, error); |
|
204 if (*error != QContactManager::NoError) |
|
205 return QList<QContactLocalId>(); |
|
206 |
|
207 // Sort contacts |
|
208 return slowSort(unsortedIds, sortOrders, error); |
|
209 } |
|
210 |
|
211 QList<QContact> CntSymbianEngine::contacts(const QList<QContactSortOrder>& sortOrders, const QStringList& definitionRestrictions, QContactManager::Error* error) const |
|
212 { |
|
213 *error = QContactManager::NoError; |
|
214 QList<QContact> contacts; |
|
215 QList<QContactLocalId> contactIds = this->contactIds(sortOrders, error); |
|
216 if (*error == QContactManager::NoError ) { |
|
217 foreach (QContactLocalId id, contactIds) { |
|
218 QContact contact = this->contact(id, definitionRestrictions, error); |
|
219 if (*error != QContactManager::NoError) { |
|
220 return QList<QContact>(); // return empty list if error occurred |
|
221 } |
|
222 contacts.append(contact); |
|
223 } |
|
224 } |
|
225 return contacts; |
|
226 } |
|
227 #endif |
|
228 |
|
229 QList<QContact> CntSymbianEngine::contacts(const QContactFilter& filter, const QList<QContactSortOrder>& sortOrders, const QContactFetchHint& fh, QContactManager::Error* error) const |
180 QList<QContact> CntSymbianEngine::contacts(const QContactFilter& filter, const QList<QContactSortOrder>& sortOrders, const QContactFetchHint& fh, QContactManager::Error* error) const |
230 { |
181 { |
231 *error = QContactManager::NoError; |
182 *error = QContactManager::NoError; |
232 QList<QContact> contacts; |
183 QList<QContact> contacts; |
233 QList<QContactLocalId> contactIds = this->contactIds(filter, sortOrders, error); |
184 QList<QContactLocalId> contactIds = this->contactIds(filter, sortOrders, error); |
487 id = contactItem->Id(); |
438 id = contactItem->Id(); |
488 QScopedPointer<QContactId> contactId(new QContactId()); |
439 QScopedPointer<QContactId> contactId(new QContactId()); |
489 contactId->setLocalId(QContactLocalId(id)); |
440 contactId->setLocalId(QContactLocalId(id)); |
490 contactId->setManagerUri(m_managerUri); |
441 contactId->setManagerUri(m_managerUri); |
491 contact.setId(*contactId); |
442 contact.setId(*contactId); |
|
443 CleanupStack::PopAndDestroy(contactItem); |
|
444 contactItem = 0; |
492 |
445 |
493 //update contact, will add the fields to the already saved group |
446 //update contact, will add the fields to the already saved group |
494 updateContactL(contact); |
447 updateContactL(contact); |
495 // Transform details that are not available until the contact has been saved |
448 // Transform details that are not available until the contact has been saved |
|
449 contactItem = m_dataBase->contactDatabase()->ReadContactLC(id); |
496 m_transformContact->transformPostSaveDetailsL(*contactItem, contact, *m_dataBase->contactDatabase(), m_managerUri); |
450 m_transformContact->transformPostSaveDetailsL(*contactItem, contact, *m_dataBase->contactDatabase(), m_managerUri); |
497 |
451 |
498 CleanupStack::PopAndDestroy(contactItem); |
452 CleanupStack::PopAndDestroy(contactItem); |
499 } |
453 } |
500 // Leave with an error |
454 // Leave with an error |
551 m_transformContact->transformContactL(contact, *contactItem); |
505 m_transformContact->transformContactL(contact, *contactItem); |
552 |
506 |
553 // Write the entry using the converted contact |
507 // Write the entry using the converted contact |
554 // note commitContactL removes empty fields from the contact |
508 // note commitContactL removes empty fields from the contact |
555 m_dataBase->contactDatabase()->CommitContactL(*contactItem); |
509 m_dataBase->contactDatabase()->CommitContactL(*contactItem); |
|
510 |
|
511 // Update "last modified" time stamp; the contact item needs to be |
|
512 // explicitly refreshed by reading it again from the database |
|
513 CleanupStack::PopAndDestroy(contactItem); |
|
514 contactItem = 0; |
|
515 contactItem = m_dataBase->contactDatabase()->ReadContactLC(contact.localId()); |
|
516 m_transformContact->transformPostSaveDetailsL(*contactItem, contact, *m_dataBase->contactDatabase(), m_managerUri); |
556 |
517 |
557 updateDisplayLabel(contact); |
518 updateDisplayLabel(contact); |
558 |
519 |
559 CleanupStack::PopAndDestroy(contactItem); |
520 CleanupStack::PopAndDestroy(contactItem); |
560 CleanupStack::PopAndDestroy(1); // commit lock |
521 CleanupStack::PopAndDestroy(1); // commit lock |