/* * Copyright 2023 jacqueline * * SPDX-License-Identifier: GPL-3.0-only */ #pragma once #include #include #include #include #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(std::weak_ptr db, audio::TrackQueue* queue); ~Playing(); auto Tick() -> void override; // 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: auto BindTrack(const database::Track& track) -> void; auto ApplyNextUp(const std::vector& tracks) -> void; std::weak_ptr db_; audio::TrackQueue* queue_; std::optional track_; std::vector next_tracks_; std::unique_ptr>> new_track_; std::unique_ptr< database::FutureFetcher>>> new_next_tracks_; lv_obj_t* artist_label_; lv_obj_t* album_label_; lv_obj_t* title_label_; lv_obj_t* scrubber_; lv_obj_t* play_pause_control_; lv_obj_t* next_up_container_; }; } // namespace screens } // namespace ui