[evolution-kolab/ek-wip-porting: 12/14] KolabSettingsHandler: added a Camel cache directory char field
- From: Christian Hilberg <chilberg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-kolab/ek-wip-porting: 12/14] KolabSettingsHandler: added a Camel cache directory char field
- Date: Tue, 13 Mar 2012 17:09:13 +0000 (UTC)
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]