aboutsummaryrefslogtreecommitdiff
path: root/misc/xfce4-weather-plugin
diff options
context:
space:
mode:
authorGuido Falsi <madpilot@FreeBSD.org>2019-03-24 09:52:14 +0000
committerGuido Falsi <madpilot@FreeBSD.org>2019-03-24 09:52:14 +0000
commitf06480e523c5c94c8ab6c95f0c91c32200c8023a (patch)
tree6d36ed4e9beb74fd291fba6719102db8629ab014 /misc/xfce4-weather-plugin
parente765008dde16e8f5fd3c0d1eba046cd7a7a6836c (diff)
downloadports-f06480e523c5c94c8ab6c95f0c91c32200c8023a.tar.gz
ports-f06480e523c5c94c8ab6c95f0c91c32200c8023a.zip
- Update xfce4-weather-plugin to 0.9.1
- Upstreamed patch removed PR: 236735 Submitted by: Olivier Duchateau <duchateau.olivier@gmail.com>
Notes
Notes: svn path=/head/; revision=496711
Diffstat (limited to 'misc/xfce4-weather-plugin')
-rw-r--r--misc/xfce4-weather-plugin/Makefile3
-rw-r--r--misc/xfce4-weather-plugin/distinfo6
-rw-r--r--misc/xfce4-weather-plugin/files/patch-new_sunrise_API673
3 files changed, 4 insertions, 678 deletions
diff --git a/misc/xfce4-weather-plugin/Makefile b/misc/xfce4-weather-plugin/Makefile
index 13b86d2f3474..ad5d5fbd78c7 100644
--- a/misc/xfce4-weather-plugin/Makefile
+++ b/misc/xfce4-weather-plugin/Makefile
@@ -2,8 +2,7 @@
# $FreeBSD$
PORTNAME= xfce4-weather-plugin
-PORTVERSION= 0.9.0
-PORTREVISION= 1
+PORTVERSION= 0.9.1
CATEGORIES= misc xfce geography
MASTER_SITES= XFCE/src/panel-plugins/${PORTNAME}/${PORTVERSION:R}
DIST_SUBDIR= xfce4
diff --git a/misc/xfce4-weather-plugin/distinfo b/misc/xfce4-weather-plugin/distinfo
index 1d321ab08f64..8061a99fec03 100644
--- a/misc/xfce4-weather-plugin/distinfo
+++ b/misc/xfce4-weather-plugin/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1537628267
-SHA256 (xfce4/xfce4-weather-plugin-0.9.0.tar.bz2) = 34368cf2332774ad2a05226b2914ecb60e7550e9b2164be53ebe8f370198bb3d
-SIZE (xfce4/xfce4-weather-plugin-0.9.0.tar.bz2) = 2953904
+TIMESTAMP = 1553349293
+SHA256 (xfce4/xfce4-weather-plugin-0.9.1.tar.bz2) = 7cdc18b8df759dee4ceaaf6ce303eff7fda48e247dbc26b78142929213506cfd
+SIZE (xfce4/xfce4-weather-plugin-0.9.1.tar.bz2) = 3018842
diff --git a/misc/xfce4-weather-plugin/files/patch-new_sunrise_API b/misc/xfce4-weather-plugin/files/patch-new_sunrise_API
deleted file mode 100644
index 65d7ef0f892b..000000000000
--- a/misc/xfce4-weather-plugin/files/patch-new_sunrise_API
+++ /dev/null
@@ -1,673 +0,0 @@
-From cc20f088a694613bc2d7551070208dfb9221f9d7 Mon Sep 17 00:00:00 2001
-From: Olivier Duchateau <duchateau.olivier@gmail.com>
-Date: Sat, 2 Mar 2019 18:57:09 +0100
-Subject: [PATCH] Use the latest sunrise API (2.0)
-
----
- panel-plugin/weather-data.c | 12 +--
- panel-plugin/weather-data.h | 2 +-
- panel-plugin/weather-parsers.c | 185 +++++++++++++++++----------------
- panel-plugin/weather-summary.c | 20 ++--
- panel-plugin/weather.c | 103 +++++++++++-------
- panel-plugin/weather.h | 3 +
- 6 files changed, 184 insertions(+), 141 deletions(-)
-
-diff --git a/panel-plugin/weather-data.c b/panel-plugin/weather-data.c
-index cbc7da5..008a60c 100644
---- panel-plugin/weather-data.c
-+++ panel-plugin/weather-data.c
-@@ -105,25 +105,25 @@ double_to_string(const gdouble val,
-
-
- gchar *
--format_date(const time_t date_t,
-+format_date(time_t date_t,
- gchar *format,
- gboolean local)
- {
- struct tm *tm;
-- time_t t = date_t;
- gchar buf[40];
- size_t size;
-
-+ if (format == NULL)
-+ format = "%Y-%m-%d %H:%M:%S";
-+
- if (G_LIKELY(local))
-- tm = localtime(&t);
-+ tm = localtime(&date_t);
- else
-- tm = gmtime(&t);
-+ tm = gmtime(&date_t);
-
- /* A year <= 1970 means date has not been set */
- if (G_UNLIKELY(tm == NULL) || tm->tm_year <= 70)
- return g_strdup("-");
-- if (format == NULL)
-- format = "%Y-%m-%d %H:%M:%S";
- size = strftime(buf, 40, format, tm);
- return (size ? g_strdup(buf) : g_strdup("-"));
- }
-diff --git a/panel-plugin/weather-data.h b/panel-plugin/weather-data.h
-index 73f5195..63be6aa 100644
---- panel-plugin/weather-data.h
-+++ panel-plugin/weather-data.h
-@@ -103,7 +103,7 @@ gdouble string_to_double(const gchar *str,
- gchar *double_to_string(gdouble val,
- const gchar *format);
-
--gchar *format_date(const time_t t,
-+gchar *format_date(time_t t,
- gchar *format,
- gboolean local);
-
-diff --git a/panel-plugin/weather-parsers.c b/panel-plugin/weather-parsers.c
-index d23df2c..ef6f269 100644
---- panel-plugin/weather-parsers.c
-+++ panel-plugin/weather-parsers.c
-@@ -35,6 +35,9 @@
- #include <stdlib.h>
- #include <string.h>
-
-+#include <libxml/parser.h>
-+#include <libxml/tree.h>
-+
-
- #define DATA(node) \
- ((gchar *) xmlNodeListGetString(node->doc, node->children, 1))
-@@ -71,6 +74,28 @@ my_timegm(struct tm *tm)
- }
-
-
-+/*
-+ * Remove offset of timezone, in order to keep previous
-+ * date format (before the new API, 2.x).
-+ */
-+static gchar *
-+remove_timezone_offset(gchar *date)
-+{
-+ GRegex *re = NULL;
-+ const gchar *pattern = "[+-][0-9]{2}:[0-9]{2}";
-+ gchar *res;
-+
-+ re = g_regex_new(pattern, 0, 0, NULL);
-+ if (re != NULL && g_regex_match(re, date, 0, NULL)) {
-+ res = g_regex_replace(re, date, -1, 0, "Z", 0, NULL);
-+ } else {
-+ res = date;
-+ }
-+ g_regex_unref(re);
-+ return res;
-+}
-+
-+
- xml_time *
- get_timeslice(xml_weather *wd,
- const time_t start_t,
-@@ -128,9 +153,10 @@ parse_timestring(const gchar *ts,
- time_t t;
- struct tm tm;
-
-- memset(&t, 0, sizeof(time_t));
-- if (G_UNLIKELY(ts == NULL))
-+ if (G_UNLIKELY(ts == NULL)) {
-+ memset(&t, 0, sizeof(time_t));
- return t;
-+ }
-
- /* standard format */
- if (format == NULL)
-@@ -141,15 +167,22 @@ parse_timestring(const gchar *ts,
- memset(&tm, 0, sizeof(struct tm));
- tm.tm_isdst = -1;
-
-- if (G_UNLIKELY(strptime(ts, format, &tm) == NULL))
-- return t;
--
-- if (local)
-- t = mktime(&tm);
-- else
-- t = my_timegm(&tm);
-+ if (strptime(ts, format, &tm) != NULL) {
-+ if (local)
-+ t = mktime(&tm);
-+ else
-+ t = my_timegm(&tm);
-
-- return t;
-+ if (t < 0) {
-+ memset(&t, 0, sizeof(time_t));
-+ return t;
-+ } else {
-+ return t;
-+ }
-+ } else {
-+ memset(&t, 0, sizeof(time_t));
-+ return t;
-+ }
- }
-
-
-@@ -365,83 +398,14 @@ parse_weather(xmlNode *cur_node,
- }
-
-
--static void
--parse_astro_location(xmlNode *cur_node,
-- xml_astro *astro)
--{
-- xmlNode *child_node;
-- gchar *sunrise, *sunset, *moonrise, *moonset;
-- gchar *never_rises, *never_sets;
--
-- for (child_node = cur_node->children; child_node;
-- child_node = child_node->next) {
-- if (NODE_IS_TYPE(child_node, "sun")) {
-- never_rises = PROP(child_node, "never_rise");
-- if (never_rises &&
-- (!strcmp(never_rises, "true") ||
-- !strcmp(never_rises, "1")))
-- astro->sun_never_rises = TRUE;
-- else
-- astro->sun_never_rises = FALSE;
-- xmlFree(never_rises);
--
-- never_sets = PROP(child_node, "never_set");
-- if (never_sets &&
-- (!strcmp(never_sets, "true") ||
-- !strcmp(never_sets, "1")))
-- astro->sun_never_sets = TRUE;
-- else
-- astro->sun_never_sets = FALSE;
-- xmlFree(never_sets);
--
-- sunrise = PROP(child_node, "rise");
-- astro->sunrise = parse_timestring(sunrise, NULL, FALSE);
-- xmlFree(sunrise);
--
-- sunset = PROP(child_node, "set");
-- astro->sunset = parse_timestring(sunset, NULL, FALSE);
-- xmlFree(sunset);
-- }
--
-- if (NODE_IS_TYPE(child_node, "moon")) {
-- never_rises = PROP(child_node, "never_rise");
-- if (never_rises &&
-- (!strcmp(never_rises, "true") ||
-- !strcmp(never_rises, "1")))
-- astro->moon_never_rises = TRUE;
-- else
-- astro->moon_never_rises = FALSE;
-- xmlFree(never_rises);
--
-- never_sets = PROP(child_node, "never_set");
-- if (never_sets &&
-- (!strcmp(never_sets, "true") ||
-- !strcmp(never_sets, "1")))
-- astro->moon_never_sets = TRUE;
-- else
-- astro->moon_never_sets = FALSE;
-- xmlFree(never_sets);
--
-- moonrise = PROP(child_node, "rise");
-- astro->moonrise = parse_timestring(moonrise, NULL, FALSE);
-- xmlFree(moonrise);
--
-- moonset = PROP(child_node, "set");
-- astro->moonset = parse_timestring(moonset, NULL, FALSE);
-- xmlFree(moonset);
--
-- astro->moon_phase = PROP(child_node, "phase");
-- }
-- }
--}
--
--
- static xml_astro *
- parse_astro_time(xmlNode *cur_node)
- {
- xmlNode *child_node;
- xml_astro *astro;
-- gchar *date;
-+ gchar *date, *sunrise, *sunset, *moonrise, *moonset;
-+ gboolean sun_rises = FALSE, sun_sets = FALSE;
-+ gboolean moon_rises = FALSE, moon_sets = FALSE;
-
- astro = g_slice_new0(xml_astro);
- if (G_UNLIKELY(astro == NULL))
-@@ -452,15 +416,61 @@ parse_astro_time(xmlNode *cur_node)
- xmlFree(date);
-
- for (child_node = cur_node->children; child_node;
-- child_node = child_node->next)
-- if (NODE_IS_TYPE(child_node, "location"))
-- parse_astro_location(child_node, astro);
-+ child_node = child_node->next) {
-+ if (child_node->type == XML_ELEMENT_NODE) {
-+ if (NODE_IS_TYPE(child_node, "sunrise")) {
-+ sunrise = remove_timezone_offset(PROP(child_node, "time"));
-+ astro->sunrise = parse_timestring(sunrise, NULL, FALSE);
-+ xmlFree(sunrise);
-+ sun_rises = TRUE;
-+ }
-+
-+ if (NODE_IS_TYPE(child_node, "moonset")) {
-+ moonset = remove_timezone_offset(PROP(child_node, "time"));
-+ astro->moonset = parse_timestring(moonset, NULL, FALSE);
-+ xmlFree(moonset);
-+ moon_sets = TRUE;
-+ }
-+
-+ if (NODE_IS_TYPE(child_node, "sunset")) {
-+ sunset = remove_timezone_offset(PROP(child_node, "time"));
-+ astro->sunset = parse_timestring(sunset, NULL, FALSE);
-+ xmlFree(sunset);
-+ sun_sets = TRUE;
-+ }
-+
-+ if (NODE_IS_TYPE(child_node, "moonrise")) {
-+ moonrise = remove_timezone_offset(PROP(child_node, "time"));
-+ astro->moonrise = parse_timestring(moonrise, NULL, FALSE);
-+ xmlFree(moonrise);
-+ moon_rises = TRUE;
-+ }
-+ }
-+ }
-+
-+ if (sun_rises)
-+ astro->sun_never_rises = FALSE;
-+ else
-+ astro->sun_never_rises = TRUE;
-+ if (sun_sets)
-+ astro->sun_never_sets = FALSE;
-+ else
-+ astro->sun_never_sets = TRUE;
-+
-+ if (moon_rises)
-+ astro->moon_never_rises = FALSE;
-+ else
-+ astro->moon_never_rises = TRUE;
-+ if (moon_sets)
-+ astro->moon_never_sets = FALSE;
-+ else
-+ astro->moon_never_sets = TRUE;
- return astro;
- }
-
-
- /*
-- * Look at https://api.met.no/weatherapi/sunrise/1.1/schema for information
-+ * Look at https://api.met.no/weatherapi/sunrise/2.0/schema for information
- * of elements and attributes to expect.
- */
- gboolean
-@@ -475,7 +485,8 @@ parse_astrodata(xmlNode *cur_node,
- return FALSE;
-
- g_assert(cur_node != NULL);
-- if (G_UNLIKELY(cur_node == NULL || !NODE_IS_TYPE(cur_node, "astrodata")))
-+ if (G_UNLIKELY(cur_node == NULL ||
-+ !NODE_IS_TYPE(cur_node, "location")))
- return FALSE;
-
- for (child_node = cur_node->children; child_node;
-diff --git a/panel-plugin/weather-summary.c b/panel-plugin/weather-summary.c
-index bd9b05b..44d1874 100644
---- panel-plugin/weather-summary.c
-+++ panel-plugin/weather-summary.c
-@@ -417,12 +417,12 @@ create_summary_tab(plugin_data *data)
- value = g_strdup(_("\tSunset:\t\tThe sun never sets today.\n"));
- APPEND_TEXT_ITEM_REAL(value);
- } else {
-- sunrise = format_date(data->current_astro->sunrise, NULL, TRUE);
-+ sunrise = format_date(data->current_astro->sunrise, NULL, FALSE);
- value = g_strdup_printf(_("\tSunrise:\t\t%s\n"), sunrise);
- g_free(sunrise);
- APPEND_TEXT_ITEM_REAL(value);
-
-- sunset = format_date(data->current_astro->sunset, NULL, TRUE);
-+ sunset = format_date(data->current_astro->sunset, NULL, FALSE);
- value = g_strdup_printf(_("\tSunset:\t\t%s\n\n"), sunset);
- g_free(sunset);
- APPEND_TEXT_ITEM_REAL(value);
-@@ -445,12 +445,12 @@ create_summary_tab(plugin_data *data)
- g_strdup(_("\tMoonset:\tThe moon never sets today.\n"));
- APPEND_TEXT_ITEM_REAL(value);
- } else {
-- moonrise = format_date(data->current_astro->moonrise, NULL, TRUE);
-+ moonrise = format_date(data->current_astro->moonrise, NULL, FALSE);
- value = g_strdup_printf(_("\tMoonrise:\t%s\n"), moonrise);
- g_free(moonrise);
- APPEND_TEXT_ITEM_REAL(value);
-
-- moonset = format_date(data->current_astro->moonset, NULL, TRUE);
-+ moonset = format_date(data->current_astro->moonset, NULL, FALSE);
- value = g_strdup_printf(_("\tMoonset:\t%s\n"), moonset);
- g_free(moonset);
- APPEND_TEXT_ITEM_REAL(value);
-@@ -699,13 +699,13 @@ forecast_day_header_tooltip_text(xml_astro *astro)
- "Sunset: The sun never sets this day."
- "</small></tt>\n"));
- else {
-- sunrise = format_date(astro->sunrise, NULL, TRUE);
-+ sunrise = format_date(astro->sunrise, NULL, FALSE);
- g_string_append_printf(text, _("<tt><small>"
- "Sunrise: %s"
- "</small></tt>\n"), sunrise);
- g_free(sunrise);
-
-- sunset = format_date(astro->sunset, NULL, TRUE);
-+ sunset = format_date(astro->sunset, NULL, FALSE);
- g_string_append_printf(text, _("<tt><small>"
- "Sunset: %s"
- "</small></tt>\n\n"), sunset);
-@@ -732,13 +732,13 @@ forecast_day_header_tooltip_text(xml_astro *astro)
- "Moonset: The moon never sets this day."
- "</small></tt>\n"));
- else {
-- moonrise = format_date(astro->moonrise, NULL, TRUE);
-+ moonrise = format_date(astro->moonrise, NULL, FALSE);
- g_string_append_printf(text, _("<tt><small>"
- "Moonrise: %s"
- "</small></tt>\n"), moonrise);
- g_free(moonrise);
-
-- moonset = format_date(astro->moonset, NULL, TRUE);
-+ moonset = format_date(astro->moonset, NULL, FALSE);
- g_string_append_printf(text, _("<tt><small>"
- "Moonset: %s"
- "</small></tt>"), moonset);
-@@ -1084,10 +1084,10 @@ update_summary_subtitle(plugin_data *data)
- time(&now_t);
- #ifdef HAVE_UPOWER_GLIB
- if (data->upower_on_battery)
-- date_format = "%Y-%m-%d %H:%M %z (%Z)";
-+ date_format = "%Y-%m-%d %H:%M:%S (%Z)";
- else
- #endif
-- date_format = "%Y-%m-%d %H:%M:%S %z (%Z)";
-+ date_format = "%Y-%m-%d %H:%M:%S (%Z)";
- date = format_date(now_t, date_format, TRUE);
- title = g_strdup_printf("%s\n%s", data->location_name, date);
- g_free(date);
-diff --git a/panel-plugin/weather.c b/panel-plugin/weather.c
-index 752de48..c398381 100644
---- panel-plugin/weather.c
-+++ panel-plugin/weather.c
-@@ -26,6 +26,9 @@
- #include <libxfce4util/libxfce4util.h>
- #include <libxfce4ui/libxfce4ui.h>
-
-+#include <libxml/parser.h>
-+#include <libxml/tree.h>
-+
- #include "weather-parsers.h"
- #include "weather-data.h"
- #include "weather.h"
-@@ -47,12 +50,6 @@
- #define CONN_RETRY_INTERVAL_SMALL (10)
- #define CONN_RETRY_INTERVAL_LARGE (10 * 60)
-
--/* met.no sunrise API returns data for up to 30 days in the future and
-- will return an error page if too many days are requested. Let's
-- play it safe and request fewer than that, since we can only get a
-- 10 days forecast too. */
--#define ASTRODATA_MAX_DAYS 25
--
- /* power saving update interval in seconds used as a precaution to
- deal with suspend/resume events etc., when nothing needs to be
- updated earlier: */
-@@ -81,6 +78,7 @@
- g_free(locname); \
- g_free(lat); \
- g_free(lon); \
-+ g_free(offset); \
- if (keyfile) \
- g_key_file_free(keyfile);
-
-@@ -269,6 +267,19 @@ update_timezone(plugin_data *data)
- }
-
-
-+void
-+update_offset(plugin_data *data)
-+{
-+ GDateTime *dt;
-+
-+ dt = g_date_time_new_now_local();
-+ if (G_LIKELY(data->offset))
-+ g_free(data->offset);
-+
-+ data->offset = g_date_time_format(dt, "%:z");
-+}
-+
-+
- void
- update_icon(plugin_data *data)
- {
-@@ -481,7 +492,7 @@ cb_astro_update(SoupSession *session,
- {
- plugin_data *data = user_data;
- xmlDoc *doc;
-- xmlNode *root_node;
-+ xmlNode *root_node, *child_node;
- time_t now_t;
- gboolean parsing_error = TRUE;
-
-@@ -492,13 +503,19 @@ cb_astro_update(SoupSession *session,
- doc = get_xml_document(msg);
- if (G_LIKELY(doc)) {
- root_node = xmlDocGetRootElement(doc);
-- if (G_LIKELY(root_node))
-- if (parse_astrodata(root_node, data->astrodata)) {
-- /* schedule next update */
-- data->astro_update->attempt = 0;
-- data->astro_update->last = now_t;
-- parsing_error = FALSE;
-+ if (G_LIKELY(root_node)) {
-+ for (child_node = root_node->children; child_node;
-+ child_node = child_node->next) {
-+ if (child_node->type == XML_ELEMENT_NODE) {
-+ if (parse_astrodata(child_node, data->astrodata)) {
-+ /* schedule next update */
-+ data->astro_update->attempt = 0;
-+ data->astro_update->last = now_t;
-+ parsing_error = FALSE;
-+ }
-+ }
- }
-+ }
- xmlFreeDoc(doc);
- }
- if (parsing_error)
-@@ -580,8 +597,8 @@ update_handler(plugin_data *data)
- {
- gchar *url;
- gboolean night_time;
-- time_t now_t, end_t;
-- struct tm now_tm, end_tm;
-+ time_t now_t;
-+ struct tm now_tm;
-
- g_assert(data != NULL);
- if (G_UNLIKELY(data == NULL))
-@@ -616,26 +633,22 @@ update_handler(plugin_data *data)
- data->astro_update->next = time_calc_hour(now_tm, 1);
- data->astro_update->started = TRUE;
-
-- /* calculate date range for request */
-- end_t = time_calc_day(now_tm, ASTRODATA_MAX_DAYS);
-- end_tm = *localtime(&end_t);
--
- /* build url */
-- url = g_strdup_printf("https://api.met.no/weatherapi/sunrise/1.1/?"
-- "lat=%s;lon=%s;"
-- "from=%04d-%02d-%02d;"
-- "to=%04d-%02d-%02d",
-+ url = g_strdup_printf("https://api.met.no/weatherapi"
-+ "/sunrise/2.0/?lat=%s&lon=%s&"
-+ "date=%04d-%02d-%02d&"
-+ "offset=%s&days=%u",
- data->lat, data->lon,
- now_tm.tm_year + 1900,
- now_tm.tm_mon + 1,
- now_tm.tm_mday,
-- end_tm.tm_year + 1900,
-- end_tm.tm_mon + 1,
-- end_tm.tm_mday);
-+ data->offset,
-+ data->forecast_days);
-
- /* start receive thread */
- g_message(_("getting %s"), url);
-- weather_http_queue_request(data->session, url, cb_astro_update, data);
-+ weather_http_queue_request(data->session, url,
-+ cb_astro_update, data);
- g_free(url);
- }
-
-@@ -647,10 +660,10 @@ update_handler(plugin_data *data)
- data->weather_update->started = TRUE;
-
- /* build url */
-- url =
-- g_strdup_printf("https://api.met.no/weatherapi"
-- "/locationforecastlts/1.3/?lat=%s;lon=%s;msl=%d",
-- data->lat, data->lon, data->msl);
-+ url = g_strdup_printf("https://api.met.no/weatherapi"
-+ "/locationforecastlts/1.3/?lat=%s&lon=%s&"
-+ "msl=%d",
-+ data->lat, data->lon, data->msl);
-
- /* start receive thread */
- g_message(_("getting %s"), url);
-@@ -707,7 +720,7 @@ schedule_next_wakeup(plugin_data *data)
-
- next_day_t = day_at_midnight(now_t, 1);
- diff = difftime(next_day_t, now_t);
-- data->next_wakeup_reason = "current astro data update";
-+ data->next_wakeup_reason = "current astro data update";
- SCHEDULE_WAKEUP_COMPARE(data->astro_update->next,
- "astro data download");
- SCHEDULE_WAKEUP_COMPARE(data->weather_update->next,
-@@ -853,6 +866,12 @@ xfceweather_read_config(XfcePanelPlugin *plugin,
- data->timezone = g_strdup(value);
- }
-
-+ value = xfce_rc_read_entry(rc, "offset", NULL);
-+ if (value) {
-+ g_free(data->offset);
-+ data->offset = g_strdup(value);
-+ }
-+
- value = xfce_rc_read_entry(rc, "geonames_username", NULL);
- if (value) {
- g_free(data->geonames_username);
-@@ -975,6 +994,8 @@ xfceweather_write_config(XfcePanelPlugin *plugin,
-
- xfce_rc_write_entry(rc, "timezone", data->timezone);
-
-+ xfce_rc_write_entry(rc, "offset", data->offset);
-+
- if (data->geonames_username)
- xfce_rc_write_entry(rc, "geonames_username", data->geonames_username);
-
-@@ -1076,6 +1097,7 @@ write_cache_file(plugin_data *data)
- CACHE_APPEND("location_name=%s\n", data->location_name);
- CACHE_APPEND("lat=%s\n", data->lat);
- CACHE_APPEND("lon=%s\n", data->lon);
-+ CACHE_APPEND("offset=%s\n", data->offset);
- g_string_append_printf(out, "msl=%d\n", data->msl);
- g_string_append_printf(out, "timeslices=%d\n", wd->timeslices->len);
- if (G_LIKELY(data->weather_update)) {
-@@ -1190,7 +1212,7 @@ read_cache_file(plugin_data *data)
- xml_location *loc = NULL;
- xml_astro *astro = NULL;
- time_t now_t = time(NULL), cache_date_t;
-- gchar *file, *locname = NULL, *lat = NULL, *lon = NULL, *group = NULL;
-+ gchar *file, *locname = NULL, *lat = NULL, *lon = NULL, *group = NULL, *offset = NULL;
- gchar *timestring;
- gint msl, num_timeslices = 0, i, j;
-
-@@ -1225,7 +1247,8 @@ read_cache_file(plugin_data *data)
- locname = g_key_file_get_string(keyfile, group, "location_name", NULL);
- lat = g_key_file_get_string(keyfile, group, "lat", NULL);
- lon = g_key_file_get_string(keyfile, group, "lon", NULL);
-- if (locname == NULL || lat == NULL || lon == NULL) {
-+ offset = g_key_file_get_string(keyfile, group, "offset", NULL);
-+ if (locname == NULL || lat == NULL || lon == NULL || offset == NULL) {
- CACHE_FREE_VARS();
- weather_debug("Required values are missing in the cache file, "
- "reading cache file aborted.");
-@@ -1236,7 +1259,8 @@ read_cache_file(plugin_data *data)
- num_timeslices = g_key_file_get_integer(keyfile, group,
- "timeslices", &err);
- if (err || strcmp(lat, data->lat) || strcmp(lon, data->lon) ||
-- msl != data->msl || num_timeslices < 1) {
-+ strcmp(offset, data->offset) || msl != data->msl ||
-+ num_timeslices < 1) {
- CACHE_FREE_VARS();
- weather_debug("The required values are not present in the cache file "
- "or do not match the current plugin data. Reading "
-@@ -1404,6 +1428,9 @@ update_weatherdata_with_reset(plugin_data *data)
- /* set location timezone */
- update_timezone(data);
-
-+ /* set the offset of timezone */
-+ update_offset(data);
-+
- /* clear update times */
- init_update_infos(data);
-
-@@ -1709,9 +1736,9 @@ weather_get_tooltip_text(const plugin_data *data)
- sunval = g_strdup(_("The sun never sets today."));
- } else {
- sunrise = format_date(data->current_astro->sunrise,
-- "%H:%M:%S", TRUE);
-+ "%H:%M:%S", FALSE);
- sunset = format_date(data->current_astro->sunset,
-- "%H:%M:%S", TRUE);
-+ "%H:%M:%S", FALSE);
- sunval =
- g_strdup_printf(_("The sun rises at %s and sets at %s."),
- sunrise, sunset);
-@@ -1999,6 +2026,7 @@ xfceweather_free(XfcePanelPlugin *plugin,
- g_free(data->location_name);
- g_free(data->scrollbox_font);
- g_free(data->timezone);
-+ g_free(data->offset);
- g_free(data->timezone_initial);
- g_free(data->geonames_username);
-
-@@ -2170,6 +2198,7 @@ weather_construct(XfcePanelPlugin *plugin)
-
- xfceweather_read_config(plugin, data);
- update_timezone(data);
-+ update_offset(data);
- read_cache_file(data);
- update_current_conditions(data, TRUE);
- scrollbox_set_visible(data);
-diff --git a/panel-plugin/weather.h b/panel-plugin/weather.h
-index b1849a9..31ab9fb 100644
---- panel-plugin/weather.h
-+++ panel-plugin/weather.h
-@@ -114,6 +114,7 @@ typedef struct {
- gchar *lon;
- gint msl;
- gchar *timezone;
-+ gchar *offset;
- gchar *timezone_initial;
- gint cache_file_max_age;
- gboolean night_time;
-@@ -144,6 +145,8 @@ gchar *get_cache_directory(void);
-
- void update_timezone(plugin_data *data);
-
-+void update_offset(plugin_data *data);
-+
- void update_icon(plugin_data *data);
-
- void update_scrollbox(plugin_data *data,
---
-2.20.1
-