From c7e0f9f06f8038fb42b85b3c24bc0068a2b867be Mon Sep 17 00:00:00 2001 From: jq Date: Mon, 21 May 2007 17:21:21 +0000 Subject: [PATCH] [project @ 6186] r4799@merlin: jquelin | 2007-05-21 18:22:18 +0200 new event: repeat --- lib/POE/Component/Client/MPD.pm | 3 ++- lib/POE/Component/Client/MPD/Commands.pm | 44 ++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/lib/POE/Component/Client/MPD.pm b/lib/POE/Component/Client/MPD.pm index 2c22389..e4d8cc6 100644 --- a/lib/POE/Component/Client/MPD.pm +++ b/lib/POE/Component/Client/MPD.pm @@ -91,7 +91,8 @@ sub spawn { 'song' => '_onpub_song', 'songid' => '_onpub_songid', # -- MPD interaction: altering settings -# # repeat + 'repeat' => '_onpub_repeat', + '_repeat_status' => '_onpriv_repeat_status', # # random # # fade # -- MPD interaction: controlling playback diff --git a/lib/POE/Component/Client/MPD/Commands.pm b/lib/POE/Component/Client/MPD/Commands.pm index dddf47b..67f42dc 100644 --- a/lib/POE/Component/Client/MPD/Commands.pm +++ b/lib/POE/Component/Client/MPD/Commands.pm @@ -282,6 +282,50 @@ sub _onpub_songid { # -- MPD interaction: altering settings + +# +# event: repeat( [$repeat] ) +# +# Set the repeat mode to $repeat (1 or 0). If $repeat is not specified then +# the repeat mode is toggled. +# +sub _onpub_repeat { + # create stub message. + my $msg = POE::Component::Client::MPD::Message->new( { + _from => $_[SENDER]->ID, + _request => $_[STATE], + _answer => $DISCARD, + _cooking => $RAW, + } ); + + my $mode = $_[ARG0]; + if ( not defined $mode ) { + $msg->_pre_from( '_repeat_status' ); + $msg->_pre_event( 'status' ); + } else { + $mode = $mode ? 1 : 0; # force integer + $msg->_commands( [ "repeat $mode" ] ); + } + + $_[KERNEL]->yield( '_send', $msg ); +} + + +# +# event: _repeat_status( $msg, $status ) +# +# Use $status to get current repeat mode, before sending real repeat $msg. +# +sub _onpriv_repeat_status { + my ($msg, $status) = @_[ARG0, ARG1]; + my $mode = not $status->data->repeat; + $mode = $mode ? 1 : 0; # force integer + $msg->_commands( [ "repeat $mode" ] ); + $_[KERNEL]->yield( '_send', $msg ); +} + + + # -- MPD interaction: controlling playback # -- 2.11.4.GIT