59 lines
1.2 KiB
C++
59 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include <Arduino.h>
|
|
#include <SD.h>
|
|
#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 bool usable() = 0;
|
|
virtual int peek(int offset) = 0;
|
|
void skip_id3_tag();
|
|
};
|
|
|
|
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();
|
|
bool usable();
|
|
int peek(int offset=0);
|
|
};
|
|
|
|
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);
|
|
};
|