Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock

Please unblock package libgweather

[ Reason ]
The provider of the weather data (yr.no/met.no) changed their API and we
need to use the new one.

There was also a request to reduce the precision of the coordinates sent
in the query to improve caching on their side.

[ Impact ]
The applications using libgweather (ie. gnome-weather, gnome-shell,...)
are not showing any weather data.

[ Tests ]
gnome-weather and gnome-shell now display the data.

[ Risks ]
The changes are quite straightforward and all patches have been
backported by Andreas from upstream git.

[ Checklist ]
  [x] all changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in testing

[ Other info ]
The provider has asked upstream to rename everything from yr.no to
met.no. Upstream renamed everything, including the name of constants in
the API, something we cannot do now due to the freeze.

https://gitlab.gnome.org/GNOME/libgweather/-/issues/59

unblock libgweather/3.36.1-2
diff -Nru libgweather-3.36.1/debian/changelog 
libgweather-3.36.1/debian/changelog
--- libgweather-3.36.1/debian/changelog 2020-08-29 00:36:23.000000000 +0200
+++ libgweather-3.36.1/debian/changelog 2021-03-10 18:26:48.000000000 +0100
@@ -1,3 +1,18 @@
+libgweather (3.36.1-2) unstable; urgency=medium
+
+  [ Andreas Henriksson ]
+  * Add patches from upstream for yr.no->met.no API. These patches has been
+    cherry-picked from upstream and modified to apply directly to the yrno
+    backend (without renaming it to metno and breaking the API). (Closes:
+    #983917)
+
+  [ Laurent Bigonville ]
+  * Only use 4 significant decimals for locations when sending the query.
+    Patch from upstream. More precision is not needed and this helps to
+    improve caching on the provider side and reduce their load.
+
+ -- Iain Lane <la...@debian.org>  Wed, 10 Mar 2021 17:26:48 +0000
+
 libgweather (3.36.1-1) unstable; urgency=medium
 
   * Team upload
diff -Nru libgweather-3.36.1/debian/libgweather-3-16.symbols 
libgweather-3.36.1/debian/libgweather-3-16.symbols
--- libgweather-3.36.1/debian/libgweather-3-16.symbols  2020-08-29 
00:36:23.000000000 +0200
+++ libgweather-3.36.1/debian/libgweather-3-16.symbols  2021-03-10 
18:26:48.000000000 +0100
@@ -1,6 +1,7 @@
 libgweather-3.so.16 libgweather-3-16 #MINVER#
 * Build-Depends-Package: libgweather-3-dev
  _gweather_location_reset_world@Base 3.32.0
+ _radians_to_degrees_str@Base 3.36.1-2~
  gweather_conditions_to_string@Base 3.7.91
  gweather_conditions_to_string_full@Base 3.25.91
  gweather_distance_unit_get_type@Base 3.7.91
diff -Nru 
libgweather-3.36.1/debian/patches/gweather-Only-use-4-significant-decimals-for-locations.patch
 
libgweather-3.36.1/debian/patches/gweather-Only-use-4-significant-decimals-for-locations.patch
--- 
libgweather-3.36.1/debian/patches/gweather-Only-use-4-significant-decimals-for-locations.patch
      1970-01-01 01:00:00.000000000 +0100
+++ 
libgweather-3.36.1/debian/patches/gweather-Only-use-4-significant-decimals-for-locations.patch
      2021-03-10 18:26:48.000000000 +0100
@@ -0,0 +1,179 @@
+From: Bastien Nocera <had...@hadess.net>
+Date: Thu, 7 Jan 2021 12:46:34 +0100
+Subject: gweather: Only use 4 significant decimals for locations
+
+1/1000th of a degree of longitude or latitude corresponds to around
+100 meters. There's no reason for the weather to be any more precise
+than this.
+
+See https://www.thoughtco.com/degree-of-latitude-and-longitude-distance-4070616
+
+Closes: #69
+---
+ libgweather/gweather-private.c | 21 ++++++++++++++++-----
+ libgweather/gweather-private.h |  3 +++
+ libgweather/test_libgweather.c | 16 ++++++++++++++++
+ libgweather/weather-iwin.c     |  7 ++++---
+ libgweather/weather-owm.c      |  7 ++++---
+ libgweather/weather-yrno.c     |  7 ++++---
+ 6 files changed, 47 insertions(+), 14 deletions(-)
+
+diff --git a/libgweather/gweather-private.c b/libgweather/gweather-private.c
+index b214ad9..0ccc21b 100644
+--- a/libgweather/gweather-private.c
++++ b/libgweather/gweather-private.c
+@@ -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 --git a/libgweather/gweather-private.h b/libgweather/gweather-private.h
+index ddf0a41..be73768 100644
+--- a/libgweather/gweather-private.h
++++ b/libgweather/gweather-private.h
+@@ -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 --git a/libgweather/test_libgweather.c b/libgweather/test_libgweather.c
+index 8a21911..e0e4b81 100644
+--- a/libgweather/test_libgweather.c
++++ b/libgweather/test_libgweather.c
+@@ -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);
+ 
+@@ -758,6 +759,20 @@ test_weather_loop_use_after_free (void)
+     g_main_loop_unref (loop);
+ }
+ 
++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)
+ {
+@@ -780,6 +795,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);
+diff --git a/libgweather/weather-iwin.c b/libgweather/weather-iwin.c
+index c3d414d..7102039 100644
+--- a/libgweather/weather-iwin.c
++++ b/libgweather/weather-iwin.c
+@@ -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 --git a/libgweather/weather-owm.c b/libgweather/weather-owm.c
+index a58950c..eb45f52 100644
+--- a/libgweather/weather-owm.c
++++ b/libgweather/weather-owm.c
+@@ -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 --git a/libgweather/weather-yrno.c b/libgweather/weather-yrno.c
+index 7c89df2..ef6d188 100644
+--- a/libgweather/weather-yrno.c
++++ b/libgweather/weather-yrno.c
+@@ -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;
+@@ -445,8 +446,8 @@ yrno_start_open (GWeatherInfo *info)
+ 
+     /* 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_ENDPOINT_DOMAIN 
"/weatherapi/locationforecast/2.0/classic?lat=%s&lon=%s", latstr, lonstr);
+     g_debug ("yrno_start_open, requesting: %s", url);
diff -Nru 
libgweather-3.36.1/debian/patches/metno-Use-alphabetical-2.0-symbol-codes.patch 
libgweather-3.36.1/debian/patches/metno-Use-alphabetical-2.0-symbol-codes.patch
--- 
libgweather-3.36.1/debian/patches/metno-Use-alphabetical-2.0-symbol-codes.patch 
    1970-01-01 01:00:00.000000000 +0100
+++ 
libgweather-3.36.1/debian/patches/metno-Use-alphabetical-2.0-symbol-codes.patch 
    2021-03-10 18:26:48.000000000 +0100
@@ -0,0 +1,158 @@
+From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuell...@gnome.org>
+Date: Thu, 21 Jan 2021 05:12:21 +0100
+Subject: metno: Use alphabetical 2.0 symbol codes
+
+The numerical codes are deprecated and scheduled for removal, so
+replace them with the non-deprecated alphabetical codes as listed
+in https://api.met.no/weatherapi/weathericon/2.0/.
+
+https://gitlab.gnome.org/GNOME/libgweather/-/issues/67
+---
+ libgweather/weather-yrno.c | 113 ++++++++++++++++++++++-----------------------
+ 1 file changed, 55 insertions(+), 58 deletions(-)
+
+diff --git a/libgweather/weather-yrno.c b/libgweather/weather-yrno.c
+index 9bd974d..7c89df2 100644
+--- a/libgweather/weather-yrno.c
++++ b/libgweather/weather-yrno.c
+@@ -42,53 +42,53 @@
+ 
+ /* 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 {
+@@ -149,21 +149,18 @@ date_to_time_t (const xmlChar *str, const char * tzid)
+ }
+ 
+ static YrnoSymbol *
+-symbol_search (int code)
++symbol_search (const char *code)
+ {
+-    int a = 0;
+-    int b = G_N_ELEMENTS (symbols);
+-
+-    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;
++    unsigned int i;
++
++    for (i = 0; i < G_N_ELEMENTS (symbols); i++) {
++        YrnoSymbol *s = symbols + i;
++
++        if (strcmp (code, s->code) == 0)
++            return s;
++
++        if (strstr (code, s->code) == code && code[strlen (s->code)] == '_')
++            return s;
+     }
+ 
+     return NULL;
+@@ -177,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;
diff -Nru 
libgweather-3.36.1/debian/patches/metno-Use-as-arguments-separator-in-query.patch
 
libgweather-3.36.1/debian/patches/metno-Use-as-arguments-separator-in-query.patch
--- 
libgweather-3.36.1/debian/patches/metno-Use-as-arguments-separator-in-query.patch
   1970-01-01 01:00:00.000000000 +0100
+++ 
libgweather-3.36.1/debian/patches/metno-Use-as-arguments-separator-in-query.patch
   2021-03-10 18:26:48.000000000 +0100
@@ -0,0 +1,26 @@
+From: Bastien Nocera <had...@hadess.net>
+Date: Tue, 12 Jan 2021 14:22:28 +0100
+Subject: metno: Use "&" as arguments separator in query
+
+According to the HTML5 spec ";" is no longer allowed. This was
+automatically rewritten in Varnish, but was temporary measure
+and was likely to disappear if on cache/load balancer change.
+
+Closes: #72
+---
+ libgweather/weather-yrno.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libgweather/weather-yrno.c b/libgweather/weather-yrno.c
+index c8570ab..9bd974d 100644
+--- a/libgweather/weather-yrno.c
++++ b/libgweather/weather-yrno.c
+@@ -451,7 +451,7 @@ yrno_start_open (GWeatherInfo *info)
+     g_ascii_dtostr (latstr, sizeof(latstr), RADIANS_TO_DEGREES 
(loc->latitude));
+     g_ascii_dtostr (lonstr, sizeof(lonstr), RADIANS_TO_DEGREES 
(loc->longitude));
+ 
+-    url = g_strdup_printf("https://"; API_ENDPOINT_DOMAIN 
"/weatherapi/locationforecast/2.0/classic?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);
diff -Nru libgweather-3.36.1/debian/patches/metno-Use-compat-2.0-API.patch 
libgweather-3.36.1/debian/patches/metno-Use-compat-2.0-API.patch
--- libgweather-3.36.1/debian/patches/metno-Use-compat-2.0-API.patch    
1970-01-01 01:00:00.000000000 +0100
+++ libgweather-3.36.1/debian/patches/metno-Use-compat-2.0-API.patch    
2021-03-10 18:26:48.000000000 +0100
@@ -0,0 +1,40 @@
+From: Bastien Nocera <had...@hadess.net>
+Date: Thu, 7 Jan 2021 15:14:40 +0100
+Subject: 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
+---
+ libgweather/weather-yrno.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/libgweather/weather-yrno.c b/libgweather/weather-yrno.c
+index 8324121..f41cbe6 100644
+--- a/libgweather/weather-yrno.c
++++ b/libgweather/weather-yrno.c
+@@ -37,7 +37,7 @@
+ 
+ #define XC(t) ((const xmlChar *)(t))
+ 
+-/* Reference for symbols at http://om.yr.no/forklaring/symbol/ */
++/* Reference for symbols at https://api.met.no/weatherapi/weathericon/2.0/ */
+ typedef struct {
+     int code;
+     GWeatherSky sky;
+@@ -443,12 +443,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));
+ 
+-    url = 
g_strdup_printf("https://api.met.no/weatherapi/locationforecast/1.9/?lat=%s;lon=%s";,
 latstr, lonstr);
++    url = 
g_strdup_printf("https://api.met.no/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);
diff -Nru 
libgweather-3.36.1/debian/patches/metno-Use-GNOME-specific-subdomain.patch 
libgweather-3.36.1/debian/patches/metno-Use-GNOME-specific-subdomain.patch
--- libgweather-3.36.1/debian/patches/metno-Use-GNOME-specific-subdomain.patch  
1970-01-01 01:00:00.000000000 +0100
+++ libgweather-3.36.1/debian/patches/metno-Use-GNOME-specific-subdomain.patch  
2021-03-10 18:26:48.000000000 +0100
@@ -0,0 +1,32 @@
+From: Bastien Nocera <had...@hadess.net>
+Date: Tue, 12 Jan 2021 14:21:21 +0100
+Subject: metno: Use GNOME-specific subdomain
+
+This allows the API provider to track libgweather usage.
+---
+ libgweather/weather-yrno.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/libgweather/weather-yrno.c b/libgweather/weather-yrno.c
+index f41cbe6..c8570ab 100644
+--- a/libgweather/weather-yrno.c
++++ b/libgweather/weather-yrno.c
+@@ -37,6 +37,9 @@
+ 
+ #define XC(t) ((const xmlChar *)(t))
+ 
++/* 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;
+@@ -448,7 +451,7 @@ yrno_start_open (GWeatherInfo *info)
+     g_ascii_dtostr (latstr, sizeof(latstr), RADIANS_TO_DEGREES 
(loc->latitude));
+     g_ascii_dtostr (lonstr, sizeof(lonstr), RADIANS_TO_DEGREES 
(loc->longitude));
+ 
+-    url = 
g_strdup_printf("https://api.met.no/weatherapi/locationforecast/2.0/classic?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);
diff -Nru libgweather-3.36.1/debian/patches/series 
libgweather-3.36.1/debian/patches/series
--- libgweather-3.36.1/debian/patches/series    1970-01-01 01:00:00.000000000 
+0100
+++ libgweather-3.36.1/debian/patches/series    2021-03-10 18:26:48.000000000 
+0100
@@ -0,0 +1,5 @@
+metno-Use-compat-2.0-API.patch
+metno-Use-GNOME-specific-subdomain.patch
+metno-Use-as-arguments-separator-in-query.patch
+metno-Use-alphabetical-2.0-symbol-codes.patch
+gweather-Only-use-4-significant-decimals-for-locations.patch

Reply via email to