aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFederico Angelilli <code@fedang.net>2024-09-08 22:41:53 +0200
committerFederico Angelilli <code@fedang.net>2024-09-08 22:41:53 +0200
commitf1f89a745fb46c4b387f3cb6c094e9dd38edf9f6 (patch)
treee696fbcd8e3142c7e64e4b1e3148b16f96b79730 /src
parentee8f2ac000a577f20a1a38c5ddd20831a8e38311 (diff)
Add date block
Diffstat (limited to 'src')
-rw-r--r--src/blocks/date.c53
-rw-r--r--src/blocks/fs.c2
-rw-r--r--src/blocks/ram.c8
-rw-r--r--src/blocks/scheme.c2
-rw-r--r--src/config.c1
5 files changed, 59 insertions, 7 deletions
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 *));