From: Jose Dapena Paz Date: Tue, 3 Feb 2009 11:48:56 +0000 (+0000) Subject: Make gconf and paths be configurable in runtime with env vars X-Git-Tag: git_migration_finished~675 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=cb68944c4c0c8e36453b07926bca8ebee668aa7b Make gconf and paths be configurable in runtime with env vars pmo-trunk-r7368 --- diff --git a/src/Makefile.am b/src/Makefile.am index 8592a26..a9977a2 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -83,6 +83,7 @@ libmodest_la_SOURCES=\ modest-datetime-formatter.h \ modest-debug.h \ modest-defs.h \ + modest-defs.c \ modest-dimming-rule.c \ modest-dimming-rule.h \ modest-dimming-rules-group.c \ diff --git a/src/modest-account-mgr.c b/src/modest-account-mgr.c index c3e12dc..368b9c2 100644 --- a/src/modest-account-mgr.c +++ b/src/modest-account-mgr.c @@ -746,7 +746,8 @@ modest_account_mgr_account_names (ModestAccountMgr * self, gboolean only_enabled ModestAccountMgrPrivate *priv; GError *err = NULL; - const size_t prefix_len = strlen (MODEST_ACCOUNT_NAMESPACE "/"); + /* we add 1 for the trailing "/" */ + const size_t prefix_len = strlen (MODEST_ACCOUNT_NAMESPACE) + 1; g_return_val_if_fail (self, NULL); @@ -1277,8 +1278,8 @@ _modest_account_mgr_account_from_key (const gchar *key, gboolean *is_account_key if (is_server_account) *is_server_account = FALSE; - const gchar* account_ns = MODEST_ACCOUNT_NAMESPACE "/"; - const gchar* server_account_ns = MODEST_SERVER_ACCOUNT_NAMESPACE "/"; + const gchar* account_ns = modest_defs_namespace (MODEST_ACCOUNT_SUBNAMESPACE "/"); + const gchar* server_account_ns = modest_defs_namespace (MODEST_SERVER_ACCOUNT_SUBNAMESPACE "/"); gchar *cursor; gchar *account = NULL; @@ -1349,7 +1350,7 @@ _modest_account_mgr_get_account_keyname (const gchar *account_name, const gchar* gboolean server_account) { gchar *retval = NULL; - gchar *namespace = server_account ? MODEST_SERVER_ACCOUNT_NAMESPACE : MODEST_ACCOUNT_NAMESPACE; + gchar *namespace = server_account ? (gchar *) MODEST_SERVER_ACCOUNT_NAMESPACE : (gchar *) MODEST_ACCOUNT_NAMESPACE; gchar *escaped_account_name, *escaped_name; if (!account_name) diff --git a/src/modest-defs.c b/src/modest-defs.c new file mode 100644 index 0000000..6b73933 --- /dev/null +++ b/src/modest-defs.c @@ -0,0 +1,113 @@ +/* Copyright (c) 2009, Nokia Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the Nokia Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include + +static GHashTable *hash_dir = NULL; +static GHashTable *hash_namespace = NULL; + +static gchar *modest_dir = NULL; +static gchar *modest_namespace = NULL; + +static void init_hash_dir (void); +static void init_hash_namespace (void); + +const gchar * +modest_defs_dir (const gchar *string) +{ + const gchar *ret_value; + + if (hash_dir == NULL) init_hash_dir (); + + if (string == NULL) + return (const gchar *) modest_dir; + + ret_value = (const gchar *) g_hash_table_lookup (hash_dir, string); + if (ret_value == NULL) { + ret_value = (const gchar *) g_strconcat (modest_dir, string, NULL); + g_hash_table_insert (hash_dir, (gpointer) string, (gpointer) ret_value); + } + return ret_value; +} + +const gchar * +modest_defs_namespace (const gchar *string) +{ + const gchar *ret_value; + + if (hash_namespace == NULL) init_hash_namespace (); + + if (string == NULL) + return (const gchar *) modest_namespace; + + ret_value = (const gchar *) g_hash_table_lookup (hash_namespace, string); + if (ret_value == NULL) { + ret_value = (const gchar *) g_strconcat (modest_namespace, string, NULL); + g_hash_table_insert (hash_namespace, (gpointer) string, (gpointer) ret_value); + } + return ret_value; +} + +static void +init_hash_dir (void) +{ + const gchar *env_value; + + if (hash_dir != NULL) + return; + + hash_dir = g_hash_table_new (g_str_hash, g_str_equal); + + env_value = g_getenv (MODEST_DIR_ENV); + + if (env_value == NULL || env_value[0] == '\0') { + env_value = MODEST_DEFAULT_DIR; + } + modest_dir = g_strdup (env_value); +} + +static void +init_hash_namespace (void) +{ + const gchar *env_value; + + if (hash_namespace != NULL) + return; + + hash_namespace = g_hash_table_new (g_str_hash, g_str_equal); + + env_value = g_getenv (MODEST_NAMESPACE_ENV); + + if (env_value == NULL || env_value[0] == '\0') { + env_value = MODEST_DEFAULT_NAMESPACE; + } + modest_namespace = g_strdup (env_value); +} + diff --git a/src/modest-defs.h b/src/modest-defs.h index 602d351..b36e856 100644 --- a/src/modest-defs.h +++ b/src/modest-defs.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, Nokia Corporation +/* Copyright (c) 2006-2009, Nokia Corporation * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -34,6 +34,17 @@ #include #include +const gchar *modest_defs_dir (const gchar *string); +const gchar *modest_defs_namespace (const gchar *string); + + +/* Default paths. We set them this way so that we can define on runtime + * different values */ +#define MODEST_DEFAULT_DIR ".modest" +#define MODEST_DEFAULT_NAMESPACE "/apps/modest" +#define MODEST_DIR_ENV "MODEST_DIR" +#define MODEST_NAMESPACE_ENV "MODEST_GCONF_NAMESPACE" + /* Some interesting directories. NOTE, they should be prefixed * with $HOME; Also, except for MODEST_DIR itself, they * need to be prefixed with MODEST_DIR; @@ -41,7 +52,7 @@ * building of dirs from their components. * g_build_dir is your friend */ -#define MODEST_DIR ".modest" +#define MODEST_DIR modest_defs_dir (NULL) #define MODEST_CACHE_DIR "cache" #define MODEST_IMAGES_CACHE_DIR "images" #define MODEST_IMAGES_CACHE_SIZE (1024*1024) @@ -69,7 +80,7 @@ #define MODEST_MMC1_VOLUMEPATH_URI_PREFIX "file://" /* configuration key definitions for modest */ -#define MODEST_CONF_NAMESPACE "/apps/modest" +#define MODEST_CONF_NAMESPACE (modest_defs_namespace (NULL)) /* the mapping files, there are two possibilities; used in modest_maemo_open_mcc_mapping_file */ #define MODEST_MCC_MAPPING PREFIX "/share/modest/provider-data/mcc_mapping" @@ -88,19 +99,20 @@ #endif /* configuration key definitions for modest */ -#define MODEST_ACCOUNT_NAMESPACE MODEST_CONF_NAMESPACE "/accounts" -#define MODEST_CONF_DEFAULT_ACCOUNT MODEST_CONF_NAMESPACE "/default_account" +#define MODEST_ACCOUNT_SUBNAMESPACE "/accounts" +#define MODEST_ACCOUNT_NAMESPACE (modest_defs_namespace (MODEST_ACCOUNT_SUBNAMESPACE)) +#define MODEST_CONF_DEFAULT_ACCOUNT (modest_defs_namespace ("/default_account")) /* Not used: #define MODEST_CONF_CONNECT_AT_STARTUP MODEST_CONF_NAMESPACE "/connect_at_startup" */ -#define MODEST_CONF_SHOW_CC MODEST_CONF_NAMESPACE "/show_cc" -#define MODEST_CONF_SHOW_BCC MODEST_CONF_NAMESPACE "/show_bcc" +#define MODEST_CONF_SHOW_CC (modest_defs_namespace ("/show_cc")) +#define MODEST_CONF_SHOW_BCC (modest_defs_namespace ("/show_bcc")) /* This is the alarmd cookie, obtained from alarm_event_add(), * which apparently remains valid between application instances. * We store it so that we can remove it later. */ -#define MODEST_CONF_ALARM_ID MODEST_CONF_NAMESPACE "/alarm_id" +#define MODEST_CONF_ALARM_ID (modest_defs_namespace ("/alarm_id")) /* * in the maemo case, we try to replace this @@ -111,11 +123,12 @@ /* the name of the device; in case of maemo this is set and updated * using dbus; see modest-maemo-utils.[ch] */ -#define MODEST_CONF_DEVICE_NAME MODEST_CONF_NAMESPACE "/device_name" +#define MODEST_CONF_DEVICE_NAME (modest_defs_namespace ("/device_name")) /* place for widget settings */ -#define MODEST_CONF_WIDGET_NAMESPACE MODEST_CONF_NAMESPACE "/widgets" +#define MODEST_CONF_WIDGET_SUBNAMESPACE "/widgets" +#define MODEST_CONF_WIDGET_NAMESPACE (modest_defs_namespace (MODEST_CONF_WIDGET_SUBNAMESPACE)) #define MODEST_CONF_FOLDER_VIEW_KEY "folder-view" #define MODEST_CONF_HEADER_VIEW_KEY "header-view" #define MODEST_CONF_MAIN_PANED_KEY "modest-main-paned" @@ -125,15 +138,28 @@ #define MODEST_CONF_EDIT_WINDOW_KEY "modest-edit-msg-window" #define MODEST_CONF_MSG_VIEW_WINDOW_KEY "modest-msg-view-window" -#define MODEST_SERVER_ACCOUNT_NAMESPACE MODEST_CONF_NAMESPACE "/" "server_accounts" +#define MODEST_SERVER_ACCOUNT_SUBNAMESPACE "/server_accounts" +#define MODEST_SERVER_ACCOUNT_NAMESPACE (modest_defs_namespace (MODEST_SERVER_ACCOUNT_SUBNAMESPACE)) /* show toolbar settings */ -#define MODEST_CONF_MAIN_WINDOW_SHOW_TOOLBAR MODEST_CONF_WIDGET_NAMESPACE "/" MODEST_CONF_MAIN_WINDOW_KEY "/show_toolbar" -#define MODEST_CONF_EDIT_WINDOW_SHOW_TOOLBAR MODEST_CONF_WIDGET_NAMESPACE "/" MODEST_CONF_EDIT_WINDOW_KEY "/show_toolbar" -#define MODEST_CONF_MSG_VIEW_WINDOW_SHOW_TOOLBAR MODEST_CONF_WIDGET_NAMESPACE "/" MODEST_CONF_MSG_VIEW_WINDOW_KEY "/show_toolbar" -#define MODEST_CONF_MAIN_WINDOW_SHOW_TOOLBAR_FULLSCREEN MODEST_CONF_WIDGET_NAMESPACE "/" MODEST_CONF_MAIN_WINDOW_KEY "/show_toolbar_fullscreen" -#define MODEST_CONF_EDIT_WINDOW_SHOW_TOOLBAR_FULLSCREEN MODEST_CONF_WIDGET_NAMESPACE "/" MODEST_CONF_EDIT_WINDOW_KEY "/show_toolbar_fullscreen" -#define MODEST_CONF_MSG_VIEW_WINDOW_SHOW_TOOLBAR_FULLSCREEN MODEST_CONF_WIDGET_NAMESPACE "/" MODEST_CONF_MSG_VIEW_WINDOW_KEY "/show_toolbar_fullscreen" +#define MODEST_CONF_MAIN_WINDOW_SHOW_TOOLBAR \ + (modest_defs_namespace (MODEST_CONF_WIDGET_SUBNAMESPACE "/" \ + MODEST_CONF_MAIN_WINDOW_KEY "/show_toolbar")) +#define MODEST_CONF_EDIT_WINDOW_SHOW_TOOLBAR \ + (modest_defs_namespace (MODEST_CONF_WIDGET_SUBNAMESPACE "/" \ + MODEST_CONF_EDIT_WINDOW_KEY "/show_toolbar")) +#define MODEST_CONF_MSG_VIEW_WINDOW_SHOW_TOOLBAR \ + (modest_defs_namespace (MODEST_CONF_WIDGET_SUBNAMESPACE "/" \ + MODEST_CONF_MSG_VIEW_WINDOW_KEY "/show_toolbar")) +#define MODEST_CONF_MAIN_WINDOW_SHOW_TOOLBAR_FULLSCREEN \ + (modest_defs_namespace (MODEST_CONF_WIDGET_SUBNAMESPACE "/" \ + MODEST_CONF_MAIN_WINDOW_KEY "/show_toolbar_fullscreen")) +#define MODEST_CONF_EDIT_WINDOW_SHOW_TOOLBAR_FULLSCREEN \ + (modest_defs_namespace (MODEST_CONF_WIDGET_SUBNAMESPACE "/" \ + MODEST_CONF_EDIT_WINDOW_KEY "/show_toolbar_fullscreen")) +#define MODEST_CONF_MSG_VIEW_WINDOW_SHOW_TOOLBAR_FULLSCREEN \ + (modest_defs_namespace (MODEST_CONF_WIDGET_SUBNAMESPACE "/" \ + MODEST_CONF_MSG_VIEW_WINDOW_KEY "/show_toolbar_fullscreen")) /* per-account data */ #define MODEST_ACCOUNT_DISPLAY_NAME "display_name" /* string */ @@ -146,7 +172,8 @@ * alernating between a connection name, followed by a corresponding server account name. * That's not pretty, but it's nicer than dealing with escaping of a = separator if * putting them both in one string. */ -#define MODEST_CONF_CONNECTION_SPECIFIC_SMTP_LIST MODEST_CONF_NAMESPACE "/specific_smtp" /* one list used for all accounts. */ +#define MODEST_CONF_CONNECTION_SPECIFIC_SMTP_LIST \ + (modest_defs_namespace ("/specific_smtp")) /* one list used for all accounts. */ #define MODEST_ACCOUNT_USE_CONNECTION_SPECIFIC_SMTP "use_specific_smtp" /* boolean */ /* server account keys */ @@ -192,20 +219,20 @@ #define MODEST_FILE_FORMAT_FORMATTED_TEXT 1 /* Global settings */ -#define MODEST_CONF_AUTO_UPDATE MODEST_CONF_NAMESPACE "/auto_update" /* bool */ -#define MODEST_CONF_UPDATE_WHEN_CONNECTED_BY MODEST_CONF_NAMESPACE "/update_when_connected_by" /* int */ -#define MODEST_CONF_UPDATE_INTERVAL MODEST_CONF_NAMESPACE "/update_interval" /* int */ -#define MODEST_CONF_MSG_SIZE_LIMIT MODEST_CONF_NAMESPACE "/msg_size_limit" /* int */ -#define MODEST_CONF_PLAY_SOUND_MSG_ARRIVE MODEST_CONF_NAMESPACE "/play_sound_msg_arrive" /* bool */ -#define MODEST_CONF_PREFER_FORMATTED_TEXT MODEST_CONF_NAMESPACE "/prefer_formatted_text" /* bool */ -#define MODEST_CONF_REPLY_TYPE MODEST_CONF_NAMESPACE "/reply_type" /* int */ -#define MODEST_CONF_FORWARD_TYPE MODEST_CONF_NAMESPACE "/forward_type" /* int */ +#define MODEST_CONF_AUTO_UPDATE (modest_defs_namespace ("/auto_update")) /* bool */ +#define MODEST_CONF_UPDATE_WHEN_CONNECTED_BY (modest_defs_namespace ("/update_when_connected_by")) /* int */ +#define MODEST_CONF_UPDATE_INTERVAL (modest_defs_namespace ("/update_interval")) /* int */ +#define MODEST_CONF_MSG_SIZE_LIMIT (modest_defs_namespace ("/msg_size_limit")) /* int */ +#define MODEST_CONF_PLAY_SOUND_MSG_ARRIVE (modest_defs_namespace ("/play_sound_msg_arrive")) /* bool */ +#define MODEST_CONF_PREFER_FORMATTED_TEXT (modest_defs_namespace ("/prefer_formatted_text")) /* bool */ +#define MODEST_CONF_REPLY_TYPE (modest_defs_namespace ("/reply_type")) /* int */ +#define MODEST_CONF_FORWARD_TYPE (modest_defs_namespace ("/forward_type")) /* int */ /* hidden global settings */ -#define MODEST_CONF_FETCH_HTML_EXTERNAL_IMAGES MODEST_CONF_NAMESPACE "/fetch_external_images" /* bool */ +#define MODEST_CONF_FETCH_HTML_EXTERNAL_IMAGES (modest_defs_namespace ("/fetch_external_images")) /* bool */ /* Notification ids */ -#define MODEST_CONF_NOTIFICATION_IDS MODEST_CONF_NAMESPACE "/notification_ids" /* list of ints */ +#define MODEST_CONF_NOTIFICATION_IDS (modest_defs_namespace ("/notification_ids")) /* list of ints */ #define MODEST_EXAMPLE_EMAIL_ADDRESS "first.last@example.com" diff --git a/tests/check_modest-conf.c b/tests/check_modest-conf.c index 2a08c90..45786a3 100644 --- a/tests/check_modest-conf.c +++ b/tests/check_modest-conf.c @@ -46,8 +46,8 @@ END_TEST START_TEST (test_modest_conf_store_retrieve_string) { ModestConf *conf = modest_conf_new (); - const gchar *key = MODEST_CONF_NAMESPACE "/teststring"; - const gchar *key2 = MODEST_CONF_NAMESPACE "/teststring2"; + const gchar *key = modest_defs_namespace ("/teststring"); + const gchar *key2 = modest_defs_namespace ("/teststring2"); const gchar *data = "hello in Korean: 안녕하세요"; gchar *data2; @@ -86,8 +86,8 @@ END_TEST START_TEST (test_modest_conf_store_retrieve_bool) { ModestConf *conf = modest_conf_new (); - const gchar *key = MODEST_CONF_NAMESPACE "/teststring"; - const gchar *key2 = MODEST_CONF_NAMESPACE "/teststring2"; + const gchar *key = modest_defs_namespace ("/teststring"); + const gchar *key2 = modest_defs_namespace ("/teststring2"); gboolean data = TRUE, data2; @@ -121,8 +121,8 @@ END_TEST START_TEST (test_modest_conf_store_retrieve_int) { ModestConf *conf = modest_conf_new (); - const gchar *key = MODEST_CONF_NAMESPACE "/teststring"; - const gchar *key2 = MODEST_CONF_NAMESPACE "/teststring2"; + const gchar *key = modest_defs_namespace ("/teststring"); + const gchar *key2 = modest_defs_namespace ("/teststring2"); gint data = 99, data2;