/* -*- 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_ #ifndef MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE #error "libmateweather should only be used if you understand that it's subject to change, and is not supported as a fixed API/ABI or as part of the platform" #endif #include #ifdef __cplusplus extern "C" { #endif /* * Location */ struct _WeatherLocation { gchar *name; gchar *code; gchar *zone; gchar *radar; gboolean zone_valid; gchar *coordinates; gdouble latitude; gdouble longitude; gboolean latlon_valid; gchar *country_code; gchar *tz_hint; }; typedef struct _WeatherLocation WeatherLocation; WeatherLocation * weather_location_new (const gchar *trans_name, const gchar *code, const gchar *zone, const gchar *radar, const gchar *coordinates, const gchar *country_code, const gchar *tz_hint); WeatherLocation * weather_location_clone (const WeatherLocation *location); void weather_location_free (WeatherLocation *location); gboolean weather_location_equal (const WeatherLocation *location1, const WeatherLocation *location2); /* * Weather prefs */ typedef enum _WeatherForecastType { FORECAST_STATE, FORECAST_ZONE, FORECAST_LIST } WeatherForecastType; typedef enum { TEMP_UNIT_INVALID = 0, TEMP_UNIT_DEFAULT, TEMP_UNIT_KELVIN, TEMP_UNIT_CENTIGRADE, TEMP_UNIT_FAHRENHEIT } TempUnit; typedef enum { SPEED_UNIT_INVALID = 0, SPEED_UNIT_DEFAULT, SPEED_UNIT_MS, /* metres per second */ SPEED_UNIT_KPH, /* kilometres per hour */ SPEED_UNIT_MPH, /* miles per hour */ SPEED_UNIT_KNOTS, /* Knots */ SPEED_UNIT_BFT /* Beaufort scale */ } SpeedUnit; typedef enum { PRESSURE_UNIT_INVALID = 0, PRESSURE_UNIT_DEFAULT, PRESSURE_UNIT_KPA, /* kiloPascal */ PRESSURE_UNIT_HPA, /* hectoPascal */ PRESSURE_UNIT_MB, /* 1 millibars = 1 hectoPascal */ PRESSURE_UNIT_MM_HG, /* millimeters of mecury */ PRESSURE_UNIT_INCH_HG, /* inches of mercury */ PRESSURE_UNIT_ATM /* atmosphere */ } PressureUnit; typedef enum { DISTANCE_UNIT_INVALID = 0, DISTANCE_UNIT_DEFAULT, DISTANCE_UNIT_METERS, DISTANCE_UNIT_KM, DISTANCE_UNIT_MILES } DistanceUnit; struct _WeatherPrefs { WeatherForecastType type; gboolean radar; const char *radar_custom_url; TempUnit temperature_unit; SpeedUnit speed_unit; PressureUnit pressure_unit; DistanceUnit distance_unit; }; typedef struct _WeatherPrefs WeatherPrefs; /* * Weather Info */ typedef struct _WeatherInfo WeatherInfo; typedef void (*WeatherInfoFunc) (WeatherInfo *info, gpointer data); WeatherInfo * _weather_info_fill (WeatherInfo *info, WeatherLocation *location, const WeatherPrefs *prefs, WeatherInfoFunc cb, gpointer data); #define weather_info_new(location, prefs, cb, data) _weather_info_fill (NULL, (location), (prefs), (cb), (data)) #define weather_info_update(info, prefs, cb, data) _weather_info_fill ((info), NULL, (prefs), (cb), (data)) void weather_info_abort (WeatherInfo *info); WeatherInfo * weather_info_clone (const WeatherInfo *info); void weather_info_free (WeatherInfo *info); gboolean weather_info_is_valid (WeatherInfo *info); gboolean weather_info_network_error (WeatherInfo *info); void weather_info_to_metric (WeatherInfo *info); void weather_info_to_imperial (WeatherInfo *info); const WeatherLocation * weather_info_get_location (WeatherInfo *info); const gchar * weather_info_get_location_name (WeatherInfo *info); const gchar * weather_info_get_update (WeatherInfo *info); const gchar * weather_info_get_sky (WeatherInfo *info); const gchar * weather_info_get_conditions (WeatherInfo *info); const gchar * weather_info_get_temp (WeatherInfo *info); const gchar * weather_info_get_temp_min (WeatherInfo *info); const gchar * weather_info_get_temp_max (WeatherInfo *info); const gchar * weather_info_get_dew (WeatherInfo *info); const gchar * weather_info_get_humidity (WeatherInfo *info); const gchar * weather_info_get_wind (WeatherInfo *info); const gchar * weather_info_get_pressure (WeatherInfo *info); const gchar * weather_info_get_visibility (WeatherInfo *info); const gchar * weather_info_get_apparent (WeatherInfo *info); const gchar * weather_info_get_sunrise (WeatherInfo *info); const gchar * weather_info_get_sunset (WeatherInfo *info); const gchar * weather_info_get_forecast (WeatherInfo *info); GSList * weather_info_get_forecast_list (WeatherInfo *info); GdkPixbufAnimation * weather_info_get_radar (WeatherInfo *info); const gchar * weather_info_get_temp_summary (WeatherInfo *info); gchar * weather_info_get_weather_summary(WeatherInfo *info); const gchar * weather_info_get_icon_name (WeatherInfo *info); gint weather_info_next_sun_event (WeatherInfo *info); /* values retrieving functions */ enum _WeatherWindDirection { WIND_INVALID = -1, WIND_VARIABLE, WIND_N, WIND_NNE, WIND_NE, WIND_ENE, WIND_E, WIND_ESE, WIND_SE, WIND_SSE, WIND_S, WIND_SSW, WIND_SW, WIND_WSW, WIND_W, WIND_WNW, WIND_NW, WIND_NNW, WIND_LAST }; typedef enum _WeatherWindDirection WeatherWindDirection; enum _WeatherSky { SKY_INVALID = -1, SKY_CLEAR, SKY_BROKEN, SKY_SCATTERED, SKY_FEW, SKY_OVERCAST, SKY_LAST }; typedef enum _WeatherSky WeatherSky; enum _WeatherConditionPhenomenon { PHENOMENON_INVALID = -1, PHENOMENON_NONE, PHENOMENON_DRIZZLE, PHENOMENON_RAIN, PHENOMENON_SNOW, PHENOMENON_SNOW_GRAINS, PHENOMENON_ICE_CRYSTALS, PHENOMENON_ICE_PELLETS, PHENOMENON_HAIL, PHENOMENON_SMALL_HAIL, PHENOMENON_UNKNOWN_PRECIPITATION, PHENOMENON_MIST, PHENOMENON_FOG, PHENOMENON_SMOKE, PHENOMENON_VOLCANIC_ASH, PHENOMENON_SAND, PHENOMENON_HAZE, PHENOMENON_SPRAY, PHENOMENON_DUST, PHENOMENON_SQUALL, PHENOMENON_SANDSTORM, PHENOMENON_DUSTSTORM, PHENOMENON_FUNNEL_CLOUD, PHENOMENON_TORNADO, PHENOMENON_DUST_WHIRLS, PHENOMENON_LAST }; typedef enum _WeatherConditionPhenomenon WeatherConditionPhenomenon; enum _WeatherConditionQualifier { QUALIFIER_INVALID = -1, QUALIFIER_NONE, QUALIFIER_VICINITY, QUALIFIER_LIGHT, QUALIFIER_MODERATE, QUALIFIER_HEAVY, QUALIFIER_SHALLOW, QUALIFIER_PATCHES, QUALIFIER_PARTIAL, QUALIFIER_THUNDERSTORM, QUALIFIER_BLOWING, QUALIFIER_SHOWERS, QUALIFIER_DRIFTING, QUALIFIER_FREEZING, QUALIFIER_LAST }; typedef enum _WeatherConditionQualifier WeatherConditionQualifier; typedef gdouble WeatherMoonPhase; typedef gdouble WeatherMoonLatitude; gboolean weather_info_get_value_update (WeatherInfo *info, time_t *value); gboolean weather_info_get_value_sky (WeatherInfo *info, WeatherSky *sky); gboolean weather_info_get_value_conditions (WeatherInfo *info, WeatherConditionPhenomenon *phenomenon, WeatherConditionQualifier *qualifier); gboolean weather_info_get_value_temp (WeatherInfo *info, TempUnit unit, gdouble *value); gboolean weather_info_get_value_temp_min (WeatherInfo *info, TempUnit unit, gdouble *value); gboolean weather_info_get_value_temp_max (WeatherInfo *info, TempUnit unit, gdouble *value); gboolean weather_info_get_value_dew (WeatherInfo *info, TempUnit unit, gdouble *value); gboolean weather_info_get_value_apparent (WeatherInfo *info, TempUnit unit, gdouble *value); gboolean weather_info_get_value_wind (WeatherInfo *info, SpeedUnit unit, gdouble *speed, WeatherWindDirection *direction); gboolean weather_info_get_value_pressure (WeatherInfo *info, PressureUnit unit, gdouble *value); gboolean weather_info_get_value_visibility (WeatherInfo *info, DistanceUnit unit, gdouble *value); gboolean weather_info_get_value_sunrise (WeatherInfo *info, time_t *value); gboolean weather_info_get_value_sunset (WeatherInfo *info, time_t *value); gboolean weather_info_get_value_moonphase (WeatherInfo *info, WeatherMoonPhase *value, WeatherMoonLatitude *lat); gboolean weather_info_get_upcoming_moonphases (WeatherInfo *info, time_t *phases); #ifdef __cplusplus } #endif #endif /* __WEATHER_H_ */