FreeBSD Bugzilla – Attachment 202510 Details for
Bug 236166
misc/xfce4-weather-plugin: Fix sunrise API
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Fix sunrise API
xfce4-weather-plugin.diff (text/plain), 27.54 KB, created by
Olivier Duchateau
on 2019-03-02 19:55:42 UTC
(
hide
)
Description:
Fix sunrise API
Filename:
MIME Type:
Creator:
Olivier Duchateau
Created:
2019-03-02 19:55:42 UTC
Size:
27.54 KB
patch
obsolete
>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 <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 (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." >+ "</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); >+@@ -782,13 +782,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); >+@@ -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 <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); >+ >+@@ -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
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 236166
: 202510