summaryrefslogtreecommitdiff
path: root/src/audio/include/track_queue.hpp
diff options
context:
space:
mode:
authorailurux <ailuruxx@gmail.com>2024-02-16 17:02:54 +1100
committerailurux <ailuruxx@gmail.com>2024-02-16 17:02:54 +1100
commit19f60e33c4ba7eda86c709a8d73ca5e8ab100952 (patch)
tree3181edfa09dc38c5cd52a07bcd3f64dfe05a4439 /src/audio/include/track_queue.hpp
parent0baad11b188e7bac6b968017716186d9da0e492f (diff)
parent4509ab8d6e341f7f7d92ac6e9d63ad822fe3441b (diff)
downloadtangara-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.hpp41
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