diff --git a/src/queue/Queue.cxx b/src/queue/Queue.cxx index 31c84de53..719732cc3 100644 --- a/src/queue/Queue.cxx +++ b/src/queue/Queue.cxx @@ -19,6 +19,7 @@ #include "Queue.hxx" #include "song/DetachedSong.hxx" +#include "song/LightSong.hxx" #include @@ -38,6 +39,15 @@ Queue::~Queue() noexcept delete[] order; } +LightSong +Queue::GetLight(unsigned position) const noexcept +{ + assert(position < length); + + LightSong song{Get(position)}; + return song; +} + int Queue::GetNextOrder(unsigned _order) const noexcept { diff --git a/src/queue/Queue.hxx b/src/queue/Queue.hxx index b698bc767..a6e4ceffa 100644 --- a/src/queue/Queue.hxx +++ b/src/queue/Queue.hxx @@ -29,6 +29,7 @@ #include #include +struct LightSong; class DetachedSong; /** @@ -200,6 +201,11 @@ struct Queue { return *items[position].song; } + /** + * Like Get(), but return a #LightSong instance. + */ + LightSong GetLight(unsigned position) const noexcept; + /** * Returns the song at the specified order number. */ diff --git a/src/queue/Selection.cxx b/src/queue/Selection.cxx index 090ad0274..4be13c033 100644 --- a/src/queue/Selection.cxx +++ b/src/queue/Selection.cxx @@ -28,7 +28,7 @@ QueueSelection::MatchPosition(const Queue &queue, unsigned position) const noexcept { if (filter != nullptr) { - const LightSong song{queue.Get(position)}; + const auto song = queue.GetLight(position); if (!filter->Match(song)) return false; } diff --git a/test/test_queue_priority.cxx b/test/test_queue_priority.cxx index b6eaf800a..8fdab8c90 100644 --- a/test/test_queue_priority.cxx +++ b/test/test_queue_priority.cxx @@ -1,5 +1,6 @@ #include "queue/Queue.hxx" #include "song/DetachedSong.hxx" +#include "song/LightSong.hxx" #include @@ -8,6 +9,11 @@ Tag::Tag(const Tag &) noexcept {} void Tag::Clear() noexcept {} +DetachedSong::operator LightSong() const noexcept +{ + return {uri.c_str(), tag}; +} + static void check_descending_priority(const Queue *queue, unsigned start_order)