diff options
| author | ailurux <ailuruxx@gmail.com> | 2024-02-16 17:02:54 +1100 |
|---|---|---|
| committer | ailurux <ailuruxx@gmail.com> | 2024-02-16 17:02:54 +1100 |
| commit | 19f60e33c4ba7eda86c709a8d73ca5e8ab100952 (patch) | |
| tree | 3181edfa09dc38c5cd52a07bcd3f64dfe05a4439 /src/audio/include/track_queue.hpp | |
| parent | 0baad11b188e7bac6b968017716186d9da0e492f (diff) | |
| parent | 4509ab8d6e341f7f7d92ac6e9d63ad822fe3441b (diff) | |
| download | tangara-fw-19f60e33c4ba7eda86c709a8d73ca5e8ab100952.tar.gz | |
Merge branch 'main' into seek-support
Diffstat (limited to 'src/audio/include/track_queue.hpp')
| -rw-r--r-- | src/audio/include/track_queue.hpp | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/src/audio/include/track_queue.hpp b/src/audio/include/track_queue.hpp index fd6061a7..e4fd7881 100644 --- a/src/audio/include/track_queue.hpp +++ b/src/audio/include/track_queue.hpp @@ -12,6 +12,7 @@ #include <shared_mutex> #include <vector> +#include "cppbor_parse.h" #include "database.hpp" #include "tasks.hpp" #include "track.hpp" @@ -24,6 +25,7 @@ namespace audio { */ class RandomIterator { public: + RandomIterator(); RandomIterator(size_t size); auto current() const -> size_t; @@ -35,6 +37,10 @@ class RandomIterator { auto resize(size_t) -> void; auto replay(bool) -> void; + auto seed() -> size_t& { return seed_; } + auto pos() -> size_t& { return pos_; } + auto size() -> size_t& { return size_; } + private: size_t seed_; size_t pos_; @@ -85,12 +91,11 @@ class TrackQueue { auto next() -> void; auto previous() -> void; - /* + /* * Called when the current track finishes */ auto finish() -> void; - auto skipTo(database::TrackId) -> void; /* @@ -125,6 +130,38 @@ class TrackQueue { std::optional<RandomIterator> shuffle_; bool repeat_; bool replay_; + + class QueueParseClient : public cppbor::ParseClient { + public: + QueueParseClient(TrackQueue& queue); + + ParseClient* item(std::unique_ptr<cppbor::Item>& item, + const uint8_t* hdrBegin, + const uint8_t* valueBegin, + const uint8_t* end) override; + + ParseClient* itemEnd(std::unique_ptr<cppbor::Item>& item, + const uint8_t* hdrBegin, + const uint8_t* valueBegin, + const uint8_t* end) override; + + void error(const uint8_t* position, + const std::string& errorMessage) override {} + + private: + TrackQueue& queue_; + + enum class State { + kInit, + kRoot, + kMetadata, + kShuffle, + kTracks, + kFinished, + }; + State state_; + size_t i_; + }; }; } // namespace audio |
