From a859dd42ca037aeb714aedf75c6f8b2828e1c8b1 Mon Sep 17 00:00:00 2001 From: Qball Cow Date: Mon, 21 Dec 2009 14:31:01 +0100 Subject: [PATCH] Experimental use of the mpd_async_request function --- src/plugin.c | 49 +++++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/src/plugin.c b/src/plugin.c index b547039..036890b 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -354,6 +354,7 @@ static void albumview_selected(GmpcPluginBrowserIface *plug, GtkWidget *containe } gtk_container_add(GTK_CONTAINER(container), self->priv->albumview_main_box); gtk_widget_show(self->priv->albumview_main_box); + gtk_widget_show(container); gtk_widget_grab_focus(self->priv->event_bg); } @@ -422,22 +423,28 @@ static gint __add_sort(gpointer aa, gpointer bb, gpointer data) return -1; } -static gboolean load_list_itterate(AlbumViewPlugin *self) +static gboolean update_progressbar(AlbumViewPlugin *self) { + gchar *temp = g_strdup_printf("%i of %i albums loaded", self->priv->current_entry, self->priv->max_entries); + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(self->priv->progress_bar), self->priv->current_entry/(double)self->priv->max_entries); + gtk_progress_bar_set_text(GTK_PROGRESS_BAR(self->priv->progress_bar), temp); + g_free(temp); + return FALSE; +} + +static void load_list_itterate(MpdObj *mi, AlbumViewPlugin *self) +{ + do{ MpdData *data2 = NULL; self->priv->current_entry++; if(self->priv->max_entries>0 && self->priv->current_entry%25 == 0){ - gchar *temp = g_strdup_printf("%i of %i albums loaded", self->priv->current_entry, self->priv->max_entries); - gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(self->priv->progress_bar), self->priv->current_entry/(double)self->priv->max_entries); - gtk_progress_bar_set_text(GTK_PROGRESS_BAR(self->priv->progress_bar), temp); - g_free(temp); - + g_idle_add(update_progressbar, self); } if(self->priv->data) { - mpd_database_search_field_start(connection, MPD_TAG_ITEM_ARTIST); - mpd_database_search_add_constraint(connection, MPD_TAG_ITEM_ALBUM, (self->priv->data)->tag); - data2 = mpd_database_search_commit(connection); + mpd_database_search_field_start(mi, MPD_TAG_ITEM_ARTIST); + mpd_database_search_add_constraint(mi, MPD_TAG_ITEM_ALBUM, (self->priv->data)->tag); + data2 = mpd_database_search_commit(mi); if(data2) { mpd_Song *song = mpd_newSong(); @@ -446,11 +453,11 @@ static gboolean load_list_itterate(AlbumViewPlugin *self) if(!mpd_data_is_last(data2)) { /* test if server supports album artist */ - if(mpd_server_tag_supported(connection, MPD_TAG_ITEM_ALBUM_ARTIST)) + if(mpd_server_tag_supported(mi, MPD_TAG_ITEM_ALBUM_ARTIST)) { - mpd_database_search_field_start(connection, MPD_TAG_ITEM_ALBUM_ARTIST); - mpd_database_search_add_constraint(connection, MPD_TAG_ITEM_ALBUM, (self->priv->data)->tag); - MpdData *data3 = mpd_database_search_commit(connection); + mpd_database_search_field_start(mi, MPD_TAG_ITEM_ALBUM_ARTIST); + mpd_database_search_add_constraint(mi, MPD_TAG_ITEM_ALBUM, (self->priv->data)->tag); + MpdData *data3 = mpd_database_search_commit(mi); if(mpd_data_is_last(data3)){ if(strlen(data3->tag) > 0) { @@ -481,10 +488,16 @@ static gboolean load_list_itterate(AlbumViewPlugin *self) (self->priv->data) = mpd_data_get_next((self->priv->data)); } + } + while(self->priv->data != NULL); + self->priv->complete_list = (MpdData *)misc_sort_mpddata(mpd_data_get_first(self->priv->complete_list), (GCompareDataFunc)__add_sort, NULL); +} + +void update_finished(MpdData *data, AlbumViewPlugin *self) +{ if(self->priv->data == NULL){ int items = 0; MpdData_real *iter; - self->priv->complete_list = (MpdData *)misc_sort_mpddata(mpd_data_get_first(self->priv->complete_list), (GCompareDataFunc)__add_sort, NULL); g_log(AV_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,"update view\n"); gtk_widget_destroy(self->priv->progress_bar); self->priv->progress_bar = NULL; @@ -494,11 +507,11 @@ static gboolean load_list_itterate(AlbumViewPlugin *self) filter_list(GTK_ENTRY(self->priv->filter_entry), self); gtk_widget_grab_focus(self->priv->event_bg); - return FALSE; + // return FALSE; } - g_idle_add((GSourceFunc)load_list_itterate, self); - return FALSE; + // g_idle_add((GSourceFunc)load_list_itterate, self); + // return FALSE; } static void load_list(AlbumViewPlugin *self) @@ -519,7 +532,7 @@ static void load_list(AlbumViewPlugin *self) gtk_widget_set_sensitive(self->priv->filter_entry, FALSE); for(iter = data; iter; iter = mpd_data_get_next_real(iter, FALSE)) self->priv->max_entries++; self->priv->data= data; - g_idle_add((GSourceFunc)load_list_itterate, self); + mpd_async_request(update_finished, self, load_list_itterate, self); } void albumview_connection_changed(GmpcConnection *conn, MpdObj *mi, int connect,void *usedata) { -- 2.11.4.GIT