/* MpdData_head *mpd_data_get_head(MpdData const * const data) { return ((MpdData_real*)data)->head; } */ MpdData* mpd_data_concatenate( MpdData * const first, MpdData * const second) { MpdData_real *first_real = (MpdData_real*)first; MpdData_real *second_real = (MpdData_real*)second; MpdData_real *first_head = NULL; if ( first == NULL ) { if ( second != NULL ) return (MpdData*)second_real; else return NULL; } else { if ( second == NULL ) return (MpdData*)first_real; } first_head = (MpdData_real *)mpd_data_get_first(first); /* find last element in first data list */ while (!mpd_data_is_last((MpdData*)first_real)) first_real = (MpdData_real*)mpd_data_get_next_real((MpdData*)first_real, FALSE); second_real =(MpdData_real*) mpd_data_get_first((MpdData*)second_real); first_real->next = second_real; second_real->prev = first_real; /* I need to set all the -> first correct */ while (second_real) { second_real->first = first_head; second_real = (MpdData_real*)mpd_data_get_next_real((MpdData*)second_real, FALSE); } return (MpdData*)first_head; }
MpdData *mpd_misc_sort_tag_list(MpdData *data) { char **array; MpdData *test; int i=0; int length=0; test = data = mpd_data_get_first(data); do{ length++; test = mpd_data_get_next_real(test, FALSE); }while(test != NULL); array = malloc(length*sizeof(char*)); test = data; do { array[i] = test->tag; test = mpd_data_get_next_real(test, FALSE); i++; }while(test != NULL); qsort(array,length,sizeof(char *),(QsortCompare)compa); /* reset list */ test = mpd_data_get_first(data); i=0; do { test->tag = array[i]; test = mpd_data_get_next_real(test, FALSE); i++; }while(test != NULL); free(array); return mpd_data_get_first(data); }
static void serverstats_combo_changed(GtkComboBox * box, GtkWidget * pb) { ss_str *s; int hits, total; gulong max_i; MpdData *node, *data; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(serverstats_tree)); int tag = gtk_combo_box_get_active(box); if (!mpd_check_connected(connection)) return; if (!mpd_server_check_version(connection, 0, 13, 0)) { playlist3_show_error_message("This feature is not supported in mpd older then version 0.13.0.", ERROR_WARNING); return; } /* reset the cancel flag */ cancel_query = FALSE; /* show progress bar */ gtk_widget_show_all(gtk_widget_get_parent(pb)); /** make the combo box insensitive and remove the model from the treeview */ gtk_tree_view_set_model(GTK_TREE_VIEW(serverstats_tree), NULL); gtk_widget_set_sensitive(GTK_WIDGET(box), FALSE); gtk_list_store_clear(GTK_LIST_STORE(model)); mpd_database_search_field_start(connection, tag); data = mpd_database_search_commit(connection); max_i = 0; hits = 0; total = 0; for (node = mpd_data_get_first(data); node != NULL; node = (MpdData *) mpd_data_get_next_real(node, FALSE)) total++; s = g_malloc0(sizeof(*s)); s->total = total; s->model = model; s->data = data; s->hits = 0; s->tag = tag; s->pb = pb; s->box = GTK_WIDGET(box); g_idle_add((GSourceFunc) serverstats_idle_handler, s); }
MpdData * mpd_data_get_next(MpdData * const data) { return mpd_data_get_next_real(data, TRUE); }