diff options
| author | Federico Angelilli <code@fedang.net> | 2024-09-08 22:41:53 +0200 |
|---|---|---|
| committer | Federico Angelilli <code@fedang.net> | 2024-09-08 22:41:53 +0200 |
| commit | f1f89a745fb46c4b387f3cb6c094e9dd38edf9f6 (patch) | |
| tree | e696fbcd8e3142c7e64e4b1e3148b16f96b79730 | |
| parent | ee8f2ac000a577f20a1a38c5ddd20831a8e38311 (diff) | |
Add date block
| -rw-r--r-- | comet.conf | 5 | ||||
| -rw-r--r-- | src/blocks/date.c | 53 | ||||
| -rw-r--r-- | src/blocks/fs.c | 2 | ||||
| -rw-r--r-- | src/blocks/ram.c | 8 | ||||
| -rw-r--r-- | src/blocks/scheme.c | 2 | ||||
| -rw-r--r-- | src/config.c | 1 |
6 files changed, 64 insertions, 7 deletions
@@ -28,6 +28,11 @@ text-color = #fff path = / +[block.disk] + type = date + text = "%A %d %B %H:%M" + color = #18baf2 + text-color = #fff ;[block.main] ; type = 0 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 <string.h> +#include <assert.h> +#include <time.h> + +#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, }; diff --git a/src/config.c b/src/config.c index 81932a0..cea99af 100644 --- a/src/config.c +++ b/src/config.c @@ -474,6 +474,7 @@ void config_resolve(config_t *config, block_t *block) block->label = strcopy("main"); block->type = BLOCK_GROUP; + block->min_width = block->max_width = config->width; block->group.spacing = 10; block->group.n_children = config->n_blocks; block->group.children = malloc(config->n_blocks * sizeof(block_t *)); |
