From 43a08b69c16438a329699e2a0367700c689d6b20 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 3 Oct 2009 19:19:08 +0200 Subject: [PATCH] utils: don't use mpdclient_filelist_get() in gcmp_list_from_path() Use libmpdclient's mpd_send_list_meta() instead. This way, we can stream MPD's response into the GList, and we don't need to read the full filelist response. --- src/utils.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/utils.c b/src/utils.c index 49f3c63..5a43f09 100644 --- a/src/utils.c +++ b/src/utils.c @@ -22,7 +22,6 @@ #include "charset.h" #include "i18n.h" #include "mpdclient.h" -#include "filelist.h" #include #include @@ -77,19 +76,17 @@ GList * gcmp_list_from_path(struct mpdclient *c, const gchar *path, GList *list, gint types) { - guint i; - struct filelist *filelist; + struct mpd_connection *connection; + struct mpd_entity *entity; - if ((filelist = mpdclient_filelist_get(c, path)) == NULL) + if (!mpdclient_is_connected(c)) return list; - for (i = 0; i < filelist_length(filelist); ++i) { - const struct mpd_entity *entity = - filelist_get(filelist, i)->entity; - char *name; + connection = c->connection; + mpd_send_list_meta(connection, path); - if (entity == NULL) - continue; + while ((entity = mpd_recv_entity(connection)) != NULL) { + char *name; if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_DIRECTORY && types & GCMP_TYPE_DIR) { @@ -112,13 +109,15 @@ gcmp_list_from_path(struct mpdclient *c, const gchar *path, const struct mpd_playlist *playlist = mpd_entity_get_playlist(entity); name = utf8_to_locale(mpd_playlist_get_path(playlist)); - } else + } else { + mpd_entity_free(entity); continue; + } list = g_list_append(list, name); + mpd_entity_free(entity); } - filelist_free(filelist); return list; } -- 2.30.2