#pragma once #include // for uint8_t #include // for shared_ptr, unique_ptr, weak_ptr #include // for vector #include "MercurySession.h" // for MercurySession #include "TrackReference.h" // for TrackReference #include "protobuf/metadata.pb.h" // for Episode, Restriction, Track namespace cspot { class AccessKeyFetcher; class CDNTrackStream; struct Context; class TrackProvider { public: TrackProvider(std::shared_ptr ctx); ~TrackProvider(); std::shared_ptr loadFromTrackRef(TrackReference& trackRef); private: std::shared_ptr accessKeyFetcher; std::shared_ptr ctx; std::unique_ptr cdnStream; Track trackInfo; Episode episodeInfo; std::weak_ptr currentTrackReference; TrackReference trackIdInfo; void queryMetadata(); void onMetadataResponse(MercurySession::Response& res); bool doRestrictionsApply(Restriction* restrictions, int count); void fetchFile(const std::vector& fileId, const std::vector& trackId); bool canPlayTrack(int index); }; } // namespace cspot