summaryrefslogtreecommitdiff
path: root/lib/radio.pm
blob: 306d90486945f0a5e44987466c8661c32608ac59 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#######################################
# self-enclosed polling mechanism for radio area

use LWP;

sub get_radio_info
	{
	my $radio;
	my $raw_radio;

	print "<small>" if ($DEBUG);

	$RADIO_STATUS_ENABLED = 1;
	if ( ! $RADIO_STATUS_ENABLED || poll_radio_status() == -1)
		{ return -1; }

	print "\nRadio is up!<br>\n" if ($DEBUG);

	if (poll_cache_age($RADIO_INFO_PATH) > 60)
		{
		print "Polling radio...<br>\n" if ($DEBUG);
		$raw_radio = go_slurp($RADIO_INFO_URL, $RADIO_INFO_PATH);
		}
	
	$raw_radio ||= quickread($RADIO_INFO_PATH);
	$radio = parse_colons($raw_radio);

	print "</small>" if ($DEBUG);

	return $radio;
	}

sub poll_cache_age
	{
	my $file = shift;
	my $ret = time - (stat($file))[9];
	print "Age of $file: $ret seconds...<br>\n" if ($DEBUG);
	return $ret;
	}

sub poll_radio_status
	{
	my $status;
	print "Polling radio status...<br>\n" if ($DEBUG);
#	go_slurp($RADIO_STATUS_URL, $RADIO_STATUS_PATH);
#	$status = quickread($RADIO_STATUS_PATH);

    my $r = HTTP::Request->new(GET => $RADIO_STATUS_URL);
    my $re = LWP::UserAgent->new->request($r);
    my $data = $re->content();

	chomp($data);
	if ($data eq "1")
		{ return 1; }
	else
		{ return -1; }
	}

sub parse_colons
	{
	my $filedata = shift;
	my %parsed;

	foreach $l (@$filedata)
		{
		chomp $l;
		my ($k, $v) = split(/: /, $l, 2);
		$k = lc($k);
		$k =~ s/ //;
		$parsed{lc($k)} = $v;
		}

	return \%parsed;
	}
		
sub go_slurp
	{
	my ($url, $file) = @_;
    my $r = HTTP::Request->new(GET => $url);
    my $re = LWP::UserAgent->new->request($r);
    my $data = $re->content();
	open F, ">$file" or return $data;
	print F $data;
	close F;
	my @lines = split "\n", $data;
	return \@lines;
	}

sub quickread
	{
	my $file = shift;
	my @out;
	open F, $file or die "problem with $file $!";
	@out=<F>;
	close F;
	return \@out;
	}

1;