This repository has been archived by the owner on May 27, 2023. It is now read-only.
/
util.pm
65 lines (51 loc) · 2.13 KB
/
util.pm
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
# util functions
# ------------------------------------------------------------------------------
sub init {
if (-r $OPTIONS{ini_file}) {
open my $FH, '<', $OPTIONS{ini_file} or die "Error open file: $!\n";
while (my $line = <$FH>) {
chomp $line;
next if $line =~ m/^ \s* \# .* $/x;
my ($key, $value) = split /\s*=\s*/, $line, 2;
$OPTIONS{$key} = $value;
}
close $FH;
$OPTIONS{radio_playlist_dir} =~ s/^~/$ENV{HOME}/ if defined $OPTIONS{radio_playlist_dir};
}
$OPTIONS{is_mac} = 1 if $^O eq 'darwin';
}
# ------------------------------------------------------------------------------
=head2 get_radio_stations
Get array with radio-station urls (from $OPTIONS{radio_playlist_dir} dir)
testing:
perl -ME -E 'p from_json(get("http://localhost:8080/get_radio"))'
=cut
sub get_radio_stations {
my $result = [];
if ($OPTIONS{radio_playlist_dir} && -d -r $OPTIONS{radio_playlist_dir}) {
for my $m3u_file (glob("$OPTIONS{radio_playlist_dir}/*.m3u"), glob("$OPTIONS{radio_playlist_dir}/*.pls")) {
my ($title_from_name, $ext) = $m3u_file =~ m{([^/]+)\.(m3u|pls)$};
$title_from_name =~ s/_/ /g;
my ($title, $url);
open my $FH, '<', $m3u_file or die "Error open file: $!\n";
while (my $line = <$FH>) {
chomp $line;
if ($ext eq 'm3u') {
$title = $1 if ! $title && $line =~ /^\#EXTINF: -?\d+, (.+?) \s* $/x;
if (! $url && $line =~ m{^http://}) {
$url = $line;
$url =~ s/\s+//g;
}
last if $title && $url;
} elsif ($ext eq 'pls') {
$title = $1 if $line =~ m{^Title\d+=(.+)\s*$};
$url = $1 if $line =~ m{^File\d+=(http://.+?)\s*$};
last if $url && $title;
}
}
close $FH;
push @$result, {title => $title || $title_from_name, url => $url} if $url && ($title || $title_from_name);
}
}
return $result;
}