Index: Makefile =================================================================== --- Makefile (révision 494451) +++ Makefile (copie de travail) @@ -3,6 +3,7 @@ PORTNAME= xfce4-weather-plugin PORTVERSION= 0.9.0 +PORTREVISION= 1 CATEGORIES= misc xfce geography MASTER_SITES= XFCE/src/panel-plugins/${PORTNAME}/${PORTVERSION:R} DIST_SUBDIR= xfce4 @@ -18,7 +19,7 @@ libfreetype.so:print/freetype2 USES= gettext-tools gmake gnome libtool pkgconfig tar:bzip2 xfce:gtk3 -USE_GNOME= cairo glib20 gtk30 intlhack intltool libxml2 +USE_GNOME= cairo glib20 gtk30 intltool libxml2 USE_XFCE= panel USE_LDCONFIG= yes Index: files/patch-panel-plugin_weather-data.c =================================================================== --- files/patch-panel-plugin_weather-data.c (nonexistent) +++ files/patch-panel-plugin_weather-data.c (copie de travail) @@ -0,0 +1,34 @@ +--- panel-plugin/weather-data.c.orig 2018-09-16 22:12:20 UTC ++++ 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("-")); + } Property changes on: files/patch-panel-plugin_weather-data.c ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: files/patch-panel-plugin_weather-data.h =================================================================== --- files/patch-panel-plugin_weather-data.h (nonexistent) +++ files/patch-panel-plugin_weather-data.h (copie de travail) @@ -0,0 +1,11 @@ +--- panel-plugin/weather-data.h.orig 2018-09-16 22:11:17 UTC ++++ 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); + Property changes on: files/patch-panel-plugin_weather-data.h ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: files/patch-panel-plugin_weather-parsers.c =================================================================== --- files/patch-panel-plugin_weather-parsers.c (nonexistent) +++ files/patch-panel-plugin_weather-parsers.c (copie de travail) @@ -0,0 +1,249 @@ +--- panel-plugin/weather-parsers.c.orig 2018-09-16 22:12:20 UTC ++++ panel-plugin/weather-parsers.c +@@ -35,7 +35,10 @@ + #include + #include + ++#include ++#include + ++ + #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 (strptime(ts, format, &tm) != NULL) { ++ if (local) ++ t = mktime(&tm); ++ else ++ t = my_timegm(&tm); + +- 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; Property changes on: files/patch-panel-plugin_weather-parsers.c ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: files/patch-panel-plugin_weather-summary.c =================================================================== --- files/patch-panel-plugin_weather-summary.c (nonexistent) +++ files/patch-panel-plugin_weather-summary.c (copie de travail) @@ -0,0 +1,77 @@ +--- panel-plugin/weather-summary.c.orig 2018-09-22 11:00:03 UTC ++++ panel-plugin/weather-summary.c +@@ -465,12 +465,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); +@@ -493,12 +493,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); +@@ -749,13 +749,13 @@ forecast_day_header_tooltip_text(xml_astro *astro) + "Sunset: The sun never sets this day." + "\n")); + else { +- sunrise = format_date(astro->sunrise, NULL, TRUE); ++ sunrise = format_date(astro->sunrise, NULL, FALSE); + g_string_append_printf(text, _("" + "Sunrise: %s" + "\n"), sunrise); + g_free(sunrise); + +- sunset = format_date(astro->sunset, NULL, TRUE); ++ sunset = format_date(astro->sunset, NULL, FALSE); + g_string_append_printf(text, _("" + "Sunset: %s" + "\n\n"), sunset); +@@ -782,13 +782,13 @@ forecast_day_header_tooltip_text(xml_astro *astro) + "Moonset: The moon never sets this day." + "\n")); + else { +- moonrise = format_date(astro->moonrise, NULL, TRUE); ++ moonrise = format_date(astro->moonrise, NULL, FALSE); + g_string_append_printf(text, _("" + "Moonrise: %s" + "\n"), moonrise); + g_free(moonrise); + +- moonset = format_date(astro->moonset, NULL, TRUE); ++ moonset = format_date(astro->moonset, NULL, FALSE); + g_string_append_printf(text, _("" + "Moonset: %s" + ""), moonset); +@@ -1134,10 +1134,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); Property changes on: files/patch-panel-plugin_weather-summary.c ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: files/patch-panel-plugin_weather.c =================================================================== --- files/patch-panel-plugin_weather.c (nonexistent) +++ files/patch-panel-plugin_weather.c (copie de travail) @@ -0,0 +1,255 @@ +--- panel-plugin/weather.c.orig 2018-09-16 22:12:20 UTC ++++ panel-plugin/weather.c +@@ -26,6 +26,9 @@ + #include + #include + ++#include ++#include ++ + #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); + +@@ -270,6 +268,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; +@@ -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); Property changes on: files/patch-panel-plugin_weather.c ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: files/patch-panel-plugin_weather.h =================================================================== --- files/patch-panel-plugin_weather.h (nonexistent) +++ files/patch-panel-plugin_weather.h (copie de travail) @@ -0,0 +1,19 @@ +--- panel-plugin/weather.h.orig 2018-09-22 10:58:51 UTC ++++ 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; +@@ -143,6 +144,8 @@ void forecast_click(GtkWidget *widget, + gchar *get_cache_directory(void); + + void update_timezone(plugin_data *data); ++ ++void update_offset(plugin_data *data); + + void update_icon(plugin_data *data); + Property changes on: files/patch-panel-plugin_weather.h ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property