/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ /* weather.h - Public header for weather server functions. * * This program 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 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 * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see * . */ #ifndef __WEATHER_H_ #define __WEATHER_H_ #if !(defined(IN_GWEATHER_H) || defined(GWEATHER_COMPILATION)) #error "gweather-weather.h must not be included individually, include gweather.h instead" #endif #include #include #include G_BEGIN_DECLS /** * GWeatherProvider: * @GWEATHER_PROVIDER_NONE: no provider, no weather information available * @GWEATHER_PROVIDER_METAR: METAR office, providing current conditions worldwide * @GWEATHER_PROVIDER_IWIN: US weather office, providing 7 days of forecast * @GWEATHER_PROVIDER_YAHOO: Yahoo Weather Service, removed in 3.27.1 * @GWEATHER_PROVIDER_MET_NO: MET.no service, worldwide but requires attribution * @GWEATHER_PROVIDER_OWM: OpenWeatherMap, worldwide and possibly more reliable, but requires attribution and is limited in the number of queries * @GWEATHER_PROVIDER_ALL: enable all available providers */ typedef enum { /*< flags, underscore_name=gweather_provider >*/ GWEATHER_PROVIDER_NONE = 0, GWEATHER_PROVIDER_METAR = 1, GWEATHER_PROVIDER_IWIN = 1 << 2, GWEATHER_PROVIDER_YAHOO = 1 << 3, GWEATHER_PROVIDER_MET_NO = 1 << 4, GWEATHER_PROVIDER_OWM = 1 << 5, GWEATHER_PROVIDER_ALL = (GWEATHER_PROVIDER_METAR | GWEATHER_PROVIDER_IWIN | GWEATHER_PROVIDER_YAHOO | GWEATHER_PROVIDER_MET_NO | GWEATHER_PROVIDER_OWM) } GWeatherProvider; #define GWEATHER_TYPE_INFO (gweather_info_get_type ()) G_DECLARE_FINAL_TYPE(GWeatherInfo, gweather_info, GWEATHER, INFO, GObject) struct _GWeatherInfoClass { /*< private >*/ GObjectClass parent_class; /*< protected >*/ void (*updated) (GWeatherInfo *info); }; GWeatherInfo * gweather_info_new (GWeatherLocation *location); void gweather_info_update (GWeatherInfo *info); void gweather_info_abort (GWeatherInfo *info); void gweather_info_store_cache (void); GWeatherProvider gweather_info_get_enabled_providers (GWeatherInfo *info); void gweather_info_set_enabled_providers (GWeatherInfo *info, GWeatherProvider providers); gboolean gweather_info_is_valid (GWeatherInfo *info); gboolean gweather_info_network_error (GWeatherInfo *info); const GWeatherLocation * gweather_info_get_location (GWeatherInfo *info); void gweather_info_set_location (GWeatherInfo *info, GWeatherLocation *location); gchar * gweather_info_get_location_name (GWeatherInfo *info); gchar * gweather_info_get_update (GWeatherInfo *info); gchar * gweather_info_get_sky (GWeatherInfo *info); gchar * gweather_info_get_conditions (GWeatherInfo *info); gchar * gweather_info_get_temp (GWeatherInfo *info); gchar * gweather_info_get_temp_min (GWeatherInfo *info); gchar * gweather_info_get_temp_max (GWeatherInfo *info); gchar * gweather_info_get_dew (GWeatherInfo *info); gchar * gweather_info_get_humidity (GWeatherInfo *info); gchar * gweather_info_get_wind (GWeatherInfo *info); gchar * gweather_info_get_pressure (GWeatherInfo *info); gchar * gweather_info_get_visibility (GWeatherInfo *info); gchar * gweather_info_get_apparent (GWeatherInfo *info); gchar * gweather_info_get_sunrise (GWeatherInfo *info); gchar * gweather_info_get_sunset (GWeatherInfo *info); GSList * gweather_info_get_forecast_list (GWeatherInfo *info); GdkPixbufAnimation * gweather_info_get_radar (GWeatherInfo *info); const gchar *gweather_info_get_attribution (GWeatherInfo *info); gchar * gweather_info_get_temp_summary (GWeatherInfo *info); gchar * gweather_info_get_weather_summary (GWeatherInfo *info); const gchar * gweather_info_get_icon_name (GWeatherInfo *info); const gchar * gweather_info_get_symbolic_icon_name (GWeatherInfo *info); gint gweather_info_next_sun_event (GWeatherInfo *info); gboolean gweather_info_is_daytime (GWeatherInfo *info); /* values retrieving functions */ /** * GWeatherWindDirection: * @GWEATHER_WIND_INVALID: value not available * @GWEATHER_WIND_VARIABLE: variable throughout the day * @GWEATHER_WIND_N: north * @GWEATHER_WIND_NNE: north-north-east * @GWEATHER_WIND_NE: north-east * @GWEATHER_WIND_ENE: east-north-east * @GWEATHER_WIND_E: east * @GWEATHER_WIND_ESE: east-south-east * @GWEATHER_WIND_SE: south-east * @GWEATHER_WIND_SSE: south-south-east * @GWEATHER_WIND_S: south * @GWEATHER_WIND_SSW: south-south-west * @GWEATHER_WIND_SW: south-west * @GWEATHER_WIND_WSW: west-south-west * @GWEATHER_WIND_W: west * @GWEATHER_WIND_WNW: west-north-west * @GWEATHER_WIND_NW: north-west * @GWEATHER_WIND_NNW: north-north-west * @GWEATHER_WIND_LAST: maximum value for the enumeration * * The direction of the prevailing wind. Composite values * such as north-north-east indicate a direction between the * two component value (north and north-east). */ typedef enum { /*< underscore_name=gweather_wind_direction >*/ GWEATHER_WIND_INVALID = -1, GWEATHER_WIND_VARIABLE, GWEATHER_WIND_N, GWEATHER_WIND_NNE, GWEATHER_WIND_NE, GWEATHER_WIND_ENE, GWEATHER_WIND_E, GWEATHER_WIND_ESE, GWEATHER_WIND_SE, GWEATHER_WIND_SSE, GWEATHER_WIND_S, GWEATHER_WIND_SSW, GWEATHER_WIND_SW, GWEATHER_WIND_WSW, GWEATHER_WIND_W, GWEATHER_WIND_WNW, GWEATHER_WIND_NW, GWEATHER_WIND_NNW, GWEATHER_WIND_LAST } GWeatherWindDirection; const gchar * gweather_wind_direction_to_string (GWeatherWindDirection wind); const gchar * gweather_wind_direction_to_string_full (GWeatherWindDirection wind, GWeatherFormatOptions options); /** * GWeatherSky: * @GWEATHER_SKY_INVALID: value not available * @GWEATHER_SKY_CLEAR: sky completely clear, no clouds visible * @GWEATHER_SKY_BROKEN: sky mostly clear, few clouds * @GWEATHER_SKY_SCATTERED: sky mostly clear, patches of clouds * @GWEATHER_SKY_FEW: few clouds, sky cloudy but patches of sky visible * @GWEATHER_SKY_OVERCAST: sky completely clouded, sun not visible * @GWEATHER_SKY_LAST: the maximum value for the enumeration * * The sky and cloud visibility. In general it is discouraged to * use this value directly to compute the forecast icon: applications * should instead use gweather_info_get_icon_name() or * gweather_info_get_symbolic_icon_name(). */ typedef enum { /*< underscore_name=gweather_sky >*/ GWEATHER_SKY_INVALID = -1, GWEATHER_SKY_CLEAR, GWEATHER_SKY_BROKEN, GWEATHER_SKY_SCATTERED, GWEATHER_SKY_FEW, GWEATHER_SKY_OVERCAST, GWEATHER_SKY_LAST } GWeatherSky; const gchar * gweather_sky_to_string (GWeatherSky sky); const gchar * gweather_sky_to_string_full (GWeatherSky sky, GWeatherFormatOptions options); /** * GWeatherConditionPhenomenon: * @GWEATHER_PHENOMENON_INVALID: value not available * @GWEATHER_PHENOMENON_NONE: no significant phenomenon * * The current or forecasted significant phenomenon. */ typedef enum { /*< underscore_name=gweather_phenomenon >*/ GWEATHER_PHENOMENON_INVALID = -1, GWEATHER_PHENOMENON_NONE, GWEATHER_PHENOMENON_DRIZZLE, GWEATHER_PHENOMENON_RAIN, GWEATHER_PHENOMENON_SNOW, GWEATHER_PHENOMENON_SNOW_GRAINS, GWEATHER_PHENOMENON_ICE_CRYSTALS, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_PHENOMENON_HAIL, GWEATHER_PHENOMENON_SMALL_HAIL, GWEATHER_PHENOMENON_UNKNOWN_PRECIPITATION, GWEATHER_PHENOMENON_MIST, GWEATHER_PHENOMENON_FOG, GWEATHER_PHENOMENON_SMOKE, GWEATHER_PHENOMENON_VOLCANIC_ASH, GWEATHER_PHENOMENON_SAND, GWEATHER_PHENOMENON_HAZE, GWEATHER_PHENOMENON_SPRAY, GWEATHER_PHENOMENON_DUST, GWEATHER_PHENOMENON_SQUALL, GWEATHER_PHENOMENON_SANDSTORM, GWEATHER_PHENOMENON_DUSTSTORM, GWEATHER_PHENOMENON_FUNNEL_CLOUD, GWEATHER_PHENOMENON_TORNADO, GWEATHER_PHENOMENON_DUST_WHIRLS, GWEATHER_PHENOMENON_LAST } GWeatherConditionPhenomenon; /** * GWeatherConditionQualifier: * @GWEATHER_QUALIFIER_INVALID: value not available * @GWEATHER_QUALIFIER_NONE: no qualifier for the phenomenon * @GWEATHER_QUALIFIER_VICINITY: phenomenon happening in the proximity * of the location, not in the actual location * @GWEATHER_QUALIFIER_LIGHT: phenomenon is light or predicted to be light * @GWEATHER_QUALIFIER_MODERATE: phenomenon is moderate or predicted to be * moderate * @GWEATHER_QUALIFIER_HEAVY: phenomenon is heavy or predicted to be heavy * @GWEATHER_QUALIFIER_SHALLOW: shallow fog (only valid with * %GWEATHER_PHENOMENON_FOG) * @GWEATHER_QUALIFIER_PATCHES: patches of fog (only valid with * %GWEATHER_PHENOMENON_FOG) * @GWEATHER_QUALIFIER_PARTIAL: partial fog (only valid with * %GWEATHER_PHENOMENON_FOG) * @GWEATHER_QUALIFIER_THUNDERSTORM: phenomenon will be a thunderstorm * and/or will include lightning * @GWEATHER_QUALIFIER_BLOWING: phenomenon is blowing (valid with * %GWEATHER_PHENOMENON_SNOW, %GWEATHER_PHENOMENON_SAND, * %GWEATHER_PHENOMENON_SPRAY, %GWEATHER_PHENOMENON_DUST) * @GWEATHER_QUALIFIER_SHOWERS: phenomenon is heavy and involves showers * @GWEATHER_QUALIFIER_DRIFTING: phenomenon is moving across (valid * with %GWEATHER_PHENOMENON_SAND and * %GWEATHER_PHENOMENON_DUST) * @GWEATHER_QUALIFIER_FREEZING: phenomenon is freezing and involves ice * @GWEATHER_QUALIFIER_LAST: maximum value of the enumeration. * * An additional modifier applied to a #GWeatherConditionPhenomenon to * describe the current or forecasted weather conditions. * The exact meaning of each qualifier is described at * http://www.weather.com/glossary/ and * http://www.crh.noaa.gov/arx/wx.tbl.php */ typedef enum { /*< underscore_name=gweather_qualifier >*/ GWEATHER_QUALIFIER_INVALID = -1, GWEATHER_QUALIFIER_NONE, GWEATHER_QUALIFIER_VICINITY, GWEATHER_QUALIFIER_LIGHT, GWEATHER_QUALIFIER_MODERATE, GWEATHER_QUALIFIER_HEAVY, GWEATHER_QUALIFIER_SHALLOW, GWEATHER_QUALIFIER_PATCHES, GWEATHER_QUALIFIER_PARTIAL, GWEATHER_QUALIFIER_THUNDERSTORM, GWEATHER_QUALIFIER_BLOWING, GWEATHER_QUALIFIER_SHOWERS, GWEATHER_QUALIFIER_DRIFTING, GWEATHER_QUALIFIER_FREEZING, GWEATHER_QUALIFIER_LAST } GWeatherConditionQualifier; /** * GWeatherMoonPhase: * * The current phase of the moon, represented as degrees, * where 0 is the new moon, 90 is the first quarter, etc. */ typedef gdouble GWeatherMoonPhase; /** * GWeatherMoonLatitude: * * The moon declension, in degrees. */ typedef gdouble GWeatherMoonLatitude; gboolean gweather_info_get_value_update (GWeatherInfo *info, time_t *value); gboolean gweather_info_get_value_sky (GWeatherInfo *info, GWeatherSky *sky); gboolean gweather_info_get_value_conditions (GWeatherInfo *info, GWeatherConditionPhenomenon *phenomenon, GWeatherConditionQualifier *qualifier); gboolean gweather_info_get_value_temp (GWeatherInfo *info, GWeatherTemperatureUnit unit, gdouble *value); gboolean gweather_info_get_value_temp_min (GWeatherInfo *info, GWeatherTemperatureUnit unit, gdouble *value); gboolean gweather_info_get_value_temp_max (GWeatherInfo *info, GWeatherTemperatureUnit unit, gdouble *value); gboolean gweather_info_get_value_dew (GWeatherInfo *info, GWeatherTemperatureUnit unit, gdouble *value); gboolean gweather_info_get_value_apparent (GWeatherInfo *info, GWeatherTemperatureUnit unit, gdouble *value); gboolean gweather_info_get_value_wind (GWeatherInfo *info, GWeatherSpeedUnit unit, gdouble *speed, GWeatherWindDirection *direction); gboolean gweather_info_get_value_pressure (GWeatherInfo *info, GWeatherPressureUnit unit, gdouble *value); gboolean gweather_info_get_value_visibility (GWeatherInfo *info, GWeatherDistanceUnit unit, gdouble *value); gboolean gweather_info_get_value_sunrise (GWeatherInfo *info, time_t *value); gboolean gweather_info_get_value_sunset (GWeatherInfo *info, time_t *value); gboolean gweather_info_get_value_moonphase (GWeatherInfo *info, GWeatherMoonPhase *value, GWeatherMoonLatitude *lat); gboolean gweather_info_get_upcoming_moonphases (GWeatherInfo *info, time_t *phases); typedef struct _GWeatherConditions GWeatherConditions; /** * GWeatherConditions: * @significant: %TRUE if the struct contains usable data, %FALSE otherwise * @phenomenon: the main weather phenomenon * @qualifier: a modifier for @phenomenon * * A convenient way to describe the current or forecast * weather phenomenon, if significant, and its associated * modifier. If the value is not significant, the weather conditions * are described by gweather_info_get_sky() instead. * * In general it is discouraged to use this value directly to compute * the forecast icon: applications should instead use * gweather_info_get_icon_name() or * gweather_info_get_symbolic_icon_name(). */ struct _GWeatherConditions { gboolean significant; GWeatherConditionPhenomenon phenomenon; GWeatherConditionQualifier qualifier; }; const gchar * gweather_conditions_to_string (GWeatherConditions *conditions); const gchar * gweather_conditions_to_string_full (GWeatherConditions *conditions, GWeatherFormatOptions options); GWeatherTemperatureUnit gweather_temperature_unit_to_real (GWeatherTemperatureUnit unit); G_END_DECLS #endif /* __WEATHER_H_ */