Files
klubhaus-doorbell/libraries/audio-tools/examples/examples-communication/http-client/player-url_subclass-i2s/AudioSourceIcyUrl.h
2026-02-16 19:05:11 -08:00

53 lines
1.5 KiB
C++

#pragma once
#include "AudioTools.h"
#include "AudioTools/Communication/HTTP/URLStream.h"
#include "AudioTools/Disk/AudioSourceURL.h"
namespace audio_tools {
/**
* @brief URLStream which provides the ICY Http Parameters
*
*/
class AudioSourceIcyUrl : public AudioSourceURL {
public:
template<typename T, size_t N>
AudioSourceIcyUrl(URLStream& urlStream, T(&urlArray)[N], const char* mime, int start=0)
: AudioSourceURL(urlStream, urlArray, mime,start) {
}
const char *icyValue(const char* name) {
return actual_stream->httpRequest().reply().get(name);
}
const char *icyName() {
return icyValue("icy-name");
}
const char *icyDescription() {
return icyValue("icy-description");
}
const char *icyGenre() {
return icyValue("icy-genre");
}
/// Returns the last section of a url: https://22323.live.streamtheworld.com/TOPRETRO.mp3 gives TOPRETRO.mp3
const char *urlName(){
const char* result = "";
StrView tmpStr(toStr());
int pos = tmpStr.lastIndexOf("/");
if (pos>0){
result = toStr()+pos+1;
}
return result;
}
/// Returns the icy name if available otherwise we use our custom logic
const char* name() {
StrView result(icyName());
if (result.isEmpty()){
result.set(urlName());
}
return result.c_str();
}
};
}