Files
EcliptNew/libEcliptPlayer/include/eclipt/Playlist.h
2026-03-03 08:13:16 +03:00

79 lines
1.8 KiB
C++

#ifndef ECLIPT_PLAYLIST_H
#define ECLIPT_PLAYLIST_H
#include <string>
#include <vector>
#include <cstdint>
#include <memory>
#include <functional>
namespace eclipt {
enum class PlaylistType {
M3U,
M3U8,
PLS,
EXT
};
struct StreamInfo {
int index = -1;
std::string name;
std::string language;
std::string codec;
int bandwidth = 0;
std::string url;
std::string group;
bool is_default = false;
bool is_selected = false;
};
struct PlaylistItem {
std::string name;
std::string url;
std::string tvg_name;
std::string tvg_id;
std::string group;
int tvg_logo = 0;
int64_t duration = -1;
bool is_live = false;
std::vector<StreamInfo> streams;
};
struct Playlist {
std::string name;
PlaylistType type = PlaylistType::M3U;
std::vector<PlaylistItem> items;
std::string base_url;
Playlist() = default;
bool loadFromFile(const std::string& path);
bool loadFromString(const std::string& content);
bool loadFromUrl(const std::string& url);
std::vector<PlaylistItem> getLiveStreams() const;
std::vector<PlaylistItem> getByGroup(const std::string& group) const;
PlaylistItem* findById(const std::string& id);
};
class IPlaylistParser {
public:
virtual ~IPlaylistParser() = default;
virtual bool parse(const std::string& content, Playlist& playlist) = 0;
virtual std::string getLastError() const = 0;
};
class M3UParser : public IPlaylistParser {
public:
bool parse(const std::string& content, Playlist& playlist) override;
std::string getLastError() const override { return last_error_; }
private:
std::string last_error_;
bool parseExtInf(const std::string& line, PlaylistItem& item);
bool parseAttribute(const std::string& attr, std::string& key, std::string& value);
};
}
#endif