gui: fix default stat command
[paraslash.git] / fade.c
diff --git a/fade.c b/fade.c
index b42e4a1..8dfbcc2 100644 (file)
--- a/fade.c
+++ b/fade.c
@@ -188,7 +188,6 @@ static void sweet_dreams(void)
        time_t t1, wake_time_epoch;
        unsigned int delay;
        struct tm *tm;
-       int hour = args_info.wake_hour_arg;
        int min = args_info.wake_min_arg;
        char *fa_stream = args_info.fa_stream_arg;
        char *wake_stream = args_info.wake_stream_arg;
@@ -201,6 +200,25 @@ static void sweet_dreams(void)
        char *cmd, *sleep_stream = args_info.sleep_stream_given?
                args_info.sleep_stream_arg : NULL;
 
+       /* calculate wake time */
+       time(&t1);
+       if (args_info.wake_hour_given) {
+               int hour = args_info.wake_hour_arg;
+               tm = localtime(&t1);
+               if (tm->tm_hour > hour || (tm->tm_hour == hour && tm->tm_min> min)) {
+                       t1 += 86400; /* wake time is tomorrow */
+                       tm = localtime(&t1);
+               }
+               tm->tm_hour = hour;
+               tm->tm_min = min;
+               tm->tm_sec = 0;
+       } else {
+               t1 += 8 * 60 * 60;
+               PARA_INFO_LOG("default wake time: %lu\n", t1);
+               tm = localtime(&t1);
+       }
+       wake_time_epoch = mktime(tm);
+       PARA_INFO_LOG("waketime: %s", asctime(tm));
        if (sf) {
                PARA_INFO_LOG("initial volume: %d\n", iv);
                set_vol(iv);
@@ -217,27 +235,15 @@ static void sweet_dreams(void)
                client_cmd("stop");
        if (!wf)
                return;
-       /* calculate wake time */
-       time(&t1);
-       tm = localtime(&t1);
-       if (tm->tm_hour > hour || (tm->tm_hour == hour && tm->tm_min> min)) {
-               /* wake time is tomorrow */
-               t1 += 86400;
-               tm = localtime(&t1);
-               t1 -= 86400;
-       }
-       tm->tm_hour = hour;
-       tm->tm_min = min;
-       tm->tm_sec = 0;
-       wake_time_epoch = mktime(tm);
-       PARA_INFO_LOG("waketime: %s", asctime(tm));
-       while (wake_time_epoch > t1 + wf) {
+       for (;;) {
+               time(&t1);
+               if (wake_time_epoch <= t1 + wf)
+                       break;
                delay = wake_time_epoch - t1 - wf;
                PARA_INFO_LOG("sleeping %u seconds (%u:%02u)\n",
                        delay, delay / 3600, 
                        (delay % 3600) / 60);
                sleep(delay);
-               time(&t1);
        }
        cmd = make_message("csp %s\n", wake_stream);
        client_cmd(cmd);