diff options
Diffstat (limited to 'libmateweather/mateweather-mateconf.c')
-rw-r--r-- | libmateweather/mateweather-mateconf.c | 310 |
1 files changed, 310 insertions, 0 deletions
diff --git a/libmateweather/mateweather-mateconf.c b/libmateweather/mateweather-mateconf.c new file mode 100644 index 0000000..f8f6f1b --- /dev/null +++ b/libmateweather/mateweather-mateconf.c @@ -0,0 +1,310 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* + * mateweather-mateconf.c: MateConf interaction methods for mateweather. + * + * Copyright (C) 2005 Philip Langdale, Papadimitriou Spiros + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, see + * <http://www.gnu.org/licenses/>. + * + * Authors: + * Philip Langdale <[email protected]> + * Papadimitriou Spiros <[email protected]> + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <string.h> + +#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE +#include "mateweather-mateconf.h" +#include "weather-priv.h" + +struct _MateWeatherMateConf +{ + MateConfClient *mateconf; + char *prefix; +}; + + +MateWeatherMateConf * +mateweather_mateconf_new (const char *prefix) +{ + MateWeatherMateConf *ctx = g_new0 (MateWeatherMateConf, 1); + ctx->mateconf = mateconf_client_get_default (); + ctx->prefix = g_strdup (prefix); + + return ctx; +} + + +void +mateweather_mateconf_free (MateWeatherMateConf *ctx) +{ + if (!ctx) + return; + + g_object_unref (ctx->mateconf); + g_free (ctx->prefix); + g_free (ctx); +} + + +MateConfClient * +mateweather_mateconf_get_client (MateWeatherMateConf *ctx) +{ + g_return_val_if_fail (ctx != NULL, NULL); + return ctx->mateconf; +} + + +gchar * +mateweather_mateconf_get_full_key (MateWeatherMateConf *ctx, + const gchar *key) +{ + g_return_val_if_fail (ctx != NULL, NULL); + g_return_val_if_fail (key != NULL, NULL); + + return g_strdup_printf ("%s/%s", ctx->prefix, key); +} + +void +mateweather_mateconf_set_bool (MateWeatherMateConf *ctx, + const gchar *key, + gboolean the_bool, + GError **opt_error) +{ + gchar *full_key; + + g_return_if_fail (ctx != NULL); + g_return_if_fail (key != NULL); + g_return_if_fail (opt_error == NULL || *opt_error == NULL); + + full_key = mateweather_mateconf_get_full_key (ctx, key); + mateconf_client_set_bool (ctx->mateconf, full_key, the_bool, opt_error); + g_free (full_key); +} + +void +mateweather_mateconf_set_int (MateWeatherMateConf *ctx, + const gchar *key, + gint the_int, + GError **opt_error) +{ + gchar *full_key; + + g_return_if_fail (ctx != NULL); + g_return_if_fail (key != NULL); + g_return_if_fail (opt_error == NULL || *opt_error == NULL); + + full_key = mateweather_mateconf_get_full_key (ctx, key); + mateconf_client_set_int (ctx->mateconf, full_key, the_int, opt_error); + g_free (full_key); +} + +void +mateweather_mateconf_set_string (MateWeatherMateConf *ctx, + const gchar *key, + const gchar *the_string, + GError **opt_error) +{ + gchar *full_key; + + g_return_if_fail (ctx != NULL); + g_return_if_fail (key != NULL); + g_return_if_fail (opt_error == NULL || *opt_error == NULL); + + full_key = mateweather_mateconf_get_full_key (ctx, key); + mateconf_client_set_string (ctx->mateconf, full_key, the_string, opt_error); + g_free (full_key); +} + +gboolean +mateweather_mateconf_get_bool (MateWeatherMateConf *ctx, + const gchar *key, + GError **opt_error) +{ + gchar *full_key; + gboolean ret; + + g_return_val_if_fail (ctx != NULL, FALSE); + g_return_val_if_fail (key != NULL, FALSE); + g_return_val_if_fail (opt_error == NULL || *opt_error == NULL, FALSE); + + full_key = mateweather_mateconf_get_full_key (ctx, key); + ret = mateconf_client_get_bool (ctx->mateconf, full_key, opt_error); + g_free (full_key); + return ret; +} + +gint +mateweather_mateconf_get_int (MateWeatherMateConf *ctx, + const gchar *key, + GError **opt_error) +{ + gchar *full_key; + gint ret; + + g_return_val_if_fail (ctx != NULL, 0); + g_return_val_if_fail (key != NULL, 0); + g_return_val_if_fail (opt_error == NULL || *opt_error == NULL, 0); + + full_key = mateweather_mateconf_get_full_key (ctx, key); + ret = mateconf_client_get_int (ctx->mateconf, full_key, opt_error); + g_free (full_key); + return ret; +} + +gchar * +mateweather_mateconf_get_string (MateWeatherMateConf *ctx, + const gchar *key, + GError **opt_error) +{ + gchar *full_key; + gchar *ret; + + g_return_val_if_fail (ctx != NULL, NULL); + g_return_val_if_fail (key != NULL, NULL); + g_return_val_if_fail (opt_error == NULL || *opt_error == NULL, NULL); + + full_key = mateweather_mateconf_get_full_key (ctx, key); + ret = mateconf_client_get_string (ctx->mateconf, full_key, opt_error); + g_free (full_key); + return ret; +} + + +WeatherLocation * +mateweather_mateconf_get_location (MateWeatherMateConf *ctx) +{ + WeatherLocation *location; + gchar *name, *code, *zone, *radar, *coordinates; + + g_return_val_if_fail (ctx != NULL, NULL); + + name = mateweather_mateconf_get_string (ctx, "location4", NULL); + if (!name) + { + /* TRANSLATOR: Change this to the default location name, + * used when you first start the Weather Applet. This is + * the common localised name that corresponds to + * the location code (DEFAULT_CODE) you will put on the next message + * For example, for the Greek locale, we set this to "Athens", the + * capital city and we write it in Greek. It's important to translate + * this name. + * + * If you do not require a DEFAULT_LOCATION, set this to + * "DEFAULT_LOCATION". + */ + if (strcmp ("DEFAULT_LOCATION", _("DEFAULT_LOCATION"))) + name = g_strdup (_("DEFAULT_LOCATION")); + else + name = g_strdup ("Pittsburgh"); + } + + code = mateweather_mateconf_get_string (ctx, "location1", NULL); + if (!code) + { + /* TRANSLATOR: Change this to the code of your default location that + * corresponds to the DEFAULT_LOCATION name you put above. This is + * normally a four-letter (ICAO) code and can be found in + * http://git.gnome.org/cgit/libmateweather/plain/data/Locations.xml.in + * NB. The web page is over 1.7MB in size. + * Pick a default location like a capital city so that it would be ok + * for more of your users. For example, for Greek, we use "LGAV" for + * the capital city, Athens. + * + * If you do not require a DEFAULT_CODE, set this to "DEFAULT_CODE". + */ + if (strcmp ("DEFAULT_CODE", _("DEFAULT_CODE"))) + code = g_strdup (_("DEFAULT_CODE")); + else + code = g_strdup ("KPIT"); + } + + zone = mateweather_mateconf_get_string (ctx, "location2", NULL); + if (!zone) + { + /* TRANSLATOR: Change this to the zone of your default location that + * corresponds to the DEFAULT_LOCATION and DEFAULT_CODE you put above. + * Normally, US and Canada locations have zones while the rest do not. + * Check + * http://git.gnome.org/cgit/libmateweather/plain/data/Locations.xml.in + * as any zone you put here must also be present in the Locations.xml + * file. + * + * If your default location does not have a zone, set this to + * "DEFAULT_ZONE". + */ + if (strcmp ("DEFAULT_ZONE", _("DEFAULT_ZONE"))) + zone = g_strdup (_("DEFAULT_ZONE" )); + else + zone = g_strdup ("PAZ021"); + } + + radar = mateweather_mateconf_get_string (ctx, "location3", NULL); + if (!radar) + { + /* TRANSLATOR: Change this to the radar of your default location that + * corresponds to the DEFAULT_LOCATION and DEFAULT_CODE you put above. + * Normally, US and Canada locations have radar names while the rest do + * not. Check + * http://git.gnome.org/cgit/libmateweather/plain/data/Locations.xml.in + * as any radar you put here must also be present in the Locations.xml + * file. + * + * If your default location does not have a radar, set this to " " + * (or space). + * If you do not have a default location, set this to DEFAULT_RADAR. + */ + if (strcmp ("DEFAULT_RADAR", _("DEFAULT_RADAR"))) + radar = g_strdup (_("DEFAULT_RADAR")); + else + radar = g_strdup ("pit"); + } + + coordinates = mateweather_mateconf_get_string (ctx, "coordinates", NULL); + if (!coordinates) + { + /* TRANSLATOR: Change this to the coordinates of your default location + * that corresponds to the DEFAULT_LOCATION and DEFAULT_CODE you put + * above. Check + * http://git.gnome.org/cgit/libmateweather/plain/data/Locations.xml.in + * as any coordinates you put here must also be present in the + * Locations.xml file. + * + * If your default location does not have known coordinates, set this + * to " " (or space). + * If you do not have a default location, set this to + * DEFAULT_COORDINATES. + */ + if (strcmp ("DEFAULT_COORDINATES", _("DEFAULT_COORDINATES"))) + coordinates = g_strdup (_("DEFAULT_COORDINATES")); + else + coordinates = g_strdup ("40-32N 080-13W"); + } + + location = weather_location_new (name, code, zone, radar, coordinates, + NULL, NULL); + + g_free (name); + g_free (code); + g_free (zone); + g_free (radar); + g_free (coordinates); + + return location; +} |