Container * _new_container(QSP_ARG_DECL int type) { Container *cnt_p=NULL; assert( VALID_CONTAINER_TYPE(type) ); cnt_p = getbuf( sizeof(Container) ); init_container(cnt_p,type); set_container_type(cnt_p,type); return cnt_p; }
static void grilo_browse_cb (GrlSource *grilo_source, guint operation_id, GrlMedia *media, guint remaining, RBGriloSource *source, const GError *error) { if (operation_id != source->priv->browse_op) { return; } if (error != NULL) { /* do something? */ rb_debug ("got error for %s: %s", grl_source_get_name (grilo_source), error->message); source->priv->browse_op = 0; return; } if (media != NULL) { source->priv->browse_got_results = TRUE; source->priv->browse_position++; } if (media && GRL_IS_MEDIA_BOX (media)) { GtkTreeIter new_row; if (source->priv->browse_container == NULL) { /* insert at the end */ gtk_tree_store_insert_with_values (source->priv->browser_model, &new_row, NULL, -1, 0, g_object_ref (media), 1, grl_media_get_title (media), 2, CONTAINER_UNKNOWN_MEDIA, 3, 0, -1); } else { int n; /* insert before the expand marker row */ n = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (source->priv->browser_model), &source->priv->browse_container_iter); gtk_tree_store_insert_with_values (source->priv->browser_model, &new_row, &source->priv->browse_container_iter, n - 1, 0, g_object_ref (media), 1, grl_media_get_title (media), 2, CONTAINER_UNKNOWN_MEDIA, 3, 0, -1); } /* and insert an expand marker below it too */ gtk_tree_store_insert_with_values (source->priv->browser_model, NULL, &new_row, -1, 0, NULL, 1, "...", /* needs to be translatable? */ 2, CONTAINER_NO_MEDIA, 3, 0, -1); } else if (media && GRL_IS_MEDIA_AUDIO (media)) { source->priv->browse_got_media = TRUE; } if (remaining == 0) { source->priv->browse_op = 0; if (source->priv->browse_got_results == FALSE && source->priv->browse_container != NULL) { /* no more results for this container, so delete the marker row */ delete_marker_row (source, &source->priv->browse_container_iter); set_container_type (source, &source->priv->browse_container_iter, source->priv->browse_got_media); gtk_tree_store_set (source->priv->browser_model, &source->priv->browse_container_iter, 3, -1, -1); } else if (source->priv->browse_container != NULL) { if (source->priv->browse_position >= CONTAINER_GIVE_UP_POINT && gtk_tree_model_iter_n_children (GTK_TREE_MODEL (source->priv->browser_model), &source->priv->browse_container_iter) == 1) { /* no containers yet, so remove the marker row */ delete_marker_row (source, &source->priv->browse_container_iter); } else { /* store browse position for next time we want more */ gtk_tree_store_set (source->priv->browser_model, &source->priv->browse_container_iter, 3, source->priv->browse_position, -1); maybe_expand_container (source); } } else if (source->priv->browse_got_results && source->priv->browse_container == NULL) { /* get all top-level containers */ browse_next (source); } } }