aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/dbUtils.c2
-rw-r--r--src/song.c28
-rw-r--r--src/song.h23
3 files changed, 34 insertions, 19 deletions
diff --git a/src/dbUtils.c b/src/dbUtils.c
index 24e3ff75e..63f1f33b7 100644
--- a/src/dbUtils.c
+++ b/src/dbUtils.c
@@ -66,7 +66,7 @@ int printDirectoryInDirectory(FILE * fp, Directory * directory, void * data) {
}
int printSongInDirectory(FILE * fp, Song * song, void * data) {
- myfprintf(fp,"file: %s\n",song->utf8url);
+ printSongUrl(fp, song);
return 0;
}
diff --git a/src/song.c b/src/song.c
index 462a434cc..44afcbe4c 100644
--- a/src/song.c
+++ b/src/song.c
@@ -40,11 +40,12 @@ Song * newNullSong() {
song->tag = NULL;
song->utf8url = NULL;
song->type = SONG_TYPE_FILE;
+ song->parentDir = NULL;
return song;
}
-Song * newSong(char * utf8url, SONG_TYPE type) {
+Song * newSong(char * url, int type, Directory * parentDir) {
Song * song = NULL;
if(strchr(utf8url, '\n')) return NULL;
@@ -53,6 +54,9 @@ Song * newSong(char * utf8url, SONG_TYPE type) {
song->utf8url = strdup(utf8url);
song->type = type;
+ song->parentDir = parentDir;
+
+ assert(type == SONG_TYPE_URL || parentDir);
if(song->type == SONG_TYPE_FILE) {
InputPlugin * plugin;
@@ -86,25 +90,25 @@ SongList * newSongList() {
return makeList((ListFreeDataFunc *)freeSong);
}
-Song * addSongToList(SongList * list, char * key, char * utf8url,
- SONG_TYPE type)
+Song * addSongToList(SongList * list, char * url, int songType,
+ Directory * parentDirectory)
{
Song * song = NULL;
switch(type) {
case SONG_TYPE_FILE:
if(isMusic(utf8url,NULL)) {
- song = newSong(utf8url,type);
+ song = newSong(url, type, parentDirectory);
}
break;
case SONG_TYPE_URL:
- song = newSong(utf8url,type);
+ song = newSong(utf8url, type, parentDirectory);
break;
}
if(song==NULL) return NULL;
- insertInList(list,key,(void *)song);
+ insertInList(list, url, (void *)song);
return song;
}
@@ -113,8 +117,18 @@ void freeSongList(SongList * list) {
freeList(list);
}
+void printSongUrl(FILE * fp, Song * song) {
+ if(song->parentDir) {
+ myfprintf(fp, "%s%s%s\n", SONG_FILE, song->parentDir->utf8name,
+ song->url);
+ }
+ else {
+ myfprintf(fp, "%s%s\n", SONG_FILE, song->url);
+ }
+}
+
int printSongInfo(FILE * fp, Song * song) {
- myfprintf(fp,"%s%s\n",SONG_FILE,song->utf8url);
+ printSongUrl(fp, song);
if(song->tag) printMpdTag(fp,song->tag);
diff --git a/src/song.h b/src/song.h
index 3a14afb05..45f9e7923 100644
--- a/src/song.h
+++ b/src/song.h
@@ -21,24 +21,23 @@
#include "../config.h"
-#define SONG_BEGIN "songList begin"
-#define SONG_END "songList end"
-
#include <sys/param.h>
#include <time.h>
#include "tag.h"
#include "list.h"
-typedef enum {
- SONG_TYPE_FILE = 1,
- SONG_TYPE_URL = 2
-} SONG_TYPE;
+#define SONG_BEGIN "songList begin"
+#define SONG_END "songList end"
+
+#define SONG_TYPE_FILE 1
+#define SONG_TYPE_URL 2
typedef struct _Song {
- char * utf8url;
- SONG_TYPE type;
+ char * url;
+ mpd_sint8 type;
MpdTag * tag;
+ struct _Directory * parentDir;
time_t mtime;
} Song;
@@ -46,7 +45,7 @@ typedef List SongList;
Song * newNullSong();
-Song * newSong(char * utf8url, SONG_TYPE type);
+Song * newSong(char * utf8url, int songType, struct _Directory * parentDir);
void freeSong(Song *);
@@ -57,7 +56,7 @@ SongList * newSongList();
void freeSongList(SongList * list);
Song * addSongToList(SongList * list, char * key, char * utf8file,
- SONG_TYPE type);
+ int songType, struct _Directory * parentDir);
int printSongInfo(FILE * fp, Song * song);
@@ -71,4 +70,6 @@ int updateSongInfo(Song * song);
Song * songDup(Song * song);
+void printSongUrl(FILE * fp, Song * song);
+
#endif