#pragma once #ifndef _MUSICQUEUE_HPP_ #define _MUSICQUEUE_HPP_ #include #include #include #include #include namespace bumbleBee { class MusicQueueElement { public: MusicQueueElement( dpp::message originalResponse, std::string id, std::string url, FILE* stream) : originalResponse(originalResponse), id(id), url(url), stream(stream) {} dpp::message originalResponse; std::string id; std::string url; FILE* stream; }; class MusicQueue { public: MusicQueue() { currentPlayingPosition = queue.begin(); repeat = false; } void enqueue(std::shared_ptr Element); std::shared_ptr dequeue(); std::shared_ptr findById(std::string id); std::weak_ptr nowplaying(); std::weak_ptr next_music(); std::weak_ptr jump_to_index(int idx); bool repeat; std::function on_queue_added; private: std::condition_variable queueItemAdded; std::mutex queueMutex; std::list> queue; std::list>::iterator currentPlayingPosition; }; } #endif