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