#pragma once #include #include "AccessKeyFetcher.h" #include "CDNTrackStream.h" #include "CSpotContext.h" #include "TrackReference.h" #include "protobuf/metadata.pb.h" #include "protobuf/spirc.pb.h" namespace cspot { 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; std::weak_ptr currentTrackReference; TrackReference trackIdInfo; void queryMetadata(); void onMetadataResponse(MercurySession::Response& res); void fetchFile(const std::vector& fileId, const std::vector& trackId); bool canPlayTrack(int index); }; } // namespace cspot