static void backend_what_provides_thread(PkBackendJob *job, GVariant *params, gpointer user_data) { PkProvidesEnum provides; PkBitfield filters; const gchar *provides_text; gchar **values; bool error = false; AptIntf *apt = static_cast<AptIntf*>(pk_backend_job_get_user_data(job)); g_variant_get(params, "(tu^a&s)", &filters, &provides, &values); pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY); // We can handle libraries, mimetypes and codecs if (provides == PK_PROVIDES_ENUM_SHARED_LIB || provides == PK_PROVIDES_ENUM_MIMETYPE || provides == PK_PROVIDES_ENUM_CODEC || provides == PK_PROVIDES_ENUM_ANY) { if (!apt->init()) { g_debug("Failed to create apt cache"); g_strfreev(values); apt->emitFinished(); return; } pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY); PkgList output; if (provides == PK_PROVIDES_ENUM_SHARED_LIB) { apt->providesLibrary(output, values); } else if (provides == PK_PROVIDES_ENUM_MIMETYPE) { apt->providesMimeType(output, values); } else if (provides == PK_PROVIDES_ENUM_CODEC) { apt->providesCodec(output, values); } else { // PK_PROVIDES_ENUM_ANY, just search for everything a package can provide apt->providesLibrary(output, values); apt->providesCodec(output, values); apt->providesMimeType(output, values); } // It's faster to emit the packages here rather than in the matching part apt->emitPackages(output, filters); } else { provides_text = pk_provides_enum_to_string(provides); pk_backend_job_error_code(job, PK_ERROR_ENUM_NOT_SUPPORTED, "Provides %s not supported", provides_text); } apt->emitFinished(); }
/** * backend_what_provides: */ static void backend_what_provides (PkBackend *backend, PkBitfield filters, PkProvidesEnum provides, const gchar *search) { gchar *filters_text; const gchar *provides_text; provides_text = pk_provides_enum_to_string (provides); filters_text = pk_filter_bitfield_to_string (filters); pk_backend_spawn_helper (spawn, BACKEND_FILE, "what-provides", filters_text, provides_text, search, NULL); g_free (filters_text); }
/** * backend_what_provides: */ void pk_backend_what_provides (PkBackend *backend, PkBitfield filters, PkProvidesEnum provides, gchar **values) { gchar *search_text; gchar *filters_text; const gchar *provides_text; provides_text = pk_provides_enum_to_string (provides); filters_text = pk_filter_bitfield_to_string (filters); search_text = g_strjoinv ("&", values); pk_backend_spawn_helper (spawn, BACKEND_FILE, "what-provides", filters_text, provides_text, search_text, NULL); g_free (filters_text); g_free (search_text); }