[evolution-kolab/ek-wip-porting: 12/14] KolabSettingsHandler: added a Camel cache directory char field



commit d78d35a53b80d47e4eae08a9f92355493b117a10
Author: Christian Hilberg <hilberg kernelconcepts de>
Date:   Tue Mar 13 17:59:06 2012 +0100

    KolabSettingsHandler: added a Camel cache directory char field
    
    * this field is read-only (from Camel), added the code for that
    * make sure the field cannot be written

 src/libekolab/kolab-settings-handler.c |   72 ++++++++++++++++++++++++++++++++
 src/libekolab/kolab-settings-handler.h |    7 ++-
 2 files changed, 76 insertions(+), 3 deletions(-)
---
diff --git a/src/libekolab/kolab-settings-handler.c b/src/libekolab/kolab-settings-handler.c
index a05b419..179f887 100644
--- a/src/libekolab/kolab-settings-handler.c
+++ b/src/libekolab/kolab-settings-handler.c
@@ -68,12 +68,15 @@ typedef gboolean (*KolabSettingsHandlerGetFunc) (KolabSettingsHandler*, GError**
 
 static gboolean kolab_settings_handler_char_get_func_camel_data_dir (KolabSettingsHandler*, GError**);
 static gboolean kolab_settings_handler_char_set_func_camel_data_dir (KolabSettingsHandler*, gchar*, GError**);
+static gboolean kolab_settings_handler_char_get_func_camel_cache_dir (KolabSettingsHandler*, GError**);
+static gboolean kolab_settings_handler_char_set_func_camel_cache_dir (KolabSettingsHandler*, gchar*, GError**);
 static gboolean kolab_settings_handler_char_get_func_camel_config_dir (KolabSettingsHandler*, GError**);
 static gboolean kolab_settings_handler_char_set_func_camel_config_dir (KolabSettingsHandler*, gchar*, GError**);
 static gboolean kolab_settings_handler_uint_set_func_folder_context (KolabSettingsHandler*, guint value, GError**);
 
 static KolabSettingsHandlerGetFunc _kolab_settings_handler_char_get_funcs[] = {
 	kolab_settings_handler_char_get_func_camel_data_dir, /* KOLAB_SETTINGS_HANDLER_CHAR_FIELD_CAMEL_DATA_DIR */
+	kolab_settings_handler_char_get_func_camel_cache_dir, /* KOLAB_SETTINGS_HANDLER_CHAR_FIELD_CAMEL_CACHE_DIR */
 	kolab_settings_handler_char_get_func_camel_config_dir, /* KOLAB_SETTINGS_HANDLER_CHAR_FIELD_CAMEL_CONFIG_DIR */
 	NULL, /* KOLAB_SETTINGS_HANDLER_CHAR_FIELD_CAMEL_ACCOUNT_DIR */
 	NULL, /* KOLAB_SETTINGS_HANDLER_CHAR_FIELD_KOLAB_SERVER_NAME */
@@ -85,6 +88,7 @@ static KolabSettingsHandlerGetFunc _kolab_settings_handler_char_get_funcs[] = {
 
 static KolabSettingsHandlerCharSetFunc _kolab_settings_handler_char_set_funcs[] = {
 	kolab_settings_handler_char_set_func_camel_data_dir, /* KOLAB_SETTINGS_HANDLER_CHAR_FIELD_CAMEL_DATA_DIR */
+	kolab_settings_handler_char_set_func_camel_cache_dir, /* KOLAB_SETTINGS_HANDLER_CHAR_FIELD_CAMEL_CACHE_DIR */
 	kolab_settings_handler_char_set_func_camel_config_dir, /* KOLAB_SETTINGS_HANDLER_CHAR_FIELD_CAMEL_CONFIG_DIR */
 	NULL, /* KOLAB_SETTINGS_HANDLER_CHAR_FIELD_CAMEL_ACCOUNT_DIR */
 	NULL, /* KOLAB_SETTINGS_HANDLER_CHAR_FIELD_KOLAB_SERVER_NAME */
@@ -162,6 +166,61 @@ kolab_settings_handler_char_get_func_camel_data_dir (KolabSettingsHandler *self,
 }
 
 static gboolean
+kolab_settings_handler_char_get_func_camel_cache_dir (KolabSettingsHandler *self, GError **err)
+{
+	KolabSettingsHandlerPrivate *priv = NULL;
+	KolabFolderContextID context = KOLAB_FOLDER_CONTEXT_INVAL;
+	gchar *cache_dir = NULL;
+	gchar *priv_cache_dir = NULL;
+	gchar *backend_dir = NULL;
+
+	g_assert (KOLAB_IS_SETTINGS_HANDLER (self));
+	g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+
+	priv = KOLAB_SETTINGS_HANDLER_PRIVATE (self);
+	context = priv->sdata_uint[KOLAB_SETTINGS_HANDLER_UINT_FIELD_FOLDER_CONTEXT];
+
+	priv_cache_dir = priv->sdata_char[KOLAB_SETTINGS_HANDLER_CHAR_FIELD_CAMEL_CACHE_DIR];
+	if (priv_cache_dir != NULL)
+		return TRUE;
+
+	/* TODO elaborate on directory creation */
+
+	switch (context) {
+	case KOLAB_FOLDER_CONTEXT_EMAIL:
+		backend_dir = g_strdup ("mail");
+		break;
+	case KOLAB_FOLDER_CONTEXT_CONTACT:
+		backend_dir = g_strdup ("addressbook");
+		break;
+	case KOLAB_FOLDER_CONTEXT_CALENDAR:
+		backend_dir = g_strdup ("calendar");
+		break;
+	default:
+		g_assert_not_reached ();
+	}
+
+	cache_dir = g_build_filename (e_get_user_cache_dir (),
+	                              backend_dir,
+	                              NULL);
+
+	g_free (backend_dir);
+
+	if (g_mkdir_with_parents (cache_dir, 0700) != 0) {
+		g_set_error (err,
+		             G_FILE_ERROR,
+		             g_file_error_from_errno (errno),
+		             _("Could not create directory '%s' ('%s')"),
+		             cache_dir, g_strerror (errno));
+		g_free (cache_dir);
+		return FALSE;
+	}
+
+	priv->sdata_char[KOLAB_SETTINGS_HANDLER_CHAR_FIELD_CAMEL_CACHE_DIR] = cache_dir;
+	return TRUE;
+}
+
+static gboolean
 kolab_settings_handler_char_set_func_camel_data_dir (KolabSettingsHandler *self, gchar *value, GError **err)
 {
 	(void)self;
@@ -174,6 +233,19 @@ kolab_settings_handler_char_set_func_camel_data_dir (KolabSettingsHandler *self,
 }
 
 static gboolean
+kolab_settings_handler_char_set_func_camel_cache_dir (KolabSettingsHandler *self, gchar *value, GError **err)
+{
+	(void)self;
+	(void)value;
+	/* FIXME mark as a translatable string */
+	g_set_error (err,
+	             KOLAB_BACKEND_ERROR,
+	             KOLAB_BACKEND_ERROR_GENERIC,
+	             "Cannot set Camel cache directory, it is a read-only resource");
+	return FALSE;
+}
+
+static gboolean
 kolab_settings_handler_char_get_func_camel_config_dir (KolabSettingsHandler *self, GError **err)
 {
 	KolabSettingsHandlerPrivate *priv = KOLAB_SETTINGS_HANDLER_PRIVATE (self);
diff --git a/src/libekolab/kolab-settings-handler.h b/src/libekolab/kolab-settings-handler.h
index 7a9a5c8..1200908 100644
--- a/src/libekolab/kolab-settings-handler.h
+++ b/src/libekolab/kolab-settings-handler.h
@@ -12,17 +12,17 @@
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- * 
+ *
  * 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 this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
  */
- 
+
 /*----------------------------------------------------------------------------*/
 
 /**
@@ -119,6 +119,7 @@ struct _KolabSettingsHandler
 
 typedef enum {
 	KOLAB_SETTINGS_HANDLER_CHAR_FIELD_CAMEL_DATA_DIR = 0,
+	KOLAB_SETTINGS_HANDLER_CHAR_FIELD_CAMEL_CACHE_DIR,
 	KOLAB_SETTINGS_HANDLER_CHAR_FIELD_CAMEL_CONFIG_DIR,
 	KOLAB_SETTINGS_HANDLER_CHAR_FIELD_CAMEL_ACCOUNT_DIR,
 	KOLAB_SETTINGS_HANDLER_CHAR_FIELD_KOLAB_SERVER_NAME,



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