Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP7:GA
libgweather.20345
libgweather-metno-api.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File libgweather-metno-api.patch of Package libgweather.20345
From 1d8ed2e09890729fe905776d37fb27b1633bf64f Mon Sep 17 00:00:00 2001 From: Bastien Nocera <hadess@hadess.net> Date: Thu, 7 Jan 2021 15:14:40 +0100 Subject: [PATCH] metno: Use compat 2.0 API Version 1.9, which we were using, was deprecated and will be removed soon, so migrate to the compat XML output of the v2.0 API. Closes: #65 This patch also includes some follow-up commits included in 3.36.2. --- diff -urp libgweather-3.34.0.orig/libgweather/gweather-private.c libgweather-3.34.0/libgweather/gweather-private.c --- libgweather-3.34.0.orig/libgweather/gweather-private.c 2019-10-08 03:57:31.000000000 -0500 +++ libgweather-3.34.0/libgweather/gweather-private.c 2021-06-04 14:10:55.915157663 -0500 @@ -22,8 +22,19 @@ #include "gweather-private.h" -/* - There is no code here: the purpose of this header is so that - gnome-builder knows how to pick up the include flags to parse - gweather-private.h properly. -*/ +/* sign, 3 digits, separator, 4 decimals, nul-char */ +#define DEGREES_STR_SIZE (1 + 3 + 1 + 4 + 1) + +char * +_radians_to_degrees_str (gdouble radians) +{ + char *str; + double degrees; + + str = g_malloc0 (DEGREES_STR_SIZE); + /* Max 4 decimals */ + degrees = (double) ((int) (RADIANS_TO_DEGREES (radians) * 10000)) / 10000; + /* Too many digits */ + g_return_val_if_fail (degrees <= 1000 || degrees >= -1000, NULL); + return g_ascii_formatd (str, G_ASCII_DTOSTR_BUF_SIZE, "%g", degrees); +} diff -urp libgweather-3.34.0.orig/libgweather/gweather-private.h libgweather-3.34.0/libgweather/gweather-private.h --- libgweather-3.34.0.orig/libgweather/gweather-private.h 2019-10-08 03:57:31.000000000 -0500 +++ libgweather-3.34.0/libgweather/gweather-private.h 2021-06-04 14:10:55.915157663 -0500 @@ -167,6 +167,9 @@ struct _GWeatherInfoPrivate { #define RADIANS_TO_DEGREES(rad) ((rad) * 180. / M_PI) #define RADIANS_TO_HOURS(rad) ((rad) * 12. / M_PI) +GWEATHER_EXTERN +char *_radians_to_degrees_str (gdouble radians); + /* * Planetary Mean Orbit and their progressions from J2000 are based on the * values in http://ssd.jpl.nasa.gov/txt/aprx_pos_planets.pdf diff -urp libgweather-3.34.0.orig/libgweather/gweather-weather.c libgweather-3.34.0/libgweather/gweather-weather.c --- libgweather-3.34.0.orig/libgweather/gweather-weather.c 2021-06-04 13:49:46.180368946 -0500 +++ libgweather-3.34.0/libgweather/gweather-weather.c 2021-06-04 14:14:34.752327682 -0500 @@ -586,6 +586,30 @@ dump_and_unref_cache (SoupCache *cache) static SoupSession *static_session; +static const char * +app_id (void) +{ + GApplication *app = g_application_get_default (); + const char *id; + + if (app) { + id = g_application_get_application_id (app); + if (id) + return id; + } + + return g_get_prgname (); +} + +static const char * +user_agent (void) +{ + static char *ua = NULL; + if (ua == NULL) + ua = g_strdup_printf ("libgweather/%s (+https://gitlab.gnome.org/GNOME/libgweather/) (%s) ", LIBGWEATHER_VERSION, app_id ()); + return ua; +} + static SoupSession * ref_session (void) { @@ -598,8 +622,7 @@ ref_session (void) return g_object_ref (session); session = soup_session_new (); - g_object_set (G_OBJECT (session), SOUP_SESSION_USER_AGENT, - "libgweather/" LIBGWEATHER_VERSION " (+https://gitlab.gnome.org/GNOME/libgweather/) ", NULL); + g_object_set (G_OBJECT (session), SOUP_SESSION_USER_AGENT, user_agent (), NULL); cache = get_cache (); if (cache != NULL) { Only in libgweather-3.34.0/libgweather: gweather-weather.c.orig diff -urp libgweather-3.34.0.orig/libgweather/gweather-weather.h libgweather-3.34.0/libgweather/gweather-weather.h --- libgweather-3.34.0.orig/libgweather/gweather-weather.h 2019-10-08 03:57:31.000000000 -0500 +++ libgweather-3.34.0/libgweather/gweather-weather.h 2021-06-04 14:13:51.040093964 -0500 @@ -46,7 +46,7 @@ typedef enum { /*< flags, underscore_nam GWEATHER_PROVIDER_YAHOO = 1 << 3, GWEATHER_PROVIDER_YR_NO = 1 << 4, GWEATHER_PROVIDER_OWM = 1 << 5, - GWEATHER_PROVIDER_ALL = 31 + GWEATHER_PROVIDER_ALL = (GWEATHER_PROVIDER_METAR | GWEATHER_PROVIDER_IWIN | GWEATHER_PROVIDER_YAHOO | GWEATHER_PROVIDER_YR_NO | GWEATHER_PROVIDER_OWM) } GWeatherProvider; typedef struct _GWeatherInfo GWeatherInfo; diff -urp libgweather-3.34.0.orig/libgweather/test_libgweather.c libgweather-3.34.0/libgweather/test_libgweather.c --- libgweather-3.34.0.orig/libgweather/test_libgweather.c 2019-10-08 03:57:31.000000000 -0500 +++ libgweather-3.34.0/libgweather/test_libgweather.c 2021-06-04 14:10:55.919157685 -0500 @@ -26,6 +26,7 @@ #include <gweather-version.h> #include "gweather-location.h" #include "gweather-weather.h" +#include "gweather-private.h" extern void _gweather_location_reset_world (void); @@ -639,6 +640,20 @@ test_duplicate_weather_stations (void) } static void +test_radians_to_degrees_str (void) +{ + char long_version[G_ASCII_DTOSTR_BUF_SIZE]; + g_autofree char *short_version = NULL; + double coord = 1.260765526077; + + g_ascii_dtostr (long_version, G_ASCII_DTOSTR_BUF_SIZE, RADIANS_TO_DEGREES (coord)); + short_version = _radians_to_degrees_str (coord); + + g_assert_cmpint (strlen (long_version), >, strlen (short_version)); + g_assert_cmpstr (short_version, ==, "72.2365"); +} + +static void log_handler (const char *log_domain, GLogLevelFlags log_level, const char *message, gpointer user_data) { g_print ("%s\n", message); @@ -660,6 +675,7 @@ main (int argc, char *argv[]) FALSE); set_gsettings (); + g_test_add_func ("/weather/radians-to-degrees_str", test_radians_to_degrees_str); g_test_add_func ("/weather/named-timezones", test_named_timezones); g_test_add_func ("/weather/named-timezones-deserialized", test_named_timezones_deserialized); g_test_add_func ("/weather/no-code-serialize", test_no_code_serialize); Only in libgweather-3.34.0/libgweather: test_libgweather.c.orig diff -urp libgweather-3.34.0.orig/libgweather/weather-iwin.c libgweather-3.34.0/libgweather/weather-iwin.c --- libgweather-3.34.0.orig/libgweather/weather-iwin.c 2021-06-04 13:49:40.084336346 -0500 +++ libgweather-3.34.0/libgweather/weather-iwin.c 2021-06-04 14:10:55.919157685 -0500 @@ -353,7 +353,8 @@ iwin_start_open (GWeatherInfo *info) SoupMessage *msg; struct tm tm; time_t now; - gchar latstr[G_ASCII_DTOSTR_BUF_SIZE], lonstr[G_ASCII_DTOSTR_BUF_SIZE]; + g_autofree char *latstr = NULL; + g_autofree char *lonstr = NULL; g_assert (info != NULL); @@ -376,8 +377,8 @@ iwin_start_open (GWeatherInfo *info) now = time (NULL); localtime_r (&now, &tm); - g_ascii_dtostr (latstr, sizeof(latstr), RADIANS_TO_DEGREES (loc->latitude)); - g_ascii_dtostr (lonstr, sizeof(lonstr), RADIANS_TO_DEGREES (loc->longitude)); + latstr = _radians_to_degrees_str (loc->latitude); + lonstr = _radians_to_degrees_str (loc->longitude); url = g_strdup_printf ("https://www.weather.gov/forecasts/xml/sample_products/browser_interface/ndfdBrowserClientByDay.php?&lat=%s&lon=%s&format=24+hourly&startDate=%04d-%02d-%02d&numDays=7", latstr, lonstr, 1900 + tm.tm_year, 1 + tm.tm_mon, tm.tm_mday); g_debug ("iwin_start_open, requesting: %s", url); diff -urp libgweather-3.34.0.orig/libgweather/weather-owm.c libgweather-3.34.0/libgweather/weather-owm.c --- libgweather-3.34.0.orig/libgweather/weather-owm.c 2021-06-04 13:49:40.088336368 -0500 +++ libgweather-3.34.0/libgweather/weather-owm.c 2021-06-04 14:10:55.919157685 -0500 @@ -428,7 +428,8 @@ owm_start_open (GWeatherInfo *info) gchar *url; SoupMessage *message; WeatherLocation *loc; - gchar latstr[G_ASCII_DTOSTR_BUF_SIZE], lonstr[G_ASCII_DTOSTR_BUF_SIZE]; + g_autofree char *latstr = NULL; + g_autofree char *lonstr = NULL; priv = info->priv; loc = &priv->location; @@ -438,8 +439,8 @@ owm_start_open (GWeatherInfo *info) /* see the description here: http://bugs.openweathermap.org/projects/api/wiki/Api_2_5_forecast */ - g_ascii_dtostr (latstr, sizeof(latstr), RADIANS_TO_DEGREES (loc->latitude)); - g_ascii_dtostr (lonstr, sizeof(lonstr), RADIANS_TO_DEGREES (loc->longitude)); + latstr = _radians_to_degrees_str (loc->latitude); + lonstr = _radians_to_degrees_str (loc->longitude); #define TEMPLATE_START "https://api.openweathermap.org/data/2.5/forecast?lat=%s&lon=%s&mode=xml&units=metric" #ifdef OWM_APIKEY diff -urp libgweather-3.34.0.orig/libgweather/weather-yrno.c libgweather-3.34.0/libgweather/weather-yrno.c --- libgweather-3.34.0.orig/libgweather/weather-yrno.c 2021-06-04 13:49:40.088336368 -0500 +++ libgweather-3.34.0/libgweather/weather-yrno.c 2021-06-04 14:14:58.440454338 -0500 @@ -37,55 +37,58 @@ #define XC(t) ((const xmlChar *)(t)) -/* Reference for symbols at http://om.yr.no/forklaring/symbol/ */ +/* As per https://gitlab.gnome.org/GNOME/libgweather/-/issues/59#note_1004747 */ +#define API_ENDPOINT_DOMAIN "aa037rv1tsaszxi6o.api.met.no" + +/* Reference for symbols at https://api.met.no/weatherapi/weathericon/2.0/ */ typedef struct { - int code; + const char *code; GWeatherSky sky; GWeatherConditions condition; } YrnoSymbol; static YrnoSymbol symbols[] = { - { 1, GWEATHER_SKY_CLEAR, { FALSE, GWEATHER_PHENOMENON_NONE, GWEATHER_QUALIFIER_NONE } }, /* Sun */ - { 2, GWEATHER_SKY_BROKEN, { FALSE, GWEATHER_PHENOMENON_NONE, GWEATHER_QUALIFIER_NONE } }, /* LightCloud */ - { 3, GWEATHER_SKY_SCATTERED, { FALSE, GWEATHER_PHENOMENON_NONE, GWEATHER_QUALIFIER_NONE } }, /* PartlyCloudy */ - { 4, GWEATHER_SKY_OVERCAST, { FALSE, GWEATHER_PHENOMENON_NONE, GWEATHER_QUALIFIER_NONE } }, /* Cloudy */ - { 5, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_RAIN, GWEATHER_QUALIFIER_LIGHT } }, /* LightRainSun */ - { 6, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_RAIN, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* LightRainThunderSun */ - { 7, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_NONE } }, /* SleetSun */ - { 8, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_NONE } }, /* SnowSun */ - { 9, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_RAIN, GWEATHER_QUALIFIER_LIGHT } }, /* SnowSun */ - { 10, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_RAIN, GWEATHER_QUALIFIER_NONE } }, /* Rain */ - { 11, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_RAIN, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* RainThunder */ - { 12, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_NONE } }, /* Sleet */ - { 13, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_NONE } }, /* Snow */ - { 14, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* SnowThunder */ - { 15, GWEATHER_SKY_CLEAR, { TRUE, GWEATHER_PHENOMENON_FOG, GWEATHER_QUALIFIER_NONE } }, /* Fog */ - { 20, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* SleetSunThunder */ - { 21, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* SnowSunThunder */ - { 22, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_RAIN, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* LightRainThunder */ - { 23, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* SleetThunder */ - { 24, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_DRIZZLE, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* DrizzleThunderSun */ - { 25, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_RAIN, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* RainThunderSun */ - { 26, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_LIGHT } }, /* LightSleetThunderSun */ - { 27, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_HEAVY } }, /* HeavySleetThunderSun */ - { 28, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_LIGHT } }, /* LightSnowThunderSun */ - { 29, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_HEAVY } }, /* HeavySnowThunderSun */ - { 30, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_DRIZZLE, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* DrizzleThunder */ - { 31, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_LIGHT } }, /* LightSleetThunder */ - { 32, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_HEAVY } }, /* HeavySleetThunder */ - { 33, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_LIGHT } }, /* LightSnowThunder */ - { 34, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_HEAVY } }, /* HeavySnowThunder */ - { 40, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_DRIZZLE, GWEATHER_QUALIFIER_NONE } }, /* DrizzleSun */ - { 41, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_RAIN, GWEATHER_QUALIFIER_NONE } }, /* RainSun */ - { 42, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_LIGHT } }, /* LightSleetSun */ - { 43, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_HEAVY } }, /* HeavySleetSun */ - { 44, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_LIGHT } }, /* LightSnowSun */ - { 45, GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_HEAVY } }, /* HeavySnowSun */ - { 46, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_DRIZZLE, GWEATHER_QUALIFIER_NONE } }, /* Drizzle */ - { 47, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_LIGHT } }, /* LightSleet */ - { 48, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_HEAVY } }, /* HeavySleet */ - { 49, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_LIGHT } }, /* LightSnow */ - { 50, GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_HEAVY } } /* HeavySnow */ + { "clearsky", GWEATHER_SKY_CLEAR, { FALSE, GWEATHER_PHENOMENON_NONE, GWEATHER_QUALIFIER_NONE } }, /* Sun */ + { "fair", GWEATHER_SKY_BROKEN, { FALSE, GWEATHER_PHENOMENON_NONE, GWEATHER_QUALIFIER_NONE } }, /* LightCloud */ + { "partlycloudy", GWEATHER_SKY_SCATTERED, { FALSE, GWEATHER_PHENOMENON_NONE, GWEATHER_QUALIFIER_NONE } }, /* PartlyCloudy */ + { "cloudy", GWEATHER_SKY_OVERCAST, { FALSE, GWEATHER_PHENOMENON_NONE, GWEATHER_QUALIFIER_NONE } }, /* Cloudy */ + { "rainshowers", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_RAIN, GWEATHER_QUALIFIER_LIGHT } }, /* LightRainSun */ + { "rainshowersandthunder", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_RAIN, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* LightRainThunderSun */ + { "sleetshowers", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_NONE } }, /* SleetSun */ + { "snowshowers", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_NONE } }, /* SnowSun */ + { "rain", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_RAIN, GWEATHER_QUALIFIER_LIGHT } }, /* SnowSun */ + { "heavyrain", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_RAIN, GWEATHER_QUALIFIER_NONE } }, /* Rain */ + { "heavyrainandthunder", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_RAIN, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* RainThunder */ + { "sleet", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_NONE } }, /* Sleet */ + { "snow", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_NONE } }, /* Snow */ + { "snowandthunder", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* SnowThunder */ + { "fog", GWEATHER_SKY_CLEAR, { TRUE, GWEATHER_PHENOMENON_FOG, GWEATHER_QUALIFIER_NONE } }, /* Fog */ + { "sleetshowersandthunder", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* SleetSunThunder */ + { "snowshowersandthunder", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* SnowSunThunder */ + { "rainandthunder", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_RAIN, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* LightRainThunder */ + { "sleetandthunder", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* SleetThunder */ + { "lightrainshowersandthunder", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_DRIZZLE, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* DrizzleThunderSun */ + { "heavyrainshowersandthunder", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_RAIN, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* RainThunderSun */ + { "lightssleetshowersandthunder", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_LIGHT } }, /* LightSleetThunderSun */ + { "heavysleetshowersandthunder", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_HEAVY } }, /* HeavySleetThunderSun */ + { "lightssnowshowersandthunder", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_LIGHT } }, /* LightSnowThunderSun */ + { "heavysnowshowersandthunder", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_HEAVY } }, /* HeavySnowThunderSun */ + { "lightrainandthunder", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_DRIZZLE, GWEATHER_QUALIFIER_THUNDERSTORM } }, /* DrizzleThunder */ + { "lightsleetandthunder", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_LIGHT } }, /* LightSleetThunder */ + { "heavysleetandthunder", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_HEAVY } }, /* HeavySleetThunder */ + { "lightsnowandthunder", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_LIGHT } }, /* LightSnowThunder */ + { "heavysnowandthunder", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_HEAVY } }, /* HeavySnowThunder */ + { "lightrainshowers", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_DRIZZLE, GWEATHER_QUALIFIER_NONE } }, /* DrizzleSun */ + { "heavyrainshowers", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_RAIN, GWEATHER_QUALIFIER_NONE } }, /* RainSun */ + { "lightsleetshowers", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_LIGHT } }, /* LightSleetSun */ + { "heavysleetshowers", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_HEAVY } }, /* HeavySleetSun */ + { "lightsnowshowers", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_LIGHT } }, /* LightSnowSun */ + { "heavysnowshowers", GWEATHER_SKY_BROKEN, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_HEAVY } }, /* HeavySnowSun */ + { "lightrain", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_DRIZZLE, GWEATHER_QUALIFIER_NONE } }, /* Drizzle */ + { "lightsleet", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_LIGHT } }, /* LightSleet */ + { "heavysleet", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_ICE_PELLETS, GWEATHER_QUALIFIER_HEAVY } }, /* HeavySleet */ + { "lightsnow", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_LIGHT } }, /* LightSnow */ + { "heavysnow", GWEATHER_SKY_OVERCAST, { TRUE, GWEATHER_PHENOMENON_SNOW, GWEATHER_QUALIFIER_HEAVY } } /* HeavySnow */ }; static struct { @@ -146,21 +149,18 @@ date_to_time_t (const xmlChar *str, cons } static YrnoSymbol * -symbol_search (int code) +symbol_search (const char *code) { - int a = 0; - int b = G_N_ELEMENTS (symbols); + unsigned int i; + + for (i = 0; i < G_N_ELEMENTS (symbols); i++) { + YrnoSymbol *s = symbols + i; - while (a < b) { - int c = (a + b)/2; - YrnoSymbol *yc = symbols + c; - - if (yc->code == code) - return yc; - if (yc->code < code) - a = c+1; - else - b = c; + if (strcmp (code, s->code) == 0) + return s; + + if (strstr (code, s->code) == code && code[strlen (s->code)] == '_') + return s; } return NULL; @@ -174,9 +174,9 @@ read_symbol (GWeatherInfo *info, YrnoSymbol* symbol; GWeatherInfoPrivate *priv = info->priv; - val = xmlGetProp (node, XC("number")); + val = xmlGetProp (node, XC("code")); - symbol = symbol_search (strtol ((char*) val, NULL, 0)); + symbol = symbol_search ((char *)val); if (symbol != NULL) { priv->valid = TRUE; priv->sky = symbol->sky; @@ -435,7 +435,8 @@ yrno_start_open (GWeatherInfo *info) gchar *url; SoupMessage *message; WeatherLocation *loc; - gchar latstr[G_ASCII_DTOSTR_BUF_SIZE], lonstr[G_ASCII_DTOSTR_BUF_SIZE]; + g_autofree char *latstr = NULL; + g_autofree char *lonstr = NULL; priv = info->priv; loc = &priv->location; @@ -443,12 +444,12 @@ yrno_start_open (GWeatherInfo *info) if (!loc->latlon_valid) return FALSE; - /* see the description here: https://api.met.no/ */ + /* see the description here: https://api.met.no/weatherapi/locationforecast/2.0/documentation */ - g_ascii_dtostr (latstr, sizeof(latstr), RADIANS_TO_DEGREES (loc->latitude)); - g_ascii_dtostr (lonstr, sizeof(lonstr), RADIANS_TO_DEGREES (loc->longitude)); + latstr = _radians_to_degrees_str (loc->latitude); + lonstr = _radians_to_degrees_str (loc->longitude); - url = g_strdup_printf("https://api.met.no/weatherapi/locationforecast/1.9/?lat=%s;lon=%s", latstr, lonstr); + url = g_strdup_printf("https://" API_ENDPOINT_DOMAIN "/weatherapi/locationforecast/2.0/classic?lat=%s&lon=%s", latstr, lonstr); g_debug ("yrno_start_open, requesting: %s", url); message = soup_message_new ("GET", url);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor