From f8eece22c81f75206f938526994f87b6091fcf3d Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sun, 12 Feb 2012 19:45:13 +0100 Subject: playlist/embcue: ignore "FILE", always point to container song file An embedded CUE sheet must always point to the song file it is contained in. --- src/playlist/embcue_playlist_plugin.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src/playlist/embcue_playlist_plugin.c') diff --git a/src/playlist/embcue_playlist_plugin.c b/src/playlist/embcue_playlist_plugin.c index b05b98e49..6d9a957f9 100644 --- a/src/playlist/embcue_playlist_plugin.c +++ b/src/playlist/embcue_playlist_plugin.c @@ -44,6 +44,13 @@ struct embcue_playlist { struct playlist_provider base; + /** + * This is an override for the CUE's "FILE". An embedded CUE + * sheet must always point to the song file it is contained + * in. + */ + char *filename; + /** * The value of the file's "CUESHEET" tag. */ @@ -97,6 +104,8 @@ embcue_playlist_open_uri(const char *uri, return NULL; } + playlist->filename = g_path_get_basename(uri); + playlist->next = playlist->cuesheet; playlist->parser = cue_parser_new(); @@ -110,6 +119,7 @@ embcue_playlist_close(struct playlist_provider *_playlist) cue_parser_free(playlist->parser); g_free(playlist->cuesheet); + g_free(playlist->filename); g_free(playlist); } @@ -137,11 +147,14 @@ embcue_playlist_read(struct playlist_provider *_playlist) cue_parser_feed(playlist->parser, line); song = cue_parser_get(playlist->parser); if (song != NULL) - return song; + return song_replace_uri(song, playlist->filename); } cue_parser_finish(playlist->parser); - return cue_parser_get(playlist->parser); + song = cue_parser_get(playlist->parser); + if (song != NULL) + song = song_replace_uri(song, playlist->filename); + return song; } static const char *const embcue_playlist_suffixes[] = { -- cgit v1.2.3