| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 | 
							- #ifndef SPIRCCONTROLLER_H
 
- #define SPIRCCONTROLLER_H
 
- #include <vector>
 
- #include <string>
 
- #include <functional>
 
- #include "Utils.h"
 
- #include "MercuryManager.h"
 
- #include "Session.h"
 
- #include "PlayerState.h"
 
- #include "SpotifyTrack.h"
 
- #include "ConstantParameters.h"
 
- #include "Player.h"
 
- #include "ConfigJSON.h"
 
- #include <cassert>
 
- #include <variant>
 
- enum class CSpotEventType {
 
-     PLAY_PAUSE,
 
-     VOLUME,
 
-     TRACK_INFO,
 
-     DISC,
 
-     NEXT,
 
-     PREV,
 
-     SEEK,
 
- 	LOAD,
 
-     PLAYBACK_START
 
- };
 
- struct CSpotEvent {
 
-     CSpotEventType eventType;
 
-     std::variant<TrackInfo, int, bool> data;
 
- };
 
- typedef std::function<void(CSpotEvent&)> cspotEventHandler;
 
- class SpircController {
 
- private:
 
-     std::shared_ptr<MercuryManager> manager;
 
-     std::string username;
 
-     bool firstFrame = true;
 
-     std::unique_ptr<Player> player;
 
-     std::unique_ptr<PlayerState> state;
 
-     std::shared_ptr<AudioSink> audioSink;
 
-     std::shared_ptr<ConfigJSON> config;
 
-     cspotEventHandler eventHandler;
 
-     void sendCmd(MessageType typ);
 
-     void notify();
 
- 	void sendEvent(CSpotEventType eventType, std::variant<TrackInfo, int, bool> data = 0);
 
-     void handleFrame(std::vector<uint8_t> &data);
 
-     void loadTrack(uint32_t position_ms = 0, bool isPaused = 0);
 
- public:
 
-     SpircController(std::shared_ptr<MercuryManager> manager, std::string username, std::shared_ptr<AudioSink> audioSink);
 
-     ~SpircController();
 
-     void subscribe();
 
-     /** 
 
-      * @brief Pauses / Plays current song
 
-      *
 
-      * Calling this function will pause or resume playback, setting the 
 
-      * necessary state value and notifying spotify SPIRC.
 
-      *
 
-      * @param pause if true pause content, play otherwise
 
-      */
 
-     void setPause(bool pause, bool notifyPlayer = true);
 
-     /** 
 
-      * @brief Toggle Play/Pause
 
-      */
 
- 	void playToggle();
 
-     /** 
 
-      * @brief Notifies spotify servers about volume change
 
-      *
 
-      * @param volume int between 0 and `MAX_VOLUME`
 
-      */
 
-     void setRemoteVolume(int volume);
 
- 	/** 
 
-      * @brief Set device volume and notifies spotify
 
-      *
 
-      * @param volume int between 0 and `MAX_VOLUME`
 
-      */
 
- 	void setVolume(int volume);
 
- 	/** 
 
-      * @brief change volume by a given value
 
-      *
 
-      * @param volume int between 0 and `MAX_VOLUME`
 
-      */
 
-     void adjustVolume(int by);
 
-     /** 
 
-      * @brief Goes back to previous track and notfies spotify SPIRC
 
-      */
 
-     void prevSong();
 
-     /** 
 
-     * @brief Skips to next track and notfies spotify SPIRC
 
-     */
 
-     void nextSong();
 
-     void setEventHandler(cspotEventHandler handler);
 
-     void stopPlayer();
 
-     /** 
 
-      * @brief Disconnect players and notify
 
-      */
 
-     void disconnect();
 
- };
 
- #endif
 
 
  |