socsvn commit: r254241 - soc2013/mattbw/backend/actions
mattbw at FreeBSD.org
mattbw at FreeBSD.org
Sat Jul 6 10:05:33 UTC 2013
Author: mattbw
Date: Sat Jul 6 10:05:32 2013
New Revision: 254241
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=254241
Log:
add events callback, doesn't seem to do a whole lot
Modified:
soc2013/mattbw/backend/actions/install-packages.c
Modified: soc2013/mattbw/backend/actions/install-packages.c
==============================================================================
--- soc2013/mattbw/backend/actions/install-packages.c Sat Jul 6 09:49:01 2013 (r254240)
+++ soc2013/mattbw/backend/actions/install-packages.c Sat Jul 6 10:05:32 2013 (r254241)
@@ -31,6 +31,7 @@
static gboolean body(struct query *q);
static gboolean sim_body(struct query *q);
+static int install_event_cb(void *backend_v, struct pkg_event *event);
static void do_install_packages(struct pkg_jobs *jobs, struct query *q, gboolean simulate);
static void do_install_solved_job(struct pkg_jobs *jobs, PkBackend *backend, gboolean simulate);
static void do_install_solved_job_real(struct pkg_jobs *jobs, PkBackend *backend);
@@ -84,6 +85,70 @@
}
/*
+ * Event handler for events emitted by pkg during an installation.
+ */
+static int
+install_event_cb(void *backend_v, struct pkg_event *event)
+{
+ PkBackend *backend;
+
+ backend = (PkBackend *)backend_v;
+
+ /* TODO: percentage bar */
+ switch(event->type) {
+ case PKG_EVENT_INSTALL_BEGIN:
+ pkgutils_emit(event->e_install_begin.pkg,
+ backend,
+ PK_INFO_ENUM_INSTALLING);
+ break;
+ case PKG_EVENT_INSTALL_FINISHED:
+ pkgutils_emit(event->e_install_finished.pkg,
+ backend,
+ PK_INFO_ENUM_FINISHED);
+ break;
+ case PKG_EVENT_DEINSTALL_BEGIN:
+ pkgutils_emit(event->e_deinstall_begin.pkg,
+ backend,
+ PK_INFO_ENUM_REMOVING);
+ break;
+ case PKG_EVENT_DEINSTALL_FINISHED:
+ pkgutils_emit(event->e_deinstall_finished.pkg,
+ backend,
+ PK_INFO_ENUM_FINISHED);
+ break;
+ case PKG_EVENT_UPGRADE_BEGIN:
+ pkgutils_emit(event->e_upgrade_begin.pkg,
+ backend,
+ PK_INFO_ENUM_UPDATING);
+ break;
+ case PKG_EVENT_UPGRADE_FINISHED:
+ pkgutils_emit(event->e_upgrade_finished.pkg,
+ backend,
+ PK_INFO_ENUM_FINISHED);
+ break;
+ case PKG_EVENT_ERROR:
+ pk_backend_error_code(backend,
+ PK_ERROR_ENUM_PACKAGE_FAILED_TO_INSTALL,
+ event->e_pkg_error.msg);
+ break;
+ case PKG_EVENT_FILE_MISMATCH:
+ pk_backend_error_code(backend,
+ PK_ERROR_ENUM_PACKAGE_CORRUPT,
+ pkg_file_path(event->e_file_mismatch.file));
+ break;
+ case PKG_EVENT_NOT_FOUND:
+ pk_backend_error_code(backend,
+ PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED,
+ event->e_not_found.pkg_name);
+ default:
+ /* Do nothing for unrecognised events */
+ break;
+ }
+
+ return EPKG_OK;
+}
+
+/*
* Installs (or pretends to install) an unsolved installation job.
*/
static void
@@ -133,11 +198,15 @@
do_install_solved_job_real(struct pkg_jobs *jobs, PkBackend *backend)
{
+ pkg_event_register(install_event_cb, backend);
+
pk_backend_set_status(backend, PK_STATUS_ENUM_INSTALL);
if (pkg_jobs_apply(jobs) != EPKG_OK)
pk_backend_error_code(backend,
PK_ERROR_ENUM_PACKAGE_FAILED_TO_INSTALL,
"job failed");
+
+ pkg_event_register(NULL, NULL);
}
/*
More information about the svn-soc-all
mailing list