Audio::MPD::Playlist - class to mess MPD's playlist


Audio-MPD documentation Contained in the Audio-MPD distribution.

Index


Code Index:

NAME

Top

Audio::MPD::Playlist - class to mess MPD's playlist

VERSION

Top

version 1.111200

SYNOPSIS

Top

    $mpd->playlist->shuffle;
    # and lots of other methods

DESCRIPTION

Top

Audio::MPD::Playlist is a class meant to access & update MPD's playlist.

Note that you're not supposed to call the constructor yourself, an Audio::MPD::Playlist is automatically created for you during the creation of an Audio::MPD object - it can then be used with the playlist() accessor.

RETRIEVING INFORMATION

Top

as_items

    my @items = $pl->as_items;

Return an array of Audio::MPD::Common::Item::Songs, one for each of the songs in the current playlist.

items_changed_since

    my @items = $pl->items_changed_since( $plversion );

Return a list with all the songs (as Audio::MPD::Common::Item::Song objects) added to the playlist since playlist $plversion.

ADDING / REMOVING SONGS

Top

add

    $pl->add( $path [, $path [...] ] );

Add the songs identified by $path (relative to MPD's music directory) to the current playlist. No return value.

delete

    $pl->delete( $song [, $song [...] ] );

Remove the specified $song numbers (starting from 0) from the current playlist. No return value.

deleteid

    $pl->deleteid( $songid [, $songid [...] ] );

Remove the specified $songids (as assigned by mpd when inserted in playlist) from the current playlist. No return value.

clear

    $pl->clear;

Remove all the songs from the current playlist. No return value.

crop

    $pl->crop;

Remove all of the songs from the current playlist except the song currently playing.

CHANGING PLAYLIST ORDER

Top

shuffle

    $pl->shuffle;

Shuffle the current playlist. No return value.

swap

    $pl->swap( $song1, $song2 );

Swap positions of song number $song1 and $song2 in the current playlist. No return value.

swapid

    $pl->swapid( $songid1, $songid2 );

Swap the postions of song ID $songid1 with song ID $songid2 in the current playlist. No return value.

move

    $pl->move( $song, $newpos );

Move song number $song to the position $newpos. No return value.

moveid

    $pl->moveid( $songid, $newpos );

Move song ID $songid to the position $newpos. No return value.

MANAGING PLAYLISTS

Top

load

    $pl->load( $playlist );

Load list of songs from specified $playlist file. No return value.

save

    $pl->save( $playlist );

Save the current playlist to a file called $playlist in MPD's playlist directory. No return value.

rm

    $pl->rm( $playlist );

Delete playlist named $playlist from MPD's playlist directory. No return value.

AUTHOR

Top

Jerome Quelin

COPYRIGHT AND LICENSE

Top


Audio-MPD documentation Contained in the Audio-MPD distribution.

#
# This file is part of Audio-MPD
#
# This software is copyright (c) 2007 by Jerome Quelin.
#
# This is free software; you can redistribute it and/or modify it under
# the same terms as the Perl 5 programming language system itself.
#
use 5.008;
use warnings;
use strict;

package Audio::MPD::Playlist;
BEGIN {
  $Audio::MPD::Playlist::VERSION = '1.111200';
}
# ABSTRACT: class to mess MPD's playlist

use Moose;
use MooseX::Has::Sugar;
use MooseX::SemiAffordanceAccessor;

has _mpd => ( ro, required, weak_ref );


#--
# Constructor

#
# my $collection = Audio::MPD::Playlist->new( _mpd => $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.
#


#--
# Public methods

# -- Playlist: retrieving information


sub as_items {
    my ($self) = @_;

    my @list = $self->_mpd->_cooked_command_as_items("playlistinfo\n");
    return @list;
}



sub items_changed_since {
    my ($self, $plid) = @_;
    return $self->_mpd->_cooked_command_as_items("plchanges $plid\n");
}


# -- Playlist: adding / removing songs


sub add {
    my ($self, @pathes) = @_;
    my $command =
          "command_list_begin\n"
        . join( '', map { my $p=$_; $p=~s/"/\\"/g; qq[add "$p"\n] } @pathes )
        . "command_list_end\n";
    $self->_mpd->_send_command( $command );
}



sub delete {
    my ($self, @songs) = @_;
    my $command =
          "command_list_begin\n"
        . join( '', map { my $p=$_; $p=~s/"/\\"/g; "delete $p\n" } @songs )
        . "command_list_end\n";
    $self->_mpd->_send_command( $command );
}



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 );
}



sub clear {
    my ($self) = @_;
    $self->_mpd->_send_command("clear\n");
}



sub crop {
    my ($self) = @_;

    my $status = $self->_mpd->status;
    my $cur = $status->song;
    my $len = $status->playlistlength - 1;

    # we need to reverse the list, to remove the bigest ids before
    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



sub shuffle {
    my ($self) = @_;
    $self->_mpd->_send_command("shuffle\n");
}



sub swap {
    my ($self, $from, $to) = @_;
    $self->_mpd->_send_command("swap $from $to\n");
}



sub swapid {
    my ($self, $from, $to) = @_;
    $self->_mpd->_send_command("swapid $from $to\n");
}



sub move {
    my ($self, $song, $pos) = @_;
    $self->_mpd->_send_command("move $song $pos\n");
}



sub moveid {
    my ($self, $song, $pos) = @_;
    $self->_mpd->_send_command("moveid $song $pos\n");
}


# -- Playlist: managing playlists


sub load {
    my ($self, $playlist) = @_;
    $self->_mpd->_send_command( qq[load "$playlist"\n] );
}



sub save {
    my ($self, $playlist) = @_;
    $self->_mpd->_send_command( qq[save "$playlist"\n] );
}



sub rm {
    my ($self, $playlist) = @_;
    $self->_mpd->_send_command( qq[rm "$playlist"\n] );
}


no Moose;
__PACKAGE__->meta->make_immutable;
1;




__END__