[evolution-data-server] Added EDataBookDirect & generated D-Bus counterpart.



commit 4be7d7511a36adbd28f4a067862d5c742714dd8d
Author: Tristan Van Berkom <tristanvb openismus com>
Date:   Fri Feb 15 17:49:13 2013 +0900

    Added EDataBookDirect & generated D-Bus counterpart.
    
    The EDataBookDirect is the server side wrapper allowing backends
    to report information about thier direct read access support.

 addressbook/libedata-book/Makefile.am              |    2 +
 addressbook/libedata-book/e-data-book-direct.c     |  132 ++++++++++++++++++++
 addressbook/libedata-book/e-data-book-direct.h     |   64 ++++++++++
 addressbook/libedata-book/libedata-book.h          |    1 +
 private/Makefile.am                                |   17 +++
 .../org.gnome.evolution.dataserver.DirectBook.xml  |   19 +++
 6 files changed, 235 insertions(+), 0 deletions(-)
---
diff --git a/addressbook/libedata-book/Makefile.am b/addressbook/libedata-book/Makefile.am
index eb9e1d7..7f719db 100644
--- a/addressbook/libedata-book/Makefile.am
+++ b/addressbook/libedata-book/Makefile.am
@@ -30,6 +30,7 @@ libedata_book_1_2_la_SOURCES = \
        e-book-backend-sync.c \
        e-book-backend.c \
        e-data-book.c \
+       e-data-book-direct.c \
        e-data-book-factory.c \
        e-data-book-view.c \
        ximian-vcard.h
@@ -61,6 +62,7 @@ libedata_bookinclude_HEADERS = \
        e-data-book-factory.h \
        e-data-book-view.h \
        e-data-book.h \
+       e-data-book-direct.h \
        e-book-backend-cache.h \
        e-book-backend-sqlitedb.h \
        e-book-backend-db-cache.h
diff --git a/addressbook/libedata-book/e-data-book-direct.c b/addressbook/libedata-book/e-data-book-direct.c
new file mode 100644
index 0000000..6ed2a49
--- /dev/null
+++ b/addressbook/libedata-book/e-data-book-direct.c
@@ -0,0 +1,132 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2012 Intel Corporation
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ * Author: Tristan Van Berkom <tristanvb openismus com>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+
+#include <e-dbus-direct-book.h>
+#include "e-data-book-direct.h"
+
+#define E_DATA_BOOK_DIRECT_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), E_TYPE_DATA_BOOK_DIRECT, EDataBookDirectPrivate))
+
+G_DEFINE_TYPE (EDataBookDirect, e_data_book_direct, G_TYPE_OBJECT);
+#define THRESHOLD_ITEMS   32   /* how many items can be hold in a cache, before propagated to UI */
+#define THRESHOLD_SECONDS  2   /* how long to wait until notifications are propagated to UI; in seconds */
+
+struct _EDataBookDirectPrivate {
+       EDBusDirectBook *gdbus_object;
+};
+
+/* GObjectClass */
+static void
+e_data_book_direct_dispose (GObject *object)
+{
+       EDataBookDirect *direct = E_DATA_BOOK_DIRECT (object);
+
+       if (direct->priv->gdbus_object) {
+               g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (direct->priv->gdbus_object));
+               g_object_unref (direct->priv->gdbus_object);
+               direct->priv->gdbus_object = NULL;
+       }
+
+       G_OBJECT_CLASS (e_data_book_direct_parent_class)->dispose (object);
+}
+
+static void
+e_data_book_direct_init (EDataBookDirect *direct)
+{
+       direct->priv = E_DATA_BOOK_DIRECT_GET_PRIVATE (direct);
+       direct->priv->gdbus_object = e_dbus_direct_book_skeleton_new ();
+}
+
+static void
+e_data_book_direct_class_init (EDataBookDirectClass *class)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+       g_type_class_add_private (class, sizeof (EDataBookDirectPrivate));
+
+       object_class->dispose = e_data_book_direct_dispose;
+}
+
+/**
+ * e_data_book_direct_new:
+ * @backend_path: Full path to the installed backend shared library
+ * @backend_factory_name: Type name of the EBookBackendFactory implemented by the library
+ * @config: A backend specific configuration string
+ *
+ * Creates a #EDataBookDirect to report configuration data needed for direct
+ * read access.
+ *
+ * This is returned by e_book_backend_get_direct_book() for backends
+ * which support direct read access mode.
+ *
+ * Returns: (transfer full): A newly created #EDataBookDirect
+ *
+ * Since: 3.8
+ */
+EDataBookDirect *
+e_data_book_direct_new (const gchar *backend_path,
+                       const gchar *backend_factory_name,
+                       const gchar *config)
+{
+       EDataBookDirect *direct;
+
+       g_return_val_if_fail (backend_path && backend_path[0], NULL);
+       g_return_val_if_fail (backend_factory_name && backend_factory_name[0], NULL);
+
+       direct = g_object_new (E_TYPE_DATA_BOOK_DIRECT, NULL);
+
+       e_dbus_direct_book_set_backend_path (direct->priv->gdbus_object, backend_path);
+       e_dbus_direct_book_set_backend_name (direct->priv->gdbus_object, backend_factory_name);
+       e_dbus_direct_book_set_backend_config (direct->priv->gdbus_object, config);
+
+       return direct;
+}
+
+/**
+ * e_data_book_direct_register_gdbus_object:
+ * @direct: An #EDataBookDirect
+ * @connection: The #GDBusConnection to register with
+ * @object_path: The object path to place the direct access configuration data
+ * @error: A location to store any error which might occur while registering
+ *
+ * Places @direct on the @connection at @object_path
+ *
+ * Since: 3.8
+ **/
+gboolean
+e_data_book_direct_register_gdbus_object (EDataBookDirect *direct,
+                                         GDBusConnection *connection,
+                                         const gchar *object_path,
+                                         GError **error)
+{
+       g_return_val_if_fail (E_IS_DATA_BOOK_DIRECT (direct), FALSE);
+       g_return_val_if_fail (connection != NULL, FALSE);
+       g_return_val_if_fail (object_path != NULL, 0);
+
+       return g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (direct->priv->gdbus_object),
+                                                connection, object_path, error);
+}
diff --git a/addressbook/libedata-book/e-data-book-direct.h b/addressbook/libedata-book/e-data-book-direct.h
new file mode 100644
index 0000000..ab1767d
--- /dev/null
+++ b/addressbook/libedata-book/e-data-book-direct.h
@@ -0,0 +1,64 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2012 Intel Corporation
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ * Author: Tristan Van Berkom <tristanvb openismus com>
+ */
+
+#if !defined (__LIBEDATA_BOOK_H_INSIDE__) && !defined (LIBEDATA_BOOK_COMPILATION)
+#error "Only <libedata-book/libedata-book.h> should be included directly."
+#endif
+
+#ifndef E_DATA_BOOK_DIRECT_H
+#define E_DATA_BOOK_DIRECT_H
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define E_TYPE_DATA_BOOK_DIRECT        (e_data_book_direct_get_type ())
+#define E_DATA_BOOK_DIRECT(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TYPE_DATA_BOOK_DIRECT, 
EDataBookDirect))
+#define E_DATA_BOOK_DIRECT_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST((k), E_TYPE_DATA_BOOK_DIRECT, 
EDataBookDirectClass))
+#define E_IS_DATA_BOOK_DIRECT(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TYPE_DATA_BOOK_DIRECT))
+#define E_IS_DATA_BOOK_DIRECT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TYPE_DATA_BOOK_DIRECT))
+#define E_DATA_BOOK_DIRECT_GET_CLASS(k) (G_TYPE_INSTANCE_GET_CLASS ((obj), E_TYPE_DATA_BOOK_DIRECT, 
EDataBookDirect))
+
+typedef struct _EDataBookDirect EDataBookDirect;
+typedef struct _EDataBookDirectClass EDataBookDirectClass;
+typedef struct _EDataBookDirectPrivate EDataBookDirectPrivate;
+
+struct _EDataBookDirect {
+       GObject parent;
+       EDataBookDirectPrivate *priv;
+};
+
+struct _EDataBookDirectClass {
+       GObjectClass parent;
+};
+
+GType                  e_data_book_direct_get_type              (void);
+EDataBookDirect *      e_data_book_direct_new                   (const gchar *backend_path,
+                                                                 const gchar *backend_factory_name,
+                                                                 const gchar *config);
+
+gboolean                e_data_book_direct_register_gdbus_object (EDataBookDirect *direct,
+                                                                 GDBusConnection *connection,
+                                                                 const gchar *object_path,
+                                                                 GError **error);
+
+G_END_DECLS
+
+#endif /* E_DATA_BOOK_DIRECT_H */
diff --git a/addressbook/libedata-book/libedata-book.h b/addressbook/libedata-book/libedata-book.h
index bd5457c..0c916b3 100644
--- a/addressbook/libedata-book/libedata-book.h
+++ b/addressbook/libedata-book/libedata-book.h
@@ -33,6 +33,7 @@
 #include <libedata-book/e-book-backend-sync.h>
 #include <libedata-book/e-book-backend.h>
 #include <libedata-book/e-data-book-factory.h>
+#include <libedata-book/e-data-book-direct.h>
 #include <libedata-book/e-data-book-view.h>
 #include <libedata-book/e-data-book.h>
 
diff --git a/private/Makefile.am b/private/Makefile.am
index 38a2057..54a8b37 100644
--- a/private/Makefile.am
+++ b/private/Makefile.am
@@ -37,6 +37,15 @@ $(GENERATED_DBUS_ADDRESS_BOOK) : Makefile.am org.gnome.evolution.dataserver.Addr
        $(top_srcdir)/private/org.gnome.evolution.dataserver.AddressBook.xml \
        $(NULL)
 
+$(GENERATED_DBUS_DIRECT_BOOK) : Makefile.am org.gnome.evolution.dataserver.DirectBook.xml
+       $(AM_V_GEN) gdbus-codegen \
+       --interface-prefix org.gnome.evolution.dataserver \
+       --c-namespace E_DBus \
+       --generate-c-code e-dbus-direct-book \
+       --generate-docbook e-dbus-direct-book \
+       $(top_srcdir)/private/org.gnome.evolution.dataserver.DirectBook.xml \
+       $(NULL)
+
 $(GENERATED_DBUS_ADDRESS_BOOK_FACTORY) : Makefile.am org.gnome.evolution.dataserver.AddressBookFactory.xml
        $(AM_V_GEN) gdbus-codegen \
        --interface-prefix org.gnome.evolution.dataserver \
@@ -108,6 +117,12 @@ GENERATED_DBUS_ADDRESS_BOOK = \
        e-dbus-address-book-org.gnome.evolution.dataserver.AddressBook.xml \
        $(NULL)
 
+GENERATED_DBUS_DIRECT_BOOK = \
+       e-dbus-direct-book.c \
+       e-dbus-direct-book.h \
+       e-dbus-direct-book-org.gnome.evolution.dataserver.DirectBook.xml \
+       $(NULL)
+
 GENERATED_DBUS_ADDRESS_BOOK_FACTORY = \
        e-dbus-address-book-factory.c \
        e-dbus-address-book-factory.h \
@@ -131,6 +146,7 @@ BUILT_SOURCES = \
        $(GENERATED_DBUS_SOURCE_MANAGER) \
        $(GENERATED_DBUS_AUTHENTICATOR) \
        $(GENERATED_DBUS_ADDRESS_BOOK) \
+       $(GENERATED_DBUS_DIRECT_BOOK) \
        $(GENERATED_DBUS_ADDRESS_BOOK_FACTORY) \
        $(GENERATED_DBUS_CALENDAR) \
        $(GENERATED_DBUS_CALENDAR_FACTORY) \
@@ -167,6 +183,7 @@ EXTRA_DIST = \
        org.gnome.evolution.dataserver.SourceManager.xml \
        org.gnome.evolution.dataserver.Authenticator.xml \
        org.gnome.evolution.dataserver.AddressBook.xml \
+       org.gnome.evolution.dataserver.DirectBook.xml \
        org.gnome.evolution.dataserver.AddressBookFactory.xml \
        org.gnome.evolution.dataserver.Calendar.xml \
        org.gnome.evolution.dataserver.CalendarFactory.xml \
diff --git a/private/org.gnome.evolution.dataserver.DirectBook.xml 
b/private/org.gnome.evolution.dataserver.DirectBook.xml
new file mode 100644
index 0000000..9263612
--- /dev/null
+++ b/private/org.gnome.evolution.dataserver.DirectBook.xml
@@ -0,0 +1,19 @@
+<!DOCTYPE node PUBLIC
+"-//freedesktop//DTD D-Bus Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd";>
+<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd";>
+
+<!--
+    org.gnome.evolution.dataserver.DirectBook:
+    @short_description: Direct Access book metadata object
+    @since: 3.8
+
+    This interface reports direct read access capability for an addressbook backend.
+-->
+<interface name="org.gnome.evolution.dataserver.DirectBook">
+
+  <property name="BackendPath" type="s" access="read"/>
+  <property name="BackendName" type="s" access="read"/>
+  <property name="BackendConfig" type="s" access="read"/>
+
+</interface>


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