#!/usr/bin/perl -w

use XML::DOM;
use strict;

my $parser = new XML::DOM::Parser;

# a bug
my $dateNow = `date +'%Y-%m-%d'`;
my $timeNow = `date +'%Y%m%d%H%m'`;

chomp $dateNow;
chomp $timeNow;

#open(FD, "wget -q -O - 'http://xlife.dhs.org/tv/xml.php?fetchdate=" . `date +'%Y-%m-%d'` . "&channels=tv1,tv2,tv3,tv4,tvtv' |");

my $dir = "$ENV{HOME}/log";

if (-d $dir) {
  $dir = "$dir/tv";
} else {
  $dir = "$ENV{HOME}/tv";
}
mkdir "$dir", 0700;

my $fileName = "$dir/$dateNow.gz";

if (-e $fileName) {
  open(FD, "zcat $fileName | ");
} else {
  open(FD, "/bin/zsh -c \"wget -q -O - 'http://xlife.dhs.org/tv/xml.php?fetchdate=$dateNow&channels=tv1,tv2,tv3,tv4,tvtv' | tee >(gzip -9 > $fileName)\" | ");
}

#open(FD, "< tvscan.xml");

#print "wget -q -O - 'http://xlife.dhs.org/tv/xml.php?fetchdate=$dateNow&channels=tv1,tv2,tv3,tv4,tvtv' |\n";

my @channels;

my $doc = $parser->parse(*FD, ProtocolEncoding => 'ISO-8859-1');
my $top = $doc->getDocumentElement();
@channels = $top->getChildNodes();

for my $chan (@channels) {
  if ($chan->getNodeName() eq "channel") {
    print $chan->getAttribute("code"), "\n";
    my @channelProgs = $chan->getChildNodes();

    my $programs = 0;
    for my $prog (@channelProgs) {
      if ($prog->getNodeName() eq "program") {
	my ($start, $end, $name) = 
	  ($prog->getAttribute("start"),
	   $prog->getAttribute("end"),
	   $prog->getElementsByTagName("name"));


	if (($start <= $timeNow && $end >= $timeNow) ||
	    ($start >= $timeNow)) {
	  my $str = (substr($start, 8) . "-" .
		     substr(coalesce($end, "    "), 8) . "  " .
		     $name->getFirstChild()->toString() . "\n");
	  print $str;
	  if (++$programs >= 3) {
	    last;
	  }
	}
      }
    }
  }
}

close(FD);

$parser = 0;
exit;

sub coalesce (@) {
  my $answer = shift;
  while (!defined $answer &&
	 @_ > 0) {
    $answer = shift;
  }
  return $answer;
}
