/** * pk_package_sack_add_packages_from_line: **/ static gboolean pk_package_sack_add_packages_from_line (PkPackageSack *sack, const gchar *package_str, GError **error) { PkInfoEnum info; g_autoptr(GError) error_local = NULL; g_autoptr(PkPackage) package = NULL; g_auto(GStrv) pdata = NULL; package = pk_package_new (); pdata = g_strsplit (package_str, "\t", -1); if (g_strv_length (pdata) != 3) { g_set_error (error, 1, 0, "invalid package-info line: %s", package_str); return FALSE; } info = pk_info_enum_from_string (pdata[0]); g_object_set (package, "info", info, "summary", pdata[2], NULL); if (!pk_package_set_id (package, pdata[1], &error_local)) { g_set_error (error, 1, 0, "invalid package-id in package-info line: %s", pdata[1]); return FALSE; } if (!pk_package_sack_add_package (sack, package)) g_set_error (error, 1, 0, "could not add package '%s' to package-sack!", pdata[1]); return TRUE; }
/** * pk_package_sack_add_package_by_id: * @sack: a valid #PkPackageSack instance * @package_id: a package_id descriptor * @error: a %GError to put the error code and message in, or %NULL * * Adds a package reference to the sack. * * Return value: %TRUE if the package was added to the sack * * Since: 0.5.2 **/ gboolean pk_package_sack_add_package_by_id (PkPackageSack *sack, const gchar *package_id, GError **error) { g_autoptr(PkPackage) package = NULL; g_return_val_if_fail (PK_IS_PACKAGE_SACK (sack), FALSE); g_return_val_if_fail (package_id != NULL, FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); /* create new object */ package = pk_package_new (); if (!pk_package_set_id (package, package_id, error)) return FALSE; /* add to array, array will own object */ pk_package_sack_add_package (sack, package); return TRUE; }
/** * pk_package_sack_add_packages_from_line: **/ static void pk_package_sack_add_packages_from_line (PkPackageSack *sack, const gchar *package_str, GError **error) { GError *error_local = NULL; gboolean ret; PkPackage *package; gchar **pdata; PkInfoEnum info; g_return_if_fail (PK_IS_PACKAGE_SACK (sack)); package = pk_package_new (); pdata = g_strsplit (package_str, "\t", -1); if (g_strv_length (pdata) != 3) { g_set_error (error, 1, 0, "invalid package-info line: %s", package_str); goto out; } info = pk_info_enum_from_string (pdata[0]); g_object_set (package, "info", info, "summary", pdata[2], NULL); ret = pk_package_set_id (package, pdata[1], &error_local); if (!ret) { g_set_error (error, 1, 0, "invalid package-id in package-info line: %s", pdata[1]); goto out; } ret = pk_package_sack_add_package (sack, package); if (!ret) g_set_error (error, 1, 0, "could not add package '%s' to package-sack!", pdata[1]); out: g_strfreev (pdata); g_object_unref (package); }
/** * 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_package_sack_add_package_by_id: * @sack: a valid #PkPackageSack instance * @package_id: a package_id descriptor * @error: a %GError to put the error code and message in, or %NULL * * Adds a package reference to the sack. * * Return value: %TRUE if the package was added to the sack * * Since: 0.5.2 **/ gboolean pk_package_sack_add_package_by_id (PkPackageSack *sack, const gchar *package_id, GError **error) { PkPackage *package; gboolean ret; g_return_val_if_fail (PK_IS_PACKAGE_SACK (sack), FALSE); g_return_val_if_fail (package_id != NULL, FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); /* create new object */ package = pk_package_new (); ret = pk_package_set_id (package, package_id, error); if (!ret) goto out; /* add to array, array will own object */ pk_package_sack_add_package (sack, package); out: g_object_unref (package); return ret; }
/** * 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; }