aboutsummaryrefslogtreecommitdiff
path: root/nncmpp.c
diff options
context:
space:
mode:
Diffstat (limited to 'nncmpp.c')
-rw-r--r--nncmpp.c40
1 files changed, 17 insertions, 23 deletions
diff --git a/nncmpp.c b/nncmpp.c
index b9d8a4d..400e4d3 100644
--- a/nncmpp.c
+++ b/nncmpp.c
@@ -2080,23 +2080,23 @@ library_tab_on_item_draw (size_t item_index, struct row_buffer *buffer,
}
}
-static void
-library_tab_chunk (struct str_map *map)
+static char
+library_tab_header_type (const char *key)
{
- char *id, type;
- if ((id = str_map_find (map, "directory")))
- type = LIBRARY_DIR;
- else if ((id = str_map_find (map, "file")))
- type = LIBRARY_FILE;
- else
- return;
+ if (!strcasecmp_ascii (key, "file")) return LIBRARY_FILE;
+ if (!strcasecmp_ascii (key, "directory")) return LIBRARY_DIR;
+ return 0;
+}
+static void
+library_tab_chunk (char type, const char *path, struct str_map *map)
+{
const char *artist = str_map_find (map, "artist");
const char *title = str_map_find (map, "title");
char *name = (artist && title)
? xstrdup_printf ("%s - %s", artist, title)
- : xstrdup (xbasename (id));
- library_tab_add (type, name, id);
+ : xstrdup (xbasename (path));
+ library_tab_add (type, name, path);
free (name);
}
@@ -2143,23 +2143,17 @@ library_tab_on_data (const struct mpd_response *response,
str_map_init (&map);
map.key_xfrm = tolower_ascii_strxfrm;
- char *key, *value;
- for (size_t i = 0; i < data->len; i++)
- {
+ char *key, *value, type;
+ for (size_t i = data->len; i--; )
if (!(key = mpd_client_parse_kv (data->vector[i], &value)))
- {
print_debug ("%s: %s", "erroneous MPD output", data->vector[i]);
- continue;
- }
- if (!strcasecmp_ascii (key, "file")
- || !strcasecmp_ascii (key, "directory"))
+ else if (!(type = library_tab_header_type (key)))
+ str_map_set (&map, key, value);
+ else
{
- library_tab_chunk (&map);
+ library_tab_chunk (type, value, &map);
str_map_clear (&map);
}
- str_map_set (&map, key, value);
- }
- library_tab_chunk (&map);
str_map_free (&map);
struct str_vector *items = &g_library_tab.items;