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



commit b2fc3696141da63f4d728b8a5acec811c3b924c6
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 |   58 +++++++++++++++++++++-
 2 files changed, 56 insertions(+), 3 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 a67d5a0..37ef9cb 100644
--- a/addressbook/backends/file/e-book-backend-file.c
+++ b/addressbook/backends/file/e-book-backend-file.c
@@ -66,6 +66,7 @@
 G_DEFINE_TYPE (EBookBackendFile, e_book_backend_file, E_TYPE_BOOK_BACKEND_SYNC)
 
 struct _EBookBackendFilePrivate {
+	gchar     *base_directory;
 	gchar     *photo_dirname;
 	gchar     *revision;
 	gint       rev_counter;
@@ -1316,8 +1317,13 @@ e_book_backend_file_open (EBookBackendSync *backend,
 
 	source = e_backend_get_source (E_BACKEND (backend));
 	registry = e_book_backend_get_registry (E_BOOK_BACKEND (backend));
-	dirname = e_book_backend_file_extract_path_from_source (
-		registry, source, GET_PATH_DB_DIR);
+
+	if (bf->priv->base_directory)
+		dirname = g_strdup (bf->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);
 
@@ -1487,7 +1493,9 @@ e_book_backend_file_open (EBookBackendSync *backend,
 	g_free (filename);
 	g_free (backup);
 
-	/* Resolve the photo directory here */
+	/* Resolve the photo directory here (no need for photo directory
+	 * in read access mode, it's only used for write access methods)
+	 */
 	dirname = e_book_backend_file_extract_path_from_source (
 		registry, source, GET_PATH_PHOTO_DIR);
 	if (!only_if_exists && !create_directory (dirname, perror))
@@ -1644,12 +1652,54 @@ 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. */
 	G_OBJECT_CLASS (e_book_backend_file_parent_class)->finalize (object);
 }
 
+
+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)
 {
@@ -1667,6 +1717,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]