summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetter Reinholdtsen <pere@hungry.com>2009-10-16 20:21:10 +0000
committerPetter Reinholdtsen <pere@hungry.com>2009-10-16 20:21:10 +0000
commit0e4e1f4bca47c4414ebf89c8e263073cbebcbc89 (patch)
tree4f41b6d8bab15cdf51e8d8dea5b215bf4462ab3f
parentbde7de0aadae7f0e591e28033bc018e51eca487b (diff)
Print next 5 sessions while waiting for the next session.
-rwxr-xr-xfrikanalen/bin/scheduler55
1 files changed, 44 insertions, 11 deletions
diff --git a/frikanalen/bin/scheduler b/frikanalen/bin/scheduler
index f392ad9..5e3d29e 100755
--- a/frikanalen/bin/scheduler
+++ b/frikanalen/bin/scheduler
@@ -23,40 +23,73 @@ binmode STDOUT, ":utf8";
my $listref = get_epglist();
-my %events = ();
+my @events = ();
for my $url (@{$listref}) {
# print "Loading '$url'\n";
my $ua = new LWP::UserAgent;
my $req = new HTTP::Request GET => $url;
my $res = $ua->request($req);
my $epgref = XMLin($res->content);
-# print Dumper($epgref);
for my $event (@{$epgref->{event}}) {
# print Dumper($event);
- $events{$event->{start}} = $event;
+
+ # Why do this test fail to keep entries with no start entry
+ # from the @events array.
+ if (defined $event->{'start'}) {
+ push @events, $event;
+ } else {
+ print "D: ", Dumper($event);
+ }
}
}
my $vlc = vlc_start();
-
-for my $key (sort keys %events) {
+@events = sort start_order @events;
+my $seq = -1;
+while (++$seq < scalar @events) {
+ my $event = $events[$seq];
my $now = time();
- my $starttime = str2time($key);
- my $stoptime = str2time($events{$key}->{stop});
+ my $start = $event->{'start'};
+ my $starttime = str2time($start);
+ my $stoptime = str2time($event->{stop});
+
# Skip entries from the past
if ($starttime >= $now) {
my $wait = $starttime - $now;
- my $title = $events{$key}->{'title'};
- print "Waiting $wait seconds to start '$title' $key\n";
+ my $title = $event->{'title'};
+ print "Waiting $wait seconds to start '$title' $start\n";
+ show_program($seq);
sleep $wait;
- process_event($vlc, $events{$key});
+ process_event($vlc, $event);
} elsif ($stoptime >= $now && $starttime <= $now) {
# If some program is already running, just start it to get
# something showing.
- process_event($vlc, $events{$key});
+ process_event($vlc, $event);
}
}
+sub show_program {
+ my $start = shift;
+ my $seq = 0;
+ while ($seq < 5) {
+ my $event = $events[$start + $seq];
+ my $title = $event->{'title'};
+ my $start = $event->{'start'};
+ print " $start $title\n";
+ $seq++;
+ }
+}
+
+sub start_order {
+ my ($a, $b) = @_;
+
+ # Try to figure out why some entries have no start entry, and why
+ # the test above do not keep these from showing up here.
+ print "A: ", Dumper($a) unless defined $a->{'start'};
+ print "B: ", Dumper($b) unless defined $b->{'start'};
+ return ($a->{'start'} || "") cmp ($b->{'start'} || "")
+}
+
sub process_event {
my ($vlc, $eventref) = @_;
# print Dumper($eventref);