2019-11-20 04:04:27 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <Arduino.h>
|
|
|
|
#include <SD.h>
|
|
|
|
#include "config.h"
|
2019-11-20 05:13:15 +00:00
|
|
|
#include <HTTPClient.h>
|
2019-11-20 04:04:27 +00:00
|
|
|
|
|
|
|
class DataSource {
|
|
|
|
private:
|
|
|
|
public:
|
|
|
|
DataSource() {};
|
2019-11-20 05:13:15 +00:00
|
|
|
virtual ~DataSource() {};
|
2019-11-20 04:04:27 +00:00
|
|
|
virtual size_t read(uint8_t* buf, size_t len) = 0;
|
|
|
|
virtual uint8_t read() = 0;
|
|
|
|
virtual size_t position() = 0;
|
|
|
|
virtual void seek(size_t position) = 0;
|
|
|
|
virtual size_t size() = 0;
|
|
|
|
virtual void close() = 0;
|
2019-11-20 05:13:15 +00:00
|
|
|
virtual void skip_id3_tag() {};
|
|
|
|
virtual bool usable() = 0;
|
2019-11-20 04:04:27 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
class SDDataSource : public DataSource {
|
|
|
|
private:
|
|
|
|
File _file;
|
|
|
|
public:
|
|
|
|
SDDataSource(String file);
|
|
|
|
~SDDataSource();
|
|
|
|
size_t read(uint8_t* buf, size_t len);
|
|
|
|
uint8_t read();
|
|
|
|
size_t position();
|
|
|
|
void seek(size_t position);
|
|
|
|
size_t size();
|
|
|
|
void close();
|
|
|
|
void skip_id3_tag();
|
2019-11-20 05:13:15 +00:00
|
|
|
bool usable();
|
2019-11-20 04:04:27 +00:00
|
|
|
};
|
2019-11-20 05:13:15 +00:00
|
|
|
|
|
|
|
class HTTPSDataSource : public DataSource {
|
|
|
|
private:
|
|
|
|
WiFiClient* _stream = NULL;
|
|
|
|
HTTPClient* _http = NULL;
|
|
|
|
uint32_t _length;
|
|
|
|
uint32_t _position;
|
|
|
|
public:
|
|
|
|
HTTPSDataSource(String url, uint32_t offset=0);
|
|
|
|
~HTTPSDataSource();
|
|
|
|
size_t read(uint8_t* buf, size_t len);
|
|
|
|
uint8_t read();
|
|
|
|
size_t position();
|
|
|
|
void seek(size_t position);
|
|
|
|
size_t size();
|
|
|
|
void close();
|
|
|
|
bool usable();
|
|
|
|
};
|