From f1f89a745fb46c4b387f3cb6c094e9dd38edf9f6 Mon Sep 17 00:00:00 2001 From: Federico Angelilli Date: Sun, 8 Sep 2024 22:41:53 +0200 Subject: Add date block --- src/blocks/date.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/blocks/fs.c | 2 -- src/blocks/ram.c | 8 +++----- src/blocks/scheme.c | 2 ++ 4 files changed, 58 insertions(+), 7 deletions(-) create mode 100644 src/blocks/date.c (limited to 'src/blocks') diff --git a/src/blocks/date.c b/src/blocks/date.c new file mode 100644 index 0000000..01c62c3 --- /dev/null +++ b/src/blocks/date.c @@ -0,0 +1,53 @@ +#include +#include +#include + +#include "scheme.h" + +#include "../any_log.h" + +static void block_date_update(block_t *block) +{ + time_t epoch = time(NULL); + struct tm *loc_time = localtime(&epoch); + + char buffer[64]; + strftime(buffer, sizeof(buffer), block->state, loc_time); + + free(block->text.text); + block->text.text = strcopy(buffer); + assert(block->text.text != NULL); +} + +static void block_date_finalize(block_t *block) +{ + free(block->state); +} + +static bool block_date_validate(block_t *block, const block_scheme_t *scheme) +{ + if (block->text.text == NULL) { + log_error("Block '%s' requires key '%s'", block->label, "text"); + return false; + } + + block->state = block->text.text; + block->text.text = NULL; + return true; +} + +const block_scheme_t block_date_scheme = { + .name = "date", + .block = { + .type = BLOCK_TEXT, + .update_interval = { + .tv_sec = 1, + .tv_nsec = 0, + }, + .update_cb = block_date_update, + .finalize_cb = block_date_finalize, + }, + .size = sizeof(char *), + .entries = NULL, + .validate = block_date_validate, +}; diff --git a/src/blocks/fs.c b/src/blocks/fs.c index a47eb9c..1a4a178 100644 --- a/src/blocks/fs.c +++ b/src/blocks/fs.c @@ -96,5 +96,3 @@ const block_scheme_t block_fs_scheme = { .entries = block_fs_entries, .validate = block_fs_validate, }; - - diff --git a/src/blocks/ram.c b/src/blocks/ram.c index c6ed727..5a95013 100644 --- a/src/blocks/ram.c +++ b/src/blocks/ram.c @@ -64,10 +64,7 @@ static bool block_ram_validate(block_t *block, const block_scheme_t *scheme) return false; } - block->state = block->text.text; - block->text.text = NULL; - - if (strstr(block->state, "%{") == NULL) { + if (strstr(block->text.text, "%{") == NULL) { log_warn("Block '%s' does not use any ram variable", block->label); block->update_cb = NULL; @@ -75,6 +72,8 @@ static bool block_ram_validate(block_t *block, const block_scheme_t *scheme) return true; } + block->state = block->text.text; + block->text.text = NULL; return true; } @@ -93,4 +92,3 @@ const block_scheme_t block_ram_scheme = { .entries = NULL, .validate = block_ram_validate, }; - diff --git a/src/blocks/scheme.c b/src/blocks/scheme.c index a17ef3a..75519fc 100644 --- a/src/blocks/scheme.c +++ b/src/blocks/scheme.c @@ -4,11 +4,13 @@ extern const block_scheme_t block_text_scheme; extern const block_scheme_t block_group_scheme; extern const block_scheme_t block_ram_scheme; extern const block_scheme_t block_fs_scheme; +extern const block_scheme_t block_date_scheme; const block_scheme_t *block_schemes[] = { &block_text_scheme, &block_group_scheme, &block_ram_scheme, &block_fs_scheme, + &block_date_scheme, NULL, }; -- cgit v1.2.3