/** * pk_plugin_get_installed_package_for_file: **/ static PkPackage * pk_plugin_get_installed_package_for_file (PkPlugin *plugin, const gchar *filename, GError **error) { PkPackage *package = NULL; gchar **filenames; /* use PK to find the correct package */ if (plugin->priv->list->len > 0) g_ptr_array_set_size (plugin->priv->list, 0); pk_backend_reset_job (plugin->backend, plugin->job); pk_backend_job_set_vfunc (plugin->job, PK_BACKEND_SIGNAL_FINISHED, (PkBackendJobVFunc) pk_plugin_finished_cb, plugin); pk_backend_job_set_vfunc (plugin->job, PK_BACKEND_SIGNAL_PACKAGE, (PkBackendJobVFunc) pk_plugin_package_cb, plugin); filenames = g_strsplit (filename, "|||", -1); pk_backend_search_files (plugin->backend, plugin->job, pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), filenames); g_strfreev (filenames); /* wait for finished */ g_main_loop_run (plugin->priv->loop); /* check that we only matched one package */ if (plugin->priv->list->len == 0) { g_set_error_literal (error, 1, 0, "no packages own this file"); goto out; } if (plugin->priv->list->len > 1) { g_set_error (error, 1, 0, "%i packages own this file", plugin->priv->list->len); goto out; } /* get the package */ package = g_ptr_array_index (plugin->priv->list, 0); if (package == NULL) { g_set_error_literal (error, 1, 0, "package invalid"); goto out; } out: return package; }
static gboolean pk_direct_search_files (PkDirectPrivate *priv, gchar **values, GError **error) { if (g_strv_length (values) < 1) { g_set_error_literal (error, PK_ERROR, PK_ERROR_INVALID_ARGUMENTS, "Not enough arguments, expected: <search>"); return FALSE; } pk_backend_start_job (priv->backend, priv->job); pk_backend_search_files (priv->backend, priv->job, 0, values); g_main_loop_run (priv->loop); pk_backend_stop_job (priv->backend, priv->job); return TRUE; }