#pragma once #include #include #include #include "main.h" #include "http_client_wrapper.h" enum PlaylistPersistence { PERSIST_NONE, PERSIST_TEMPORARY, PERSIST_PERMANENTLY }; struct PlaylistEntry { String filename; String title; String id; bool operator<(PlaylistEntry p) { return title < p.title; } }; class Playlist { private: uint32_t _position = 0; uint32_t _current_track = 0; bool _started = false; bool _shuffled = false; std::vector _files; String _title = ""; String _path; void _add_path(String path); void _examine_http_url(String url); void _parse_rss(HTTPClientWrapper* http); void _parse_m3u(HTTPClientWrapper* http); void _parse_pls(HTTPClientWrapper* http); public: PlaylistPersistence persistence = PERSIST_TEMPORARY; Playlist(String path); void start(); uint16_t get_file_count(); bool has_track_next(); bool has_track_prev(); bool track_next(); bool track_prev(); void track_restart(); bool set_track(uint8_t track); void set_track_by_id(String id); void reset(); String path(); bool is_empty(); bool get_current_file(String* dst); String get_current_track_id(); uint32_t get_position(); void set_position(uint32_t p); void shuffle(uint8_t random_offset=0); void advent_shuffle(uint8_t day); bool is_fresh(); void dump(); void json(JsonObject json); };