#!/usr/bin/perl require "environment.pl"; require "config.pl"; require "utils.pl"; #&dump_env(); $|=1; $maxcols = 2; unless($path) { print "Status: 302 Found\nLocation: http://$ENV{SERVER_NAME}$script/media/\n\n"; exit(0); } if(-d $docroot.$path) { if($ENV{QUERY_STRING} eq 'Stream') { if($metafile eq 'm3u') { print "Content-type: audio/mpegurl\n\n"; @files = `find '$docroot$path' -follow -type f | sort`; foreach (@files) { chomp; next if /\.m3u$/; my $filepath = $_; $filepath =~ s|$docroot||; $filepath =~ s|//|/|g; print "http://$ENV{SERVER_NAME}", &tourl($filepath), "\n" if -f $_; } } elsif($metafile eq 'ram' || $metafiles eq 'rmm') { print "Content-type: audio/x-pn-realaudio\n\n"; @files = `find '$docroot$path' -follow -type f | sort`; foreach (@files) { chomp; next if /\.m3u$/; my $filepath = $_; $filepath =~ s|$docroot||; $filepath =~ s|//|/|g; print "rtsp://$ENV{SERVER_NAME}", &tourl($filepath), "\n" if -f $_; } } exit(0); } print "Content-type: text/html\n\n"; print "\n"; print " \n"; print " mediaserv:", $path ? $path : '/', "\n"; print " \n"; print " \n"; print " \n"; my @dirs = (); my @lists = (); my @media = (); opendir(D,$docroot.$path); while($_=readdir(D)) { next if /^\./; next if /lost\+found/; if(-d $docroot.$path.'/'.$_) { if($username ne 'martian') { next if /porn/; next if /incoming/; } push @dirs, $_; } elsif(/\.m3u$/ || /\.ram$/ || /\.rmm$/ || /\.smil$/) { push @lists, $_; } elsif(/\.cgi$/) { } else { push @media, $_; } } closedir(D); print " \n"; } else { my $i=0; my $colbreak = (@media > 5) ? ((@media+$maxcols-1)/$maxcols) : 0; print " \n"; print "
\n"; print " \n"; if($path && @media) { if(0 && $path =~ /graphics/) { my $i=0; my $colbreak = 5; print " \n"; print "
\n"; my $indent = ""; my $backpath = ""; foreach $dir (split(/\//, $path)) { next unless $dir; $backpath .= '/' if $dir; $backpath .= $dir; my $url = $script . &tourl($backpath); print " ", $indent, "\"\" $dir/"; if($backpath =~ /audio/) { $url = &tourl("/playlist.cgi$path/.m3u") . "?Stream"; print " \"Stream\"" if $backpath eq $path; } elsif($backpath =~ /video/) { $url = &tourl("/playlist.cgi$path/.ram") . "?Stream"; print " \"Stream\"" if $backpath eq $path; } print "
\n"; $indent .= '  '; } if(@dirs) { my $i=0; my $colbreak = (@dirs > 5) ? ((@dirs+$maxcols-1)/$maxcols) : 0; print " \n"; print " \n"; print " \n"; print " \n"; foreach $_ (sort @dirs) { my $url = &tourl("$script$path/$_"); print " \"\" $_/"; if($url =~ /audio/) { $url = &tourl("/playlist.cgi$path/$_/.m3u") . "?Stream"; print " \"Stream\""; } elsif($url =~ /video/) { $url = &tourl("/playlist.cgi$path/$_/.ram") . "?Stream"; print " \"Stream\""; } print "
\n"; $i++; if($colbreak && $i%$colbreak==0 && $i<@dirs) { print " \n"; print "
\n"; print " \n"; print "
$indent\n" } } print "
\n"; } if(@lists) { print "
\n"; foreach $_ (@lists) { my $url = &tourl("/playlist.cgi$path/$_"); print " \"\" $_   \n"; } } print "
\n"; print " \n"; print " \n"; print " \n"; print " \n"; print "
$indent\n"; print " \n"; print " \n"; foreach $_ (sort @media) { my $url = &tourl("$path/$_"); print " \n"; $i++; if($i%$colbreak==0) { print " \n"; print " \n"; } } print " \n"; print "
"; my($thumbnail, $imwidth, $imheight) = get_thumbnail($docroot.$path.'/'.$_); my $thumburl = $thumbnail; $thumburl =~ s|$docroot||; $thumburl = &tourl($thumburl); if(defined($imwidth) && defined($imheight)) { print "\"$_\""; } else { print "
$_"; } print "
"; print "
\n"; print "
\n"; print "
\n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print "
$indent\n"; foreach $_ (sort @media) { print " \"\""; my $url; if(/\.mp3/ || /\.ogg/) { $url = &tourl("/playlist.cgi$path/$_") . ".m3u"; } elsif(/\.rm/) { $url = &tourl("/playlist.cgi$path/$_") . ".ram"; } else { $url = &tourl("$path/$_"); } print " $_"; $direct_url = &tourl("$path/$_"); print " \"Download\"" unless $direct_url eq $url; print ""; print "
\n"; $i++; if($colbreak && $i%$colbreak==0 && $i<@media) { print "
\n" } } print "
\n"; print " \n"; } } print " \n"; print " \n"; print " \n"; print " \n"; print " [ Playlists ]\n"; print " [ Diskbuilder ]\n" if $username eq 'martian'; print " [ Options ]\n" unless $username eq 'guest'; print " [ Help ]\n"; print " [ About ]\n"; print " [ Suggestions ]\n"; print " \n"; print " \n"; if($path =~ m/music/ && $path =~ m/[A-Z]/) { my $searchstring = ""; $path =~ m|([^/]+)/([^/]+)/?$|; my($artist, $disc) = ($1, $2); $searchstring .= $artist . " " if($artist =~ /[A-Z, ]/); $searchstring .= $disc if($artist =~ /[A-Z, ]/ || $disc =~ /[A-Z, ]/); print "
\n"; print " \n"; print " Search Amazon: \n"; print " \n"; print "
\n"; print "
\n"; print " \n"; print " Search Google: \n"; print " \n"; print "
\n"; } print " \n"; print " \n"; print "\n"; } elsif($path =~ /\.m3u$/) { print "Content-type: audio/mpegurl\n\n"; open(PL,'<'.$docroot.$path); $path =~ s|/[^/]+\.m3u$||; $path = '/media' if $path =~ m|^/playlists|; while() { chomp; $filepath = $docroot.$path.'/'.$_; print "http://$ENV{SERVER_NAME}", &tourl($path.'/'.$_), "\n" if -f $filepath; } } else { my $realpath = "http://$ENV{SERVER_NAME}" . &tourl($path); if($metafile eq 'm3u') { print "Content-type: audio/mpegurl\n\n"; print "$realpath\n"; } elsif(($metafile eq 'ram') || ($metafile eq 'rmm') || ($metafile eq 'smil')) { $realpath = "rtsp://$ENV{SERVER_NAME}" . &tourl($path); print "Content-type: audio/x-pn-realaudio\n\n"; print "$realpath\n"; } else { print "Status: 302 Found\nLocation: $realpath\n\n"; } } sub tourl { my($path) = @_; $path =~ s!([ \@\%\&\=\\\?])!sprintf("%%%2.2x", ord($1))!eg; return $path; } sub select_icon { my($filename) = @_; $filename =~ s/.*\.(\S+)$/$1/; if($filename eq 'txt') { return '/icons/text.gif'; } elsif($filename eq 'm3u') { return '/icons/text.gif'; } elsif($filename eq 'mp3') { return '/icons/sound2.gif'; } elsif($filename eq 'mpg') { return '/icons/movie.gif'; } elsif($filename eq 'mov') { return '/icons/movie.gif'; } elsif($filename eq 'qt') { return '/icons/movie.gif'; } elsif($filename eq 'avi') { return '/icons/movie.gif'; } elsif($filename eq 'rm') { return '/icons/movie.gif'; } elsif($filename eq 'ogg') { return '/icons/sound2.gif'; } elsif($filename eq 'wav') { return '/icons/sound1.gif'; } elsif($filename eq 'au') { return '/icons/sound1.gif'; } else { return '/icons/unknown.gif'; } }