X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=mixer.c;h=4ceaba9c1b43c787a3397447c7d5903cda48b485;hp=52af25f9c22ae5397f03c5bf61daaae0f1bb67bd;hb=176d4e57f7381f6215f2baf3b07f859bb4c72e76;hpb=c517cb88ae745c9be06ac5cd99236c4bae8575c9 diff --git a/mixer.c b/mixer.c index 52af25f9..4ceaba9c 100644 --- a/mixer.c +++ b/mixer.c @@ -8,6 +8,7 @@ #include "mixer.lsg.h" #include "para.h" +#include "lsu.h" #include "fd.h" #include "string.h" #include "mix.h" @@ -312,7 +313,6 @@ static int com_sleep(const struct mixer *m, struct mixer_handle *h) client_cmd("stop"); if (!fit || !fi_mood) /* nothing to do */ return 1; - change_afs_mode(fi_mood); for (;;) { time(&t1); if (wake_time_epoch <= t1 + fit) @@ -323,7 +323,11 @@ static int com_sleep(const struct mixer *m, struct mixer_handle *h) (delay % 3600) / 60); sleep(delay); } - client_cmd("play"); + change_afs_mode(fi_mood); + if (sleep_mood) /* currently playing */ + client_cmd("next"); + else /* currently stopped */ + client_cmd("play"); ret = fade(m, h, fiv, fit); PARA_INFO_LOG("fade complete, returning\n"); return ret; @@ -453,60 +457,16 @@ static void handle_help_flags(void) static int parse_and_merge_config_file(const struct lls_command *cmd) { int ret; - int cf_argc; - char **cf_argv; - char *cf, *errctx = NULL; - struct lls_parse_result **lprp, *cf_lpr, *merged_lpr; - void *map; - size_t sz; - const char *subcmd_name; - - if (cmd == lls_cmd(0, mixer_suite)) { - lprp = &lpr; - subcmd_name = NULL; - } else { - lprp = &sub_lpr; - subcmd_name = lls_command_name(cmd); - } - if (OPT_GIVEN(PARA_MIXER, CONFIG_FILE)) - cf = para_strdup(OPT_STRING_VAL(PARA_MIXER, CONFIG_FILE)); - else { - char *home = para_homedir(); - cf = make_message("%s/.paraslash/mixer.conf", home); - free(home); - } - ret = mmap_full_file(cf, O_RDONLY, &map, &sz, NULL); - if (ret < 0) { - if (ret != -E_EMPTY && ret != -ERRNO_TO_PARA_ERROR(ENOENT)) - goto free_cf; - if (ret == -ERRNO_TO_PARA_ERROR(ENOENT) && - OPT_GIVEN(PARA_MIXER, CONFIG_FILE)) - goto free_cf; - } else { - ret = lls(lls_convert_config(map, sz, subcmd_name, &cf_argv, &errctx)); - para_munmap(map, sz); - if (ret < 0) - goto free_cf; - cf_argc = ret; - ret = lls(lls_parse(cf_argc, cf_argv, cmd, &cf_lpr, &errctx)); - lls_free_argv(cf_argv); - if (ret < 0) - goto free_cf; - ret = lls(lls_merge(*lprp, cf_lpr, cmd, &merged_lpr, &errctx)); - lls_free_parse_result(cf_lpr, cmd); - if (ret < 0) - goto free_cf; - lls_free_parse_result(*lprp, cmd); - *lprp = merged_lpr; - loglevel = OPT_UINT32_VAL(PARA_MIXER, LOGLEVEL); - } - ret = 1; -free_cf: - free(cf); - if (errctx) - PARA_ERROR_LOG("%s\n", errctx); - free(errctx); - return ret; + struct lls_parse_result **lprp = (cmd == lls_cmd(0, mixer_suite))? + &lpr : &sub_lpr; + + ret = lsu_merge_config_file_options(OPT_STRING_VAL(PARA_MIXER, + CONFIG_FILE), "mixer.conf", lprp, cmd, mixer_suite, + 0 /* flags */); + if (ret < 0) + return ret; + loglevel = OPT_UINT32_VAL(PARA_MIXER, LOGLEVEL); + return 1; } /**