diff options
Diffstat (limited to 'cgi-bin/playlists')
| -rw-r--r-- | cgi-bin/playlists/album.pm | 197 | ||||
| -rw-r--r-- | cgi-bin/playlists/artistlist.pm | 78 | ||||
| -rw-r--r-- | cgi-bin/playlists/extm3u.pm | 36 | ||||
| -rw-r--r-- | cgi-bin/playlists/extpls.pm | 39 | ||||
| -rw-r--r-- | cgi-bin/playlists/extrmp.pm | 53 | ||||
| -rw-r--r-- | cgi-bin/playlists/extwvx.pm | 64 | ||||
| -rw-r--r-- | cgi-bin/playlists/playlist.pm | 33 | ||||
| -rw-r--r-- | cgi-bin/playlists/tracks.pm | 85 |
8 files changed, 585 insertions, 0 deletions
diff --git a/cgi-bin/playlists/album.pm b/cgi-bin/playlists/album.pm new file mode 100644 index 0000000..89f9273 --- /dev/null +++ b/cgi-bin/playlists/album.pm @@ -0,0 +1,197 @@ +package album; + +use Globals; +use CGI; +use Globals qw(%PLATTERS); +use Globals qw(@CUSTOM); +use Globals qw($delim); +use strict; + +sub new { + my $self = { + mime => "text/html", + playlist => undef, + artist => undef, + coverCount => 0, + info => undef, + platter => undef, + currentAlbum => undef, + playlink => undef, + custom => undef, + foreign => undef + }; + + my $query = CGI::new(); + my $target = $query->cookie("target"); + + if ( $target =~ /narrow/ ) + { + $self->{playlist} = openTemplate("albumNarrow"); + } + else + { + $self->{playlist} = openTemplate("album"); + } + + bless ($self); + return $self; +} + +sub desc { + return "Used internally to build album views"; + } + +sub header { + my $self = shift; + my ($artist, $album) = @_; + $self->{artist} = $artist; + $self->{album} = $album; + #print $artist; + foreach ( @CUSTOM ) { + if ($artist eq $_) { + $self->{custom} = 1; + last; + } + } + # make a nice display for the albums + $album =~ /(\d{2} - |)(.*?)( \((\d{4})\)|)$/; + my $albumname = $2; my $year = $4; + my $htmlalbum = '<a href="front.plx?artist='.makeUnNice($artist).'&album='.makeUnNice($album).'" class="heading" target="_top" title="Platter link to '.$album.'"><span class="title">'.makeHTML($2).'</span></a>'; + $htmlalbum = '' if ($albumname eq 'Miscellany'); + + # initialise the playlist + $self->{playlist} =~ s/%ALBUM%/$album/g; + $self->{playlist} =~ s/%HTMLALBUM%/$htmlalbum/g; + $self->{playlist} =~ s/%ARTIST%/$artist/g; + $self->{playlist} =~ s/%YEAR%/<br> <b>$year<\/b>/g; + $self->{playlink} = 'search.plx?artist='.makeUnNice($artist).'&album='.makeUnNice($album).'&exact=1&searchFor=track&inv=%INV%&filter=music,video,shortcut'; + $self->{currentAlbum} = makeNice($album); + +} + +sub track { + my $self = shift; + my ($folder, $trackartist, $album, $year, $track, $url, $platter) = @_; + + if ($track =~ /(cover|artist).*\.(gif|jpg|png)$/i) { + # put the image and label in if not there yet + if (!($self->{coverCount})) { + my $cover = '<p><a href="javascript:nextCover()"><img border=0 name="cover" id="cover" alt="Click for next image"></a><br>'. + '<small>Image from <strong name="coversource" id="coversource">Nobody</strong> (<span name="coverno" id="coverno">0</span> of %TOTALCOVERS%)</small><script>nextCover();</script>'; + + $self->{playlist} =~ s/%COVER%/$cover/; + } + + # insert into the javascript arrays + + my $coverLoc = "locations[$self->{coverCount}] = '".makeJs('http://'.$PLATTERS{$platter}.$url)."';\n "; + $self->{playlist} =~ s/%LOCATIONS%/$coverLoc%LOCATIONS%/; + my $coverSource = "sources[$self->{coverCount}] = '$platter';\n "; + $self->{playlist} =~ s/%SOURCES%/$coverSource%SOURCES%/; + + $self->{coverCount}++; + + } + elsif ($track =~ /info\.txt$/i) { + $self->{info} .= '<p><i>'.$platter.' says:</i><br>'.getFile('http://'.$PLATTERS{$platter}.$url)."\n"; + } + else { # add the track + + # look to see if we're on a child album and report it + my $trackhtml; + my $nicealbum = makeNice($album); + + if ($self->{currentAlbum} ne $nicealbum) { + my $albumstub = $nicealbum; + $albumstub =~ s/^\Q$self->{album}\E\///; + $trackhtml = '<br><b>'.makeHTML($albumstub)."</b>\n"; + } + + $self->{currentAlbum} = $nicealbum; + + # link to other folder if present + my $foreigner; + foreach (($folder, $trackartist)) { + my $thisArtist = $_; + my $thisNiceArtist = makeNice($thisArtist); + if ($thisArtist && !($thisNiceArtist =~ /^$self->{artist}$/i) && !($thisNiceArtist =~ /^$folder$/i) ) { + $foreigner = '<br><small><i>'; + $foreigner .= 'with ' if (!$self->{custom}); + $foreigner .= '<a href="artist.plx?name='.makeUnNice($thisArtist).'&exact=1" target="_parent">'.makeHTML($thisArtist).'</a></i></small>' ; + } + } + + # paste the track in + $trackhtml .= '<li><a href="'.makeTrackURL($PLATTERS{$platter}, $url, $folder, $trackartist, $track ).'"><img src="/platdoc/img/filebutton_s.png" border=0 align="top"></a><a href="'.makeTrackPlaylist($folder, $trackartist, $album, $track, $platter).'"><img src="/platdoc/img/playbutton_s.png" border=0 align="top"> '.makeHTML($track)."</a>$foreigner</li>\n%TRACKS%"; + + $self->{playlist} =~ s/%TRACKS%/$trackhtml/; + + # check if extract of another album + if (!$self->{foreign} && $self->{album} ne 'Miscellany') { + my $artistlink = makeNice($folder); + if ($artistlink && $artistlink ne $self->{artist}) { # link to proper artist page + $self->{foreign} = " <i>from <a href=\"artist.plx?name=".makeUnNice($artistlink)."&album=".$album."\" target=\"_parent\">$artistlink</a>"; + } + else { + $self->{foreign} = " "; # don't check again + } + } + + # update the host + if ($self->{platter} eq "") { + $self->{platter} = $platter; + } + elsif ($self->{platter} ne $platter && $self->{platter} ne 'Various') { + $self->{platter} = 'Various'; + } + + } +} + +sub dump { + my $self = shift; + # remove any unused placeholders + $self->{playlist} =~ s/%COVER%//; + $self->{playlist} =~ s/%TRACKS%//; + $self->{playlist} =~ s/%SOURCES%//; + $self->{playlist} =~ s/%LOCATIONS%//; + $self->{playlist} =~ s/%TOTALCOVERS%/$self->{coverCount}/g; + + # info + my $info = $self->{info}; + my $infolink; + if (!$info) { + $info = '<p><i>No further info available</i>' ; + } + else { + $infolink = '<a href="#info"><img src="/platdoc/img/infobutton.png" width=32 height=32 border=0 alt="Information"></a>'; + } + + my $playbutton; my $hostreport; + + # playbutton + if ($self->{platter}) { + $playbutton = '<a href="'.$self->{playlink}.'">'. + '<img src="/platdoc/img/playbutton.png" width=32 height=32 border=0 alt="Play"></a>'; + $hostreport = 'Hosted by <strong>%SOURCE%</strong>'; + } + $self->{playlist} =~ s/%PLAYBUTTON%/$playbutton/; + $self->{playlist} =~ s/%HOST%/$hostreport/; + + + #all other vars + my $source = $self->{platter}; + $self->{playlist} =~ s/%SOURCE%/$source/; + + $source = '' if ($source eq 'Various'); + $self->{playlist} =~ s/%INV%/$source/; + + $self->{playlist} =~ s/%INFO%/$info/; + $self->{playlist} =~ s/%INFOBUTTON%/$infolink/; + + my $link = $self->{foreign}; + $self->{playlist} =~ s/%FOREIGN%/$link/; + return $self->{playlist}; + } + +return 1; diff --git a/cgi-bin/playlists/artistlist.pm b/cgi-bin/playlists/artistlist.pm new file mode 100644 index 0000000..5c419c7 --- /dev/null +++ b/cgi-bin/playlists/artistlist.pm @@ -0,0 +1,78 @@ +package artistlist; + +use strict; +use Globals; +use Globals qw(%PLATTERS); +use Globals qw(@MUSIC); +use Globals qw(@VIDEO); +use Globals qw($target); +use Globals qw($delim); +use Globals qw($bgcolour); + +sub new { + my $self = { + mime => "text/html", + playlist => openTemplate("search"), + artistSearch => 0, + section => undef, + shortcuts => '<br>', + count => 0}; + + # show the logo if this is a new page + my $logo; + $logo = '<a href="front.plx"><img src="/platdoc/img/logo.gif" hspace=0 border=0></a>' if ($target eq '_top'); + $self->{playlist} =~ s/%LOGO%/$logo/; + $self->{playlist} =~ s/%BGCOLOUR%/$bgcolour/; + + bless ($self); + return $self; +} + +sub desc { + return "Artist Search Results"; + } + +sub header { + my $self = shift; +} + +sub track { + my ($self, $abc, $artist) = @_; + $artist = $abc if !$artist; + my $firstletter = substr($abc, 0, 1); + if ($firstletter ne $self->{section}) { + $self->{playlist} .= '<hr style="color:white; clear:both" align="left">' if ($self->{section}); + $self->{playlist} .= '<span class="title">'.$firstletter."</span><a name=\"".uc($firstletter)."\">\n</a><p>"; + $self->{section} = $firstletter; + $self->{shortcuts} .= '<a href="#'.$firstletter.'"><b>'.$firstletter.'</b></a> '; + } + my $realength = $artist; + $realength=~s/&[^;]*;/x/g; + $realength = (int(length($realength) / 20) +1)*120; + $self->{playlist} .= "<div style=\"float:left; width:".$realength."px\">". + "<a href=\"artist.plx?name=".makeUnNice($artist)."&exact=1\">".makeHTML($artist)."</a> </div>"; + $self->{count}++; +} + +sub dump { + my $self = shift; + $self->{playlist} .= "\n<br style=\"clear:both\">"; + my $shortcuts = $self->{shortcuts}; + $self->{playlist} =~ s/%SHORTCUTS%/$shortcuts/; + + if ($self->{count} > 0) + { + my $REPORT = "Found ".$self->{count}." artists."; + $self->{playlist} =~ s/%COUNT%/$REPORT/; + return $self->{playlist}."</ol><p>$REPORT</body></html>"; + } + else + { + $self->{playlist} =~ s/%COUNT%/<p>Sorry, no-one found./; + + return $self->{playlist}."</ol></body></html>"; + } +} + +return 1; + diff --git a/cgi-bin/playlists/extm3u.pm b/cgi-bin/playlists/extm3u.pm new file mode 100644 index 0000000..01d7eee --- /dev/null +++ b/cgi-bin/playlists/extm3u.pm @@ -0,0 +1,36 @@ +package extm3u; + +use Globals; +use Globals qw(%PLATTERS); +use strict; +use Globals qw($delim); + +sub new { + my $self = { + mime => "audio/x-mpegurl", + playlist => "#EXTM3U\n" }; + bless ($self); + return $self; +} + +sub desc { + return "Standard format for mp3 playlists"; + } + +sub header { +} + +sub track { + my $self = shift; + my ($folder, $trackartist, $album, $year, $track, $url, $platter) = @_; + my $artist = getArtistString($folder, $trackartist); + $self->{playlist} .= + "#EXTINF:180,".makeNice($artist)." - ".makeNice($track)."\n".makeTrackURL( $PLATTERS{$platter}, $url, $folder, $trackartist, $track )."\n"; + } + +sub dump { + my $self = shift; + return $self->{playlist}; + } + +return 1; diff --git a/cgi-bin/playlists/extpls.pm b/cgi-bin/playlists/extpls.pm new file mode 100644 index 0000000..9cc048c --- /dev/null +++ b/cgi-bin/playlists/extpls.pm @@ -0,0 +1,39 @@ +package extpls; + +use strict; +use Globals; +use Globals qw(%PLATTERS); +use Globals qw($delim); + +sub new { + my $self = { + mime => "audio/scpls", + playlist => "[playlist]\n", + count => 0}; + bless ($self); + return $self; +} + +sub desc { + return "Very common audio playlist format"; +} + +sub header { +} + +sub track { + my $self = shift; + my ($folder, $trackartist, $album, $year, $track, $url, $platter) = @_; + my $artist = getArtistString($folder, $trackartist); + $self->{count}++; + $self->{playlist} .= "File".$self->{count}."=".makeTrackURL( $PLATTERS{$platter}, $url, $folder, $trackartist, $track )."\n". + "Title".$self->{count}."=".makeNice($track)."\n". + "Length".$self->{count}."=-1\n"; + } + +sub dump { + my $self = shift; + return $self->{playlist}."NumberOfEntries=".$self->{count}."\nVersion=2\n"; + } + +return 1; diff --git a/cgi-bin/playlists/extrmp.pm b/cgi-bin/playlists/extrmp.pm new file mode 100644 index 0000000..f17eb82 --- /dev/null +++ b/cgi-bin/playlists/extrmp.pm @@ -0,0 +1,53 @@ +package extrmp; + +use strict; +use Globals; +use Globals qw(%PLATTERS); +use Globals qw($delim); + +sub new { + my $self = { + mime => "application/vnd.rn-rn_music_package", + playlist => "<PACKAGE>\n". + "<ACTION>import,play,replace</ACTION>\n". + '<SERVER><LOCATION>%f</LOCATION></SERVER>', + count => 0}; + bless ($self); + return $self; +} + +sub desc { + return "RealOne Player"; + } + +sub header { + my $self = shift; + my ($artist, $album) = @_; + $self->{playlist} .= "<TITLE>".makeNice($album)."</TITLE>". + "<SERVER><LOCATION>%f</LOCATION></SERVER>". + "<TARGET>".makeNice($album)."</TARGET>". + "<TRACKLIST>\n"; + +} + +sub track { + my $self = shift; + my ($folder, $trackartist, $album, $year, $track, $url, $platter) = @_; + my $artist = getArtistString($folder, $trackartist); + $self->{count}++; + $self->{playlist} .= "<TRACK>\n". + "<TRACKID>".$self->{count}."</TRACKID>\n". + "<TITLE>".makeNice($track)."</TITLE>\n". + "<ARTIST>".makeNice($artist)."</ARTIST>\n". + "<ALBUM>".makeNice($album)."</ALBUM>\n". + "<FILENAME>".makeTrackURL( $PLATTERS{$platter}, $url, $folder, $trackartist, $track )."</FILENAME>\n". + "</TRACK>\n"; + + } + +sub dump { + my $self = shift; + return $self->{playlist}."</TRACKLIST></PACKAGE>"; + } + +return 1; diff --git a/cgi-bin/playlists/extwvx.pm b/cgi-bin/playlists/extwvx.pm new file mode 100644 index 0000000..7decaee --- /dev/null +++ b/cgi-bin/playlists/extwvx.pm @@ -0,0 +1,64 @@ +package extwvx; + +use strict; + +use Globals; +use Globals qw($CGIROOT); +use Globals qw($APPNAME); +use Globals qw(%PLATTERS); +use Globals qw($delim); +use Globals qw(@VIDEO); + +sub new { + my $self = { + mime => "video/x-ms-wvx", + playlist => "<Asx Version = \"3.0\" >\n"}; + bless ($self); + return $self; +} + +sub desc { + return "Windows Media Player Playlist"; + } + +sub header { + my $self = shift; + my ($artist, $album) = @_; + $album =~ /(\d{2} - |)(.*)(\((\d{4})\)|)/; + $self->{playlist} .= "<Title>$2</Title>". + "<Author>$artist</Author>". + "<Param Name = \"AllowShuffle\" Value = \"yes\" />\n"; +} + +sub track { + my $self = shift; + + my ($folder, $trackartist, $album, $year, $track, $url, $platter) = @_; + my $artist = getArtistString($folder, $trackartist); + + my $mediatype = "audio"; + $track =~ /.*\.(.*?)/i; + my $filetype = $1; + foreach (@VIDEO) { + $mediatype = "video" if (/^$filetype$/i); + } + + $self->{playlist} .= "<Entry>\n". + "<Title>".makeNice($track)."</Title>\n". + "<Ref href = \"".makeTrackURL( $PLATTERS{$platter}, $url, $folder, $trackartist, $track )."\"/>\n". + "<Param Name = \"Artist\" Value = \"".$artist."\" />\n". + "<Param Name = \"Album\" Value = \"".makeNice($album)."\" />\n". + "<Param Name = \"MediaType\" Value = \"".$mediatype."\" />\n". + "<Banner Href = \"http://$CGIROOT/platdoc/img/banner.png\">\n". + "<Abstract>Click to go to the ".makeNice($folder)." page</Abstract>\n". + "<Moreinfo Href=\"http://$CGIROOT/$APPNAME/front.plx?artist=".makeUnNice($folder)."&album=".makeUnNice($album)."\" />\n". + "</Banner>\n". + "</Entry>\n"; + } + +sub dump { + my $self = shift; + return $self->{playlist}."</Asx>"; + } + +return 1; diff --git a/cgi-bin/playlists/playlist.pm b/cgi-bin/playlists/playlist.pm new file mode 100644 index 0000000..5ee280e --- /dev/null +++ b/cgi-bin/playlists/playlist.pm @@ -0,0 +1,33 @@ +package playlist; +use strict; +use Globals; + +return 1; + +sub new { + my ($proto, $playlist) = @_; + my $playlister = eval("use playlists::".$playlist."; ".$playlist."->new();"); + if (!defined $playlister) { + $playlister = { + mime => "text/html", + playlist => openTemplate("error"), + }; + $playlister->{playlist} =~ s/%NAME%/$playlist/g; + bless ($playlister); + } + + return $playlister; +} + +sub desc { return "Not Currently Working"; } + +sub header { + } + +sub track { + } + +sub dump { + my $self = shift; + return $self->{playlist}; + } diff --git a/cgi-bin/playlists/tracks.pm b/cgi-bin/playlists/tracks.pm new file mode 100644 index 0000000..5e73766 --- /dev/null +++ b/cgi-bin/playlists/tracks.pm @@ -0,0 +1,85 @@ +package tracks; + +use strict; +use Globals; +use Globals qw(%PLATTERS); +use Globals qw(@MUSIC); +use Globals qw(@VIDEO); +use Globals qw($target); +use Globals qw($delim); +use Globals qw($bgcolour); + +sub new { + my $self = { + mime => "text/html", + playlist => openTemplate("search"), + artistSearch => 0, + count => 0}; + + # show the logo if this is a new page + my $logo; + $logo = '<a href="front.plx"><img src="/platdoc/img/logo.gif" hspace=0 border=0></a>' if ($target eq '_top'); + $self->{playlist} =~ s/%LOGO%/$logo/; + $self->{playlist} =~ s/%BGCOLOUR%/$bgcolour/g; + + bless ($self); + return $self; +} + +sub desc { + return "Track Search Results"; + } + +sub header { + my $self = shift; + $self->{playlist} .= '<ol>'; +} + +sub track { + my $self = shift; + my ($folder, $trackartist, $album, $year, $track, $url, $platter) = @_; + + $self->{count}++; + + $self->{playlist} .= "<li>"; + + #prepare urls + + $self->{playlist} .= '<a href="'.makeTrackURL($PLATTERS{$platter}, $url, $folder, $trackartist, $track ).'"><img src="/platdoc/img/filebutton_s.png" border=0 align="middle"></a><a href="'.makeTrackPlaylist($folder, $trackartist, $album, $track, $platter).'"><img src="/platdoc/img/playbutton_s.png" border=0 align="middle"> "'.makeHTML($track)."</a>"<br>"; + + # prepare artist info + foreach( ($folder, $trackartist) ) { + + $self->{playlist} .= "<a href=\"artist.plx?name=".makeUnNice($_)."&exact=1\">".makeHTML($_)."</a>," if (/.+/); + } + chop $self->{playlist}; # remove trailing comma + + if (length $album > 0) { # album + $self->{playlist} .= "<br>from <a href=\"artist.plx?name=".makeUnNice($folder)."&album=".makeUnNice($album)."&exact=1\">"; + $album =~ s/\(\d{4}\)(\/|$)/$1/; + $self->{playlist} .= makeHTML($album)."</a>"; + if ($year > 0) { $self->{playlist} .= " <small>($year)</small>" } + } + + $self->{playlist} .= "<span style=\"font-size:4pt;\"><br> </span></li>\n"; +} + +sub dump { + my $self = shift; + $self->{playlist} =~ s/%SHORTCUTS%//; + if ($self->{count} > 0) + { + my $REPORT = "Found ".$self->{count}." matches."; + $self->{playlist} =~ s/%COUNT%/$REPORT/; + return $self->{playlist}."</ol><p>$REPORT</body></html>"; + } + else + { + $self->{playlist} =~ s/%COUNT%/<p>Sorry, nothing found./; + + return $self->{playlist}."</ol></body></html>"; + } +} + +return 1; + |
