From edc5775a858487471503e61e3972d53058daa7c9 Mon Sep 17 00:00:00 2001 From: jq Date: Sun, 13 May 2007 16:14:23 +0000 Subject: [PATCH] [project @ 6101] seek & seekid now take advantage of pre-events --- lib/POE/Component/Client/MPD/Commands.pm | 47 +++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/lib/POE/Component/Client/MPD/Commands.pm b/lib/POE/Component/Client/MPD/Commands.pm index 657352e..4526946 100644 --- a/lib/POE/Component/Client/MPD/Commands.pm +++ b/lib/POE/Component/Client/MPD/Commands.pm @@ -314,14 +314,34 @@ sub _onpub_prev { sub _onpub_seek { my ($time, $song) = @_[ARG0, ARG1]; $time ||= 0; $time = int $time; - # FIXME: $song = $self->status->song if not defined $song; # seek in current song my $msg = POE::Component::Client::MPD::Message->new( { _from => $_[SENDER]->ID, _request => $_[STATE], _answer => $DISCARD, - _commands => [ "seek $song $time" ], _cooking => $RAW, } ); + + if ( defined $song ) { + $msg->_commands( [ "seek $song $time" ] ); + } else { + $msg->_pre_from( '_seek_need_current' ); + $msg->_pre_event( 'status' ); + $msg->_pre_data( $time ); + } + $_[KERNEL]->yield( '_send', $msg ); +} + + +# +# event: _seek_need_current( $msg, $current ) +# +# Use $current to get current song, before sending real seek $msg. +# +sub _onpriv_seek_need_current { + my ($msg, $current) = @_[ARG0, ARG1]; + my $song = $current->data->song; + my $time = $msg->_pre_data; + $msg->_commands( [ "seek $song $time" ] ); $_[KERNEL]->yield( '_send', $msg ); } @@ -335,18 +355,37 @@ sub _onpub_seek { sub _onpub_seekid { my ($time, $song) = @_[ARG0, ARG1]; $time ||= 0; $time = int $time; - # FIXME: $song = $self->status->songid if not defined $song; # seek in current song my $msg = POE::Component::Client::MPD::Message->new( { _from => $_[SENDER]->ID, _request => $_[STATE], _answer => $DISCARD, - _commands => [ "seekid $song $time" ], _cooking => $RAW, } ); + + if ( defined $song ) { + $msg->_commands( [ "seekid $song $time" ] ); + } else { + $msg->_pre_from( '_seekid_need_current' ); + $msg->_pre_event( 'status' ); + $msg->_pre_data( $time ); + } $_[KERNEL]->yield( '_send', $msg ); } +# +# event: _seekid_need_current( $msg, $current ) +# +# Use $current to get current song, before sending real seekid $msg. +# +sub _onpriv_seekid_need_current { + my ($msg, $current) = @_[ARG0, ARG1]; + my $song = $current->data->song; + my $time = $msg->_pre_data; + $msg->_commands( [ "seekid $song $time" ] ); + $_[KERNEL]->yield( '_send', $msg ); +} + 1; -- 2.11.4.GIT