aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Makefile.am2
-rw-r--r--src/libmpdclient.c67
-rw-r--r--src/libmpdclient.h68
-rw-r--r--src/song.c126
-rw-r--r--src/song.h101
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