static void pos_print_row_cb (gint pos, void *userdata) { pl_pos_udata_t *pack = (pl_pos_udata_t *) userdata; xmmsc_result_t *infores; xmmsv_t *info; guint id; if (pos >= pack->entries->len) { return; } id = g_array_index (pack->entries, guint, pos); column_display_set_position (pack->coldisp, pos); id_coldisp_print_info (pack->infos, pack->coldisp, id); }
static void cli_list_print_positions_row (gint pos, void *udata) { cli_list_positions_t *pack = (cli_list_positions_t *) udata; gint id; if (pos >= xmmsv_list_get_size (pack->entries)) { return; } if (xmmsv_list_get_int (pack->entries, pos, &id)) { column_display_set_position (pack->coldisp, pos); XMMS_CALL_CHAIN (XMMS_CALL_P (xmmsc_medialib_get_info, pack->sync, id), FUNC_CALL_P (cli_list_print_row, pack->coldisp, XMMS_PREV_VALUE)); } }
void list_print_row (xmmsc_result_t *res, xmmsv_coll_t *filter, column_display_t *coldisp, gboolean is_search) { /* FIXME: w00t at code copy-paste, please modularize */ cli_infos_t *infos = column_display_infos_get (coldisp); xmmsc_result_t *infores = NULL; xmmsv_t *val, *info; GTree *list = NULL; const gchar *err; guint id; gint i = 0; val = xmmsc_result_get_value (res); if (!xmmsv_get_error (val, &err)) { xmmsv_list_iter_t *it; column_display_prepare (coldisp); if (filter != NULL) { xmmsc_result_t *filres; filres = xmmsc_coll_query_ids (infos->sync, filter, NULL, 0, 0); xmmsc_result_wait (filres); if ((list = matching_ids_tree (filres)) == NULL) { goto finish; } } if (is_search) { column_display_print_header (coldisp); } xmmsv_get_list_iter (val, &it); while (xmmsv_list_iter_valid (it)) { xmmsv_t *entry; xmmsv_list_iter_entry (it, &entry); if (xmmsv_get_uint (entry, &id) && (!list || g_tree_lookup (list, &id) != NULL)) { column_display_set_position (coldisp, i); id_coldisp_print_info (infos, coldisp, id); } xmmsv_list_iter_next (it); i++; } } else { g_printf (_("Server error: %s\n"), err); } if (is_search) { column_display_print_footer (coldisp); } else { g_printf ("\n"); column_display_print_footer_totaltime (coldisp); } finish: if (list) { g_tree_destroy (list); } column_display_free (coldisp); cli_infos_loop_resume (infos); xmmsc_result_unref (res); }