#pragma once #include #include #include "config.h" #include "http_client_wrapper.h" class DataSource { private: public: DataSource() {}; virtual ~DataSource() {}; virtual size_t read(uint8_t* buf, size_t len) = 0; virtual int read() = 0; virtual size_t position() = 0; virtual void seek(size_t position) = 0; virtual size_t size() = 0; virtual void close() = 0; virtual void skip_id3_tag() {}; virtual bool usable() = 0; }; class SDDataSource : public DataSource { private: File _file; public: SDDataSource(String file); ~SDDataSource(); size_t read(uint8_t* buf, size_t len); int read(); size_t position(); void seek(size_t position); size_t size(); void close(); void skip_id3_tag(); bool usable(); }; class HTTPSDataSource : public DataSource { private: WiFiClient* _stream = NULL; HTTPClientWrapper* _http = NULL; uint32_t _position; String _url; void _init(String url, uint32_t offset); public: HTTPSDataSource(String url, uint32_t offset=0); ~HTTPSDataSource(); size_t read(uint8_t* buf, size_t len); int read(); size_t position(); void seek(size_t position); size_t size(); void close(); bool usable(); int peek(int offset=0); void skip_id3_tag(); };