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

Reply via email to