/** * as_data_pool_get_components_by_provided_item: * @dpool: An instance of #AsDataPool. * @kind: An #AsProvidesKind * @item: The value of the provided item. * @error: A #GError or %NULL. * * Find components in the AppStream data pool whcih provide a certain item. * * Returns: (element-type AsComponent) (transfer full): an array of #AsComponent objects which have been found. */ GPtrArray* as_data_pool_get_components_by_provided_item (AsDataPool *dpool, AsProvidedKind kind, const gchar *item, GError **error) { AsDataPoolPrivate *priv = GET_PRIVATE (dpool); GHashTableIter iter; gpointer value; GPtrArray *results; if (item == NULL) { g_set_error_literal (error, AS_DATA_POOL_ERROR, AS_DATA_POOL_ERROR_TERM_INVALID, "Search term must not be NULL."); return NULL; } results = g_ptr_array_new_with_free_func (g_object_unref); g_hash_table_iter_init (&iter, priv->cpt_table); while (g_hash_table_iter_next (&iter, NULL, &value)) { g_autoptr(GList) provided = NULL; GList *l; AsComponent *cpt = AS_COMPONENT (value); provided = as_component_get_provided (cpt); for (l = provided; l != NULL; l = l->next) { AsProvided *prov = AS_PROVIDED (l->data); if (kind != AS_PROVIDED_KIND_UNKNOWN) { /* check if the kind matches. an unknown kind matches all provides types */ if (as_provided_get_kind (prov) != kind) continue; } if (as_provided_has_item (prov, item)) g_ptr_array_add (results, g_object_ref (cpt)); } } return results; }
/** * as_pool_get_components_by_provided_item: * @pool: An instance of #AsPool. * @kind: An #AsProvidesKind * @item: The value of the provided item. * * Find components in the AppStream data pool whcih provide a certain item. * * Returns: (transfer container) (element-type AsComponent): an array of #AsComponent objects which have been found. */ GPtrArray* as_pool_get_components_by_provided_item (AsPool *pool, AsProvidedKind kind, const gchar *item) { AsPoolPrivate *priv = GET_PRIVATE (pool); GHashTableIter iter; gpointer value; GPtrArray *results; /* sanity check */ g_return_val_if_fail (item != NULL, NULL); results = g_ptr_array_new_with_free_func (g_object_unref); g_hash_table_iter_init (&iter, priv->cpt_table); while (g_hash_table_iter_next (&iter, NULL, &value)) { GPtrArray *provided = NULL; guint i; AsComponent *cpt = AS_COMPONENT (value); provided = as_component_get_provided (cpt); for (i = 0; i < provided->len; i++) { AsProvided *prov = AS_PROVIDED (g_ptr_array_index (provided, i)); if (kind != AS_PROVIDED_KIND_UNKNOWN) { /* check if the kind matches. an unknown kind matches all provides types */ if (as_provided_get_kind (prov) != kind) continue; } if (as_provided_has_item (prov, item)) g_ptr_array_add (results, g_object_ref (cpt)); } } return results; }