aboutsummaryrefslogtreecommitdiffstats
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
parent4d604a7540ae43ff01346f388ef3dede95ac856f (diff)
downloadmpd-455b39fa264a21c1f8eaa0c558d7ca76541ad505.tar.gz
mpd-455b39fa264a21c1f8eaa0c558d7ca76541ad505.tar.xz
mpd-455b39fa264a21c1f8eaa0c558d7ca76541ad505.zip
song: adding support for songs in archives
-rw-r--r--src/directory.h2
-rw-r--r--src/song.c35
-rw-r--r--src/song.h3
3 files changed, 39 insertions, 1 deletions
diff --git a/src/directory.h b/src/directory.h
index 72efa9c91..afe81faad 100644
--- a/src/directory.h
+++ b/src/directory.h
@@ -34,6 +34,8 @@
#define DIRECTORY_MPD_VERSION "mpd_version: "
#define DIRECTORY_FS_CHARSET "fs_charset: "
+#define DEVICE_INARCHIVE (unsigned)(-1)
+
struct directory {
struct dirvec children;
struct songvec songs;
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)
{
diff --git a/src/song.h b/src/song.h
index b8ee3aa99..7f40b7e9f 100644
--- a/src/song.h
+++ b/src/song.h
@@ -58,6 +58,9 @@ song_free(struct song *song);
bool
song_file_update(struct song *song);
+bool
+song_file_update_inarchive(struct song *song);
+
/*
* song_get_url - Returns a path of a song in UTF8-encoded form
* path_max_tmp is the argument that the URL is written to, this