summaryrefslogtreecommitdiff
path: root/input_gadgets.c
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2018-10-30 09:58:41 +0100
committerErich Eckner <git@eckner.net>2018-10-31 21:48:36 +0100
commit86074fa3b45c751881e4e81eea6c0c21b2208d37 (patch)
treec98489e7a2c82a665606c6998f07c3957fb93b74 /input_gadgets.c
parent20c62edc0497bb26794df0ea6f506c59638096b0 (diff)
downloadanzeige-86074fa3b45c751881e4e81eea6c0c21b2208d37.tar.xz
input_gadgets.c: acknowledge onset / expire times
Diffstat (limited to 'input_gadgets.c')
-rw-r--r--input_gadgets.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/input_gadgets.c b/input_gadgets.c
index aad8aad..850c738 100644
--- a/input_gadgets.c
+++ b/input_gadgets.c
@@ -14,6 +14,7 @@
#define fh_temperature_regex "<strong>\\s*\n\\s*Wetterdaten vom ([0-9]{2})\\.([0-9]{2})\\.([0-9]{4}) um ([0-9:]{5}) MEZ</strong>(.|\n)*>Temperatur</td>\\s*\n\\s*<td [^>]*><strong>([^<]*)</strong>"
#define wetter_warnung_filename_regex "^2\\.49\\.0\\.1\\.276\\.0\\.DWD\\.PVW\\.([0-9]+)\\."
+#define warnings_future_timespan (60*60*10)
static size_t
WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp)
@@ -768,6 +769,11 @@ char *gadgets_retrieve_weather_warnings(char *output, int max_len)
if (!is_relevant)
continue;
+ if (warnings[warnings_len].onset >= time(NULL) + warnings_future_timespan)
+ continue; // start is too far ahead
+ if (warnings[warnings_len].expires < time(NULL))
+ continue; // warning has expired
+
text = xml_extract_string(doc, cur_node, "headline");
if (text == NULL) {
fprintf(stderr, "Failed to enter <headline>\n");
@@ -852,8 +858,14 @@ char *gadgets_retrieve_weather_warnings(char *output, int max_len)
for (int i=0; i<warnings_len; i++) {
if (output + max_len - ende > 0) {
ende += snprintf(ende, output + max_len - ende, "%s", warnings[i].event);
- if ((i+1<warnings_len) && (output + max_len - ende > 0))
- ende += snprintf(ende, output + max_len - ende, "; ", warnings[i].event);
+ if (output + max_len - ende > 0) {
+ if (warnings[i].onset > time(NULL))
+ ende += strftime(ende, output + max_len - ende, " ab %F %T", localtime(&warnings[i].onset));
+ if (warnings[i].expires < time(NULL) + warnings_future_timespan)
+ ende += strftime(ende, output + max_len - ende, " bis %F %T", localtime(&warnings[i].expires));
+ if ((i+1<warnings_len) && (output + max_len - ende > 0))
+ ende += snprintf(ende, output + max_len - ende, "; ", warnings[i].event);
+ }
}
free(warnings[i].headline);