qtmobility/plugins/contacts/symbian/src/cntsymbianengine.cpp
changeset 8 71781823f776
parent 5 453da2cfceef
child 11 06b8e2af4411
equal deleted inserted replaced
5:453da2cfceef 8:71781823f776
    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