diff options
Diffstat (limited to 'src/modules/rtv')
| -rw-r--r-- | src/modules/rtv/rtv.c | 33 | 
1 files changed, 33 insertions, 0 deletions
diff --git a/src/modules/rtv/rtv.c b/src/modules/rtv/rtv.c index 1984f30..82720b6 100644 --- a/src/modules/rtv/rtv.c +++ b/src/modules/rtv/rtv.c @@ -1,4 +1,6 @@ +#include <stdio.h>  #include <stdlib.h> +#include <string.h>  #include <time.h>  #include "til.h" @@ -22,6 +24,7 @@  #define RTV_CONTEXT_DURATION_SECS	4  #define RTV_CAPTION_DURATION_SECS	2  #define RTV_DEFAULT_SNOW_MODULE		"none" +#define RTV_DEFAULT_LOG_SETTINGS	0  typedef struct rtv_channel_t {  	const til_module_t	*module; @@ -43,6 +46,7 @@ typedef struct rtv_context_t {  	unsigned		context_duration;  	unsigned		snow_duration;  	unsigned		caption_duration; +	unsigned		log_channels:1;  	rtv_channel_t		snow_channel; @@ -57,6 +61,7 @@ typedef struct rtv_setup_t {  	unsigned		snow_duration;  	unsigned		caption_duration;  	char			*snow_module; +	unsigned		log_channels:1;  	char			*channels[];  } rtv_setup_t; @@ -181,6 +186,9 @@ static void setup_next_channel(rtv_context_t *ctxt, unsigned ticks)  			ctxt->caption = ctxt->channel->caption = caption;  			ctxt->channel->settings_as_arg = settings_as_arg ? settings_as_arg : strdup(""); + +			if (ctxt->log_channels) /* TODO: we need to capture seed state too, a general solution capturing such global state would be nice */ +				fprintf(stderr, "rtv channel settings: \'%s\'\n", ctxt->channel->settings_as_arg);  		}  		ctxt->next_switch = now + ctxt->duration; @@ -252,6 +260,8 @@ static til_module_context_t * rtv_create_context(const til_module_t *module, til  		(void) til_module_create_context(ctxt->snow_channel.module, stream, rand_r(&seed), ticks, 0, path, NULL, &ctxt->snow_channel.module_ctxt);  	} +	ctxt->log_channels = ((rtv_setup_t *)setup)->log_channels; +  	for (size_t i = 0; i < n_modules; i++) {  		if (!rtv_should_skip_module((rtv_setup_t *)setup, modules[i]))  			ctxt->channels[ctxt->n_channels++].module = modules[i]; @@ -319,6 +329,12 @@ static int rtv_setup(const til_settings_t *settings, til_setting_t **res_setting  	const char	*caption_duration;  	const char	*snow_duration;  	const char	*snow_module; +	const char	*log_channels; +	const char	*log_channels_values[] = { +				"no", +				"yes", +				NULL +			};  	int		r;  	r = til_settings_get_and_describe_value(settings, @@ -403,6 +419,20 @@ static int rtv_setup(const til_settings_t *settings, til_setting_t **res_setting  	if (r)  		return r; +	r = til_settings_get_and_describe_value(settings, +						&(til_setting_spec_t){ +							.name = "Log channel settings to stderr", +							.key = "log_channels", +							.preferred = log_channels_values[RTV_DEFAULT_LOG_SETTINGS], +							.values = log_channels_values, +							.annotations = NULL +						}, +						&log_channels, +						res_setting, +						res_desc); +	if (r) +		return r; +  	if (res_setup) {  		rtv_setup_t	*setup; @@ -467,6 +497,9 @@ static int rtv_setup(const til_settings_t *settings, til_setting_t **res_setting  		sscanf(caption_duration, "%u", &setup->caption_duration);  		sscanf(snow_duration, "%u", &setup->snow_duration); +		if (!strcasecmp(log_channels, log_channels_values[1])) +			setup->log_channels = 1; +  		*res_setup = &setup->til_setup;  	}  | 
