static void backend_search_groups_thread(PkBackendJob *job, GVariant *params, gpointer user_data) { gchar **search; PkBitfield filters; g_variant_get(params, "(t^a&s)", &filters, &search); AptIntf *apt = static_cast<AptIntf*>(pk_backend_job_get_user_data(job)); if (!apt->init()) { g_debug("Failed to create apt cache"); apt->emitFinished(); return; } pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY); // It's faster to emmit the packages here rather than in the matching part PkgList output; output = apt->getPackagesFromGroup(search); apt->emitPackages(output, filters); pk_backend_job_set_percentage(job, 100); apt->emitFinished(); }
static void pk_backend_search_files_thread(PkBackendJob *job, GVariant *params, gpointer user_data) { gchar **search; PkBitfield filters; AptIntf *apt = static_cast<AptIntf*>(pk_backend_job_get_user_data(job)); g_variant_get(params, "(t^a&s)", &filters, &search); pk_backend_job_set_allow_cancel(job, true); // as we can only search for installed files lets avoid the opposite if (!pk_bitfield_contain(filters, PK_FILTER_ENUM_NOT_INSTALLED)) { if (!apt->init()) { g_debug("Failed to create apt cache"); return; } pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY); PkgList output; output = apt->searchPackageFiles(search); // It's faster to emit the packages here rather than in the matching part apt->emitPackages(output, filters); } }
static void backend_what_provides_thread(PkBackendJob *job, GVariant *params, gpointer user_data) { 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, "(t^a&s)", &filters, &values); pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY); // We can handle libraries, mimetypes and codecs if (!apt->init()) { g_debug("Failed to create apt cache"); g_strfreev(values); return; } pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY); PkgList output; 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); }
static void backend_get_updates_thread(PkBackendJob *job, GVariant *params, gpointer user_data) { PkBitfield filters; g_variant_get(params, "(t)", &filters); pk_backend_job_set_allow_cancel(job, true); AptIntf *apt = static_cast<AptIntf*>(pk_backend_job_get_user_data(job)); if (!apt->init()) { g_debug("Failed to create apt cache"); apt->emitFinished(); return; } pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY); PkgList updates; PkgList blocked; updates = apt->getUpdates(blocked); apt->emitUpdates(updates, filters); apt->emitPackages(blocked, filters, PK_INFO_ENUM_BLOCKED); apt->emitFinished(); }
static void backend_depends_on_or_requires_thread(PkBackendJob *job, GVariant *params, gpointer user_data) { PkRoleEnum role; PkBitfield filters; gchar **package_ids; gboolean recursive; gchar *pi; g_variant_get(params, "(t^a&sb)", &filters, &package_ids, &recursive); role = pk_backend_job_get_role(job); pk_backend_job_set_allow_cancel(job, true); AptIntf *apt = static_cast<AptIntf*>(pk_backend_job_get_user_data(job)); if (!apt->init()) { g_debug("Failed to create apt cache"); return; } pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY); PkgList output; for (uint i = 0; i < g_strv_length(package_ids); ++i) { if (apt->cancelled()) { break; } pi = package_ids[i]; if (pk_package_id_check(pi) == false) { pk_backend_job_error_code(job, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "%s", pi); return; } const pkgCache::VerIterator &ver = apt->aptCacheFile()->resolvePkgID(pi); if (ver.end()) { pk_backend_job_error_code(job, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, "Couldn't find package %s", pi); return; } if (role == PK_ROLE_ENUM_DEPENDS_ON) { apt->getDepends(output, ver, recursive); } else { apt->getRequires(output, ver, recursive); } } // It's faster to emit the packages here than in the matching part apt->emitPackages(output, filters); }
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(); }
static void backend_search_package_thread(PkBackendJob *job, GVariant *params, gpointer user_data) { gchar **values; gchar *search; PkBitfield filters; PkRoleEnum role; g_variant_get(params, "(t^a&s)", &filters, &values); search = g_strjoinv("|", values); AptIntf *apt = static_cast<AptIntf*>(pk_backend_job_get_user_data(job)); if (!apt->init()) { g_debug("Failed to create apt cache"); g_free(search); apt->emitFinished(); return; } if (_error->PendingError() == true) { g_free(search); apt->emitFinished(); return; } pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY); pk_backend_job_set_percentage(job, PK_BACKEND_PERCENTAGE_INVALID); pk_backend_job_set_allow_cancel(job, true); PkgList output; role = pk_backend_job_get_role(job); if (role == PK_ROLE_ENUM_SEARCH_DETAILS) { output = apt->searchPackageDetails(search); } else { output = apt->searchPackageName(search); } g_free(search); // It's faster to emmit the packages here than in the matching part apt->emitPackages(output, filters); pk_backend_job_set_percentage(job, 100); apt->emitFinished(); }
static void backend_get_packages_thread(PkBackendJob *job, GVariant *params, gpointer user_data) { PkBitfield filters; g_variant_get(params, "(t)", &filters); pk_backend_job_set_allow_cancel(job, true); AptIntf *apt = static_cast<AptIntf*>(pk_backend_job_get_user_data(job)); if (!apt->init()) { g_debug("Failed to create apt cache"); return; } PkgList output; output = apt->getPackages(); // It's faster to emit the packages rather here than in the matching part apt->emitPackages(output, filters); }
static void pk_backend_resolve_thread(PkBackendJob *job, GVariant *params, gpointer user_data) { gchar **search; PkBitfield filters; g_variant_get(params, "(t^a&s)", &filters, &search); pk_backend_job_set_allow_cancel(job, true); AptIntf *apt = static_cast<AptIntf*>(pk_backend_job_get_user_data(job)); if (!apt->init()) { g_debug("Failed to create apt cache"); return; } PkgList pkgs = apt->resolvePackageIds(search); // It's faster to emit the packages here rather than in the matching part apt->emitPackages(pkgs, filters); }