#define THRESHOLD_SECONDS 2
struct _EDataBookViewPrivate {
+ GDBusConnection *connection;
EGdbusBookView *gdbus_object;
+ gchar *object_path;
EDataBook *book;
EBookBackend *backend;
GHashTable *fields_of_interest;
};
-G_DEFINE_TYPE (EDataBookView, e_data_book_view, G_TYPE_OBJECT);
-
enum {
PROP_0,
PROP_BACKEND,
+ PROP_CONNECTION,
+ PROP_OBJECT_PATH,
PROP_SEXP
};
+/* Forward Declarations */
+static void e_data_book_view_initable_init (GInitableIface *interface);
+
+G_DEFINE_TYPE_WITH_CODE (
+ EDataBookView,
+ e_data_book_view,
+ G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (
+ G_TYPE_INITABLE,
+ e_data_book_view_initable_init))
+
static guint
str_ic_hash (gconstpointer key)
{
}
static void
+data_book_view_set_connection (EDataBookView *view,
+ GDBusConnection *connection)
+{
+ g_return_if_fail (G_IS_DBUS_CONNECTION (connection));
+ g_return_if_fail (view->priv->connection == NULL);
+
+ view->priv->connection = g_object_ref (connection);
+}
+
+static void
+data_book_view_set_object_path (EDataBookView *view,
+ const gchar *object_path)
+{
+ g_return_if_fail (object_path != NULL);
+ g_return_if_fail (view->priv->object_path == NULL);
+
+ view->priv->object_path = g_strdup (object_path);
+}
+
+static void
data_book_view_set_sexp (EDataBookView *view,
EBookBackendSExp *sexp)
{
g_value_get_object (value));
return;
+ case PROP_CONNECTION:
+ data_book_view_set_connection (
+ E_DATA_BOOK_VIEW (object),
+ g_value_get_object (value));
+ return;
+
+ case PROP_OBJECT_PATH:
+ data_book_view_set_object_path (
+ E_DATA_BOOK_VIEW (object),
+ g_value_get_string (value));
+ return;
+
case PROP_SEXP:
data_book_view_set_sexp (
E_DATA_BOOK_VIEW (object),
E_DATA_BOOK_VIEW (object)));
return;
+ case PROP_CONNECTION:
+ g_value_set_object (
+ value,
+ e_data_book_view_get_connection (
+ E_DATA_BOOK_VIEW (object)));
+ return;
+
+ case PROP_OBJECT_PATH:
+ g_value_set_string (
+ value,
+ e_data_book_view_get_object_path (
+ E_DATA_BOOK_VIEW (object)));
+ return;
+
case PROP_SEXP:
g_value_set_object (
value,
priv = E_DATA_BOOK_VIEW_GET_PRIVATE (object);
+ if (priv->connection != NULL) {
+ g_object_unref (priv->connection);
+ priv->connection = NULL;
+ }
+
if (priv->book != NULL) {
/* Remove the weak reference */
g_object_weak_unref (
priv = E_DATA_BOOK_VIEW_GET_PRIVATE (object);
+ g_free (priv->object_path);
+
reset_array (priv->adds);
reset_array (priv->changes);
reset_array (priv->removes);
G_OBJECT_CLASS (e_data_book_view_parent_class)->finalize (object);
}
+static gboolean
+data_book_view_initable_init (GInitable *initable,
+ GCancellable *cancellable,
+ GError **error)
+{
+ EDataBookView *view;
+
+ view = E_DATA_BOOK_VIEW (initable);
+
+ return e_gdbus_book_view_register_object (
+ view->priv->gdbus_object,
+ view->priv->connection,
+ view->priv->object_path,
+ error);
+}
+
static void
e_data_book_view_class_init (EDataBookViewClass *class)
{
g_object_class_install_property (
object_class,
+ PROP_CONNECTION,
+ g_param_spec_object (
+ "connection",
+ "Connection",
+ "The GDBusConnection on which "
+ "to export the view interface",
+ G_TYPE_DBUS_CONNECTION,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_OBJECT_PATH,
+ g_param_spec_string (
+ "object-path",
+ "Object Path",
+ "The object path at which to "
+ "export the view interface",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (
+ object_class,
PROP_SEXP,
g_param_spec_object (
"sexp",
}
static void
+e_data_book_view_initable_init (GInitableIface *interface)
+{
+ interface->init = data_book_view_initable_init;
+}
+
+static void
e_data_book_view_init (EDataBookView *view)
{
view->priv = E_DATA_BOOK_VIEW_GET_PRIVATE (view);
*/
EDataBookView *
e_data_book_view_new (EDataBook *book,
- EBookBackendSExp *sexp)
+ EBookBackendSExp *sexp,
+ GDBusConnection *connection,
+ const gchar *object_path,
+ GError **error)
{
EDataBookView *view;
EBookBackend *backend;
g_return_val_if_fail (E_IS_DATA_BOOK (book), NULL);
g_return_val_if_fail (E_IS_BOOK_BACKEND_SEXP (sexp), NULL);
+ g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), NULL);
+ g_return_val_if_fail (object_path != NULL, NULL);
backend = e_data_book_get_backend (book);
- view = g_object_new (
- E_TYPE_DATA_BOOK_VIEW,
+ view = g_initable_new (
+ E_TYPE_DATA_BOOK_VIEW, NULL, error,
"backend", backend,
+ "connection", connection,
+ "object-path", object_path,
"sexp", sexp, NULL);
+ if (view == NULL)
+ return NULL;
+
view->priv->book = book;
/* Attach a weak reference to the book, so
* if it dies the book view is destroyed too. */
}
/**
- * e_data_book_view_register_gdbus_object:
- *
- * Since: 2.32
- **/
-guint
-e_data_book_view_register_gdbus_object (EDataBookView *query,
- GDBusConnection *connection,
- const gchar *object_path,
- GError **error)
-{
- g_return_val_if_fail (E_IS_DATA_BOOK_VIEW (query), 0);
- g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), 0);
- g_return_val_if_fail (object_path != NULL, 0);
-
- return e_gdbus_book_view_register_object (
- query->priv->gdbus_object, connection, object_path, error);
-}
-
-/**
* e_data_book_view_get_backend:
* @view: an #EDataBookView
*
}
/**
+ * e_data_book_view_get_connection:
+ * @view: an #EDataBookView
+ *
+ * Returns the #GDBusConnection on which the AddressBookView D-Bus
+ * interface is exported.
+ *
+ * Returns: the #GDBusConnection
+ *
+ * Since: 3.8
+ **/
+GDBusConnection *
+e_data_book_view_get_connection (EDataBookView *view)
+{
+ g_return_val_if_fail (E_IS_DATA_BOOK_VIEW (view), NULL);
+
+ return view->priv->connection;
+}
+
+/**
+ * e_data_book_view_get_object_path:
+ * @view: an #EDataBookView
+ *
+ * Returns the object path at which the AddressBookView D-Bus interface
+ * is exported.
+ *
+ * Returns: the object path
+ *
+ * Since: 3.8
+ **/
+const gchar *
+e_data_book_view_get_object_path (EDataBookView *view)
+{
+ g_return_val_if_fail (E_IS_DATA_BOOK_VIEW (view), NULL);
+
+ return view->priv->object_path;
+}
+
+/**
* e_data_book_view_get_flags:
* @view: an #EDataBookView
*