diff options
Diffstat (limited to 'cgi-bin/Globals.pm')
| -rw-r--r-- | cgi-bin/Globals.pm | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/cgi-bin/Globals.pm b/cgi-bin/Globals.pm new file mode 100644 index 0000000..c4695b2 --- /dev/null +++ b/cgi-bin/Globals.pm @@ -0,0 +1,229 @@ +# Utils package +# Loads all config files, and supplies common functions + +package Globals; +use strict; +use URI::Escape; +use URI::URL; +use HTML::Entities (); +use CGI; +use LWP::UserAgent; +require LWP; +use URI; +use vars qw(@ISA @EXPORT @EXPORT_OK); +use vars qw(@MUSIC @VIDEO @CUSTOM @SHORTCUT $CGIROOT $APPNAME $MINTRAWL %PLATTERS %ALLPLATTERS $VERSION + $debug $delim $target $tracklink $audioRocketman $videoRocketman $bgcolour); + +require Exporter; +@ISA = qw(Exporter); +@EXPORT = qw(makeUnNice makeNice makeHTML getFile openTemplate getABCs makeJs getArtistString makeTrackPlaylist makeTrackURL getPlatterStats); +@EXPORT_OK = qw(@MUSIC @VIDEO @CUSTOM @SHORTCUT $CGIROOT $APPNAME $MINTRAWL %PLATTERS %ALLPLATTERS $VERSION + $delim $debug $target $audioRocketman $videoRocketman $bgcolour); + +$CGIROOT = "localhost"; +$APPNAME = "distroplat"; +$VERSION = "£3 6s 0d"; +$MINTRAWL = 30; +$debug = 0; +$delim = chr(255); + +open(CONF, "../data/distroplat.conf") or die "No config file found"; +my $list; +while (<CONF>) { + s/#.*//; + chomp; + my $line = $_; + if (length($line) == 0) { next } + if ($line =~/^\s*\[music\]/i) { $list = \@MUSIC; next } + if ($line =~/^\s*\[video\]/i) { $list = \@VIDEO; next } + if ($line =~/^\s*\[shortcut\]/i) { $list = \@SHORTCUT; next } + if ($line =~/^\s*\[customfolders\]/i) { $list = \@CUSTOM; next } + if ($line =~/^\s*cgiroot\s*=\s*(.*)/i) { $CGIROOT = $1; next } + if ($line =~/^\s*appname\s*=\s*(.*)/i) { $APPNAME = $1; next } + if ($line =~/^\s*colour\s*=\s*(.*)/i) { $bgcolour = $1; next } + if ($line =~/^\s*mintrawl\s*=\s*(.*)/i) { $MINTRAWL = $1; next } + if ($line =~/^\s*audioRocketman\s*=\s*(.*)/i) { $audioRocketman = $1; next } + if ($line =~/^\s*videoRocketman\s*=\s*(.*)/i) { $videoRocketman = $1; next } + if ($line =~/^\s*debug/i) { $debug = 1; next } + + push @$list, $line; +} + +if ($debug) { print "HTTP/1.0 200 OK\nContent-type: text/plain\n\n"; } + +close CONF; + +# Init CGI +my $query = CGI::new(); + +# Load server file +my $exclude = $query->cookie('exclude'); + +open ( SERVERS, "../data/servers.txt" ) or die "No servers file found"; +while ( <SERVERS> ) +{ + chomp; + my @INLINE = split ( / /, $_ ); + my $NAME = $INLINE[ 0 ]; + my $URL = $INLINE[ 1 ]; + if ($URL =~ /\/$/) { chop $URL; } + unless ($exclude =~ /$NAME,/) { $PLATTERS{ $NAME } = $URL; } + $ALLPLATTERS{ $NAME } = $URL; +} +close SERVERS; + +# target makes users with small screens open searches and artists full frame +# instead of in a window + +$target = $query->cookie('target'); +$target = 'iframe' unless $target; + +# abcs are loaded in a function because it's expensive and not used much +sub getABCs { + my %ABCS; + open (ABC, "../inventory/abcs.txt"); + while (<ABC>) { + chop; + my @thisabc = split($delim); + $ABCS{$thisabc[0]} = $thisabc[1]; + } + close(ABC); + return %ABCS; +} +# Unified MakeNice/UnNice + +sub makeUnNice( @_ ) +{ + my $UNNICE = $_[ 0 ]; + + $UNNICE = uri_escape($UNNICE); + # These things break reglier expressions + $UNNICE =~ s/\(/%28/g; + $UNNICE =~ s/\)/%29/g; + $UNNICE =~ s/\&/%26/g; + $UNNICE =~ s/\+/%2B/g; + $UNNICE =~ s/%2F/\//gi; # some versions of uri_escape escape forward slashes + return $UNNICE; +} + +sub makeNice( @_ ) +{ + my $NICE; + $NICE = uri_unescape($_[0]); + $NICE =~ s/([^\/]*),\sThe$/The $1/gi; + $NICE =~ s/(^|\/)\d{2} - /$1/g; + + $NICE =~ s/\.($_)$/ (Video)/gi foreach ( @VIDEO ) ; + $NICE =~ s/\.($_)$//gi foreach ( @MUSIC ) ; + $NICE =~ s/\.($_)$//gi foreach ( @SHORTCUT ) ; + $NICE =~ s/^Singles\//Single - /; + return $NICE; +} + +sub makeJs( @_ ) +{ + my ($NICE) = @_; + $NICE =~ s/'/\\'/g; + return $NICE; +} + +sub makeHTML( @_ ) +{ + my ($NICE) = @_; + $NICE = $NICE; + $NICE = HTML::Entities::encode($NICE); + $NICE =~ s/\s(\(.*\))$/ <\/a> <i>$1<\/i>/; + return $NICE; +} + +sub getFile( @_ ) +{ + my ($INURL) = @_; + + my $INFO; + my $HEADER = new HTTP::Headers( 'Accept' => 'text/plain', 'User-Agent' => 'PlatterTwaartter/1.0' ); + my $URL = new URI::URL( $INURL ); + my $REQUEST = new HTTP::Request( 'GET', $URL, $HEADER ); + my $UAGENT = new LWP::UserAgent; + my $RESPONSE = $UAGENT -> request( $REQUEST ); + + # Did we get a 200? + # + if ( $RESPONSE -> is_success ) + { + return $RESPONSE -> content; + } + + return "Error fetching ".$INURL; +} + +# opens a template file and returns it as a string +# +sub openTemplate( @_ ) +{ + my $TEMPLATE; + + open FILE, "../templates/".$_[ 0 ].".template" or die "Could not find template ".$_[0]; + + while( <FILE> ) + { + $TEMPLATE .= $_; + } + + close FILE; + + return $TEMPLATE; +} + +sub getArtistString( @_ ) { + my ($folder, $trackartist) = @_; + my $artist; + foreach (@CUSTOM) { $folder = undef if /^$folder$/ } + if ($folder && $trackartist) { $artist = "$folder & $trackartist" } + elsif ($folder) { $artist = $folder } + elsif ($trackartist) { $artist = $trackartist } + else {$artist = 'Unknown'}; + + return $artist; +} + +sub makeTrackPlaylist( @_ ) { + my ($folder, $trackartist, $album, $track, $platter) = @_; + + my $linkartist = $folder; + $linkartist= $trackartist if (length $trackartist > 0); + $album= 'Miscellany' if (length $album == 0); + return "search.plx?artist=".makeUnNice($linkartist)."&album=".makeUnNice($album)."&title=".makeUnNice($track)."&exact=1&searchFor=track&inv=$platter&filter=music,video,shortcut"; +} + +sub makeTrackURL( @_ ) { + my ($platter, $url, $folder, $trackartist, $title) = @_; + + foreach (@SHORTCUT) { + if ($url =~ /$_$/) { # is a shortcut + my $thisartist = $trackartist; + $thisartist = $folder unless (length $trackartist); + return "http://$CGIROOT/$APPNAME/search.plx?artist=".makeUnNice($thisartist)."&title=".makeUnNice($title)."&exact=1&output=redir"; + } + } + + return 'http://'.$platter.$url; +} + +sub getPlatterStats( @_ ) { + my ($platter) = @_; + my $artists=0; + my $tracks=-1; + open (INV, "../inventory/".$platter.".inv"); + my $line; + while ($line = <INV>) { + $tracks++ unless($line =~ /^http/); + } + $tracks = 0 if $tracks < 1; + close INV; + open (ARTIST, "../inventory/".$platter.".artist"); + $artists++ while (<ARTIST>); + close ARTIST; + return ($tracks, $artists); +} + |
