* [PATCH] mpfire: removal as discussed in Conf call 7th Oct
@ 2024-10-08 16:45 Adolf Belka
0 siblings, 0 replies; only message in thread
From: Adolf Belka @ 2024-10-08 16:45 UTC (permalink / raw)
To: development
[-- Attachment #1: Type: text/plain, Size: 268113 bytes --]
- removal of lfs, rootfile, backup, paks, misc-progs, mpfire perl, language file
content, mpfire.cgi, mpfire menu references and files, mpfire specific image,
web-user-interface references and references in manualpages.
Signed-off-by: Adolf Belka <adolf.belka(a)ipfire.org>
---
config/backup/includes/mpfire | 2 -
config/cfgroot/manualpages | 1 -
| 5 -
config/mpfire/mpfire.pl | 108 ---
config/mpfire/perl/Accessor.pm | 675 -------------
config/mpfire/perl/Accessor/Fast.pm | 94 --
config/mpfire/perl/Accessor/Faster.pm | 105 --
config/mpfire/perl/Audio/MPD.pm | 897 ------------------
config/mpfire/perl/Audio/MPD/Collection.pm | 594 ------------
config/mpfire/perl/Audio/MPD/Common.pm | 88 --
config/mpfire/perl/Audio/MPD/Common/Item.pm | 100 --
.../perl/Audio/MPD/Common/Item/Directory.pm | 72 --
.../perl/Audio/MPD/Common/Item/Playlist.pm | 72 --
.../mpfire/perl/Audio/MPD/Common/Item/Song.pm | 133 ---
config/mpfire/perl/Audio/MPD/Common/Stats.pm | 135 ---
config/mpfire/perl/Audio/MPD/Common/Status.pm | 192 ----
config/mpfire/perl/Audio/MPD/Common/Time.pm | 186 ----
config/mpfire/perl/Audio/MPD/Playlist.pm | 427 ---------
config/mpfire/perl/Audio/MPD/Test.pm | 217 -----
config/mpfire/perl/Readonly.pm | 803 ----------------
config/mpfire/webradio | 14 -
config/rootfiles/common/configroot | 1 -
config/rootfiles/common/web-user-interface | 3 -
config/rootfiles/packages/mpfire | 35 -
doc/language_issues.de | 23 +
doc/language_issues.en | 30 -
doc/language_issues.es | 23 +-
doc/language_issues.fr | 23 +
doc/language_issues.it | 23 +-
doc/language_issues.nl | 23 +-
doc/language_issues.pl | 23 +-
doc/language_issues.ru | 23 +-
doc/language_issues.tr | 23 +-
html/cgi-bin/mpfire.cgi | 673 -------------
html/html/images/mpfire/box.png | Bin 4562 -> 0 bytes
langs/de/cgi-bin/de.pl | 7 -
langs/en/cgi-bin/en.pl | 7 -
langs/es/cgi-bin/es.pl | 7 -
langs/fr/cgi-bin/fr.pl | 7 -
langs/it/cgi-bin/it.pl | 7 -
langs/nl/cgi-bin/nl.pl | 7 -
langs/pl/cgi-bin/pl.pl | 7 -
langs/ru/cgi-bin/ru.pl | 7 -
langs/tr/cgi-bin/tr.pl | 7 -
lfs/mpfire | 75 --
make.sh | 1 -
src/misc-progs/Makefile | 2 +-
src/misc-progs/mpfirectrl.c | 15 -
src/paks/mpfire/install.sh | 27 -
src/paks/mpfire/uninstall.sh | 26 -
src/paks/mpfire/update.sh | 27 -
51 files changed, 179 insertions(+), 5903 deletions(-)
delete mode 100644 config/backup/includes/mpfire
delete mode 100644 config/menu/EX-mpfire.menu
delete mode 100644 config/mpfire/mpfire.pl
delete mode 100755 config/mpfire/perl/Accessor.pm
delete mode 100755 config/mpfire/perl/Accessor/Fast.pm
delete mode 100755 config/mpfire/perl/Accessor/Faster.pm
delete mode 100644 config/mpfire/perl/Audio/MPD.pm
delete mode 100644 config/mpfire/perl/Audio/MPD/Collection.pm
delete mode 100644 config/mpfire/perl/Audio/MPD/Common.pm
delete mode 100644 config/mpfire/perl/Audio/MPD/Common/Item.pm
delete mode 100644 config/mpfire/perl/Audio/MPD/Common/Item/Directory.pm
delete mode 100644 config/mpfire/perl/Audio/MPD/Common/Item/Playlist.pm
delete mode 100644 config/mpfire/perl/Audio/MPD/Common/Item/Song.pm
delete mode 100644 config/mpfire/perl/Audio/MPD/Common/Stats.pm
delete mode 100644 config/mpfire/perl/Audio/MPD/Common/Status.pm
delete mode 100644 config/mpfire/perl/Audio/MPD/Common/Time.pm
delete mode 100644 config/mpfire/perl/Audio/MPD/Playlist.pm
delete mode 100644 config/mpfire/perl/Audio/MPD/Test.pm
delete mode 100644 config/mpfire/perl/Readonly.pm
delete mode 100644 config/mpfire/webradio
delete mode 100644 config/rootfiles/packages/mpfire
delete mode 100644 html/cgi-bin/mpfire.cgi
delete mode 100644 html/html/images/mpfire/box.png
delete mode 100644 lfs/mpfire
delete mode 100644 src/misc-progs/mpfirectrl.c
delete mode 100644 src/paks/mpfire/install.sh
delete mode 100644 src/paks/mpfire/uninstall.sh
delete mode 100644 src/paks/mpfire/update.sh
diff --git a/config/backup/includes/mpfire b/config/backup/includes/mpfire
deleted file mode 100644
index a21e77a6f..000000000
--- a/config/backup/includes/mpfire
+++ /dev/null
@@ -1,2 +0,0 @@
-/var/ipfire/mpfire/settings
-/var/ipfire/mpfire/webradio
diff --git a/config/cfgroot/manualpages b/config/cfgroot/manualpages
index f70381f12..1f7e01efc 100644
--- a/config/cfgroot/manualpages
+++ b/config/cfgroot/manualpages
@@ -69,7 +69,6 @@ iptables.cgi=configuration/firewall/iptables
pakfire.cgi=configuration/ipfire/pakfire
wlanap.cgi=addons/wireless
tor.cgi=addons/tor
-mpfire.cgi=addons/mpfire
samba.cgi=addons/samba
# Logs menu
diff --git a/config/menu/EX-mpfire.menu b/config/menu/EX-mpfire.menu
deleted file mode 100644
index afba4dbde..000000000
--- a/config/menu/EX-mpfire.menu
+++ /dev/null
@@ -1,5 +0,0 @@
- $subipfire->{'40.mpfire'} = {'caption' => $Lang::tr{'mpfire'},
- 'uri' => '/cgi-bin/mpfire.cgi',
- 'title' => $Lang::tr{'mpfire'},
- 'enabled' => 1,
- };
diff --git a/config/mpfire/mpfire.pl b/config/mpfire/mpfire.pl
deleted file mode 100644
index 15abd7893..000000000
--- a/config/mpfire/mpfire.pl
+++ /dev/null
@@ -1,108 +0,0 @@
-#!/usr/bin/perl
-
-require '/var/ipfire/general-functions.pl';
-require "${General::swroot}/lang.pl";
-require "${General::swroot}/header.pl";
-
-my $filename = "";
-my $debug = 0;
-
-if ( `/etc/init.d/mpd status` =~/not running/ ){
-system("/etc/init.d/mpd start >/dev/null");
-}
-
-if ($ARGV[0] eq 'scan') {
- if ($debug){print "Creating Database\n";}
- system("mpd --create-db >/dev/null");
- system("/etc/init.d/mpd restart >/dev/null");
-}
-elsif ($ARGV[0] eq 'play') {
- &checkmute();
- &clearplaylist();
- if ($debug){print "Yes we are called and we will play $ARGV[1]\n";}
- system("mpc add \"$ARGV[1]\" >/dev/null && mpc play >/dev/null");
- }
-elsif ($ARGV[0] eq 'playadd') {
- if ($debug){print "Yes we are called and we will add $ARGV[1]\n";}
- system("mpc add \"$ARGV[1]\" >/dev/null && mpc play >/dev/null");
- }
-elsif ($ARGV[0] eq 'clearplaylist') {
- if ($debug){print "Deleting playlist\n";}
- &clearplaylist();
- }
-elsif ($ARGV[0] eq 'stop') {
- my $PID = 'cat /var/run/mpd.pid';
- if ($debug){print "Killing Process $PID\n";}
- system("mpc stop >/dev/null");
- }
-elsif ($ARGV[0] eq 'volup') {
- if ($debug){print "Increasing Volume\n";}
- system("/usr/bin/amixer set Master $ARGV[1]%+ 2>/dev/null >/dev/null");
- system("/usr/bin/amixer set PCM $ARGV[1]%+ 2>/dev/null >/dev/null");
- }
-elsif ($ARGV[0] eq 'voldown') {
- if ($debug){print "Decreasing Volume\n";}
- system("/usr/bin/amixer set Master $ARGV[1]%- 2>/dev/null >/dev/null");
- system("/usr/bin/amixer set PCM $ARGV[1]%- 2>/dev/null >/dev/null");
- }
-elsif ($ARGV[0] eq 'toggle') {
- system("mpc toggle >/dev/null");
- }
-elsif ($ARGV[0] eq 'next') {
- if ($debug){print "Next Song\n";}
- system("mpc next >/dev/null[");
- }
-elsif ( $ARGV[0] eq 'prev' ) {
- if ($debug){print "Previous Song\n";}
- system("mpc prev >/dev/null");
- }
-elsif ($ARGV[0] eq 'song') {
- my $song = `mpc \| head -2 | grep -v volume`;
- print $song;
- }
-elsif ($ARGV[0] eq 'stats') {
- my $song = `mpc stats | grep Songs`;
- print $song;
- }
-elsif ($ARGV[0] eq 'playweb') {
- &checkmute();
- &clearplaylist();
- if ($debug){print "Playing webstream $ARGV[1] \n";}
- system("mpc add http://$ARGV[1] >/dev/null && mpc play >/dev/null && sleep 1");
- }
-elsif ($ARGV[0] eq 'volume') {
- $temp = "Master - ";
- $temp .= `amixer get Master \| tail -2 \| awk '{ print \$2" "\$5 }'`;
- $temp .= "<break>PCM -";
- $temp .= `amixer get PCM \| tail -2 \| awk '{ print \$2" "\$5 }'`;
- print $temp;
-}
-
-sub clearplaylist(){
- system("mpc clear >/dev/null");
- }
-
-sub shuffle(){
- system("mpc random >/dev/null");
- }
-
-sub checkplaylist(){
- my $Datei = "/var/ipfire/mpd/playlist.m3u";
- my @Info = stat($Datei);
- if ( $Info[7] eq '' || $Info[7] eq '0' ){print "There is no playlist";exit(1);}
-}
-
-sub checkmute(){
- $temp = `amixer get Master \| tail -2`;
- my @Master = split(/ /,$temp);
- $temp = `amixer get PCM \| tail -2`;
- my @PCM = split(/ /,$temp);
- if ( $PCM[7] =~ /off/ ){
- if ($debug){print "PCM was muted - umuting.\n";}
- system("amixer set PCM toggle >/dev/null");
- }
- if ( $Master[7] =~ /off/ ){
- if ($debug){print "Master was muted - umuting.\n";}
- system("amixer set Master toggle >/dev/null");
- }
-}
diff --git a/config/mpfire/perl/Accessor.pm b/config/mpfire/perl/Accessor.pm
deleted file mode 100755
index 7dcd00ea8..000000000
--- a/config/mpfire/perl/Accessor.pm
+++ /dev/null
@@ -1,675 +0,0 @@
-package Class::Accessor;
-require 5.00502;
-use strict;
-$Class::Accessor::VERSION = '0.31';
-
-=head1 NAME
-
- Class::Accessor - Automated accessor generation
-
-=head1 SYNOPSIS
-
- package Employee;
- use base qw(Class::Accessor);
- Employee->mk_accessors(qw(name role salary));
-
- # Meanwhile, in a nearby piece of code!
- # Class::Accessor provides new().
- my $mp = Foo->new({ name => "Marty", role => "JAPH" });
-
- my $job = $mp->role; # gets $mp->{role}
- $mp->salary(400000); # sets $mp->{salary} = 400000 (I wish)
-
- # like my @info = @{$mp}{qw(name role)}
- my @info = $mp->get(qw(name role));
-
- # $mp->{salary} = 400000
- $mp->set('salary', 400000);
-
-
-=head1 DESCRIPTION
-
-This module automagically generates accessors/mutators for your class.
-
-Most of the time, writing accessors is an exercise in cutting and
-pasting. You usually wind up with a series of methods like this:
-
- sub name {
- my $self = shift;
- if(@_) {
- $self->{name} = $_[0];
- }
- return $self->{name};
- }
-
- sub salary {
- my $self = shift;
- if(@_) {
- $self->{salary} = $_[0];
- }
- return $self->{salary};
- }
-
- # etc...
-
-One for each piece of data in your object. While some will be unique,
-doing value checks and special storage tricks, most will simply be
-exercises in repetition. Not only is it Bad Style to have a bunch of
-repetitious code, but its also simply not lazy, which is the real
-tragedy.
-
-If you make your module a subclass of Class::Accessor and declare your
-accessor fields with mk_accessors() then you'll find yourself with a
-set of automatically generated accessors which can even be
-customized!
-
-The basic set up is very simple:
-
- package My::Class;
- use base qw(Class::Accessor);
- My::Class->mk_accessors( qw(foo bar car) );
-
-Done. My::Class now has simple foo(), bar() and car() accessors
-defined.
-
-=head2 What Makes This Different?
-
-What makes this module special compared to all the other method
-generating modules (L<"SEE ALSO">)? By overriding the get() and set()
-methods you can alter the behavior of the accessors class-wide. Also,
-the accessors are implemented as closures which should cost a bit less
-memory than most other solutions which generate a new method for each
-accessor.
-
-
-=head1 METHODS
-
-=head2 new
-
- my $obj = Class->new;
- my $obj = $other_obj->new;
-
- my $obj = Class->new(\%fields);
- my $obj = $other_obj->new(\%fields);
-
-Class::Accessor provides a basic constructor. It generates a
-hash-based object and can be called as either a class method or an
-object method.
-
-It takes an optional %fields hash which is used to initialize the
-object (handy if you use read-only accessors). The fields of the hash
-correspond to the names of your accessors, so...
-
- package Foo;
- use base qw(Class::Accessor);
- Foo->mk_accessors('foo');
-
- my $obj = Class->new({ foo => 42 });
- print $obj->foo; # 42
-
-however %fields can contain anything, new() will shove them all into
-your object. Don't like it? Override it.
-
-=cut
-
-sub new {
- my($proto, $fields) = @_;
- my($class) = ref $proto || $proto;
-
- $fields = {} unless defined $fields;
-
- # make a copy of $fields.
- bless {%$fields}, $class;
-}
-
-=head2 mk_accessors
-
- Class->mk_accessors(@fields);
-
-This creates accessor/mutator methods for each named field given in
-(a)fields. Foreach field in @fields it will generate two accessors.
-One called "field()" and the other called "_field_accessor()". For
-example:
-
- # Generates foo(), _foo_accessor(), bar() and _bar_accessor().
- Class->mk_accessors(qw(foo bar));
-
-See L<CAVEATS AND TRICKS/"Overriding autogenerated accessors">
-for details.
-
-=cut
-
-sub mk_accessors {
- my($self, @fields) = @_;
-
- $self->_mk_accessors('rw', @fields);
-}
-
-
-{
- no strict 'refs';
-
- sub _mk_accessors {
- my($self, $access, @fields) = @_;
- my $class = ref $self || $self;
- my $ra = $access eq 'rw' || $access eq 'ro';
- my $wa = $access eq 'rw' || $access eq 'wo';
-
- foreach my $field (@fields) {
- my $accessor_name = $self->accessor_name_for($field);
- my $mutator_name = $self->mutator_name_for($field);
- if( $accessor_name eq 'DESTROY' or $mutator_name eq 'DESTROY' ) {
- $self->_carp("Having a data accessor named DESTROY in '$class' is unwise.");
- }
- if ($accessor_name eq $mutator_name) {
- my $accessor;
- if ($ra && $wa) {
- $accessor = $self->make_accessor($field);
- } elsif ($ra) {
- $accessor = $self->make_ro_accessor($field);
- } else {
- $accessor = $self->make_wo_accessor($field);
- }
- unless (defined &{"${class}::$accessor_name"}) {
- *{"${class}::$accessor_name"} = $accessor;
- }
- if ($accessor_name eq $field) {
- # the old behaviour
- my $alias = "_${field}_accessor";
- *{"${class}::$alias"} = $accessor unless defined &{"${class}::$alias"};
- }
- } else {
- if ($ra and not defined &{"${class}::$accessor_name"}) {
- *{"${class}::$accessor_name"} = $self->make_ro_accessor($field);
- }
- if ($wa and not defined &{"${class}::$mutator_name"}) {
- *{"${class}::$mutator_name"} = $self->make_wo_accessor($field);
- }
- }
- }
- }
-
- sub follow_best_practice {
- my($self) = @_;
- my $class = ref $self || $self;
- *{"${class}::accessor_name_for"} = \&best_practice_accessor_name_for;
- *{"${class}::mutator_name_for"} = \&best_practice_mutator_name_for;
- }
-
-}
-
-=head2 mk_ro_accessors
-
- Class->mk_ro_accessors(@read_only_fields);
-
-Same as mk_accessors() except it will generate read-only accessors
-(ie. true accessors). If you attempt to set a value with these
-accessors it will throw an exception. It only uses get() and not
-set().
-
- package Foo;
- use base qw(Class::Accessor);
- Class->mk_ro_accessors(qw(foo bar));
-
- # Let's assume we have an object $foo of class Foo...
- print $foo->foo; # ok, prints whatever the value of $foo->{foo} is
- $foo->foo(42); # BOOM! Naughty you.
-
-
-=cut
-
-sub mk_ro_accessors {
- my($self, @fields) = @_;
-
- $self->_mk_accessors('ro', @fields);
-}
-
-=head2 mk_wo_accessors
-
- Class->mk_wo_accessors(@write_only_fields);
-
-Same as mk_accessors() except it will generate write-only accessors
-(ie. mutators). If you attempt to read a value with these accessors
-it will throw an exception. It only uses set() and not get().
-
-B<NOTE> I'm not entirely sure why this is useful, but I'm sure someone
-will need it. If you've found a use, let me know. Right now its here
-for orthoginality and because its easy to implement.
-
- package Foo;
- use base qw(Class::Accessor);
- Class->mk_wo_accessors(qw(foo bar));
-
- # Let's assume we have an object $foo of class Foo...
- $foo->foo(42); # OK. Sets $self->{foo} = 42
- print $foo->foo; # BOOM! Can't read from this accessor.
-
-=cut
-
-sub mk_wo_accessors {
- my($self, @fields) = @_;
-
- $self->_mk_accessors('wo', @fields);
-}
-
-=head1 DETAILS
-
-An accessor generated by Class::Accessor looks something like
-this:
-
- # Your foo may vary.
- sub foo {
- my($self) = shift;
- if(@_) { # set
- return $self->set('foo', @_);
- }
- else {
- return $self->get('foo');
- }
- }
-
-Very simple. All it does is determine if you're wanting to set a
-value or get a value and calls the appropriate method.
-Class::Accessor provides default get() and set() methods which
-your class can override. They're detailed later.
-
-=head2 follow_best_practice
-
-In Damian's Perl Best Practices book he recommends separate get and set methods
-with the prefix set_ and get_ to make it explicit what you intend to do. If you
-want to create those accessor methods instead of the default ones, call:
-
- __PACKAGE__->follow_best_practice
-
-=head2 accessor_name_for / mutator_name_for
-
-You may have your own crazy ideas for the names of the accessors, so you can
-make those happen by overriding C<accessor_name_for> and C<mutator_name_for> in
-your subclass. (I copied that idea from Class::DBI.)
-
-=cut
-
-sub best_practice_accessor_name_for {
- my ($class, $field) = @_;
- return "get_$field";
-}
-
-sub best_practice_mutator_name_for {
- my ($class, $field) = @_;
- return "set_$field";
-}
-
-sub accessor_name_for {
- my ($class, $field) = @_;
- return $field;
-}
-
-sub mutator_name_for {
- my ($class, $field) = @_;
- return $field;
-}
-
-=head2 Modifying the behavior of the accessor
-
-Rather than actually modifying the accessor itself, it is much more
-sensible to simply override the two key methods which the accessor
-calls. Namely set() and get().
-
-If you -really- want to, you can override make_accessor().
-
-=head2 set
-
- $obj->set($key, $value);
- $obj->set($key, @values);
-
-set() defines how generally one stores data in the object.
-
-override this method to change how data is stored by your accessors.
-
-=cut
-
-sub set {
- my($self, $key) = splice(@_, 0, 2);
-
- if(@_ == 1) {
- $self->{$key} = $_[0];
- }
- elsif(@_ > 1) {
- $self->{$key} = [@_];
- }
- else {
- $self->_croak("Wrong number of arguments received");
- }
-}
-
-=head2 get
-
- $value = $obj->get($key);
- @values = $obj->get(@keys);
-
-get() defines how data is retreived from your objects.
-
-override this method to change how it is retreived.
-
-=cut
-
-sub get {
- my $self = shift;
-
- if(@_ == 1) {
- return $self->{$_[0]};
- }
- elsif( @_ > 1 ) {
- return @{$self}{@_};
- }
- else {
- $self->_croak("Wrong number of arguments received");
- }
-}
-
-=head2 make_accessor
-
- $accessor = Class->make_accessor($field);
-
-Generates a subroutine reference which acts as an accessor for the given
-$field. It calls get() and set().
-
-If you wish to change the behavior of your accessors, try overriding
-get() and set() before you start mucking with make_accessor().
-
-=cut
-
-sub make_accessor {
- my ($class, $field) = @_;
-
- # Build a closure around $field.
- return sub {
- my $self = shift;
-
- if(@_) {
- return $self->set($field, @_);
- }
- else {
- return $self->get($field);
- }
- };
-}
-
-=head2 make_ro_accessor
-
- $read_only_accessor = Class->make_ro_accessor($field);
-
-Generates a subroutine refrence which acts as a read-only accessor for
-the given $field. It only calls get().
-
-Override get() to change the behavior of your accessors.
-
-=cut
-
-sub make_ro_accessor {
- my($class, $field) = @_;
-
- return sub {
- my $self = shift;
-
- if (@_) {
- my $caller = caller;
- $self->_croak("'$caller' cannot alter the value of '$field' on objects of class '$class'");
- }
- else {
- return $self->get($field);
- }
- };
-}
-
-=head2 make_wo_accessor
-
- $read_only_accessor = Class->make_wo_accessor($field);
-
-Generates a subroutine refrence which acts as a write-only accessor
-(mutator) for the given $field. It only calls set().
-
-Override set() to change the behavior of your accessors.
-
-=cut
-
-sub make_wo_accessor {
- my($class, $field) = @_;
-
- return sub {
- my $self = shift;
-
- unless (@_) {
- my $caller = caller;
- $self->_croak("'$caller' cannot access the value of '$field' on objects of class '$class'");
- }
- else {
- return $self->set($field, @_);
- }
- };
-}
-
-=head1 EXCEPTIONS
-
-If something goes wrong Class::Accessor will warn or die by calling Carp::carp
-or Carp::croak. If you don't like this you can override _carp() and _croak() in
-your subclass and do whatever else you want.
-
-=cut
-
-use Carp ();
-
-sub _carp {
- my ($self, $msg) = @_;
- Carp::carp($msg || $self);
- return;
-}
-
-sub _croak {
- my ($self, $msg) = @_;
- Carp::croak($msg || $self);
- return;
-}
-
-=head1 EFFICIENCY
-
-Class::Accessor does not employ an autoloader, thus it is much faster
-than you'd think. Its generated methods incur no special penalty over
-ones you'd write yourself.
-
- accessors:
- Rate Basic Average Fast Faster Direct
- Basic 189150/s -- -42% -51% -55% -89%
- Average 327679/s 73% -- -16% -22% -82%
- Fast 389212/s 106% 19% -- -8% -78%
- Faster 421646/s 123% 29% 8% -- -76%
- Direct 1771243/s 836% 441% 355% 320% --
-
- mutators:
- Rate Basic Average Fast Faster Direct
- Basic 173769/s -- -34% -53% -59% -90%
- Average 263046/s 51% -- -29% -38% -85%
- Fast 371158/s 114% 41% -- -13% -78%
- Faster 425821/s 145% 62% 15% -- -75%
- Direct 1699081/s 878% 546% 358% 299% --
-
-Class::Accessor::Fast is faster than methods written by an average programmer
-(where "average" is based on Schwern's example code).
-
-Class::Accessor is slower than average, but more flexible.
-
-Class::Accessor::Faster is even faster than Class::Accessor::Fast. It uses an
-array internally, not a hash. This could be a good or bad feature depending on
-your point of view.
-
-Direct hash access is, of course, much faster than all of these, but it
-provides no encapsulation.
-
-Of course, its not as simple as saying "Class::Accessor is slower than
-average". These are benchmarks for a simple accessor. If your accessors do
-any sort of complicated work (such as talking to a database or writing to a
-file) the time spent doing that work will quickly swamp the time spend just
-calling the accessor. In that case, Class::Accessor and the ones you write
-will be roughly the same speed.
-
-
-=head1 EXAMPLES
-
-Here's an example of generating an accessor for every public field of
-your class.
-
- package Altoids;
-
- use base qw(Class::Accessor Class::Fields);
- use fields qw(curiously strong mints);
- Altoids->mk_accessors( Altoids->show_fields('Public') );
-
- sub new {
- my $proto = shift;
- my $class = ref $proto || $proto;
- return fields::new($class);
- }
-
- my Altoids $tin = Altoids->new;
-
- $tin->curiously('Curiouser and curiouser');
- print $tin->{curiously}; # prints 'Curiouser and curiouser'
-
-
- # Subclassing works, too.
- package Mint::Snuff;
- use base qw(Altoids);
-
- my Mint::Snuff $pouch = Mint::Snuff->new;
- $pouch->strong('Blow your head off!');
- print $pouch->{strong}; # prints 'Blow your head off!'
-
-
-Here's a simple example of altering the behavior of your accessors.
-
- package Foo;
- use base qw(Class::Accessor);
- Foo->mk_accessor(qw(this that up down));
-
- sub get {
- my $self = shift;
-
- # Note every time someone gets some data.
- print STDERR "Getting @_\n";
-
- $self->SUPER::get(@_);
- }
-
- sub set {
- my ($self, $key) = splice(@_, 0, 2);
-
- # Note every time someone sets some data.
- print STDERR "Setting $key to @_\n";
-
- $self->SUPER::set($key, @_);
- }
-
-
-=head1 CAVEATS AND TRICKS
-
-Class::Accessor has to do some internal wackiness to get its
-job done quickly and efficiently. Because of this, there's a few
-tricks and traps one must know about.
-
-Hey, nothing's perfect.
-
-=head2 Don't make a field called DESTROY
-
-This is bad. Since DESTROY is a magical method it would be bad for us
-to define an accessor using that name. Class::Accessor will
-carp if you try to use it with a field named "DESTROY".
-
-=head2 Overriding autogenerated accessors
-
-You may want to override the autogenerated accessor with your own, yet
-have your custom accessor call the default one. For instance, maybe
-you want to have an accessor which checks its input. Normally, one
-would expect this to work:
-
- package Foo;
- use base qw(Class::Accessor);
- Foo->mk_accessors(qw(email this that whatever));
-
- # Only accept addresses which look valid.
- sub email {
- my($self) = shift;
- my($email) = @_;
-
- if( @_ ) { # Setting
- require Email::Valid;
- unless( Email::Valid->address($email) ) {
- carp("$email doesn't look like a valid address.");
- return;
- }
- }
-
- return $self->SUPER::email(@_);
- }
-
-There's a subtle problem in the last example, and its in this line:
-
- return $self->SUPER::email(@_);
-
-If we look at how Foo was defined, it called mk_accessors() which
-stuck email() right into Foo's namespace. There *is* no
-SUPER::email() to delegate to! Two ways around this... first is to
-make a "pure" base class for Foo. This pure class will generate the
-accessors and provide the necessary super class for Foo to use:
-
- package Pure::Organic::Foo;
- use base qw(Class::Accessor);
- Pure::Organic::Foo->mk_accessors(qw(email this that whatever));
-
- package Foo;
- use base qw(Pure::Organic::Foo);
-
-And now Foo::email() can override the generated
-Pure::Organic::Foo::email() and use it as SUPER::email().
-
-This is probably the most obvious solution to everyone but me.
-Instead, what first made sense to me was for mk_accessors() to define
-an alias of email(), _email_accessor(). Using this solution,
-Foo::email() would be written with:
-
- return $self->_email_accessor(@_);
-
-instead of the expected SUPER::email().
-
-
-=head1 AUTHORS
-
-Copyright 2007 Marty Pauley <marty+perl(a)kasei.com>
-
-This program is free software; you can redistribute it and/or modify it under
-the same terms as Perl itself. That means either (a) the GNU General Public
-License or (b) the Artistic License.
-
-=head2 ORIGINAL AUTHOR
-
-Michael G Schwern <schwern(a)pobox.com>
-
-=head2 THANKS
-
-Liz and RUZ for performance tweaks.
-
-Tels, for his big feature request/bug report.
-
-
-=head1 SEE ALSO
-
-L<Class::Accessor::Fast>
-
-These are some modules which do similar things in different ways
-L<Class::Struct>, L<Class::Methodmaker>, L<Class::Generate>,
-L<Class::Class>, L<Class::Contract>
-
-L<Class::DBI> for an example of this module in use.
-
-=cut
-
-1;
diff --git a/config/mpfire/perl/Accessor/Fast.pm b/config/mpfire/perl/Accessor/Fast.pm
deleted file mode 100755
index 6522923f5..000000000
--- a/config/mpfire/perl/Accessor/Fast.pm
+++ /dev/null
@@ -1,94 +0,0 @@
-package Class::Accessor::Fast;
-use base 'Class::Accessor';
-use strict;
-$Class::Accessor::Fast::VERSION = '0.31';
-
-=head1 NAME
-
-Class::Accessor::Fast - Faster, but less expandable, accessors
-
-=head1 SYNOPSIS
-
- package Foo;
- use base qw(Class::Accessor::Fast);
-
- # The rest is the same as Class::Accessor but without set() and get().
-
-=head1 DESCRIPTION
-
-This is a faster but less expandable version of Class::Accessor.
-Class::Accessor's generated accessors require two method calls to accompish
-their task (one for the accessor, another for get() or set()).
-Class::Accessor::Fast eliminates calling set()/get() and does the access itself,
-resulting in a somewhat faster accessor.
-
-The downside is that you can't easily alter the behavior of your
-accessors, nor can your subclasses. Of course, should you need this
-later, you can always swap out Class::Accessor::Fast for
-Class::Accessor.
-
-Read the documentation for Class::Accessor for more info.
-
-=cut
-
-sub make_accessor {
- my($class, $field) = @_;
-
- return sub {
- return $_[0]->{$field} if @_ == 1;
- return $_[0]->{$field} = $_[1] if @_ == 2;
- return (shift)->{$field} = \@_;
- };
-}
-
-
-sub make_ro_accessor {
- my($class, $field) = @_;
-
- return sub {
- return $_[0]->{$field} if @_ == 1;
- my $caller = caller;
- $_[0]->_croak("'$caller' cannot alter the value of '$field' on objects of class '$class'");
- };
-}
-
-
-sub make_wo_accessor {
- my($class, $field) = @_;
-
- return sub {
- if (@_ == 1) {
- my $caller = caller;
- $_[0]->_croak("'$caller' cannot access the value of '$field' on objects of class '$class'");
- }
- else {
- return $_[0]->{$field} = $_[1] if @_ == 2;
- return (shift)->{$field} = \@_;
- }
- };
-}
-
-
-=head1 EFFICIENCY
-
-L<Class::Accessor/EFFICIENCY> for an efficiency comparison.
-
-=head1 AUTHORS
-
-Copyright 2007 Marty Pauley <marty+perl(a)kasei.com>
-
-This program is free software; you can redistribute it and/or modify it under
-the same terms as Perl itself. That means either (a) the GNU General Public
-License or (b) the Artistic License.
-
-=head2 ORIGINAL AUTHOR
-
-Michael G Schwern <schwern(a)pobox.com>
-
-=head1 SEE ALSO
-
-L<Class::Accessor>
-
-=cut
-
-1;
diff --git a/config/mpfire/perl/Accessor/Faster.pm b/config/mpfire/perl/Accessor/Faster.pm
deleted file mode 100755
index 8f81ff9d0..000000000
--- a/config/mpfire/perl/Accessor/Faster.pm
+++ /dev/null
@@ -1,105 +0,0 @@
-package Class::Accessor::Faster;
-use base 'Class::Accessor';
-use strict;
-$Class::Accessor::Faster::VERSION = '0.31';
-
-=head1 NAME
-
-Class::Accessor::Faster - Even faster, but less expandable, accessors
-
-=head1 SYNOPSIS
-
- package Foo;
- use base qw(Class::Accessor::Faster);
-
-=head1 DESCRIPTION
-
-This is a faster but less expandable version of Class::Accessor::Fast.
-
-Class::Accessor's generated accessors require two method calls to accompish
-their task (one for the accessor, another for get() or set()).
-
-Class::Accessor::Fast eliminates calling set()/get() and does the access itself,
-resulting in a somewhat faster accessor.
-
-Class::Accessor::Faster uses an array reference underneath to be faster.
-
-Read the documentation for Class::Accessor for more info.
-
-=cut
-
-my %slot;
-sub _slot {
- my($class, $field) = @_;
- my $n = $slot{$class}->{$field};
- return $n if defined $n;
- $n = keys %{$slot{$class}};
- $slot{$class}->{$field} = $n;
- return $n;
-}
-
-sub new {
- my($proto, $fields) = @_;
- my($class) = ref $proto || $proto;
- my $self = bless [], $class;
-
- $fields = {} unless defined $fields;
- for my $k (keys %$fields) {
- my $n = $class->_slot($k);
- $self->[$n] = $fields->{$k};
- }
- return $self;
-}
-
-sub make_accessor {
- my($class, $field) = @_;
- my $n = $class->_slot($field);
- return sub {
- return $_[0]->[$n] if @_ == 1;
- return $_[0]->[$n] = $_[1] if @_ == 2;
- return (shift)->[$n] = \@_;
- };
-}
-
-
-sub make_ro_accessor {
- my($class, $field) = @_;
- my $n = $class->_slot($field);
- return sub {
- return $_[0]->[$n] if @_ == 1;
- my $caller = caller;
- $_[0]->_croak("'$caller' cannot alter the value of '$field' on objects of class '$class'");
- };
-}
-
-
-sub make_wo_accessor {
- my($class, $field) = @_;
- my $n = $class->_slot($field);
- return sub {
- if (@_ == 1) {
- my $caller = caller;
- $_[0]->_croak("'$caller' cannot access the value of '$field' on objects of class '$class'");
- } else {
- return $_[0]->[$n] = $_[1] if @_ == 2;
- return (shift)->[$n] = \@_;
- }
- };
-}
-
-
-=head1 AUTHORS
-
-Copyright 2007 Marty Pauley <marty+perl(a)kasei.com>
-
-This program is free software; you can redistribute it and/or modify it under
-the same terms as Perl itself. That means either (a) the GNU General Public
-License or (b) the Artistic License.
-
-=head1 SEE ALSO
-
-L<Class::Accessor>
-
-=cut
-
-1;
diff --git a/config/mpfire/perl/Audio/MPD.pm b/config/mpfire/perl/Audio/MPD.pm
deleted file mode 100644
index 0bfbc485e..000000000
--- a/config/mpfire/perl/Audio/MPD.pm
+++ /dev/null
@@ -1,897 +0,0 @@
-#
-# This file is part of Audio::MPD
-# Copyright (c) 2007 Jerome Quelin, all rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the same terms as Perl itself.
-#
-#
-
-package Audio::MPD;
-
-use warnings;
-use strict;
-
-use Audio::MPD::Collection;
-use Audio::MPD::Common::Item;
-use Audio::MPD::Common::Stats;
-use Audio::MPD::Common::Status;
-use Audio::MPD::Playlist;
-use Encode;
-use IO::Socket;
-use Readonly;
-
-
-use base qw[ Class::Accessor::Fast Exporter ];
-__PACKAGE__->mk_accessors(
- qw[ _conntype _host _password _port _socket
- collection playlist version ] );
-
-
-our $VERSION = '0.19.1';
-
-Readonly our $REUSE => 0;
-Readonly our $ONCE => 1;
-
-our @EXPORT = qw[ $REUSE $ONCE ];
-
-
-#--
-# Constructor
-
-#
-# my $mpd = Audio::MPD->new( [%opts] )
-#
-# This is the constructor for Audio::MPD. One can specify the following
-# options:
-# - hostname => $hostname : defaults to environment var MPD_HOST, then to 'localhost'
-# - port => $port : defaults to env var MPD_PORT, then to 6600
-# - password => $password : defaults to env var MPD_PASSWORD, then to ''
-# - conntype => $type : how the connection to mpd server is handled. it can be
-# either $REUSE: reuse the same connection
-# or $ONCE: open a new connection per command (default)
-#
-sub new {
- my ($class, %opts) = @_;
-
- # use mpd defaults.
- my ($default_password, $default_host) = split( '@', $ENV{MPD_HOST} )
- if exists $ENV{MPD_HOST} && $ENV{MPD_HOST} =~ /@/;
- my $host = $opts{host} || $default_host || $ENV{MPD_HOST} || 'localhost';
- my $port = $opts{port} || $ENV{MPD_PORT} || '6600';
- my $password = $opts{password} || $ENV{MPD_PASSWORD} || $default_password || '';
-
- # create & bless the object.
- my $self = {
- _host => $host,
- _port => $port,
- _password => $password,
- _conntype => exists $opts{conntype} ? $opts{conntype} : $REUSE,
- };
- bless $self, $class;
-
- # create the connection if conntype is set to $REUSE
- $self->_connect_to_mpd_server if $self->_conntype == $REUSE;
-
-
- # create the helper objects and store them.
- $self->collection( Audio::MPD::Collection->new($self) );
- $self->playlist ( Audio::MPD::Playlist->new($self) );
-
- # try to issue a ping to test connection - this can die.
- $self->ping;
-
- return $self;
-}
-
-
-#--
-# Private methods
-
-
-#
-# $mpd->_connect_to_mpd_server;
-#
-# This method connects to the mpd server. It can die on several conditions:
-# - if the server cannot be reached,
-# - if it's not an mpd server,
-# - or if the password is incorrect,
-#
-sub _connect_to_mpd_server {
- my ($self) = @_;
-
- # try to connect to mpd.
- my $socket = IO::Socket::INET->new(
- PeerAddr => $self->_host,
- PeerPort => $self->_port,
- )
- or die "Could not create socket: $!\n";
-
- # parse version information.
- my $line = $socket->getline;
- chomp $line;
- die "Not a mpd server - welcome string was: [$line]\n"
- if $line !~ /^OK MPD (.+)$/;
- $self->version($1);
-
- # send password.
- if ( $self->_password ) {
- $socket->print( 'password ' . encode('utf-8', $self->_password) . "\n" );
- $line = $socket->getline;
- die $line if $line =~ s/^ACK //;
- }
-
- # save socket
- $self->_socket($socket);
-}
-
-
-#
-# my @result = $mpd->_send_command( $command );
-#
-# This method is central to the module. It is responsible for interacting with
-# mpd by sending the $command and reading output - that will be returned as an
-# array of chomped lines (status line will not be returned).
-#
-# This method can die on several conditions:
-# - if the server cannot be reached,
-# - if it's not an mpd server,
-# - if the password is incorrect,
-# - or if the command is an invalid mpd command.
-# In the latter case, the mpd error message will be returned.
-#
-sub _send_command {
- my ($self, $command) = @_;
-
- $self->_connect_to_mpd_server if $self->_conntype == $ONCE;
- my $socket = $self->_socket;
-
- # ok, now we're connected - let's issue the command.
- $socket->print( encode('utf-8', $command) );
- my @output;
- while (defined ( my $line = $socket->getline ) ) {
- chomp $line;
- die $line if $line =~ s/^ACK //; # oops - error.
- last if $line =~ /^OK/; # end of output.
- push @output, decode('utf-8', $line);
- }
-
- # close the socket.
- $socket->close if $self->_conntype == $ONCE;
-
- return @output;
-}
-
-
-#
-# my @items = $mpd->_cooked_command_as_items( $command );
-#
-# Lots of Audio::MPD methods are using _send_command() and then parse the
-# output as a collection of AMC::Item. This method is meant to factorize
-# this code, and will parse the raw output of _send_command() in a cooked
-# list of items.
-#
-sub _cooked_command_as_items {
- my ($self, $command) = @_;
-
- my @lines = $self->_send_command($command);
- my (@items, %param);
-
- # parse lines in reverse order since "file:" or "directory:" lines
- # come first. therefore, let's first store every other parameter,
- # and the last line will trigger the object creation.
- # of course, since we want to preserve the playlist order, this means
- # that we're going to unshift the objects instead of push.
- foreach my $line (reverse @lines) {
- my ($k,$v) = split /:\s/, $line, 2;
- $param{$k} = $v;
- next unless $k eq 'file' || $k eq 'directory' || $k eq 'playlist'; # last param of item
- unshift @items, Audio::MPD::Common::Item->new(%param);
- %param = ();
- }
-
- return @items;
-}
-
-
-sub _cooked_command_as_filename {
- my ($self, $command) = @_;
-
- my @lines = $self->_send_command($command);
- my (@items, %param);
-
- # parse lines in reverse order since "file:" or "directory:" lines
- # come first. therefore, let's first store every other parameter,
- # and the last line will trigger the object creation.
- # of course, since we want to preserve the playlist order, this means
- # that we're going to unshift the objects instead of push.
- foreach my $line (@lines) {
- my ($k,$v) = split /:\s/, $line, 2;
- if ( $k eq 'file'){$param{$k} = $v;}
- unshift @items, $param{'file'};
- %param = ();
- }
-
- return @items;
-}
-
-#
-# my %hash = $mpd->_cooked_command_as_kv( $command );
-#
-# Lots of Audio::MPD methods are using _send_command() and then parse the
-# output to get a list of key / value (with the colon ":" acting as separator).
-# This method is meant to factorize this code, and will parse the raw output
-# of _send_command() in a cooked hash.
-#
-sub _cooked_command_as_kv {
- my ($self, $command) = @_;
- my %hash =
- map { split(/:\s/, $_, 2) }
- $self->_send_command($command);
- return %hash;
-}
-
-#
-# my @list = $mpd->_cooked_command_strip_first_field( $command );
-#
-# Lots of Audio::MPD methods are using _send_command() and then parse the
-# output to remove the first field (with the colon ":" acting as separator).
-# This method is meant to factorize this code, and will parse the raw output
-# of _send_command() in a cooked list of strings.
-#
-sub _cooked_command_strip_first_field {
- my ($self, $command) = @_;
-
- my @list =
- map { ( split(/:\s+/, $_, 2) )[1] }
- $self->_send_command($command);
- return @list;
-}
-
-
-#--
-# Public methods
-
-# -- MPD interaction: general commands
-
-#
-# $mpd->ping;
-#
-# Sends a ping command to the mpd server.
-#
-sub ping {
- my ($self) = @_;
- $self->_send_command( "ping\n" );
-}
-
-
-#
-# my $version = $mpd->version;
-#
-# Return version of MPD server's connected.
-#
-# sub version {} # implemented as an accessor.
-#
-
-
-#
-# $mpd->kill;
-#
-# Send a message to the MPD server telling it to shut down.
-#
-sub kill {
- my ($self) = @_;
- $self->_send_command("kill\n");
-}
-
-
-#
-# $mpd->password( [$password] )
-#
-# Change password used to communicate with MPD server to $password.
-# Empty string is assumed if $password is not supplied.
-#
-sub password {
- my ($self, $passwd) = @_;
- $passwd ||= '';
- $self->_password($passwd);
- $self->ping; # ping sends a command, and thus the password is sent
-}
-
-
-#
-# $mpd->updatedb( [$path] );
-#
-# Force mpd to rescan its collection. If $path (relative to MPD's music
-# directory) is supplied, MPD will only scan it - otherwise, MPD will rescan
-# its whole collection.
-#
-sub updatedb {
- my ($self, $path) = @_;
- $path ||= '';
- $self->_send_command("update $path\n");
-}
-
-
-#
-# my @handlers = $mpd->urlhandlers;
-#
-# Return an array of supported URL schemes.
-#
-sub urlhandlers {
- my ($self) = @_;
- return $self->_cooked_command_strip_first_field("urlhandlers\n");
-}
-
-
-# -- MPD interaction: handling volume & output
-
-#
-# $mpd->volume( [+][-]$volume );
-#
-# Sets the audio output volume percentage to absolute $volume.
-# If $volume is prefixed by '+' or '-' then the volume is changed relatively
-# by that value.
-#
-sub volume {
- my ($self, $volume) = @_;
-
- if ($volume =~ /^(-|\+)(\d+)/ ) {
- my $current = $self->status->volume;
- $volume = $1 eq '+' ? $current + $2 : $current - $2;
- }
- $self->_send_command("setvol $volume\n");
-}
-
-
-#
-# $mpd->output_enable( $output );
-#
-# Enable the specified audio output. $output is the ID of the audio output.
-#
-sub output_enable {
- my ($self, $output) = @_;
- $self->_send_command("enableoutput $output\n");
-}
-
-
-#
-# $mpd->output_disable( $output );
-#
-# Disable the specified audio output. $output is the ID of the audio output.
-#
-sub output_disable {
- my ($self, $output) = @_;
- $self->_send_command("disableoutput $output\n");
-}
-
-
-
-# -- MPD interaction: retrieving info from current state
-
-#
-# $mpd->stats;
-#
-# Return an AMC::Stats object with the current statistics of MPD.
-#
-sub stats {
- my ($self) = @_;
- my %kv = $self->_cooked_command_as_kv( "stats\n" );
- return Audio::MPD::Common::Stats->new(\%kv);
-}
-
-
-#
-# my $status = $mpd->status;
-#
-# Return an AMC::Status object with various information on current
-# MPD server settings. Check the embedded pod for more information on the
-# available accessors.
-#
-sub status {
- my ($self) = @_;
- my %kv = $self->_cooked_command_as_kv( "status\n" );
- my $status = Audio::MPD::Common::Status->new( \%kv );
- return $status;
-}
-
-
-#
-# my $song = $mpd->current;
-#
-# Return an AMC::Item::Song representing the song currently playing.
-#
-sub current {
- my ($self) = @_;
- my ($item) = $self->_cooked_command_as_items("currentsong\n");
- return $item;
-}
-
-
-#
-# my $song = $mpd->song( [$song] )
-#
-# Return an AMC::Item::Song representing the song number $song.
-# If $song is not supplied, returns the current song.
-#
-sub song {
- my ($self, $song) = @_;
- return $self->current unless defined $song;
- my ($item) = $self->_cooked_command_as_items("playlistinfo $song\n");
- return $item;
-}
-
-
-#
-# my $song = $mpd->songid( [$songid] )
-#
-# Return an AMC::Item::Song representing the song with id $songid.
-# If $songid is not supplied, returns the current song.
-#
-sub songid {
- my ($self, $songid) = @_;
- return $self->current unless defined $songid;
- my ($item) = $self->_cooked_command_as_items("playlistid $songid\n");
- return $item;
-}
-
-
-# -- MPD interaction: altering settings
-
-#
-# $mpd->repeat( [$repeat] );
-#
-# Set the repeat mode to $repeat (1 or 0). If $repeat is not specified then
-# the repeat mode is toggled.
-#
-sub repeat {
- my ($self, $mode) = @_;
-
- $mode = not $self->status->repeat
- unless defined $mode; # toggle if no param
- $mode = $mode ? 1 : 0; # force integer
- $self->_send_command("repeat $mode\n");
-}
-
-
-#
-# $mpd->random( [$random] );
-#
-# Set the random mode to $random (1 or 0). If $random is not specified then
-# the random mode is toggled.
-#
-sub random {
- my ($self, $mode) = @_;
-
- $mode = not $self->status->random
- unless defined $mode; # toggle if no param
- $mode = $mode ? 1 : 0; # force integer
- $self->_send_command("random $mode\n");
-}
-
-
-#
-# $mpd->fade( [$seconds] );
-#
-# Enable crossfading and set the duration of crossfade between songs. If
-# $seconds is not specified or $seconds is 0, then crossfading is disabled.
-#
-sub fade {
- my ($self, $value) = @_;
- $value ||= 0;
- $self->_send_command("crossfade $value\n");
-}
-
-
-# -- MPD interaction: controlling playback
-
-#
-# $mpd->play( [$song] );
-#
-# Begin playing playlist at song number $song. If no argument supplied,
-# resume playing.
-#
-sub play {
- my ($self, $number) = @_;
- $number = '' unless defined $number;
- $self->_send_command("play $number\n");
-}
-
-#
-# $mpd->playid( [$songid] );
-#
-# Begin playing playlist at song ID $songid. If no argument supplied,
-# resume playing.
-#
-sub playid {
- my ($self, $number) = @_;
- $number ||= '';
- $self->_send_command("playid $number\n");
-}
-
-
-#
-# $mpd->pause( [$sate] );
-#
-# Pause playback. If $state is 0 then the current track is unpaused, if
-# $state is 1 then the current track is paused.
-#
-# Note that if $state is not given, pause state will be toggled.
-#
-sub pause {
- my ($self, $state) = @_;
- $state ||= ''; # default is to toggle
- $self->_send_command("pause $state\n");
-}
-
-
-#
-# $mpd->stop;
-#
-# Stop playback.
-#
-sub stop {
- my ($self) = @_;
- $self->_send_command("stop\n");
-}
-
-
-#
-# $mpd->next;
-#
-# Play next song in playlist.
-#
-sub next {
- my ($self) = @_;
- $self->_send_command("next\n");
-}
-
-#
-# $mpd->prev;
-#
-# Play previous song in playlist.
-#
-sub prev {
- my($self) = shift;
- $self->_send_command("previous\n");
-}
-
-
-#
-# $mpd->seek( $time, [$song] );
-#
-# Seek to $time seconds in song number $song. If $song number is not specified
-# then the perl module will try and seek to $time in the current song.
-#
-sub seek {
- my ($self, $time, $song) = @_;
- $time ||= 0; $time = int $time;
- $song = $self->status->song if not defined $song; # seek in current song
- $self->_send_command( "seek $song $time\n" );
-}
-
-
-#
-# $mpd->seekid( $time, [$songid] );
-#
-# Seek to $time seconds in song ID $songid. If $songid number is not specified
-# then the perl module will try and seek to $time in the current song.
-#
-sub seekid {
- my ($self, $time, $song) = @_;
- $time ||= 0; $time = int $time;
- $song = $self->status->songid if not defined $song; # seek in current song
- $self->_send_command( "seekid $song $time\n" );
-}
-
-
-1;
-
-
-
-__END__
-
-=pod
-
-=head1 NAME
-
-Audio::MPD - class to talk to MPD (Music Player Daemon) servers
-
-
-=head1 SYNOPSIS
-
- use Audio::MPD;
-
- my $mpd = Audio::MPD->new();
- $mpd->play();
- sleep 10;
- $mpd->next();
-
-
-=head1 DESCRIPTION
-
-Audio::MPD gives a clear object-oriented interface for talking to and
-controlling MPD (Music Player Daemon) servers. A connection to the MPD
-server is established as soon as a new Audio::MPD object is created.
-
-Note that the module will by default connect to mpd before sending any
-command, and will disconnect after the command has been issued. This scheme
-is far from optimal, but allows us not to care about timeout disconnections.
-
-B</!\> Note that Audio::MPD is using high-level, blocking sockets. This
-means that if the mpd server is slow, or hangs for whatever reason, or
-even crash abruptly, the program will be hung forever in this sub. The
-POE::Component::Client::MPD module is way safer - you're advised to use
-it instead of Audio::MPD. Or you can try to set C<conntype> to C<$REUSE>
-(see Audio::MPD constructor for more details), but you would be then on
-your own to deal with disconnections.
-
-
-=head1 METHODS
-
-=head2 Constructor
-
-=over 4
-
-=item new( [%opts] )
-
-This is the constructor for Audio::MPD. One can specify the following
-options:
-
-=over 4
-
-=item hostname => C<$hostname>
-
-defaults to environment var MPD_HOST, then to 'localhost'. Note that
-MPD_HOST can be of the form password(a)host.
-
-=item port => C<$port>
-
-defaults to environment var MPD_PORT, then to 6600.
-
-=item password => $password
-
-defaults to environment var MPD_PASSWORD, then to ''.
-
-=item conntype => $type
-
-change how the connection to mpd server is handled. It can be either
-C<$REUSE> to reuse the same connection or C<$ONCE> to open a new
-connection per command (default)
-
-=back
-
-
-=back
-
-
-=head2 Controlling the server
-
-=over 4
-
-=item $mpd->ping()
-
-Sends a ping command to the mpd server.
-
-
-=item $mpd->version()
-
-Return the version number for the server we are connected to.
-
-
-=item $mpd->kill()
-
-Send a message to the MPD server telling it to shut down.
-
-
-=item $mpd->password( [$password] )
-
-Change password used to communicate with MPD server to $password.
-Empty string is assumed if $password is not supplied.
-
-
-=item $mpd->updatedb( [$path] )
-
-Force mpd to recan its collection. If $path (relative to MPD's music directory)
-is supplied, MPD will only scan it - otherwise, MPD will rescan its whole
-collection.
-
-
-=item $mpd->urlhandlers()
-
-Return an array of supported URL schemes.
-
-
-=back
-
-
-=head2 Handling volume & output
-
-=over 4
-
-=item $mpd->volume( [+][-]$volume )
-
-Sets the audio output volume percentage to absolute $volume.
-If $volume is prefixed by '+' or '-' then the volume is changed relatively
-by that value.
-
-
-=item $mpd->output_enable( $output )
-
-Enable the specified audio output. $output is the ID of the audio output.
-
-
-=item $mpd->output_disable( $output )
-
-Disable the specified audio output. $output is the ID of the audio output.
-
-=back
-
-
-=head2 Retrieving info from current state
-
-=over 4
-
-=item $mpd->stats()
-
-Return an C<Audio::MPD::Common::Stats> object with the current statistics
-of MPD. See the associated pod for more information.
-
-
-=item $mpd->status()
-
-Return an C<Audio::MPD::Common::Status> object with various information on
-current MPD server settings. Check the embedded pod for more information on
-the available accessors.
-
-
-=item $mpd->current()
-
-Return an C<Audio::MPD::Common::Item::Song> representing the song currently
-playing.
-
-
-=item $mpd->song( [$song] )
-
-Return an C<Audio::MPD::Common::Item::Song> representing the song number
-C<$song>. If C<$song> is not supplied, returns the current song.
-
-
-=item $mpd->songid( [$songid] )
-
-Return an C<Audio::MPD::Common::Item::Song> representing the song with id
-C<$songid>. If C<$songid> is not supplied, returns the current song.
-
-=back
-
-
-=head2 Altering MPD settings
-
-=over 4
-
-=item $mpd->repeat( [$repeat] )
-
-Set the repeat mode to $repeat (1 or 0). If $repeat is not specified then
-the repeat mode is toggled.
-
-
-=item $mpd->random( [$random] )
-
-Set the random mode to $random (1 or 0). If $random is not specified then
-the random mode is toggled.
-
-
-=item $mpd->fade( [$seconds] )
-
-Enable crossfading and set the duration of crossfade between songs.
-If $seconds is not specified or $seconds is 0, then crossfading is disabled.
-
-=back
-
-
-=head2 Controlling playback
-
-=over 4
-
-=item $mpd->play( [$song] )
-
-Begin playing playlist at song number $song. If no argument supplied,
-resume playing.
-
-
-=item $mpd->playid( [$songid] )
-
-Begin playing playlist at song ID $songid. If no argument supplied,
-resume playing.
-
-
-=item $mpd->pause( [$state] )
-
-Pause playback. If C<$state> is 0 then the current track is unpaused,
-if $state is 1 then the current track is paused.
-
-Note that if C<$state> is not given, pause state will be toggled.
-
-
-=item $mpd->stop()
-
-Stop playback.
-
-
-=item $mpd->next()
-
-Play next song in playlist.
-
-
-=item $mpd->prev()
-
-Play previous song in playlist.
-
-
-=item $mpd->seek( $time, [$song])
-
-Seek to $time seconds in song number $song. If $song number is not specified
-then the perl module will try and seek to $time in the current song.
-
-
-=item $mpd->seekid( $time, $songid )
-
-Seek to $time seconds in song ID $songid. If $song number is not specified
-then the perl module will try and seek to $time in the current song.
-
-=back
-
-
-=head2 Searching the collection
-
-To search the collection, use the C<collection()> accessor, returning the
-associated C<Audio::MPD::Collection> object. You will then be able to call:
-
- $mpd->collection->random_song();
-
-See C<Audio::MPD::Collection> documentation for more details on available
-methods.
-
-
-=head2 Handling the playlist
-
-To update the playlist, use the C<playlist()> accessor, returning the
-associated C<Audio::MPD::Playlist> object. You will then be able to call:
-
- $mpd->playlist->clear;
-
-See C<Audio::MPD::Playlist> documentation for more details on available
-methods.
-
-
-=head1 SEE ALSO
-
-You can find more information on the mpd project on its homepage at
-L<http://www.musicpd.org>, or its wiki L<http://mpd.wikia.com>.
-
-Regarding this Perl module, you can report bugs on CPAN via
-L<http://rt.cpan.org/Public/Bug/Report.html?Queue=Audio-MPD>.
-
-Audio::MPD development takes place on <audio-mpd(a)googlegroups.com>: feel free
-to join us. (use L<http://groups.google.com/group/audio-mpd> to sign in). Our
-subversion repository is located at L<https://svn.musicpd.org>.
-
-
-=head1 AUTHOR
-
-Jerome Quelin, C<< <jquelin at cpan.org> >>
-
-Original code by Tue Abrahamsen C<< <tue.abrahamsen at gmail.com> >>,
-documented by Nicholas J. Humfrey C<< <njh at aelius.com> >>.
-
-
-=head1 COPYRIGHT & LICENSE
-
-Copyright (c) 2005 Tue Abrahamsen, all rights reserved.
-Copyright (c) 2006 Nicolas J. Humfrey, all rights reserved.
-Copyright (c) 2007 Jerome Quelin, all rights reserved.
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/config/mpfire/perl/Audio/MPD/Collection.pm b/config/mpfire/perl/Audio/MPD/Collection.pm
deleted file mode 100644
index 727512808..000000000
--- a/config/mpfire/perl/Audio/MPD/Collection.pm
+++ /dev/null
@@ -1,594 +0,0 @@
-#
-# This file is part of Audio::MPD
-# Copyright (c) 2007 Jerome Quelin, all rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the same terms as Perl itself.
-#
-#
-
-package Audio::MPD::Collection;
-
-use strict;
-use warnings;
-use Scalar::Util qw[ weaken ];
-
-use base qw[ Class::Accessor::Fast ];
-__PACKAGE__->mk_accessors( qw[ _mpd ] );
-
-
-#our ($VERSION) = '$Rev: 5284 $' =~ /(\d+)/;
-
-
-#--
-# Constructor
-
-#
-# my $collection = Audio::MPD::Collection->new( $mpd );
-#
-# This will create the object, holding a back-reference to the Audio::MPD
-# object itself (for communication purposes). But in order to play safe and
-# to free the memory in time, this reference is weakened.
-#
-# Note that you're not supposed to call this constructor yourself, an
-# Audio::MPD::Collection is automatically created for you during the creation
-# of an Audio::MPD object.
-#
-sub new {
- my ($pkg, $mpd) = @_;
-
- my $self = { _mpd => $mpd };
- weaken( $self->{_mpd} );
- bless $self, $pkg;
- return $self;
-}
-
-
-#--
-# Public methods
-
-# -- Collection: retrieving songs & directories
-
-#
-# my @items = $collection->all_items( [$path] );
-#
-# Return *all* AMC::Items (both songs & directories) currently known
-# by mpd.
-#
-# If $path is supplied (relative to mpd root), restrict the retrieval to
-# songs and dirs in this directory.
-#
-sub all_items {
- my ($self, $path) = @_;
- $path ||= '';
- $path =~ s/"/\\"/g;
-
- return $self->_mpd->_cooked_command_as_items( qq[listallinfo "$path"\n] );
-}
-
-
-#
-# my @items = $collection->all_items_simple( [$path] );
-#
-# Return *all* AMC::Items (both songs & directories) currently known
-# by mpd.
-#
-# If $path is supplied (relative to mpd root), restrict the retrieval to
-# songs and dirs in this directory.
-#
-# /!\ Warning: the AMC::Item::Song objects will only have their tag
-# file filled. Any other tag will be empty, so don't use this sub for any
-# other thing than a quick scan!
-#
-sub all_items_simple {
- my ($self, $path) = @_;
- $path ||= '';
- $path =~ s/"/\\"/g;
-
- return $self->_mpd->_cooked_command_as_items( qq[listall "$path"\n] );
-}
-
-
-#
-# my @items = $collection->items_in_dir( [$path] );
-#
-# Return the items in the given $path. If no $path supplied, do it on mpd's
-# root directory.
-#
-# Note that this sub does not work recusrively on all directories.
-#
-sub items_in_dir {
- my ($self, $path) = @_;
- $path ||= '';
- $path =~ s/"/\\"/g;
-
- return $self->_mpd->_cooked_command_as_items( qq[lsinfo "$path"\n] );
-}
-
-
-
-# -- Collection: retrieving the whole collection
-
-#
-# my @songs = $collection->all_songs( [$path] );
-#
-# Return *all* AMC::Item::Songs currently known by mpd.
-#
-# If $path is supplied (relative to mpd root), restrict the retrieval to
-# songs and dirs in this directory.
-#
-sub all_songs {
- my ($self, $path) = @_;
- return grep { $_->isa('Audio::MPD::Common::Item::Song') } $self->all_items($path);
-}
-
-
-#
-# my @albums = $collection->all_albums;
-#
-# Return the list of all albums (strings) currently known by mpd.
-#
-sub all_albums {
- my ($self) = @_;
- return $self->_mpd->_cooked_command_strip_first_field( "list album\n" );
-}
-
-
-#
-# my @artists = $collection->all_artists;
-#
-# Return the list of all artists (strings) currently known by mpd.
-#
-sub all_artists {
- my ($self) = @_;
- return $self->_mpd->_cooked_command_strip_first_field( "list artist\n" );
-}
-
-
-#
-# my @titles = $collection->all_titles;
-#
-# Return the list of all titles (strings) currently known by mpd.
-#
-sub all_titles {
- my ($self) = @_;
- return $self->_mpd->_cooked_command_strip_first_field( "list title\n" );
-}
-
-
-#
-# my @genre = $collection->all_genre;
-#
-# Return the list of all genres (strings) currently known by mpd.
-#
-sub all_genre {
- my ($self) = @_;
- return $self->_mpd->_cooked_command_strip_first_field( "list genre\n" );
-}
-
-
-#
-# my @yers = $collection->all_years;
-#
-# Return the list of all years (strings) currently known by mpd.
-#
-sub all_years {
- my ($self) = @_;
- return $self->_mpd->_cooked_command_strip_first_field( "list date\n" );
-}
-
-
-#
-# my @pathes = $collection->all_pathes;
-#
-# Return the list of all pathes (strings) currently known by mpd.
-#
-sub all_pathes {
- my ($self) = @_;
- return $self->_mpd->_cooked_command_strip_first_field( "list filename\n" );
-}
-
-
-#
-# my @items = $collection->all_playlists;
-#
-# Return the list of playlists (strings) currently known by mpd.
-#
-sub all_playlists {
- my ($self) = @_;
-
- return
- map { /^playlist: (.*)$/ ? ($1) : () }
- $self->_mpd->_send_command( "lsinfo\n" );
-}
-
-
-
-# -- Collection: picking songs
-
-#
-# my $song = $collection->song( $path );
-#
-# Return the AMC::Item::Song which correspond to $path.
-#
-sub song {
- my ($self, $what) = @_;
- $what =~ s/"/\\"/g;
-
- my ($item) = $self->_mpd->_cooked_command_as_items( qq[find filename "$what"\n] );
- return $item;
-}
-
-
-#
-# my $song = $collection->songs_with_filename_partial( $path );
-#
-# Return the AMC::Item::Songs containing $string in their path.
-#
-sub songs_with_filename_partial {
- my ($self, $what) = @_;
- $what =~ s/"/\\"/g;
-
- return $self->_mpd->_cooked_command_as_items( qq[search filename "$what"\n] );
-}
-
-
-# -- Collection: songs, albums & artists relations
-
-#
-# my @albums = $collection->albums_by_artist($artist);
-#
-# Return all albums (strings) performed by $artist or where $artist
-# participated.
-#
-sub albums_by_artist {
- my ($self, $artist) = @_;
- $artist =~ s/"/\\"/g;
- return $self->_mpd->_cooked_command_strip_first_field( qq[list album "$artist"\n] );
-}
-
-
-#
-# my @songs = $collection->songs_by_artist( $genre );
-#
-# Return all AMC::Item::Songs performed in $genre.
-#
-
-sub songs_by_genre {
- my ($self, $what) = @_;
- $what =~ s/"/\\"/g;
-
- return $self->_mpd->_cooked_command_as_items( qq[find genre "$what"\n] );
-}
-
-
-sub filenames_by_artist {
- my ($self, $what) = @_;
- $what =~ s/"/\\"/g;
-
- return $self->_mpd->_cooked_command_as_filename( qq[find artist "$what"\n] );
-}
-
-
-sub filenames_by_year {
- my ($self, $what) = @_;
- $what =~ s/"/\\"/g;
-
- return $self->_mpd->_cooked_command_as_filename( qq[find date "$what"\n] );
-}
-
-sub filenames_by_genre {
- my ($self, $what) = @_;
- $what =~ s/"/\\"/g;
-
- return $self->_mpd->_cooked_command_as_filename( qq[find genre "$what"\n] );
-}
-
-
-sub filenames_by_album {
- my ($self, $what) = @_;
- $what =~ s/"/\\"/g;
-
- return $self->_mpd->_cooked_command_as_filename( qq[find album "$what"\n] );
-}
-
-
-#
-# my @songs = $collection->songs_by_artist_partial( $string );
-#
-# Return all AMC::Item::Songs performed by an artist with $string
-# in her name.
-#
-sub songs_by_artist_partial {
- my ($self, $what) = @_;
- $what =~ s/"/\\"/g;
-
- return $self->_mpd->_cooked_command_as_items( qq[search artist "$what"\n] );
-}
-
-
-#
-# my @songs = $collection->songs_from_album( $album );
-#
-# Return all AMC::Item::Songs appearing in $album.
-#
-sub songs_from_album {
- my ($self, $what) = @_;
- $what =~ s/"/\\"/g;
-
- return $self->_mpd->_cooked_command_as_items( qq[find album "$what"\n] );
-}
-
-
-#
-# my @songs = $collection->songs_from_album_partial( $string );
-#
-# Return all AMC::Item::Songs appearing in album containing $string.
-#
-sub songs_from_album_partial {
- my ($self, $what) = @_;
- $what =~ s/"/\\"/g;
-
- return $self->_mpd->_cooked_command_as_items( qq[search album "$what"\n] );
-}
-
-
-#
-# my @songs = $collection->songs_with_title( $title );
-#
-# Return all AMC::Item::Songs which title is exactly $title.
-#
-sub songs_with_title {
- my ($self, $what) = @_;
- $what =~ s/"/\\"/g;
-
- return $self->_mpd->_cooked_command_as_items( qq[find title "$what"\n] );
-}
-
-
-#
-# my @songs = $collection->songs_with_title_partial( $string );
-#
-# Return all AMC::Item::Songs where $string is part of the title.
-#
-sub songs_with_title_partial {
- my ($self, $what) = @_;
- $what =~ s/"/\\"/g;
-
- return $self->_mpd->_cooked_command_as_items( qq[search title "$what"\n] );
-}
-
-
-# my @songs = $collection->songs_with_title_partial_filename( $string );
-#
-# Return all AMC::Item::Songs where $string is part of the title.
-#
-sub songs_with_title_partial_filename {
- my ($self, $what) = @_;
- $what =~ s/"/\\"/g;
-
-
- return $self->_mpd->_cooked_command_as_filename( qq[search title "$what"\n] );
-}
-
-# my @songs = $collection->songs_with_artist_partial_filename( $string );
-#
-# Return all AMC::Item::Songs where $string is part of the artist.
-#
-sub songs_with_artist_partial_filename {
- my ($self, $what) = @_;
- $what =~ s/"/\\"/g;
-
- return $self->_mpd->_cooked_command_as_filename( qq[search artist "$what"\n] );
-}
-
-
-# my @songs = $collection->songs_with_album_partial_filename( $string );
-#
-# Return all AMC::Item::Songs where $string is part of the album.
-#
-sub songs_with_album_partial_filename {
- my ($self, $what) = @_;
- $what =~ s/"/\\"/g;
-
- return $self->_mpd->_cooked_command_as_filename( qq[search album "$what"\n] );
-}
-
-
-1;
-
-__END__
-
-
-=head1 NAME
-
-Audio::MPD::Collection - an object to query MPD's collection
-
-
-=head1 SYNOPSIS
-
- my $song = $mpd->collection->random_song;
-
-
-=head1 DESCRIPTION
-
-C<Audio::MPD::Collection> is a class meant to access & query MPD's
-collection. You will be able to use those high-level methods instead
-of using the low-level methods provided by mpd itself.
-
-
-=head1 PUBLIC METHODS
-
-=head2 Constructor
-
-=over 4
-
-=item new( $mpd )
-
-This will create the object, holding a back-reference to the C<Audio::MPD>
-object itself (for communication purposes). But in order to play safe and
-to free the memory in time, this reference is weakened.
-
-Note that you're not supposed to call this constructor yourself, an
-C<Audio::MPD::Collection> is automatically created for you during the creation
-of an C<Audio::MPD> object.
-
-=back
-
-
-=head2 Retrieving songs & directories
-
-=over 4
-
-=item $coll->all_items( [$path] )
-
-Return B<all> C<Audio::MPD::Common::Item>s (both songs & directories)
-currently known by mpd.
-
-If C<$path> is supplied (relative to mpd root), restrict the retrieval to
-songs and dirs in this directory.
-
-
-=item $coll->all_items_simple( [$path] )
-
-Return B<all> C<Audio::MPD::Common::Item>s (both songs & directories)
-currently known by mpd.
-
-If C<$path> is supplied (relative to mpd root), restrict the retrieval to
-songs and dirs in this directory.
-
-B</!\ Warning>: the C<Audio::MPD::Common::Item::Song> objects will only have
-their tag file filled. Any other tag will be empty, so don't use this sub for
-any other thing than a quick scan!
-
-
-=item $coll->items_in_dir( [$path] )
-
-Return the items in the given C<$path>. If no C<$path> supplied, do it on
-mpd's root directory.
-
-Note that this sub does not work recusrively on all directories.
-
-
-=back
-
-
-=head2 Retrieving the whole collection
-
-=over 4
-
-=item $coll->all_songs( [$path] )
-
-Return B<all> C<Audio::MPD::Common::Item::Song>s currently known by mpd.
-
-If C<$path> is supplied (relative to mpd root), restrict the retrieval to
-songs and dirs in this directory.
-
-
-=item $coll->all_albums()
-
-Return the list of all albums (strings) currently known by mpd.
-
-
-=item $coll->all_artists()
-
-Return the list of all artists (strings) currently known by mpd.
-
-
-=item $coll->all_titles()
-
-Return the list of all song titles (strings) currently known by mpd.
-
-
-=item $coll->all_pathes()
-
-Return the list of all pathes (strings) currently known by mpd.
-
-
-=item $coll->all_playlists()
-
-Return the list of all playlists (strings) currently known by mpd.
-
-
-=back
-
-
-=head2 Picking a song
-
-=over 4
-
-=item $coll->song( $path )
-
-Return the C<Audio::MPD::Common::Item::Song> which correspond to C<$path>.
-
-
-=item $coll->songs_with_filename_partial( $path )
-
-Return the C<Audio::MPD::Common::Item::Song>s containing $string in their path.
-
-
-=back
-
-
-=head2 Songs, albums & artists relations
-
-=over 4
-
-=item $coll->albums_by_artist( $artist )
-
-Return all albums (strings) performed by C<$artist> or where C<$artist>
-participated.
-
-
-=item $coll->songs_by_artist( $artist )
-
-Return all C<Audio::MPD::Common::Item::Song>s performed by C<$artist>.
-
-
-=item $coll->songs_by_artist_partial( $string )
-
-Return all C<Audio::MPD::Common::Item::Song>s performed by an artist with
-C<$string> in her name.
-
-
-=item $coll->songs_from_album( $album )
-
-Return all C<Audio::MPD::Common::Item::Song>s appearing in C<$album>.
-
-
-=item $coll->songs_from_album_partial( $string )
-
-Return all C<Audio::MPD::Common::Item::Song>s appearing in album containing C<$string>.
-
-
-=item $coll->songs_with_title( $title )
-
-Return all C<Audio::MPD::Common::Item::Song>s which title is exactly C<$title>.
-
-
-=item $coll->songs_with_title_partial( $string )
-
-Return all C<Audio::MPD::Common::Item::Song>s where C<$string> is part of the title.
-
-
-=back
-
-
-=head1 SEE ALSO
-
-L<Audio::MPD>
-
-
-=head1 AUTHOR
-
-Jerome Quelin, C<< <jquelin at cpan.org> >>
-
-
-=head1 COPYRIGHT & LICENSE
-
-Copyright (c) 2007 Jerome Quelin, all rights reserved.
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/config/mpfire/perl/Audio/MPD/Common.pm b/config/mpfire/perl/Audio/MPD/Common.pm
deleted file mode 100644
index 07de83c20..000000000
--- a/config/mpfire/perl/Audio/MPD/Common.pm
+++ /dev/null
@@ -1,88 +0,0 @@
-#
-# This file is part of Audio::MPD::Common
-# Copyright (c) 2007 Jerome Quelin, all rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the same terms as Perl itself.
-#
-#
-
-package Audio::MPD::Common;
-
-use warnings;
-use strict;
-our $VERSION = '0.1.2';
-
-1;
-
-__END__
-
-
-=head1 NAME
-
-Audio::MPD::Common - a bunch of common helper classes for mpd
-
-
-=head1 DESCRIPTION
-
-Depending on whether you're using a POE-aware environment or not, people
-wanting to tinker with mpd (Music Player Daemon) will use either
-L<POE::Component::Client::MPD> or L<Audio::MPD>.
-
-But even if the run-cores of those two modules differ completely, they
-are using the exact same common classes to represent the various mpd
-states and information.
-
-Therefore, those common classes have been outsourced to
-L<Audio::MPD::Common>.
-
-This module does not export any methods, but the dist provides the
-following classes that you can query with perldoc:
-
-=over 4
-
-=item o L<Audio::MPD::Common::Item>
-
-=item o L<Audio::MPD::Common::Item::Directory>
-
-=item o L<Audio::MPD::Common::Item::Playlist>
-
-=item o L<Audio::MPD::Common::Item::Song>
-
-=item o L<Audio::MPD::Common::Stats>
-
-=item o L<Audio::MPD::Common::Status>
-
-=item o L<Audio::MPD::Common::Time>
-
-=back
-
-
-Note that those modules should not be of any use outside the two mpd
-modules afore-mentioned.
-
-
-=head1 SEE ALSO
-
-=over 4
-
-=item L<Audio::MPD>
-
-=item L<POE::Component::Client::MPD>
-
-=back
-
-
-=head1 AUTHOR
-
-Jerome Quelin, C<< <jquelin at cpan.org> >>
-
-
-=head1 COPYRIGHT & LICENSE
-
-Copyright (c) 2007 Jerome Quelin, all rights reserved.
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/config/mpfire/perl/Audio/MPD/Common/Item.pm b/config/mpfire/perl/Audio/MPD/Common/Item.pm
deleted file mode 100644
index e1d4fa84d..000000000
--- a/config/mpfire/perl/Audio/MPD/Common/Item.pm
+++ /dev/null
@@ -1,100 +0,0 @@
-#
-# This file is part of Audio::MPD::Common
-# Copyright (c) 2007 Jerome Quelin, all rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the same terms as Perl itself.
-#
-#
-
-package Audio::MPD::Common::Item;
-
-use strict;
-use warnings;
-use Audio::MPD::Common::Item::Directory;
-use Audio::MPD::Common::Item::Playlist;
-use Audio::MPD::Common::Item::Song;
-
-#our ($VERSION) = '$Rev: 5645 $' =~ /(\d+)/;
-
-#
-# constructor.
-#
-sub new {
- my ($pkg, %params) = @_;
-
- # transform keys in lowercase.
- my %lowcase;
- @lowcase{ keys %params } = values %params;
-
- return Audio::MPD::Common::Item::Song->new(\%lowcase) if exists $params{file};
- return Audio::MPD::Common::Item::Directory->new(\%lowcase) if exists $params{directory};
- return Audio::MPD::Common::Item::Playlist->new(\%lowcase) if exists $params{playlist};
-}
-
-1;
-
-__END__
-
-
-=head1 NAME
-
-Audio::MPD::Common::Item - a generic collection item
-
-
-=head1 SYNOPSIS
-
- my $item = Audio::MPD::Common::Item->new( %params );
-
-
-=head1 DESCRIPTION
-
-C<Audio::MPD::Common::Item> is a virtual class representing a generic
-item of mpd's collection. It can be either a song, a directory or a playlist.
-
-Depending on the params given to C<new>, it will create and return an
-C<Audio::MPD::Common::Item::Song>, an C<Audio::MPD::Common::Item::Directory>
-or an C<Audio::MPD::Common::Playlist> object. Currently, the
-discrimination is done on the existence of the C<file> key of C<%params>.
-
-
-=head1 PUBLIC METHODS
-
-Note that the only sub worth it in this class is the constructor:
-
-=over 4
-
-=item new( key => val [, key => val [, ...] ] )
-
-Create and return either an C<Audio::MPD::Common::Item::Song>, an
-C<Audio::MPD::Common::Item::Directory> or an C<Audio::MPD::Common::Playlist>
-object, depending on the existence of a key C<file>, C<directory> or
-C<playlist> (respectively).
-
-=back
-
-
-=head1 SEE ALSO
-
-=over 4
-
-=item L<Audio::MPD>
-
-=item L<POE::Component::Client::MPD>
-
-=back
-
-
-=head1 AUTHOR
-
-Jerome Quelin, C<< <jquelin at cpan.org> >>
-
-
-=head1 COPYRIGHT & LICENSE
-
-Copyright (c) 2007 Jerome Quelin, all rights reserved.
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/config/mpfire/perl/Audio/MPD/Common/Item/Directory.pm b/config/mpfire/perl/Audio/MPD/Common/Item/Directory.pm
deleted file mode 100644
index cd9076dc1..000000000
--- a/config/mpfire/perl/Audio/MPD/Common/Item/Directory.pm
+++ /dev/null
@@ -1,72 +0,0 @@
-#
-# This file is part of Audio::MPD::Common
-# Copyright (c) 2007 Jerome Quelin, all rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the same terms as Perl itself.
-#
-#
-
-package Audio::MPD::Common::Item::Directory;
-
-use strict;
-use warnings;
-
-use base qw[ Class::Accessor::Fast Audio::MPD::Common::Item ];
-__PACKAGE__->mk_accessors( qw[ directory ] );
-
-#our ($VERSION) = '$Rev: 5645 $' =~ /(\d+)/;
-
-1;
-
-__END__
-
-
-=head1 NAME
-
-Audio::MPD::Common::Item::Directory - a directory object
-
-
-=head1 SYNOPSIS
-
- print $item->directory . "\n";
-
-
-=head1 DESCRIPTION
-
-C<Audio::MPD::Common::Item::Directory> is more a placeholder for a
-hash ref with one pre-defined key, namely the directory name.
-
-
-=head1 PUBLIC METHODS
-
-This module only has a C<new()> constructor, which should only be called by
-C<Audio::MPD::Common::Item>'s constructor.
-
-The only other public method is an accessor: directory().
-
-
-=head1 SEE ALSO
-
-=over 4
-
-=item L<Audio::MPD>
-
-=item L<POE::Component::Client::MPD>
-
-=back
-
-
-=head1 AUTHOR
-
-Jerome Quelin, C<< <jquelin at cpan.org> >>
-
-
-=head1 COPYRIGHT & LICENSE
-
-Copyright (c) 2007 Jerome Quelin, all rights reserved.
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/config/mpfire/perl/Audio/MPD/Common/Item/Playlist.pm b/config/mpfire/perl/Audio/MPD/Common/Item/Playlist.pm
deleted file mode 100644
index bfeda9853..000000000
--- a/config/mpfire/perl/Audio/MPD/Common/Item/Playlist.pm
+++ /dev/null
@@ -1,72 +0,0 @@
-#
-# This file is part of Audio::MPD::Common
-# Copyright (c) 2007 Jerome Quelin, all rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the same terms as Perl itself.
-#
-#
-
-package Audio::MPD::Common::Item::Playlist;
-
-use strict;
-use warnings;
-
-use base qw[ Class::Accessor::Fast Audio::MPD::Common::Item ];
-__PACKAGE__->mk_accessors( qw[ playlist ] );
-
-#our ($VERSION) = '$Rev: 5645 $' =~ /(\d+)/;
-
-1;
-
-__END__
-
-
-=head1 NAME
-
-Audio::MPD::Common::Item::Playlist - a playlist object
-
-
-=head1 SYNOPSIS
-
- print $item->playlist . "\n";
-
-
-=head1 DESCRIPTION
-
-C<Audio::MPD::Common::Item::Playlist> is more a placeholder for a hash ref
-with one pre-defined key, namely the playlist name.
-
-
-=head1 PUBLIC METHODS
-
-This module only has a C<new()> constructor, which should only be called by
-C<Audio::MPD::Common::Item>'s constructor.
-
-The only other public method is an accessor: playlist().
-
-
-=head1 SEE ALSO
-
-=over 4
-
-=item L<Audio::MPD>
-
-=item L<POE::Component::Client::MPD>
-
-=back
-
-
-=head1 AUTHOR
-
-Jerome Quelin, C<< <jquelin at cpan.org> >>
-
-
-=head1 COPYRIGHT & LICENSE
-
-Copyright (c) 2007 Jerome Quelin, all rights reserved.
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/config/mpfire/perl/Audio/MPD/Common/Item/Song.pm b/config/mpfire/perl/Audio/MPD/Common/Item/Song.pm
deleted file mode 100644
index 4ce8d6da3..000000000
--- a/config/mpfire/perl/Audio/MPD/Common/Item/Song.pm
+++ /dev/null
@@ -1,133 +0,0 @@
-#
-# This file is part of Audio::MPD::Common
-# Copyright (c) 2007 Jerome Quelin, all rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the same terms as Perl itself.
-#
-#
-
-package Audio::MPD::Common::Item::Song;
-
-use strict;
-use warnings;
-
-use overload '""' => \&as_string;
-use Readonly;
-
-use base qw[ Class::Accessor::Fast Audio::MPD::Common::Item ];
-__PACKAGE__->mk_accessors( qw[ Album Artist file id pos Title Track time ] );
-
-#our ($VERSION) = '$Rev: 5645 $' =~ /(\d+)/;
-
-Readonly my $SEP => ' = ';
-
-
-#
-# my $str = $song->as_string;
-#
-# Return a string representing $song. This string will be;
-# - either "Album = Track = Artist = Title"
-# - or "Artist = Title"
-# - or "Title"
-# - or "file"
-# (in this order), depending on the existing tags of the song. The last
-# possibility always exist of course, since it's a path.
-#
-sub as_string {
- my ($self) = @_;
-
- return $self->file unless defined $self->Title;
- my $str = $self->Title;
- return $str unless defined $self->Artist;
- $str = $self->Artist . $SEP . $str;
- return $str unless defined $self->Album && defined $self->Track;
- return join $SEP,
- $self->Album,
- $self->Track,
- $str;
-}
-
-1;
-
-__END__
-
-
-=head1 NAME
-
-Audio::MPD::Common::Item::Song - a song object with some audio tags
-
-
-=head1 DESCRIPTION
-
-C<Audio::MPD::Common::Item::Song> is more a placeholder for a
-hash ref with some pre-defined keys, namely some audio tags.
-
-
-=head1 PUBLIC METHODS
-
-This module has a C<new()> constructor, which should only be called by
-C<Audio::MPD::Common::Item>'s constructor.
-
-The only other public methods are the accessors - see below.
-
-
-=head2 Accessors
-
-The following methods are the accessors to their respective named fields:
-C<Album()>, C<Artist()>, C<file()>, C<id>, C<pos>, C<Title()>, CTTrack()>,
-C<time()>. You can call them either with no arg to get the value, or with
-an arg to replace the current value.
-
-
-=head2 Methods
-
-
-=over 4
-
-=item $song->as_string()
-
-Return a string representing $song. This string will be:
-
-=over 4
-
-=item either "Album = Track = Artist = Title"
-
-=item or "Artist = Title"
-
-=item or "Title"
-
-=item or "file"
-
-=back
-
-(in this order), depending on the existing tags of the song. The last
-possibility always exist of course, since it's a path.
-
-=back
-
-
-=head1 SEE ALSO
-
-=over 4
-
-=item L<Audio::MPD>
-
-=item L<POE::Component::Client::MPD>
-
-=back
-
-
-=head1 AUTHOR
-
-Jerome Quelin, C<< <jquelin at cpan.org> >>
-
-
-=head1 COPYRIGHT & LICENSE
-
-Copyright (c) 2007 Jerome Quelin, all rights reserved.
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/config/mpfire/perl/Audio/MPD/Common/Stats.pm b/config/mpfire/perl/Audio/MPD/Common/Stats.pm
deleted file mode 100644
index 06749072e..000000000
--- a/config/mpfire/perl/Audio/MPD/Common/Stats.pm
+++ /dev/null
@@ -1,135 +0,0 @@
-#
-# This file is part of Audio::MPD::Common
-# Copyright (c) 2007 Jerome Quelin, all rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the same terms as Perl itself.
-#
-#
-
-package Audio::MPD::Common::Stats;
-
-use warnings;
-use strict;
-
-use base qw[ Class::Accessor::Fast ];
-__PACKAGE__->mk_accessors
- ( qw[ artists albums songs uptime playtime db_playtime db_update ] );
-
-#our ($VERSION) = '$Rev$' =~ /(\d+)/;
-
-1;
-
-__END__
-
-
-=head1 NAME
-
-Audio::MPD::Common::Stats - class representing MPD stats
-
-
-=head1 SYNOPSIS
-
- print $stats->artists;
-
-
-=head1 DESCRIPTION
-
-The MPD server maintains some general information. Those information can be
-queried with the mpd modules. Some of those information are served to you as
-an C<Audio::MPD::Common::Status> object.
-
-Note that an C<Audio::MPD::Common::Stats> object does B<not> update itself
-regularly, and thus should be used immediately.
-
-
-=head1 METHODS
-
-=head2 Constructor
-
-=over 4
-
-=item new( %kv )
-
-The C<new()> method is the constructor for the C<Audio::MPD::Common::Stats>
-class.
-
-Note: one should B<never> ever instantiate an C<Audio::MPD::Common::Stats>
-object directly - use the mpd modules instead.
-
-=back
-
-
-=head2 Accessors
-
-Once created, one can access to the following members of the object:
-
-=over 4
-
-=item $stats->artists()
-
-Number of artists in the music database.
-
-
-=item $stats->albums()
-
-Number of albums in the music database.
-
-
-=item $stats->songs()
-
-Number of songs in the music database.
-
-
-=item $stats->uptime()
-
-Daemon uptime (time since last startup) in seconds.
-
-
-=item $stats->playtime()
-
-Time length of music played.
-
-
-=item $stats->db_playtime()
-
-Sum of all song times in the music database.
-
-
-=item $stats->db_update()
-
-Last database update in UNIX time.
-
-
-=back
-
-
-Please note that those accessors are read-only: changing a value will B<not>
-change the current settings of MPD server. Use the mpd modules to alter the
-settings.
-
-
-=head1 SEE ALSO
-
-=over 4
-
-=item L<Audio::MPD>
-
-=item L<POE::Component::Client::MPD>
-
-=back
-
-
-=head1 AUTHOR
-
-Jerome Quelin, C<< <jquelin at cpan.org> >>
-
-
-=head1 COPYRIGHT & LICENSE
-
-Copyright (c) 2007 Jerome Quelin, all rights reserved.
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/config/mpfire/perl/Audio/MPD/Common/Status.pm b/config/mpfire/perl/Audio/MPD/Common/Status.pm
deleted file mode 100644
index f9c98e2f6..000000000
--- a/config/mpfire/perl/Audio/MPD/Common/Status.pm
+++ /dev/null
@@ -1,192 +0,0 @@
-#
-# This file is part of Audio::MPD::Common
-# Copyright (c) 2007 Jerome Quelin, all rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the same terms as Perl itself.
-#
-#
-
-package Audio::MPD::Common::Status;
-
-use warnings;
-use strict;
-
-use Audio::MPD::Common::Time;
-
-use base qw[ Class::Accessor::Fast ];
-__PACKAGE__->mk_accessors
- ( qw[ audio bitrate error playlist playlistlength random
- repeat song songid state time volume updating_db xfade ] );
-
-#our ($VERSION) = '$Rev: 5865 $' =~ /(\d+)/;
-
-
-#--
-# Constructor
-
-#
-# my $status = Audio::MPD::Common::Status->new( \%kv )
-#
-# The constructor for the class Audio::MPD::Common::Status. %kv is
-# a cooked output of what MPD server returns to the status command.
-#
-sub new {
- my ($class, $kv) = @_;
- my %kv = %$kv;
- $kv{time} = Audio::MPD::Common::Time->new( delete $kv{time} );
- bless \%kv, $class;
- return \%kv;
-}
-
-1;
-
-__END__
-
-
-=head1 NAME
-
-Audio::MPD::Common::Status - class representing MPD status
-
-
-=head1 SYNOPSIS
-
- print $status->bitrate;
-
-
-=head1 DESCRIPTION
-
-The MPD server maintains some information on its current state. Those
-information can be queried with mpd modules. Some of those information
-are served to you as an C<Audio::MPD::Common::Status> object.
-
-Note that an C<Audio::MPD::Common::Status> object does B<not> update
-itself regularly, and thus should be used immediately.
-
-
-=head1 METHODS
-
-=head2 Constructor
-
-=over 4
-
-=item new( \%kv )
-
-The C<new()> method is the constructor for the C<Audio::MPD::Common::Status>
-class.
-
-Note: one should B<never> ever instantiate an C<Audio::MPD::Common::Status>
-object directly - use the mpd modules instead.
-
-=back
-
-
-=head2 Accessors
-
-Once created, one can access to the following members of the object:
-
-=over 4
-
-=item $status->audio()
-
-A string with the sample rate of the song currently playing, number of bits
-of the output and number of channels (2 for stereo) - separated by a colon.
-
-
-=item $status->bitrate()
-
-The instantaneous bitrate in kbps.
-
-
-=item $status->error()
-
-May appear in special error cases, such as when disabling output.
-
-
-=item $status->playlist()
-
-The playlist version number, that changes every time the playlist is updated.
-
-
-=item $status->playlistlength()
-
-The number of songs in the playlist.
-
-
-=item $status->random()
-
-Whether the playlist is read randomly or not.
-
-
-=item $status->repeat()
-
-Whether the song is repeated or not.
-
-
-=item $status->song()
-
-The offset of the song currently played in the playlist.
-
-
-=item $status->songid()
-
-The song id (MPD id) of the song currently played.
-
-
-=item $status->state()
-
-The state of MPD server. Either C<play>, C<stop> or C<pause>.
-
-
-=item $status->time()
-
-An C<Audio::MPD::Common::Time> object, representing the time elapsed /
-remainging and total. See the associated pod for more details.
-
-
-=item $status->updating_db()
-
-An integer, representing the current update job.
-
-
-=item $status->volume()
-
-The current MPD volume - an integer between 0 and 100.
-
-
-=item $status->xfade()
-
-The crossfade in seconds.
-
-
-=back
-
-Please note that those accessors are read-only: changing a value will B<not>
-change the current settings of MPD server. Use the mpd modules to alter the
-settings.
-
-
-=head1 SEE ALSO
-
-=over 4
-
-=item L<Audio::MPD>
-
-=item L<POE::Component::Client::MPD>
-
-=back
-
-
-=head1 AUTHOR
-
-Jerome Quelin, C<< <jquelin at cpan.org> >>
-
-
-=head1 COPYRIGHT & LICENSE
-
-Copyright (c) 2007 Jerome Quelin, all rights reserved.
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/config/mpfire/perl/Audio/MPD/Common/Time.pm b/config/mpfire/perl/Audio/MPD/Common/Time.pm
deleted file mode 100644
index 77b6c7dd3..000000000
--- a/config/mpfire/perl/Audio/MPD/Common/Time.pm
+++ /dev/null
@@ -1,186 +0,0 @@
-#
-# This file is part of Audio::MPD::Common
-# Copyright (c) 2007 Jerome Quelin, all rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the same terms as Perl itself.
-#
-#
-
-package Audio::MPD::Common::Time;
-
-use warnings;
-use strict;
-
-use base qw[ Class::Accessor::Fast ];
-__PACKAGE__->mk_accessors
- ( qw[ percent sofar left total
- sofar_secs sofar_mins seconds_sofar
- total_secs total_mins seconds_total
- left_secs left_mins seconds_left
- ] );
-
-#our ($VERSION) = '$Rev$' =~ /(\d+)/;
-
-
-#--
-# Constructor
-
-#
-# my $status = Audio::MPD::Common::Time->new( $time )
-#
-# The constructor for the class Audio::MPD::Common::Time. $time is
-# the time value (on the "time" line) of what the output MPD server
-# returns to the status command.
-#
-sub new {
- my ($class, $time) = @_;
- $time ||= '0:0';
- my ($seconds_sofar, $seconds_total) = split /:/, $time;
- my $seconds_left = $seconds_total - $seconds_sofar;
- my $percent = $seconds_total ? 100*$seconds_sofar/$seconds_total : 0;
-
- # Parse the time so far
- my $sofar_mins = int( $seconds_sofar / 60 );
- my $sofar_secs = $seconds_sofar % 60;
- my $sofar = sprintf "%d:%02d", $sofar_mins, $sofar_secs;
-
- # Parse the total time
- my $total_mins = int( $seconds_total / 60 );
- my $total_secs = $seconds_total % 60;
- my $total = sprintf "%d:%02d", $total_mins, $total_secs;
-
- # Parse the time left
- my $left_mins = int( $seconds_left / 60 );
- my $left_secs = $seconds_left % 60;
- my $left = sprintf "%d:%02d", $left_mins, $left_secs;
-
-
- # create object
- my $self = {
- # time elapsed in seconds
- seconds_sofar => $seconds_sofar,
- seconds_left => $seconds_left,
- seconds_total => $seconds_total,
-
- # cooked values
- sofar => $sofar,
- left => $left,
- total => $total,
- percent => sprintf("%.1f", $percent), # 1 decimal
-
- # details
- sofar_secs => $sofar_secs,
- sofar_mins => $sofar_mins,
- total_secs => $total_secs,
- total_mins => $total_mins,
- left_secs => $left_secs,
- left_mins => $left_mins,
- };
- bless $self, $class;
- return $self;
-}
-
-
-1;
-
-__END__
-
-=head1 NAME
-
-Audio::MPD::Common::Time - class representing time of current song
-
-
-=head1 SYNOPSIS
-
- my $time = $status->time;
- print $time->sofar;
-
-
-=head1 DESCRIPTION
-
-C<Audio::MPD::Common::Status> returns some time information with the C<time()>
-accessor. This information relates to the elapsed time of the current song,
-as well as the remaining and total time. This information is encapsulated
-in an C<Audio::MPD::Common::Time> object.
-
-Note that an C<Audio::MPD::Common::Time> object does B<not> update itself
-regularly, and thus should be used immediately.
-
-
-=head1 METHODS
-
-=head2 Constructor
-
-=over 4
-
-=item new( $time )
-
-The C<new()> method is the constructor for the C<Audio::MPD::Common::Time>
-class.
-
-Note: one should B<never> ever instantiate an C<Audio::MPD::Common::Time>
-object directly - use the mpd modules instead.
-
-=back
-
-
-=head2 Accessors
-
-Once created, one can access the following members of the object:
-
-=over 4
-
-=item cooked values:
-
-The C<sofar()>, C<left()> and C<total()> methods return the according values
-under the form C<minutes:seconds>. Note the existence of a C<percent()>
-method returning a percentage complete. (one decimal)
-
-
-=item values in seconds:
-
-The C<seconds_sofar()>, C<seconds_left()> and C<seconds_total()> return the
-according values in seconds.
-
-
-=item detailled values:
-
-If you want to cook your own value, then the following methods can help:
-C<sofar_secs()> and C<sofar_mins()> return the seconds and minutes elapsed.
-Same for C<left_secs()> and C<left_mins()> (time remaining), C<total_secs()>
-and C<total_mins()>. (total song length)
-
-
-=back
-
-
-Please note that those accessors are read-only: changing a value will B<not>
-change the current settings of MPD server. Use the mpd modules to alter the
-settings.
-
-
-=head1 SEE ALSO
-
-=over 4
-
-=item L<Audio::MPD>
-
-=item L<POE::Component::Client::MPD>
-
-=back
-
-
-=head1 AUTHOR
-
-Jerome Quelin, C<< <jquelin at cpan.org> >>
-
-
-=head1 COPYRIGHT & LICENSE
-
-Copyright (c) 2007 Jerome Quelin, all rights reserved.
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/config/mpfire/perl/Audio/MPD/Playlist.pm b/config/mpfire/perl/Audio/MPD/Playlist.pm
deleted file mode 100644
index b59499d02..000000000
--- a/config/mpfire/perl/Audio/MPD/Playlist.pm
+++ /dev/null
@@ -1,427 +0,0 @@
-#
-# This file is part of Audio::MPD
-# Copyright (c) 2007 Jerome Quelin, all rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the same terms as Perl itself.
-#
-#
-
-package Audio::MPD::Playlist;
-
-use strict;
-use warnings;
-use Scalar::Util qw[ weaken ];
-
-use base qw[ Class::Accessor::Fast ];
-__PACKAGE__->mk_accessors( qw[ _mpd ] );
-
-
-#our ($VERSION) = '$Rev$' =~ /(\d+)/;
-
-
-#--
-# Constructor
-
-#
-# my $collection = Audio::MPD::Playlist->new( $mpd );
-#
-# This will create the object, holding a back-reference to the Audio::MPD
-# object itself (for communication purposes). But in order to play safe and
-# to free the memory in time, this reference is weakened.
-#
-# Note that you're not supposed to call this constructor yourself, an
-# Audio::MPD::Playlist is automatically created for you during the creation
-# of an Audio::MPD object.
-#
-sub new {
- my ($pkg, $mpd) = @_;
-
- my $self = { _mpd => $mpd };
- weaken( $self->{_mpd} );
- bless $self, $pkg;
- return $self;
-}
-
-
-#--
-# Public methods
-
-# -- Playlist: retrieving information
-
-#
-# my @items = $pl->as_items;
-#
-# Return an array of AMC::Item::Songs, one for each of the
-# songs in the current playlist.
-#
-sub as_items {
- my ($self) = @_;
-
- my @list = $self->_mpd->_cooked_command_as_items("playlistinfo\n");
- return @list;
-}
-
-
-#
-# my @items = $pl->items_changed_since( $plversion );
-#
-# Return a list with all the songs (as API::Song objects) added to
-# the playlist since playlist $plversion.
-#
-sub items_changed_since {
- my ($self, $plid) = @_;
- return $self->_mpd->_cooked_command_as_items("plchanges $plid\n");
-}
-
-
-
-# -- Playlist: adding / removing songs
-
-#
-# $pl->add( $path [, $path [...] ] );
-#
-# Add the songs identified by $path (relative to MPD's music directory) to
-# the current playlist. No return value.
-#
-sub add {
- my ($self, @pathes) = @_;
- my $command =
- "command_list_begin\n"
- . join( '', map { s/"/\\"/g; qq[add "$_"\n] } @pathes )
- . "command_list_end\n";
- $self->_mpd->_send_command( $command );
-}
-
-
-#
-# $pl->delete( $song [, $song [...] ] );
-#
-# Remove song number $song (starting from 0) from the current playlist. No
-# return value.
-#
-sub delete {
- my ($self, @songs) = @_;
- my $command =
- "command_list_begin\n"
- . join( '', map { s/"/\\"/g; "delete $_\n" } @songs )
- . "command_list_end\n";
- $self->_mpd->_send_command( $command );
-}
-
-
-#
-# $pl->deleteid( $songid [, $songid [...] ]);
-#
-# Remove the specified $songid (as assigned by mpd when inserted in playlist)
-# from the current playlist. No return value.
-#
-sub deleteid {
- my ($self, @songs) = @_;
- my $command =
- "command_list_begin\n"
- . join( '', map { "deleteid $_\n" } @songs )
- . "command_list_end\n";
- $self->_mpd->_send_command( $command );
-}
-
-
-#
-# $pl->clear;
-#
-# Remove all the songs from the current playlist. No return value.
-#
-sub clear {
- my ($self) = @_;
- $self->_mpd->_send_command("clear\n");
-}
-
-
-#
-# $pl->crop;
-#
-# Remove all of the songs from the current playlist *except* the current one.
-#
-sub crop {
- my ($self) = @_;
-
- my $status = $self->_mpd->status;
- my $cur = $status->song;
- my $len = $status->playlistlength - 1;
-
- my $command =
- "command_list_begin\n"
- . join( '', map { $_ != $cur ? "delete $_\n" : '' } reverse 0..$len )
- . "command_list_end\n";
- $self->_mpd->_send_command( $command );
-}
-
-
-# -- Playlist: changing playlist order
-
-#
-# $pl->shuffle();
-#
-# Shuffle the current playlist. No return value.
-#
-sub shuffle {
- my ($self) = @_;
- $self->_mpd->_send_command("shuffle\n");
-}
-
-
-#
-# $pl->swap( $song1, $song2 );
-#
-# Swap positions of song number $song1 and $song2 in the current playlist.
-# No return value.
-#
-sub swap {
- my ($self, $from, $to) = @_;
- $self->_mpd->_send_command("swap $from $to\n");
-}
-
-
-#
-# $pl->swapid( $songid1, $songid2 );
-#
-# Swap the postions of song ID $songid1 with song ID $songid2 in the
-# current playlist. No return value.
-#
-sub swapid {
- my ($self, $from, $to) = @_;
- $self->_mpd->_send_command("swapid $from $to\n");
-}
-
-
-#
-# $pl->move( $song, $newpos );
-#
-# Move song number $song to the position $newpos. No return value.
-#
-sub move {
- my ($self, $song, $pos) = @_;
- $self->_mpd->_send_command("move $song $pos\n");
-}
-
-
-#
-# $pl->moveid( $songid, $newpos );
-#
-# Move song ID $songid to the position $newpos. No return value.
-#
-sub moveid {
- my ($self, $song, $pos) = @_;
- $self->_mpd->_send_command("moveid $song $pos\n");
-}
-
-
-# -- Playlist: managing playlists
-
-#
-# $pl->load( $playlist );
-#
-# Load list of songs from specified $playlist file. No return value.
-#
-sub load {
- my ($self, $playlist) = @_;
- $self->_mpd->_send_command( qq[load "$playlist"\n] );
-}
-
-
-#
-# $pl->save( $playlist );
-#
-# Save the current playlist to a file called $playlist in MPD's playlist
-# directory. No return value.
-#
-sub save {
- my ($self, $playlist) = @_;
- $self->_mpd->_send_command( qq[save "$playlist"\n] );
-}
-
-
-#
-# $pl->rm( $playlist )
-#
-# Delete playlist named $playlist from MPD's playlist directory. No
-# return value.
-#
-sub rm {
- my ($self, $playlist) = @_;
- $self->_mpd->_send_command( qq[rm "$playlist"\n] );
-}
-
-
-
-1;
-
-__END__
-
-
-=head1 NAME
-
-Audio::MPD::Playlist - an object to mess MPD's playlist
-
-
-=head1 SYNOPSIS
-
- my $song = $mpd->playlist->randomize;
-
-
-=head1 DESCRIPTION
-
-C<Audio::MPD::Playlist> is a class meant to access & update MPD's
-playlist.
-
-
-=head1 PUBLIC METHODS
-
-=head2 Constructor
-
-=over 4
-
-=item new( $mpd )
-
-This will create the object, holding a back-reference to the C<Audio::MPD>
-object itself (for communication purposes). But in order to play safe and
-to free the memory in time, this reference is weakened.
-
-Note that you're not supposed to call this constructor yourself, an
-C<Audio::MPD::Playlist> is automatically created for you during the creation
-of an C<Audio::MPD> object.
-
-=back
-
-
-=head2 Retrieving information
-
-=over 4
-
-=item $pl->as_items()
-
-Return an array of C<Audio::MPD::Common::Item::Song>s, one for each of the
-songs in the current playlist.
-
-
-=item $pl->items_changed_since( $plversion )
-
-Return a list with all the songs (as AMC::Item::Song objects) added to
-the playlist since playlist $plversion.
-
-
-=back
-
-
-=head2 Adding / removing songs
-
-=over 4
-
-=item $pl->add( $path [, $path [...] ] )
-
-Add the songs identified by C<$path> (relative to MPD's music directory) to the
-current playlist. No return value.
-
-
-=item $pl->delete( $song [, $song [...] ] )
-
-Remove song number C<$song>s (starting from 0) from the current playlist. No
-return value.
-
-
-=item $pl->deleteid( $songid [, $songid [...] ] )
-
-Remove the specified C<$songid>s (as assigned by mpd when inserted in playlist)
-from the current playlist. No return value.
-
-
-=item $pl->clear()
-
-Remove all the songs from the current playlist. No return value.
-
-
-=item $pl->crop()
-
-Remove all of the songs from the current playlist *except* the
-song currently playing.
-
-
-=back
-
-
-=head2 Changing playlist order
-
-=over 4
-
-=item $pl->shuffle()
-
-Shuffle the current playlist. No return value.
-
-
-=item $pl->swap( $song1, $song2 )
-
-Swap positions of song number C<$song1> and C<$song2> in the current
-playlist. No return value.
-
-
-=item $pl->swapid( $songid1, $songid2 )
-
-Swap the postions of song ID C<$songid1> with song ID C<$songid2> in the
-current playlist. No return value.
-
-
-=item $pl->move( $song, $newpos )
-
-Move song number C<$song> to the position C<$newpos>. No return value.
-
-
-=item $pl->moveid( $songid, $newpos )
-
-Move song ID C<$songid> to the position C<$newpos>. No return value.
-
-
-=back
-
-
-=head2 Managing playlists
-
-=over 4
-
-=item $pl->load( $playlist )
-
-Load list of songs from specified C<$playlist> file. No return value.
-
-
-=item $pl->save( $playlist )
-
-Save the current playlist to a file called C<$playlist> in MPD's playlist
-directory. No return value.
-
-
-=item $pl->rm( $playlist )
-
-Delete playlist named C<$playlist> from MPD's playlist directory. No
-return value.
-
-
-=back
-
-
-=head1 SEE ALSO
-
-L<Audio::MPD>
-
-
-=head1 AUTHOR
-
-Jerome Quelin, C<< <jquelin at cpan.org> >>
-
-
-=head1 COPYRIGHT & LICENSE
-
-Copyright (c) 2007 Jerome Quelin, all rights reserved.
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/config/mpfire/perl/Audio/MPD/Test.pm b/config/mpfire/perl/Audio/MPD/Test.pm
deleted file mode 100644
index 74359afd1..000000000
--- a/config/mpfire/perl/Audio/MPD/Test.pm
+++ /dev/null
@@ -1,217 +0,0 @@
-#
-# This file is part of Audio::MPD
-# Copyright (c) 2007 Jerome Quelin, all rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the same terms as Perl itself.
-#
-#
-
-package Audio::MPD::Test;
-
-use strict;
-use warnings;
-
-use Exporter;
-use FindBin qw[ $Bin ];
-use Readonly;
-
-
-use base qw[ Exporter ];
-our @EXPORT = qw[ customize_test_mpd_configuration start_test_mpd stop_test_mpd ];
-#our ($VERSION) = '$Rev: 5284 $' =~ /(\d+)/;
-
-
-Readonly my $TEMPLATE => "$Bin/mpd-test/mpd.conf.template";
-Readonly my $CONFIG => "$Bin/mpd-test/mpd.conf";
-
-{ # this will be run when Audio::MPD::Test will be use-d.
- my $restart = 0;
- my $stopit = 0;
-
- customize_test_mpd_configuration();
- $restart = _stop_user_mpd_if_needed();
- $stopit = start_test_mpd();
-
- END {
- stop_test_mpd() if $stopit;
- return unless $restart; # no need to restart
- system 'mpd 2>/dev/null'; # restart user mpd
- sleep 1; # wait 1 second to let mpd start.
- }
-}
-
-
-#--
-# public subs
-
-#
-# customize_test_mpd_configuration( [$port] )
-#
-# Create a fake mpd configuration file, based on the file mpd.conf.template
-# located in t/mpd-test. The string PWD will be replaced by the real path -
-# ie, where the tarball has been untarred. The string PORT will be replaced
-# by $port if specified, 6600 otherwise (MPD default).
-#
-sub customize_test_mpd_configuration {
- my ($port) = @_;
- $port ||= 6600;
-
- # open template and config.
- open my $in, '<', $TEMPLATE or die "can't open [$TEMPLATE]: $!\n";
- open my $out, '>', $CONFIG or die "can't open [$CONFIG]: $!\n";
-
- # replace string and fill in config file.
- while ( defined( my $line = <$in> ) ) {
- $line =~ s!PWD!$Bin/mpd-test!;
- $line =~ s!PORT!$port!;
- print $out $line;
- }
-
- # clean up.
- close $in;
- close $out;
-
- # create a fake mpd db.
- system( "mpd --create-db $CONFIG >/dev/null 2>&1" ) == 0
- or die "could not create fake mpd database: $?\n";
-}
-
-
-#
-# start_test_mpd()
-#
-# Start the fake mpd, and die if there were any error.
-#
-sub start_test_mpd {
- my $output = qx[mpd $CONFIG 2>&1];
- die "could not start fake mpd: $output\n" if $output;
- sleep 1; # wait 1 second to let mpd start.
- return 1;
-}
-
-
-#
-# stop_test_mpd()
-#
-# Kill the fake mpd.
-#
-sub stop_test_mpd {
- system "mpd --kill $CONFIG 2>/dev/null";
- sleep 1; # wait 1 second to free output device.
- unlink "$Bin/mpd-test/state", "$Bin/mpd-test/music.db";
-}
-
-
-#--
-# private subs
-
-
-#
-# my $was_running = _stop_user_mpd_if_needed()
-#
-# This sub will check if mpd is currently running. If it is, force it to
-# a full stop (unless MPD_TEST_OVERRIDE is not set).
-#
-# In any case, it will return a boolean stating whether mpd was running
-# before forcing stop.
-#
-sub _stop_user_mpd_if_needed {
- # check if mpd is running.
- my $is_running = grep { /mpd$/ } qx[ ps -e ];
-
- return 0 unless $is_running; # mpd does not run - nothing to do.
-
- # check force stop.
- die "mpd is running\n" unless $ENV{MPD_TEST_OVERRIDE};
- system( 'mpd --kill 2>/dev/null') == 0 or die "can't stop user mpd: $?\n";
- sleep 1; # wait 1 second to free output device
- return 1;
-}
-
-
-1;
-
-__END__
-
-=head1 NAME
-
-Audio::MPD::Test - automate launching of fake mdp for testing purposes
-
-
-=head1 SYNOPSIS
-
- use Audio::MPD::Test; # die if error
- [...]
- stop_fake_mpd();
-
-
-=head1 DESCRIPTION
-
-=head2 General usage
-
-This module will try to launch a new mpd server for testing purposes. This
-mpd server will then be used during Audio::MPD tests.
-
-In order to achieve this, the module will create a fake mpd.conf file with
-the correct pathes (ie, where you untarred the module tarball). It will then
-check if some mpd server is already running, and stop it if the
-MPD_TEST_OVERRIDE environment variable is true (die otherwise). Last it will
-run the test mpd with its newly created configuration file.
-
-Everything described above is done automatically when the module is C<use>-d.
-
-
-Once the tests are run, the mpd server will be shut down, and the original
-one will be relaunched (if there was one).
-
-Note that the test mpd will listen to C<localhost>, so you are on the safe
-side. Note also that the test suite comes with its own ogg files - and yes,
-we can redistribute them since it's only some random voice recordings :-)
-
-
-=head2 Advanced usage
-
-In case you want more control on the test mpd server, you can use the
-following public methods:
-
-=over 4
-
-=item start_test_mpd()
-
-Start the fake mpd, and die if there were any error.
-
-=item stop_test_mpd()
-
-Kill the fake mpd.
-
-=item customize_test_mpd_configuration( [$port] )
-
-Create a fake mpd configuration file, based on the file mpd.conf.template
-located in t/mpd-test. The string PWD will be replaced by the real path -
-ie, where the tarball has been untarred. The string PORT will be replaced
-by $port if specified, 6600 otherwise (MPD default).
-
-=back
-
-This might be useful when trying to test connections with mpd server.
-
-
-=head1 SEE ALSO
-
-L<Audio::MPD>
-
-
-=head1 AUTHOR
-
-Jerome Quelin, C<< <jquelin at cpan.org> >>
-
-
-=head1 COPYRIGHT & LICENSE
-
-Copyright (c) 2007 Jerome Quelin, all rights reserved.
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/config/mpfire/perl/Readonly.pm b/config/mpfire/perl/Readonly.pm
deleted file mode 100644
index 294c759c5..000000000
--- a/config/mpfire/perl/Readonly.pm
+++ /dev/null
@@ -1,803 +0,0 @@
-=for gpg
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-- -----BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-=head1 NAME
-
-Readonly - Facility for creating read-only scalars, arrays, hashes.
-
-=head1 VERSION
-
-This documentation describes version 1.03 of Readonly.pm, April 20, 2004.
-
-=cut
-
-# Rest of documentation is after __END__.
-
-use 5.005;
-use strict;
-#use warnings;
-#no warnings 'uninitialized';
-
-package Readonly;
-$Readonly::VERSION = '1.03'; # Also change in the documentation!
-
-# Autocroak (Thanks, MJD)
-# Only load Carp.pm if module is croaking.
-sub croak
-{
- require Carp;
- goto &Carp::croak;
-}
-
-# These functions may be overridden by Readonly::XS, if installed.
-sub is_sv_readonly ($) { 0 }
-sub make_sv_readonly ($) { die "make_sv_readonly called but not overridden" }
-use vars qw/$XSokay/; # Set to true in Readonly::XS, if available
-
-# Common error messages, or portions thereof
-use vars qw/$MODIFY $REASSIGN $ODDHASH/;
-$MODIFY = 'Modification of a read-only value attempted';
-$REASSIGN = 'Attempt to reassign a readonly';
-$ODDHASH = 'May not store an odd number of values in a hash';
-
-# See if we can use the XS stuff.
-$Readonly::XS::MAGIC_COOKIE = "Do NOT use or require Readonly::XS unless you're me.";
-eval 'use Readonly::XS';
-
-
-# ----------------
-# Read-only scalars
-# ----------------
-package Readonly::Scalar;
-
-sub TIESCALAR
-{
- my $whence = (caller 2)[3]; # Check if naughty user is trying to tie directly.
- Readonly::croak "Invalid tie" unless $whence && $whence =~ /^Readonly::(?:Scalar1?|Readonly)$/;
- my $class = shift;
- Readonly::croak "No value specified for readonly scalar" unless @_;
- Readonly::croak "Too many values specified for readonly scalar" unless @_ == 1;
-
- my $value = shift;
- return bless \$value, $class;
-}
-
-sub FETCH
-{
- my $self = shift;
- return $$self;
-}
-
-*STORE = *UNTIE =
- sub {Readonly::croak $Readonly::MODIFY};
-
-
-# ----------------
-# Read-only arrays
-# ----------------
-package Readonly::Array;
-
-sub TIEARRAY
-{
- my $whence = (caller 1)[3]; # Check if naughty user is trying to tie directly.
- Readonly::croak "Invalid tie" unless $whence =~ /^Readonly::Array1?$/;
- my $class = shift;
- my @self = @_;
-
- return bless \@self, $class;
-}
-
-sub FETCH
-{
- my $self = shift;
- my $index = shift;
- return $self->[$index];
-}
-
-sub FETCHSIZE
-{
- my $self = shift;
- return scalar @$self;
-}
-
-BEGIN {
- eval q{
- sub EXISTS
- {
- my $self = shift;
- my $index = shift;
- return exists $self->[$index];
- }
- } if $] >= 5.006; # couldn't do "exists" on arrays before then
-}
-
-*STORE = *STORESIZE = *EXTEND = *PUSH = *POP = *UNSHIFT = *SHIFT = *SPLICE = *CLEAR = *UNTIE =
- sub {Readonly::croak $Readonly::MODIFY};
-
-
-# ----------------
-# Read-only hashes
-# ----------------
-package Readonly::Hash;
-
-sub TIEHASH
-{
- my $whence = (caller 1)[3]; # Check if naughty user is trying to tie directly.
- Readonly::croak "Invalid tie" unless $whence =~ /^Readonly::Hash1?$/;
-
- my $class = shift;
- # must have an even number of values
- Readonly::croak $Readonly::ODDHASH unless (@_ %2 == 0);
-
- my %self = @_;
- return bless \%self, $class;
-}
-
-sub FETCH
-{
- my $self = shift;
- my $key = shift;
-
- return $self->{$key};
-}
-
-sub EXISTS
-{
- my $self = shift;
- my $key = shift;
- return exists $self->{$key};
-}
-
-sub FIRSTKEY
-{
- my $self = shift;
- my $dummy = keys %$self;
- return scalar each %$self;
-}
-
-sub NEXTKEY
-{
- my $self = shift;
- return scalar each %$self;
-}
-
-*STORE = *DELETE = *CLEAR = *UNTIE =
- sub {Readonly::croak $Readonly::MODIFY};
-
-
-# ----------------------------------------------------------------
-# Main package, containing convenience functions (so callers won't
-# have to explicitly tie the variables themselves).
-# ----------------------------------------------------------------
-package Readonly;
-use Exporter;
-use vars qw/@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS/;
-push @ISA, 'Exporter';
-push @EXPORT, qw/Readonly/;
-push @EXPORT_OK, qw/Scalar Array Hash Scalar1 Array1 Hash1/;
-
-# Predeclare the following, so we can use them recursively
-sub Scalar ($$);
-sub Array (\@;@);
-sub Hash (\%;@);
-
-# Returns true if a string begins with "Readonly::"
-# Used to prevent reassignment of Readonly variables.
-sub _is_badtype
-{
- my $type = $_[0];
- return lc $type if $type =~ s/^Readonly:://;
- return;
-}
-
-# Shallow Readonly scalar
-sub Scalar1 ($$)
-{
- croak "$REASSIGN scalar" if is_sv_readonly $_[0];
- my $badtype = _is_badtype (ref tied $_[0]);
- croak "$REASSIGN $badtype" if $badtype;
-
- # xs method: flag scalar as readonly
- if ($XSokay)
- {
- $_[0] = $_[1];
- make_sv_readonly $_[0];
- return;
- }
-
- # pure-perl method: tied scalar
- my $tieobj = eval {tie $_[0], 'Readonly::Scalar', $_[1]};
- if ($@)
- {
- croak "$REASSIGN scalar" if substr($@,0,43) eq $MODIFY;
- die $@; # some other error?
- }
- return $tieobj;
-}
-
-# Shallow Readonly array
-sub Array1 (\@;@)
-{
- my $badtype = _is_badtype (ref tied $_[0]);
- croak "$REASSIGN $badtype" if $badtype;
-
- my $aref = shift;
- return tie @$aref, 'Readonly::Array', @_;
-}
-
-# Shallow Readonly hash
-sub Hash1 (\%;@)
-{
- my $badtype = _is_badtype (ref tied $_[0]);
- croak "$REASSIGN $badtype" if $badtype;
-
- my $href = shift;
-
- # If only one value, and it's a hashref, expand it
- if (@_ == 1 && ref $_[0] eq 'HASH')
- {
- return tie %$href, 'Readonly::Hash', %{$_[0]};
- }
-
- # otherwise, must have an even number of values
- croak $ODDHASH unless (@_%2 == 0);
-
- return tie %$href, 'Readonly::Hash', @_;
-}
-
-# Deep Readonly scalar
-sub Scalar ($$)
-{
- croak "$REASSIGN scalar" if is_sv_readonly $_[0];
- my $badtype = _is_badtype (ref tied $_[0]);
- croak "$REASSIGN $badtype" if $badtype;
-
- my $value = $_[1];
-
- # Recursively check passed element for references; if any, make them Readonly
- foreach ($value)
- {
- if (ref eq 'SCALAR') {Scalar my $v => $$_; $_ = \$v}
- elsif (ref eq 'ARRAY') {Array my @v => @$_; $_ = \@v}
- elsif (ref eq 'HASH') {Hash my %v => $_; $_ = \%v}
- }
-
- # xs method: flag scalar as readonly
- if ($XSokay)
- {
- $_[0] = $value;
- make_sv_readonly $_[0];
- return;
- }
-
- # pure-perl method: tied scalar
- my $tieobj = eval {tie $_[0], 'Readonly::Scalar', $value};
- if ($@)
- {
- croak "$REASSIGN scalar" if substr($@,0,43) eq $MODIFY;
- die $@; # some other error?
- }
- return $tieobj;
-}
-
-# Deep Readonly array
-sub Array (\@;@)
-{
- my $badtype = _is_badtype (ref tied @{$_[0]});
- croak "$REASSIGN $badtype" if $badtype;
-
- my $aref = shift;
- my @values = @_;
-
- # Recursively check passed elements for references; if any, make them Readonly
- foreach (@values)
- {
- if (ref eq 'SCALAR') {Scalar my $v => $$_; $_ = \$v}
- elsif (ref eq 'ARRAY') {Array my @v => @$_; $_ = \@v}
- elsif (ref eq 'HASH') {Hash my %v => $_; $_ = \%v}
- }
- # Lastly, tie the passed reference
- return tie @$aref, 'Readonly::Array', @values;
-}
-
-# Deep Readonly hash
-sub Hash (\%;@)
-{
- my $badtype = _is_badtype (ref tied %{$_[0]});
- croak "$REASSIGN $badtype" if $badtype;
-
- my $href = shift;
- my @values = @_;
-
- # If only one value, and it's a hashref, expand it
- if (@_ == 1 && ref $_[0] eq 'HASH')
- {
- @values = %{$_[0]};
- }
-
- # otherwise, must have an even number of values
- croak $ODDHASH unless (@values %2 == 0);
-
- # Recursively check passed elements for references; if any, make them Readonly
- foreach (@values)
- {
- if (ref eq 'SCALAR') {Scalar my $v => $$_; $_ = \$v}
- elsif (ref eq 'ARRAY') {Array my @v => @$_; $_ = \@v}
- elsif (ref eq 'HASH') {Hash my %v => $_; $_ = \%v}
- }
-
- return tie %$href, 'Readonly::Hash', @values;
-}
-
-
-# Common entry-point for all supported data types
-eval q{sub Readonly} . ( $] < 5.008 ? '' : '(\[$@%]@)' ) . <<'SUB_READONLY';
-{
- if (ref $_[0] eq 'SCALAR')
- {
- croak $MODIFY if is_sv_readonly ${$_[0]};
- my $badtype = _is_badtype (ref tied ${$_[0]});
- croak "$REASSIGN $badtype" if $badtype;
- croak "Readonly scalar must have only one value" if @_ > 2;
-
- my $tieobj = eval {tie ${$_[0]}, 'Readonly::Scalar', $_[1]};
- # Tie may have failed because user tried to tie a constant, or we screwed up somehow.
- if ($@)
- {
- croak $MODIFY if $@ =~ /^$MODIFY at/; # Point the finger at the user.
- die "$@\n"; # Not a modify read-only message; must be our fault.
- }
- return $tieobj;
- }
- elsif (ref $_[0] eq 'ARRAY')
- {
- my $aref = shift;
- return Array @$aref, @_;
- }
- elsif (ref $_[0] eq 'HASH')
- {
- my $href = shift;
- croak $ODDHASH if @_%2 != 0 && !(@_ == 1 && ref $_[0] eq 'HASH');
- return Hash %$href, @_;
- }
- elsif (ref $_[0])
- {
- croak "Readonly only supports scalar, array, and hash variables.";
- }
- else
- {
- croak "First argument to Readonly must be a reference.";
- }
-}
-SUB_READONLY
-
-
-1;
-__END__
-
-=head1 SYNOPSIS
-
- use Readonly;
-
- # Read-only scalar
- Readonly::Scalar $sca => $initial_value;
- Readonly::Scalar my $sca => $initial_value;
-
- # Read-only array
- Readonly::Array @arr => @values;
- Readonly::Array my @arr => @values;
-
- # Read-only hash
- Readonly::Hash %has => (key => value, key => value, ...);
- Readonly::Hash my %has => (key => value, key => value, ...);
- # or:
- Readonly::Hash %has => {key => value, key => value, ...};
-
- # You can use the read-only variables like any regular variables:
- print $sca;
- $something = $sca + $arr[2];
- next if $has{$some_key};
-
- # But if you try to modify a value, your program will die:
- $sca = 7;
- push @arr, 'seven';
- delete $has{key};
- # The error message is "Modification of a read-only value
-attempted"
-
- # Alternate form (Perl 5.8 and later)
- Readonly $sca => $initial_value;
- Readonly my $sca => $initial_value;
- Readonly @arr => @values;
- Readonly my @arr => @values;
- Readonly %has => (key => value, key => value, ...);
- Readonly my %has => (key => value, key => value, ...);
- # Alternate form (for Perls earlier than v5.8)
- Readonly \$sca => $initial_value;
- Readonly \my $sca => $initial_value;
- Readonly \@arr => @values;
- Readonly \my @arr => @values;
- Readonly \%has => (key => value, key => value, ...);
- Readonly \my %has => (key => value, key => value, ...);
-
-
-=head1 DESCRIPTION
-
-This is a facility for creating non-modifiable variables. This is
-useful for configuration files, headers, etc. It can also be useful
-as a development and debugging tool, for catching updates to variables
-that should not be changed.
-
-If any of the values you pass to C<Scalar>, C<Array>, or C<Hash> are
-references, then those functions recurse over the data structures,
-marking everything as Readonly. Usually, this is what you want: the
-entire structure nonmodifiable. If you want only the top level to be
-Readonly, use the alternate C<Scalar1>, C<Array1> and C<Hash1>
-functions.
-
-Please note that most users of Readonly will also want to install a
-companion module Readonly::XS. See the L</CONS> section below for more
-details.
-
-=head1 COMPARISON WITH "use constant"
-
-Perl provides a facility for creating constant values, via the "use
-constant" pragma. There are several problems with this pragma.
-
-=over 2
-
-=item *
-
-The constants created have no leading $ or @ character.
-
-=item *
-
-These constants cannot be interpolated into strings.
-
-=item *
-
-Syntax can get dicey sometimes. For example:
-
- use constant CARRAY => (2, 3, 5, 7, 11, 13);
- $a_prime = CARRAY[2]; # wrong!
- $a_prime = (CARRAY)[2]; # right -- MUST use parentheses
-
-=item *
-
-You have to be very careful in places where barewords are allowed.
-For example:
-
- use constant SOME_KEY => 'key';
- %hash = (key => 'value', other_key => 'other_value');
- $some_value = $hash{SOME_KEY}; # wrong!
- $some_value = $hash{+SOME_KEY}; # right
-
-(who thinks to use a unary plus when using a hash?)
-
-=item *
-
-C<use constant> works for scalars and arrays, not hashes.
-
-=item *
-
-These constants are global ot the package in which they're declared;
-cannot be lexically scoped.
-
-=item *
-
-Works only at compile time.
-
-=item *
-
-Can be overridden:
-
- use constant PI => 3.14159;
- ...
- use constant PI => 2.71828;
-
-(this does generate a warning, however, if you have warnings enabled).
-
-=item *
-
-It is very difficult to make and use deep structures (complex data
-structures) with C<use constant>.
-
-=back
-
-=head1 COMPARISON WITH TYPEGLOB CONSTANTS
-
-Another popular way to create read-only scalars is to modify the symbol
-table entry for the variable by using a typeglob:
-
- *a = \'value';
-
-This works fine, but it only works for global variables ("my"
-variables have no symbol table entry). Also, the following similar
-constructs do B<not> work:
-
- *a = [1, 2, 3]; # Does NOT create a read-only array
- *a = { a => 'A'}; # Does NOT create a read-only hash
-
-=head1 PROS
-
-Readonly.pm, on the other hand, will work with global variables and
-with lexical ("my") variables. It will create scalars, arrays, or
-hashes, all of which look and work like normal, read-write Perl
-variables. You can use them in scalar context, in list context; you
-can take references to them, pass them to functions, anything.
-
-Readonly.pm also works well with complex data structures, allowing you
-to tag the whole structure as nonmodifiable, or just the top level.
-
-Also, Readonly variables may not be reassigned. The following code
-will die:
-
- Readonly::Scalar $pi => 3.14159;
- ...
- Readonly::Scalar $pi => 2.71828;
-
-=head1 CONS
-
-Readonly.pm does impose a performance penalty. It's pretty slow. How
-slow? Run the C<benchmark.pl> script that comes with Readonly. On my
-test system, "use constant", typeglob constants, and regular
-read/write Perl variables were all about the same speed, and
-Readonly.pm constants were about 1/20 the speed.
-
-However, there is relief. There is a companion module available,
-Readonly::XS. If it is installed on your system, Readonly.pm uses it
-to make read-only scalars much faster. With Readonly::XS, Readonly
-scalars are as fast as the other types of variables. Readonly arrays
-and hashes will still be relatively slow. But it's likely that most
-of your Readonly variables will be scalars.
-
-If you can't use Readonly::XS (for example, if you don't have a C
-compiler, or your perl is statically linked and you don't want to
-re-link it), you have to decide whether the benefits of Readonly
-variables outweigh the speed issue. For most configuration variables
-(and other things that Readonly is likely to be useful for), the speed
-issue is probably not really a big problem. But benchmark your
-program if it might be. If it turns out to be a problem, you may
-still want to use Readonly.pm during development, to catch changes to
-variables that should not be changed, and then remove it for
-production:
-
- # For testing:
- Readonly::Scalar $Foo_Directory => '/usr/local/foo';
- Readonly::Scalar $Bar_Directory => '/usr/local/bar';
- # $Foo_Directory = '/usr/local/foo';
- # $Bar_Directory = '/usr/local/bar';
-
- # For production:
- # Readonly::Scalar $Foo_Directory => '/usr/local/foo';
- # Readonly::Scalar $Bar_Directory => '/usr/local/bar';
- $Foo_Directory = '/usr/local/foo';
- $Bar_Directory = '/usr/local/bar';
-
-
-=head1 FUNCTIONS
-
-=over 4
-
-=item Readonly::Scalar $var => $value;
-
-Creates a nonmodifiable scalar, C<$var>, and assigns a value of
-C<$value> to it. Thereafter, its value may not be changed. Any
-attempt to modify the value will cause your program to die.
-
-A value I<must> be supplied. If you want the variable to have
-C<undef> as its value, you must specify C<undef>.
-
-If C<$value> is a reference to a scalar, array, or hash, then this
-function will mark the scalar, array, or hash it points to as being
-Readonly as well, and it will recursively traverse the structure,
-marking the whole thing as Readonly. Usually, this is what you want.
-However, if you want only the C<$value> marked as Readonly, use
-C<Scalar1>.
-
-If $var is already a Readonly variable, the program will die with
-an error about reassigning Readonly variables.
-
-=item Readonly::Array @arr => (value, value, ...);
-
-Creates a nonmodifiable array, C<@arr>, and assigns the specified list
-of values to it. Thereafter, none of its values may be changed; the
-array may not be lengthened or shortened or spliced. Any attempt to
-do so will cause your program to die.
-
-If any of the values passed is a reference to a scalar, array, or hash,
-then this function will mark the scalar, array, or hash it points to as
-being Readonly as well, and it will recursively traverse the structure,
-marking the whole thing as Readonly. Usually, this is what you want.
-However, if you want only the hash C<%@arr> itself marked as Readonly,
-use C<Array1>.
-
-If @arr is already a Readonly variable, the program will die with
-an error about reassigning Readonly variables.
-
-=item Readonly::Hash %h => (key => value, key => value, ...);
-
-=item Readonly::Hash %h => {key => value, key => value, ...};
-
-Creates a nonmodifiable hash, C<%h>, and assigns the specified keys
-and values to it. Thereafter, its keys or values may not be changed.
-Any attempt to do so will cause your program to die.
-
-A list of keys and values may be specified (with parentheses in the
-synopsis above), or a hash reference may be specified (curly braces in
-the synopsis above). If a list is specified, it must have an even
-number of elements, or the function will die.
-
-If any of the values is a reference to a scalar, array, or hash, then
-this function will mark the scalar, array, or hash it points to as
-being Readonly as well, and it will recursively traverse the
-structure, marking the whole thing as Readonly. Usually, this is what
-you want. However, if you want only the hash C<%h> itself marked as
-Readonly, use C<Hash1>.
-
-If %h is already a Readonly variable, the program will die with
-an error about reassigning Readonly variables.
-
-=item Readonly $var => $value;
-
-=item Readonly @arr => (value, value, ...);
-
-=item Readonly %h => (key => value, ...);
-
-=item Readonly %h => {key => value, ...};
-
-The C<Readonly> function is an alternate to the C<Scalar>, C<Array>,
-and C<Hash> functions. It has the advantage (if you consider it an
-advantage) of being one function. That may make your program look
-neater, if you're initializing a whole bunch of constants at once.
-You may or may not prefer this uniform style.
-
-It has the disadvantage of having a slightly different syntax for
-versions of Perl prior to 5.8. For earlier versions, you must supply
-a backslash, because it requires a reference as the first parameter.
-
- Readonly \$var => $value;
- Readonly \@arr => (value, value, ...);
- Readonly \%h => (key => value, ...);
- Readonly \%h => {key => value, ...};
-
-You may or may not consider this ugly.
-
-=item Readonly::Scalar1 $var => $value;
-
-=item Readonly::Array1 @arr => (value, value, ...);
-
-=item Readonly::Hash1 %h => (key => value, key => value, ...);
-
-=item Readonly::Hash1 %h => {key => value, key => value, ...};
-
-These alternate functions create shallow Readonly variables, instead
-of deep ones. For example:
-
- Readonly::Array1 @shal => (1, 2, {perl=>'Rules', java=>'Bites'}, 4, 5);
- Readonly::Array @deep => (1, 2, {perl=>'Rules', java=>'Bites'}, 4, 5);
-
- $shal[1] = 7; # error
- $shal[2]{APL}='Weird'; # Allowed! since the hash isn't Readonly
- $deep[1] = 7; # error
- $deep[2]{APL}='Weird'; # error, since the hash is Readonly
-
-
-=back
-
-
-=head1 EXAMPLES
-
- # SCALARS:
-
- # A plain old read-only value
- Readonly::Scalar $a => "A string value";
-
- # The value need not be a compile-time constant:
- Readonly::Scalar $a => $computed_value;
-
-
- # ARRAYS:
-
- # A read-only array:
- Readonly::Array @a => (1, 2, 3, 4);
-
- # The parentheses are optional:
- Readonly::Array @a => 1, 2, 3, 4;
-
- # You can use Perl's built-in array quoting syntax:
- Readonly::Array @a => qw/1 2 3 4/;
-
- # You can initialize a read-only array from a variable one:
- Readonly::Array @a => @computed_values;
-
- # A read-only array can be empty, too:
- Readonly::Array @a => ();
- Readonly::Array @a; # equivalent
-
-
- # HASHES
-
- # Typical usage:
- Readonly::Hash %a => (key1 => 'value1', key2 => 'value2');
-
- # A read-only hash can be initialized from a variable one:
- Readonly::Hash %a => %computed_values;
-
- # A read-only hash can be empty:
- Readonly::Hash %a => ();
- Readonly::Hash %a; # equivalent
-
- # If you pass an odd number of values, the program will die:
- Readonly::Hash %a => (key1 => 'value1', "value2");
- --> dies with "May not store an odd number of values in a hash"
-
-
-=head1 EXPORTS
-
-By default, this module exports the following symbol into the calling
-program's namespace:
-
- Readonly
-
-The following symbols are available for import into your program, if
-you like:
-
- Scalar Scalar1
- Array Array1
- Hash Hash1
-
-
-=head1 REQUIREMENTS
-
- Perl 5.000
- Carp.pm (included with Perl)
- Exporter.pm (included with Perl)
-
- Readonly::XS is recommended but not required.
-
-=head1 ACKNOWLEDGEMENTS
-
-Thanks to Slaven Rezic for the idea of one common function
-(Readonly) for all three types of variables (13 April 2002).
-
-Thanks to Ernest Lergon for the idea (and initial code) for
-deeply-Readonly data structures (21 May 2002).
-
-Thanks to Damian Conway for the idea (and code) for making the
-Readonly function work a lot smoother under perl 5.8+.
-
-
-=head1 AUTHOR / COPYRIGHT
-
-Eric J. Roode, roode(a)cpan.org
-
-Copyright (c) 2001-2004 by Eric J. Roode. All Rights Reserved. This
-module is free software; you can redistribute it and/or modify it under
-the same terms as Perl itself.
-
-If you have suggestions for improvement, please drop me a line. If
-you make improvements to this software, I ask that you please send me
-a copy of your changes. Thanks.
-
-Readonly.pm is made from 100% recycled electrons. No animals were
-harmed during the development and testing of this module. Not sold
-in stores! Readonly::XS sold separately. Void where prohibited.
-
-=cut
-
-=begin gpg
-
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.2.4 (MingW32)
-
-iD8DBQFAhaGCY96i4h5M0egRAg++AJ0ar4ncojbOp0OOc2wo+E/1cBn5cQCg9eP9
-qTzAC87PuyKB+vrcRykrDbo=
-=39Ny
------END PGP SIGNATURE-----
-
-=cut
\ No newline at end of file
diff --git a/config/mpfire/webradio b/config/mpfire/webradio
deleted file mode 100644
index 402c31a4c..000000000
--- a/config/mpfire/webradio
+++ /dev/null
@@ -1,14 +0,0 @@
-62.75.176.45/rtl-high|89.0 RTL Hitradio|http://www.89.0rtl.de
-gffstream.ic.llnwd.net/stream/gffstream_stream_wdr_einslive_b|Einslive|http://www.einslive.de/
-213.186.41.149:8040|Deepinside Radio European|http://www.deepinside.co.uk
-62.75.176.40:80/bigfm-cbr-128|BigFM|http://www.bigfm.de
-stream.telvi.de:8000/radiobrocken|Hit-Radio Brocken|http://www.radiobrocken.de
-magic-island.eu:8000/listen.mp3|Magic Island|http://www.magic-island.eu
-dsl.blackbeats.fm:13000|BlackBeats FM|http://www.blackbeats.fm
-87.118.64.197:3100|Discofox-Radio|http://www.discofox-radio.de
-rmnradio.powerstream.de:8022|RMNradio|http://www.rmnradio.de/
-relay.radio.ethz.ch:8000/kohina.ogg|Kohina|http://www.kohina.com
-relay1.slayradio.org:8000|Slay Radio|http://www.slayradio.com/
-demovibes.de:8000/necta128.ogg|Nectarine Demoscene Radio|http://www.scenemusic.eu/
-r1.scenesat.com:8000/scenesathi|SceneSat Radio|http://www.scenesat.com
-radioparadise.steadyhost.com:8060|Radio Paradise|http://www.radioparadise.com/
diff --git a/config/rootfiles/common/configroot b/config/rootfiles/common/configroot
index a286a1538..9839eee45 100644
--- a/config/rootfiles/common/configroot
+++ b/config/rootfiles/common/configroot
@@ -119,7 +119,6 @@ var/ipfire/menu.d/60-ipfire.menu
var/ipfire/menu.d/70-log.menu
#var/ipfire/menu.d/EX-apcupsd.menu
#var/ipfire/menu.d/EX-guardian.menu
-#var/ipfire/menu.d/EX-mpfire.menu
#var/ipfire/menu.d/EX-mympd.menu
#var/ipfire/menu.d/EX-samba.menu
#var/ipfire/menu.d/EX-tor.menu
diff --git a/config/rootfiles/common/web-user-interface b/config/rootfiles/common/web-user-interface
index 7678c1e5d..d779ad1c8 100644
--- a/config/rootfiles/common/web-user-interface
+++ b/config/rootfiles/common/web-user-interface
@@ -55,7 +55,6 @@ srv/web/ipfire/cgi-bin/media.cgi
srv/web/ipfire/cgi-bin/memory.cgi
srv/web/ipfire/cgi-bin/modem-status.cgi
srv/web/ipfire/cgi-bin/modem.cgi
-#srv/web/ipfire/cgi-bin/mpfire.cgi
#srv/web/ipfire/cgi-bin/mympd.cgi
srv/web/ipfire/cgi-bin/netexternal.cgi
srv/web/ipfire/cgi-bin/netinternal.cgi
@@ -218,8 +217,6 @@ srv/web/ipfire/html/images/media-resume.png
srv/web/ipfire/html/images/media-shuffle.png
srv/web/ipfire/html/images/media-skip-backward.png
srv/web/ipfire/html/images/media-skip-forward.png
-srv/web/ipfire/html/images/mpfire
-srv/web/ipfire/html/images/mpfire/box.png
srv/web/ipfire/html/images/network-error.png
srv/web/ipfire/html/images/network-idle.png
srv/web/ipfire/html/images/network-offline.png
diff --git a/config/rootfiles/packages/mpfire b/config/rootfiles/packages/mpfire
deleted file mode 100644
index ab12bde03..000000000
--- a/config/rootfiles/packages/mpfire
+++ /dev/null
@@ -1,35 +0,0 @@
-srv/web/ipfire/cgi-bin/mpfire.cgi
-srv/web/ipfire/html/images/mpfire
-usr/lib/perl5/5.36.0/Class/Accessor
-usr/lib/perl5/5.36.0/Class/Accessor.pm
-usr/lib/perl5/5.36.0/Class/Accessor/Fast.pm
-usr/lib/perl5/5.36.0/Class/Accessor/Faster.pm
-usr/lib/perl5/5.36.0/Readonly.pm
-usr/lib/perl5/site_perl/5.36.0/Audio
-usr/lib/perl5/site_perl/5.36.0/Audio/MPD
-usr/lib/perl5/site_perl/5.36.0/Audio/MPD.pm
-usr/lib/perl5/site_perl/5.36.0/Audio/MPD/Collection.pm
-usr/lib/perl5/site_perl/5.36.0/Audio/MPD/Common
-usr/lib/perl5/site_perl/5.36.0/Audio/MPD/Common.pm
-usr/lib/perl5/site_perl/5.36.0/Audio/MPD/Common/Item
-usr/lib/perl5/site_perl/5.36.0/Audio/MPD/Common/Item.pm
-usr/lib/perl5/site_perl/5.36.0/Audio/MPD/Common/Item/Directory.pm
-usr/lib/perl5/site_perl/5.36.0/Audio/MPD/Common/Item/Playlist.pm
-usr/lib/perl5/site_perl/5.36.0/Audio/MPD/Common/Item/Song.pm
-usr/lib/perl5/site_perl/5.36.0/Audio/MPD/Common/Stats.pm
-usr/lib/perl5/site_perl/5.36.0/Audio/MPD/Common/Status.pm
-usr/lib/perl5/site_perl/5.36.0/Audio/MPD/Common/Time.pm
-usr/lib/perl5/site_perl/5.36.0/Audio/MPD/Playlist.pm
-usr/lib/perl5/site_perl/5.36.0/Audio/MPD/Test.pm
-usr/local/bin/mpfirectrl
-var/ipfire/backup/addons/includes/mpfire
-var/ipfire/menu.d/EX-mpfire.menu
-var/ipfire/mpfire
-var/ipfire/mpfire/bin
-var/ipfire/mpfire/bin/mpfire.pl
-var/ipfire/mpfire/settings
-var/ipfire/mpfire/webradio
-usr/local/bin/mpfirectrl
-srv/web/ipfire/cgi-bin/mpfire.cgi
-srv/web/ipfire/html/images/mpfire
-var/ipfire/menu.d/EX-mpfire.menu
diff --git a/doc/language_issues.de b/doc/language_issues.de
index bd335de41..7883bef76 100644
--- a/doc/language_issues.de
+++ b/doc/language_issues.de
@@ -24,14 +24,19 @@ WARNING: translation string unused: ConnSched scheduler
WARNING: translation string unused: ConnSched select profile
WARNING: translation string unused: Daily
WARNING: translation string unused: Disabled
+WARNING: translation string unused: Existing Files
WARNING: translation string unused: HDD temperature
WARNING: translation string unused: Level7 rule
WARNING: translation string unused: Local VPN IP
+WARNING: translation string unused: Pages
WARNING: translation string unused: Ping
WARNING: translation string unused: Queuelenght
WARNING: translation string unused: Remote IP
WARNING: translation string unused: Remote VPN IP
WARNING: translation string unused: Resolv
+WARNING: translation string unused: Scan for Files
+WARNING: translation string unused: Scan for Songs
+WARNING: translation string unused: Scan from Directory
WARNING: translation string unused: Subclass
WARNING: translation string unused: TOS Bits
WARNING: translation string unused: Utilization on
@@ -110,6 +115,7 @@ WARNING: translation string unused: age seconds
WARNING: translation string unused: age shour
WARNING: translation string unused: age sminute
WARNING: translation string unused: age ssecond
+WARNING: translation string unused: album
WARNING: translation string unused: alcatelusb help
WARNING: translation string unused: alcatelusb upload
WARNING: translation string unused: all interfaces
@@ -122,6 +128,7 @@ WARNING: translation string unused: alt vpn
WARNING: translation string unused: and
WARNING: translation string unused: apply
WARNING: translation string unused: archive not exist
+WARNING: translation string unused: artist
WARNING: translation string unused: attemps
WARNING: translation string unused: avoid dod
WARNING: translation string unused: backup config floppy
@@ -158,6 +165,7 @@ WARNING: translation string unused: check for net traffic update
WARNING: translation string unused: choose config
WARNING: translation string unused: class in use
WARNING: translation string unused: clear cache
+WARNING: translation string unused: clear playlist
WARNING: translation string unused: client
WARNING: translation string unused: comment
WARNING: translation string unused: community rules
@@ -179,6 +187,7 @@ WARNING: translation string unused: create mask
WARNING: translation string unused: create new backup
WARNING: translation string unused: current media
WARNING: translation string unused: current ovpn
+WARNING: translation string unused: current playlist
WARNING: translation string unused: current profile
WARNING: translation string unused: custom networks
WARNING: translation string unused: custom services
@@ -375,6 +384,7 @@ WARNING: translation string unused: generatekeys
WARNING: translation string unused: generatepolicy
WARNING: translation string unused: generatereport
WARNING: translation string unused: genkey
+WARNING: translation string unused: genre
WARNING: translation string unused: gpl i accept these terms and conditions
WARNING: translation string unused: gpl license agreement
WARNING: translation string unused: gpl please read carefully the general public license and accept it below
@@ -540,6 +550,7 @@ WARNING: translation string unused: network traffic graphs
WARNING: translation string unused: network updated
WARNING: translation string unused: networks settings
WARNING: translation string unused: new optionsfw must boot
+WARNING: translation string unused: next
WARNING: translation string unused: no alcatelusb firmware
WARNING: translation string unused: no cfg upload
WARNING: translation string unused: no eciadsl synch.bin file
@@ -632,6 +643,7 @@ WARNING: translation string unused: pdc options
WARNING: translation string unused: phase1 group
WARNING: translation string unused: phonebook entry
WARNING: translation string unused: ping disabled
+WARNING: translation string unused: play
WARNING: translation string unused: polfile
WARNING: translation string unused: port forwarding configuration
WARNING: translation string unused: ports
@@ -639,6 +651,7 @@ WARNING: translation string unused: pots
WARNING: translation string unused: pppoe
WARNING: translation string unused: prefered master
WARNING: translation string unused: present
+WARNING: translation string unused: prev
WARNING: translation string unused: printcap name
WARNING: translation string unused: printer
WARNING: translation string unused: printername
@@ -652,6 +665,7 @@ WARNING: translation string unused: proxy no proxy local
WARNING: translation string unused: proxy port
WARNING: translation string unused: psk
WARNING: translation string unused: qos add subclass
+WARNING: translation string unused: quick playlist
WARNING: translation string unused: read list
WARNING: translation string unused: reboot ask
WARNING: translation string unused: reboot question
@@ -662,6 +676,7 @@ WARNING: translation string unused: registered user rules
WARNING: translation string unused: released
WARNING: translation string unused: reload
WARNING: translation string unused: removable device advice
+WARNING: translation string unused: repeat
WARNING: translation string unused: reportfile
WARNING: translation string unused: reportlevel
WARNING: translation string unused: requested data
@@ -704,6 +719,7 @@ WARNING: translation string unused: set
WARNING: translation string unused: shaping list options
WARNING: translation string unused: show last x lines
WARNING: translation string unused: show share options
+WARNING: translation string unused: shuffle
WARNING: translation string unused: shutdown ask
WARNING: translation string unused: shutdown sure
WARNING: translation string unused: shutdown2
@@ -765,9 +781,11 @@ 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
+WARNING: translation string unused: toggle
WARNING: translation string unused: too long 80 char max
WARNING: translation string unused: tor 0 = disabled
WARNING: translation string unused: tor accounting period daily
@@ -850,6 +868,10 @@ WARNING: translation string unused: use dov
WARNING: translation string unused: use ibod
WARNING: translation string unused: view log
WARNING: translation string unused: visible in browselist
+WARNING: translation string unused: voldown10
+WARNING: translation string unused: voldown5
+WARNING: translation string unused: volup10
+WARNING: translation string unused: volup5
WARNING: translation string unused: vpn aggrmode
WARNING: translation string unused: vpn delayed start
WARNING: translation string unused: vpn delayed start help
@@ -862,6 +884,7 @@ WARNING: translation string unused: vpn red name
WARNING: translation string unused: vpn watch
WARNING: translation string unused: warn when traffic reaches
WARNING: translation string unused: web proxy configuration
+WARNING: translation string unused: webradio playlist
WARNING: translation string unused: week
WARNING: translation string unused: week-graph
WARNING: translation string unused: weekly firewallhits
diff --git a/doc/language_issues.en b/doc/language_issues.en
index 4f8a7adc4..3f1626b68 100644
--- a/doc/language_issues.en
+++ b/doc/language_issues.en
@@ -59,7 +59,6 @@ WARNING: untranslated string: ConnSched up = Up
WARNING: untranslated string: ConnSched weekdays = Days of the week:
WARNING: untranslated string: Edit an existing route = Edit an existing route
WARNING: untranslated string: Enter TOS = Activate or deactivate TOS-bits <br /> and then press <i>Save</i>.
-WARNING: untranslated string: Existing Files = Files in database
WARNING: untranslated string: Level7 Protocol = Level7-Protocol
WARNING: untranslated string: Level7 Rule = Level7-Rule
WARNING: untranslated string: MB read = MB read
@@ -71,12 +70,8 @@ WARNING: untranslated string: Number of IPs for the pie chart = Number of IPs fo
WARNING: untranslated string: Number of Ports for the pie chart = Number of ports for the pie chart
WARNING: untranslated string: OVPN = OpenVPN
WARNING: untranslated string: OpenVPN = OpenVPN
-WARNING: untranslated string: Pages = Pages
WARNING: untranslated string: Port Rule = Port-Rule
WARNING: untranslated string: QoS not enabled = QoS is not enabled!
-WARNING: untranslated string: Scan for Files = Scan for files
-WARNING: untranslated string: Scan for Songs = unknown string
-WARNING: untranslated string: Scan from Directory = Scan from directory
WARNING: untranslated string: Set time on boot = Force setting the system clock on boot
WARNING: untranslated string: TOS Rule = TOS-Rule
WARNING: untranslated string: TOS rule = TOS rule
@@ -307,7 +302,6 @@ WARNING: untranslated string: advproxy wpad title = Web Proxy Auto-Discovery Pro
WARNING: untranslated string: advproxy wpad view pac = Open PAC File
WARNING: untranslated string: age second = second
WARNING: untranslated string: aktiv = Active
-WARNING: untranslated string: album = Album
WARNING: untranslated string: alias ip = Alias IP
WARNING: untranslated string: aliases = Aliases
WARNING: untranslated string: aliases default interface = - Default Interface -
@@ -323,7 +317,6 @@ WARNING: untranslated string: apcupsd = APC-UPS status
WARNING: untranslated string: april = April
WARNING: untranslated string: are you sure = Are you sure?
WARNING: untranslated string: arp table entries = ARP Table Entries
-WARNING: untranslated string: artist = Artist
WARNING: untranslated string: asn lookup failed = AS lookup failed
WARNING: untranslated string: atm device = Device:
WARNING: untranslated string: atm settings = ATM settings
@@ -477,7 +470,6 @@ WARNING: untranslated string: check all = Check all
WARNING: untranslated string: check vpn lr = Check
WARNING: untranslated string: cipher = Encryption:
WARNING: untranslated string: city = City
-WARNING: untranslated string: clear playlist = Empty playlist
WARNING: untranslated string: clenabled = Provide time to local network
WARNING: untranslated string: click to disable = Enabled (click to disable)
WARNING: untranslated string: click to enable = Disabled (click to enable)
@@ -535,7 +527,6 @@ WARNING: untranslated string: current dhcp leases on blue = Current DHCP leases
WARNING: untranslated string: current dynamic leases = Current dynamic leases
WARNING: untranslated string: current fixed leases = Current fixed leases
WARNING: untranslated string: current hosts = Current hosts
-WARNING: untranslated string: current playlist = Current Playlist
WARNING: untranslated string: current rules = Current rules:
WARNING: untranslated string: daemon login script = Daemon login script
WARNING: untranslated string: dangerous = Dangerous
@@ -978,7 +969,6 @@ WARNING: untranslated string: generate iso = Generate ISO
WARNING: untranslated string: generate ptr = Generate PTR
WARNING: untranslated string: generate root/host certificates = Generate root/host certificates
WARNING: untranslated string: 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.
-WARNING: untranslated string: genre = Genre
WARNING: untranslated string: global settings = Global Settings
WARNING: untranslated string: graph = Graph
WARNING: untranslated string: green = GREEN
@@ -1338,13 +1328,6 @@ WARNING: untranslated string: month = Month
WARNING: untranslated string: months = Months
WARNING: untranslated string: most preferred = most preferred
WARNING: untranslated string: mounted on = Mounted on
-WARNING: untranslated string: mpfire = Media Player for IPFire
-WARNING: untranslated string: mpfire controls = MPFire Control
-WARNING: untranslated string: mpfire playlist = MPFire Playlist
-WARNING: untranslated string: mpfire scanning = Scan for new files
-WARNING: untranslated string: mpfire search = MPFire Search
-WARNING: untranslated string: mpfire songs = MPFire songlist
-WARNING: untranslated string: mpfire webradio = MPFire Webradio
WARNING: untranslated string: mtu = MTU
WARNING: untranslated string: name = Name
WARNING: untranslated string: name is invalid = Name is invalid
@@ -1368,7 +1351,6 @@ WARNING: untranslated string: network traffic graphs others = Network (others)
WARNING: untranslated string: never = Never
WARNING: untranslated string: new optionsfw later = Some options need a reboot to take effect
WARNING: untranslated string: newer = Newer
-WARNING: untranslated string: next = next
WARNING: untranslated string: no = No
WARNING: untranslated string: no data = unknown string
WARNING: untranslated string: no dhcp lease = No DHCP lease has been acquired
@@ -1505,7 +1487,6 @@ WARNING: untranslated string: percentage = Percentage
WARNING: untranslated string: persistent = Persistent
WARNING: untranslated string: pfs yes no = Perfect Forward Secrecy (PFS)
WARNING: untranslated string: pkcs12 file password = PKCS12 File Password
-WARNING: untranslated string: play = Play
WARNING: untranslated string: please reboot to apply your changes = Please reboot to apply your changes
WARNING: untranslated string: policy = Policy
WARNING: untranslated string: port = Port
@@ -1517,7 +1498,6 @@ WARNING: untranslated string: pptp peer = Peer
WARNING: untranslated string: pptp route = PPTP Route
WARNING: untranslated string: pptp settings = Additional PPTP settings:
WARNING: untranslated string: pre-shared key is too short = Pre-shared key is too short.
-WARNING: untranslated string: prev = previous
WARNING: untranslated string: primary dns = Primary DNS:
WARNING: untranslated string: primary ntp server = Primary NTP server
WARNING: untranslated string: primary wins server address = Primary WINS server address
@@ -1553,7 +1533,6 @@ WARNING: untranslated string: pulse dial = Pulse dial:
WARNING: untranslated string: qos enter bandwidths = You will need to enter your downstream and upstream bandwidth!
WARNING: untranslated string: qos graphs = Qos Graphs
WARNING: untranslated string: qos warning = The rule <strong>must</strong> be saved, otherwise it will be discarded!
-WARNING: untranslated string: quick playlist = Quick Playlist
WARNING: untranslated string: ram = RAM
WARNING: untranslated string: rdns = rDNS
WARNING: untranslated string: read bytes = Bytes Read
@@ -1588,7 +1567,6 @@ WARNING: untranslated string: remote subnet is invalid = Remote subnet is invali
WARNING: untranslated string: remove = Remove
WARNING: untranslated string: remove ca certificate = Remove CA certificate
WARNING: untranslated string: remove x509 = Remove x509
-WARNING: untranslated string: repeat = Repeat
WARNING: untranslated string: request = Request
WARNING: untranslated string: required = Required
WARNING: untranslated string: required field = Required field
@@ -1651,7 +1629,6 @@ WARNING: untranslated string: show host certificate = Show host certificate
WARNING: untranslated string: show otp qrcode = Show OTP QRCode
WARNING: untranslated string: show root certificate = Show root certificate
WARNING: untranslated string: show tls-auth key = Show tls-auth key
-WARNING: untranslated string: shuffle = Shuffle
WARNING: untranslated string: shutdown = Shutdown
WARNING: untranslated string: shutdown control = Shutdown control
WARNING: untranslated string: shutting down = Shutting down
@@ -1747,9 +1724,7 @@ WARNING: untranslated string: time = Time
WARNING: untranslated string: time server = Time Server
WARNING: untranslated string: timeformat = %Y-%m-%d at %H:%M:%S %Z
WARNING: untranslated string: timeout must be a number = Timeout must be a number.
-WARNING: untranslated string: title = Title
WARNING: untranslated string: to = To
-WARNING: untranslated string: toggle = pause/resume
WARNING: untranslated string: toggle enable disable = Enable or disable
WARNING: untranslated string: token = Token:
WARNING: untranslated string: token not set = No Token has been given.
@@ -2119,10 +2094,6 @@ WARNING: untranslated string: version = Version
WARNING: untranslated string: virtual address = Virtual Address
WARNING: untranslated string: virtual private networking = Virtual Private Networking
WARNING: untranslated string: visit us at = Visit us at
-WARNING: untranslated string: voldown10 = Decrease volume by 10
-WARNING: untranslated string: voldown5 = Decrease volume by 5
-WARNING: untranslated string: volup10 = Increase volume by 10
-WARNING: untranslated string: volup5 = Increase volume by 5
WARNING: untranslated string: vpi number = VPI number:
WARNING: untranslated string: vpn = VPN
WARNING: untranslated string: vpn altname syntax = SubjectAltName is a comma separated list of email, dns, uri, rid and ip objects.<br />email:an email address. Syntax email:copy takes the email field from the cert to be used.<br />DNS:a valid domain name.<br />URI:any valid uri.<br />RID:registered object identifier.<br />IP:an IP address.<br />Note:charset is limited and case is significant.<br />Example:<br /><b>email:</b>ipfire(a)foo.org<b>,email:</b>copy<b>,DNS:</b>www.ipfire.org<b>,IP:</b>127.0.0.1<b>,URI:</b>http://url/to/something
@@ -2157,7 +2128,6 @@ WARNING: untranslated string: was deleted = was deleted
WARNING: untranslated string: web hits = Total number of websites matching selected criteria for
WARNING: untranslated string: web proxy = Web Proxy
WARNING: untranslated string: web server = Web Server
-WARNING: untranslated string: webradio playlist = Webradio Playlist
WARNING: untranslated string: website = Website
WARNING: untranslated string: wednesday = Wednesday
WARNING: untranslated string: weeks = Weeks
diff --git a/doc/language_issues.es b/doc/language_issues.es
index b33ffa2dc..0a89279d5 100644
--- a/doc/language_issues.es
+++ b/doc/language_issues.es
@@ -26,14 +26,18 @@ WARNING: translation string unused: ConnSched scheduler
WARNING: translation string unused: ConnSched select profile
WARNING: translation string unused: Daily
WARNING: translation string unused: Disabled
+WARNING: translation string unused: Existing Files
WARNING: translation string unused: HDD temperature
WARNING: translation string unused: Level7 rule
WARNING: translation string unused: Local VPN IP
+WARNING: translation string unused: Pages
WARNING: translation string unused: Ping
WARNING: translation string unused: Queuelenght
WARNING: translation string unused: Remote IP
WARNING: translation string unused: Remote VPN IP
WARNING: translation string unused: Resolv
+WARNING: translation string unused: Scan for Files
+WARNING: translation string unused: Scan from Directory
WARNING: translation string unused: Subclass
WARNING: translation string unused: TOS Bits
WARNING: translation string unused: Utilization on
@@ -112,6 +116,7 @@ WARNING: translation string unused: age seconds
WARNING: translation string unused: age shour
WARNING: translation string unused: age sminute
WARNING: translation string unused: age ssecond
+WARNING: translation string unused: album
WARNING: translation string unused: alcatelusb help
WARNING: translation string unused: alcatelusb upload
WARNING: translation string unused: all interfaces
@@ -125,6 +130,7 @@ WARNING: translation string unused: and
WARNING: translation string unused: ansi t1.483
WARNING: translation string unused: apply
WARNING: translation string unused: archive not exist
+WARNING: translation string unused: artist
WARNING: translation string unused: attemps
WARNING: translation string unused: avoid dod
WARNING: translation string unused: backup archive
@@ -177,6 +183,7 @@ WARNING: translation string unused: choose config
WARNING: translation string unused: choose media
WARNING: translation string unused: class in use
WARNING: translation string unused: clear cache
+WARNING: translation string unused: clear playlist
WARNING: translation string unused: client
WARNING: translation string unused: comment
WARNING: translation string unused: community rules
@@ -200,6 +207,7 @@ WARNING: translation string unused: create new backup
WARNING: translation string unused: cryptographic settings
WARNING: translation string unused: current media
WARNING: translation string unused: current ovpn
+WARNING: translation string unused: current playlist
WARNING: translation string unused: current profile
WARNING: translation string unused: custom networks
WARNING: translation string unused: custom services
@@ -414,6 +422,7 @@ WARNING: translation string unused: generatekeys
WARNING: translation string unused: generatepolicy
WARNING: translation string unused: generatereport
WARNING: translation string unused: genkey
+WARNING: translation string unused: genre
WARNING: translation string unused: gpl i accept these terms and conditions
WARNING: translation string unused: gpl license agreement
WARNING: translation string unused: gpl please read carefully the general public license and accept it below
@@ -588,6 +597,7 @@ WARNING: translation string unused: network traffic graphs
WARNING: translation string unused: network updated
WARNING: translation string unused: networks settings
WARNING: translation string unused: new optionsfw must boot
+WARNING: translation string unused: next
WARNING: translation string unused: no alcatelusb firmware
WARNING: translation string unused: no cfg upload
WARNING: translation string unused: no eciadsl synch.bin file
@@ -688,6 +698,7 @@ WARNING: translation string unused: pdc options
WARNING: translation string unused: phase1 group
WARNING: translation string unused: phonebook entry
WARNING: translation string unused: ping disabled
+WARNING: translation string unused: play
WARNING: translation string unused: polfile
WARNING: translation string unused: port forwarding configuration
WARNING: translation string unused: ports
@@ -695,6 +706,7 @@ WARNING: translation string unused: pots
WARNING: translation string unused: pppoe
WARNING: translation string unused: prefered master
WARNING: translation string unused: present
+WARNING: translation string unused: prev
WARNING: translation string unused: printcap name
WARNING: translation string unused: printer
WARNING: translation string unused: printername
@@ -709,6 +721,7 @@ WARNING: translation string unused: proxy port
WARNING: translation string unused: psk
WARNING: translation string unused: qos add subclass
WARNING: translation string unused: quick control
+WARNING: translation string unused: quick playlist
WARNING: translation string unused: random number generator daemon
WARNING: translation string unused: read list
WARNING: translation string unused: reboot ask
@@ -720,6 +733,7 @@ WARNING: translation string unused: registered user rules
WARNING: translation string unused: released
WARNING: translation string unused: reload
WARNING: translation string unused: removable device advice
+WARNING: translation string unused: repeat
WARNING: translation string unused: reportfile
WARNING: translation string unused: reportlevel
WARNING: translation string unused: requested data
@@ -765,6 +779,7 @@ WARNING: translation string unused: show areas
WARNING: translation string unused: show last x lines
WARNING: translation string unused: show lines
WARNING: translation string unused: show share options
+WARNING: translation string unused: shuffle
WARNING: translation string unused: shutdown ask
WARNING: translation string unused: shutdown sure
WARNING: translation string unused: shutdown2
@@ -829,9 +844,11 @@ 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
+WARNING: translation string unused: toggle
WARNING: translation string unused: too long 80 char max
WARNING: translation string unused: tor 0 = disabled
WARNING: translation string unused: tor accounting period daily
@@ -919,6 +936,10 @@ WARNING: translation string unused: use dov
WARNING: translation string unused: use ibod
WARNING: translation string unused: view log
WARNING: translation string unused: visible in browselist
+WARNING: translation string unused: voldown10
+WARNING: translation string unused: voldown5
+WARNING: translation string unused: volup10
+WARNING: translation string unused: volup5
WARNING: translation string unused: vpn aggrmode
WARNING: translation string unused: vpn configuration main
WARNING: translation string unused: vpn delayed start
@@ -932,6 +953,7 @@ WARNING: translation string unused: vpn red name
WARNING: translation string unused: vpn watch
WARNING: translation string unused: warn when traffic reaches
WARNING: translation string unused: web proxy configuration
+WARNING: translation string unused: webradio playlist
WARNING: translation string unused: week
WARNING: translation string unused: week-graph
WARNING: translation string unused: weekly firewallhits
@@ -977,7 +999,6 @@ WARNING: translation string unused: zoneconf val vlan tag range error
WARNING: translation string unused: zoneconf val zoneslave amount error
WARNING: untranslated string: Captive ACTIVATE = unknown string
WARNING: untranslated string: Captive clients = unknown string
-WARNING: untranslated string: Scan for Songs = unknown string
WARNING: untranslated string: access point name = Access Point Name
WARNING: untranslated string: access point name is invalid = Access Point Name is invalid
WARNING: untranslated string: access point name is required = Access Point Name is required
diff --git a/doc/language_issues.fr b/doc/language_issues.fr
index 93466bd9e..7f9349bc0 100644
--- a/doc/language_issues.fr
+++ b/doc/language_issues.fr
@@ -28,14 +28,19 @@ WARNING: translation string unused: ConnSched scheduler
WARNING: translation string unused: ConnSched select profile
WARNING: translation string unused: Daily
WARNING: translation string unused: Disabled
+WARNING: translation string unused: Existing Files
WARNING: translation string unused: HDD temperature
WARNING: translation string unused: Level7 rule
WARNING: translation string unused: Local VPN IP
+WARNING: translation string unused: Pages
WARNING: translation string unused: Ping
WARNING: translation string unused: Queuelenght
WARNING: translation string unused: Remote IP
WARNING: translation string unused: Remote VPN IP
WARNING: translation string unused: Resolv
+WARNING: translation string unused: Scan for Files
+WARNING: translation string unused: Scan for Songs
+WARNING: translation string unused: Scan from Directory
WARNING: translation string unused: Subclass
WARNING: translation string unused: TOS Bits
WARNING: translation string unused: Utilization on
@@ -115,6 +120,7 @@ WARNING: translation string unused: age seconds
WARNING: translation string unused: age shour
WARNING: translation string unused: age sminute
WARNING: translation string unused: age ssecond
+WARNING: translation string unused: album
WARNING: translation string unused: alcatelusb help
WARNING: translation string unused: alcatelusb upload
WARNING: translation string unused: all interfaces
@@ -127,6 +133,7 @@ WARNING: translation string unused: alt vpn
WARNING: translation string unused: and
WARNING: translation string unused: apply
WARNING: translation string unused: archive not exist
+WARNING: translation string unused: artist
WARNING: translation string unused: attemps
WARNING: translation string unused: avoid dod
WARNING: translation string unused: backup archive
@@ -179,6 +186,7 @@ WARNING: translation string unused: choose config
WARNING: translation string unused: choose media
WARNING: translation string unused: class in use
WARNING: translation string unused: clear cache
+WARNING: translation string unused: clear playlist
WARNING: translation string unused: client
WARNING: translation string unused: comment
WARNING: translation string unused: community rules
@@ -202,6 +210,7 @@ WARNING: translation string unused: create new backup
WARNING: translation string unused: cryptographic settings
WARNING: translation string unused: current media
WARNING: translation string unused: current ovpn
+WARNING: translation string unused: current playlist
WARNING: translation string unused: current profile
WARNING: translation string unused: custom networks
WARNING: translation string unused: custom services
@@ -402,6 +411,7 @@ WARNING: translation string unused: generatekeys
WARNING: translation string unused: generatepolicy
WARNING: translation string unused: generatereport
WARNING: translation string unused: genkey
+WARNING: translation string unused: genre
WARNING: translation string unused: gpl i accept these terms and conditions
WARNING: translation string unused: gpl license agreement
WARNING: translation string unused: gpl please read carefully the general public license and accept it below
@@ -568,6 +578,7 @@ WARNING: translation string unused: network traffic graphs
WARNING: translation string unused: network updated
WARNING: translation string unused: networks settings
WARNING: translation string unused: new optionsfw must boot
+WARNING: translation string unused: next
WARNING: translation string unused: no alcatelusb firmware
WARNING: translation string unused: no cfg upload
WARNING: translation string unused: no eciadsl synch.bin file
@@ -662,6 +673,7 @@ WARNING: translation string unused: pdc options
WARNING: translation string unused: phase1 group
WARNING: translation string unused: phonebook entry
WARNING: translation string unused: ping disabled
+WARNING: translation string unused: play
WARNING: translation string unused: polfile
WARNING: translation string unused: port forwarding configuration
WARNING: translation string unused: ports
@@ -669,6 +681,7 @@ WARNING: translation string unused: pots
WARNING: translation string unused: pppoe
WARNING: translation string unused: prefered master
WARNING: translation string unused: present
+WARNING: translation string unused: prev
WARNING: translation string unused: printcap name
WARNING: translation string unused: printer
WARNING: translation string unused: printername
@@ -683,6 +696,7 @@ WARNING: translation string unused: proxy port
WARNING: translation string unused: psk
WARNING: translation string unused: qos add subclass
WARNING: translation string unused: quick control
+WARNING: translation string unused: quick playlist
WARNING: translation string unused: random number generator daemon
WARNING: translation string unused: read list
WARNING: translation string unused: reboot ask
@@ -694,6 +708,7 @@ WARNING: translation string unused: registered user rules
WARNING: translation string unused: released
WARNING: translation string unused: reload
WARNING: translation string unused: removable device advice
+WARNING: translation string unused: repeat
WARNING: translation string unused: reportfile
WARNING: translation string unused: reportlevel
WARNING: translation string unused: requested data
@@ -739,6 +754,7 @@ WARNING: translation string unused: show areas
WARNING: translation string unused: show last x lines
WARNING: translation string unused: show lines
WARNING: translation string unused: show share options
+WARNING: translation string unused: shuffle
WARNING: translation string unused: shutdown ask
WARNING: translation string unused: shutdown sure
WARNING: translation string unused: shutdown2
@@ -801,9 +817,11 @@ 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
+WARNING: translation string unused: toggle
WARNING: translation string unused: too long 80 char max
WARNING: translation string unused: tor 0 = disabled
WARNING: translation string unused: tor accounting period daily
@@ -889,6 +907,10 @@ WARNING: translation string unused: use dov
WARNING: translation string unused: use ibod
WARNING: translation string unused: view log
WARNING: translation string unused: visible in browselist
+WARNING: translation string unused: voldown10
+WARNING: translation string unused: voldown5
+WARNING: translation string unused: volup10
+WARNING: translation string unused: volup5
WARNING: translation string unused: vpn aggrmode
WARNING: translation string unused: vpn configuration main
WARNING: translation string unused: vpn delayed start
@@ -902,6 +924,7 @@ WARNING: translation string unused: vpn red name
WARNING: translation string unused: vpn watch
WARNING: translation string unused: warn when traffic reaches
WARNING: translation string unused: web proxy configuration
+WARNING: translation string unused: webradio playlist
WARNING: translation string unused: week
WARNING: translation string unused: week-graph
WARNING: translation string unused: weekly firewallhits
diff --git a/doc/language_issues.it b/doc/language_issues.it
index 426df7759..5870e2bc7 100644
--- a/doc/language_issues.it
+++ b/doc/language_issues.it
@@ -2,14 +2,18 @@ WARNING: translation string unused: Async logging enabled
WARNING: translation string unused: Client status and controlc
WARNING: translation string unused: ConnSched scheduler
WARNING: translation string unused: ConnSched select profile
+WARNING: translation string unused: Existing Files
WARNING: translation string unused: HDD temperature
WARNING: translation string unused: Level7 rule
WARNING: translation string unused: Local VPN IP
+WARNING: translation string unused: Pages
WARNING: translation string unused: Ping
WARNING: translation string unused: Queuelenght
WARNING: translation string unused: Remote IP
WARNING: translation string unused: Remote VPN IP
WARNING: translation string unused: Resolv
+WARNING: translation string unused: Scan for Files
+WARNING: translation string unused: Scan from Directory
WARNING: translation string unused: Subclass
WARNING: translation string unused: TOS Bits
WARNING: translation string unused: Utilization on
@@ -85,6 +89,7 @@ WARNING: translation string unused: age seconds
WARNING: translation string unused: age shour
WARNING: translation string unused: age sminute
WARNING: translation string unused: age ssecond
+WARNING: translation string unused: album
WARNING: translation string unused: alcatelusb help
WARNING: translation string unused: alcatelusb upload
WARNING: translation string unused: all interfaces
@@ -98,6 +103,7 @@ WARNING: translation string unused: and
WARNING: translation string unused: ansi t1.483
WARNING: translation string unused: apply
WARNING: translation string unused: archive not exist
+WARNING: translation string unused: artist
WARNING: translation string unused: attemps
WARNING: translation string unused: avoid dod
WARNING: translation string unused: backup archive
@@ -150,6 +156,7 @@ WARNING: translation string unused: choose config
WARNING: translation string unused: choose media
WARNING: translation string unused: class in use
WARNING: translation string unused: clear cache
+WARNING: translation string unused: clear playlist
WARNING: translation string unused: client
WARNING: translation string unused: comment
WARNING: translation string unused: community rules
@@ -172,6 +179,7 @@ WARNING: translation string unused: create mask
WARNING: translation string unused: create new backup
WARNING: translation string unused: current media
WARNING: translation string unused: current ovpn
+WARNING: translation string unused: current playlist
WARNING: translation string unused: current profile
WARNING: translation string unused: custom networks
WARNING: translation string unused: custom services
@@ -368,6 +376,7 @@ WARNING: translation string unused: generatekeys
WARNING: translation string unused: generatepolicy
WARNING: translation string unused: generatereport
WARNING: translation string unused: genkey
+WARNING: translation string unused: genre
WARNING: translation string unused: gpl i accept these terms and conditions
WARNING: translation string unused: gpl license agreement
WARNING: translation string unused: gpl please read carefully the general public license and accept it below
@@ -524,6 +533,7 @@ WARNING: translation string unused: network traffic graphs
WARNING: translation string unused: network updated
WARNING: translation string unused: networks settings
WARNING: translation string unused: new optionsfw must boot
+WARNING: translation string unused: next
WARNING: translation string unused: no alcatelusb firmware
WARNING: translation string unused: no cfg upload
WARNING: translation string unused: no eciadsl synch.bin file
@@ -616,6 +626,7 @@ WARNING: translation string unused: pdc options
WARNING: translation string unused: phase1 group
WARNING: translation string unused: phonebook entry
WARNING: translation string unused: ping disabled
+WARNING: translation string unused: play
WARNING: translation string unused: polfile
WARNING: translation string unused: port forwarding configuration
WARNING: translation string unused: ports
@@ -623,6 +634,7 @@ WARNING: translation string unused: pots
WARNING: translation string unused: pppoe
WARNING: translation string unused: prefered master
WARNING: translation string unused: present
+WARNING: translation string unused: prev
WARNING: translation string unused: printcap name
WARNING: translation string unused: printer
WARNING: translation string unused: printername
@@ -637,6 +649,7 @@ WARNING: translation string unused: proxy port
WARNING: translation string unused: psk
WARNING: translation string unused: qos add subclass
WARNING: translation string unused: quick control
+WARNING: translation string unused: quick playlist
WARNING: translation string unused: read list
WARNING: translation string unused: reboot ask
WARNING: translation string unused: reboot question
@@ -647,6 +660,7 @@ WARNING: translation string unused: registered user rules
WARNING: translation string unused: released
WARNING: translation string unused: reload
WARNING: translation string unused: removable device advice
+WARNING: translation string unused: repeat
WARNING: translation string unused: reportfile
WARNING: translation string unused: reportlevel
WARNING: translation string unused: requested data
@@ -691,6 +705,7 @@ WARNING: translation string unused: show areas
WARNING: translation string unused: show last x lines
WARNING: translation string unused: show lines
WARNING: translation string unused: show share options
+WARNING: translation string unused: shuffle
WARNING: translation string unused: shutdown ask
WARNING: translation string unused: shutdown sure
WARNING: translation string unused: shutdown2
@@ -755,9 +770,11 @@ 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
+WARNING: translation string unused: toggle
WARNING: translation string unused: too long 80 char max
WARNING: translation string unused: tor 0 = disabled
WARNING: translation string unused: tor accounting period daily
@@ -842,6 +859,10 @@ WARNING: translation string unused: use dov
WARNING: translation string unused: use ibod
WARNING: translation string unused: view log
WARNING: translation string unused: visible in browselist
+WARNING: translation string unused: voldown10
+WARNING: translation string unused: voldown5
+WARNING: translation string unused: volup10
+WARNING: translation string unused: volup5
WARNING: translation string unused: vpn aggrmode
WARNING: translation string unused: vpn configuration main
WARNING: translation string unused: vpn delayed start
@@ -855,6 +876,7 @@ WARNING: translation string unused: vpn red name
WARNING: translation string unused: vpn watch
WARNING: translation string unused: warn when traffic reaches
WARNING: translation string unused: web proxy configuration
+WARNING: translation string unused: webradio playlist
WARNING: translation string unused: week
WARNING: translation string unused: week-graph
WARNING: translation string unused: weekly firewallhits
@@ -917,7 +939,6 @@ WARNING: untranslated string: Captive vouchervalid = Allowed time for this coupo
WARNING: untranslated string: Captive wrong ext = Uploaded file has wrong filetype
WARNING: untranslated string: MTU settings = MTU settings:
WARNING: untranslated string: Number of Countries for the pie chart = Number of Countries for the pie chart
-WARNING: untranslated string: Scan for Songs = unknown string
WARNING: untranslated string: access point name = Access Point Name
WARNING: untranslated string: access point name is invalid = Access Point Name is invalid
WARNING: untranslated string: access point name is required = Access Point Name is required
diff --git a/doc/language_issues.nl b/doc/language_issues.nl
index 046e5943b..88493d1d9 100644
--- a/doc/language_issues.nl
+++ b/doc/language_issues.nl
@@ -2,14 +2,18 @@ WARNING: translation string unused: Async logging enabled
WARNING: translation string unused: Client status and controlc
WARNING: translation string unused: ConnSched scheduler
WARNING: translation string unused: ConnSched select profile
+WARNING: translation string unused: Existing Files
WARNING: translation string unused: HDD temperature
WARNING: translation string unused: Level7 rule
WARNING: translation string unused: Local VPN IP
+WARNING: translation string unused: Pages
WARNING: translation string unused: Ping
WARNING: translation string unused: Queuelenght
WARNING: translation string unused: Remote IP
WARNING: translation string unused: Remote VPN IP
WARNING: translation string unused: Resolv
+WARNING: translation string unused: Scan for Files
+WARNING: translation string unused: Scan from Directory
WARNING: translation string unused: Subclass
WARNING: translation string unused: TOS Bits
WARNING: translation string unused: Utilization on
@@ -85,6 +89,7 @@ WARNING: translation string unused: age seconds
WARNING: translation string unused: age shour
WARNING: translation string unused: age sminute
WARNING: translation string unused: age ssecond
+WARNING: translation string unused: album
WARNING: translation string unused: alcatelusb help
WARNING: translation string unused: alcatelusb upload
WARNING: translation string unused: all interfaces
@@ -98,6 +103,7 @@ WARNING: translation string unused: and
WARNING: translation string unused: ansi t1.483
WARNING: translation string unused: apply
WARNING: translation string unused: archive not exist
+WARNING: translation string unused: artist
WARNING: translation string unused: attemps
WARNING: translation string unused: avoid dod
WARNING: translation string unused: backup archive
@@ -150,6 +156,7 @@ WARNING: translation string unused: choose config
WARNING: translation string unused: choose media
WARNING: translation string unused: class in use
WARNING: translation string unused: clear cache
+WARNING: translation string unused: clear playlist
WARNING: translation string unused: client
WARNING: translation string unused: comment
WARNING: translation string unused: community rules
@@ -172,6 +179,7 @@ WARNING: translation string unused: create mask
WARNING: translation string unused: create new backup
WARNING: translation string unused: current media
WARNING: translation string unused: current ovpn
+WARNING: translation string unused: current playlist
WARNING: translation string unused: current profile
WARNING: translation string unused: custom networks
WARNING: translation string unused: custom services
@@ -369,6 +377,7 @@ WARNING: translation string unused: generatekeys
WARNING: translation string unused: generatepolicy
WARNING: translation string unused: generatereport
WARNING: translation string unused: genkey
+WARNING: translation string unused: genre
WARNING: translation string unused: gpl i accept these terms and conditions
WARNING: translation string unused: gpl license agreement
WARNING: translation string unused: gpl please read carefully the general public license and accept it below
@@ -526,6 +535,7 @@ WARNING: translation string unused: network traffic graphs
WARNING: translation string unused: network updated
WARNING: translation string unused: networks settings
WARNING: translation string unused: new optionsfw must boot
+WARNING: translation string unused: next
WARNING: translation string unused: no alcatelusb firmware
WARNING: translation string unused: no cfg upload
WARNING: translation string unused: no eciadsl synch.bin file
@@ -616,6 +626,7 @@ WARNING: translation string unused: pdc options
WARNING: translation string unused: phase1 group
WARNING: translation string unused: phonebook entry
WARNING: translation string unused: ping disabled
+WARNING: translation string unused: play
WARNING: translation string unused: polfile
WARNING: translation string unused: port forwarding configuration
WARNING: translation string unused: ports
@@ -623,6 +634,7 @@ WARNING: translation string unused: pots
WARNING: translation string unused: pppoe
WARNING: translation string unused: prefered master
WARNING: translation string unused: present
+WARNING: translation string unused: prev
WARNING: translation string unused: printcap name
WARNING: translation string unused: printer
WARNING: translation string unused: printername
@@ -637,6 +649,7 @@ WARNING: translation string unused: proxy port
WARNING: translation string unused: psk
WARNING: translation string unused: qos add subclass
WARNING: translation string unused: quick control
+WARNING: translation string unused: quick playlist
WARNING: translation string unused: read list
WARNING: translation string unused: reboot ask
WARNING: translation string unused: reboot question
@@ -647,6 +660,7 @@ WARNING: translation string unused: registered user rules
WARNING: translation string unused: released
WARNING: translation string unused: reload
WARNING: translation string unused: removable device advice
+WARNING: translation string unused: repeat
WARNING: translation string unused: reportfile
WARNING: translation string unused: reportlevel
WARNING: translation string unused: requested data
@@ -691,6 +705,7 @@ WARNING: translation string unused: show areas
WARNING: translation string unused: show last x lines
WARNING: translation string unused: show lines
WARNING: translation string unused: show share options
+WARNING: translation string unused: shuffle
WARNING: translation string unused: shutdown ask
WARNING: translation string unused: shutdown sure
WARNING: translation string unused: shutdown2
@@ -756,9 +771,11 @@ 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
+WARNING: translation string unused: toggle
WARNING: translation string unused: too long 80 char max
WARNING: translation string unused: tor 0 = disabled
WARNING: translation string unused: tor accounting period daily
@@ -843,6 +860,10 @@ WARNING: translation string unused: use dov
WARNING: translation string unused: use ibod
WARNING: translation string unused: view log
WARNING: translation string unused: visible in browselist
+WARNING: translation string unused: voldown10
+WARNING: translation string unused: voldown5
+WARNING: translation string unused: volup10
+WARNING: translation string unused: volup5
WARNING: translation string unused: vpn aggrmode
WARNING: translation string unused: vpn configuration main
WARNING: translation string unused: vpn delayed start
@@ -856,6 +877,7 @@ WARNING: translation string unused: vpn red name
WARNING: translation string unused: vpn watch
WARNING: translation string unused: warn when traffic reaches
WARNING: translation string unused: web proxy configuration
+WARNING: translation string unused: webradio playlist
WARNING: translation string unused: week
WARNING: translation string unused: week-graph
WARNING: translation string unused: weekly firewallhits
@@ -918,7 +940,6 @@ WARNING: untranslated string: Captive vouchervalid = Allowed time for this coupo
WARNING: untranslated string: Captive wrong ext = Uploaded file has wrong filetype
WARNING: untranslated string: MTU settings = MTU settings:
WARNING: untranslated string: Number of Countries for the pie chart = Number of Countries for the pie chart
-WARNING: untranslated string: Scan for Songs = unknown string
WARNING: untranslated string: access point name = Access Point Name
WARNING: untranslated string: access point name is invalid = Access Point Name is invalid
WARNING: untranslated string: access point name is required = Access Point Name is required
diff --git a/doc/language_issues.pl b/doc/language_issues.pl
index f0a60ab30..5f3806102 100644
--- a/doc/language_issues.pl
+++ b/doc/language_issues.pl
@@ -2,14 +2,18 @@ WARNING: translation string unused: Async logging enabled
WARNING: translation string unused: Client status and controlc
WARNING: translation string unused: ConnSched scheduler
WARNING: translation string unused: ConnSched select profile
+WARNING: translation string unused: Existing Files
WARNING: translation string unused: HDD temperature
WARNING: translation string unused: Level7 rule
WARNING: translation string unused: Local VPN IP
+WARNING: translation string unused: Pages
WARNING: translation string unused: Ping
WARNING: translation string unused: Queuelenght
WARNING: translation string unused: Remote IP
WARNING: translation string unused: Remote VPN IP
WARNING: translation string unused: Resolv
+WARNING: translation string unused: Scan for Files
+WARNING: translation string unused: Scan from Directory
WARNING: translation string unused: Subclass
WARNING: translation string unused: TOS Bits
WARNING: translation string unused: Utilization on
@@ -80,6 +84,7 @@ WARNING: translation string unused: advproxy update information
WARNING: translation string unused: advproxy update notification
WARNING: translation string unused: advproxy web browser
WARNING: translation string unused: again
+WARNING: translation string unused: album
WARNING: translation string unused: alcatelusb help
WARNING: translation string unused: alcatelusb upload
WARNING: translation string unused: all interfaces
@@ -93,6 +98,7 @@ WARNING: translation string unused: and
WARNING: translation string unused: ansi t1.483
WARNING: translation string unused: apply
WARNING: translation string unused: archive not exist
+WARNING: translation string unused: artist
WARNING: translation string unused: attemps
WARNING: translation string unused: avoid dod
WARNING: translation string unused: backup archive
@@ -143,6 +149,7 @@ WARNING: translation string unused: choose config
WARNING: translation string unused: choose media
WARNING: translation string unused: class in use
WARNING: translation string unused: clear cache
+WARNING: translation string unused: clear playlist
WARNING: translation string unused: client
WARNING: translation string unused: comment
WARNING: translation string unused: compression
@@ -164,6 +171,7 @@ WARNING: translation string unused: create mask
WARNING: translation string unused: create new backup
WARNING: translation string unused: current media
WARNING: translation string unused: current ovpn
+WARNING: translation string unused: current playlist
WARNING: translation string unused: current profile
WARNING: translation string unused: custom networks
WARNING: translation string unused: custom services
@@ -309,6 +317,7 @@ WARNING: translation string unused: generatekeys
WARNING: translation string unused: generatepolicy
WARNING: translation string unused: generatereport
WARNING: translation string unused: genkey
+WARNING: translation string unused: genre
WARNING: translation string unused: gpl i accept these terms and conditions
WARNING: translation string unused: gpl license agreement
WARNING: translation string unused: gpl please read carefully the general public license and accept it below
@@ -463,6 +472,7 @@ WARNING: translation string unused: network traffic graphs
WARNING: translation string unused: network updated
WARNING: translation string unused: networks settings
WARNING: translation string unused: new optionsfw must boot
+WARNING: translation string unused: next
WARNING: translation string unused: no alcatelusb firmware
WARNING: translation string unused: no cfg upload
WARNING: translation string unused: no eciadsl synch.bin file
@@ -541,6 +551,7 @@ WARNING: translation string unused: pdc options
WARNING: translation string unused: phase1 group
WARNING: translation string unused: phonebook entry
WARNING: translation string unused: ping disabled
+WARNING: translation string unused: play
WARNING: translation string unused: polfile
WARNING: translation string unused: port forwarding configuration
WARNING: translation string unused: ports
@@ -548,6 +559,7 @@ WARNING: translation string unused: pots
WARNING: translation string unused: pppoe
WARNING: translation string unused: prefered master
WARNING: translation string unused: present
+WARNING: translation string unused: prev
WARNING: translation string unused: printcap name
WARNING: translation string unused: printer
WARNING: translation string unused: printername
@@ -562,6 +574,7 @@ WARNING: translation string unused: proxy port
WARNING: translation string unused: psk
WARNING: translation string unused: qos add subclass
WARNING: translation string unused: quick control
+WARNING: translation string unused: quick playlist
WARNING: translation string unused: read list
WARNING: translation string unused: reboot ask
WARNING: translation string unused: reboot question
@@ -572,6 +585,7 @@ WARNING: translation string unused: registered user rules
WARNING: translation string unused: released
WARNING: translation string unused: reload
WARNING: translation string unused: removable device advice
+WARNING: translation string unused: repeat
WARNING: translation string unused: reportfile
WARNING: translation string unused: reportlevel
WARNING: translation string unused: requested data
@@ -616,6 +630,7 @@ WARNING: translation string unused: show areas
WARNING: translation string unused: show last x lines
WARNING: translation string unused: show lines
WARNING: translation string unused: show share options
+WARNING: translation string unused: shuffle
WARNING: translation string unused: shutdown ask
WARNING: translation string unused: shutdown sure
WARNING: translation string unused: shutdown2
@@ -679,9 +694,11 @@ 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
+WARNING: translation string unused: toggle
WARNING: translation string unused: too long 80 char max
WARNING: translation string unused: traffic back
WARNING: translation string unused: traffic calc time
@@ -754,6 +771,10 @@ WARNING: translation string unused: use dov
WARNING: translation string unused: use ibod
WARNING: translation string unused: view log
WARNING: translation string unused: visible in browselist
+WARNING: translation string unused: voldown10
+WARNING: translation string unused: voldown5
+WARNING: translation string unused: volup10
+WARNING: translation string unused: volup5
WARNING: translation string unused: vpn aggrmode
WARNING: translation string unused: vpn configuration main
WARNING: translation string unused: vpn delayed start
@@ -767,6 +788,7 @@ WARNING: translation string unused: vpn red name
WARNING: translation string unused: vpn watch
WARNING: translation string unused: warn when traffic reaches
WARNING: translation string unused: web proxy configuration
+WARNING: translation string unused: webradio playlist
WARNING: translation string unused: week
WARNING: translation string unused: week-graph
WARNING: translation string unused: weekly firewallhits
@@ -834,7 +856,6 @@ WARNING: untranslated string: MB read = MB read
WARNING: untranslated string: MB written = MB written
WARNING: untranslated string: MTU settings = MTU settings:
WARNING: untranslated string: Number of Countries for the pie chart = Number of Countries for the pie chart
-WARNING: untranslated string: Scan for Songs = unknown string
WARNING: untranslated string: access point name = Access Point Name
WARNING: untranslated string: access point name is invalid = Access Point Name is invalid
WARNING: untranslated string: access point name is required = Access Point Name is required
diff --git a/doc/language_issues.ru b/doc/language_issues.ru
index a8f2c1549..8891ce20e 100644
--- a/doc/language_issues.ru
+++ b/doc/language_issues.ru
@@ -2,14 +2,18 @@ WARNING: translation string unused: Async logging enabled
WARNING: translation string unused: Client status and controlc
WARNING: translation string unused: ConnSched scheduler
WARNING: translation string unused: ConnSched select profile
+WARNING: translation string unused: Existing Files
WARNING: translation string unused: HDD temperature
WARNING: translation string unused: Level7 rule
WARNING: translation string unused: Local VPN IP
+WARNING: translation string unused: Pages
WARNING: translation string unused: Ping
WARNING: translation string unused: Queuelenght
WARNING: translation string unused: Remote IP
WARNING: translation string unused: Remote VPN IP
WARNING: translation string unused: Resolv
+WARNING: translation string unused: Scan for Files
+WARNING: translation string unused: Scan from Directory
WARNING: translation string unused: Subclass
WARNING: translation string unused: TOS Bits
WARNING: translation string unused: Utilization on
@@ -80,6 +84,7 @@ WARNING: translation string unused: advproxy update information
WARNING: translation string unused: advproxy update notification
WARNING: translation string unused: advproxy web browser
WARNING: translation string unused: again
+WARNING: translation string unused: album
WARNING: translation string unused: alcatelusb help
WARNING: translation string unused: alcatelusb upload
WARNING: translation string unused: all interfaces
@@ -93,6 +98,7 @@ WARNING: translation string unused: and
WARNING: translation string unused: ansi t1.483
WARNING: translation string unused: apply
WARNING: translation string unused: archive not exist
+WARNING: translation string unused: artist
WARNING: translation string unused: attemps
WARNING: translation string unused: avoid dod
WARNING: translation string unused: backup archive
@@ -143,6 +149,7 @@ WARNING: translation string unused: choose config
WARNING: translation string unused: choose media
WARNING: translation string unused: class in use
WARNING: translation string unused: clear cache
+WARNING: translation string unused: clear playlist
WARNING: translation string unused: client
WARNING: translation string unused: comment
WARNING: translation string unused: compression
@@ -164,6 +171,7 @@ WARNING: translation string unused: create mask
WARNING: translation string unused: create new backup
WARNING: translation string unused: current media
WARNING: translation string unused: current ovpn
+WARNING: translation string unused: current playlist
WARNING: translation string unused: current profile
WARNING: translation string unused: custom networks
WARNING: translation string unused: custom services
@@ -306,6 +314,7 @@ WARNING: translation string unused: generatekeys
WARNING: translation string unused: generatepolicy
WARNING: translation string unused: generatereport
WARNING: translation string unused: genkey
+WARNING: translation string unused: genre
WARNING: translation string unused: gpl i accept these terms and conditions
WARNING: translation string unused: gpl license agreement
WARNING: translation string unused: gpl please read carefully the general public license and accept it below
@@ -458,6 +467,7 @@ WARNING: translation string unused: network traffic graphs
WARNING: translation string unused: network updated
WARNING: translation string unused: networks settings
WARNING: translation string unused: new optionsfw must boot
+WARNING: translation string unused: next
WARNING: translation string unused: no alcatelusb firmware
WARNING: translation string unused: no cfg upload
WARNING: translation string unused: no eciadsl synch.bin file
@@ -536,6 +546,7 @@ WARNING: translation string unused: pdc options
WARNING: translation string unused: phase1 group
WARNING: translation string unused: phonebook entry
WARNING: translation string unused: ping disabled
+WARNING: translation string unused: play
WARNING: translation string unused: polfile
WARNING: translation string unused: port forwarding configuration
WARNING: translation string unused: ports
@@ -543,6 +554,7 @@ WARNING: translation string unused: pots
WARNING: translation string unused: pppoe
WARNING: translation string unused: prefered master
WARNING: translation string unused: present
+WARNING: translation string unused: prev
WARNING: translation string unused: printcap name
WARNING: translation string unused: printer
WARNING: translation string unused: printername
@@ -557,6 +569,7 @@ WARNING: translation string unused: proxy port
WARNING: translation string unused: psk
WARNING: translation string unused: qos add subclass
WARNING: translation string unused: quick control
+WARNING: translation string unused: quick playlist
WARNING: translation string unused: read list
WARNING: translation string unused: reboot ask
WARNING: translation string unused: reboot question
@@ -567,6 +580,7 @@ WARNING: translation string unused: registered user rules
WARNING: translation string unused: released
WARNING: translation string unused: reload
WARNING: translation string unused: removable device advice
+WARNING: translation string unused: repeat
WARNING: translation string unused: reportfile
WARNING: translation string unused: reportlevel
WARNING: translation string unused: requested data
@@ -611,6 +625,7 @@ WARNING: translation string unused: show areas
WARNING: translation string unused: show last x lines
WARNING: translation string unused: show lines
WARNING: translation string unused: show share options
+WARNING: translation string unused: shuffle
WARNING: translation string unused: shutdown ask
WARNING: translation string unused: shutdown sure
WARNING: translation string unused: shutdown2
@@ -674,9 +689,11 @@ 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
+WARNING: translation string unused: toggle
WARNING: translation string unused: too long 80 char max
WARNING: translation string unused: traffic back
WARNING: translation string unused: traffic calc time
@@ -749,6 +766,10 @@ WARNING: translation string unused: use dov
WARNING: translation string unused: use ibod
WARNING: translation string unused: view log
WARNING: translation string unused: visible in browselist
+WARNING: translation string unused: voldown10
+WARNING: translation string unused: voldown5
+WARNING: translation string unused: volup10
+WARNING: translation string unused: volup5
WARNING: translation string unused: vpn aggrmode
WARNING: translation string unused: vpn configuration main
WARNING: translation string unused: vpn delayed start
@@ -762,6 +783,7 @@ WARNING: translation string unused: vpn red name
WARNING: translation string unused: vpn watch
WARNING: translation string unused: warn when traffic reaches
WARNING: translation string unused: web proxy configuration
+WARNING: translation string unused: webradio playlist
WARNING: translation string unused: week
WARNING: translation string unused: weekly firewallhits
WARNING: translation string unused: wildcards
@@ -829,7 +851,6 @@ WARNING: untranslated string: MB read = MB read
WARNING: untranslated string: MB written = MB written
WARNING: untranslated string: MTU settings = MTU settings:
WARNING: untranslated string: Number of Countries for the pie chart = Number of Countries for the pie chart
-WARNING: untranslated string: Scan for Songs = unknown string
WARNING: untranslated string: access point name = Access Point Name
WARNING: untranslated string: access point name is invalid = Access Point Name is invalid
WARNING: untranslated string: access point name is required = Access Point Name is required
diff --git a/doc/language_issues.tr b/doc/language_issues.tr
index 93619c0a4..c0cb2703a 100644
--- a/doc/language_issues.tr
+++ b/doc/language_issues.tr
@@ -23,14 +23,18 @@ WARNING: translation string unused: Captive voucher
WARNING: translation string unused: Captive vout
WARNING: translation string unused: ConnSched scheduler
WARNING: translation string unused: ConnSched select profile
+WARNING: translation string unused: Existing Files
WARNING: translation string unused: HDD temperature
WARNING: translation string unused: Level7 rule
WARNING: translation string unused: Local VPN IP
+WARNING: translation string unused: Pages
WARNING: translation string unused: Ping
WARNING: translation string unused: Queuelenght
WARNING: translation string unused: Remote IP
WARNING: translation string unused: Remote VPN IP
WARNING: translation string unused: Resolv
+WARNING: translation string unused: Scan for Files
+WARNING: translation string unused: Scan from Directory
WARNING: translation string unused: Subclass
WARNING: translation string unused: TOS Bits
WARNING: translation string unused: Utilization on
@@ -107,6 +111,7 @@ WARNING: translation string unused: age seconds
WARNING: translation string unused: age shour
WARNING: translation string unused: age sminute
WARNING: translation string unused: age ssecond
+WARNING: translation string unused: album
WARNING: translation string unused: alcatelusb help
WARNING: translation string unused: alcatelusb upload
WARNING: translation string unused: all interfaces
@@ -120,6 +125,7 @@ WARNING: translation string unused: and
WARNING: translation string unused: ansi t1.483
WARNING: translation string unused: apply
WARNING: translation string unused: archive not exist
+WARNING: translation string unused: artist
WARNING: translation string unused: attemps
WARNING: translation string unused: avoid dod
WARNING: translation string unused: backup archive
@@ -172,6 +178,7 @@ WARNING: translation string unused: choose config
WARNING: translation string unused: choose media
WARNING: translation string unused: class in use
WARNING: translation string unused: clear cache
+WARNING: translation string unused: clear playlist
WARNING: translation string unused: client
WARNING: translation string unused: comment
WARNING: translation string unused: community rules
@@ -194,6 +201,7 @@ WARNING: translation string unused: create mask
WARNING: translation string unused: create new backup
WARNING: translation string unused: current media
WARNING: translation string unused: current ovpn
+WARNING: translation string unused: current playlist
WARNING: translation string unused: current profile
WARNING: translation string unused: custom networks
WARNING: translation string unused: custom services
@@ -394,6 +402,7 @@ WARNING: translation string unused: generatekeys
WARNING: translation string unused: generatepolicy
WARNING: translation string unused: generatereport
WARNING: translation string unused: genkey
+WARNING: translation string unused: genre
WARNING: translation string unused: gpl i accept these terms and conditions
WARNING: translation string unused: gpl license agreement
WARNING: translation string unused: gpl please read carefully the general public license and accept it below
@@ -553,6 +562,7 @@ WARNING: translation string unused: network traffic graphs
WARNING: translation string unused: network updated
WARNING: translation string unused: networks settings
WARNING: translation string unused: new optionsfw must boot
+WARNING: translation string unused: next
WARNING: translation string unused: no alcatelusb firmware
WARNING: translation string unused: no cfg upload
WARNING: translation string unused: no eciadsl synch.bin file
@@ -646,6 +656,7 @@ WARNING: translation string unused: pdc options
WARNING: translation string unused: phase1 group
WARNING: translation string unused: phonebook entry
WARNING: translation string unused: ping disabled
+WARNING: translation string unused: play
WARNING: translation string unused: polfile
WARNING: translation string unused: port forwarding configuration
WARNING: translation string unused: ports
@@ -653,6 +664,7 @@ WARNING: translation string unused: pots
WARNING: translation string unused: pppoe
WARNING: translation string unused: prefered master
WARNING: translation string unused: present
+WARNING: translation string unused: prev
WARNING: translation string unused: printcap name
WARNING: translation string unused: printer
WARNING: translation string unused: printername
@@ -667,6 +679,7 @@ WARNING: translation string unused: proxy port
WARNING: translation string unused: psk
WARNING: translation string unused: qos add subclass
WARNING: translation string unused: quick control
+WARNING: translation string unused: quick playlist
WARNING: translation string unused: read list
WARNING: translation string unused: reboot ask
WARNING: translation string unused: reboot question
@@ -677,6 +690,7 @@ WARNING: translation string unused: registered user rules
WARNING: translation string unused: released
WARNING: translation string unused: reload
WARNING: translation string unused: removable device advice
+WARNING: translation string unused: repeat
WARNING: translation string unused: reportfile
WARNING: translation string unused: reportlevel
WARNING: translation string unused: requested data
@@ -721,6 +735,7 @@ WARNING: translation string unused: show areas
WARNING: translation string unused: show last x lines
WARNING: translation string unused: show lines
WARNING: translation string unused: show share options
+WARNING: translation string unused: shuffle
WARNING: translation string unused: shutdown ask
WARNING: translation string unused: shutdown sure
WARNING: translation string unused: shutdown2
@@ -785,9 +800,11 @@ 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
+WARNING: translation string unused: toggle
WARNING: translation string unused: too long 80 char max
WARNING: translation string unused: tor 0 = disabled
WARNING: translation string unused: tor accounting period daily
@@ -872,6 +889,10 @@ WARNING: translation string unused: use dov
WARNING: translation string unused: use ibod
WARNING: translation string unused: view log
WARNING: translation string unused: visible in browselist
+WARNING: translation string unused: voldown10
+WARNING: translation string unused: voldown5
+WARNING: translation string unused: volup10
+WARNING: translation string unused: volup5
WARNING: translation string unused: vpn aggrmode
WARNING: translation string unused: vpn configuration main
WARNING: translation string unused: vpn delayed start
@@ -885,6 +906,7 @@ WARNING: translation string unused: vpn red name
WARNING: translation string unused: vpn watch
WARNING: translation string unused: warn when traffic reaches
WARNING: translation string unused: web proxy configuration
+WARNING: translation string unused: webradio playlist
WARNING: translation string unused: week
WARNING: translation string unused: week-graph
WARNING: translation string unused: weekly firewallhits
@@ -911,7 +933,6 @@ WARNING: translation string unused: year-graph
WARNING: translation string unused: yearly firewallhits
WARNING: untranslated string: Captive clients = unknown string
WARNING: untranslated string: Captive delete logo = Delete Logo
-WARNING: untranslated string: Scan for Songs = unknown string
WARNING: untranslated string: access point name = Access Point Name
WARNING: untranslated string: access point name is invalid = Access Point Name is invalid
WARNING: untranslated string: access point name is required = Access Point Name is required
diff --git a/html/cgi-bin/mpfire.cgi b/html/cgi-bin/mpfire.cgi
deleted file mode 100644
index 5685053e6..000000000
--- a/html/cgi-bin/mpfire.cgi
+++ /dev/null
@@ -1,673 +0,0 @@
-#!/usr/bin/perl
-###############################################################################
-# #
-# IPFire.org - A linux based firewall #
-# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
-# #
-# This program 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 3 of the License, or #
-# (at your option) any later version. #
-# #
-# This program 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 this program. If not, see <http://www.gnu.org/licenses/>. #
-# #
-###############################################################################
-
-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";
-
-my %color = ();
-my %mainsettings = ();
-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/ipfire/include/colors.txt", \%color);
-
-&Header::showhttpheaders();
-
-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,85)." =-<br /> ";
- if ( $song eq "-= | =-<br /> " ){
- $song = "None<br />"
- };
- $song .= $mpd->current()->Track()."# ".substr($mpd->current()->Album(),0,90)."<br />";
- }else{
- $song = "None<br /><br />";
- }
-
- if ( $song eq "None<br /># <br />" ){
- $song = "None<br />".substr($mpd->current()->file(),0,90)."<br />"
- };
- $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 <<END
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<meta http-equiv='refresh' content='5'>
-<title></title>
-<body>
-<table width='100%' cellspacing='0' align='center' style="background-image:url(/images/mpfire/box.png);background-repeat:no-repeat">
-END
-;
- print"<tr ><td align='center'><font color='red' face='Verdana' size='2'><br />".encode('utf-8', $song)."<br /><br /></font></td></tr></table></body>";
- 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
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<title></title>
-<body>
-<table width='95%' cellspacing='0'>
-<tr>
-<td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}?control'><input type='hidden' name='ACTION' value='<<' /><input type='image' alt='$Lang::tr{'prev'}' title='$Lang::tr{'prev'}' src='/images/media-skip-backward.png' /></form></td>
-<td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}?control'><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'}?control'><input type='hidden' name='ACTION' value='|>' /><input type='image' alt='$Lang::tr{'toggle'}' title='$Lang::tr{'toggle'}' src='/images/media-resume.png' /></form></td>
-<td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}?control'><input type='hidden' name='ACTION' value='>' /><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'}?control'><input type='hidden' name='ACTION' value='playall' /><input type='image' alt='$Lang::tr{'play'} all' title='$Lang::tr{'play'} all' src='/images/media-playback-start-all.png' /></form></td>
-<td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}?control'><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
-;
- print <<END
-<tr>
-<td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}?control'><input type='hidden' name='ACTION' value='repeat' /><input type='image' alt='$Lang::tr{'repeat'}' title='$Lang::tr{'repeat'}' src='/images/media-repeat.png' /></form></td>
-<td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}?control'><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'}?control'><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'}?control'><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'}?control'><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>
-<td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}?control'><input type='hidden' name='ACTION' value='shuffle' /><input type='image' alt='$Lang::tr{'shuffle'}' title='$Lang::tr{'shuffle'}' src='/images/media-shuffle.png' /></form></td>
-</tr>
-</table>
-</body>
-END
-;
- exit;
-}
-
-# just a little subpage to handle automatic page refresh on demand ( 1 sec )
-sub refreshpage{
- &Header::openbox( 'Waiting', 1, "<meta http-equiv='refresh' content='1;' />" );
- print "<center><img src='/images/clock.gif' alt='' /><br/><font color='red'>$Lang::tr{'pagerefresh'}</font></center>";
- &Header::closebox();
-}
-
-# 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, "<meta http-equiv='refresh' content='5;' />" );
- print "<center><img src='/images/clock.gif' alt='' /><br/><font color='red'>Database is updating, please be patient.</font></center>";
- &Header::closebox();
- &Header::closebigbox();
- &Header::closepage();
- exit;
-}
-
-if ( $mpfiresettings{'PAGE'} eq "" ){ $mpfiresettings{'PAGE'} = "1";};
-if ( $mpfiresettings{'FRAME'} eq "" ){$mpfiresettings{'FRAME'} = "webradio";};
-
-&Header::getcgihash(\%mpfiresettings);
-&Header::openpage($Lang::tr{'mpfire'}, 1,);
-&Header::openbigbox('100%', 'left', '', $errormessage);
-
-############################################################################################################################
-######################################## Scanne Verzeichnisse nach Mp3 Dateien #############################################
-
-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'};
- delete $mpfiresettings{'PAGE'}; delete $mpfiresettings{'FRAME'};
- &General::writehash("${General::swroot}/mpfire/settings", \%mpfiresettings);
-
- open(DATEI, "<${General::swroot}/mpd/mpd.conf") || die "Datei nicht gefunden";
- my @Zeilen = <DATEI>;
- close(DATEI);
-
- open(DATEI, ">${General::swroot}/mpd/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= &General::system_output("/usr/local/bin/mpfirectrl","playweb","\"$mpfiresettings{'FILE'}\"");
-}elsif ( $mpfiresettings{'ACTION'} eq "playlist" ){
- $mpd->play();
-}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();
-}
-
- 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'} = "/var/mp3";
-&General::readhash("${General::swroot}/mpfire/settings", \%mpfiresettings);
-
-############################################################################################################################
-########################################### rekursiv nach neuen Mp3s Scannen ##############################################ä
-
-if ( $message ne '0' ){
- print "<font color='red'>An Error occured while launching the command</font>";
-}elsif ( $message ne "" && $message ne '0' ){
- print "<font color='red'>$message</font>";
-}
-
-&Header::openbox('100%', 'center', $Lang::tr{'mpfire scanning'});
-# box to enter the music directory and initiate the scan process
-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='MUSICDIR' value='$mpfiresettings{'MUSICDIR'}' size="50" /></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'});
-# box for the two iframes showing the current playbar and the control buttons
-print <<END
-<iframe height='85' width='685' src='/cgi-bin/mpfire.cgi?title' scrolling='no' frameborder='no' marginheight='0'></iframe>
-<iframe height='50' width='685' src='/cgi-bin/mpfire.cgi?control' scrolling='no' frameborder='no' marginheight='0'></iframe>
-END
-;
-print "<b>Songs:".$mpd->stats()->songs()."</b><br />";
-
-&Header::closebox();
-
-&Header::openbox('100%', 'center', '');
-print <<END
-<tr><td align='center' colspan='4'>
-<form method='post' action='$ENV{'SCRIPT_NAME'}'>
-END
-;
-my @buttons=("webradio", "quick playlist","songs");
-foreach (@buttons){
- if ( $mpfiresettings{'FRAME'} eq $_ ) {
- print "<input type='submit' name='FRAME' value='$_' disabled />";
- } else {
- print "<input type='submit' name='FRAME' value='$_' />";
- }
-}
-
-print <<END
-</form></td></tr>
-END
-;
-&Header::closebox();
-
-if ( $mpfiresettings{'FRAME'} eq "quick playlist" )
-{
-&Header::openbox('100%', 'center', $Lang::tr{'quick playlist'});
-# box to quickly select artist, album, year or genre and play the selection
-print "<table width='95%' cellspacing='0'>";
-print "<tr><td align='center' bgcolor='$color{'color20'}'><b>$Lang::tr{'artist'} - ".$mpd->stats()->artists()."</b></td><td align='center' bgcolor='$color{'color20'}'><b>$Lang::tr{'album'} - ".$mpd->stats()->albums()."</b></td></tr>";
-
-print <<END
-<tr><td align='center'>
-<form method='post' action='$ENV{'SCRIPT_NAME'}'>
-<select name='artist' size='8' multiple='multiple' style='width:300px;'>
-END
-;
-
-foreach (sort($mpd->collection->all_artists())){
- if ( $_ ne '' ){
- print "<option>".encode('utf-8', $_)."</option>\n";
- }
-}
-
-print <<END
-</select><br/>
-<input type='hidden' name='ACTION' value='playartist' />
-<input type='image' alt='$Lang::tr{'play'}' title='$Lang::tr{'play'}' src='/images/media-playback-start.png' />
-<input type='hidden' name='FRAME' value='$mpfiresettings{'FRAME'}' />
-</form></td>
-<td align='center'>
-<form method='post' action='$ENV{'SCRIPT_NAME'}'>
-<select name='album' size='8' multiple='multiple' style='width:300px;'>
-END
-;
-
-foreach (sort($mpd->collection->all_albums())){
- if ( $_ ne '' ){
- print "<option>".encode('utf-8', $_)."</option>\n";
- }
-}
-
-print <<END
-</select><br/>
-<input type='hidden' name='ACTION' value='playalbum' />
-<input type='image' alt='$Lang::tr{'play'}' title='$Lang::tr{'play'}' src='/images/media-playback-start.png' />
-<input type='hidden' name='FRAME' value='$mpfiresettings{'FRAME'}' />
-</form></td>
-</tr>
-<tr><td align='center' bgcolor='$color{'color20'}'><b>$Lang::tr{'year'}</b></td><td align='center' bgcolor='$color{'color20'}'><b>$Lang::tr{'genre'}</b></td></tr>
-<tr><td align='center'>
-<form method='post' action='$ENV{'SCRIPT_NAME'}'>
-<select name='year' size='8' multiple='multiple' style='width:300px;'>
-END
-;
-
-foreach (sort($mpd->collection->all_years())){
- if ( $_ ne '' ){
- print "<option>$_</option>\n";
- }
-}
-
-print <<END
-</select><br/>
-<input type='hidden' name='ACTION' value='playyear' />
-<input type='image' alt='$Lang::tr{'play'}' title='$Lang::tr{'play'}' src='/images/media-playback-start.png' />
-<input type='hidden' name='FRAME' value='$mpfiresettings{'FRAME'}' />
-</form></td>
-<td align='center'>
-<form method='post' action='$ENV{'SCRIPT_NAME'}'>
-<select name='genre' size='8' multiple='multiple' style='width:300px;'>
-END
-;
-
-foreach (sort($mpd->collection->all_genre())){
- if ( $_ ne '' ){
- print "<option>$_</option>\n";
- }
-}
-
-print <<END
-</select><br/>
-<input type='hidden' name='ACTION' value='playgenre' />
-<input type='image' alt='$Lang::tr{'play'}' title='$Lang::tr{'play'}' src='/images/media-playback-start.png' />
-<input type='hidden' name='FRAME' value='$mpfiresettings{'FRAME'}' />
-</form></td>
-</tr></table>
-END
-;
-
-&Header::closebox();
-}
-
-if ( $mpfiresettings{'FRAME'} eq "songs" )
-{
-&Header::openbox('100%', 'center', $Lang::tr{'mpfire search'});
-# box to quickly search artist, album or title
-print <<END
-<form method='post' action='$ENV{'SCRIPT_NAME'}#$Lang::tr{'mpfire songs'}'>
-<table width='95%' cellspacing='0'>
-<tr>
-<td align='right' width='33%'>$Lang::tr{'artist'}</td>
-<td align='center' width='33%'>$Lang::tr{'title'}</td>
-<td align='left' width='33%'>$Lang::tr{'album'}</td>
-</tr>
-<tr>
-<td align='right' width='33%'><input type='radio' name='SEARCH' value='artist' /></td>
-<td align='center' width='33%'><input type='radio' name='SEARCH' value='title' checked='checked' /></td>
-<td align='left' width='33%'><input type='radio' name='SEARCH' value='album' /></td>
-</tr>
-<tr>
-<td align='center' colspan='3'><input type='text' name='SEARCHITEM' value='$mpfiresettings{'SEARCHITEM'}' size="50" /></td>
-</tr>
-<tr>
-<td align='center' colspan='3'><input type='hidden' name='ACTION' value='search' /><input type='image' alt='$Lang::tr{'Scan for Songs'}' title='$Lang::tr{'Scan for Songs'}' src='/images/edit-find.png' /></td>
-</tr>
-</table>
-<input type='hidden' name='FRAME' value='$mpfiresettings{'FRAME'}' />
-</form>
-END
-;
-&Header::closebox();
-
-&Header::openbox('100%', 'center', $Lang::tr{'mpfire songs'});
-print <<END
-<a id='$Lang::tr{'mpfire songs'}' name='$Lang::tr{'mpfire songs'}'></a>
-<table width='95%' cellspacing='3'>
-<tr bgcolor='$color{'color20'}'><td colspan='4' align='left'><b>$Lang::tr{'Existing Files'}</b></td></tr>
-END
-;
-if ( $#songs > 100 ){
- print "<tr><td align='center' colspan='4'><br/>$Lang::tr{'Pages'}<br/><form method='post' action='$ENV{'SCRIPT_NAME'}'><input type='submit' name='PAGE' value='all' /><br/>";
- my $pages =(int($#songs/100)+1);
- for(my $i = 1; $i <= $pages; $i++){
- print "<input type='submit' name='PAGE' value='$i' />";
- if (!($i % 205)){
- print"<br/>";
- }
- }
- print "<input type='hidden' name='FRAME' value='$mpfiresettings{'FRAME'}' />";
- print "</form></td></tr>";
-}
-print <<END
-<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>
-END
-;
-
-my $lines=0;my $i=0;my $begin;my $end;
-if ( $mpfiresettings{'PAGE'} eq 'all' ){
- $begin=0;
- $end=$#songs;
-}else{
- $begin=(($mpfiresettings{'PAGE'}-1) * 100);
- $end=(($mpfiresettings{'PAGE'} * 100)-1);
-}
- 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 "<tr bgcolor='$color{'color20'}'>";
- }else{
- print "<tr bgcolor='$color{'color22'}'>";
- }
- print <<END
-<td align='center' style="white-space:nowrap;">
-<form method='post' action='$ENV{'SCRIPT_NAME'}#$Lang::tr{'mpfire songs'}'>
-<input type='hidden' name='ACTION' value='addtoplaylist' />
-<input type='hidden' name='FILE' value="$_" />
-<input type='hidden' name='PAGE' value='$mpfiresettings{'PAGE'}' />
-<input type='hidden' name='FRAME' value='$mpfiresettings{'FRAME'}' />
-<input type='hidden' name='SEARCH' value='$mpfiresettings{'SEARCH'}' />
-<input type='hidden' name='SEARCHITEM' value='$mpfiresettings{'SEARCHITEM'}' />
-<input type='image' alt='$Lang::tr{'add'}' title='$Lang::tr{'add'}' src='/images/list-add.png' />
-</form>
-<form method='post' action='$ENV{'SCRIPT_NAME'}#$Lang::tr{'mpfire songs'}'>
-<input type='hidden' name='ACTION' value='>' />
-<input type='hidden' name='FILE' value="$_" />
-<input type='hidden' name='PAGE' value='$mpfiresettings{'PAGE'}' />
-<input type='hidden' name='FRAME' value='$mpfiresettings{'FRAME'}' />
-<input type='hidden' name='SEARCH' value='$mpfiresettings{'SEARCH'}' />
-<input type='hidden' name='SEARCHITEM' value='$mpfiresettings{'SEARCHITEM'}' />
-<input type='image' alt='$Lang::tr{'play'}' title='$Lang::tr{'play'}' src='/images/media-playback-start.png' />
-</form>
-</td>
-END
-;
- print "<td align='center'>".encode('utf-8', $song[0])."<br/>".encode('utf-8', $song[1])."</td>";
- print "<td align='center'>".encode('utf-8', $song[2])."</td>";
- print "<td align='center'>".encode('utf-8', $song[3])."</td>";
- $lines++;
- $i++;
-}
-
-print "</table>";
-&Header::closebox();
-}
-
-if ( $mpfiresettings{'FRAME'} eq "webradio" )
-{
-&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 = <DATEI>;
-close(DATEI);
-
-print <<END
-<table width='95%' cellspacing='0'>
-<tr bgcolor='$color{'color20'}'><td colspan='9' align='left'><b>$Lang::tr{'webradio playlist'}</b></td></tr>
-<tr><td align='left'>Stream</td><td colspan='2'></td></tr>
-END
-;
-
-my $lines=0;
-foreach (@webradio){
- my @stream = split(/\|/,$_);
- $lines++;
- chomp($stream[2]);
- if ($lines % 2) {
- print "<tr bgcolor='$color{'color22'}'>";
- }else{
- print "<tr>";
- }
- chomp $stream[1];chomp $stream[2];
- print <<END
-<td align='left'><a href='$stream[2]' target='_blank'>$stream[1]</a></td>
-<td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'><input type='hidden' name='FILE' value='$stream[0]' /><input type='hidden' name='ACTION' value='playweb' /><input type='image' alt='$Lang::tr{'play'}' title='$Lang::tr{'play'}' src='/images/media-playback-start.png' align='middle' />
-<input type='hidden' name='FRAME' value='$mpfiresettings{'FRAME'}' />
-</form></td>
-</tr>
-END
-;
-}
-
-$lines++;
-if ($lines % 2){
- print "<tr bgcolor='$color{'color22'}'>";
-}else{
- print "<tr>";
-}
-
-print <<END
-<td align='center' colspan='2'><form method='post' action='$ENV{'SCRIPT_NAME'}'><br />http://<input type=text name='FILE' value='www.meineradiourl:1234' size='75' />
-<input type='hidden' name='ACTION' value='playweb' /><input type='image' alt='$Lang::tr{'play'}' title='$Lang::tr{'play'}' src='/images/media-playback-start.png' align='top' />
-<input type='hidden' name='FRAME' value='$mpfiresettings{'FRAME'}' />
-</form></td>
-</tr>
-END
-;
-print "</table>";
-&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
-<table width='95%' cellspacing='0'>
-<tr bgcolor='$color{'color20'}'><td colspan='2' align='left'><b>$Lang::tr{'current playlist'}</b></td></tr>
-<tr><td align='center' colspan='2' ><textarea cols='100' rows='10' name='playlist' style='font-size:11px;width:650px;' readonly='readonly'>
-END
-;
-
-foreach (@playlist){
- $_=~s/&/&\;/g;;print $_;
-}
-
-print <<END
-</textarea></td></tr><tr>
-<td align='right'>
-<form method='post' action='$ENV{'SCRIPT_NAME'}'>
-<input type='hidden' name='ACTION' value='emptyplaylist' />
-<input type='image' alt='$Lang::tr{'clear playlist'}' title='$Lang::tr{'clear playlist'}' src='/images/user-trash.png' />
-<input type='hidden' name='FRAME' value='$mpfiresettings{'FRAME'}' />
-</form>
-</td>
-<td align='left'>
-<form method='post' action='$ENV{'SCRIPT_NAME'}'>
-<input type='hidden' name='ACTION' value='playlist' />
-<input type='image' alt='$Lang::tr{'play'}' title='$Lang::tr{'play'}' src='/images/media-playback-start.png' />
-<input type='hidden' name='FRAME' value='$mpfiresettings{'FRAME'}' />
-</form>
-</td></tr>
-</table>
-END
-;
-
-&Header::closebox();
-&Header::closebigbox();
-&Header::closepage();
diff --git a/html/html/images/mpfire/box.png b/html/html/images/mpfire/box.png
deleted file mode 100644
index fdf97b343aaa09eaf7fcdd114c3adbe88d28273b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4562
zcmYLN2|QGL8$R>RHKKzol{J$RLiQ{vBfBuNTuGt0hKL(u%p_S_tl1^X;1&~Eb1D0{
z+4lwwMKtzhXht`L={tkI(a)Ao@1&Wv-;|9#%~eV+IEPqej_2(a)kg@Hvj-UW~PQV0Pr6o
zbZ)Z`0lja(8w`a0zyfSc&I2XA;`7jl-!S@?`T$U#uz%|s2lN@~W@=*z0Jl#7K-hf%
z_yK(tHU|KK$^fw73IIA!0O0VS&uT8}LjU0U)6_8l0C?ZAU$8d6m+sJ)!dRnASX)02
zY|u6TKLG1%UcT5<Rz`M6oZ2Z>)i+6pLjZvPu$iI09p0IqwP|bjuUOkAE5uSy>%*X3
z<}{BHbZHBd^dt8KDgU*cSnXkgCW_zCu%+uYS$lM93C5wZ(pJ<kux8TOx7jYxHvPK&
z)Y39RWmTQ$h%4coQf~usHbDC)VQZZca3>L_ibAvlB1pJ<7?>Ddhe6TI65+yOuwO^`
z9W~|W*i(+Lr?L;q|GstA(Q(7GEnb3eoG_aexze!dn=@SLeORB(a)6+rAA$b7JUf6(&i
zMp<FuLPDCn1FIf8PYLx9q{_7fY%r%oS4Jvkt=!xuJ)N9BnVOhHhR##+?4*)R197<9
z9q!3UPGtbTcN}m-baUCJE4f%*t;4_f^YfGRx^Y8v?2X(a)eF_X#EBMJ6{jH2RV9#K(I
z<J#KV`rO>y(a)T8=q&+p$~4D#{muD-in6ENAzBjus}mav*{@PB0C9bh}x^uw8`<w|er
z?U3=66*^twhOckKch=_0c((buV>B;1B_}U$dSPN>BFuetZ9H_PA!HLr%{mj59JKP8
zUKg}-WEVCP0gg6?Hm2+ZKBDY;R~EgbidlLbb(=^HWo>PI8LJH%559a(ra54!&^~mC
zN=-1=p~v1{icJx)+zgM#>f*m5_5U9mOjy<u5rH)A)}SarorX&JaFA}6XR}>gTzqV3
zXoydyYxX{Vd8~HrcLxV*Vx(a)W3t@&pMdOMgMKYz;8Zgq2LW>V_jE0(a)H{gJb|CqfQAY
zig`W0V%g1Nv6^aXYQ*~Ves2AwFhyc!U;oj?@)nCOxmxX?H$Jmi+eRAV?=u_wtYv<p
zF`zCMY|Un1s`m4DJc#;wme!WEEb+#7Y~i&=c1YFd)f<kEBQE(a)mqL(l6?zPlNdW5qR
zb>t6PMwu5bLfoPYu!%@zFVBu(UR60eLjQ{A_pODYSIZ+6n8=$o+X+#4-|>d+T*d!b
zj_~5Bp#6TsB&!#KJ6(kQ2S~nHliW0{T2<|V5*xU=ksrJ~s@<5Mf8rz&2YCMZ<sXi|
z?m(a)Fy8KzlVdWq)FGCPZP+ncv^7ty>TLm$$-Z0TmTm-ZWQ`6p_?N1wb^Y1)kk0AGmo
z+XdH5W~dC6n7E!(BqpOH#NFQkM%+fCdyh&z1YebtYL4*euQ-IRuv6rgZr4Y^N1|k@
z)@5W=oiIwv{DPJ+x>fBkXsTOTZR)M7rbC?9AXZhICKy{tWtr~AggOmcyEngTcdZjy
z(a)ewhNCDCuB<E_M{B#D#JcqSsHM+~HrxqgL(a)I?XINYoMcOMsu{cPm?1`NJtQMh`6vj
z6b1W$)!($A9EOiRd#k+%1EmW+5EC36oR41~tyW9K^YZaU(!37K?DJPXjF7dH9fSzk
z3?%cTJ6uOa)<`1#6idSNTfA`}<Cy~SyN_kFAS3(a)Po9W?>B00l3!_euI!imAz!S+-<
zQ9Gb(a)yy~VCw(u&=3w?^Yl$6msJba0wprN05&qw6R1x%{<{EK&c1!kxw-Yh(a)LP%p){
zwWw80$}ueRY@%c+mhWL~B3Gz}X$h5TDdXbC&MW7LV52ckPEU1+1F^GnbDk81zz<KY
zs>YN{o(FLMqCEg_=_6mcZ%^~$v0VE$KfwA>?DX80URhZgF7b7KBr(a)d?x<f{vm)Qhp
zX44uslpn?&-N_-(a)0`#2Eud|_5|Izi>v(1*~HLLJ|=9Qpno|$)IpMRnff_b#!4m#$z
zu&fUvQRp}ag7z+Kx$TB~rb7+Ht_)hWTU$K2sy5ibz##tYXIZbuF?gx*T`ki7BaD_)
z77K5UWOPWw1<<RV87-(a)wY4U<JxsBuP`VGSE4w`8z7f46;bns9%tS1L8&^IUANB{JO
zvubQC1^;m%Hrb=#Mv}l3QU;v5;JncwWUOp`1w_JQmEdtOx3UA^+-C(wssm9cu(PzN
zD6WKI5j#6E;VMhS-Lkq5Cm4Oc2I(x42wDpXIb0;;Rh%JyT+oyzDk>_nW_q4Jr)_-y
z<j0BYO_pK&Z98MY*oh2fNRyL_J2T14&Tn21>aw#&?+)fknn>0SbnGmdjFKgK6hz4|
zd3H*WsD?NYPdUWfn$F1T4ij}?nys3(a)sjhaE=(Aw_9q_o0#k$*OmBH5nNnUIVszImt
zj!Vt(a)o@AFPgK(a)E>0Opig<6nPC=?ppB+6oS9U&zIOlv_3PPLLwD?^1&tp%Mlv#DR$z
zX59hs<t^#G_W1}w#<;k+K#<F4X1M&zUV;k0x20uYcq6%&Sz;DU`-MmUbeg55WrjrG
z!omW(WcBs+(a)mZ>+ku_a*&`q+S^*8HpO{hB}6Fsbv(a)ud!lYIz|9me1jstuukv%oRG2
zZ~49e7fqt;aJLNbZh~wq`+I;E-j*X^b2=>M(fT2=xRCir^~=*csZxs}E!O1XGxPoj
z0QDJSO_X1G({TFo(a)T*(W+3KZW3p8yWy^qJ(+uIK_uuJdu9{ix4d_L&f1_8(a)rmk&Bz
zm%$e;tLuzO)<YgK)s}%?$DJrFE(Z%S3>$VY;*NlQ{x-|XNB6dmTvyF$O=}+bn{v~~
zClzlTRO$DrO0kT-?2JaEe<jK~5fr*E^O)KU!uAA3_Zo_~Km(a)x(`ZGiU^rz+Jz(a)VTr
zxXwCav79ZWXiX|8eM9|yd$fDd6DDr+$U+ePCO5Z9Nl7UoW)|X|0b^-l!GEa?eb&h~
z-+XUMg>zuSS~(v{3d`O_94CJ0$1W}|k`AFi1q#KGB)*HpK;+zY1BdRxL?zYly5_8l
z^n*2oyv<L3jT?*9(!M3Uxo%3waauIi7P~hmATc4=2}76F`Crj}{xr7AXGCBaw`Q$N
zFY9~Zcq0PI+0seAj`dv6z#{hYIN^d&zjvxs7q(a)iDqpjlgYt^!=Ce9cP$qf^-kh{zk
zAue<b-g2_5&X(a)bF@DoXR-Irq_%GO%o+}(WR{5s~``{%5hz{S68=}>M0r=$hAB&G`@
zYaju&jsu0BE39V9F<o8nf=K#m3XW;Q^6v>-_PXKTDG#Zf&QJqkb%u<SAVBT}=d)P*
zE2V1IasJ)j`7iH<kE({f?L&`tNN#j-vIWC(a)tv%@&)Ubc!oolci<;5$vtMV<<kenQS
z0EYmF6xf^qYd-siW_7Lua}G+w?aR7dot;o{2M-<$r|U2epxvKFz}fA?oyG3YgJN+6
z#-nPF{vP?UcaeOXwlPpMGfz3!%?)Q<fF6A)SYRsWrLgQb%?r+w=Q($ZeBkhIzOZwN
zjX3&8NSiF5p5_qf+kg0!*2hiX$C=1>eHB$ylVQ_7IO96<lpk%2xX)WfC1<ltG-D=h
z8JZrXkJ7}d#rDOyxj!M)M{cD;x0I_|$Nd9=?!Om~!Gv8u=G=mqyed9fY(a)AQX3;sHx
zAKH_tagj0l_LiG#ZG7G8Y~Puxf3GHJB^N*udWy*Y?llu=`?ZN&p%V61ul8-q8UJ)X
z1cgSJAj6_D*us!^4|&2BS>JlI&dd(;9>4mOy`mb5VaQ+y33!E`_LA|NQj`Qe5m$M7
zwl~){UpbV<<8-Bor#bbG5^*ZD=sUZUN=O1OB*r*-T6pCj3BR74SGn5H(a)x-&iAK0~M
zz6do~-an}FAYa0E_qpAk6cU4H>T8x_L%08R2!+fWL~R0r;2Nt}|NT3zt*T*>-{ekW
zcycGIz*N1FljA7p-iIo$zqooksmtaXYE4c<bvi9DFpxb3(9t9|hG*K7!ykgO)UzQF
z1uE7yCwi0&5bfk55fr5&9qVsY;@=U*(vl`JJ8v=KaJtk|7s(j*ymWIK52VyJgdsVl
zJ5U8&8jXBLQebyCx#(dhhkF<}r4Fx=@j{F>4{T4TyKF(O+xQG|@k8-`9|mL=Keqh%
zPlR~tak!AZP(a)3`qJw##vx4Q5pEd(}U2&@s!gbZQD&ks(1Mr(a)UE+M3Tg7xEFxiH=vp
z(a)dxmX{3kmm0k4WG=Wo1zPsOE9g&Oj^+8nbp`|b~~+YFzZHv(a)eZgJp@oX-A2{_nGNF
zxPJ>Xx-+QWfbEil?T{}B-C~&h?9m+WUc!H*p;rbAY~yc+P>;nQKu?M7C}Pf(2ujOe
zUVJL$P7ExXw9{>TdRs^aGy(a)gn<slp-Dup5tLvk#<`~q5t1Ac39iMgrzbjM;SC;CA;
zG?SK#FS%4Mb&}{!Ey+57J`-Rj)AP#6Jn`PJGAh?7mkZ8tLyr5^-3gsKRRW1Xp>clm
z>gGyg_GR6h)FkTY=+aJUN)O3F^5yyr#;wAAk?qB0wP+51D$i_428=1OD+6tNdP654
zY5wJ{OD%E~94<MwGS!j724uF%PBfW(93k5(YkUpq3|jl7dXzW4oe8}XSUSj7z%#}8
zkI)Ux(Sqz7!m}ZfB9jFXc2WFO0Kz;4mZ_kg;fmCQnz_E9pko^v=iAd==_Y50-(a)zX8
z%tU=_t8p6+IZy8U4GMCC3%*awNSG}h+>a;<>cZ3qVh%kyP6h+pGf(}tAQxoRGEh~`
z`JK<%z~G+Se*M4+ng6k&`SC9q(a)ogLJ{c3SU(a)9yZx8^7$IKNd?(f-0T%tFJ?6^^hg1
zJ}p(a)a*AryhWHNaW?C0??{<Yo9$Dq{apaIaMv`uvmRy;{ms{clLem3~~dL*ADu2`{<
zzQVN$<)oPiJ9y2O<Gj^H1XKl}1Eqe=6^Ed#8Gm|Dv@=-kQfllL>T64o)LVORB6+oP
zwsI{a3+G5xI|`XA7-)U};(eR(a)ZI58wz3T@L3ME&ItbQAhUl#e$zNCYlvtA)(-_>~y
z?J`aLEsfSCjc(qg^L!#;TWW}Bt2$l|;H0FF=XexBU2}FXU9sVBJ5Dz$ad?yn_t#Ul
z$}1Wg8b0+#N#a-P*IFqhBK+v5zM<=1A|>O8%gsYf;>G8ydNCwLZp#-Ob^=g8y;VaU
zH9q>wuiC01P0FlDFDkr$vbO78?l6oxiSYzKbH<>IL#cDf+GK*>cY1YZ2q&-joc8T+
zp6Mawhazz&2e~vvq#<w?O<}Czeg2R&>k8Ajt}bQ(a)4cRBns2@ZblT@`rg4YGj;Km;d
zuW~apGoPm9sZkgfKksGC)A`P=yW&?q*WVN9uc^_Y77eNJ2l5`#6(a)J(=A_%n-(a)jCf&
zf!1%@yIXmPn9TEpzqH*-&lY%+KLq9%78a_$2w;bpuHYzO=iuP-hOo0!C7s)t66|Y;
zUK_z=6S6~D+H5XxBbMCvCH&f%-*Q9wdd5F_{b=D`Esic)x%%bUz~X>arQR5?<%PLe
zr3T?)(f$cYhfYA~c6NY8!uaVlhaGBkgLM!XK4<)w2hlP(a)meZ*NI9*chlRiCd7$k0c
tCKCDqKsgAJC~GLNBMy6}Nndzf(a)1S@!4r}5)2K|fzm>F3amYjEu_%C!FS*!p6
diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl
index 61288dddf..2565505a5 100644
--- a/langs/de/cgi-bin/de.pl
+++ b/langs/de/cgi-bin/de.pl
@@ -1793,13 +1793,6 @@
'most preferred' => 'präferiert',
'mount' => 'Einbinden',
'mounted on' => 'Mounted auf',
-'mpfire' => 'Media Player für IPFire',
-'mpfire controls' => 'MPFire Steuerung',
-'mpfire playlist' => 'MPFire Playlist',
-'mpfire scanning' => 'Nach neuen Dateien suchen',
-'mpfire search' => 'MPFire Suche',
-'mpfire songs' => 'MPFire Songliste',
-'mpfire webradio' => 'MPFire Webradio',
'mtu' => 'MTU',
'mtu QoS' => 'Diese Einstellung ändert die MTU nicht global sondern nur für das QoS.',
'my new share' => 'Meine neue Freigabe',
diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl
index b9f015935..5c8da52be 100644
--- a/langs/en/cgi-bin/en.pl
+++ b/langs/en/cgi-bin/en.pl
@@ -1853,13 +1853,6 @@
'most preferred' => 'most preferred',
'mount' => 'Mount',
'mounted on' => 'Mounted on',
-'mpfire' => 'Media Player for IPFire',
-'mpfire controls' => 'MPFire Control',
-'mpfire playlist' => 'MPFire Playlist',
-'mpfire scanning' => 'Scan for new files',
-'mpfire search' => 'MPFire Search',
-'mpfire songs' => 'MPFire songlist',
-'mpfire webradio' => 'MPFire Webradio',
'mtu' => 'MTU',
'mtu QoS' => 'This does not change the global MTU, it only sets MTU for QoS.',
'my new share' => 'My new share',
diff --git a/langs/es/cgi-bin/es.pl b/langs/es/cgi-bin/es.pl
index 1e1a0d986..27b0e739e 100644
--- a/langs/es/cgi-bin/es.pl
+++ b/langs/es/cgi-bin/es.pl
@@ -1848,13 +1848,6 @@
'most preferred' => 'Más preferido',
'mount' => 'Montar',
'mounted on' => 'Montado en',
-'mpfire' => 'Media Player para IPFire',
-'mpfire controls' => 'Control de MPFire',
-'mpfire playlist' => 'Lista de reproducción de MPFire',
-'mpfire scanning' => 'Analiza en busca de nuevos archivos',
-'mpfire search' => 'Búsqueda MPFire',
-'mpfire songs' => 'Lista de canciones de MPFire',
-'mpfire webradio' => 'Webradio de MPFire',
'mtu' => 'MTU',
'mtu QoS' => 'Esto no cambia el MTU global, solo establece MTU para QoS',
'my new share' => 'Mi nuevo recurso compartido',
diff --git a/langs/fr/cgi-bin/fr.pl b/langs/fr/cgi-bin/fr.pl
index 65a0c95fc..21f7b645f 100644
--- a/langs/fr/cgi-bin/fr.pl
+++ b/langs/fr/cgi-bin/fr.pl
@@ -1849,13 +1849,6 @@
'most preferred' => 'le préféré',
'mount' => 'Monter',
'mounted on' => 'Monté en tant que',
-'mpfire' => 'Lecteur de médias pour IPFire',
-'mpfire controls' => 'Contrôle MPFire',
-'mpfire playlist' => 'Liste de lecture MPFire',
-'mpfire scanning' => 'Chercher de nouveaux fichiers',
-'mpfire search' => 'Recherche MPFire',
-'mpfire songs' => 'Liste des chansons MPFire',
-'mpfire webradio' => 'Radio web MPFire',
'mtu' => 'MTU',
'mtu QoS' => 'Ceci ne change pas le MTU global, cela règle uniquement le MTU pour la QoS.',
'my new share' => 'Mon nouveau partage',
diff --git a/langs/it/cgi-bin/it.pl b/langs/it/cgi-bin/it.pl
index 6e3508803..4654813cc 100644
--- a/langs/it/cgi-bin/it.pl
+++ b/langs/it/cgi-bin/it.pl
@@ -1516,13 +1516,6 @@
'most preferred' => 'most preferred',
'mount' => 'Mount',
'mounted on' => 'Montato su',
-'mpfire' => 'Media Player for IPFire',
-'mpfire controls' => 'MPFire Control',
-'mpfire playlist' => 'MPFire Playlist',
-'mpfire scanning' => 'Scan for new files',
-'mpfire search' => 'MPFire Search',
-'mpfire songs' => 'MPFire songlist',
-'mpfire webradio' => 'MPFire Webradio',
'mtu QoS' => 'This does not change the global MTU, it only sets MTU for QoS.',
'my new share' => 'My new share',
'name' => 'Nome',
diff --git a/langs/nl/cgi-bin/nl.pl b/langs/nl/cgi-bin/nl.pl
index a397680ce..beb1b6e36 100644
--- a/langs/nl/cgi-bin/nl.pl
+++ b/langs/nl/cgi-bin/nl.pl
@@ -1497,13 +1497,6 @@
'most preferred' => 'Meeste voorkeur',
'mount' => 'Koppelen',
'mounted on' => 'Gekoppeld op',
-'mpfire' => 'Mediaspeler voor IPFire',
-'mpfire controls' => 'MPFire Controle',
-'mpfire playlist' => 'MPFire afspeellijst',
-'mpfire scanning' => 'Zoeken naar nieuwe bestanden',
-'mpfire search' => 'MPFire Zoeken',
-'mpfire songs' => 'MPFire lijst met nummers',
-'mpfire webradio' => 'MPFire Webradio',
'mtu QoS' => 'Dit verandert niet de globale MTU, het zet alleen de MTU voor QoS.',
'my new share' => 'Mijn nieuwe share',
'name' => 'Naam',
diff --git a/langs/pl/cgi-bin/pl.pl b/langs/pl/cgi-bin/pl.pl
index 86364a0a2..4be749041 100644
--- a/langs/pl/cgi-bin/pl.pl
+++ b/langs/pl/cgi-bin/pl.pl
@@ -1193,13 +1193,6 @@
'more' => 'więcej',
'mount' => 'Montuj',
'mounted on' => 'Zamontowany w',
-'mpfire' => 'Odtwarzać mediów dla IPFire',
-'mpfire controls' => 'Zarządzanie MPFire',
-'mpfire playlist' => 'Playlist\'a MPFire ',
-'mpfire scanning' => 'Skanuj w poszukiwaniu nowych plików',
-'mpfire search' => 'MPFire Szukaj',
-'mpfire songs' => 'MPFire lista utworów',
-'mpfire webradio' => 'MPFire Webradio',
'mtu QoS' => 'Ta opcja nie zmienia globalnego MTU, a jedynie MTU dla QoS.',
'my new share' => 'Mój nowy zasób',
'name' => 'Nazwa',
diff --git a/langs/ru/cgi-bin/ru.pl b/langs/ru/cgi-bin/ru.pl
index 32f0f2425..32f6f993d 100644
--- a/langs/ru/cgi-bin/ru.pl
+++ b/langs/ru/cgi-bin/ru.pl
@@ -1185,13 +1185,6 @@
'more' => 'Больше',
'mount' => 'Монтировать',
'mounted on' => 'Смонтирован на',
-'mpfire' => 'Media Player for IPFire',
-'mpfire controls' => 'MPFire Control',
-'mpfire playlist' => 'MPFire Playlist',
-'mpfire scanning' => 'Искать новые файлы',
-'mpfire search' => 'MPFire Search',
-'mpfire songs' => 'MPFire songlist',
-'mpfire webradio' => 'MPFire Webradio',
'mtu QoS' => 'Это нре изменит глобальные настройки MTU, а только задаёт MTU для QoS.',
'my new share' => 'Моя новая шара',
'name' => 'Имя',
diff --git a/langs/tr/cgi-bin/tr.pl b/langs/tr/cgi-bin/tr.pl
index d279309af..f3a37182a 100644
--- a/langs/tr/cgi-bin/tr.pl
+++ b/langs/tr/cgi-bin/tr.pl
@@ -1652,13 +1652,6 @@
'most preferred' => 'En çok tercih edilen',
'mount' => 'Bağla',
'mounted on' => 'Bağlı',
-'mpfire' => 'IPFire için Media Player',
-'mpfire controls' => 'MPFire Kontrol',
-'mpfire playlist' => 'MPFire Çalma Listesi',
-'mpfire scanning' => 'Yeni dosyalar için tara',
-'mpfire search' => 'MPFire Ara',
-'mpfire songs' => 'MPFire şarkı listesi',
-'mpfire webradio' => 'MPFire Webradyo',
'mtu QoS' => 'Bu genel MTU değiştirilemez. Sadece QoS için MTU ayarı yapılır.',
'my new share' => 'Yeni paylaşımlarım',
'name' => 'Ad',
diff --git a/lfs/mpfire b/lfs/mpfire
deleted file mode 100644
index 54551a0b6..000000000
--- a/lfs/mpfire
+++ /dev/null
@@ -1,75 +0,0 @@
-###############################################################################
-# #
-# IPFire.org - A linux based firewall #
-# Copyright (C) 2007-2024 IPFire Team <info(a)ipfire.org> #
-# #
-# This program 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 3 of the License, or #
-# (at your option) any later version. #
-# #
-# This program 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 this program. If not, see <http://www.gnu.org/licenses/>. #
-# #
-###############################################################################
-
-###############################################################################
-# Definitions
-###############################################################################
-
-include Config
-
-SUMMARY = IPFire integration for the Music Player Daemon
-
-VER = ipfire
-
-THISAPP = mpfire-$(VER)
-DIR_APP = $(DIR_SRC)/$(THISAPP)
-TARGET = $(DIR_INFO)/$(THISAPP)
-PROG = mpfire
-PAK_VER = 17
-
-DEPS = mpd mpc
-
-SERVICES =
-
-###############################################################################
-# Top-level Rules
-###############################################################################
-
-objects =
-
-install : $(TARGET)
-
-check :
-
-download :
-
-b2 :
-
-dist:
- @$(PAK)
-
-###############################################################################
-# Installation Details
-###############################################################################
-
-$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
- @$(PREBUILD)
- -mkdir -p /var/ipfire/mpfire/bin
- touch /var/ipfire/mpfire/settings
- install -v -m 755 $(DIR_SRC)/config/mpfire/mpfire.pl /var/ipfire/mpfire/bin
- install -v -m 644 $(DIR_SRC)/config/mpfire/webradio /var/ipfire/mpfire/
- chown nobody.nobody /var/ipfire/mpfire/{settings,webradio}
- chmod 755 /srv/web/ipfire/html/images/mpfire
- install -v -m 644 $(DIR_SRC)/config/backup/includes/mpfire /var/ipfire/backup/addons/includes/mpfire
- -mkdir -p /usr/lib/perl5/site_perl/5.36.0/Audio/
- cp -vrf $(DIR_SRC)/config/mpfire/perl/Audio/MPD* /usr/lib/perl5/site_perl/5.36.0/Audio/
- cp -vrf $(DIR_SRC)/config/mpfire/perl/Accessor* /usr/lib/perl5/5.36.0/Class/
- cp -vrf $(DIR_SRC)/config/mpfire/perl/Readonly.pm /usr/lib/perl5/5.36.0/Readonly.pm
- @$(POSTBUILD)
diff --git a/make.sh b/make.sh
index 8e980f392..992a6d450 100755
--- a/make.sh
+++ b/make.sh
@@ -1819,7 +1819,6 @@ build_system() {
lfsmake2 perl-NetAddr-IP
lfsmake2 dma
lfsmake2 alsa
- lfsmake2 mpfire
lfsmake2 guardian
lfsmake2 libid3tag
lfsmake2 libmad
diff --git a/src/misc-progs/Makefile b/src/misc-progs/Makefile
index 7c3ef7529..1ae12b294 100644
--- a/src/misc-progs/Makefile
+++ b/src/misc-progs/Makefile
@@ -29,7 +29,7 @@ SUID_PROGS = squidctrl sshctrl ipfirereboot \
logwatch wioscan wiohelper openvpnctrl firewallctrl \
wirelessctrl getipstat qosctrl \
redctrl syslogdctrl extrahdctrl sambactrl \
- smartctrl clamavctrl addonctrl pakfire mpfirectrl wlanapctrl \
+ smartctrl clamavctrl addonctrl pakfire wlanapctrl \
setaliases urlfilterctrl updxlratorctrl fireinfoctrl rebuildroutes \
getconntracktable wirelessclient torctrl ddnsctrl unboundctrl \
captivectrl
diff --git a/src/misc-progs/mpfirectrl.c b/src/misc-progs/mpfirectrl.c
deleted file mode 100644
index 4ea1fb543..000000000
--- a/src/misc-progs/mpfirectrl.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* This file is part of the IPFire Firewall.
- *
- * This program is distributed under the terms of the GNU General Public
- * Licence. See the file COPYING for details.
- *
- */
-
-#include "setuid.h"
-
-int main(int argc, char** argv) {
- if (!initsetuid())
- exit(1);
-
- return run("/var/ipfire/mpfire/bin/mpfire.pl", argv + 1);
-}
diff --git a/src/paks/mpfire/install.sh b/src/paks/mpfire/install.sh
deleted file mode 100644
index 541a25ca2..000000000
--- a/src/paks/mpfire/install.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-############################################################################
-# #
-# This file is part of the IPFire Firewall. #
-# #
-# IPFire 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. #
-# #
-# IPFire 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 IPFire; if not, write to the Free Software #
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
-# #
-# Copyright (C) 2007-2024 IPFire-Team <info(a)ipfire.org>. #
-# #
-############################################################################
-#
-. /opt/pakfire/lib/functions.sh
-extract_files
-chmod 755 /srv/web/ipfire/html/images/mpfire
-restore_backup ${NAME}
diff --git a/src/paks/mpfire/uninstall.sh b/src/paks/mpfire/uninstall.sh
deleted file mode 100644
index ed7e6a821..000000000
--- a/src/paks/mpfire/uninstall.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash
-############################################################################
-# #
-# This file is part of the IPFire Firewall. #
-# #
-# IPFire 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. #
-# #
-# IPFire 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 IPFire; if not, write to the Free Software #
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
-# #
-# Copyright (C) 2007-2024 IPFire-Team <info(a)ipfire.org>. #
-# #
-############################################################################
-#
-. /opt/pakfire/lib/functions.sh
-make_backup ${NAME}
-remove_files
diff --git a/src/paks/mpfire/update.sh b/src/paks/mpfire/update.sh
deleted file mode 100644
index 31d1d77cc..000000000
--- a/src/paks/mpfire/update.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-############################################################################
-# #
-# This file is part of the IPFire Firewall. #
-# #
-# IPFire 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. #
-# #
-# IPFire 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 IPFire; if not, write to the Free Software #
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
-# #
-# Copyright (C) 2007-2024 IPFire-Team <info(a)ipfire.org>. #
-# #
-############################################################################
-#
-. /opt/pakfire/lib/functions.sh
-extract_backup_includes
-./uninstall.sh
-./install.sh
--
2.46.2
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-10-08 16:45 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-10-08 16:45 [PATCH] mpfire: removal as discussed in Conf call 7th Oct Adolf Belka
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox