diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/filelist.c | 69 | ||||
-rw-r--r-- | src/filelist.h | 53 | ||||
-rw-r--r-- | src/mpdclient.c | 49 | ||||
-rw-r--r-- | src/mpdclient.h | 30 |
5 files changed, 126 insertions, 77 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index fc0160e65..a16fef521 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -16,6 +16,7 @@ ncmpc_headers = \ song.h \ mpdclient.h\ playlist.h \ + filelist.h \ options.h\ conf.h\ command.h\ @@ -46,6 +47,7 @@ ncmpc_SOURCES = \ main.c\ mpdclient.c\ playlist.c \ + filelist.c \ options.c\ conf.c\ command.c\ diff --git a/src/filelist.c b/src/filelist.c new file mode 100644 index 000000000..6f938ea30 --- /dev/null +++ b/src/filelist.c @@ -0,0 +1,69 @@ +/* + * (c) 2004 by Kalle Wallin <kaw@linux.se> + * (c) 2008 Max Kellermann <max@duempel.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "filelist.h" +#include "libmpdclient.h" + +#include <string.h> + +void +mpdclient_filelist_free(struct filelist *filelist) +{ + GList *list = g_list_first(filelist->list); + + if (list == NULL) + return; + + while (list != NULL) { + filelist_entry_t *entry = list->data; + + if (entry->entity) + mpd_freeInfoEntity(entry->entity); + + g_free(entry); + list = list->next; + } + + g_list_free(filelist->list); + g_free(filelist->path); + g_free(filelist); +} + +struct filelist_entry * +mpdclient_filelist_find_song(struct filelist *fl, + const struct mpd_song *song) +{ + GList *list = g_list_first(fl->list); + + while (list && song) { + filelist_entry_t *entry = list->data; + mpd_InfoEntity *entity = entry->entity; + + if (entity && entity->type == MPD_INFO_ENTITY_TYPE_SONG) { + struct mpd_song *song2 = entity->info.song; + + if (strcmp(song->file, song2->file) == 0) + return entry; + } + + list = list->next; + } + + return NULL; +} diff --git a/src/filelist.h b/src/filelist.h new file mode 100644 index 000000000..81ff5a37c --- /dev/null +++ b/src/filelist.h @@ -0,0 +1,53 @@ +/* + * (c) 2004 by Kalle Wallin <kaw@linux.se> + * (c) 2008 Max Kellermann <max@duempel.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef FILELIST_H +#define FILELIST_H + +#include <glib.h> + +struct mpd_song; + +typedef struct filelist_entry { + guint flags; + struct mpd_InfoEntity *entity; +} filelist_entry_t; + +typedef struct filelist { + /* path */ + gchar *path; + + /* list length */ + guint length; + + /* true if the list is updated */ + gboolean updated; + + /* the list */ + GList *list; +} mpdclient_filelist_t; + +void +mpdclient_filelist_free(struct filelist *filelist); + +struct filelist_entry * +mpdclient_filelist_find_song(struct filelist *flist, + const struct mpd_song *song); + +#endif diff --git a/src/mpdclient.c b/src/mpdclient.c index a2e272119..2f5591f60 100644 --- a/src/mpdclient.c +++ b/src/mpdclient.c @@ -736,31 +736,6 @@ mpdclient_playlist_update_changes(mpdclient_t *c) /*** Filelist functions *****************************************************/ /****************************************************************************/ -void -mpdclient_filelist_free(mpdclient_filelist_t *filelist) -{ - GList *list = g_list_first(filelist->list); - - D("mpdclient_filelist_free()\n"); - if (list == NULL) - return; - while (list != NULL) { - filelist_entry_t *entry = list->data; - - if (entry->entity) - mpd_freeInfoEntity(entry->entity); - g_free(entry); - list=list->next; - } - g_list_free(filelist->list); - g_free(filelist->path); - filelist->path = NULL; - filelist->list = NULL; - filelist->length = 0; - g_free(filelist); -} - - mpdclient_filelist_t * mpdclient_filelist_get(mpdclient_t *c, const gchar *path) { @@ -874,30 +849,6 @@ mpdclient_filelist_update(mpdclient_t *c, mpdclient_filelist_t *filelist) return NULL; } -filelist_entry_t * -mpdclient_filelist_find_song(mpdclient_filelist_t *fl, struct mpd_song *song) -{ - GList *list = g_list_first(fl->list); - - while( list && song) - { - filelist_entry_t *entry = list->data; - mpd_InfoEntity *entity = entry->entity; - - if( entity && entity->type==MPD_INFO_ENTITY_TYPE_SONG ) - { - struct mpd_song *song2 = entity->info.song; - - if( strcmp(song->file, song2->file) == 0 ) - { - return entry; - } - } - list = list->next; - } - return NULL; -} - int mpdclient_filelist_add_all(mpdclient_t *c, mpdclient_filelist_t *fl) { diff --git a/src/mpdclient.h b/src/mpdclient.h index 0698cbf45..c55e15453 100644 --- a/src/mpdclient.h +++ b/src/mpdclient.h @@ -3,6 +3,7 @@ #include "libmpdclient.h" #include "playlist.h" +#include "filelist.h" #define MPD_VERSION_EQ(c,x,y,z) (c->connection->version[0] == x && \ c->connection->version[1] == y && \ @@ -13,23 +14,6 @@ (c->connection->version[0]==x && c->connection->version[1]==y && \ c->connection->version[2]<z) ) -typedef struct filelist_entry { - guint flags; - mpd_InfoEntity *entity; -} filelist_entry_t; - -typedef struct mpdclient_filelist { - /* path */ - gchar *path; - /* list length */ - guint length; - /* true if the list is updated */ - gboolean updated; - /* the list */ - GList *list; - -} mpdclient_filelist_t; - typedef struct mpdclient { /* playlist */ mpdclient_playlist_t playlist; @@ -133,7 +117,7 @@ void mpdclient_playlist_callback(mpdclient_t *c, int event, gpointer data); /*** filelist functions ***************************************************/ -void mpdclient_filelist_free(mpdclient_filelist_t *filelist); + mpdclient_filelist_t *mpdclient_filelist_get(mpdclient_t *c, const gchar *path); mpdclient_filelist_t *mpdclient_filelist_search(mpdclient_t *c, int exact_match, @@ -146,16 +130,6 @@ mpdclient_filelist_t *mpdclient_filelist_search_utf8(mpdclient_t *c, mpdclient_filelist_t *mpdclient_filelist_update(mpdclient_t *c, mpdclient_filelist_t *flist); -#define HIGHLIGHT (0x01) -void mpdclient_filelist_set_flags(mpdclient_filelist_t *flist, - struct mpd_song *song, - guint flags); - -void mpdclient_filelist_clear_flags(mpdclient_filelist_t *flist); -void mpdclient_filelist_clear_flags(mpdclient_filelist_t *flist); -filelist_entry_t *mpdclient_filelist_find_song(mpdclient_filelist_t *flist, - struct mpd_song *song); - /* add all songs in filelist to the playlist */ int mpdclient_filelist_add_all(mpdclient_t *c, mpdclient_filelist_t *fl); |