+++ /dev/null
-From 1ff71669644a0b824a8a5ba9b40771ee4fb8a76b Mon Sep 17 00:00:00 2001
-From: Harald Judt <h.judt@gmx.at>
-Date: Wed, 28 May 2014 20:08:02 +0200
-Subject: Make plugin ready for met.no locationforecast-1.2 API (bug #10916).
-
-http://api.yr.no/weatherapi/locationforecastlts/1.1/documentation#version_1_2___2014_05_20
-
-The updated API version uses CamelCase symbol names instead of UPPERCASE
-ones and has added some new names (like 'Drizzle'), which unfortunately
-have not been documented (yet?).
-
-What's more, the typo 'celcius' has been replaced by the fixed 'celsius',
-but luckily the plugin will not be affected by that change.
-
-What's a bit more unfortunate is that the existing icon themes do not
-cover the new symbol names, so one would have to create quite a lot of
-new icons. Also, new translations would have to be added for the symbols,
-and maybe existing ones would have to be altered. To prevent this, we're
-simply going to map the new symbols to existing ones as good as possible.
-This should be good enough for the time being.
-
-diff --git a/panel-plugin/weather-parsers.c b/panel-plugin/weather-parsers.c
-index 0f321ba..5a9b30a 100644
---- a/panel-plugin/weather-parsers.c
-+++ b/panel-plugin/weather-parsers.c
-@@ -28,6 +28,7 @@
- #define _XOPEN_SOURCE
- #define _XOPEN_SOURCE_EXTENDED 1
- #include "weather-parsers.h"
-+#include "weather-translate.h"
- #include "weather-debug.h"
-
- #include <time.h>
-@@ -220,8 +221,8 @@ parse_location(xmlNode *cur_node,
- }
- if (NODE_IS_TYPE(child_node, "symbol")) {
- g_free(loc->symbol);
-- loc->symbol = PROP(child_node, "id");
- loc->symbol_id = strtol(PROP(child_node, "number"), NULL, 10);
-+ loc->symbol = g_strdup(get_symbol_for_id(loc->symbol_id));
- }
- }
-
-diff --git a/panel-plugin/weather-translate.c b/panel-plugin/weather-translate.c
-index 0c1606d..c38919a 100644
---- a/panel-plugin/weather-translate.c
-+++ b/panel-plugin/weather-translate.c
-@@ -29,6 +29,7 @@
- #include "weather-translate.h"
-
- #define DAY_LOC_N (sizeof(gchar) * 100)
-+#define NODATA "NODATA"
-
-
- static const gchar *moon_phases[] = {
-@@ -117,7 +118,7 @@ static const symbol_desc symbol_to_desc[] = {
-
- { 15, "FOG", N_("Fog"), N_("Fog") },
-
-- /* Symbols 16-19 are used for polar days */
-+ /* Symbols 16-19 are used for polar days (unused beginning with API version 1.2) */
- { 16, "SUN", N_("Sunny"), N_("Clear") },
- { 17, "LIGHTCLOUD", N_("Lightly cloudy"), N_("Lightly cloudy") },
- { 18, "LIGHTRAINSUN", N_("Rain showers"), N_("Rain showers") },
-@@ -133,6 +134,73 @@ static const symbol_desc symbol_to_desc[] = {
- #define NUM_SYMBOLS (sizeof(symbol_to_desc) / sizeof(symbol_to_desc[0]))
-
-
-+/*
-+ * API version 1.2, published in May 2014, introduced new symbols. We
-+ * try to match these with existing symbols, in order to be compatible
-+ * with existing icon themes and to maintain translation completeness.
-+ *
-+ * See http://api.met.no/weatherapi/weathericon/1.1/documentation
-+ * for a list of symbols. For a list of symbols with descriptions,
-+ * see http://om.yr.no/forklaring/symbol.
-+ */
-+gint
-+replace_symbol_id(gint id)
-+{
-+ /* Symbol ids greater than 100 are used for indicating polar
-+ * night. These ids are over the ordinary id + 100. Since we
-+ * don't support polar icons, we can simply subtract 100 to
-+ * get the non-polar symbol ids.
-+ */
-+ if (id > 100)
-+ id -= 100;
-+
-+ switch (id) {
-+ case 24: return 22; /* Light rain showers and thunder */
-+ case 25: return 6; /* Heavy rain showers and thunder */
-+ case 26: return 20; /* Light sleet showers and thunder */
-+ case 27: return 20; /* Heavy sleet showers and thunder */
-+ case 28: return 21; /* Light snow showers and thunder */
-+ case 29: return 21; /* Heavy snow showers and thunder */
-+ case 30: return 22; /* Light rain and thunder */
-+ case 31: return 23; /* Light sleet and thunder */
-+ case 32: return 23; /* Heavy sleet and thunder */
-+ case 33: return 14; /* Light snow and thunder */
-+ case 34: return 14; /* Heavy snow and thunder */
-+
-+ /* symbols 35-39 are unused */
-+
-+ case 40: return 5; /* Light rain showers */
-+ case 41: return 5; /* Heavy rain showers */
-+ case 42: return 7; /* Light sleet showers */
-+ case 43: return 7; /* Heavy sleet showers */
-+ case 44: return 8; /* Light snow showers */
-+ case 45: return 8; /* Heavy snow showers */
-+ case 46: return 9; /* Light rain */
-+ case 47: return 12; /* Light sleet */
-+ case 48: return 12; /* Heavy sleet */
-+ case 49: return 13; /* Light snow */
-+ case 50: return 13; /* Heavy snow */
-+ default: return id;
-+ }
-+}
-+
-+
-+const gchar *
-+get_symbol_for_id(gint id)
-+{
-+ if (G_UNLIKELY(id < 1))
-+ return NODATA;
-+
-+ if (id >= NUM_SYMBOLS)
-+ id = replace_symbol_id(id);
-+
-+ if (id < NUM_SYMBOLS)
-+ return symbol_to_desc[id-1].symbol;
-+
-+ return NODATA;
-+}
-+
-+
- const gchar *
- translate_desc(const gchar *desc,
- const gboolean nighttime)
-diff --git a/panel-plugin/weather-translate.h b/panel-plugin/weather-translate.h
-index 2116795..854e24f 100644
---- a/panel-plugin/weather-translate.h
-+++ b/panel-plugin/weather-translate.h
-@@ -24,6 +24,8 @@
-
- G_BEGIN_DECLS
-
-+const gchar *get_symbol_for_id(gint id);
-+
- const gchar *translate_desc(const gchar *desc,
- gboolean nighttime);
-
---
-cgit v0.10.1
-