From 09fcedc33ffafee0aa957d1a5d582bad925e4f64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Mon, 21 Jan 2019 20:14:09 +0100 Subject: [PATCH 1/3] tag: pull in logging --- tag.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tag.c b/tag.c index 5a3e40e..1d68b81 100644 --- a/tag.c +++ b/tag.c @@ -5,6 +5,9 @@ #include #include +#define LOG_MODULE "tag" +#define LOG_ENABLE_DBG 1 +#include "log.h" #include "module.h" struct private { From 7936e197af7cc5800277f518a4853e9729ccfbd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Mon, 21 Jan 2019 20:14:25 +0100 Subject: [PATCH 2/3] tag: add support for an optional tag argument in a tag format string E..g {volume:max} --- tag.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/tag.c b/tag.c index 1d68b81..f97b2a4 100644 --- a/tag.c +++ b/tag.c @@ -423,10 +423,19 @@ tags_expand_template(const char *template, const struct tag_set *tags) continue; } - /* Extract tag name */ - char tag_name[end - begin]; - strncpy(tag_name, begin + 1, end - begin - 1); - tag_name[end - begin - 1] = '\0'; + /* Extract tag name + argument*/ + char tag_name_and_arg[end - begin]; + strncpy(tag_name_and_arg, begin + 1, end - begin - 1); + tag_name_and_arg[end - begin - 1] = '\0'; + + const char *tag_name = NULL; + const char *tag_arg = NULL; + + { + char *saveptr; + tag_name = strtok_r(tag_name_and_arg, ":", &saveptr); + tag_arg = strtok_r(NULL, ":", &saveptr); + } /* Lookup tag */ const struct tag *tag = tag_for_name(tags, tag_name); From a0ecc1ff03fe5973b1bfc107c14cd5b92e44a170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Mon, 21 Jan 2019 20:15:04 +0100 Subject: [PATCH 3/3] tag: add support for "min", "max" and "unit" tag arguments --- tag.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/tag.c b/tag.c index f97b2a4..1bbb270 100644 --- a/tag.c +++ b/tag.c @@ -450,8 +450,27 @@ tags_expand_template(const char *template, const struct tag_set *tags) sbuf_append_at_most(&formatted, template, begin - template); /* Copy tag value */ - const char *value = tag->as_string(tag); - sbuf_append(&formatted, value); + if (tag_arg == NULL) { + const char *value = tag->as_string(tag); + sbuf_append(&formatted, value); + } else if (strcmp(tag_arg, "min") == 0 || + strcmp(tag_arg, "max") == 0) + { + long value = strcmp(tag_arg, "min") == 0 ? tag->min(tag) : tag->max(tag); + char str[24]; + snprintf(str, sizeof(str), "%ld", value); + sbuf_append(&formatted, str); + } else if (strcmp(tag_arg, "unit") == 0) { + const char *value = NULL; + + switch (tag->realtime(tag)) { + case TAG_REALTIME_NONE: value = ""; break; + case TAG_REALTIME_SECS: value = "s"; break; + case TAG_REALTIME_MSECS: value = "ms"; break; + } + + sbuf_append(&formatted, value); + } /* Skip past tag name + closing '}' */ template = end + 1;