summaryrefslogtreecommitdiff
path: root/libmateweather/weather.h
diff options
context:
space:
mode:
Diffstat (limited to 'libmateweather/weather.h')
-rw-r--r--libmateweather/weather.h288
1 files changed, 288 insertions, 0 deletions
diff --git a/libmateweather/weather.h b/libmateweather/weather.h
new file mode 100644
index 0000000..204e095
--- /dev/null
+++ b/libmateweather/weather.h
@@ -0,0 +1,288 @@
+/* -*- 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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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 <gdk-pixbuf/gdk-pixbuf.h>
+
+#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_ */