+1 Thanks for the patch Robin. I've applied this in git. I'll work on packaging an update for libseaside today.

-Kaitlin

On 03/09/2011 09:37 AM, Robin Burchell wrote:
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)

_______________________________________________
MeeGo-dev mailing list
[email protected]
http://lists.meego.com/listinfo/meego-dev
http://wiki.meego.com/Mailing_list_guidelines

Reply via email to