00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifdef HAVE_CONFIG_H
00019 # include "config.h"
00020 #endif
00021
00022 #include "configdb.h"
00023 #include <libmcs/mcs.h>
00024 #include <stdlib.h>
00025 #include <string.h>
00026
00027
00028 #define RCFILE_DEFAULT_SECTION_NAME "audacious"
00029
00030 static gboolean mcs_initted = FALSE;
00031 static mcs_handle_t * config_handle = NULL;
00032 static gint config_refcount = 0;
00033
00039 mcs_handle_t *
00040 cfg_db_open()
00041 {
00042 if (!mcs_initted)
00043 {
00044 mcs_init();
00045 mcs_initted = TRUE;
00046 }
00047
00048 if (! config_handle)
00049 {
00050 config_handle = mcs_new (RCFILE_DEFAULT_SECTION_NAME);
00051
00052 if (! config_handle)
00053 {
00054 fprintf (stderr, "MCS failure. Configuration will not be saved.\n");
00055 return NULL;
00056 }
00057 }
00058
00059 config_refcount ++;
00060 return config_handle;
00061 }
00062
00067 void cfg_db_close (mcs_handle_t * handle)
00068 {
00069 g_return_if_fail (handle && handle == config_handle);
00070 g_return_if_fail (config_refcount > 0);
00071 config_refcount --;
00072 }
00073
00074 void cfg_db_flush (void)
00075 {
00076 if (! config_handle)
00077 return;
00078
00079 g_return_if_fail (! config_refcount);
00080 mcs_destroy (config_handle);
00081 config_handle = NULL;
00082 }
00083
00093 gboolean
00094 cfg_db_get_string(mcs_handle_t * db,
00095 const gchar * section,
00096 const gchar * key,
00097 gchar ** value)
00098 {
00099 g_return_val_if_fail (db && db == config_handle, FALSE);
00100
00101 if (!section)
00102 section = RCFILE_DEFAULT_SECTION_NAME;
00103
00104 if (! mcs_get_string (db, section, key, value))
00105 return FALSE;
00106
00107
00108 if (! strcmp (* value, "(null)"))
00109 {
00110 * value = NULL;
00111 return FALSE;
00112 }
00113
00114 return TRUE;
00115 }
00116
00126 gboolean
00127 cfg_db_get_int(mcs_handle_t * db,
00128 const gchar * section, const gchar * key, gint * value)
00129 {
00130 g_return_val_if_fail (db && db == config_handle, FALSE);
00131
00132 if (!section)
00133 section = RCFILE_DEFAULT_SECTION_NAME;
00134
00135 return mcs_get_int(db, section, key, value);
00136 }
00137
00147 gboolean
00148 cfg_db_get_bool(mcs_handle_t * db,
00149 const gchar * section,
00150 const gchar * key,
00151 gboolean * value)
00152 {
00153 g_return_val_if_fail (db && db == config_handle, FALSE);
00154
00155 if (!section)
00156 section = RCFILE_DEFAULT_SECTION_NAME;
00157
00158 return mcs_get_bool(db, section, key, value);
00159 }
00160
00171 gboolean
00172 cfg_db_get_float(mcs_handle_t * db,
00173 const gchar * section,
00174 const gchar * key,
00175 gfloat * value)
00176 {
00177 g_return_val_if_fail (db && db == config_handle, FALSE);
00178
00179 if (!section)
00180 section = RCFILE_DEFAULT_SECTION_NAME;
00181
00182 return mcs_get_float(db, section, key, value);
00183 }
00184
00195 gboolean
00196 cfg_db_get_double(mcs_handle_t * db,
00197 const gchar * section,
00198 const gchar * key,
00199 gdouble * value)
00200 {
00201 g_return_val_if_fail (db && db == config_handle, FALSE);
00202
00203 if (!section)
00204 section = RCFILE_DEFAULT_SECTION_NAME;
00205
00206 return mcs_get_double(db, section, key, value);
00207 }
00208
00218 void
00219 cfg_db_set_string(mcs_handle_t * db,
00220 const gchar * section,
00221 const gchar * key,
00222 const gchar * value)
00223 {
00224 g_return_if_fail (db && db == config_handle);
00225
00226 if (!section)
00227 section = RCFILE_DEFAULT_SECTION_NAME;
00228
00229 if (value == NULL)
00230 mcs_unset_key (db, section, key);
00231 else
00232 mcs_set_string (db, section, key, value);
00233 }
00234
00244 void
00245 cfg_db_set_int(mcs_handle_t * db,
00246 const gchar * section,
00247 const gchar * key,
00248 gint value)
00249 {
00250 g_return_if_fail (db && db == config_handle);
00251
00252 if (!section)
00253 section = RCFILE_DEFAULT_SECTION_NAME;
00254
00255 mcs_set_int(db, section, key, value);
00256 }
00257
00267 void
00268 cfg_db_set_bool(mcs_handle_t * db,
00269 const gchar * section,
00270 const gchar * key,
00271 gboolean value)
00272 {
00273 g_return_if_fail (db && db == config_handle);
00274
00275 if (!section)
00276 section = RCFILE_DEFAULT_SECTION_NAME;
00277
00278 mcs_set_bool(db, section, key, value);
00279 }
00280
00290 void
00291 cfg_db_set_float(mcs_handle_t * db,
00292 const gchar * section,
00293 const gchar * key,
00294 gfloat value)
00295 {
00296 g_return_if_fail (db && db == config_handle);
00297
00298 if (!section)
00299 section = RCFILE_DEFAULT_SECTION_NAME;
00300
00301 mcs_set_float(db, section, key, value);
00302 }
00303
00313 void
00314 cfg_db_set_double(mcs_handle_t * db,
00315 const gchar * section,
00316 const gchar * key,
00317 gdouble value)
00318 {
00319 g_return_if_fail (db && db == config_handle);
00320
00321 if (!section)
00322 section = RCFILE_DEFAULT_SECTION_NAME;
00323
00324 mcs_set_double(db, section, key, value);
00325 }
00326
00334 void
00335 cfg_db_unset_key(mcs_handle_t * db,
00336 const gchar * section,
00337 const gchar * key)
00338 {
00339 g_return_if_fail (db && db == config_handle);
00340 g_return_if_fail(key != NULL);
00341
00342 if (!section)
00343 section = RCFILE_DEFAULT_SECTION_NAME;
00344
00345 mcs_unset_key(db, section, key);
00346 }