X-Git-Url: http://git.ipfire.org/?p=people%2Fpmueller%2Fipfire-2.x.git;a=blobdiff_plain;f=html%2Fcgi-bin%2Fmpfire.cgi;h=06134af83d4e5d4c348de7a0aa2702ad704ca1c8;hp=704adfccff35f049a9bbd69a040ca83d46d9efbc;hb=6cd3f682eb346c8fc0bfd680036df429578960ab;hpb=efb2af147ffaab6b8cb270e66e404ca7f5e0d41c diff --git a/html/cgi-bin/mpfire.cgi b/html/cgi-bin/mpfire.cgi index 704adfccff..06134af83d 100644 --- a/html/cgi-bin/mpfire.cgi +++ b/html/cgi-bin/mpfire.cgi @@ -20,10 +20,20 @@ ############################################################################### use strict; + # enable only the following on debugging purpose #use warnings; #use CGI::Carp 'fatalsToBrowser'; +# use the special mpd POD and the encode POD to handle the utf8 scalars +use Audio::MPD; +use Encode; + +# initiate the connector for the mpd POD, mpd must be running on locahost +# port 6600 without authentication +my $mpd = Audio::MPD->new('localhost',6600,'','$REUSE'); +my $work = $mpd->status()->updating_db(); + require '/var/ipfire/general-functions.pl'; require "${General::swroot}/lang.pl"; require "${General::swroot}/header.pl"; @@ -34,68 +44,158 @@ my %mpfiresettings = (); my %checked = (); my $message = '0'; my $errormessage = ""; +my @songs; &General::readhash("${General::swroot}/main/settings", \%mainsettings); &General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color); -if ( $ENV{'QUERY_STRING'} =~ /title/){ -my $song = `/usr/local/bin/mpfirectrl song 2>/dev/null`; -if ( $song eq "" ){$song = "None";} -if ( length($song) > 100 ) {$song = substr($song,0,100)."...";} &Header::showhttpheaders(); -print""; -print < - + +if ( $ENV{'QUERY_STRING'} =~ /title/){ + +################################################################################ +# $ENV{'QUERY_STRING'} =~ /title/ is used to handle the inline iframe used to +# display the current song playing ( artist - title - album aso ) +# the cgi call´s itself with a parameter and the iframe refreshes itself without +# reloading the whole page +################################################################################ + + my $number = $mpd->status()->song()+1; + my $volume = $mpd->status()->volume(); + my $random = $mpd->status()->random(); + + if ($random eq "0" ){ + $random="off"; + }else{ + $random="on"; + } + + my $repeat = $mpd->status()->repeat(); + if ($repeat eq "0" ){ + $repeat="off"; + }else{ + $repeat="on"; + } + + my $song = ""; + if ( $mpd->current() ) + { + $song = substr("-= ".$mpd->current()->Artist()." | ".$mpd->current()->Title(),0,90)." =-
"; + if ( $song eq "-= | =-
" ){ + $song = "None
" + }; + $song .= $mpd->current()->Track()."# ".substr($mpd->current()->Album(),0,90)."
"; + }else{ + $song = "None

"; + } + + if ( $song eq "None
#
" ){ + $song = "None
".substr($mpd->current()->file(),0,90)."
" + }; + $song .= "Playlist: ".$number."-".$mpd->status()->playlistlength()." Time: ".$mpd->status()->time()->sofar."/"; + $song .= $mpd->status()->time()->total." (".$mpd->status()->time()->percent()."%) Status: "; + $song .= $mpd->status()->state()." Volume: ".$volume." % Repeat: ".$repeat." Random: ".$random; + + print < + + + +
-= $song =-
+END +; + print"

".encode('utf-8', $song)."

"; + exit; +}elsif ( $ENV{'QUERY_STRING'} =~ /control/){ + +################################################################################ +# $ENV{'QUERY_STRING'} =~ /control/ is used to handle the inline iframe used to +# display the control button ( prev play skip stop toggle aso ) +# the cgi call´s itself with a parameter and only the iframe is reloaded on click +################################################################################ + + &Header::getcgihash(\%mpfiresettings); + if ( $mpfiresettings{'ACTION'} eq "playall" ){ + $mpd->playlist->clear(); + foreach ($mpd->collection->all_pathes){ + $mpd->playlist->add($_); + } + $mpd->play(); + }elsif ($mpfiresettings{'ACTION'} eq "x" ){ + $mpd->stop(); + }elsif ( $mpfiresettings{'ACTION'} eq "|>" ){ + $mpd->pause(); + }elsif ( $mpfiresettings{'ACTION'} eq "<<" ){ + $mpd->prev(); + }elsif ( $mpfiresettings{'ACTION'} eq ">>" ){ + $mpd->next(); + }elsif ( $mpfiresettings{'ACTION'} eq "+" ){ + $mpd->volume('+5'); + }elsif ( $mpfiresettings{'ACTION'} eq "-" ){ + $mpd->volume('-5'); + }elsif ( $mpfiresettings{'ACTION'} eq "++" ){ + $mpd->volume('+10'); + }elsif ( $mpfiresettings{'ACTION'} eq "--" ){ + $mpd->volume('-10'); + }elsif ( $mpfiresettings{'ACTION'} eq ">" ){ + $mpd->play(); + }elsif ( $mpfiresettings{'ACTION'} eq "repeat" ){ + $mpd->repeat(); + }elsif ( $mpfiresettings{'ACTION'} eq "shuffle" ){ + $mpd->random(); + } + print < + + + + + + + + + + + +END +; + print < + + + + + + +
+ END ; -} -else{ -&Header::showhttpheaders(); - -sub refreshpage{&Header::openbox( 'Waiting', 1, "" );print "

$Lang::tr{'pagerefresh'}
";&Header::closebox();} + exit; +} -$mpfiresettings{'PAGE'} = "1"; +# just a little subpage to handle automatic page refresh on demand ( 1 sec ) +sub refreshpage{ + &Header::openbox( 'Waiting', 1, "" ); + print "

$Lang::tr{'pagerefresh'}
"; + &Header::closebox(); +} -open(DATEI, "<${General::swroot}/mpfire/db/mpd.db") || die "No Database found"; -my @songdb = ; -close(DATEI); +# if the mpd is updating his database because of user interaction then the cgi +# should display that the mpd is unavailable, and refresh the status every 5 seconds +if ($work ne ""){ + &Header::openpage($Lang::tr{'mpfire'}, 1,); + &Header::openbigbox('100%', 'left', '', $errormessage); + &Header::openbox( 'Waiting', 5, "" ); + print "

Database is updating, please be patient.
"; + &Header::closebox(); + &Header::closebigbox(); + &Header::closepage(); + exit; +} -my @artist; my @album; my @genre; my @year; my $linecount = 0; my %songs; -my $key;my $file;my $Time;my $Artist;my $Title;my $Album;my $Track;my $Date;my $Genre; -foreach (@songdb){ - - if ( $_ =~ /mtime: / ){ - $songs{$key}="$file|$Time|$Artist|$Title|$Album|$Track|$Date|$Genre"; - push(@artist,$Artist);push(@album,$Album);push(@year,$Date);push(@genre,$Genre); - $key="";$file="";$Time="";$Artist="";$Title="";$Album="";$Track="";$Date="";$Genre=""; - } - elsif ( $_ =~ /key: / ){my @temp = split(/: /,$_);$key=$temp[1];} - elsif ( $_ =~ /file: / ){my @temp = split(/: /,$_);$file=$temp[1];} - elsif ( $_ =~ /Time: / ){my @temp = split(/: /,$_);$Time=$temp[1];} - elsif ( $_ =~ /Artist: / ){my @temp = split(/: /,$_);$Artist=$temp[1];} - elsif ( $_ =~ /Title: / ){my @temp = split(/: /,$_);$Title=$temp[1];} - elsif ( $_ =~ /Album: / ){my @temp = split(/: /,$_);$Album=$temp[1];} - elsif ( $_ =~ /Track: / ){my @temp = split(/: /,$_);$Track=$temp[1];} - elsif ( $_ =~ /Date: / ){my @temp = split(/: /,$_);$Date=$temp[1];} - elsif ( $_ =~ /Genre: / ){my @temp = split(/: /,$_);$Genre=$temp[1];} - else {next;} - } - - my %hash = map{ $_, 1 }@artist; - @artist = sort keys %hash; - my %hash = map{ $_, 1 }@album; - @album = sort keys %hash; - my %hash = map{ $_, 1 }@year; - @year = sort keys %hash; - my %hash = map{ $_, 1 }@genre; - @genre = sort keys %hash; - - my $artistcount = $#artist+1; - my $albumcount = $#album+1; - my $yearcount = $#year+1; - my $genrecount = $#genre+1; +if ( $mpfiresettings{'PAGE'} eq "" ){$mpfiresettings{'PAGE'} = "1";} &Header::getcgihash(\%mpfiresettings); &Header::openpage($Lang::tr{'mpfire'}, 1,); @@ -104,313 +204,347 @@ foreach (@songdb){ ############################################################################################################################ ######################################## 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); -open(DATEI, "<${General::swroot}/mpfire/mpd.conf") || die "Datei nicht gefunden"; -my @Zeilen = ; -close(DATEI); -open(DATEI, ">${General::swroot}/mpfire/mpd.conf") || die "Datei nicht gefunden"; -foreach (@Zeilen){ -if ( $_ =~ /music_directory/){print DATEI "music_directory \"".$mpfiresettings{'MUSICDIR'}."\"\n";} -else {print DATEI $_;} -} -close(DATEI); - -$message=system("/usr/local/bin/mpfirectrl scan 2>/dev/null"); -refreshpage(); -} -elsif ( $mpfiresettings{'ACTION'} eq ">" ){$message=system("/usr/local/bin/mpfirectrl","play","\"$mpfiresettings{'FILE'}\"","2>/dev/null");} -elsif ( $mpfiresettings{'ACTION'} eq "x" ){$message=system("/usr/local/bin/mpfirectrl stop 2>/dev/null");} -elsif ( $mpfiresettings{'ACTION'} eq "|>" ){$message=system("/usr/local/bin/mpfirectrl toggle 2>/dev/null");} -elsif ( $mpfiresettings{'ACTION'} eq "<<" ){$message=system("/usr/local/bin/mpfirectrl prev 2>/dev/null");} -elsif ( $mpfiresettings{'ACTION'} eq ">>" ){$message=system("/usr/local/bin/mpfirectrl next 2>/dev/null");} -elsif ( $mpfiresettings{'ACTION'} eq "+" ){$message=system("/usr/local/bin/mpfirectrl volup 5 2>/dev/null");} -elsif ( $mpfiresettings{'ACTION'} eq "-" ){$message=system("/usr/local/bin/mpfirectrl voldown 5 2>/dev/null");} -elsif ( $mpfiresettings{'ACTION'} eq "++" ){$message=system("/usr/local/bin/mpfirectrl volup 10 2>/dev/null");} -elsif ( $mpfiresettings{'ACTION'} eq "--" ){$message=system("/usr/local/bin/mpfirectrl voldown 10 2>/dev/null");} -elsif ( $mpfiresettings{'ACTION'} eq "playweb" ){$message=system("/usr/local/bin/mpfirectrl","playweb","\"$mpfiresettings{'FILE'}\"","2>/dev/null");} -elsif ( $mpfiresettings{'ACTION'} eq "playlist" ){$message=system("/usr/local/bin/mpfirectrl playlist 2>/dev/null");} -elsif ( $mpfiresettings{'ACTION'} eq "emptyplaylist" ){$message=system("/usr/local/bin/mpfirectrl clearplaylist 2>/dev/null");} -elsif ( $mpfiresettings{'ACTION'} eq "addtoplaylist" ){$message=system("/usr/local/bin/mpfirectrl","playadd","\"$mpfiresettings{'FILE'}\"","2>/dev/null");} -elsif ( $mpfiresettings{'ACTION'} eq "playall" ){ -my @temp = ""; my @song = ""; - -foreach (keys(%songs)){ - @song = split(/\|/,$songs{$_});push(@temp,$song[0]) - } -open(DATEI, ">${General::swroot}/mpfire/playlist.m3u") || die "Could not add playlist"; -print DATEI @temp; -close(DATEI); - -$message=system("/usr/local/bin/mpfirectrl playlist 2>/dev/null"); -} -elsif ( $mpfiresettings{'ACTION'} eq "playalbum" ) -{ -my @temp = ""; my @song = ""; my @select = split(/\|/,$mpfiresettings{'album'}); - -foreach (keys(%songs)){ - @song = split(/\|/,$songs{$_});$song[4] =~ s/\W/ /g; - - foreach (@select){ - $_ =~ s/\W/ /g; - if ( $song[4] =~ /$_/ ){push(@temp,$song[0]);} - } -} - -open(DATEI, ">${General::swroot}/mpfire/playlist.m3u") || die "Could not add playlist"; -print DATEI @temp; -close(DATEI); -$message=system("/usr/local/bin/mpfirectrl playlist 2>/dev/null"); -} -elsif ( $mpfiresettings{'ACTION'} eq "playartist" ) -{ -my @temp = ""; my @song = ""; my @select = split(/\|/,$mpfiresettings{'artist'}); - -foreach (keys(%songs)){ - @song = split(/\|/,$songs{$_});$song[2] =~ s/\W/ /g; - - foreach (@select){ - $_ =~ s/\W/ /g; - if ( $song[2] =~ /$_/ ){push(@temp,$song[0]);} - } -} - -open(DATEI, ">${General::swroot}/mpfire/playlist.m3u") || die "Could not add playlist"; -print DATEI @temp; -close(DATEI); -$message=system("/usr/local/bin/mpfirectrl playlist 2>/dev/null"); -} -elsif ( $mpfiresettings{'ACTION'} eq "playyear" ) -{ -my @temp = ""; my @song = ""; my @select = split(/\|/,$mpfiresettings{'year'}); - -foreach (keys(%songs)){ - @song = split(/\|/,$songs{$_});$song[6] =~ s/\W/ /g; - - foreach (@select){ - $_ =~ s/\W/ /g; - if ( $song[6] =~ /$_/ ){push(@temp,$song[0]);} - } -} - -open(DATEI, ">${General::swroot}/mpfire/playlist.m3u") || die "Could not add playlist"; -print DATEI @temp; -close(DATEI); -$message=system("/usr/local/bin/mpfirectrl playlist 2>/dev/null"); -} -elsif ( $mpfiresettings{'ACTION'} eq "playgenre" ) -{ -my @temp = ""; my @song = ""; my @select = split(/\|/,$mpfiresettings{'genre'}); - -foreach (keys(%songs)){ - @song = split(/\|/,$songs{$_});$song[7] =~ s/\W/ /g; - - foreach (@select){ - $_ =~ s/\W/ /g; - if ( $song[7] =~ /$_/ ){push(@temp,$song[0]);} - } +if ( $mpfiresettings{'ACTION'} eq "scan" ){ + +# on keypress scan the given directory and store the path to the mpd config + &General::readhash("${General::swroot}/mpfire/settings", \%mpfiresettings); + &Header::getcgihash(\%mpfiresettings); + delete $mpfiresettings{'__CGI__'};delete $mpfiresettings{'x'};delete $mpfiresettings{'y'}; + &General::writehash("${General::swroot}/mpfire/settings", \%mpfiresettings); + + open(DATEI, "<${General::swroot}/mpfire/mpd.conf") || die "Datei nicht gefunden"; + my @Zeilen = ; + close(DATEI); + + open(DATEI, ">${General::swroot}/mpfire/mpd.conf") || die "Datei nicht gefunden"; + foreach (@Zeilen){ + if ( $_ =~ /music_directory/){ + print DATEI "music_directory \"".$mpfiresettings{'MUSICDIR'}."\"\n"; + }else { + print DATEI $_; + } + } + close(DATEI); + + $mpd->updatedb(); + refreshpage(); +}elsif ( $mpfiresettings{'ACTION'} eq "playweb" ){ + $message=system("/usr/local/bin/mpfirectrl","playweb","\"$mpfiresettings{'FILE'}\"","2>/dev/null"); +}elsif ( $mpfiresettings{'ACTION'} eq "playlist" ){ +# on keypress play the playlist + $message=system("/usr/local/bin/mpfirectrl playlist 2>/dev/null"); +}elsif ( $mpfiresettings{'ACTION'} eq "emptyplaylist" ){ +# on keypress clear the playlist + $mpd->playlist->clear(); +}elsif ( $mpfiresettings{'ACTION'} eq "addtoplaylist" ){ + $mpd->playlist->add($mpfiresettings{'FILE'}); +}elsif ( $mpfiresettings{'ACTION'} eq "playalbum" ){ +# on keypress play the selected albums + my @select = split(/\|/,$mpfiresettings{'album'}); + $mpd->playlist->clear(); + foreach (@select){ + foreach ($mpd->collection->filenames_by_album($_)){ + if ( $_ ne "" ){ + $mpd->playlist->add($_); + } + } + } + $mpd->play(); +}elsif ( $mpfiresettings{'ACTION'} eq "playartist" ){ +# on keypress play the selected artist + my @select = split(/\|/,$mpfiresettings{'artist'}); + $mpd->playlist->clear(); + foreach (@select){ + foreach ($mpd->collection->filenames_by_artist($_)){ + if ( $_ ne "" ){ + $mpd->playlist->add($_); + } + } + } + $mpd->play(); +}elsif ( $mpfiresettings{'ACTION'} eq "playyear" ){ +# on keypress play the selected year + my @select = split(/\|/,$mpfiresettings{'year'}); + $mpd->playlist->clear(); + foreach (@select){ + foreach ($mpd->collection->filenames_by_year($_)){ + if ( $_ ne "" ){ + $mpd->playlist->add($_); + } + } + } + $mpd->play(); +}elsif ( $mpfiresettings{'ACTION'} eq "playgenre" ){ +# on keypress play the selected genre + my @select = split(/\|/,$mpfiresettings{'genre'}); + $mpd->playlist->clear(); + foreach (@select){ + foreach ($mpd->collection->filenames_by_genre($_)){ + if ( $_ ne "" ){ + $mpd->playlist->add($_); + } + } + } + $mpd->play(); +}elsif ( $mpfiresettings{'ACTION'} eq ">" ){ + $mpd->playlist->clear(); + $mpd->playlist->add($mpfiresettings{'FILE'}); + $mpd->play(); } -open(DATEI, ">${General::swroot}/mpfire/playlist.m3u") || die "Could not add playlist"; -print DATEI @temp; -close(DATEI); -$message=system("/usr/local/bin/mpfirectrl playlist 2>/dev/null"); -} -elsif ( $mpfiresettings{'SHOWLIST'} ){delete $mpfiresettings{'__CGI__'};delete $mpfiresettings{'x'};delete $mpfiresettings{'y'};delete $mpfiresettings{'PAGE'};&General::writehash("${General::swroot}/mpfire/settings", \%mpfiresettings);refreshpage();} + if ( $mpfiresettings{'SEARCH'} eq "artist" && $mpfiresettings{'SEARCHITEM'} ne "" ){ + foreach ($mpd->collection->songs_with_artist_partial_filename($mpfiresettings{'SEARCHITEM'})){ + if ( $_ ne "" ){ + push(@songs,$_); + } + } + }elsif ( $mpfiresettings{'SEARCH'} eq "title" && $mpfiresettings{'SEARCHITEM'} ne "" ){ + foreach ($mpd->collection->songs_with_title_partial_filename($mpfiresettings{'SEARCHITEM'})){ + if ( $_ ne "" ){ + push(@songs,$_); + } + } + }elsif ( $mpfiresettings{'SEARCH'} eq "album" && $mpfiresettings{'SEARCHITEM'} ne "" ){ + foreach ($mpd->collection->songs_with_album_partial_filename($mpfiresettings{'SEARCHITEM'})){ + if ( $_ ne "" ){ + push(@songs,$_); + } + } + }else{ + @songs = $mpd->collection->all_items_simple(); + shift(@songs); + } ############################################################################################################################ ################################### Aufbau der HTML Seite fr globale Sambaeinstellungen #################################### $mpfiresettings{'MUSICDIR'} = "/"; - &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"; } +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'}); - +# box to enter the music directory and initiate the scan process print < - +
$Lang::tr{'Scan for Files'}
$Lang::tr{'Scan from Directory'}
-
END ; &Header::closebox(); -my $Volume = `/usr/local/bin/mpfirectrl volume 2>/dev/null`; -$Volume=~s//
/g; -my $stats = `mpc stats | tail -4 2>/dev/null`; -$stats=~s/\\/
/g - &Header::openbox('100%', 'center', $Lang::tr{'mpfire controls'}); +# box for the two iframes showing the current playbar and the control buttons print < - -END -; -my $countsongs=`/usr/local/bin/mpfirectrl stats 2>/dev/null`; -print "
".$countsongs."

"; -print < -
-
-
-
-
- -END -; -if ( $mpfiresettings{'SHOWLIST'} eq "on" ){print"
";} -else { print"
";} -print <
-
-
-
- -$Volume -
$stats - + + END ; +print "Songs:".$mpd->stats()->songs()."
"; + &Header::closebox(); &Header::openbox('100%', 'center', $Lang::tr{'quick playlist'}); - +# box to quickly select artist, album, year or genre and play the selection print ""; -if ( $#songdb eq '-1' ) {print "";} -else {print "";} +print ""; + print < - + - +
+ + + + + +";} -else {print "";} + +foreach ($mpd->collection->all_years()){ + if ( $_ ne '' ){ + print "\n"; + } +} + print < + - +
$Lang::tr{'artist'}$Lang::tr{'album'}
$Lang::tr{'artist'} - ".$artistcount."$Lang::tr{'album'} - ".$albumcount."
$Lang::tr{'artist'} - ".$mpd->stats()->artists()."$Lang::tr{'album'} - ".$mpd->stats()->albums()."
-
-
+ + - - -
-
+ + +
+
+ - -
$Lang::tr{'year'}$Lang::tr{'genre'}
+
+
$Lang::tr{'year'}$Lang::tr{'genre'}
$Lang::tr{'year'} - ".$yearcount."$Lang::tr{'genre'} - ".$genrecount."
- -
+ + +
+
+ - -
-
-
+ + +
END ; - foreach (@genre){if ( $_ ne '' ){print "";}} + +&Header::closebox(); + +&Header::openbox('100%', 'center', $Lang::tr{'mpfire search'}); +# box to quickly search artist, album or title print <
- - - - +
+ + + + + + + + + + + + + + + + + +
$Lang::tr{'artist'}$Lang::tr{'title'}$Lang::tr{'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(keys(%songs)/100)+1); -for(my $i = 1; $i <= $pages; $i++) { -print ""; -if (!($i % 205)){print"
";} +if ( $#songs > 100 ){ + print ""; } print < - - - - - - + + + END ; + my $lines=0;my $i=0;my $begin;my $end; if ( $mpfiresettings{'PAGE'} eq 'all' ){ - $begin=0; - $end=keys(%songs); -} -else{ - $begin=(($mpfiresettings{'PAGE'}-1) * 100); - $end=(($mpfiresettings{'PAGE'} * 100)-1); + $begin=0; + $end=$#songs; +}else{ + $begin=(($mpfiresettings{'PAGE'}-1) * 100); + $end=(($mpfiresettings{'PAGE'} * 100)-1); } -foreach (keys(%songs)){ - if (!($i >= $begin && $i <= $end)){ -# print $begin."->".$i."<-".$end."\n"; - $i++;next;} - my @song = split(/\|/,$songs{$_}); - my $minutes = sprintf ("%.0f", $song[1] / 60 ); - my $seconds = $song[1] % 60; - - if ($lines % 2) {print "";} else {print "";} - print <
-
- - - - - + foreach (@songs){ + if (!($i >= $begin && $i <= $end)){ + #print $begin."->".$i."<-".$end."\n"; + $i++;next; + } + my @song = split(/\=/,$mpd->collection->song($_)); + @song = reverse @song; + + if ($lines % 2) { + print ""; + }else{ + print ""; + } + print < +
+ + + + + + + +
+ + + + + + + + END ; - $lines++; - $i++; - } + print "
"; + print ""; + print ""; + $lines++; + $i++; +} + print "
$Lang::tr{'Existing Files'}

$Lang::tr{'Pages'}

"; + my $pages =(int($#songs/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{'artist'}
$Lang::tr{'title'}
$Lang::tr{'number'}$Lang::tr{'album'}
$song[2]
$song[3]
$song[5]$song[4]$song[6]$song[7]$minutes:$seconds
".encode('utf-8', $song[0])."
".encode('utf-8', $song[1])."
".encode('utf-8', $song[2])."".encode('utf-8', $song[3])."
"; &Header::closebox(); -} &Header::openbox('100%', 'center', $Lang::tr{'mpfire playlist'}); - +# box to show the current playlist given from mpc system command my @playlist = `mpc playlist 2>/dev/null`; print <
-
- - -
+
+ + +
-
- - -
-
END ; + &Header::closebox(); &Header::openbox('100%', 'center', $Lang::tr{'mpfire webradio'}); - +# box to select some webradio´s to be played by one click open(DATEI, "<${General::swroot}/mpfire/webradio") || die "Could not open playlist"; my @webradio = ; close(DATEI); @@ -451,18 +590,40 @@ print <Stream END ; + +my $lines=0; foreach (@webradio){ - my @stream = split(/\|/,$_); - print <$stream[1] -
+ my @stream = split(/\|/,$_); + $lines++; + chomp($stream[2]); + if ($lines % 2) { + print ""; + }else{ + print ""; + } + chomp $stream[1];chop $stream[2]; + print <$stream[1] +
+ +END +; +} + +$lines++; +if ($lines % 2){ + print ""; +}else{ + print ""; +} + +print <

http:// +
END ; - } print ""; &Header::closebox(); - &Header::closebigbox(); &Header::closepage(); -}