aboutsummaryrefslogtreecommitdiff
path: root/src/block.c
diff options
context:
space:
mode:
authorFederico Angelilli <code@fedang.net>2024-11-27 23:19:38 +0100
committerFederico Angelilli <code@fedang.net>2024-11-27 23:19:38 +0100
commit6ab3b52fbde3ab2ac11e66e4d664f67e108f6aee (patch)
tree838f5231fffc6cacdd65762443fd56bbe0f275f6 /src/block.c
parent2582279bc1046954702311c300294c5fd9f3ae0c (diff)
Rework resolve functions
Diffstat (limited to 'src/block.c')
-rw-r--r--src/block.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/block.c b/src/block.c
index 1786502..04ad902 100644
--- a/src/block.c
+++ b/src/block.c
@@ -3,6 +3,7 @@
#include "block.h"
#include "util.h"
+#include "action.h"
#include "any_log.h"
extern const block_scheme_t block_text_scheme;
@@ -50,6 +51,27 @@ void block_update(block_t *block)
}
}
+bool block_resolve(block_t *block, config_t *config)
+{
+ if (block->resolved)
+ return true;
+
+ block->resolved = true;
+
+ for (size_t i = 0; i < EVENT_MAX; i++) {
+ char *action = (char *)block->actions[i];
+ if (action == NULL) continue;
+
+ if (!config_resolve_action(config, action, &block->actions[i]))
+ return false;
+
+ free(action);
+ }
+
+ return block->scheme->resolve_fn == NULL
+ || block->scheme->resolve_fn(block, config);
+}
+
bool block_change(block_t *block, config_t *config, const char *key, const char *value)
{
extern const config_entry_t block_entries[];