diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/song_save.c | 7 | ||||
-rw-r--r-- | src/tag.c | 2 | ||||
-rw-r--r-- | src/tag.h | 6 | ||||
-rw-r--r-- | src/tag_save.c | 3 |
4 files changed, 18 insertions, 0 deletions
diff --git a/src/song_save.c b/src/song_save.c index 0d4c36f99..4fcb46e22 100644 --- a/src/song_save.c +++ b/src/song_save.c @@ -100,6 +100,13 @@ song_load(FILE *fp, struct directory *parent, const char *uri, } song->tag->time = atoi(value); + } else if (strcmp(line, "Playlist") == 0) { + if (!song->tag) { + song->tag = tag_new(); + tag_begin_add(song->tag); + } + + song->tag->has_playlist = strcmp(value, "yes") == 0; } else if (strcmp(line, SONG_MTIME) == 0) { song->mtime = atoi(value); } else if (strcmp(line, "Range") == 0) { @@ -158,6 +158,7 @@ struct tag *tag_new(void) struct tag *ret = g_new(struct tag, 1); ret->items = NULL; ret->time = -1; + ret->has_playlist = false; ret->num_items = 0; return ret; } @@ -226,6 +227,7 @@ struct tag *tag_dup(const struct tag *tag) ret = tag_new(); ret->time = tag->time; + ret->has_playlist = tag->has_playlist; ret->num_items = tag->num_items; ret->items = ret->num_items > 0 ? g_malloc(items_size(tag)) : NULL; @@ -88,6 +88,12 @@ struct tag { */ int time; + /** + * Does this file have an embedded playlist (e.g. embedded CUE + * sheet)? + */ + bool has_playlist; + /** an array of tag items */ struct tag_item **items; diff --git a/src/tag_save.c b/src/tag_save.c index efc476e19..2fdaef56c 100644 --- a/src/tag_save.c +++ b/src/tag_save.c @@ -28,6 +28,9 @@ void tag_save(FILE *file, const struct tag *tag) if (tag->time >= 0) fprintf(file, SONG_TIME "%i\n", tag->time); + if (tag->has_playlist) + fprintf(file, "Playlist: yes\n"); + for (unsigned i = 0; i < tag->num_items; i++) fprintf(file, "%s: %s\n", tag_item_names[tag->items[i]->type], |