diff options
Diffstat (limited to 'src/ui/include/screen_playing.hpp')
| -rw-r--r-- | src/ui/include/screen_playing.hpp | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/src/ui/include/screen_playing.hpp b/src/ui/include/screen_playing.hpp index 5ccfe391..148f2774 100644 --- a/src/ui/include/screen_playing.hpp +++ b/src/ui/include/screen_playing.hpp @@ -7,30 +7,54 @@ #pragma once #include <stdint.h> +#include <sys/_stdint.h> #include <memory> #include <vector> #include "lvgl.h" #include "database.hpp" +#include "future_fetcher.hpp" #include "screen.hpp" #include "track.hpp" +#include "track_queue.hpp" namespace ui { namespace screens { +/* + * The 'Now Playing' / 'Currently Playing' screen that contains information + * about the current track, as well as playback controls. + */ class Playing : public Screen { public: - explicit Playing(database::Track t); + explicit Playing(std::weak_ptr<database::Database> db, + audio::TrackQueue* queue); ~Playing(); - auto BindTrack(database::Track t) -> void; + auto Tick() -> void override; - auto UpdateTime(uint32_t) -> void; - auto UpdateNextUp(std::vector<database::Track> tracks) -> void; + // Callbacks invoked by the UI state machine in response to audio events. + + auto OnTrackUpdate() -> void; + auto OnPlaybackUpdate(uint32_t, uint32_t) -> void; + auto OnQueueUpdate() -> void; private: - database::Track track_; + auto BindTrack(const database::Track& track) -> void; + auto ApplyNextUp(const std::vector<database::Track>& tracks) -> void; + + std::weak_ptr<database::Database> db_; + audio::TrackQueue* queue_; + + std::optional<database::Track> track_; + std::vector<database::Track> next_tracks_; + + std::unique_ptr<database::FutureFetcher<std::optional<database::Track>>> + new_track_; + std::unique_ptr< + database::FutureFetcher<std::vector<std::optional<database::Track>>>> + new_next_tracks_; lv_obj_t* artist_label_; lv_obj_t* album_label_; @@ -40,7 +64,6 @@ class Playing : public Screen { lv_obj_t* play_pause_control_; lv_obj_t* next_up_container_; - std::vector<database::Track> next_tracks_; }; } // namespace screens |
