[epiphany/wip/sync-rebase: 38/86] ephy-bookmark: Implement JsonSerializable interface



commit d2ad6e2a8c4fa0ebac79781e6a44d6b2de2f18dc
Author: Gabriel Ivascu <ivascu gabriel59 gmail com>
Date:   Thu Sep 29 15:04:57 2016 +0300

    ephy-bookmark: Implement JsonSerializable interface

 src/bookmarks/Makefile.am     |    2 +
 src/bookmarks/ephy-bookmark.c |   46 ++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 47 insertions(+), 1 deletions(-)
---
diff --git a/src/bookmarks/Makefile.am b/src/bookmarks/Makefile.am
index f71a17f..64cff1e 100644
--- a/src/bookmarks/Makefile.am
+++ b/src/bookmarks/Makefile.am
@@ -30,6 +30,7 @@ libephybookmarks_la_CPPFLAGS = \
        -DLOCALEDIR=\"$(localedir)\"                    \
        $(GLIB_CFLAGS)                                  \
        $(GTK_CFLAGS)                                   \
+       $(JSON_GLIB_CFLAGS)                             \
        $(LIBSECRET_CFLAGS)                             \
        $(LIBSOUP_CFLAGS)                               \
        $(WEBKIT2GTK_CFLAGS)
@@ -40,6 +41,7 @@ libephybookmarks_la_LIBADD = \
        $(top_builddir)/lib/widgets/libephywidgets.la   \
        $(GLIB_LIBS)                                    \
        $(GTK_LIBS)                                     \
+       $(JSON_GLIB_LIBS)                               \
        $(LIBSECRET_LIBS)                               \
        $(LIBSOUP_LIBS)                                 \
        $(WEBKIT2GTK_LIBS)
diff --git a/src/bookmarks/ephy-bookmark.c b/src/bookmarks/ephy-bookmark.c
index 8e319c5..d872c9d 100644
--- a/src/bookmarks/ephy-bookmark.c
+++ b/src/bookmarks/ephy-bookmark.c
@@ -20,6 +20,8 @@
 
 #include "ephy-bookmark.h"
 
+#include <json-glib/json-glib.h>
+
 struct _EphyBookmark {
   GObject      parent_instance;
 
@@ -29,7 +31,12 @@ struct _EphyBookmark {
   gint64       time_added;
 };
 
-G_DEFINE_TYPE (EphyBookmark, ephy_bookmark, G_TYPE_OBJECT)
+static JsonSerializableIface *serializable_iface = NULL;
+
+static void json_serializable_iface_init (gpointer g_iface);
+
+G_DEFINE_TYPE_EXTENDED (EphyBookmark, ephy_bookmark, G_TYPE_OBJECT, 0,
+                        G_IMPLEMENT_INTERFACE (JSON_TYPE_SERIALIZABLE, json_serializable_iface_init))
 
 enum {
   PROP_0,
@@ -179,6 +186,43 @@ ephy_bookmark_init (EphyBookmark *self)
 {
 }
 
+static JsonNode *
+ephy_bookmark_json_serializable_serialize_property (JsonSerializable *serializable,
+                                                    const gchar *property_name,
+                                                    const GValue *value,
+                                                    GParamSpec *pspec)
+{
+  return serializable_iface->serialize_property (serializable,
+                                                 property_name,
+                                                 value,
+                                                 pspec);
+}
+
+static gboolean
+ephy_bookmark_json_serializable_deserialize_property (JsonSerializable *serializable,
+                                                      const gchar *property_name,
+                                                      GValue *value,
+                                                      GParamSpec *pspec,
+                                                      JsonNode *property_node)
+{
+  return serializable_iface->deserialize_property (serializable,
+                                                   property_name,
+                                                   value,
+                                                   pspec,
+                                                   property_node);
+}
+
+static void
+json_serializable_iface_init (gpointer g_iface)
+{
+  JsonSerializableIface *iface = g_iface;
+
+  serializable_iface = g_type_default_interface_peek (JSON_TYPE_SERIALIZABLE);
+
+  iface->serialize_property = ephy_bookmark_json_serializable_serialize_property;
+  iface->deserialize_property = ephy_bookmark_json_serializable_deserialize_property;
+}
+
 EphyBookmark *
 ephy_bookmark_new (const char *url, const char *title, GSequence *tags)
 {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]