Commit 7c2b5533 authored by Max Kellermann's avatar Max Kellermann

playlist/EmbbeddedCue: convert to class

parent 409fc837
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#undef G_LOG_DOMAIN #undef G_LOG_DOMAIN
#define G_LOG_DOMAIN "cue" #define G_LOG_DOMAIN "cue"
struct embcue_playlist { struct EmbeddedCuePlaylist {
struct playlist_provider base; struct playlist_provider base;
/** /**
...@@ -62,12 +62,25 @@ struct embcue_playlist { ...@@ -62,12 +62,25 @@ struct embcue_playlist {
char *next; char *next;
CueParser *parser; CueParser *parser;
EmbeddedCuePlaylist()
:filename(nullptr), cuesheet(nullptr), parser(nullptr) {
playlist_provider_init(&base, &embcue_playlist_plugin);
}
~EmbeddedCuePlaylist() {
delete parser;
g_free(cuesheet);
g_free(filename);
}
Song *Read();
}; };
static void static void
embcue_tag_pair(const char *name, const char *value, void *ctx) embcue_tag_pair(const char *name, const char *value, void *ctx)
{ {
struct embcue_playlist *playlist = (struct embcue_playlist *)ctx; EmbeddedCuePlaylist *playlist = (EmbeddedCuePlaylist *)ctx;
if (playlist->cuesheet == NULL && if (playlist->cuesheet == NULL &&
g_ascii_strcasecmp(name, "cuesheet") == 0) g_ascii_strcasecmp(name, "cuesheet") == 0)
...@@ -89,9 +102,7 @@ embcue_playlist_open_uri(const char *uri, ...@@ -89,9 +102,7 @@ embcue_playlist_open_uri(const char *uri,
/* only local files supported */ /* only local files supported */
return NULL; return NULL;
struct embcue_playlist *playlist = g_new(struct embcue_playlist, 1); const auto playlist = new EmbeddedCuePlaylist();
playlist_provider_init(&playlist->base, &embcue_playlist_plugin);
playlist->cuesheet = NULL;
tag_file_scan(uri, &embcue_tag_handler, playlist); tag_file_scan(uri, &embcue_tag_handler, playlist);
if (playlist->cuesheet == NULL) { if (playlist->cuesheet == NULL) {
...@@ -102,7 +113,7 @@ embcue_playlist_open_uri(const char *uri, ...@@ -102,7 +113,7 @@ embcue_playlist_open_uri(const char *uri,
if (playlist->cuesheet == NULL) { if (playlist->cuesheet == NULL) {
/* no "CUESHEET" tag found */ /* no "CUESHEET" tag found */
g_free(playlist); delete playlist;
return NULL; return NULL;
} }
...@@ -117,48 +128,51 @@ embcue_playlist_open_uri(const char *uri, ...@@ -117,48 +128,51 @@ embcue_playlist_open_uri(const char *uri,
static void static void
embcue_playlist_close(struct playlist_provider *_playlist) embcue_playlist_close(struct playlist_provider *_playlist)
{ {
struct embcue_playlist *playlist = (struct embcue_playlist *)_playlist; EmbeddedCuePlaylist *playlist = (EmbeddedCuePlaylist *)_playlist;
delete playlist->parser; delete playlist;
g_free(playlist->cuesheet);
g_free(playlist->filename);
g_free(playlist);
} }
static Song * inline Song *
embcue_playlist_read(struct playlist_provider *_playlist) EmbeddedCuePlaylist::Read()
{ {
struct embcue_playlist *playlist = (struct embcue_playlist *)_playlist; Song *song = parser->Get();
Song *song = playlist->parser->Get();
if (song != NULL) if (song != NULL)
return song; return song;
while (*playlist->next != 0) { while (*next != 0) {
const char *line = playlist->next; const char *line = next;
char *eol = strpbrk(playlist->next, "\r\n"); char *eol = strpbrk(next, "\r\n");
if (eol != NULL) { if (eol != NULL) {
/* null-terminate the line */ /* null-terminate the line */
*eol = 0; *eol = 0;
playlist->next = eol + 1; next = eol + 1;
} else } else
/* last line; put the "next" pointer to the /* last line; put the "next" pointer to the
end of the buffer */ end of the buffer */
playlist->next += strlen(line); next += strlen(line);
playlist->parser->Feed(line); parser->Feed(line);
song = playlist->parser->Get(); song = parser->Get();
if (song != NULL) if (song != NULL)
return song->ReplaceURI(playlist->filename); return song->ReplaceURI(filename);
} }
playlist->parser->Finish(); parser->Finish();
song = playlist->parser->Get(); song = parser->Get();
if (song != NULL) if (song != NULL)
song = song->ReplaceURI(playlist->filename); song = song->ReplaceURI(filename);
return song; return song;
} }
static Song *
embcue_playlist_read(struct playlist_provider *_playlist)
{
EmbeddedCuePlaylist *playlist = (EmbeddedCuePlaylist *)_playlist;
return playlist->Read();
}
static const char *const embcue_playlist_suffixes[] = { static const char *const embcue_playlist_suffixes[] = {
/* a few codecs that are known to be supported; there are /* a few codecs that are known to be supported; there are
probably many more */ probably many more */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment