Better handling of configuration defaults for the new settings

This commit is contained in:
Johannes Holmberg 2015-09-16 21:19:46 -04:00 committed by Carlos R. Mafra
parent f28188a36b
commit 7678102e3b
3 changed files with 27 additions and 13 deletions

View file

@ -76,7 +76,7 @@ void config_init(void)
config.scrollstep = 0.03; config.scrollstep = 0.03;
config.osd = 1; config.osd = 1;
config.osd_color = (char *) default_osd_color; config.osd_color = (char *) default_osd_color;
config.osd_monitor_number = 0; config.osd_monitor_number = -1;
config.osd_monitor_name = NULL; config.osd_monitor_name = NULL;
} }
@ -111,14 +111,13 @@ void config_release(void)
} }
} }
void parse_monitor_value(char *value) bool parse_monitor_value(char *value)
{ {
char *end; char *end;
long mon = strtol(value, &end, 10); long mon = strtol(value, &end, 10);
if (end == value + strlen(value)) { if (end == value + strlen(value)) {
if ((mon > INT_MAX) || (mon < -1)) { if ((mon > INT_MAX) || (mon < -1)) {
fprintf(stderr, "wmix:warning: unreasonable monitor number provided, falling back to default\n"); return false;
config.osd_monitor_number = 0;
} else { } else {
if (mon == -1) if (mon == -1)
config.osd = 0; config.osd = 0;
@ -128,6 +127,7 @@ void parse_monitor_value(char *value)
} else { } else {
config.osd_monitor_name = strdup(value); config.osd_monitor_name = strdup(value);
} }
return true;
} }
/* /*
@ -203,7 +203,8 @@ void parse_cli_options(int argc, char **argv)
break; break;
case 'o': case 'o':
parse_monitor_value(optarg); if (!parse_monitor_value(optarg))
fprintf(stderr, "wmix:warning: unreasonable monitor number provided on command line, ignoring\n");
break; break;
case 'v': case 'v':
@ -216,13 +217,6 @@ void parse_cli_options(int argc, char **argv)
} }
config.exclude_channel[count_exclude] = NULL; config.exclude_channel[count_exclude] = NULL;
if (!config.mixer_device) {
if (config.api == 0)
config.mixer_device = (char *)default_card_name;
else if (config.api == 1)
config.mixer_device = (char *)default_mixer_device;
}
if (optind < argc) { if (optind < argc) {
fprintf(stderr, "wmix:error: argument '%s' not understood\n", argv[optind]); fprintf(stderr, "wmix:error: argument '%s' not understood\n", argv[optind]);
error_found = true; error_found = true;
@ -361,7 +355,10 @@ void config_read(void)
config.osd_color = strdup(value); config.osd_color = strdup(value);
} else if (strcmp(keyword, "osdmonitor") == 0) { } else if (strcmp(keyword, "osdmonitor") == 0) {
parse_monitor_value(value); if (!config.osd_monitor_name &&
config.osd_monitor_number == -1 &&
!parse_monitor_value(value))
fprintf(stderr, "wmix:warning: unreasonable monitor number in config, ignoring\n");
} else if (strcmp(keyword, "scrolltext") == 0) { } else if (strcmp(keyword, "scrolltext") == 0) {
config.scrolltext = atoi(value); config.scrolltext = atoi(value);
@ -393,3 +390,16 @@ void config_read(void)
} }
fclose(fp); fclose(fp);
} }
void config_set_defaults()
{
if (!config.mixer_device) {
if (config.api == 0)
config.mixer_device = (char *)default_card_name;
else if (config.api == 1)
config.mixer_device = (char *)default_mixer_device;
}
if (!config.osd_monitor_name && config.osd_monitor_number == -1)
config.osd_monitor_number = 0;
}

View file

@ -64,4 +64,7 @@ void parse_cli_options(int argc, char **argv);
/* Read configuration from file */ /* Read configuration from file */
void config_read(void); void config_read(void);
/* Set some default values based on configuration choices */
void config_set_defaults();
#endif /* WMIX_CONFIG_H */ #endif /* WMIX_CONFIG_H */

View file

@ -71,6 +71,7 @@ int main(int argc, char **argv)
config_init(); config_init();
parse_cli_options(argc, argv); parse_cli_options(argc, argv);
config_read(); config_read();
config_set_defaults();
choose_api(config.api); choose_api(config.api);
mixer_init(config.mixer_device, config.verbose, (const char **)config.exclude_channel); mixer_init(config.mixer_device, config.verbose, (const char **)config.exclude_channel);