--- a/qtmobility/plugins/contacts/wince/qcontactwincebackend.cpp Fri Apr 16 15:51:22 2010 +0300
+++ b/qtmobility/plugins/contacts/wince/qcontactwincebackend.cpp Mon May 03 13:18:40 2010 +0300
@@ -68,10 +68,10 @@
*/
-QContactWinCEEngine::QContactWinCEEngine(ContactWinceFactory* factory, const QString& engineName, const QMap<QString, QString>& , QContactManager::Error& error)
+QContactWinCEEngine::QContactWinCEEngine(ContactWinceFactory* factory, const QString& engineName, const QMap<QString, QString>& , QContactManager::Error* error)
: d(new QContactWinCEEngineData)
{
- error = QContactManager::NoError;
+ *error = QContactManager::NoError;
buildHashForContactDetailToPoomPropId();
d->m_engineName = engineName;
@@ -137,21 +137,15 @@
d->m_factory->resetEngine();
}
-void QContactWinCEEngine::deref()
-{
- if (!d->m_refCount.deref())
- delete this;
-}
-
QString QContactWinCEEngine::managerName() const
{
return d->m_engineName;
}
-QContact QContactWinCEEngine::contact(const QContactLocalId& contactId, const QStringList& definitionRestrictions, QContactManager::Error& error) const
+QContact QContactWinCEEngine::contact(const QContactLocalId& contactId, const QtMobility::QContactFetchHint& hint, QContactManager::Error* error) const
{
// TODO: implementation for definitionRestrictions!
- Q_UNUSED(definitionRestrictions);
+ Q_UNUSED(hint);
QContact ret;
// id == 0 gives a bad argument error from POOM, so don't even try it
@@ -161,29 +155,29 @@
HRESULT hr = d->m_app->GetItemFromOidEx(contactId, 0, &item);
if (SUCCEEDED(hr)) {
if (item) {
- error = QContactManager::NoError;
+ *error = QContactManager::NoError;
ret = convertToQContact(item);
} else {
- error = QContactManager::DoesNotExistError;
+ *error = QContactManager::DoesNotExistError;
}
} else {
if (HRESULT_CODE(hr) == ERROR_NOT_FOUND) {
- error = QContactManager::DoesNotExistError;
+ *error = QContactManager::DoesNotExistError;
} else {
qWarning() << "Failed to retrieve contact:" << HRESULT_CODE(hr);
- error = QContactManager::UnspecifiedError;
+ *error = QContactManager::UnspecifiedError;
}
}
} else {
- error = QContactManager::DoesNotExistError;
+ *error = QContactManager::DoesNotExistError;
}
return ret;
}
-bool QContactWinCEEngine::saveContact(QContact* contact, QContactManager::Error& error)
+bool QContactWinCEEngine::saveContact(QContact* contact, QContactManager::Error* error)
{
if (contact == 0) {
- error = QContactManager::BadArgumentError;
+ *error = QContactManager::BadArgumentError;
return false;
}
@@ -191,7 +185,7 @@
// ensure that the contact's details conform to their definitions
if (!validateContact(*contact, error)) {
- error = QContactManager::InvalidDetailError;
+ *error = QContactManager::InvalidDetailError;
return false;
}
@@ -206,11 +200,11 @@
} else {
if (HRESULT_CODE(hr) == ERROR_NOT_FOUND) {
// Well, doesn't exist any more
- error = QContactManager::DoesNotExistError;
+ *error = QContactManager::DoesNotExistError;
d->m_ids.removeAll(contact->localId());
} else {
qWarning() << "Didn't get old contact" << HRESULT_CODE(hr);
- error = QContactManager::UnspecifiedError;
+ *error = QContactManager::UnspecifiedError;
}
}
} else if (contact->localId() == 0) {
@@ -224,35 +218,35 @@
if (SUCCEEDED(hr)) {
} else {
qWarning() << "Failed to query interface" << HRESULT_CODE(hr);
- error = QContactManager::UnspecifiedError;
+ *error = QContactManager::UnspecifiedError;
}
} else {
qWarning() << "Failed to create contact: "<< HRESULT_CODE(hr);
- error = QContactManager::OutOfMemoryError;
+ *error = QContactManager::OutOfMemoryError;
}
} else {
// Saving a contact with a non zero id, but that doesn't exist
- error = QContactManager::DoesNotExistError;
+ *error = QContactManager::DoesNotExistError;
}
if (icontact) {
// Convert our QContact to the Icontact (via setProps)
- if (convertFromQContact(*contact, icontact, error)) {
+ if (convertFromQContact(*contact, icontact, *error)) {
HRESULT hr = icontact->Save();
if (SUCCEEDED(hr)) {
// yay! we also need to set the new contact id
long oid = 0;
hr = icontact->get_Oid(&oid);
if (SUCCEEDED(hr)) {
- error = QContactManager::NoError;
- QContact c = this->contact((QContactLocalId)oid, QStringList(), error);
+ *error = QContactManager::NoError;
+ QContact c = this->contact((QContactLocalId)oid, QContactFetchHint(), error);
- if (error == QContactManager::NoError) {
+ if (*error == QContactManager::NoError) {
*contact = c;
if (wasOld) {
- cs.changedContacts().insert(contact->localId());
+ cs.insertChangedContact(contact->localId());
} else {
- cs.addedContacts().insert(contact->localId());
+ cs.insertAddedContact(contact->localId());
d->m_ids.append(contact->localId());
}
}
@@ -262,7 +256,7 @@
}
qWarning() << "Saved contact, but couldn't retrieve id again??" << HRESULT_CODE(hr);
// Blargh.
- error = QContactManager::UnspecifiedError;
+ *error = QContactManager::UnspecifiedError;
} else {
qWarning() << "Failed to save contact" << HRESULT_CODE(hr);
}
@@ -275,7 +269,7 @@
return false;
}
-bool QContactWinCEEngine::removeContact(const QContactLocalId& contactId, QContactManager::Error& error)
+bool QContactWinCEEngine::removeContact(const QContactLocalId& contactId, QContactManager::Error* error)
{
// Fetch an IItem* for this
if (contactId != 0) {
@@ -286,32 +280,32 @@
if (SUCCEEDED(hr)) {
hr = item->Delete();
if (SUCCEEDED(hr)) {
- error = QContactManager::NoError;
+ *error = QContactManager::NoError;
d->m_ids.removeAll(contactId);
- cs.removedContacts().insert(contactId);
+ cs.insertRemovedContact(contactId);
cs.emitSignals(this);
return true;
}
qWarning() << "Failed to delete:" << HRESULT_CODE(hr);
- error = QContactManager::UnspecifiedError;
+ *error = QContactManager::UnspecifiedError;
} else {
if (HRESULT_CODE(hr) == ERROR_NOT_FOUND) {
- error = QContactManager::DoesNotExistError;
+ *error = QContactManager::DoesNotExistError;
} else {
qWarning() << "Failed to retrieve item pointer in delete" << HRESULT_CODE(hr);
- error = QContactManager::UnspecifiedError;
+ *error = QContactManager::UnspecifiedError;
}
}
} else {
// Id 0 does not exist
- error = QContactManager::DoesNotExistError;
+ *error = QContactManager::DoesNotExistError;
}
return false;
}
-QMap<QString, QContactDetailDefinition> QContactWinCEEngine::detailDefinitions(const QString& contactType, QContactManager::Error& error) const
+QMap<QString, QContactDetailDefinition> QContactWinCEEngine::detailDefinitions(const QString& contactType, QContactManager::Error* error) const
{
- error = QContactManager::NoError;
+ *error = QContactManager::NoError;
QMap<QString, QMap<QString, QContactDetailDefinition> > defns = QContactManagerEngine::schemaDefinitions();
// Remove the details we don't support
@@ -330,7 +324,7 @@
// No logo for organisation
fields = defns[contactType][QContactOrganization::DefinitionName].fields();
- fields.remove(QContactOrganization::FieldLogo);
+ fields.remove(QContactOrganization::FieldLogoUrl);
defns[contactType][QContactOrganization::DefinitionName].setFields(fields);
// No subtypes for these details
@@ -392,8 +386,9 @@
}
/*! \reimp */
-bool QContactWinCEEngine::hasFeature(QContactManager::ManagerFeature feature) const
+bool QContactWinCEEngine::hasFeature(QContactManager::ManagerFeature feature, const QString& contactType) const
{
+ Q_UNUSED(contactType);
// The Windows CE backend is an "isolated" backend
if (feature == QContactManager::Anonymous)
return true;
@@ -403,7 +398,7 @@
}
/* Synthesise the display label of a contact */
-QString QContactWinCEEngine::synthesizedDisplayLabel(const QContact& contact, QContactManager::Error& error) const
+QString QContactWinCEEngine::synthesizedDisplayLabel(const QContact& contact, QContactManager::Error* error) const
{
Q_UNUSED(error)
// The POOM API (well, lack thereof) makes this a bit strange.
@@ -474,6 +469,142 @@
}
return false;
}
+
+/*! \reimp */
+QMap<QString, QString> QContactWinCEEngine::managerParameters() const
+{
+ return QMap<QString, QString>();
+}
+
+/*! \reimp */
+int QContactWinCEEngine::managerVersion() const
+{
+ return QTCONTACTS_VERSION;
+}
+
+/*! \reimp */
+QList<QContact> QContactWinCEEngine::contacts(const QContactFilter& filter, const QList<QContactSortOrder>& sortOrders, const QContactFetchHint& fetchHint, QContactManager::Error* error) const
+{
+ QList<QContactLocalId> ids = contactIds(filter, sortOrders, error);
+ QList<QContact> cs;
+ if (*error == QContactManager::NoError) {
+ foreach (const QContactLocalId& id, ids) {
+ cs << contact(id, fetchHint, error);
+ }
+ }
+ return cs;
+}
+
+/*! \reimp */
+bool QContactWinCEEngine::saveRelationship(QContactRelationship* relationship, QContactManager::Error* error)
+{
+ Q_UNUSED(relationship);
+ *error = QContactManager::NotSupportedError;
+ return false;
+}
+
+/*! \reimp */
+bool QContactWinCEEngine::removeRelationship(const QContactRelationship& relationship, QContactManager::Error* error)
+{
+ Q_UNUSED(relationship);
+ *error = QContactManager::NotSupportedError;
+ return false;
+}
+
+/*! \reimp */
+bool QContactWinCEEngine::saveContacts(QList<QContact>* contacts, QMap<int, QContactManager::Error>* errorMap, QContactManager::Error* error)
+{
+ bool ret = true;
+
+ for (int j = 0; j < contacts->size(); j++) {
+ if (!saveContact(&((*contacts)[j]), error)) {
+ ret = false;
+ }
+ if (*error != QContactManager::NoError) {
+ errorMap->insert(j, *error);
+ }
+ }
+ return ret;
+}
+
+/*! \reimp */
+bool QContactWinCEEngine::removeContacts(const QList<QContactLocalId>& contactIds, QMap<int, QContactManager::Error>* errorMap, QContactManager::Error* error)
+{
+ bool ret = true;
+
+ for (int j = 0; j < contactIds.size(); j++) {
+ if (!removeContact(contactIds[j], error)) {
+ ret = false;
+ }
+
+ if (*error != QContactManager::NoError) {
+ errorMap->insert(j, *error);
+ }
+ }
+ return ret;
+}
+
+/*! \reimp */
+bool QContactWinCEEngine::setSelfContactId(const QContactLocalId& contactId, QContactManager::Error* error)
+{
+ Q_UNUSED(contactId);
+ *error = QContactManager::NotSupportedError;
+ return false;
+}
+
+/*! \reimp */
+QContactLocalId QContactWinCEEngine::selfContactId(QContactManager::Error* error) const
+{
+ *error = QContactManager::NotSupportedError;
+ return QContactLocalId();
+}
+
+/*! \reimp */
+QList<QContactRelationship> QContactWinCEEngine::relationships(const QString& relationshipType, const QContactId& participantId, QContactRelationship::Role role, QContactManager::Error* error) const
+{
+ Q_UNUSED(relationshipType);
+ Q_UNUSED(participantId);
+ Q_UNUSED(role);
+ *error = QContactManager::NotSupportedError;
+ return QList<QContactRelationship>();
+}
+
+/*! \reimp */
+bool QContactWinCEEngine::saveRelationships(QList<QContactRelationship>* relationships, QMap<int, QContactManager::Error>* errorMap, QContactManager::Error* error)
+{
+ Q_UNUSED(relationships);
+ Q_UNUSED(errorMap);
+ *error = QContactManager::NotSupportedError;
+ return false;
+}
+
+/*! \reimp */
+bool QContactWinCEEngine::removeRelationships(const QList<QContactRelationship>& relationships, QMap<int, QContactManager::Error>* errorMap, QContactManager::Error* error)
+{
+ Q_UNUSED(relationships);
+ Q_UNUSED(errorMap);
+ *error = QContactManager::NotSupportedError;
+ return false;
+}
+
+/*! \reimp */
+bool QContactWinCEEngine::saveDetailDefinition(const QContactDetailDefinition& def, const QString& contactType, QContactManager::Error* error)
+{
+ Q_UNUSED(def);
+ Q_UNUSED(contactType);
+ *error = QContactManager::NotSupportedError;
+ return false;
+}
+
+/*! \reimp */
+bool QContactWinCEEngine::removeDetailDefinition(const QString& definitionId, const QString& contactType, QContactManager::Error* error)
+{
+ Q_UNUSED(definitionId);
+ Q_UNUSED(contactType);
+ *error = QContactManager::NotSupportedError;
+ return false;
+}
+
/*!
* Returns the list of data types supported by the WinCE engine
*/
@@ -497,7 +628,7 @@
}
/* Factory lives here in the basement */
-QContactManagerEngine* ContactWinceFactory::engine(const QMap<QString, QString>& parameters, QContactManager::Error& error)
+QContactManagerEngine* ContactWinceFactory::engine(const QMap<QString, QString>& parameters, QContactManager::Error* error)
{
QMutexLocker locker(&m_mutex);
if (!m_engine) {