static guint _mex_grilo_feed_browse (MexGriloFeed *feed, int offset, int limit, GrlSourceResultCb callback) { MexGriloFeedPrivate *priv = feed->priv; GrlOperationOptions *options; int op_id; options = grl_operation_options_new (NULL); grl_operation_options_set_flags (options, BROWSE_FLAGS); grl_operation_options_set_skip (options, priv->op->offset); grl_operation_options_set_count (options, priv->op->limit); op_id = grl_source_browse (priv->source, priv->root, priv->query_keys, options, callback, feed); g_object_unref (options); return op_id; }
static void media_browse_next (RBGriloSource *source) { GrlOperationOptions *options; rb_debug ("next media_browse op for %s (%d)", grl_source_get_name (source->priv->grilo_source), source->priv->media_browse_position); source->priv->media_browse_got_results = FALSE; if (source->priv->media_browse_container != NULL) { options = make_operation_options (source, GRL_OP_BROWSE, source->priv->media_browse_position); source->priv->media_browse_op = grl_source_browse (source->priv->grilo_source, source->priv->media_browse_container, source->priv->grilo_keys, options, (GrlSourceResultCb) grilo_media_browse_cb, source); } else { options = make_operation_options (source, GRL_OP_SEARCH, source->priv->media_browse_position); source->priv->media_browse_op = grl_source_search (source->priv->grilo_source, source->priv->search_text, source->priv->grilo_keys, options, (GrlSourceResultCb) grilo_media_browse_cb, source); } }
static void browse_next (RBGriloSource *source) { GrlOperationOptions *options; rb_debug ("next browse op for %s (%d)", grl_source_get_name (source->priv->grilo_source), source->priv->browse_position); source->priv->browse_got_results = FALSE; options = make_operation_options (source, GRL_OP_BROWSE, source->priv->browse_position); source->priv->browse_op = grl_source_browse (source->priv->grilo_source, source->priv->browse_container, source->priv->grilo_keys, options, (GrlSourceResultCb) grilo_browse_cb, source); }
static GList * list_children_cb (MS2Server *server, const gchar *id, ListType list_type, guint offset, guint max_count, const gchar **properties, gpointer data, GError **error) { GList *children; GrlMedia *media; GriloMs2Data *grdata; gint count; grdata = g_slice_new0 (GriloMs2Data); grdata->server = g_object_ref (server); grdata->source = (GrlSource *) data; grdata->options = grl_operation_options_new (NULL); grdata->keys = get_grilo_keys (properties, &grdata->other_keys); grdata->parent_id = g_strdup (id); grdata->offset = offset; grdata->list_type = list_type; grl_operation_options_set_resolution_flags (grdata->options, GRL_RESOLVE_FULL | GRL_RESOLVE_IDLE_RELAY); media = unserialize_media (grdata->source, id); /* Adjust limits */ if (offset >= limit) { browse_cb (grdata->source, 0, NULL, 0, grdata, NULL); } else { /* TIP: as Grilo is not able to split containers and items, in this case we will ask for all elements and then remove unneeded children in callback */ switch (list_type) { case LIST_ALL: count = max_count == 0? (limit - offset): CLAMP (max_count, 1, limit - offset); grl_operation_options_set_count (grdata->options, count); grl_operation_options_set_skip (grdata->options, offset); grdata->operation_id = grl_source_browse (grdata->source, media, grdata->keys, grdata->options, browse_cb, grdata); break; case LIST_CONTAINERS: case LIST_ITEMS: count = max_count == 0? limit: max_count; grl_operation_options_set_count (grdata->options, count); grl_operation_options_set_skip (grdata->options, 0); grdata->operation_id = grl_source_browse (grdata->source, media, grdata->keys, grdata->options, browse_cb, grdata); break; default: /* Protection. It should never be reached, unless ListType is extended */ browse_cb (grdata->source, 0, NULL, 0, grdata, NULL); } } wait_for_result (grdata); if (grdata->error) { if (error) { *error = grdata->error; } g_list_foreach (grdata->children, (GFunc) g_hash_table_unref, NULL); g_list_free (grdata->children); children = NULL; } else { children = grdata->children; } g_object_unref (media); g_list_free (grdata->keys); g_list_free (grdata->other_keys); g_free (grdata->parent_id); g_object_unref (grdata->server); g_object_unref (grdata->options); g_slice_free (GriloMs2Data, grdata); return children; }