/* -*- 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 * . * * Authors: * Philip Langdale * Papadimitriou Spiros */ #ifdef HAVE_CONFIG_H #include #endif #include #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; }