#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, };