summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: aff0eb4)
raw | patch | inline | side by side (parent: aff0eb4)
author | Max Kellermann <max@duempel.org> | |
Sat, 3 Oct 2009 17:19:08 +0000 (19:19 +0200) | ||
committer | Max Kellermann <max@duempel.org> | |
Sat, 3 Oct 2009 17:19:08 +0000 (19:19 +0200) |
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.
stream MPD's response into the GList, and we don't need to read the
full filelist response.
src/utils.c | patch | blob | history |
diff --git a/src/utils.c b/src/utils.c
index 49f3c63fa21e24557807304d712e133569b590b6..5a43f09a5a4176004080dc7cd255e837cf10d67e 100644 (file)
--- a/src/utils.c
+++ b/src/utils.c
#include "charset.h"
#include "i18n.h"
#include "mpdclient.h"
-#include "filelist.h"
#include <ctype.h>
#include <stdlib.h>
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) {
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;
}