]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/commitdiff
MPFire hinzugefügt - CGI mpg123 Frontend
authormaniacikarus <maniacikarus@ea5c0bd1-69bd-2848-81d8-4f18e57aeed8>
Sat, 30 Jun 2007 20:47:32 +0000 (20:47 +0000)
committermaniacikarus <maniacikarus@ea5c0bd1-69bd-2848-81d8-4f18e57aeed8>
Sat, 30 Jun 2007 20:47:32 +0000 (20:47 +0000)
Hardwaregraphs und Samba korrigiert
makegraphs für alle erweitert die ihr Gateway nicht pingen können -> geht jetzt auf ping.ipfire.org

git-svn-id: http://svn.ipfire.org/svn/ipfire/trunk@654 ea5c0bd1-69bd-2848-81d8-4f18e57aeed8

23 files changed:
config/cfgroot/graphs.pl
config/mpfire/mpfire.pl [new file with mode: 0644]
doc/language_issues.de
doc/language_issues.en
html/cgi-bin/hardwaregraphs.cgi
html/cgi-bin/mpfire.cgi [new file with mode: 0644]
html/cgi-bin/samba.cgi
html/html/images/audio-volume-high-red.png [new file with mode: 0644]
html/html/images/audio-volume-high.png [new file with mode: 0644]
html/html/images/audio-volume-low-red.png [new file with mode: 0644]
html/html/images/audio-volume-low.png [new file with mode: 0644]
html/html/images/audio-x-generic-red.png [new file with mode: 0644]
html/html/images/audio-x-generic.png [new file with mode: 0644]
html/html/images/media-playback-pause.png [new file with mode: 0644]
html/html/images/media-playback-start.png [new file with mode: 0644]
html/html/images/media-playback-stop.png [new file with mode: 0644]
html/html/images/media-resume.png [new file with mode: 0644]
html/html/images/media-skip-forward.png [new file with mode: 0644]
langs/de/cgi-bin/de.pl
langs/en/cgi-bin/en.pl
lfs/mpfire [new file with mode: 0644]
make.sh
src/scripts/makegraphs

index a3bdac37d19bc4cc811ff36aa1c8c0d779149b7b..0ac9e7dec06a3fa74e524099538bfa8a091962f6 100644 (file)
@@ -81,7 +81,7 @@ sub updatecpugraph {
         "GPRINT:iowaitpct:AVERAGE:%3.2lf%%",
         "GPRINT:iowaitpct:MIN:%3.2lf%%",
         "GPRINT:iowaitpct:LAST:%3.2lf%%\\j",
-        "STACK:irqpct".$color{"color23"}.":$tr{'irq cpu usage'}",
+        "STACK:irqpct".$color{"color23"}.":IRQ CPU             ",
         "GPRINT:irqpct:MAX:%3.2lf%%",
         "GPRINT:irqpct:AVERAGE:%3.2lf%%",
         "GPRINT:irqpct:MIN:%3.2lf%%",
@@ -366,15 +366,15 @@ sub updatehddgraph {
   "--color", "BACK".$color{"color21"},
   "-t $tr{'harddisk temperature'} ($tr{'graph per'} $tr{$period})",
   "DEF:temperature=$rrdlog/hddtemp-$disk.rrd:temperature:AVERAGE",
-  "AREA:temperature".$color{"color11"}.":$tr{'hdd temperature in'} C\\j",
+  "LINE2:temperature".$color{"color11"}.":$tr{'hdd temperature in'} C\\j",
   "COMMENT:$tr{'maximal'}",
   "COMMENT:$tr{'average'}",
   "COMMENT:$tr{'minimal'}",
   "COMMENT:$tr{'current'}\\j",
-  "GPRINT:temperature:MAX:%2.0lf Grad C",
-  "GPRINT:temperature:AVERAGE:%2.0lf Grad C",
-  "GPRINT:temperature:MIN:%2.0lf Grad C",
-  "GPRINT:temperature:LAST:%2.0lf Grad C\\j",
+  "GPRINT:temperature:MAX:%3.0lf Grad C",
+  "GPRINT:temperature:AVERAGE:%3.0lf Grad C",
+  "GPRINT:temperature:MIN:%3.0lf Grad C",
+  "GPRINT:temperature:LAST:%3.0lf Grad C\\j",
   );
   $ERROR = RRDs::error; 
   print "Error in RRD::graph for hdd-$disk: $ERROR\n" if $ERROR;
diff --git a/config/mpfire/mpfire.pl b/config/mpfire/mpfire.pl
new file mode 100644 (file)
index 0000000..ee21f4a
--- /dev/null
@@ -0,0 +1,99 @@
+#!/usr/bin/perl
+
+use MP3::Tag;
+use MP3::Info;
+
+require '/var/ipfire/general-functions.pl';
+require "${General::swroot}/lang.pl";
+require "${General::swroot}/header.pl";
+
+my $filename = "";
+my %songs = "";
+my $debug = 0;
+
+if ($ARGV[0] eq 'scan') {
+my $command = "find ";
+chomp $ARGV[1];
+$command .= "\"$ARGV[1]\"";
+if ($ARGV[2] eq 'off'){$command .= " -maxdepth 1";}
+$command .= " -name *.mp3";
+my @files = `$command`;
+
+&getExistingSongs();
+
+foreach (@files){
+ $filename = $_;
+ chomp($filename)
+  &getSongInfo();
+  }
+open(DATEI, ">${General::swroot}/mpfire/db/songs.db") || die "Kann Datenbank nicht speichern";
+print DATEI %songs;
+close(DATEI);
+}
+
+if ($ARGV[0] eq 'getdb') {
+  &getExistingSongs();
+  print %songs;
+  }
+
+if ($ARGV[0] eq 'play') {
+  if ($debug){print "Yes we are called and we will play $ARGV[1]\n";}
+  system("/usr/bin/mpg123 -b 1024 --aggressive -q \"$ARGV[1]\" 2>/dev/null >/dev/null &");
+  }
+  
+if ($ARGV[0] eq 'stop') {
+  my $PID =  `ps -ef | grep mpg123 | grep playlist | head -1 | awk '{  print \$2 }'`;
+  if ($debug){print "Stopping $PID\n";}
+  system("kill -KILL $PID");
+  }
+
+if ($ARGV[0] eq 'volup') {
+  if ($debug){print "Increasing Volume\n";}
+  system("/usr/bin/amixer set Master $ARGV[1]%+ 2>/dev/null >/dev/null");
+  }
+
+if ($ARGV[0] eq 'voldown') {
+  if ($debug){print "Decreasing Volume\n";}
+  system("/usr/bin/amixer set Master $ARGV[1]%- 2>/dev/null >/dev/null");
+  }
+
+if ($ARGV[0] eq 'playall') {
+  if ($debug){print "Playing everything\n";}
+  system("/usr/bin/mpg123 -b 1024 --aggressive -Zq@ /var/ipfire/mpfire/playlist 2>/dev/null >/dev/null &"); 
+  }
+  
+if ($ARGV[0] eq 'pause') {
+  my $PID =  `ps -ef | grep mpg123 | grep playlist | head -1 | awk '{  print \$2 }'`;
+  if ($debug){print "Pausing Process $PID\n";}
+  system("kill -STOP $PID");
+  }
+
+if ($ARGV[0] eq 'resume') {
+  my $PID =  `ps -ef | grep mpg123 | grep playlist | head -1 | awk '{  print \$2 }'`;
+  if ($debug){print "Resuming Process $PID\n";}
+  system("kill -CONT $PID");
+  }
+  
+if ($ARGV[0] eq 'next') {
+  if ($debug){print "Next Song\n";}
+  my $PID =  `ps -ef | grep mpg123 | grep playlist | head -1 | awk '{  print \$2 }'`;
+  system("kill -SIGINT $PID");
+  }
+
+sub getSongInfo(){
+  my $mp3 = MP3::Tag->new($filename);
+  my ($title, $track, $artist, $album, $comment, $year, $genre) = $mp3->autoinfo();
+  my $info = get_mp3info($filename);
+  $mp3->close();
+  $songs{$filename} = "|".$artist."|".$title."|".$track."|".$album."|".$year."|".$genre."|".$info->{MM}."|".$info->{SS}."|".$info->{BITRATE}."|".$info->{FREQUENCY}."|".$info->{MODE}."\n";
+  }
+
+sub getExistingSongs(){
+  open(DATEI, "<${General::swroot}/mpfire/db/songs.db") || die "Keine Datenbank vorhanden";
+  my @Zeilen = <DATEI>;
+  close(DATEI);
+  foreach (@Zeilen){
+    my @Zeile = split(/\|/,$_);
+    $songs{$Zeile[0]} = "|".$Zeile[1]."|".$Zeile[2]."|".$Zeile[3]."|".$Zeile[4]."|".$Zeile[5]."|".$Zeile[6]."|".$Zeile[7]."|".$Zeile[8]."|".$Zeile[9]."|".$Zeile[10]."|".$Zeile[11]."\n";
+    }
+ }
index 38a18322f62973043be0ffcd4a061fdb42ebe9c4..48409d19690c7ee28327d20dc8d830b1a349b173 100644 (file)
@@ -340,7 +340,6 @@ WARNING: translation string unused: this months volume
 WARNING: translation string unused: this update is already installed
 WARNING: translation string unused: this weeks volume
 WARNING: translation string unused: time date manually reset
-WARNING: translation string unused: title
 WARNING: translation string unused: to email adr
 WARNING: translation string unused: to install an update
 WARNING: translation string unused: to warn email bad
@@ -388,7 +387,6 @@ WARNING: translation string unused: week
 WARNING: translation string unused: weekly firewallhits
 WARNING: translation string unused: written sectors
 WARNING: translation string unused: xtaccess bad transfert
-WARNING: translation string unused: year
 WARNING: translation string unused: yearly firewallhits
 WARNING: untranslated string: OVPN
 WARNING: untranslated string: abort
index 3be8c9dc3b39605ec95ae9388f6e64fe05c65bbf..f18920b13dedff7c3ed11a4114cf794d2ecbfb17 100644 (file)
@@ -347,7 +347,6 @@ WARNING: translation string unused: this months volume
 WARNING: translation string unused: this update is already installed
 WARNING: translation string unused: this weeks volume
 WARNING: translation string unused: time date manually reset
-WARNING: translation string unused: title
 WARNING: translation string unused: to email adr
 WARNING: translation string unused: to install an update
 WARNING: translation string unused: to warn email bad
@@ -392,7 +391,6 @@ WARNING: translation string unused: web proxy configuration
 WARNING: translation string unused: week
 WARNING: translation string unused: weekly firewallhits
 WARNING: translation string unused: written sectors
-WARNING: translation string unused: year
 WARNING: translation string unused: yearly firewallhits
 WARNING: untranslated string: OVPN
 WARNING: untranslated string: abort
index 478bf9c387822a9998bbc25719aaddc0ba5d7b2b..6e3fc1d230c61e3c5b3402759048e0fbb680cf60 100644 (file)
@@ -34,7 +34,7 @@ my @disks = `kudzu -qps -c HD | grep device: | cut -d" " -f2 | sort | uniq`;
 foreach (@disks){
   my $disk = $_;
   chomp $disk;
-  &Graphs::updatehddgraph ($disk,"day");
+  &Graphs::updatehddgraph ($disk,"day");&Graphs::updatehddgraph ($disk,"week");&Graphs::updatehddgraph ($disk,"month");&Graphs::updatehddgraph ($disk,"year");
 }
 
   &Graphs::updatetempgraph ("day");
@@ -155,15 +155,6 @@ elsif ($cgigraphs[1] =~ /(temp|fan|volt)/)
 if ($cgigraphs[1] =~ /temp/) {&Graphs::updatetempgraph ("week");&Graphs::updatetempgraph ("month");&Graphs::updatetempgraph ("year");}
 if ($cgigraphs[1] =~ /fan/) {&Graphs::updatefangraph ("week");&Graphs::updatefangraph ("month");&Graphs::updatefangraph ("year");}
 if ($cgigraphs[1] =~ /volt/) {&Graphs::updatevoltgraph ("week");&Graphs::updatevoltgraph ("month");&Graphs::updatevoltgraph ("year");}
-if ($cgigraphs[1] =~ /hddtemp/){
-          my @devices = `kudzu -qps -c HD | grep device: | cut -d" " -f2 | sort | uniq`;
-
-          foreach (@devices) {
-                my $device = $_;
-                chomp($device);
-            &Graphs::updatehddgraph ($device,"week");
-            &Graphs::updatehddgraph ($device,"month");
-            &Graphs::updatehddgraph ($device,"year");}}
 
   my $graph = $cgigraphs[1];
   my $graphname = $Lang::tr{"mbmon $cgigraphs[1]"};
@@ -249,14 +240,11 @@ else
 
   if ( $mbmon_settings{'GRAPH_HDD'} == 1 )
   {
-       hddtempbox("hda");
-       hddtempbox("hdb");
-       hddtempbox("hdc");
-       hddtempbox("hdd");
-       hddtempbox("hde");
-       hddtempbox("hdf");
-       hddtempbox("hdg");
-       hddtempbox("hdh");
+   my @devices = `kudzu -qps -c HD | grep device: | cut -d" " -f2 | sort | uniq`;
+    foreach (@devices) {
+          my $device = $_;
+          chomp($device);
+    hddtempbox($device);}
   }
 
   &Header::openbox('100%', 'center', $Lang::tr{'settings'});
diff --git a/html/cgi-bin/mpfire.cgi b/html/cgi-bin/mpfire.cgi
new file mode 100644 (file)
index 0000000..05d2e14
--- /dev/null
@@ -0,0 +1,174 @@
+#!/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 = "";
+my $errormessage = "";
+
+open(DATEI, "<${General::swroot}/mpfire/db/songs.db") || die "No Database found";
+my @songdb = <DATEI>;
+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();
+&Header::getcgihash(\%mpfiresettings);
+
+&Header::openpage($Lang::tr{'mpfire'}, 1, '');
+&Header::openbigbox('100%', 'left', '', $errormessage);
+
+sub refreshpage{&Header::openbox( 'Waiting', 1, "<meta http-equiv='refresh' content='1;'>" );}
+
+############################################################################################################################
+######################################## Scanne Verzeichnisse nach Mp3 Dateien #############################################
+
+if ( $mpfiresettings{'ACTION'} eq "scan" )
+{
+delete $mpfiresettings{'__CGI__'};delete $mpfiresettings{'x'};delete $mpfiresettings{'y'};
+&General::writehash("${General::swroot}/mpfire/settings", \%mpfiresettings);
+system("/usr/local/bin/mpfirectrl scan $mpfiresettings{'SCANDIR'} $mpfiresettings{'SCANDIRDEPS'}");
+}
+
+if ( $mpfiresettings{'ACTION'} eq ">" ){system("/usr/local/bin/mpfirectrl play $mpfiresettings{'FILE'}");}
+if ( $mpfiresettings{'ACTION'} eq "x" ){system("/usr/local/bin/mpfirectrl stop");}
+if ( $mpfiresettings{'ACTION'} eq "||" ){system("/usr/local/bin/mpfirectrl pause");}
+if ( $mpfiresettings{'ACTION'} eq "|>" ){system("/usr/local/bin/mpfirectrl resume");}
+if ( $mpfiresettings{'ACTION'} eq ">>" ){system("/usr/local/bin/mpfirectrl next");}
+if ( $mpfiresettings{'ACTION'} eq "+" ){system("/usr/local/bin/mpfirectrl volup 5");}
+if ( $mpfiresettings{'ACTION'} eq "-" ){system("/usr/local/bin/mpfirectrl voldown 5");}
+if ( $mpfiresettings{'ACTION'} eq "++" ){system("/usr/local/bin/mpfirectrl volup 10");}
+if ( $mpfiresettings{'ACTION'} eq "--" ){system("/usr/local/bin/mpfirectrl voldown 10");}
+if ( $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);
+system("/usr/local/bin/mpfirectrl playall");
+}
+if ( $mpfiresettings{'SHOWLIST'} ){delete $mpfiresettings{'__CGI__'};delete $mpfiresettings{'x'};delete $mpfiresettings{'y'};&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 "" )  {       print "<font color='red'>$message</font>"; }
+
+&Header::openbox('100%', 'center', $Lang::tr{'mpfire scanning'});
+       
+print <<END
+<form method='post' action='$ENV{'SCRIPT_NAME'}'>
+<table width='95%' cellspacing='0'>
+<tr bgcolor='$color{'color20'}'><td colspan='2' align='left'><b>$Lang::tr{'Scan for Files'}</b></td></tr>
+<tr><td align='left' width='40%'>$Lang::tr{'Scan from Directory'}</td><td align='left'><input type='text' name='SCANDIR' value='$mpfiresettings{'SCANDIR'}' size="30" /></td></tr>
+<tr><td align='left' width='40%'>$Lang::tr{'deep scan directories'}</td><td align='left'>on <input type='radio' name='SCANDIRDEPS' value='on' checked='checked'/>/
+                                                                                                                                                                                                                                                 <input type='radio' name='SCANDIRDEPS' value='off'/> off</td></tr>
+<tr><td align='center' colspan='2'><input type='hidden' name='ACTION' value='scan' />
+                              <input type='image' alt='$Lang::tr{'Scan for Files'}' title='$Lang::tr{'Scan for Files'}' src='/images/edit-find.png' /></td></tr>                                                                                                                                                               
+</table>
+</form>
+END
+;
+&Header::closebox();
+
+&Header::openbox('100%', 'center', $Lang::tr{'mpfire controls'});
+print "<form method='post' action='$ENV{'SCRIPT_NAME'}'><table width='95%' cellspacing='0'><tr>";
+print <<END
+    <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'><input type='hidden' name='ACTION' value='x' /><input type='image' alt='$Lang::tr{'stop'}' title='$Lang::tr{'stop'}' src='/images/media-playback-stop.png' /></form></td>
+    <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'><input type='hidden' name='ACTION' value='||' /><input type='image' alt='$Lang::tr{'pause'}' title='$Lang::tr{'pause'}' src='/images/media-playback-pause.png' /></form></td>
+    <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'><input type='hidden' name='ACTION' value='|>' /><input type='image' alt='$Lang::tr{'resume'}' title='$Lang::tr{'resume'}' src='/images/media-resume.png' /></form></td>
+    <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'><input type='hidden' name='ACTION' value='playall' /><input type='image' alt='$Lang::tr{'play'}' title='$Lang::tr{'play'}' src='/images/media-playback-start.png' /></form></td>
+    <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'><input type='hidden' name='ACTION' value='>>' /><input type='image' alt='$Lang::tr{'next'}' title='$Lang::tr{'next'}' src='/images/media-skip-forward.png' /></form></td>
+    </tr>
+END
+;
+if ( $mpfiresettings{'SHOWLIST'} eq "on" ){print"<tr><td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'><input type='hidden' name='SHOWLIST' value='off' /><input type='image' alt='$Lang::tr{'off'}' title='$Lang::tr{'off'}' src='/images/audio-x-generic.png' /></form></td>";}
+else { print"<tr><td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'><input type='hidden' name='SHOWLIST' value='on' /><input type='image' alt='$Lang::tr{'on'}' title='$Lang::tr{'on'}' src='/images/audio-x-generic-red.png' /></form></td>";}    
+print <<END  
+    <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'><input type='hidden' name='ACTION' value='--' /><input type='image' alt='$Lang::tr{'voldown10'}' title='$Lang::tr{'voldown10'}' src='/images/audio-volume-low-red.png' /></form></td>
+    <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'><input type='hidden' name='ACTION' value='-' /><input type='image' alt='$Lang::tr{'voldown5'}' title='$Lang::tr{'voldown5'}' src='/images/audio-volume-low.png' /></form></td>
+    <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'><input type='hidden' name='ACTION' value='+' /><input type='image' alt='$Lang::tr{'volup5'}' title='$Lang::tr{'volup5'}' src='/images/audio-volume-high.png' /></form></td>
+    <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'><input type='hidden' name='ACTION' value='++' /><input type='image' alt='$Lang::tr{'volup10'}' title='$Lang::tr{'volup10'}' src='/images/audio-volume-high-red.png' /></form></td>
+    </tr>
+</table>
+END
+;
+&Header::closebox();
+
+if ( $mpfiresettings{'SHOWLIST'} eq "on" ){
+
+&Header::openbox('100%', 'center', $Lang::tr{'mpfire songs'});
+print <<END
+
+<table width='95%' cellspacing=5'>
+<tr bgcolor='$color{'color20'}'><td colspan='9' align='left'><b>$Lang::tr{'Existing Files'}</b></td></tr>
+<tr><td align='center'></td>
+    <td align='center'><b>$Lang::tr{'artist'}<br/>$Lang::tr{'title'}</b></td>
+    <td align='center'><b>$Lang::tr{'number'}</b></td>
+    <td align='center'><b>$Lang::tr{'album'}</b></td>
+    <td align='center'><b>$Lang::tr{'year'}</b></td>
+    <td align='center'><b>$Lang::tr{'genre'}</b></td>
+    <td align='center'><b>$Lang::tr{'length'}<br/>$Lang::tr{'bitrate'} - $Lang::tr{'frequency'}</b></td>
+    <td align='center'><b>$Lang::tr{'mode'}</b></td></tr>
+END
+;
+my $lines = 0;
+foreach (@songdb){
+  my @song = split(/\|/,$_);
+  
+  if ($lines % 2) {print "<tr bgcolor='$color{'color20'}'>";} else {print "<tr bgcolor='$color{'color22'}'>";}
+  $song[0]=~s/\/\//\//g;   
+  print <<END
+  <td align='center' style="white-space:nowrap;"><form method='post' action='$ENV{'SCRIPT_NAME'}'><input type='hidden' name='ACTION' value='>' /><input type='hidden' name='FILE' value='$song[0]' /><input type='image' alt='$Lang::tr{'play'}' title='$Lang::tr{'play'}' src='/images/media-playback-start.png' /></form></td>
+  <td align='center'>$song[1]<br/>$song[2]</td>
+  <td align='center'>$song[3]</td>
+  <td align='center'>$song[4]</td>
+  <td align='center'>$song[5]</td>
+  <td align='center'>$song[6]</td>
+  <td align='center'>$song[7]:$song[8]<br/>$song[9] - $song[10]</td>
+END
+;
+    if ( $song[11] eq "0\n" ) {print "<td align='center'>Stereo</td></tr>"; }
+    elsif ( $song[11] eq "1\n" ) {print "<td align='center'>Joint<br/>Stereo</td></tr>"; }
+    elsif ( $song[11] eq "2\n" ) {print "<td align='center'>Dual<br/>Channel</td></tr>"; }
+    elsif ( $song[11] eq "3\n" ) {print "<td align='center'>Single<br/>Channel</td></tr>"; }
+    else {print "<td align='center'></td></tr>"; }
+  $lines++
+  }
+print "</table></form>";
+&Header::closebox();
+}
+
+&Header::closebigbox();
+&Header::closepage();
index 69cb9fe25872fabe0cb57690ccb3df75b806d788..6c52a8457907072054eec17e60ad9d90f2b0823e 100644 (file)
@@ -571,10 +571,14 @@ END
        @user = <FILE>;
        close(FILE);
        system('/usr/local/bin/sambactrl locksmbpasswd');
+       
+       my $lines = 0;
+       
        foreach $userentry (sort @user)
                {
                @userline = split( /\:/, $userentry );
-               print "<tr><td align='left'>$userline[0]</td><td align='left'>";
+    if ($lines % 2) {print "<tr bgcolor='$color{'color20'}'>";} else {print "<tr bgcolor='$color{'color22'}'>";}
+               print "<td align='left'>$userline[0]</td><td align='left'>";
                if ($userline[4] =~ /N/)
                        {
                        print "$Lang::tr{'not set'}</td><td align='left'>";
@@ -663,6 +667,7 @@ END
 END
 ;
                                }
+               $lines++;
                }
        print <<END
        </table>
@@ -796,12 +801,14 @@ END
 ;
 
 my @Shares = keys(%shares);
+my $lines = 0;
 
 foreach my $shareentry (sort @Shares)
        {
        chomp $shareentry;
+       if ($lines % 2) {print "<tr bgcolor='$color{'color20'}'>";} else {print "<tr bgcolor='$color{'color22'}'>";}
        print <<END
-       <tr><td align='left'>$shareentry</td>
+       <td align='left'>$shareentry</td>
        <td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
                        <input type='hidden' name='NAME' value='$shareentry' />
                        <input type='hidden' name='ACTION' value='sharechange' />
@@ -814,6 +821,7 @@ foreach my $shareentry (sort @Shares)
        </form></td></tr>
 END
 ;
+  $lines++;
        }
 
 print <<END
diff --git a/html/html/images/audio-volume-high-red.png b/html/html/images/audio-volume-high-red.png
new file mode 100644 (file)
index 0000000..f47d25c
Binary files /dev/null and b/html/html/images/audio-volume-high-red.png differ
diff --git a/html/html/images/audio-volume-high.png b/html/html/images/audio-volume-high.png
new file mode 100644 (file)
index 0000000..ec8f00b
Binary files /dev/null and b/html/html/images/audio-volume-high.png differ
diff --git a/html/html/images/audio-volume-low-red.png b/html/html/images/audio-volume-low-red.png
new file mode 100644 (file)
index 0000000..445c313
Binary files /dev/null and b/html/html/images/audio-volume-low-red.png differ
diff --git a/html/html/images/audio-volume-low.png b/html/html/images/audio-volume-low.png
new file mode 100644 (file)
index 0000000..4d7239f
Binary files /dev/null and b/html/html/images/audio-volume-low.png differ
diff --git a/html/html/images/audio-x-generic-red.png b/html/html/images/audio-x-generic-red.png
new file mode 100644 (file)
index 0000000..444706e
Binary files /dev/null and b/html/html/images/audio-x-generic-red.png differ
diff --git a/html/html/images/audio-x-generic.png b/html/html/images/audio-x-generic.png
new file mode 100644 (file)
index 0000000..fd877cb
Binary files /dev/null and b/html/html/images/audio-x-generic.png differ
diff --git a/html/html/images/media-playback-pause.png b/html/html/images/media-playback-pause.png
new file mode 100644 (file)
index 0000000..c8b4fe2
Binary files /dev/null and b/html/html/images/media-playback-pause.png differ
diff --git a/html/html/images/media-playback-start.png b/html/html/images/media-playback-start.png
new file mode 100644 (file)
index 0000000..a7de0fe
Binary files /dev/null and b/html/html/images/media-playback-start.png differ
diff --git a/html/html/images/media-playback-stop.png b/html/html/images/media-playback-stop.png
new file mode 100644 (file)
index 0000000..ede2815
Binary files /dev/null and b/html/html/images/media-playback-stop.png differ
diff --git a/html/html/images/media-resume.png b/html/html/images/media-resume.png
new file mode 100644 (file)
index 0000000..624310d
Binary files /dev/null and b/html/html/images/media-resume.png differ
diff --git a/html/html/images/media-skip-forward.png b/html/html/images/media-skip-forward.png
new file mode 100644 (file)
index 0000000..758ec6f
Binary files /dev/null and b/html/html/images/media-skip-forward.png differ
index 28053446e9210230eb1bcdaaf7e64aa0c93b3870..acd51cf438b7e0bd64d3f60a5a440c258e1102fe 100644 (file)
@@ -17,6 +17,7 @@
 'ConnSched time' => 'Zeit:',
 'ConnSched up' => 'Hoch',
 'ConnSched weekdays' => 'Wochentage:',
+'Existing Files' => 'Dateien in der Datenbank',
 'HDD temperature' => 'HDD-Temperatur',
 'Local VPN IP' => 'Internes Netzwerk (GREEN)',
 'MTU' => 'MTU Size',
@@ -27,6 +28,8 @@
 'Remote IP' => 'Entfernte IP / Hostname (DynDNS)',
 'Remote VPN IP' => 'VPN Subnetz (z.B. 10.0.10.0/255.255.255.0)',
 'Resolv' => 'Resolv-Retry',
+'Scan for Files' => 'Nach Dateien suchen',
+'Scan from Directory' => 'Scan Verzeichnis',
 'Verbose' => 'Verbose',
 'WakeOnLan' => 'Wake On LAN',
 'a ca certificate with this name already exists' => 'Ein CA-Zertifikat mit diesem Namen existiert bereits.',
 'advproxy web browser' => 'Web-Browser',
 'advproxy wednesday' => 'Mit',
 'again' => 'Wiederholung:',
+'album' => 'Album',
 'alcatelusb help' => 'Um das Speedtouch USB Modem zu verwenden, müssen Sie die Firmware in Ihre IPFire Box hochladen. Bitte laden sie das <b>Embedded Firmware</b> Paket von speedtouch.com herunter, entpacken es und laden dann die passende Datei für Ihr Modem hoch: KQD6_3.xxx für Revisionsnummern <4 oder ZZZL_3.xxx für Rev.=4 mittels des unten angegebenen Formulars.',
 'alcatelusb upload' => 'Speedtouch USB Firmware hochladen',
 'alias ip' => 'Alias-IP-Adresse',
 'archive not exist' => 'Konfigurationsarchiv existiert nicht',
 'are you sure' => 'Sind Sie sicher?',
 'arp table entries' => 'Einträge der ARP-Tabelle:',
+'artist' => 'Künstler',
 'attemps' => 'Versuche',
 'august' => 'August',
 'authentication' => 'Authentifizierung:',
 'basic options' => 'Basisoptionen',
 'beep when ppp connects or disconnects' => 'Piepen, wenn IPFire verbindet oder trennt',
 'behind a proxy' => 'Hinter einem Proxy:',
+'bitrate' => 'Bitrate',
 'bleeding rules' => 'Bleeding Edge Snort Rules',
 'blue' => 'BLAU',
 'blue access' => 'Zugriff auf Blau',
 'deactivate user' => 'Benutzer deaktivieren',
 'debugme' => 'Noch nicht implementiert',
 'december' => 'Dezember',
+'deep scan directories' => 'rekursiv scannen',
 'def lease time' => 'Standardzeit für Zuordnung',
 'default lease time' => 'Haltezeit-Voreinstellung in min:',
 'default networks' => 'Standard Netzwerke',
 'free' => 'Frei',
 'free memory' => 'Freier Speicher   ',
 'free swap' => 'Freier Swap',
+'frequency' => 'Frequenz',
 'friday' => 'Freitag',
 'fritzdsl help' => 'Um eines der folgenden Fritz!DSL Modems (Fritz!Card DSL=fcdsl / Fritz!CardDSL SL=fcdslsl / Fritz!Card DSL V2.0=fcdsl2 / Fritz!Card DSL USB=fcdslusb / Fritz!Card DSL USB SL=fcdslslusb) nutzen zu können, müssen Sie ein Paket auf Ihre IPFire-Box laden. Bitte laden Sie den tarball entsprechend Ihrer Version von der IPFire-Webseite herunter und laden Sie dann die gesamte <b>fcdsl-(ihre_version).tgz</b> mit dem folgenden Formular hoch.',
 'fritzdsl upload' => 'Fritz!DSL-Treiber hochladen',
 'generatereport' => 'Neuen Report erstellen',
 'generating the root and host certificates may take a long time. it can take up to several minutes on older hardware. please be patient' => 'Die Erzeugung der Root und Host Zertifikate kann lange Zeit dauern.  Auf älterer Hardware kann es mehrere Minuten lang dauern. Bitte haben Sie etwas Geduld.',
 'genkey' => 'PSK erzeugen',
+'genre' => 'Genre',
 'global settings' => 'Globale Einstellungen',
 'graph' => 'Diagramm',
 'graph per' => 'Diagramm pro',
 'lateprompting' => 'Late prompting',
 'lease expires' => 'Zuordnung verfällt',
 'legend' => 'Legende',
+'length' => 'Länge',
 'line' => 'Leitung',
 'linkq' => 'Verbindungsqualität',
 'load printer' => 'Load Printer',
 'misc-options' => 'Sonstige Optionen',
 'missing dat' => 'Verschlüsseltes Archiv wurde nicht gefunden',
 'missing gz' => 'Nichtverschlüsseltes Archiv wurde nicht gefunden',
+'mode' => 'Modus',
 'modem' => 'Modem',
 'modem configuration' => 'Modem-Konfiguration',
 'modem on com1' => 'Modem an COM1',
 'more' => 'weitere',
 'mount' => 'Einbinden',
 'mounted on' => 'Mounted auf',
+'mpfire' => 'Media Player für IPFire',
+'mpfire controls' => 'MPFire Steuerung',
+'mpfire scanning' => 'Nach neuen Dateien suchen',
+'mpfire songs' => 'MPFire Songliste',
 'my new share' => 'Meine neue Freigabe',
 'name' => 'Name',
 'name is invalid' => 'Name ist ungültig',
 'new optionsfw later' => 'Ihre Modifikation(en) wird (werden) beim nächsten Neustart aktiv werden',
 'new optionsfw must boot' => 'Sie müssen Ihren IPFire neu starten',
 'newer' => 'Neuer',
+'next' => 'Nächster',
 'no' => 'Nein',
 'no alcatelusb firmware' => 'Keine Alcatel USB ADSL-Firmware vorhanden. Bitte hochladen.',
 'no cfg upload' => 'Keine Daten wurden hochgeladen',
 'o-no' => 'Inaktiv',
 'o-yes' => 'Aktiv',
 'october' => 'Oktober',
+'off' => 'off',
 'ok' => 'OK',
 'older' => 'Älter',
+'on' => 'on',
 'online help en' => 'Online-Hilfe (auf Deutsch)',
 'only digits allowed in holdoff field' => 'Im Holdoff-Feld sind nur Ziffern erlaubt',
 'only digits allowed in max retries field' => 'Im Feld &quot;Maximale Wiederholversuche&quot; sind nur Ziffern erlaubt.',
 'passwords do not match' => 'Die Passwörter stimmen nicht überein.',
 'passwords must be at least 6 characters in length' => 'Passwörter müssen mind. 6 Zeichen lang sein',
 'path to directory' => 'Pfad zur Freigabe',
+'pause' => 'Pause',
 'pc' => 'PC',
 'pc add' => 'PC hinzufügen',
 'pdc options' => 'PDC Optionen',
 'phonebook entry' => 'Telefonbuch-Eintrag:',
 'ping disabled' => 'Ping Antwort deaktivieren',
 'pkcs12 file password' => 'PKCS12 Datei-Passwort',
+'play' => 'Play',
 'polfile' => 'Polfile',
 'port' => 'Port',
 'port forwarding configuration' => 'Konfiguration der Port-Weiterleitung',
 'restore defaults' => 'Voreinstellungen wiederherstellen',
 'restore hardware settings' => 'Hardware-Einstellungen wiederherstellen',
 'restore settings' => 'Einstellungen wiederherstellen',
+'resume' => 'Resume',
 'reverse sort' => 'In umgekehrter chronologischer Reihenfolge sortieren',
 'root' => 'Root',
 'root certificate' => 'Root-Zertifikat',
 'status' => 'Status',
 'status information' => 'Statusinformationen',
 'status ovpn' => 'OpenVPN',
+'stop' => 'Stop',
 'stop ovpn server' => 'Stoppe OpenVPN Server',
 'stopped' => 'ANGEHALTEN',
 'subject' => 'Betreff',
 'virtual address' => 'Virtuelle Addresse',
 'virtual private networking' => 'Virtuelles Privates Netzwerk',
 'visible in browselist' => 'Sichtbar in der Verzeichnisliste',
+'voldown10' => 'Laustärke um 10 verringern',
+'voldown5' => 'Laustärke um 5 verringern',
+'volup10' => 'Laustärke um 10 erhöhen',
+'volup5' => 'Laustärke um 5 erhöhen',
 'vpi number' => 'VPI-Nummer:',
 'vpn' => 'VPN',
 'vpn aggrmode' => 'IKE Aggressive Mode zugelassen. Wenn möglich, vermeiden (preshared Schlüssel wird im Klartext übertragen)!',
index 0a42dcff93a3a1e6e783febbd949e45b33de1679..ac299b79f3db808cbf51d64fcf3ee94645fdb7da 100644 (file)
@@ -17,6 +17,7 @@
 'ConnSched time' => 'Time:',
 'ConnSched up' => 'Up',
 'ConnSched weekdays' => 'Days of the week:',
+'Existing Files' => 'Files in database',
 'HDD temperature' => 'HDD temperature',
 'Local VPN IP' => 'Internal Network (GREEN):',
 'MTU' => 'MTU Size:',
@@ -27,6 +28,8 @@
 'Remote IP' => 'Remote IP / Hostname (DynDNS):',
 'Remote VPN IP' => 'VPN Subnet (e.g. 10.0.10.0/255.255.255.0):',
 'Resolv' => 'Resolv-Retry:',
+'Scan for Files' => 'Scan for files',
+'Scan from Directory' => 'Scan from directory',
 'Verbose' => 'Verbose:',
 'WakeOnLan' => 'Wake On LAN',
 'a ca certificate with this name already exists' => 'A CA Certificate with this name already exists.',
 'advproxy web browser' => 'Web browser',
 'advproxy wednesday' => 'Wed',
 'again' => 'Again:',
+'album' => 'Album',
 'alcatelusb help' => 'To utilise the Speedtouch 330 or Speedtouch USB modem you must upload the firmware to your IPFire box. Please download the <b>Embedded Firmware</b> package for SpeedTouch 330 from speedtouch.com, unzip and then upload the appropriate file for your modem : KQD6_3.xxx when Rev<4 or ZZZL_3.xxx for Rev=4 using the form below.',
 'alcatelusb upload' => 'Upload Speedtouch USB Firmware',
 'alias ip' => 'Alias IP',
 'archive not exist' => 'Configuration archive does not exist',
 'are you sure' => 'Are you sure?',
 'arp table entries' => 'ARP Table Entries:',
+'artist' => 'Artist',
 'attemps' => 'Attempts',
 'august' => 'August',
 'authentication' => 'Authentication:',
 'behind a proxy' => 'Behind a proxy:',
 'bewan adsl pci st' => 'TO BE REMOVED',
 'bewan adsl usb' => 'TO BE REMOVED',
+'bitrate' => 'Bitrate',
 'bleeding rules' => 'Bleeding Edge Snort Rules',
 'blue' => 'BLUE',
 'blue access' => 'Blue Access',
 'deactivate user' => 'deactivate user',
 'debugme' => 'Not yet implemented',
 'december' => 'December',
+'deep scan directories' => 'Scan recursive',
 'def lease time' => 'Default Lease Time',
 'default lease time' => 'Default lease time (mins):',
 'default networks' => 'Default networks',
 'free' => 'Free',
 'free memory' => 'Free Memory    ',
 'free swap' => 'Free Swap',
+'frequency' => 'Frequency',
 'friday' => 'Friday',
 'fritzdsl help' => 'To utilise one of Fritz!DSL fcdsl / fcdslsl / fcdsl2 / fcdslusb / fcdslslusb modem, you must upload a package to your IPFire box. Please download the tarball corresponding to your version from the IPFire Website and then upload the entire <b>fcdsl-(your_version).tgz</b> using the form below.',
 'fritzdsl upload' => 'Upload Fritz!DSL Driver',
 'generatereport' => 'Generate new Report',
 'generating the root and host certificates may take a long time. it can take up to several minutes on older hardware. please be patient' => 'Generating the root and host certificates may take a long time.  It can take up to several minutes on older hardware. Please be patient.',
 'genkey' => 'Generate PSK',
+'genre' => 'Genre',
 'global settings' => 'Global settings',
 'graph' => 'Graph',
 'graph per' => 'Graph per',
 'lateprompting' => 'Lateprompting',
 'lease expires' => 'Lease expires',
 'legend' => 'Legend',
+'length' => 'Length',
 'line' => 'Line',
 'linkq' => 'Link Quality',
 'load printer' => 'Load Printer',
 'misc-options' => 'Miscellaneous options',
 'missing dat' => 'Encrypted archive not found',
 'missing gz' => 'Unencrypted archive not found',
+'mode' => 'Mode',
 'modem' => 'Modem',
 'modem configuration' => 'Modem configuration',
 'modem on com1' => 'Modem on COM1',
 'more' => 'more',
 'mount' => 'Mount',
 'mounted on' => 'Mounted on',
+'mpfire' => 'Media Player for IPFire',
+'mpfire controls' => 'MPFire Control',
+'mpfire scanning' => 'Scan for new files',
+'mpfire songs' => 'MPFire songlist',
 'my new share' => 'My new share',
 'name' => 'Name',
 'name is invalid' => 'Name is invalid',
 'new optionsfw later' => 'Your modification(s) will be active on next restart',
 'new optionsfw must boot' => 'You must reboot your IPFire',
 'newer' => 'Newer',
+'next' => 'next',
 'no' => 'No',
 'no alcatelusb firmware' => 'No Alcatel USB firmware. Please upload.',
 'no cfg upload' => 'No data was uploaded',
 'o-no' => 'Inactiv',
 'o-yes' => 'Activ',
 'october' => 'October',
+'off' => 'off',
 'ok' => 'OK',
 'older' => 'Older',
+'on' => 'on',
 'online help en' => 'Online Help (in English)',
 'only digits allowed in holdoff field' => 'Only digits allowed in holdoff field',
 'only digits allowed in max retries field' => 'Only digits allowed in max retries field.',
 'passwords do not match' => 'Passwords do not match.',
 'passwords must be at least 6 characters in length' => 'Passwords must be at least 6 characters in length',
 'path to directory' => 'path to share',
+'pause' => 'pause',
 'pc' => 'Workstatipon',
 'pc add' => 'add workstation',
 'pdc options' => 'PDC Options',
 'phonebook entry' => 'Phonebook entry:',
 'ping disabled' => 'Disable ping response',
 'pkcs12 file password' => 'PKCS12 File Password',
+'play' => 'play',
 'polfile' => 'Polfile',
 'port' => 'Port',
 'port forwarding configuration' => 'Port forwarding configuration',
 'restore defaults' => 'Restore defaults',
 'restore hardware settings' => 'Restore hardware settings',
 'restore settings' => 'Reset Settings',
+'resume' => 'resume',
 'reverse sort' => 'Sort in reverse chronological order',
 'root' => 'Root',
 'root certificate' => 'Root Certificate',
 'status' => 'Status',
 'status information' => 'Status information',
 'status ovpn' => '4. OpenVPN Status / Configuration:',
+'stop' => 'stop',
 'stop ovpn server' => 'Stop OpenVPN Server',
 'stopped' => 'STOPPED',
 'subject' => 'Subject',
 'virtual address' => 'Virtual Address',
 'virtual private networking' => 'Virtual Private Networking',
 'visible in browselist' => 'visible in browselist',
+'voldown10' => 'Decrease Volume by 10',
+'voldown5' => 'Decrease Volume by 5',
+'volup10' => 'Increase Volume by 10',
+'volup5' => 'Increase Volume by 5',
 'vpi number' => 'VPI Number:',
 'vpn' => 'VPN',
 'vpn aggrmode' => 'IKE aggressive mode allowed. Avoid if possible (preshared key is transmitted in clear text)!',
diff --git a/lfs/mpfire b/lfs/mpfire
new file mode 100644 (file)
index 0000000..fb04dbb
--- /dev/null
@@ -0,0 +1,69 @@
+###############################################################################
+# This file is part of the IPCop Firewall.                                    #
+#                                                                             #
+# IPCop is free software; you can redistribute it and/or modify               #
+# it under the terms of the GNU General Public License as published by        #
+# the Free Software Foundation; either version 2 of the License, or           #
+# (at your option) any later version.                                         #
+#                                                                             #
+# IPCop is distributed in the hope that it will be useful,                    #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
+# GNU General Public License for more details.                                #
+#                                                                             #
+# You should have received a copy of the GNU General Public License           #
+# along with IPCop; if not, write to the Free Software                        #
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA    #
+#                                                                             #
+# Makefiles are based on LFSMake, which is                                    #
+# Copyright (C) 2002 Rod Roard <rod@sunsetsystems.com>                        #
+#                                                                             #
+###############################################################################
+
+###############################################################################
+# Definitions
+###############################################################################
+
+include Config
+
+VER        = ipfire
+
+THISAPP    = mpfire-$(VER)
+DIR_APP    = $(DIR_SRC)/$(THISAPP)
+TARGET     = $(DIR_INFO)/$(THISAPP)
+PROG       = mpfire
+PAK_VER    = 1
+
+DESCDE     = "MPFire ist ein CGI Multimediaplayer auf Basis von mpg123."
+DESCEN     = "MPFire is a mpg123 based CGI Multimedia-Player."
+DEPS       = "mpg123"
+
+###############################################################################
+# Top-level Rules
+###############################################################################
+
+objects =
+
+install : $(TARGET)
+
+check : 
+
+download :
+
+md5 : 
+
+dist: 
+       @$(PAK)
+
+###############################################################################
+# Installation Details
+###############################################################################
+
+$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
+       @$(PREBUILD)
+       -mkdir -p /var/ipfire/mpfire/{bin,db}
+       touch /var/ipfire/mpfire/{settings,playlist}
+       touch /var/ipfire/mpfire/db/songs.db
+       chown nobody.nobody /var/ipfire/mpfire/{settings,playlist}      
+       install -v -m 755 $(DIR_SRC)/config/mpfire/mpfire.pl /var/ipfire/mpfire/bin
+       @$(POSTBUILD)
diff --git a/make.sh b/make.sh
index e73e67647989f3601bad5f64ce705501106eb09e..3886b58fe7bfa8856906e0e1da0d1a7d3ffe712d 100755 (executable)
--- a/make.sh
+++ b/make.sh
@@ -503,6 +503,7 @@ buildipfire() {
 # ipfiremake bristuff
   ipfiremake asterisk
   ipfiremake mpg123
+  ipfiremake mpfire
   ipfiremake libmad
   ipfiremake libogg
   ipfiremake libvorbis
index ed3bbeac250ba317041dc5bf4209c1c4b92e059a..4e22159457f2f10ef222e06a65a3bb74f7249dc1 100644 (file)
@@ -379,11 +379,22 @@ sub updatelq {
         my $LQ_GATEWAY=`cat /var/ipfire/red/remote-ipaddress`;
         chomp($LQ_GATEWAY);
         my $NUMPINGS=5;
-        my $pingoutput = `ping -c $NUMPINGS -q $LQ_GATEWAY`;
-        chomp;
+        my $pingoutput = `/usr/bin/ping -w 10 -c $NUMPINGS -q $LQ_GATEWAY | tail -2`;
         my @temp = split (/\/|\%|\s/, $pingoutput);
-        $packetloss   = $temp[17];
-        $roundtrip    = $temp[28];
+        $packetloss = $temp[5];
+        $roundtrip = $temp[17];
+        
+        print "Paketlos->".$packetloss."<-Roundtrip->".$roundtrip."<-\n";
+       
+        if ( $packetloss eq "100" ){
+        my $pingoutput = `/usr/bin/ping -w 10 -c $NUMPINGS -q ping.ipfire.org  | tail -2`;
+        my @temp = split (/\/|\%|\s/, $pingoutput);
+        $packetloss = $temp[5];
+        $roundtrip = $temp[17];
+        
+        print "Paketlos->".$packetloss."<-Roundtrip->".$roundtrip."<-\n";
+        }
+        
         RRDs::update ("$rrdlog/lq.rrd", "N:$packetloss:$roundtrip");
         $ERROR = RRDs::error;
         print "Error in RRD::update for line quality: $ERROR\n" if $ERROR;