[Xfce4-commits] [panel-plugins/xfce4-weather-plugin] 04/08: Use the latest sunrise API (2.0) Adapted for 0.8.x from https://git.xfce.org/panel-plugins/xfce4-weather-plugin/commit/?id=701da805ecf273f376dbae5003607746fad9d316

noreply at xfce.org noreply at xfce.org
Sun Mar 24 18:26:15 CET 2019


This is an automated email from the git hooks/post-receive script.

b   l   u   e   s   a   b   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   -   0   .   8   
   in repository panel-plugins/xfce4-weather-plugin.

commit 3653203bd4ac03ee3c6bee7d0e35144a94cc27bb
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Mar 24 08:06:44 2019 -0400

    Use the latest sunrise API (2.0)
    Adapted for 0.8.x from https://git.xfce.org/panel-plugins/xfce4-weather-plugin/commit/?id=701da805ecf273f376dbae5003607746fad9d316
---
 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         | 105 ++++++++++++++---------
 panel-plugin/weather.h         |   3 +
 6 files changed, 185 insertions(+), 142 deletions(-)

diff --git a/panel-plugin/weather-data.c b/panel-plugin/weather-data.c
index d54e481..fa3d217 100644
--- a/panel-plugin/weather-data.c
+++ b/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
--- a/panel-plugin/weather-data.h
+++ b/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 bec10f7..b3bef08 100644
--- a/panel-plugin/weather-parsers.c
+++ b/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))
+    if (strptime(ts, format, &tm) != NULL) {
+        if (local)
+            t = mktime(&tm);
+        else
+            t = my_timegm(&tm);
+
+        if (t < 0) {
+            memset(&t, 0, sizeof(time_t));
+            return t;
+        } else {
+            return t;
+        }
+    } else {
+        memset(&t, 0, sizeof(time_t));
         return t;
-
-    if (local)
-        t = mktime(&tm);
-    else
-        t = my_timegm(&tm);
-
-    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 48f3c10..026c865 100644
--- a/panel-plugin/weather-summary.c
+++ b/panel-plugin/weather-summary.c
@@ -443,12 +443,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);
@@ -471,12 +471,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);
@@ -727,13 +727,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);
@@ -760,13 +760,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);
@@ -1107,10 +1107,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 c096795..11b9ae3 100644
--- a/panel-plugin/weather.c
+++ b/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"
@@ -45,12 +48,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: */
@@ -79,6 +76,7 @@
     g_free(locname);                            \
     g_free(lat);                                \
     g_free(lon);                                \
+    g_free(offset);                             \
     if (keyfile)                                \
         g_key_file_free(keyfile);
 
@@ -268,6 +266,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)
 {
     GdkPixbuf *icon;
@@ -479,7 +490,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;
 
@@ -490,13 +501,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)
@@ -578,8 +595,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))
@@ -614,26 +631,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);
     }
 
@@ -645,10 +658,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);
@@ -705,7 +718,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,
@@ -836,6 +849,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);
@@ -958,6 +977,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);
 
@@ -1059,6 +1080,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)) {
@@ -1173,7 +1195,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;
 
@@ -1208,7 +1230,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.");
@@ -1219,7 +1242,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 "
@@ -1387,6 +1411,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);
 
@@ -1690,9 +1717,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);
@@ -1982,6 +2009,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);
 
@@ -2151,6 +2179,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 6556682..6d4f656 100644
--- a/panel-plugin/weather.h
+++ b/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,

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list