diff options
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/libmpdclient.c | 67 | ||||
-rw-r--r-- | src/libmpdclient.h | 68 | ||||
-rw-r--r-- | src/song.c | 126 | ||||
-rw-r--r-- | src/song.h | 101 |
5 files changed, 231 insertions, 133 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 53342ff54..857c97cc2 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -14,6 +14,7 @@ ncmpc_LDADD = \ ncmpc_headers = \ libmpdclient.h\ + song.h \ mpdclient.h\ easy_download.h\ options.h\ @@ -41,6 +42,7 @@ lyr_src=${lyr_src_fixed} ncmpc_SOURCES = \ libmpdclient.c\ + song.c \ main.c\ mpdclient.c\ options.c\ diff --git a/src/libmpdclient.c b/src/libmpdclient.c index 248d8ea2f..ae4bd9c24 100644 --- a/src/libmpdclient.c +++ b/src/libmpdclient.c @@ -911,73 +911,6 @@ void mpd_freeStats(mpd_Stats * stats) { free(stats); } -static void mpd_initSong(mpd_Song * song) { - song->file = NULL; - song->artist = NULL; - song->album = NULL; - song->track = NULL; - song->title = NULL; - song->name = NULL; - song->date = NULL; - /* added by Qball */ - song->genre = NULL; - song->composer = NULL; - song->disc = NULL; - song->comment = NULL; - - song->time = MPD_SONG_NO_TIME; - song->pos = MPD_SONG_NO_NUM; - song->id = MPD_SONG_NO_ID; -} - -static void mpd_finishSong(mpd_Song * song) { - if(song->file) str_pool_put(song->file); - if(song->artist) str_pool_put(song->artist); - if(song->album) str_pool_put(song->album); - if(song->title) str_pool_put(song->title); - if(song->track) str_pool_put(song->track); - if(song->name) str_pool_put(song->name); - if(song->date) str_pool_put(song->date); - if(song->genre) str_pool_put(song->genre); - if(song->composer) str_pool_put(song->composer); - if(song->disc) str_pool_put(song->disc); - if(song->comment) str_pool_put(song->comment); -} - -mpd_Song * mpd_newSong(void) { - mpd_Song * ret = malloc(sizeof(mpd_Song)); - - mpd_initSong(ret); - - return ret; -} - -void mpd_freeSong(mpd_Song * song) { - mpd_finishSong(song); - free(song); -} - -mpd_Song * mpd_songDup(const mpd_Song * song) { - mpd_Song * ret = mpd_newSong(); - - if(song->file) ret->file = str_pool_dup(song->file); - if(song->artist) ret->artist = str_pool_dup(song->artist); - if(song->album) ret->album = str_pool_dup(song->album); - if(song->title) ret->title = str_pool_dup(song->title); - if(song->track) ret->track = str_pool_dup(song->track); - if(song->name) ret->name = str_pool_dup(song->name); - if(song->date) ret->date = str_pool_dup(song->date); - if(song->genre) ret->genre= str_pool_dup(song->genre); - if(song->composer) ret->composer= str_pool_dup(song->composer); - if(song->disc) ret->disc = str_pool_dup(song->disc); - if(song->comment) ret->comment = str_pool_dup(song->comment); - ret->time = song->time; - ret->pos = song->pos; - ret->id = song->id; - - return ret; -} - static void mpd_initDirectory(mpd_Directory * directory) { directory->path = NULL; } diff --git a/src/libmpdclient.h b/src/libmpdclient.h index 1f044aabb..910699445 100644 --- a/src/libmpdclient.h +++ b/src/libmpdclient.h @@ -33,6 +33,8 @@ #ifndef LIBMPDCLIENT_H #define LIBMPDCLIENT_H +#include "song.h" + #ifdef WIN32 # define __W32API_USE_DLLIMPORT__ 1 #endif @@ -231,72 +233,6 @@ mpd_Stats * mpd_getStats(mpd_Connection * connection); void mpd_freeStats(mpd_Stats * stats); -/* SONG STUFF */ - -#define MPD_SONG_NO_TIME -1 -#define MPD_SONG_NO_NUM -1 -#define MPD_SONG_NO_ID -1 - -/* mpd_Song - * for storing song info returned by mpd - */ -typedef struct _mpd_Song { - /* filename of song */ - char * file; - /* artist, maybe NULL if there is no tag */ - char * artist; - /* title, maybe NULL if there is no tag */ - char * title; - /* album, maybe NULL if there is no tag */ - char * album; - /* track, maybe NULL if there is no tag */ - char * track; - /* name, maybe NULL if there is no tag; it's the name of the current - * song, f.e. the icyName of the stream */ - char * name; - /* date */ - char *date; - - /* added by qball */ - /* Genre */ - char *genre; - /* Composer */ - char *composer; - /* Disc */ - char *disc; - /* Comment */ - char *comment; - - /* length of song in seconds, check that it is not MPD_SONG_NO_TIME */ - int time; - /* if plchanges/playlistinfo/playlistid used, is the position of the - * song in the playlist */ - int pos; - /* song id for a song in the playlist */ - int id; -} mpd_Song; - -/* mpd_newSong - * use to allocate memory for a new mpd_Song - * file, artist, etc all initialized to NULL - * if your going to assign values to file, artist, etc - * be sure to malloc or strdup the memory - * use mpd_freeSong to free the memory for the mpd_Song, it will also - * free memory for file, artist, etc, so don't do it yourself - */ -mpd_Song * mpd_newSong(void); - -/* mpd_freeSong - * use to free memory allocated by mpd_newSong - * also it will free memory pointed to by file, artist, etc, so be careful - */ -void mpd_freeSong(mpd_Song * song); - -/* mpd_songDup - * works like strDup, but for a mpd_Song - */ -mpd_Song * mpd_songDup(const mpd_Song * song); - /* DIRECTORY STUFF */ /* mpd_Directory diff --git a/src/song.c b/src/song.c new file mode 100644 index 000000000..2d97daf7f --- /dev/null +++ b/src/song.c @@ -0,0 +1,126 @@ +/* libmpdclient + (c)2003-2006 by Warren Dukes (warren.dukes@gmail.com) + This project's homepage is: http://www.musicpd.org + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + - Neither the name of the Music Player Daemon nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "song.h" +#include "str_pool.h" + +#include <stdlib.h> + +static void mpd_initSong(mpd_Song * song) { + song->file = NULL; + song->artist = NULL; + song->album = NULL; + song->track = NULL; + song->title = NULL; + song->name = NULL; + song->date = NULL; + /* added by Qball */ + song->genre = NULL; + song->composer = NULL; + song->disc = NULL; + song->comment = NULL; + + song->time = MPD_SONG_NO_TIME; + song->pos = MPD_SONG_NO_NUM; + song->id = MPD_SONG_NO_ID; +} + +static void mpd_finishSong(mpd_Song * song) { + if (song->file) + str_pool_put(song->file); + if (song->artist) + str_pool_put(song->artist); + if (song->album) + str_pool_put(song->album); + if (song->title) + str_pool_put(song->title); + if (song->track) + str_pool_put(song->track); + if (song->name) + str_pool_put(song->name); + if (song->date) + str_pool_put(song->date); + if (song->genre) + str_pool_put(song->genre); + if (song->composer) + str_pool_put(song->composer); + if (song->disc) + str_pool_put(song->disc); + if (song->comment) + str_pool_put(song->comment); +} + +mpd_Song * mpd_newSong(void) { + mpd_Song * ret = malloc(sizeof(mpd_Song)); + + mpd_initSong(ret); + + return ret; +} + +void mpd_freeSong(mpd_Song * song) { + mpd_finishSong(song); + free(song); +} + +mpd_Song * mpd_songDup(const mpd_Song * song) { + mpd_Song * ret = mpd_newSong(); + + if (song->file) + ret->file = str_pool_dup(song->file); + if (song->artist) + ret->artist = str_pool_dup(song->artist); + if (song->album) + ret->album = str_pool_dup(song->album); + if (song->title) + ret->title = str_pool_dup(song->title); + if (song->track) + ret->track = str_pool_dup(song->track); + if (song->name) + ret->name = str_pool_dup(song->name); + if (song->date) + ret->date = str_pool_dup(song->date); + if (song->genre) + ret->genre= str_pool_dup(song->genre); + if (song->composer) + ret->composer= str_pool_dup(song->composer); + if (song->disc) + ret->disc = str_pool_dup(song->disc); + if (song->comment) + ret->comment = str_pool_dup(song->comment); + + ret->time = song->time; + ret->pos = song->pos; + ret->id = song->id; + + return ret; +} diff --git a/src/song.h b/src/song.h new file mode 100644 index 000000000..e618a47de --- /dev/null +++ b/src/song.h @@ -0,0 +1,101 @@ +/* libmpdclient + (c)2003-2006 by Warren Dukes (warren.dukes@gmail.com) + (c) 2008 Max Kellermann <max@duempel.org> + This project's homepage is: http://www.musicpd.org + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + - Neither the name of the Music Player Daemon nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef SONG_H +#define SONG_H + +#define MPD_SONG_NO_TIME -1 +#define MPD_SONG_NO_NUM -1 +#define MPD_SONG_NO_ID -1 + +/* mpd_Song + * for storing song info returned by mpd + */ +typedef struct _mpd_Song { + /* filename of song */ + char * file; + /* artist, maybe NULL if there is no tag */ + char * artist; + /* title, maybe NULL if there is no tag */ + char * title; + /* album, maybe NULL if there is no tag */ + char * album; + /* track, maybe NULL if there is no tag */ + char * track; + /* name, maybe NULL if there is no tag; it's the name of the current + * song, f.e. the icyName of the stream */ + char * name; + /* date */ + char *date; + + /* added by qball */ + /* Genre */ + char *genre; + /* Composer */ + char *composer; + /* Disc */ + char *disc; + /* Comment */ + char *comment; + + /* length of song in seconds, check that it is not MPD_SONG_NO_TIME */ + int time; + /* if plchanges/playlistinfo/playlistid used, is the position of the + * song in the playlist */ + int pos; + /* song id for a song in the playlist */ + int id; +} mpd_Song; + +/* mpd_newSong + * use to allocate memory for a new mpd_Song + * file, artist, etc all initialized to NULL + * if your going to assign values to file, artist, etc + * be sure to malloc or strdup the memory + * use mpd_freeSong to free the memory for the mpd_Song, it will also + * free memory for file, artist, etc, so don't do it yourself + */ +mpd_Song * mpd_newSong(void); + +/* mpd_freeSong + * use to free memory allocated by mpd_newSong + * also it will free memory pointed to by file, artist, etc, so be careful + */ +void mpd_freeSong(mpd_Song * song); + +/* mpd_songDup + * works like strDup, but for a mpd_Song + */ +mpd_Song * mpd_songDup(const mpd_Song * song); + +#endif |