diff options
Diffstat (limited to '')
-rw-r--r-- | src/dbUtils.c | 2 | ||||
-rw-r--r-- | src/song.c | 28 | ||||
-rw-r--r-- | src/song.h | 23 |
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 |