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)