From 3f7f199cb940c8d5f6d48f77fd59971adffe49ef Mon Sep 17 00:00:00 2001 From: jacqueline Date: Thu, 7 Dec 2023 16:57:05 +1100 Subject: Remove pre-iterator concepts - No more IndexRecord/Result/dbGetPage nonsense - Queue is just track ids - i am so tired and have so much to do --- src/audio/include/track_queue.hpp | 60 ++++++++++++--------------------------- 1 file changed, 18 insertions(+), 42 deletions(-) (limited to 'src/audio/include/track_queue.hpp') diff --git a/src/audio/include/track_queue.hpp b/src/audio/include/track_queue.hpp index bec887ae..4a1984c9 100644 --- a/src/audio/include/track_queue.hpp +++ b/src/audio/include/track_queue.hpp @@ -9,10 +9,11 @@ #include #include #include +#include #include #include "database.hpp" -#include "source.hpp" +#include "tasks.hpp" #include "track.hpp" namespace audio { @@ -32,77 +33,52 @@ namespace audio { */ class TrackQueue { public: - TrackQueue(); - - class Editor { - public: - ~Editor(); - - // Cannot be copied or moved. - Editor(const Editor&) = delete; - Editor& operator=(const Editor&) = delete; - - private: - friend TrackQueue; - - Editor(TrackQueue&); - - std::lock_guard lock_; - bool has_current_changed_; - }; - - auto Edit() -> Editor; + TrackQueue(tasks::Worker& bg_worker); /* Returns the currently playing track. */ - auto Current() const -> std::optional; + auto current() const -> std::optional; /* Returns, in order, tracks that have been queued to be played next. */ - auto PeekNext(std::size_t limit) const -> std::vector; + auto peekNext(std::size_t limit) const -> std::vector; /* * Returns the tracks in the queue that have already been played, ordered * most recently played first. */ - auto PeekPrevious(std::size_t limit) const -> std::vector; + auto peekPrevious(std::size_t limit) const -> std::vector; - auto GetCurrentPosition() const -> size_t; - auto GetTotalSize() const -> size_t; + auto currentPosition() const -> size_t; + auto totalSize() const -> size_t; using Item = std::variant; - auto Insert(Editor&, Item, size_t) -> void; - auto Append(Editor&, Item i) -> void; + auto insert(Item) -> void; + auto append(Item i) -> void; /* * Advances to the next track in the queue, placing the current track at the * front of the 'played' queue. */ - auto Next(Editor&) -> std::optional; - auto Previous(Editor&) -> std::optional; + auto next() -> void; + auto previous() -> void; - auto SkipTo(Editor&, database::TrackId) -> void; + auto skipTo(database::TrackId) -> void; /* * Removes all tracks from all queues, and stops any currently playing track. */ - auto Clear(Editor&) -> void; - - auto Save(std::weak_ptr) -> void; - auto Load(std::weak_ptr) -> void; + auto clear() -> void; // Cannot be copied or moved. TrackQueue(const TrackQueue&) = delete; TrackQueue& operator=(const TrackQueue&) = delete; private: - // FIXME: Make this a shared_mutex so that multithread reads don't block. - mutable std::recursive_mutex mutex_; + mutable std::shared_mutex mutex_; - std::optional current_; + tasks::Worker& bg_worker_; - // Note: stored in reverse order, i.e. most recent played it at the *back* of - // this vector. - std::pmr::vector played_; - std::pmr::vector enqueued_; + size_t pos_; + std::pmr::vector tracks_; }; } // namespace audio -- cgit v1.2.3