diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-11-23 14:08:46 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-11-23 14:08:46 +1100 |
| commit | 09c0e1608f2d88f56d8bf87ff90482459376ad95 (patch) | |
| tree | e675756aff8c8f78fe89c4f2f9e30c713f10cbfe /src/playlist/include/source.hpp | |
| parent | b07bfbc6c70fd0bba8dff85fe4149feb9fa9b8d4 (diff) | |
| download | tangara-fw-09c0e1608f2d88f56d8bf87ff90482459376ad95.tar.gz | |
Implement adding to the playback queue from lua
Diffstat (limited to 'src/playlist/include/source.hpp')
| -rw-r--r-- | src/playlist/include/source.hpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/playlist/include/source.hpp b/src/playlist/include/source.hpp index aa15e7df..ce12faf3 100644 --- a/src/playlist/include/source.hpp +++ b/src/playlist/include/source.hpp @@ -9,6 +9,7 @@ #include <deque> #include <memory> #include <mutex> +#include <stack> #include <variant> #include <vector> @@ -73,6 +74,24 @@ class IResetableSource : public ISource { virtual auto Reset() -> void = 0; }; +class IteratorSource : public IResetableSource { + public: + IteratorSource(const database::Iterator&); + + auto Current() -> std::optional<database::TrackId> override; + auto Advance() -> std::optional<database::TrackId> override; + auto Peek(std::size_t n, std::vector<database::TrackId>*) + -> std::size_t override; + + auto Previous() -> std::optional<database::TrackId> override; + auto Reset() -> void override; + + private: + const database::Iterator& start_; + std::optional<database::TrackId> current_; + std::stack<database::Iterator, std::vector<database::Iterator>> next_; +}; + auto CreateSourceFromResults( std::weak_ptr<database::Database>, std::shared_ptr<database::Result<database::IndexRecord>>) |
