예제 #1
0
static void
pk_backend_search_db (PkBackendJob *job, alpm_db_t *db, MatchFunc match,
		      const alpm_list_t *patterns)
{
	PkBackend *backend = pk_backend_job_get_backend (job);
	PkBackendAlpmPrivate *priv = pk_backend_get_user_data (backend);
	const alpm_list_t *i, *j;

	g_return_if_fail (db != NULL);
	g_return_if_fail (match != NULL);

	/* emit packages that match all search terms */
	for (i = alpm_db_get_pkgcache (db); i != NULL; i = i->next) {
		if (pk_backend_job_is_cancelled (job))
			break;

		for (j = patterns; j != NULL; j = j->next) {
			if (!match (i->data, j->data))
				break;
		}

		/* all search terms matched */
		if (j == NULL) {
			if (db == priv->localdb) {
				pk_alpm_pkg_emit (job, i->data,
						PK_INFO_ENUM_INSTALLED);
			} else if (!pk_alpm_pkg_is_local (job, i->data)) {
				pk_alpm_pkg_emit (job, i->data,
						PK_INFO_ENUM_AVAILABLE);
			}
		}
	}
}
예제 #2
0
static void
pk_backend_search_db (PkBackendJob *job, alpm_db_t *db, MatchFunc match,
		      const alpm_list_t *patterns, PkBitfield filters)
{
	PkBackend *backend = pk_backend_job_get_backend (job);
	PkBackendAlpmPrivate *priv = pk_backend_get_user_data (backend);
	const alpm_list_t *i, *j;

	g_return_if_fail (db != NULL);
	g_return_if_fail (match != NULL);

	/* emit packages that match all search terms */
	for (i = alpm_db_get_pkgcache (db); i != NULL; i = i->next) {
		if (pk_backend_job_is_cancelled (job))
			break;

		for (j = patterns; j != NULL; j = j->next) {
			if (!match (i->data, j->data))
				break;
		}

		/* not all search terms matched */
		if (j != NULL)
			continue;

		/* want applications */
		if (pk_bitfield_contain (filters, PK_FILTER_ENUM_APPLICATION) && !pk_alpm_search_is_application (i->data))
			continue;

		/* don't want applications */
		if (pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_APPLICATION) && pk_alpm_search_is_application (i->data))
			continue;

		if (db == priv->localdb) {
			pk_alpm_pkg_emit (job, i->data, PK_INFO_ENUM_INSTALLED);
		} else if (!pk_alpm_pkg_is_local (job, i->data)) {
			pk_alpm_pkg_emit (job, i->data, PK_INFO_ENUM_AVAILABLE);
		}
	}
}