#!/usr/bin/perl
#
# This software may be used and distributed according to the terms
# of the GNU Public License, incorporated herein by reference
#
# MyNapster WebClient copyright 2000
# info@mynapster.com
#
# You are welcome to modify and distribute this code
use CGI qw(:standard); 
use CGI::Cookie;
use lib "/home/mynapste/www/cgi-bin";
use napster;
use strict;
$SIG{'HUP'} = \&puke;
$SIG{'INT'} = \&puke;
$SIG{'KILL'} = \&puke;
$SIG{'PIPE'} = \&puke;
$SIG{'ALRM'} = \&puke;
 alarm 40; 
if (param()) 
{ 
  my  $cookie_nick = cookie('nick'); 
  my  $cookie_pass = cookie('pass'); 
  my ($nick, $pass);
  if (!$cookie_nick && !$cookie_pass) 
  {
     my $mynapster = Napster->new("", "");
     my @chars = ('a' .. 'z', 'A' .. 'Z', 0 .. 9);
     $nick = join "", map $chars[rand @chars], 1 .. 10; 
     $pass = join "", map $chars[rand @chars], 1 .. 7; 
     my ($type, $msg) = $mynapster->register_new_user($nick, $pass, $nick . '@hotmail.com');
     if ($type != 3)
     {
       print header;
       print_form();  
       print p, h1("Could not create a new user, reason $type, message : $msg"),p;
       print end_html; 
       die;
     }
     else
     {
       $cookie_nick = cookie(-NAME => 'nick', -VALUE => $nick, -EXPIRES => '+2y');
       $cookie_pass = cookie(-NAME => 'pass', -VALUE => $pass, -EXPIRES => '+2y');
     };
  }
  else
  {
    $nick = $cookie_nick;
    $pass = $cookie_pass;
  };
  my $mynapster = Napster->new($nick, $pass);
  my $nap_server = param('Server');
  my @all_servers = param('servers');
  foreach my $serv (@all_servers)
  {
    if ($serv =~ /$nap_server/)
    {
      $_ = $serv;
    };
  };
  my ($ip, $port);
  s/^(\S*)\s//; 
  $ip = $1;
  s/^(\S*)\s//; 
  $port = $1;
  my ($nap_ip, $nap_port) = $mynapster->connect($ip, $port);
  if ($nap_ip != -1) 
  {
     print header(-COOKIE => [$cookie_nick, $cookie_pass]);
     print_form();  
     my %songs = $mynapster->search(FILENAME => param('name'), MAX_RESULTS => param('max_res'));
     if (!defined(%songs))
     {
       print h3({-style=>'Color: green;'},"No matching songs found"), p;
     };
     foreach my $song (keys %songs)
     {
       $_ = (split(/\\/, $song))[-1];
       s/"//g;
       my ($md5, $size, $bitrate, $freq, $length, $nick, $ip, $link_type) = split ' ', $songs{$song};
       my $ref = "/cgi-bin/get_song.cgi/?song=" . CGI::escape($song) . "&nick=" . CGI::escape($nick) .
                 "&nap_ip=" . $nap_ip . "&nap_port=" . $nap_port . "&size=" . $size;
     
       my $mysize = sprintf '%.2f', $size/1000000;
       print a( {-href=>$ref}, $_), '      ', $mysize, " MB"; 
       for (my $i = 1; $i < $link_type; $i++)
       {
         print '
';
       };
       print p;
     }
     print end_html; 
     $mynapster->disconnect;
  }
  else
  {
    print header;
    print_form();  
    print p, h1("Could not connect to napster, contact a webmaster"),p;
  }   
  
}
else
{
  print header;
  print_form();  
sub puke {
  die;
} 
sub print_form
{
## my @servers = napster::get_servers_list;
## my @hidden_servers = @servers;
## foreach (@servers)
## {
##   s/(\S*)$//; 
##   $_ = $1;
## };
## my $serv_ref = \@servers; 
 print start_html('My Napster'),
       h3({-style=>'Color: green;'},"My Napster"),
       start_form, "Song or Artist name : ", textfield('name'), 
       " Max Results : ", textfield('max_res'),
       p;
 print radio_group(-name=>'Server', -values=>['opennap.htoc.com','opennap.cx','wintermute.sparhawk.bc.ca',
                        'wolf.ircmafia.org', 'imperialfleet.com', 'mynapster.com', 'culvernap.yi.org',
                        'mp3hoy.net', 'opennap.darkcrystal.cx', 'bitchx.dimension6.com', 
                        'thrashmetal.napster.com', 'salsa.napster.com', 'crossover.napster.com',
                        'blackmetal.napster.com', 'polskpunk.napster.com', 'negerpunk.napster.com', 
                        'hardcore.napster.com', 'clubhouse.napster.com', 'eurohouse.napster.com', 
                        'alternative.napster.com', 'freestyle.napster.com', 'britpop.napster.com', 'samba.napster.com', 
                        'tango.napster.com', 'porngroove.napster.com', 'primus.napster.com', 'trance.napster.com',
                        'opera.napster.com', 'acoustic.napster.com', 'easylistening.napster.com', 'symphonicrock.napster.com',
                        'psychedelicrock.napster.com', 'bluegrass.napster.com', 'celtic.napster.com',
                        'fastfusion.napster.com', 'swing.napster.com', 'hardrock.napster.com', 'rockandroll.napster.com',
                        'acidjazz.napster.com', 'acidpunk.napster.com', 'showtunes.napster.com', 'rave.napster.com',
                        'newage.napster.com', 'jungle.napster.com', 'gangstarap.napster.com', 'hiphop.napster.com',
                        'eurodance.napster.com', 'techno.napster.com', 'rock.napster.com', 'pop.napster.com',
                        'oldies.napster.com', 'funk.napster.com', 'disco.napster.com', 'bigband.napster.com',
                        'tribal.napster.com'],
                   -default=>'eurohouse.napster.com'); 
       print '';
       print '';
       print '';
       print '';
       print '';
       print '';
       print '';
       print '';
       print '';
       print '';
       print '';
       print '';
       print '';
       print '';
       print '';
       print '';
       print '';
       print '';
       print '
', p,p,submit, end_form, hr, p; };