/** * pk_package_sack_filter: * @sack: a valid #PkPackageSack instance * @filter_cb: (scope call): a #PkPackageSackFilterFunc, which returns %TRUE for the #PkPackage's to add * @user_data: user data to pass to @filter_cb * * Returns a new package sack which only matches packages that return %TRUE * from the filter function. * * Return value: (transfer full): a new #PkPackageSack, free with g_object_unref() * * Since: 0.6.3 **/ PkPackageSack * pk_package_sack_filter (PkPackageSack *sack, PkPackageSackFilterFunc filter_cb, gpointer user_data) { PkPackageSack *results; PkPackage *package; guint i; PkPackageSackPrivate *priv = sack->priv; g_return_val_if_fail (PK_IS_PACKAGE_SACK (sack), NULL); g_return_val_if_fail (filter_cb != NULL, NULL); /* create new sack */ results = pk_package_sack_new (); /* add each that matches the info enum */ for (i = 0; i < priv->array->len; i++) { package = g_ptr_array_index (priv->array, i); if (filter_cb (package, user_data)) pk_package_sack_add_package (results, package); } return results; }
/** * pk_offline_get_prepared_sack: * @error: A #GError or %NULL * * Gets a package sack of the packages in the prepared transaction. * * Return value: (transfer full): A new #PkPackageSack, or %NULL * * Since: 0.9.6 **/ PkPackageSack * pk_offline_get_prepared_sack (GError **error) { guint i; g_autoptr(PkPackageSack) sack = NULL; g_auto(GStrv) package_ids = NULL; /* get the list of packages */ package_ids = pk_offline_get_prepared_ids (error); if (package_ids == NULL) return NULL; /* add them to the new array */ sack = pk_package_sack_new (); for (i = 0; package_ids[i] != NULL; i++) { if (!pk_package_sack_add_package_by_id (sack, package_ids[i], error)) return NULL; } return g_object_ref (sack); }
/** * pk_plugin_get_existing_prepared_updates: **/ static PkPackageSack * pk_plugin_get_existing_prepared_updates (const gchar *filename) { gboolean ret; gchar **package_ids = NULL; gchar *packages_data = NULL; GError *error = NULL; PkPackageSack *sack; guint i; /* always return a valid sack, even for failure */ sack = pk_package_sack_new (); /* does the file exist ? */ if (!g_file_test (filename, G_FILE_TEST_EXISTS)) goto out; /* get the list of packages to update */ ret = g_file_get_contents (filename, &packages_data, NULL, &error); if (!ret) { g_warning ("failed to read: %s", error->message); g_error_free (error); goto out; } /* add them to the new array */ package_ids = g_strsplit (packages_data, "\n", -1); for (i = 0; package_ids[i] != NULL; i++) pk_package_sack_add_package_by_id (sack, package_ids[i], NULL); out: g_free (packages_data); g_strfreev (package_ids); return sack; }
/** * pk_package_sack_filter_by_info: * @sack: a valid #PkPackageSack instance * @info: a %PkInfoEnum value to match * * Returns a new package sack which only matches packages that match the * specified info enum value. * * Return value: (transfer full): a new #PkPackageSack, free with g_object_unref() * * Since: 0.6.2 **/ PkPackageSack * pk_package_sack_filter_by_info (PkPackageSack *sack, PkInfoEnum info) { PkPackageSack *results; PkPackage *package; PkInfoEnum info_tmp; guint i; PkPackageSackPrivate *priv = sack->priv; g_return_val_if_fail (PK_IS_PACKAGE_SACK (sack), NULL); /* create new sack */ results = pk_package_sack_new (); /* add each that matches the info enum */ for (i = 0; i < priv->array->len; i++) { package = g_ptr_array_index (priv->array, i); info_tmp = pk_package_get_info (package); if (info_tmp == info) pk_package_sack_add_package (results, package); } return results; }