#include #include #include "block.h" #include "util.h" #include "any_log.h" 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; extern const block_scheme_t block_script_scheme; extern const block_scheme_t block_slider_scheme; const block_scheme_t *block_schemes[] = { &block_text_scheme, &block_group_scheme, &block_ram_scheme, &block_fs_scheme, &block_date_scheme, &block_script_scheme, &block_slider_scheme, NULL, }; void block_update(block_t *block) { if (block->update_fn != NULL) { struct timespec now, diff; timespec_get(&now, TIME_UTC); diff = timespec_diff(now, block->update_last); if (timespec_greater(diff, block->update_interval)) { log_value_trace("Updating block", "s:label", block->label, "g:ts", ANY_LOG_FORMATTER(timespec_print), &now); block->update_fn(block); block->update_last = now; } } // NOTE: Block spec should handle its children by itself... // if (block->type == BLOCK_GROUP) { block_group_t *group = (block_group_t *)block; for (size_t i = 0; i < group->n_children; i++) block_update(group->children[i]); } } void block_free(block_t *block) { if (block->scheme->clean_fn != NULL) block->scheme->clean_fn(block); gradient_free(&block->bg_color); gradient_free(&block->line_color); free(block->label); free(block); }