static void xmmsv_propdict_get_int (const void *key, xmmsc_result_value_type_t type, const void *value, const char *source, void *user_data) { struct TargetInt *target = (struct TargetInt *) user_data; if (type != XMMSC_RESULT_VALUE_TYPE_INT32) { return; } if (strcmp (key, target->key) == 0) { target->val = XPOINTER_TO_INT (value); target->succeed = 1; } }
static void attr_each (const char *key, xmmsv_t *value, void *udata) { const char *s; xmmsv_get_string (value, &s); switch (XPOINTER_TO_INT (udata)) { case EACH_PAIR: rb_yield_values (2, rb_str_new2 (key), rb_str_new2 (s)); break; case EACH_KEY: rb_yield_values (1, rb_str_new2 (key)); break; case EACH_VALUE: rb_yield_values (1, rb_str_new2 (s)); break; } }
void format_pretty_list (xmmsc_connection_t *conn, GList *list) { guint count = 0; GList *n; gint columns; gchar *format_header, *format_rows; columns = find_terminal_width (); format_header = make_justified_columns_format (columns, 's'); format_rows = make_justified_columns_format (columns, 'd'); print_padded_string (columns, '-', TRUE, "-[Result]-"); print_info (format_header, "Id", "Artist", "Album", "Title"); for (n = list; n; n = g_list_next (n)) { const gchar *title; xmmsc_result_t *res; xmmsv_t *propdict, *val; gint mid = XPOINTER_TO_INT (n->data); if (!mid) { print_error ("Empty result!"); } res = xmmsc_medialib_get_info (conn, mid); xmmsc_result_wait (res); propdict = xmmsc_result_get_value (res); val = xmmsv_propdict_to_dict (propdict, NULL); if (xmmsv_dict_entry_get_string (val, "title", &title)) { const gchar *artist, *album; if (!xmmsv_dict_entry_get_string (val, "artist", &artist)) { artist = "Unknown"; } if (!xmmsv_dict_entry_get_string (val, "album", &album)) { album = "Unknown"; } print_info (format_rows, mid, artist, album, title); } else { const gchar *url; xmmsv_dict_entry_get_string (val, "url", &url); if (url) { gchar *filename = g_path_get_basename (url); if (filename) { print_info ("%-5.5d| %s", mid, filename); g_free (filename); } } } count++; xmmsv_unref (val); xmmsc_result_unref (res); } print_padded_string (columns, '-', FALSE, "-[Count:%6.d]-----", count); g_free (format_header); g_free (format_rows); }