diff options
| -rw-r--r-- | nncmpp.c | 40 | 
1 files changed, 17 insertions, 23 deletions
| @@ -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; | 
