[evolution-data-server/openismus-work-master: 2/8] EBookBackendFile: Implement the new backend methods for direct access



commit fd0d203133dc837cb2c25e2d7d7b6ca1f0b67f5e
Author: Tristan Van Berkom <tristanvb openismus com>
Date:   Thu Nov 22 17:45:08 2012 +0900

    EBookBackendFile: Implement the new backend methods for direct access

 addressbook/backends/file/Makefile.am           |    1 +
 addressbook/backends/file/e-book-backend-file.c |   53 ++++++++++++++++++++++-
 2 files changed, 52 insertions(+), 2 deletions(-)
---
diff --git a/addressbook/backends/file/Makefile.am b/addressbook/backends/file/Makefile.am
index de53c5d..3f646c6 100644
--- a/addressbook/backends/file/Makefile.am
+++ b/addressbook/backends/file/Makefile.am
@@ -11,6 +11,7 @@ libebookbackendfile_la_CPPFLAGS = \
        $(CAMEL_CFLAGS)                                 \
        $(EVOLUTION_ADDRESSBOOK_CFLAGS)                 \
        $(CODE_COVERAGE_CFLAGS)                         \
+       -DBACKENDDIR="\"$(ebook_backenddir)\""          \
        $(NULL)
 
 libebookbackendfile_la_SOURCES =                       \
diff --git a/addressbook/backends/file/e-book-backend-file.c b/addressbook/backends/file/e-book-backend-file.c
index 8f7c919..2e4d409 100644
--- a/addressbook/backends/file/e-book-backend-file.c
+++ b/addressbook/backends/file/e-book-backend-file.c
@@ -76,6 +76,7 @@ G_DEFINE_TYPE_WITH_CODE (
                e_book_backend_file_initable_init))
 
 struct _EBookBackendFilePrivate {
+       gchar     *base_directory;
        gchar     *photo_dirname;
        gchar     *revision;
        gint       rev_counter;
@@ -1441,6 +1442,7 @@ e_book_backend_file_finalize (GObject *object)
 
        g_free (priv->photo_dirname);
        g_free (priv->revision);
+       g_free (priv->base_directory);
        g_rw_lock_clear (&(priv->lock));
 
        /* Chain up to parent's finalize() method. */
@@ -1471,8 +1473,12 @@ book_backend_file_initable_init (GInitable *initable,
        extension_name = E_SOURCE_EXTENSION_BACKEND_SUMMARY_SETUP;
        setup_extension = e_source_get_extension (source, extension_name);
 
-       dirname = e_book_backend_file_extract_path_from_source (
-               registry, source, GET_PATH_DB_DIR);
+       if (priv->base_directory)
+               dirname = g_strdup (priv->base_directory);
+       else
+               dirname = e_book_backend_file_extract_path_from_source (
+                       registry, source, GET_PATH_DB_DIR);
+
        filename = g_build_filename (dirname, "addressbook.db", NULL);
        backup = g_build_filename (dirname, "addressbook.db.old", NULL);
 
@@ -1577,6 +1583,47 @@ exit:
        return success;
 }
 
+
+static EDataBookDirect *
+e_book_backend_file_get_direct_book (EBookBackend *backend)
+{
+       EDataBookDirect *direct;
+       ESourceRegistry *registry;
+       ESource *source;
+       gchar *backend_path;
+       gchar *dirname;
+       const gchar *modules_env = NULL;
+       
+       modules_env = g_getenv (EDS_ADDRESS_BOOK_MODULES);
+
+       source = e_backend_get_source (E_BACKEND (backend));
+       registry = e_book_backend_get_registry (backend);
+       dirname = e_book_backend_file_extract_path_from_source (
+               registry, source, GET_PATH_DB_DIR);
+
+       /* Support in-tree testing / relocated modules */
+       if (modules_env)
+               backend_path = g_build_filename (modules_env, "libebookbackendfile.so", NULL);
+       else
+               backend_path = g_build_filename (BACKENDDIR, "libebookbackendfile.so", NULL);
+       direct = e_data_book_direct_new (backend_path, "EBookBackendFileFactory", dirname);
+
+       g_free (backend_path);
+       g_free (dirname);
+
+       return direct;
+}
+
+static void
+e_book_backend_file_configure_direct (EBookBackend *backend,
+                                     const gchar  *config)
+{
+       EBookBackendFilePrivate *priv;
+
+       priv = E_BOOK_BACKEND_FILE_GET_PRIVATE (backend);
+       priv->base_directory = g_strdup (config);
+}
+
 static void
 e_book_backend_file_class_init (EBookBackendFileClass *class)
 {
@@ -1594,6 +1641,8 @@ e_book_backend_file_class_init (EBookBackendFileClass *class)
        backend_class->stop_view                = e_book_backend_file_stop_view;
        backend_class->sync                     = e_book_backend_file_sync;
        backend_class->notify_update            = e_book_backend_file_notify_update;
+       backend_class->get_direct_book          = e_book_backend_file_get_direct_book;
+       backend_class->configure_direct         = e_book_backend_file_configure_direct;
 
        sync_class->open_sync                   = e_book_backend_file_open;
        sync_class->get_backend_property_sync   = e_book_backend_file_get_backend_property;


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