This file is indexed.

/usr/bin/rpld-listplaylists is in roarplaylistd-tools 0.1.9-3.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/perl

#      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2010
#
#  This file is part of RoarAudio PlayList Daemon,
#  a playlist management daemon for RoarAudio.
#  See README for details.
#
#  This file is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License version 3
#  as published by the Free Software Foundation.
#
#  RoarAudio 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 software; see the file COPYING.  If not, write to
#  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.

use strict;
use Audio::RPLD;

my $server;
my $queue;

my $level = 0;

while (($_ = shift(@ARGV))) {
 if ( $_ eq '--tree' ) {
  $level =  0;
 } elsif ( $_ eq '--flat' ) {
  $level = -1;
 } elsif ( $_ eq '--server' ) {
  $server = shift(@ARGV);
 } elsif ( $_ eq '--queue' ) {
  $queue = shift(@ARGV);
 } elsif ( $_ eq '--help' ) {
  print STDERR "Usage: $0 [OPTIONS] [--tree|--flat]\n";
  exit(0);
 } else {
  die 'Unknown option: '.$_;
 }
}

my $rpld = Audio::RPLD->new();

if ( defined($server) ) {
 $rpld->connect($server);
} else {
 $rpld->connect_default();
}
$rpld->is_connected() or die;

if ( defined($queue) ) {
 $rpld->setqueue($queue) or die;
}

my $res = $rpld->listplaylists() or die;

$rpld->disconnect();

proc($res, $level, 1, $res);

sub get_list {
 my ($lists, $id) = @_;
 local $_;

 foreach (@{$lists}) {
  return $_ if $_->{'id'} == $id;
 }

 return {};
}

sub proc {
 my ($lists, $level, $nocircular, $alllists) = @_;
 my $c;
 my $prefix = '';
 my $type;

 $level ||= 0;

 unless ( $level < 0 ) {
  $prefix = ' ' x ($level * 2);
 }

 foreach $c (@{$_[0]}) {
  if ( $c->{'processed'} ) {
   #printf("%s[%-8i]: %s ***circular parentship***\n", $prefix, $c->{'id'}, $c->{'name'}) unless $nocircular;
   printf("%s%i: %s ***circular parentship***\n", $prefix, $c->{'id'}, $c->{'name'}) unless $nocircular;
   next;
  }

  $type = 'playlist';
  if ( defined($c->{'history_size'}) ) {
   $type = sprintf('history(size %i)', $c->{'history_size'});
  } elsif ( defined($c->{'history'}) ) {
   $type = sprintf('queue(volume %i, history %s, %sbackend%s)', $c->{'volume'},
                   get_list($alllists, $c->{'history'})->{'name'} || $c->{'history'},
                   $c->{'backend'} eq '+default' ? ('default ', '') : ('', ' default'));
  }

  #printf("%s[%-8i]: %s\n", $prefix, $c->{'id'}, $c->{'name'});
  printf("%s%i [%s]: %s\n", $prefix, $c->{'id'}, $type, $c->{'name'});
  $c->{'processed'} = 1;
  proc($c->{'children'}, $level + 1, 0, $alllists) unless $level < 0;
 }
}

#ll