コード例 #1
0
static void
backend_update_packages (PkBackend *backend, gboolean only_trusted, gchar **package_ids)
{
	gint i;

	pk_backend_set_status (backend, PK_STATUS_ENUM_UPDATE);
	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);

	for (i = 0; package_ids[i]; i++) {
		pk_backend_set_string (backend, "pkgid", package_ids[i]);
		pk_backend_thread_create (backend, backend_update_package_thread);
	}
}
コード例 #2
0
static void
pk_backend_update_packages (PkBackend *backend, PkBackendJob *job, PkBitfield transaction_flags, gchar **package_ids)
{
	gint i;

	pk_backend_job_set_status (job, PK_STATUS_ENUM_UPDATE);
	pk_backend_job_set_percentage (job, PK_BACKEND_PERCENTAGE_INVALID);

	for (i = 0; package_ids[i]; i++) {
		pk_backend_set_string (backend, "pkgid", package_ids[i]);
		pk_backend_job_thread_create (job, backend_update_package_thread, NULL, NULL);
	}
}
コード例 #3
0
/*
 * Event handler for events emitted by pkg during an installation. TODO: Many
 * of these events are unhandled or deficiently handled.
 */
int
event_cb(void *backend_v, struct pkg_event *event)
{
	PkBackend      *backend;

	assert(backend_v != NULL);
	assert(event != NULL);

	backend = (PkBackend *)backend_v;

	switch (event->type) {
	case PKG_EVENT_INSTALL_BEGIN:
		STATUS(backend, PK_STATUS_ENUM_INSTALL);
		emit_package(event->e_install_begin.pkg,
		    backend,
		    PK_INFO_ENUM_INSTALLING);
		break;
	case PKG_EVENT_INSTALL_FINISHED:
		emit_package(event->e_install_finished.pkg,
		    backend,
		    PK_INFO_ENUM_FINISHED);
		break;
	case PKG_EVENT_DEINSTALL_BEGIN:
		STATUS(backend, PK_STATUS_ENUM_REMOVE);
		emit_package(event->e_deinstall_begin.pkg,
		    backend,
		    PK_INFO_ENUM_REMOVING);
		break;
	case PKG_EVENT_DEINSTALL_FINISHED:
		emit_package(event->e_deinstall_finished.pkg,
		    backend,
		    PK_INFO_ENUM_FINISHED);
		break;
	case PKG_EVENT_UPGRADE_BEGIN:
		STATUS(backend, PK_STATUS_ENUM_UPDATE);
		emit_package(event->e_upgrade_begin.pkg,
		    backend,
		    PK_INFO_ENUM_UPDATING);
		break;
	case PKG_EVENT_UPGRADE_FINISHED:
		emit_package(event->e_upgrade_finished.pkg,
		    backend,
		    PK_INFO_ENUM_FINISHED);
		break;
	case PKG_EVENT_FETCHING:
		STATUS(backend, PK_STATUS_ENUM_DOWNLOAD);
		break;
	case PKG_EVENT_INTEGRITYCHECK_BEGIN:
	case PKG_EVENT_INTEGRITYCHECK_FINISHED:
		/* Unimplemented */
		break;
	case PKG_EVENT_INTEGRITYCHECK_CONFLICT:
		ERR(backend,
		    PK_ERROR_ENUM_PACKAGE_CORRUPT,
		    event->e_integrity_conflict.pkg_name);
		break;
	case PKG_EVENT_NEWPKGVERSION:
		/* TODO: find a better enum for this? */
		ERR(backend,
		    PK_ERROR_ENUM_PACKAGE_INSTALL_BLOCKED,
		    "A new version of pkg is available; install that first.");
		break;
	case PKG_EVENT_NOTICE:
	case PKG_EVENT_INCREMENTAL_UPDATE:
		/* Unimplemented */
		break;
	case PKG_EVENT_ERROR:
		/*
		 * This is sometimes used for nonfatal errors, so we can't
		 * throw an error code here.  What we'll do (mainly for debug
		 * purposes) is post the error into the backend so we can
		 * retrieve it if it was fatal.
		 * 
		 * pk_backend_set_string seems to strdup, so we don't have to.
		 */
		(void)pk_backend_set_string(backend, "job_error",
		    event->e_pkg_error.msg);
		break;
	case PKG_EVENT_ERRNO:
	case PKG_EVENT_ARCHIVE_COMP_UNSUP:
		/* Unimplemented */
		break;
	case PKG_EVENT_ALREADY_INSTALLED:
		ERR(backend,
		    PK_ERROR_ENUM_PACKAGE_ALREADY_INSTALLED,
		    "Already installed.");
		break;
	case PKG_EVENT_FAILED_CKSUM:
	case PKG_EVENT_CREATE_DB_ERROR:
		/* Unimplemented */
		break;
	case PKG_EVENT_LOCKED:
		/* TODO: find a better enum for this? */
		ERR(backend,
		    PK_ERROR_ENUM_PACKAGE_INSTALL_BLOCKED,
		    "Package is locked.");
		break;
	case PKG_EVENT_REQUIRED:
		/* TODO: find a better enum for this? */
		ERR(backend,
		    PK_ERROR_ENUM_CANNOT_REMOVE_SYSTEM_PACKAGE,
		    "Package is required.");
		break;
	case PKG_EVENT_MISSING_DEP:
		ERR(backend,
		    PK_ERROR_ENUM_DEP_RESOLUTION_FAILED,
		    "Package is missing a dependency.");
		break;
	case PKG_EVENT_NOREMOTEDB:
	case PKG_EVENT_NOLOCALDB:
		/* Unimplemented */
		break;
	case PKG_EVENT_FILE_MISMATCH:
		ERR(backend,
		    PK_ERROR_ENUM_PACKAGE_CORRUPT,
		    pkg_file_path(event->e_file_mismatch.file));
		break;
	case PKG_EVENT_DEVELOPER_MODE:
	case PKG_EVENT_PLUGIN_ERRNO:
	case PKG_EVENT_PLUGIN_ERROR:
	case PKG_EVENT_PLUGIN_INFO:
		/* Unimplemented */
		break;
	case PKG_EVENT_NOT_FOUND:
		ERR(backend,
		    PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED,
		    event->e_not_found.pkg_name);
	}

	return EPKG_OK;
}