TrackProvider.h 921 B

1234567891011121314151617181920212223242526272829303132333435
  1. #pragma once
  2. #include <memory>
  3. #include "AccessKeyFetcher.h"
  4. #include "CDNTrackStream.h"
  5. #include "CSpotContext.h"
  6. #include "TrackReference.h"
  7. #include "protobuf/metadata.pb.h"
  8. #include "protobuf/spirc.pb.h"
  9. namespace cspot {
  10. class TrackProvider {
  11. public:
  12. TrackProvider(std::shared_ptr<cspot::Context> ctx);
  13. ~TrackProvider();
  14. std::shared_ptr<CDNTrackStream> loadFromTrackRef(TrackReference& trackRef);
  15. private:
  16. std::shared_ptr<AccessKeyFetcher> accessKeyFetcher;
  17. std::shared_ptr<cspot::Context> ctx;
  18. std::unique_ptr<cspot::CDNTrackStream> cdnStream;
  19. Track trackInfo;
  20. std::weak_ptr<CDNTrackStream> currentTrackReference;
  21. TrackReference trackIdInfo;
  22. void queryMetadata();
  23. void onMetadataResponse(MercurySession::Response& res);
  24. void fetchFile(const std::vector<uint8_t>& fileId,
  25. const std::vector<uint8_t>& trackId);
  26. bool canPlayTrack(int index);
  27. };
  28. } // namespace cspot