This approach is incompatible with QContactFavorite, and makes applications less portable to/from MeeGo relating to other platforms.
This fixes BMC#14196. Signed-off-by: Robin Burchell <[email protected]> Reviewed-by: Adrien Bustany <[email protected]> --- src/seaside.cpp | 9 +++---- src/seasidedetail.cpp | 1 - src/seasidedetail.h | 4 --- src/seasidelistmodel.cpp | 6 ++-- src/seasidesyncmodel.cpp | 48 ++++++++++++++------------------------- tests/datagen/datagenmodel.cpp | 35 ++++++++++++---------------- 6 files changed, 39 insertions(+), 64 deletions(-) diff --git a/src/seaside.cpp b/src/seaside.cpp index b62c15a..b5e2d4e 100644 --- a/src/seaside.cpp +++ b/src/seaside.cpp @@ -16,6 +16,7 @@ #include <QContactAvatar> #include <QContactBirthday> #include <QContactEmailAddress> +#include <QContactFavorite> #include <QContactName> #include <QContactNote> #include <QContactOrganization> @@ -83,12 +84,10 @@ QDate Seaside::contactAnniversary(const QContact *contact) return day.originalDate(); } -bool Seaside::contactFavorite(const QContact *contact) //REVISIT +bool Seaside::contactFavorite(const QContact *contact) { - foreach (const SeasideCustomDetail& detail, - contact->details(SeasideCustomDetail::DefinitionName)) - return detail.favorite(); - return false; + QContactFavorite favorite = contact->detail(QContactFavorite::DefinitionName); + return favorite.isFavorite(); } Seaside::Presence Seaside::contactPresence(const QContact *contact) diff --git a/src/seasidedetail.cpp b/src/seasidedetail.cpp index f700a6d..cf912c7 100644 --- a/src/seasidedetail.cpp +++ b/src/seasidedetail.cpp @@ -11,7 +11,6 @@ #include "seasidedetail.h" Q_IMPLEMENT_CUSTOM_CONTACT_DETAIL(SeasideCustomDetail, "Seaside"); -Q_DEFINE_LATIN1_CONSTANT(SeasideCustomDetail::FieldFavorite, "Favorite"); Q_DEFINE_LATIN1_CONSTANT(SeasideCustomDetail::FieldCommTimestamp, "CommTimestamp"); Q_DEFINE_LATIN1_CONSTANT(SeasideCustomDetail::FieldCommType, "CommType"); Q_DEFINE_LATIN1_CONSTANT(SeasideCustomDetail::FieldCommLocation, "CommLocation"); diff --git a/src/seasidedetail.h b/src/seasidedetail.h index ef314e4..3fc8045 100644 --- a/src/seasidedetail.h +++ b/src/seasidedetail.h @@ -21,14 +21,10 @@ class SeasideCustomDetail: public QContactDetail { public: Q_DECLARE_CUSTOM_CONTACT_DETAIL(SeasideCustomDetail, "Seaside"); - Q_DECLARE_LATIN1_CONSTANT(FieldFavorite, "Favorite"); Q_DECLARE_LATIN1_CONSTANT(FieldCommTimestamp, "CommTimestamp"); Q_DECLARE_LATIN1_CONSTANT(FieldCommType, "CommType"); Q_DECLARE_LATIN1_CONSTANT(FieldCommLocation, "CommLocation"); - void setFavorite(bool favorite) { setValue(FieldFavorite, favorite); } - bool favorite() const { return value<bool>(FieldFavorite); } - void setCommTimestamp(const QDateTime& timestamp) { setValue(FieldCommTimestamp, timestamp); } QDateTime commTimestamp() const { return value<QDateTime>(FieldCommTimestamp); } diff --git a/src/seasidelistmodel.cpp b/src/seasidelistmodel.cpp index adde067..5f251ba 100644 --- a/src/seasidelistmodel.cpp +++ b/src/seasidelistmodel.cpp @@ -16,6 +16,7 @@ #include <QContactAvatar> #include <QContactBirthday> #include <QContactEmailAddress> +#include <QContactFavorite> #include <QContactGuid> #include <QContactName> #include <QContactNote> @@ -189,9 +190,8 @@ QVariant SeasideListModel::data(const QModelIndex& index, int role) const { if (role == Seaside::SearchRole) return QVariant(); - foreach (const SeasideCustomDetail& detail, contact->details<SeasideCustomDetail>()) - return QVariant(detail.favorite()); - return QVariant(false); + QContactFavorite favorite = contact->detail<QContactFavorite>(); + return QVariant(favorite.isFavorite()); } case Seaside::ColumnEmailAddresses: // emails diff --git a/src/seasidesyncmodel.cpp b/src/seasidesyncmodel.cpp index 459f3d3..f27d3bb 100644 --- a/src/seasidesyncmodel.cpp +++ b/src/seasidesyncmodel.cpp @@ -16,6 +16,7 @@ #include <QContactAvatar> #include <QContactBirthday> #include <QContactEmailAddress> +#include <QContactFavorite> #include <QContactGuid> #include <QContactName> #include <QContactNote> @@ -89,10 +90,6 @@ void SeasideSyncModel::releaseInstance() static void updateDefinitions(QContactManager *manager) { QContactDetailDefinition seaside; - QContactDetailFieldDefinition favorite; - favorite.setDataType(QVariant::Bool); - seaside.insertField(SeasideCustomDetail::FieldFavorite, favorite); - QContactDetailFieldDefinition commTimestamp; commTimestamp.setDataType(QVariant::DateTime); seaside.insertField(SeasideCustomDetail::FieldCommTimestamp, commTimestamp); @@ -413,15 +410,8 @@ QVariant SeasideSyncModel::data(const QModelIndex& index, int role) const case Seaside::ColumnFavorite: // favorite { - // if (role != Seaside::SearchRole) // TODO: this should always return false - // return QVariant(); - if (priv->settings) { - QContactGuid guid = contact->detail<QContactGuid>(); - QString key = guid.guid(); - key += "/favorite"; - return priv->settings->value(key, false); - } - // return QVariant(false); + QContactFavorite favorite = contact->detail<QContactFavorite>(); + return QVariant(favorite.isFavorite()); } case Seaside::ColumnisSelf: // self @@ -1064,13 +1054,10 @@ void SeasideSyncModel::updatePerson(const SeasidePersonModel *newModel) } if (oldModel->favorite() != newModel->favorite()) { - if (priv->settings) { - QContactGuid guid = contact->detail<QContactGuid>(); - QString key = guid.guid(); - key += "/favorite"; - priv->settings->setValue(key, newModel->favorite()); - priv->settings->sync(); - } + QContactFavorite favorite = contact->detail<QContactFavorite>(); + favorite.setFavorite(newModel->favorite()); + if (!contact->saveDetail(&favorite)) + qWarning() << "[SyncModel] failed to update favorite"; } if (oldModel->self() != newModel->self()) { @@ -1115,23 +1102,22 @@ void SeasideSyncModel::setAvatar(const QUuid& uuid, const QString& path) void SeasideSyncModel::setFavorite(const QUuid& uuid, bool favorite) { - if (!priv->settings) + QContactLocalId id = priv->uuidToId[uuid]; + QContact *contact = priv->idToContact[id]; + + if (!contact) return; - QString key = uuid.toString(); - key += "/favorite"; - priv->settings->setValue(key, favorite); - priv->settings->sync(); + QContactFavorite fav= contact->detail<QContactFavorite>(); + fav.setFavorite(favorite); - QList<QContactLocalId> list; - list.append(priv->uuidToId[uuid]); + if (!contact->saveDetail(&fav)) + qWarning() << "[SyncModel] failed to save favorite"; - // writing to QSettings doesn't cause a change event, so manually call - contactsChanged(list); + if (!priv->manager->saveContact(contact)) + qWarning() << "[SyncModel] failed to save contact while setting favorite"; } - - void SeasideSyncModel::setCompany(const QUuid& uuid, QString company) { Q_UNUSED(uuid); diff --git a/tests/datagen/datagenmodel.cpp b/tests/datagen/datagenmodel.cpp index c97d858..d94479e 100644 --- a/tests/datagen/datagenmodel.cpp +++ b/tests/datagen/datagenmodel.cpp @@ -16,6 +16,7 @@ #include <QContactAvatar> #include <QContactBirthday> #include <QContactEmailAddress> +#include <QContactFavorite> #include <QContactGuid> #include <QContactName> #include <QContactNote> @@ -139,10 +140,6 @@ void DataGenModel::releaseInstance() static void updateDefinitions(QContactManager *manager) { QContactDetailDefinition seaside; - QContactDetailFieldDefinition favorite; - favorite.setDataType(QVariant::Bool); - seaside.insertField(SeasideCustomDetail::FieldFavorite, favorite); - QContactDetailFieldDefinition commTimestamp; commTimestamp.setDataType(QVariant::DateTime); seaside.insertField(SeasideCustomDetail::FieldCommTimestamp, commTimestamp); @@ -1269,13 +1266,10 @@ void DataGenModel::updatePerson(const SeasidePersonModel *newModel) } if (oldModel->favorite() != newModel->favorite()) { - if (priv->settings) { - QContactGuid guid = contact->detail<QContactGuid>(); - QString key = guid.guid(); - key += "/favorite"; - priv->settings->setValue(key, newModel->favorite()); - priv->settings->sync(); - } + QContactFavorite favorite = contact->detail<QContactFavorite>(); + favorite.setFavorite(newModel->favorite()); + if (!contact->saveDetail(&favorite)) + qWarning() << "[SyncModel] failed to update favorite"; } if (!priv->manager->saveContact(contact)) { @@ -1324,19 +1318,20 @@ void DataGenModel::setAvatar(const QUuid& uuid, const QString& path) void DataGenModel::setFavorite(const QUuid& uuid, bool favorite) { - if (!priv->settings) + QContactLocalId id = priv->uuidToId[uuid]; + QContact *contact = priv->idToContact[id]; + + if (!contact) return; - QString key = uuid.toString(); - key += "/favorite"; - priv->settings->setValue(key, favorite); - priv->settings->sync(); + QContactFavorite fav = contact->detail<QContactFavorite>(); + fav.setFavorite(favorite); - QList<QContactLocalId> list; - list.append(priv->uuidToId[uuid]); + if (!contact->saveDetail(&fav)) + qWarning() << "[SyncModel] failed to save favorite"; - // writing to QSettings doesn't cause a change event, so manually call - contactsChanged(list); + if (!priv->manager->saveContact(contact)) + qWarning() << "[SyncModel] failed to save contact while setting favorite"; } void DataGenModel::setCompany(const QUuid& uuid, QString company) -- 1.7.4.1 _______________________________________________ MeeGo-dev mailing list [email protected] http://lists.meego.com/listinfo/meego-dev http://wiki.meego.com/Mailing_list_guidelines
