From 8d6d584bb401b5e82caca45eda9872fa6980588e Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Fri, 18 May 2012 12:03:43 +0200 Subject: [PATCH] * AudioEngine methods for directly playing artists / albums / queries. --- src/libtomahawk/audio/AudioEngine.cpp | 48 +++++++++++++++++++++++++++ src/libtomahawk/audio/AudioEngine.h | 3 ++ 2 files changed, 51 insertions(+) diff --git a/src/libtomahawk/audio/AudioEngine.cpp b/src/libtomahawk/audio/AudioEngine.cpp index 26be43e3b..b29919821 100644 --- a/src/libtomahawk/audio/AudioEngine.cpp +++ b/src/libtomahawk/audio/AudioEngine.cpp @@ -576,6 +576,54 @@ AudioEngine::playItem( Tomahawk::playlistinterface_ptr playlist, const Tomahawk: } +void +AudioEngine::playItem( Tomahawk::playlistinterface_ptr playlist, const Tomahawk::query_ptr& query ) +{ + tDebug() << query->toString(); + if ( !query.isNull() && query->numResults() ) + playItem( playlist, query->results().first() ); +} + + +void +AudioEngine::playItem( const Tomahawk::artist_ptr& artist ) +{ + if ( artist->playlistInterface()->trackCount() ) + { + playItem( artist->playlistInterface(), artist->playlistInterface()->tracks().first() ); + } + else + { + _detail::Closure* closure = NewClosure( artist.data(), SIGNAL( tracksAdded( QList ) ), const_cast(this), SLOT( playItem( Tomahawk::artist_ptr ) ), artist ); + } +} + + +void +AudioEngine::playItem( const Tomahawk::album_ptr& album ) +{ + playlistinterface_ptr pli = album->playlistInterface( Mixed ); + if ( pli->trackCount() ) + { + if ( pli->tracks().first()->resolvingFinished() ) + { + playItem( pli, pli->tracks().first() ); + } + else + { + _detail::Closure* closure = NewClosure( pli->tracks().first().data(), SIGNAL( resolvingFinished( bool ) ), + const_cast(this), SLOT( playItem( Tomahawk::album_ptr ) ), album ); + } + } + else if ( !pli->tracksLoaded() ) + { + _detail::Closure* closure = NewClosure( album.data(), SIGNAL( tracksAdded( QList, Tomahawk::ModelMode, Tomahawk::collection_ptr ) ), + const_cast(this), SLOT( playItem( Tomahawk::album_ptr ) ), album ); + pli->tracks(); + } +} + + void AudioEngine::onPlaylistNextTrackReady() { diff --git a/src/libtomahawk/audio/AudioEngine.h b/src/libtomahawk/audio/AudioEngine.h index ab65fb522..dc17b4871 100644 --- a/src/libtomahawk/audio/AudioEngine.h +++ b/src/libtomahawk/audio/AudioEngine.h @@ -93,6 +93,9 @@ public slots: void mute(); void playItem( Tomahawk::playlistinterface_ptr playlist, const Tomahawk::result_ptr& result ); + void playItem( Tomahawk::playlistinterface_ptr playlist, const Tomahawk::query_ptr& query ); + void playItem( const Tomahawk::artist_ptr& artist ); + void playItem( const Tomahawk::album_ptr& album ); void setPlaylist( Tomahawk::playlistinterface_ptr playlist ); void setQueue( Tomahawk::playlistinterface_ptr queue ) { m_queue = queue; }