diff --git a/Slim/Player/Song.pm b/Slim/Player/Song.pm index 9db97957f8f..8b070c6df72 100644 --- a/Slim/Player/Song.pm +++ b/Slim/Player/Song.pm @@ -12,6 +12,7 @@ use strict; use base qw(Slim::Utils::Accessor); use Fcntl qw(SEEK_CUR SEEK_SET); +use Clone qw(clone); use Slim::Utils::Log; use Slim::Schema; @@ -168,7 +169,7 @@ sub clonePlaylistSong { ); foreach ('handler', @_playlistCloneAttributes) { - $new->init_accessor($_ => $old->$_()); + $new->init_accessor($_ => clone($old->$_())); } $_liveCount++; diff --git a/Slim/Player/StreamingController.pm b/Slim/Player/StreamingController.pm index fe1531d06ca..e4d7759cd0c 100644 --- a/Slim/Player/StreamingController.pm +++ b/Slim/Player/StreamingController.pm @@ -366,6 +366,11 @@ sub _Playing { main::INFOLOG && $log->info("Song " . $last_song->index() . " has now started playing"); $last_song->setStatus(Slim::Player::Song::STATUS_PLAYING); $last_song->retryData(undef); # we are playing so we must be done retrying + if ($last_song->currentTrackHandler()->can('onPlay')) { + foreach my $player (@{$self->{'players'}}) { + $last_song->currentTrackHandler()->onPlay($player, $last_song); + } + } } # Update a few timestamps