#!/usr/bin/perl # # IPFire CGIs # # This code is distributed under the terms of the GPL # # (c) The IPFire Team use strict; # enable only the following on debugging purpose use warnings; use CGI::Carp 'fatalsToBrowser'; require '/var/ipfire/general-functions.pl'; require "${General::swroot}/lang.pl"; require "${General::swroot}/header.pl"; my %color = (); my %mainsettings = (); my %mpfiresettings = (); my %checked = (); my $message = '0'; my $errormessage = ""; open(DATEI, "<${General::swroot}/mpfire/db/songs.db") || die "No Database found"; my @songdb = ; close(DATEI); @songdb = sort(@songdb); &General::readhash("${General::swroot}/main/settings", \%mainsettings); &General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color); &Header::showhttpheaders(); sub refreshpage{&Header::openbox( 'Waiting', 1, "" );print "

$Lang::tr{'pagerefresh'}
";&Header::closebox();} $mpfiresettings{'PAGE'} = "1"; &Header::getcgihash(\%mpfiresettings); &Header::openpage($Lang::tr{'mpfire'}, 1, ""); &Header::openbigbox('100%', 'left', '', $errormessage); ############################################################################################################################ ######################################## Scanne Verzeichnisse nach Mp3 Dateien ############################################# if ( $mpfiresettings{'ACTION'} eq "scan" ) { delete $mpfiresettings{'__CGI__'};delete $mpfiresettings{'x'};delete $mpfiresettings{'y'};delete $mpfiresettings{'PAGE'}; &General::writehash("${General::swroot}/mpfire/settings", \%mpfiresettings); $message=system("/usr/local/bin/mpfirectrl scan $mpfiresettings{'SCANDIR'} $mpfiresettings{'SCANDIRDEPS'}"); refreshpage(); } elsif ( $mpfiresettings{'ACTION'} eq ">" ){$message=system("/usr/local/bin/mpfirectrl","play","\"$mpfiresettings{'FILE'}\"");} elsif ( $mpfiresettings{'ACTION'} eq "x" ){$message=system("/usr/local/bin/mpfirectrl stop");} elsif ( $mpfiresettings{'ACTION'} eq "||" ){$message=system("/usr/local/bin/mpfirectrl pause");} elsif ( $mpfiresettings{'ACTION'} eq "|>" ){$message=system("/usr/local/bin/mpfirectrl resume");} elsif ( $mpfiresettings{'ACTION'} eq ">>" ){$message=system("/usr/local/bin/mpfirectrl next");} elsif ( $mpfiresettings{'ACTION'} eq "playweb" ){$message=system("/usr/local/bin/mpfirectrl","playweb","\"$mpfiresettings{'FILE'}\"");} elsif ( $mpfiresettings{'ACTION'} eq "+" ){$message=system("/usr/local/bin/mpfirectrl volup 5");} elsif ( $mpfiresettings{'ACTION'} eq "-" ){$message=system("/usr/local/bin/mpfirectrl voldown 5");} elsif ( $mpfiresettings{'ACTION'} eq "++" ){$message=system("/usr/local/bin/mpfirectrl volup 10");} elsif ( $mpfiresettings{'ACTION'} eq "--" ){$message=system("/usr/local/bin/mpfirectrl voldown 10");} elsif ( $mpfiresettings{'ACTION'} eq "playlist" ){$message=system("/usr/local/bin/mpfirectrl playall");} elsif ( $mpfiresettings{'ACTION'} eq "emptyplaylist" ){$message=system("unlink ${General::swroot}/mpfire/playlist && touch ${General::swroot}/mpfire/playlist");} elsif ( $mpfiresettings{'ACTION'} eq "addtoplaylist" ){ open(DATEI, ">>${General::swroot}/mpfire/playlist") || die "Could not add playlist"; print DATEI $mpfiresettings{'FILE'}."\n"; close(DATEI); } elsif ( $mpfiresettings{'ACTION'} eq "playalbum" ) { my @temp = ""; my @album = split(/\|/,$mpfiresettings{'album'}); my %hash = map{ $_, 1 }@album; foreach (@songdb){ my @song = split(/\|/,$_); chomp($song[0]); push(@temp,$song[0]."\n") if exists $hash{$song[4]}; } open(DATEI, ">${General::swroot}/mpfire/playlist") || die "Could not add playlist"; print DATEI @temp; close(DATEI); $message=system("/usr/local/bin/mpfirectrl playall"); } elsif ( $mpfiresettings{'ACTION'} eq "playartist" ) { my @temp = ""; my @artist = split(/\|/,$mpfiresettings{'artist'}); my %hash = map{ $_, 1 }@artist; foreach (@songdb){ my @song = split(/\|/,$_); chomp($song[0]); push(@temp,$song[0]."\n") if exists $hash{$song[1]}; } open(DATEI, ">${General::swroot}/mpfire/playlist") || die "Could not add playlist"; print DATEI @temp; close(DATEI); $message=system("/usr/local/bin/mpfirectrl playall"); } elsif ( $mpfiresettings{'ACTION'} eq "playall" ) { my @temp = ""; foreach (@songdb){ my @song = split(/\|/,$_); chomp($song[0]); push(@temp,$song[0]."\n"); } open(DATEI, ">${General::swroot}/mpfire/playlist") || die "Could not add playlist"; print DATEI @temp; close(DATEI); $message=system("/usr/local/bin/mpfirectrl playall"); } elsif ( $mpfiresettings{'SHOWLIST'} ){delete $mpfiresettings{'__CGI__'};delete $mpfiresettings{'x'};delete $mpfiresettings{'y'};delete $mpfiresettings{'PAGE'};&General::writehash("${General::swroot}/mpfire/settings", \%mpfiresettings);} ############################################################################################################################ ################################### Aufbau der HTML Seite fr globale Sambaeinstellungen #################################### $mpfiresettings{'SCANDIR'} = "/"; $mpfiresettings{'SHOWLIST'} = "off"; &General::readhash("${General::swroot}/mpfire/settings", \%mpfiresettings); ############################################################################################################################ ########################################### rekursiv nach neuen Mp3s Scannen ##############################################รค if ( $message ne '0' ) { print "An Error occured while launching the command"; } elsif ( $message ne "" && $message ne '0' ) { print "$message"; } &Header::openbox('100%', 'center', $Lang::tr{'mpfire scanning'}); print <
$Lang::tr{'Scan for Files'}
$Lang::tr{'Scan from Directory'}
$Lang::tr{'deep scan directories'}on / off
END ; &Header::closebox(); my $song = qx(/usr/local/bin/mpfirectrl song); if ( $song eq "" ){$song = "None";} &Header::openbox('100%', 'center', $Lang::tr{'mpfire controls'}); print < -= $song =- END ; if ( $#songdb > -1 ){ print"
total $#songdb songs

"; } print <
END ; if ( $mpfiresettings{'SHOWLIST'} eq "on" ){print"
";} else { print"
";} print <
END ; &Header::closebox(); if ( $#songdb > -1 ){ &Header::openbox('100%', 'center', $Lang::tr{'quick playlist'}); my @artist; my @album; foreach (@songdb){ my @song = split(/\|/,$_); push(@artist,$song[1]);push(@album,$song[4]);} my %hash = map{ $_, 1 }@artist; @artist = sort keys %hash; my %hash = map{ $_, 1 }@album; @album = sort keys %hash; print < $Lang::tr{'artist'} - $#artist$Lang::tr{'album'} - $#album
END ; &Header::closebox(); } if ( $mpfiresettings{'SHOWLIST'} eq "on" ){ &Header::openbox('100%', 'center', $Lang::tr{'mpfire songs'}); print < $Lang::tr{'Existing Files'}
$Lang::tr{'Pages'}

END ; my $pages =(int($#songdb/100)+1); for(my $i = 1; $i <= $pages; $i++) { print ""; if (!($i % 205)){print"
";} } print < $Lang::tr{'artist'}
$Lang::tr{'title'}
$Lang::tr{'number'} $Lang::tr{'album'} $Lang::tr{'year'} $Lang::tr{'genre'} $Lang::tr{'length'}
$Lang::tr{'bitrate'} - $Lang::tr{'frequency'}
$Lang::tr{'mode'} END ; my $lines=0;my $i=0;my $begin;my $end; if ( $mpfiresettings{'PAGE'} eq 'all' ){ $begin=0; $end=$#songdb; } else{ $begin=(($mpfiresettings{'PAGE'}-1) * 100); $end=(($mpfiresettings{'PAGE'} * 100)-1); } foreach (@songdb){ if (!($i >= $begin && $i <= $end)){ #print $begin."->".$i."<-".$end."\n"; $i++;next;} my @song = split(/\|/,$_); if ($lines % 2) {print "";} else {print "";} $song[0]=~s/\/\//\//g; print <
$song[1]
$song[2] $song[3] $song[4] $song[5] $song[6] $song[7]:$song[8]
$song[9] - $song[10] END ; if ( $song[11] eq "0\n" ) {print "Stereo"; } elsif ( $song[11] eq "1\n" ) {print "Joint
Stereo"; } elsif ( $song[11] eq "2\n" ) {print "Dual
Channel"; } elsif ( $song[11] eq "3\n" ) {print "Single
Channel"; } else {print ""; } $lines++; $i++; } print ""; &Header::closebox(); } &Header::openbox('100%', 'center', $Lang::tr{'mpfire playlist'}); open(DATEI, "<${General::swroot}/mpfire/playlist") || die "Could not open playlist"; my @playlist = ; close(DATEI); my %hash; foreach (@songdb){ my @song = split(/\|/,$_); chomp($song[0]); $hash{$song[0]}=$song[1]." - ".$song[2]." - ".$song[7].":".$song[8]; } print < $Lang::tr{'current playlist'}
END ; &Header::closebox(); &Header::openbox('100%', 'center', $Lang::tr{'mpfire webradio'}); open(DATEI, "<${General::swroot}/mpfire/webradio") || die "Could not open playlist"; my @webradio = ; close(DATEI); print < $Lang::tr{'webradio playlist'} Stream END ; foreach (@webradio){ my @stream = split(/\|/,$_); print <$stream[1]
END ; } print ""; &Header::closebox(); &Header::closebigbox(); &Header::closepage();