bin/heat: heat.schedule is now optional
authorJan Kratochvil <jan@jankratochvil.net>
Fri, 7 Jan 2022 17:14:41 +0000 (18:14 +0100)
committerJan Kratochvil <jan@jankratochvil.net>
Fri, 7 Jan 2022 17:14:41 +0000 (18:14 +0100)
bin/heat

index 4748edc..9227df5 100755 (executable)
--- a/bin/heat
+++ b/bin/heat
@@ -46,18 +46,23 @@ if (($ARGV[0]||"")=~/^[@]0?(\d+):0?(\d+)$/) {
   $minutes=$1*60+$2;
   shift;
 }
-my $schedule=readfile $schedulefile;
 my $finishline;
 my %schedule;
-while ($schedule=~s/^(0?(\d+):0?(\d+)) ([01s])\n//) {
-  my $tm=$2*60+$3;
-  warn "$schedulefile set twice for: $1" if defined $schedule{$tm};
-  $schedule{$tm-24*60}="$1 $4\n";
-  $schedule{$tm      }="$1 $4\n";
-  $schedule{$tm+24*60}="$1 $4\n";
-}
-warn "$schedulefile garbage: $schedule" if $schedule ne "";
+my $schedule;
+if (-e $schedulefile) {
+  $schedule=readfile $schedulefile;
+  while ($schedule=~s/^(0?(\d+):0?(\d+)) ([01s])\n//) {
+    my $tm=$2*60+$3;
+    warn "$schedulefile set twice for: $1" if defined $schedule{$tm};
+    $schedule{$tm-24*60}="$1 $4\n";
+    $schedule{$tm      }="$1 $4\n";
+    $schedule{$tm+24*60}="$1 $4\n";
+  }
+  warn "$schedulefile garbage: $schedule" if $schedule ne "";
+  warn "Empty $schedulefile" if !%schedule;
+}
 sub schedulenext($) {
+  return undef if !%schedule;
   my($now)=@_;
   my($bestprev,$prev,$bestnext,$next);
   for my $found (keys(%schedule)) {
@@ -104,7 +109,11 @@ if (defined $reset) {
 }
 sub finishlinereset() {
   $finishline=schedulenext $resetminutes;
-  splice @$finishline,1,0,$reset;
+  if ($finishline) {
+    splice @$finishline,1,0,$reset;
+  } else {
+    $finishline=[$reset];
+  }
 }
 finishlinereset if defined $reset;
 my $state=readfile $statefile;
@@ -120,7 +129,7 @@ sub printminutes($) {
   return sprintf "%02d:%02d",int($m/60),$m%60;
 }
 if ($silent) {
-  if (!defined $newstate&&!defined $reset) {
+  if (!defined $newstate&&!defined $reset&&%schedule) {
     my $prev=schedulenext($minutes)->[0];
     if ($prev=~m{^@[ printminutes $minutes ] (.)\n$}) {
       $newstate=$1;