aboutsummaryrefslogtreecommitdiffstats
path: root/src/song.c
diff options
context:
space:
mode:
authorViliam Mateicka <viliam.mateicka@gmail.com>2008-12-16 21:42:42 +0100
committerViliam Mateicka <viliam.mateicka@gmail.com>2008-12-16 21:42:42 +0100
commit455b39fa264a21c1f8eaa0c558d7ca76541ad505 (patch)
tree4a638591b9a2087e79b5548e1d6caf544d33ac36 /src/song.c
parent4d604a7540ae43ff01346f388ef3dede95ac856f (diff)
downloadmpd-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.c35
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)
{