Fix number of whitespaces in duration status item.
[paraslash.git] / fade.c
diff --git a/fade.c b/fade.c
index d9834a2b173eeffc2b3bc6744e20065ea2052647..f269f0292fbf31be9f48673314beee6c14cb8c05 100644 (file)
--- a/fade.c
+++ b/fade.c
@@ -6,6 +6,9 @@
 
 /** \file fade.c a volume fader and alarm clock */
 
+#include <sys/types.h>
+#include <dirent.h>
+
 #include "fade.cmdline.h"
 #include "para.h"
 #include "fd.h"
@@ -158,6 +161,19 @@ static int client_cmd(const char *cmd,...)
        return ret;
 }
 
+static void change_afs_mode_and_play(char *afs_mode)
+{
+       char *cmd;
+
+       client_cmd("stop");
+       if (!afs_mode)
+               return;
+       cmd = make_message("select %s\n", afs_mode);
+       client_cmd(cmd);
+       free(cmd);
+       client_cmd("play");
+}
+
 /*
  * sleep
  */
@@ -167,16 +183,14 @@ static void sweet_dreams(void)
        unsigned int delay;
        struct tm *tm;
        int min = conf.wake_min_arg;
-       char *fa_stream = conf.fa_stream_arg;
-       char *wake_stream = conf.wake_stream_arg;
-       //char *current_stream = stat_items[STREAM].content;
+       char *fa_mode = conf.fa_mode_arg;
+       char *wake_mode = conf.wake_mode_arg;
+       char *sleep_mode = conf.sleep_mode_arg;
        int wf = conf.wake_fade_arg;
        int sf = conf.fa_fade_arg;
        int wv = conf.wake_vol_arg;
        int sv = conf.fa_vol_arg;
        int iv = conf.sleep_ivol_arg;
-       char *cmd, *sleep_stream = conf.sleep_stream_given?
-               conf.sleep_stream_arg : NULL;
 
        /* calculate wake time */
        time(&t1);
@@ -191,26 +205,22 @@ static void sweet_dreams(void)
                tm->tm_min = min;
                tm->tm_sec = 0;
        } else {
-               t1 += 8 * 60 * 60;
+               t1 += 9 * 60 * 60; /* nine hours from now */
                PARA_INFO_LOG("default wake time: %lu\n", t1);
                tm = localtime(&t1);
        }
        wake_time_epoch = mktime(tm);
        PARA_INFO_LOG("waketime: %s", asctime(tm));
+       client_cmd("stop");
+       sleep(1);
        if (sf) {
                PARA_INFO_LOG("initial volume: %d\n", iv);
                set_vol(iv);
-               cmd = make_message("csp %s\n", fa_stream);
-               client_cmd(cmd);
-               free(cmd);
+               change_afs_mode_and_play(fa_mode);
                fade(sv, sf);
-       }
-       if (sleep_stream) {
-               cmd = make_message("csp %s\n", sleep_stream);
-               client_cmd(cmd);
-               free(cmd);
        } else
-               client_cmd("stop");
+               set_vol(sf);
+       change_afs_mode_and_play(sleep_mode);
        if (!wf)
                return;
        for (;;) {
@@ -219,15 +229,13 @@ static void sweet_dreams(void)
                        break;
                delay = wake_time_epoch - t1 - wf;
                PARA_INFO_LOG("sleeping %u seconds (%u:%02u)\n",
-                       delay, delay / 3600, 
+                       delay, delay / 3600,
                        (delay % 3600) / 60);
                sleep(delay);
        }
-       cmd = make_message("csp %s\n", wake_stream);
-       client_cmd(cmd);
-       free(cmd);
+       change_afs_mode_and_play(wake_mode);
        fade(wv, wf);
-       PARA_INFO_LOG("%s", "fade complete, returning\n");
+       PARA_INFO_LOG("fade complete, returning\n");
 }
 
 static void snooze(void)