diff options
author | Viliam Mateicka <viliam.mateicka@gmail.com> | 2008-12-16 21:42:42 +0100 |
---|---|---|
committer | Viliam Mateicka <viliam.mateicka@gmail.com> | 2008-12-16 21:42:42 +0100 |
commit | 455b39fa264a21c1f8eaa0c558d7ca76541ad505 (patch) | |
tree | 4a638591b9a2087e79b5548e1d6caf544d33ac36 /src/song.c | |
parent | 4d604a7540ae43ff01346f388ef3dede95ac856f (diff) | |
download | mpd-455b39fa264a21c1f8eaa0c558d7ca76541ad505.tar.gz mpd-455b39fa264a21c1f8eaa0c558d7ca76541ad505.tar.xz mpd-455b39fa264a21c1f8eaa0c558d7ca76541ad505.zip |
song: adding support for songs in archives
Diffstat (limited to 'src/song.c')
-rw-r--r-- | src/song.c | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/src/song.c b/src/song.c index eafd1fb4a..56ece8eaf 100644 --- a/src/song.c +++ b/src/song.c @@ -74,7 +74,12 @@ song_file_load(const char *path, struct directory *parent) song = song_file_new(path, parent); - ret = song_file_update(song); + //in archive ? + if (parent->device == DEVICE_INARCHIVE) { + ret = song_file_update_inarchive(song); + } else { + ret = song_file_update(song); + } if (!ret) { song_free(song); return NULL; @@ -123,6 +128,34 @@ song_file_update(struct song *song) return song->tag != NULL; } +bool +song_file_update_inarchive(struct song *song) +{ + char buffer[MPD_PATH_MAX]; + const char *path_fs; + const struct decoder_plugin *plugin; + + assert(song_is_file(song)); + + path_fs = map_song_fs(song, buffer); + if (path_fs == NULL) + return false; + + if (song->tag != NULL) { + tag_free(song->tag); + song->tag = NULL; + } + //accept every file that has music suffix + //because we dont support tag reading throught + //input streams + plugin = hasMusicSuffix(path_fs, 0); + if (plugin) { + song->tag = tag_new(); + //tag_add_item(tag, TAG_ITEM_TITLE, f->title); + } + return song->tag != NULL; +} + char * song_get_url(const struct song *song, char *path_max_tmp) { |