[gnome-packagekit/glib2: 25/79] moo



commit 496573f45a558fdd9a19a2dda828c4ab6028686a
Author: Richard Hughes <richard hughsie com>
Date:   Thu Sep 17 14:30:32 2009 +0100

    moo

 src/Makefile.am                 |    8 -
 src/gpk-application.c           |  120 -------
 src/gpk-check-update.c          |   80 +----
 src/gpk-dbus-task.c             |  149 --------
 src/gpk-helper-eula.c           |  243 -------------
 src/gpk-helper-eula.h           |   67 ----
 src/gpk-helper-media-change.c   |  187 ----------
 src/gpk-helper-media-change.h   |   68 ----
 src/gpk-helper-repo-signature.c |  248 --------------
 src/gpk-helper-repo-signature.h |   71 ----
 src/gpk-helper-untrusted.c      |  252 --------------
 src/gpk-helper-untrusted.h      |   64 ----
 src/gpk-self-test.c             |    2 +
 src/gpk-task.c                  |  716 +++++++++++++++++++++++++++++++++++++++
 src/gpk-task.h                  |   63 ++++
 src/gpk-update-viewer.c         |  105 ------
 16 files changed, 796 insertions(+), 1647 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index da2fbd3..1117562 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -80,10 +80,6 @@ libgpkshared_a_SOURCES =				\
 	gpk-language.h					\
 	gpk-modal-dialog.c				\
 	gpk-modal-dialog.h				\
-	gpk-helper-repo-signature.c			\
-	gpk-helper-repo-signature.h			\
-	gpk-helper-eula.c				\
-	gpk-helper-eula.h				\
 	gpk-helper-run.c				\
 	gpk-helper-run.h				\
 	gpk-helper-deps-remove.c			\
@@ -92,12 +88,8 @@ libgpkshared_a_SOURCES =				\
 	gpk-helper-deps-install.h			\
 	gpk-helper-deps-update.c			\
 	gpk-helper-deps-update.h			\
-	gpk-helper-untrusted.c				\
-	gpk-helper-untrusted.h				\
 	gpk-helper-chooser.c				\
 	gpk-helper-chooser.h				\
-	gpk-helper-media-change.c			\
-	gpk-helper-media-change.h			\
 	gpk-gnome.c					\
 	gpk-gnome.h					\
 	gpk-common.c					\
diff --git a/src/gpk-application.c b/src/gpk-application.c
index ee02d59..ee2c40a 100644
--- a/src/gpk-application.c
+++ b/src/gpk-application.c
@@ -44,12 +44,9 @@
 #include "gpk-dialog.h"
 #include "gpk-cell-renderer-uri.h"
 #include "gpk-desktop.h"
-#include "gpk-helper-repo-signature.h"
-#include "gpk-helper-eula.h"
 #include "gpk-helper-run.h"
 #include "gpk-helper-deps-remove.h"
 #include "gpk-helper-deps-install.h"
-#include "gpk-helper-media-change.h"
 
 static void     gpk_application_finalize   (GObject	    *object);
 
@@ -105,12 +102,9 @@ struct GpkApplicationPrivate
 	PkActionMode		 action;
 	GPtrArray		*package_list;
 	GtkWidget		*image_status;
-	GpkHelperRepoSignature	*helper_repo_signature;
-	GpkHelperEula		*helper_eula;
 	GpkHelperRun		*helper_run;
 	GpkHelperDepsRemove	*helper_deps_remove;
 	GpkHelperDepsInstall	*helper_deps_install;
-	GpkHelperMediaChange	*helper_media_change;
 #if !PK_CHECK_VERSION(0,5,2)
 	gboolean		 dep_check_info_only; /* bodge to tell apart the differing uses of GetDepends */
 #endif
@@ -2901,54 +2895,6 @@ gpk_application_allow_cancel_cb (PkClient *client, gboolean allow_cancel, GpkApp
 }
 
 /**
- * gpk_application_repo_signature_event_cb:
- **/
-static void
-gpk_application_repo_signature_event_cb (GpkHelperRepoSignature *helper_repo_signature, GtkResponseType type, const gchar *key_id, const gchar *package_id, GpkApplication *application)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	if (type != GTK_RESPONSE_YES) {
-		goto out;
-	}
-
-	/* install signature */
-	ret = pk_client_install_signature (application->priv->client_secondary, PK_SIGTYPE_ENUM_GPG, key_id, package_id, &error);
-	if (!ret) {
-		egg_warning ("cannot install signature: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-out:
-	return;
-}
-
-/**
- * gpk_application_eula_event_cb:
- **/
-static void
-gpk_application_eula_event_cb (GpkHelperEula *helper_eula, GtkResponseType type, const gchar *eula_id, GpkApplication *application)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	if (type != GTK_RESPONSE_YES) {
-		goto out;
-	}
-
-	/* install signature */
-	ret = pk_client_accept_eula (application->priv->client_secondary, eula_id, &error);
-	if (!ret) {
-		egg_warning ("cannot accept eula: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-out:
-	return;
-}
-
-/**
  * gpk_application_deps_remove_event_cb:
  **/
 static void
@@ -3016,57 +2962,6 @@ out:
 }
 
 /**
- * gpk_application_media_change_event_cb:
- **/
-static void
-gpk_application_media_change_event_cb (GpkHelperMediaChange *helper_media_change, GtkResponseType type, GpkApplication *application)
-{
-	if (type != GTK_RESPONSE_YES)
-		goto out;
-
-	/* requeue */
-	gpk_application_primary_requeue (application);
-out:
-	return;
-}
-
-/**
- * gpk_application_eula_required_cb:
- **/
-static void
-gpk_application_eula_required_cb (PkClient *client, const gchar *eula_id, const gchar *package_id,
-				    const gchar *vendor_name, const gchar *license_agreement, GpkApplication *application)
-{
-	/* use the helper */
-	gpk_helper_eula_show (application->priv->helper_eula, eula_id, package_id, vendor_name, license_agreement);
-}
-
-#if PK_CHECK_VERSION(0,4,7)
-/**
- * gpk_application_media_change_required_cb:
- **/
-static void
-gpk_application_media_change_required_cb (PkClient *client, PkMediaTypeEnum type, const gchar *media_id, const gchar *media_text, GpkApplication *application)
-{
-	/* use the helper */
-	gpk_helper_media_change_show (application->priv->helper_media_change, type, media_id, media_text);
-}
-#endif
-
-/**
- * gpk_application_repo_signature_required_cb:
- **/
-static void
-gpk_application_repo_signature_required_cb (PkClient *client, const gchar *package_id, const gchar *repository_name,
-					      const gchar *key_url, const gchar *key_userid, const gchar *key_id,
-					      const gchar *key_fingerprint, const gchar *key_timestamp,
-					      PkSigTypeEnum type, GpkApplication *application)
-{
-	/* use the helper */
-	gpk_helper_repo_signature_show (application->priv->helper_repo_signature, package_id, repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp);
-}
-
-/**
  * gpk_application_package_row_activated_cb:
  **/
 static void
@@ -3781,14 +3676,6 @@ gpk_application_init (GpkApplication *application)
 	main_window = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "window_manager"));
 
 	/* helpers */
-	application->priv->helper_repo_signature = gpk_helper_repo_signature_new ();
-	g_signal_connect (application->priv->helper_repo_signature, "event", G_CALLBACK (gpk_application_repo_signature_event_cb), application);
-	gpk_helper_repo_signature_set_parent (application->priv->helper_repo_signature, GTK_WINDOW (main_window));
-
-	application->priv->helper_eula = gpk_helper_eula_new ();
-	g_signal_connect (application->priv->helper_eula, "event", G_CALLBACK (gpk_application_eula_event_cb), application);
-	gpk_helper_eula_set_parent (application->priv->helper_eula, GTK_WINDOW (main_window));
-
 	application->priv->helper_run = gpk_helper_run_new ();
 	gpk_helper_run_set_parent (application->priv->helper_run, GTK_WINDOW (main_window));
 
@@ -3800,10 +3687,6 @@ gpk_application_init (GpkApplication *application)
 	g_signal_connect (application->priv->helper_deps_install, "event", G_CALLBACK (gpk_application_deps_install_event_cb), application);
 	gpk_helper_deps_install_set_parent (application->priv->helper_deps_install, GTK_WINDOW (main_window));
 
-	application->priv->helper_media_change = gpk_helper_media_change_new ();
-	g_signal_connect (application->priv->helper_media_change, "event", G_CALLBACK (gpk_application_media_change_event_cb), application);
-	gpk_helper_media_change_set_parent (application->priv->helper_media_change, GTK_WINDOW (main_window));
-
 	/* Hide window first so that the dialogue resizes itself without redrawing */
 	gtk_widget_hide (main_window);
 	gtk_window_set_icon_name (GTK_WINDOW (main_window), GPK_ICON_SOFTWARE_INSTALLER);
@@ -4159,12 +4042,9 @@ gpk_application_finalize (GObject *object)
 	g_object_unref (application->priv->gconf_client);
 	g_object_unref (application->priv->markdown);
 	g_object_unref (application->priv->builder);
-	g_object_unref (application->priv->helper_eula);
 	g_object_unref (application->priv->helper_run);
 	g_object_unref (application->priv->helper_deps_remove);
 	g_object_unref (application->priv->helper_deps_install);
-	g_object_unref (application->priv->helper_media_change);
-	g_object_unref (application->priv->helper_repo_signature);
 
 	if (application->priv->status_id > 0)
 		g_source_remove (application->priv->status_id);
diff --git a/src/gpk-check-update.c b/src/gpk-check-update.c
index fc074f5..0bc57af 100644
--- a/src/gpk-check-update.c
+++ b/src/gpk-check-update.c
@@ -50,7 +50,6 @@
 #include "gpk-check-update.h"
 #include "gpk-enum.h"
 #include "gpk-error.h"
-#include "gpk-helper-repo-signature.h"
 
 static void     gpk_check_update_finalize	(GObject	     *object);
 static void	gpk_check_update_libnotify_cb (NotifyNotification *notification, gchar *action, gpointer data);
@@ -72,9 +71,8 @@ struct GpkCheckUpdatePrivate
 	gchar			*icon_name;
 	PkTransactionList	*tlist;
 	PkControl		*control;
-	GpkHelperRepoSignature	*helper_repo_signature;
 	GpkAutoRefresh		*arefresh;
-	PkClient		*client;
+	PkTask			*task;
 	GConfClient		*gconf_client;
 	guint			 number_updates_critical_last_shown;
 	NotifyNotification	*notification_updates_available;
@@ -534,8 +532,8 @@ gpk_check_update_libnotify_cb (NotifyNotification *notification, gchar *action,
 		/* try to cancel */
 		g_cancellable_cancel (cupdate->priv->cancellable);
 	} else if (g_strcmp0 (action, "update-all-packages") == 0) {
-		pk_client_update_system_async (cupdate->priv->client, TRUE, cupdate->priv->cancellable, NULL, NULL,
-					       (GAsyncReadyCallback) gpk_check_update_update_system_finished_cb, cupdate);
+		pk_task_update_system_async (cupdate->priv->task, cupdate->priv->cancellable, NULL, NULL,
+					     (GAsyncReadyCallback) gpk_check_update_update_system_finished_cb, cupdate);
 	} else if (g_strcmp0 (action, "show-update-viewer") == 0) {
 		ret = g_spawn_command_line_async (BINDIR "/gpk-update-viewer", &error);
 		if (!ret) {
@@ -546,8 +544,8 @@ gpk_check_update_libnotify_cb (NotifyNotification *notification, gchar *action,
 
 		/* just update the important updates */
 		package_ids = pk_ptr_array_to_strv (cupdate->priv->important_updates_array);
-		pk_client_update_packages_async (cupdate->priv->client, TRUE, package_ids, cupdate->priv->cancellable, NULL, NULL,
-						 (GAsyncReadyCallback) gpk_check_update_update_system_finished_cb, cupdate);
+		pk_task_update_packages_async (cupdate->priv->task, package_ids, cupdate->priv->cancellable, NULL, NULL,
+					       (GAsyncReadyCallback) gpk_check_update_update_system_finished_cb, cupdate);
 		g_strfreev (package_ids);
 
 	} else if (g_strcmp0 (action, "distro-upgrade-info") == 0) {
@@ -987,8 +985,8 @@ gpk_check_update_get_updates_finished_cb (GObject *object, GAsyncResult *res, Gp
 
 		/* convert */
 		package_ids = pk_ptr_array_to_strv (security_array);
-		pk_client_update_packages_async (cupdate->priv->client, TRUE, package_ids, cupdate->priv->cancellable, NULL, NULL,
-						 (GAsyncReadyCallback) gpk_check_update_update_system_finished_cb, cupdate);
+		pk_task_update_packages_async (cupdate->priv->task, package_ids, cupdate->priv->cancellable, NULL, NULL,
+					       (GAsyncReadyCallback) gpk_check_update_update_system_finished_cb, cupdate);
 		gpk_check_update_notify_doing_updates (cupdate);
 		g_strfreev (package_ids);
 		goto out;
@@ -997,8 +995,8 @@ gpk_check_update_get_updates_finished_cb (GObject *object, GAsyncResult *res, Gp
 	/* just do everything */
 	if (update == GPK_UPDATE_ENUM_ALL) {
 		egg_debug ("we should do the update automatically!");
-		pk_client_update_system_async (cupdate->priv->client, TRUE, cupdate->priv->cancellable, NULL, NULL,
-					       (GAsyncReadyCallback) gpk_check_update_update_system_finished_cb, cupdate);
+		pk_task_update_system_async (cupdate->priv->task, cupdate->priv->cancellable, NULL, NULL,
+					     (GAsyncReadyCallback) gpk_check_update_update_system_finished_cb, cupdate);
 		gpk_check_update_notify_doing_updates (cupdate);
 		goto out;
 	}
@@ -1034,7 +1032,7 @@ gpk_check_update_get_active_roles (GpkCheckUpdate *cupdate)
 	tids = pk_transaction_list_get_ids (cupdate->priv->tlist);
 	for (i=0; tids[i] != NULL; i++) {
 		/* get progress */
-		progress = pk_client_get_progress (cupdate->priv->client, tids[i], cupdate->priv->cancellable, &error);
+		progress = pk_client_get_progress (PK_CLIENT(cupdate->priv->task), tids[i], cupdate->priv->cancellable, &error);
 		if (progress == NULL) {
 			egg_warning ("failed to get progress of %s: %s", tids[i], error->message);
 			g_error_free (error);
@@ -1069,7 +1067,7 @@ gpk_check_update_query_updates (GpkCheckUpdate *cupdate)
 	}
 
 	/* get new update list */
-	pk_client_get_updates_async (cupdate->priv->client, PK_FILTER_ENUM_NONE, cupdate->priv->cancellable, NULL, NULL,
+	pk_client_get_updates_async (PK_CLIENT(cupdate->priv->task), PK_FILTER_ENUM_NONE, cupdate->priv->cancellable, NULL, NULL,
 				     (GAsyncReadyCallback) gpk_check_update_get_updates_finished_cb, cupdate);
 out:
 	return;
@@ -1198,7 +1196,7 @@ gpk_check_update_auto_refresh_cache_cb (GpkAutoRefresh *arefresh, GpkCheckUpdate
 {
 	g_return_if_fail (GPK_IS_CHECK_UPDATE (cupdate));
 
-	pk_client_refresh_cache_async (cupdate->priv->client, TRUE, cupdate->priv->cancellable, NULL, NULL,
+	pk_client_refresh_cache_async (PK_CLIENT(cupdate->priv->task), TRUE, cupdate->priv->cancellable, NULL, NULL,
 				       (GAsyncReadyCallback) gpk_check_update_refresh_cache_finished_cb, cupdate);
 }
 
@@ -1300,7 +1298,7 @@ out:
 static void
 gpk_check_update_auto_get_upgrades_cb (GpkAutoRefresh *arefresh, GpkCheckUpdate *cupdate)
 {
-	pk_client_get_distro_upgrades_async (cupdate->priv->client, cupdate->priv->cancellable, NULL, NULL,
+	pk_client_get_distro_upgrades_async (PK_CLIENT(cupdate->priv->task), cupdate->priv->cancellable, NULL, NULL,
 					     (GAsyncReadyCallback) gpk_check_update_get_distro_upgrades_finished_cb, cupdate);
 }
 
@@ -1365,49 +1363,6 @@ out:
 #endif
 
 /**
- * gpk_check_update_repo_signature_event_cb:
- **/
-static void
-gpk_check_update_repo_signature_event_cb (GpkHelperRepoSignature *helper_repo_signature, GtkResponseType type, const gchar *key_id, const gchar *package_id, GpkCheckUpdate *cupdate)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	if (type != GTK_RESPONSE_YES) {
-		goto out;
-	}
-
-	/* install signature */
-	ret = FALSE;//pk_client_install_signature_async (cupdate->priv->client, cupdate->priv->cancellable, PK_SIGTYPE_ENUM_GPG, key_id, package_id, &error);
-	if (!ret) {
-		egg_warning ("cannot install signature: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-	/* set state */
-	egg_debug ("repo sig cb");
-	gpk_check_update_query_updates (cupdate);
-out:
-	return;
-}
-
-#if 0
-/**
- * gpk_check_update_repo_signature_required_cb:
- **/
-static void
-gpk_check_update_repo_signature_required_cb (PkClient *client, const gchar *package_id, const gchar *repository_name,
-					      const gchar *key_url, const gchar *key_userid, const gchar *key_id,
-					      const gchar *key_fingerprint, const gchar *key_timestamp,
-					      PkSigTypeEnum type, GpkCheckUpdate *cupdate)
-{
-	/* use the helper */
-	gpk_helper_repo_signature_show (cupdate->priv->helper_repo_signature, package_id,
-					repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp);
-}
-#endif
-
-/**
  * gpk_check_update_get_properties_cb:
  **/
 static void
@@ -1491,11 +1446,7 @@ gpk_check_update_init (GpkCheckUpdate *cupdate)
 			  G_CALLBACK (gpk_cupdate_connection_changed_cb), cupdate);
 
 	/* use an asynchronous query object */
-	cupdate->priv->client = pk_client_new ();
-
-	/* helpers */
-	cupdate->priv->helper_repo_signature = gpk_helper_repo_signature_new ();
-	g_signal_connect (cupdate->priv->helper_repo_signature, "event", G_CALLBACK (gpk_check_update_repo_signature_event_cb), cupdate);
+	cupdate->priv->task = pk_task_new ();
 
 	cupdate->priv->control = pk_control_new ();
 	g_signal_connect (cupdate->priv->control, "updates-changed",
@@ -1544,9 +1495,8 @@ gpk_check_update_finalize (GObject *object)
 	g_object_unref (cupdate->priv->arefresh);
 	g_object_unref (cupdate->priv->gconf_client);
 	g_object_unref (cupdate->priv->control);
-	g_object_unref (cupdate->priv->client);
+	g_object_unref (cupdate->priv->task);
 	g_object_unref (cupdate->priv->dbus_monitor_viewer);
-	g_object_unref (cupdate->priv->helper_repo_signature);
 	g_object_unref (cupdate->priv->cancellable);
 	g_ptr_array_unref (cupdate->priv->important_updates_array);
 	g_free (cupdate->priv->icon_name);
diff --git a/src/gpk-dbus-task.c b/src/gpk-dbus-task.c
index 2603bda..4b95991 100644
--- a/src/gpk-dbus-task.c
+++ b/src/gpk-dbus-task.c
@@ -49,10 +49,7 @@
 #include "gpk-enum.h"
 #include "gpk-x11.h"
 #include "gpk-desktop.h"
-#include "gpk-helper-repo-signature.h"
-#include "gpk-helper-eula.h"
 #include "gpk-helper-run.h"
-#include "gpk-helper-untrusted.h"
 #include "gpk-helper-chooser.h"
 
 static void     gpk_dbus_task_finalize (GObject *object);
@@ -103,12 +100,7 @@ struct _GpkDbusTaskPrivate
 	gchar			*parent_icon_name;
 	gchar			*error_details;
 	gint			 timeout;
-	GpkHelperRepoSignature	*helper_repo_signature;
-	GpkHelperEula		*helper_eula;
 	GpkHelperRun		*helper_run;
-#if (!PK_CHECK_VERSION(0,5,0))
-	GpkHelperUntrusted	*helper_untrusted;
-#endif
 	GpkHelperChooser	*helper_chooser;
 	DBusGMethodInvocation	*context;
 	GpkDbusTaskRole		 role;
@@ -195,129 +187,7 @@ gpk_dbus_task_set_timestamp (GpkDbusTask *task, guint32 timestamp)
 	return TRUE;
 }
 
-/**
- * gpk_dbus_task_repo_signature_event_cb:
- **/
-static void
-gpk_dbus_task_repo_signature_event_cb (GpkHelperRepoSignature *helper_repo_signature, GtkResponseType type, const gchar *key_id, const gchar *package_id, GpkDbusTask *task)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	if (type != GTK_RESPONSE_YES) {
-		goto out;
-	}
-
-	/* install signature */
-	ret = pk_client_install_signature (task->priv->client_secondary, PK_SIGTYPE_ENUM_GPG, key_id, package_id, &error);
-	if (!ret) {
-		egg_warning ("cannot install signature: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-out:
-	return;
-}
-
-/**
- * gpk_dbus_task_eula_event_cb:
- **/
-static void
-gpk_dbus_task_eula_event_cb (GpkHelperEula *helper_eula, GtkResponseType type, const gchar *eula_id, GpkDbusTask *task)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	if (type != GTK_RESPONSE_YES) {
-		goto out;
-	}
-
-	/* install signature */
-	ret = pk_client_accept_eula (task->priv->client_secondary, eula_id, &error);
-	if (!ret) {
-		egg_warning ("cannot accept eula: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-out:
-	return;
-}
-
-/**
- * gpk_dbus_task_eula_cb:
- **/
-static void
-gpk_dbus_task_eula_required_cb (PkClient *client, const gchar *eula_id, const gchar *package_id,
-				    const gchar *vendor_name, const gchar *license_agreement, GpkDbusTask *task)
-{
-	g_return_if_fail (GPK_IS_DBUS_TASK (task));
-
-	gpk_modal_dialog_setup (task->priv->dialog, GPK_MODAL_DIALOG_PAGE_CUSTOM, pk_bitfield_value (GPK_MODAL_DIALOG_WIDGET_PROGRESS_BAR));
-	gpk_modal_dialog_set_title (task->priv->dialog, _("EULA required"));
-	gpk_modal_dialog_set_image_status (task->priv->dialog, PK_STATUS_ENUM_SIG_CHECK);
-	gpk_modal_dialog_set_percentage (task->priv->dialog, 101);
-	if (task->priv->show_progress)
-		gpk_modal_dialog_present (task->priv->dialog);
-
-	/* use the helper */
-	gpk_helper_eula_show (task->priv->helper_eula, eula_id, package_id, vendor_name, license_agreement);
-}
-
-/**
- * gpk_dbus_task_repo_signature_required_cb:
- **/
-static void
-gpk_dbus_task_repo_signature_required_cb (PkClient *client, const gchar *package_id, const gchar *repository_name,
-					      const gchar *key_url, const gchar *key_userid, const gchar *key_id,
-					      const gchar *key_fingerprint, const gchar *key_timestamp,
-					      PkSigTypeEnum type, GpkDbusTask *task)
-{
-	g_return_if_fail (GPK_IS_DBUS_TASK (task));
-
-	gpk_modal_dialog_setup (task->priv->dialog, GPK_MODAL_DIALOG_PAGE_CUSTOM, pk_bitfield_value (GPK_MODAL_DIALOG_WIDGET_PROGRESS_BAR));
-	gpk_modal_dialog_set_title (task->priv->dialog, _("Signature required"));
-	gpk_modal_dialog_set_image_status (task->priv->dialog, PK_STATUS_ENUM_SIG_CHECK);
-	gpk_modal_dialog_set_percentage (task->priv->dialog, 101);
-	if (task->priv->show_progress)
-		gpk_modal_dialog_present (task->priv->dialog);
-
-	/* use the helper */
-	gpk_helper_repo_signature_show (task->priv->helper_repo_signature, package_id, repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp);
-}
-
 static void gpk_dbus_task_install_package_files_internal (GpkDbusTask *task, gboolean trusted);
-
-#if (!PK_CHECK_VERSION(0,5,0))
-/**
- * gpk_dbus_task_untrusted_event_cb:
- **/
-static void
-gpk_dbus_task_untrusted_event_cb (GpkHelperUntrusted *helper_untrusted, GtkResponseType type, GpkDbusTask *task)
-{
-	GError *error = NULL;
-	const gchar *title;
-
-	if (type != GTK_RESPONSE_YES) {
-		error = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_CANCELLED, "did not agree to download");
-		dbus_g_method_return_error (task->priv->context, error);
-		goto out;
-	}
-
-	title = _("Install untrusted");
-	gpk_modal_dialog_setup (task->priv->dialog, GPK_MODAL_DIALOG_PAGE_PROGRESS, 0);
-	gpk_modal_dialog_set_title (task->priv->dialog, title);
-	if (task->priv->show_progress)
-		gpk_modal_dialog_present_with_time (task->priv->dialog, task->priv->timestamp);
-
-	/* install trusted */
-	gpk_dbus_task_install_package_files_internal (task, FALSE);
-out:
-	if (error != NULL)
-		g_error_free (error);
-	return;
-}
-#endif
-
 static void gpk_dbus_task_install_package_ids_dep_check (GpkDbusTask *task);
 
 /**
@@ -3235,23 +3105,9 @@ gpk_dbus_task_init (GpkDbusTask *task)
 			  G_CALLBACK (gpk_dbus_task_button_close_cb), task);
 
 	/* helpers */
-	task->priv->helper_repo_signature = gpk_helper_repo_signature_new ();
-	g_signal_connect (task->priv->helper_repo_signature, "event", G_CALLBACK (gpk_dbus_task_repo_signature_event_cb), task);
-	gpk_helper_repo_signature_set_parent (task->priv->helper_repo_signature, main_window);
-
-	task->priv->helper_eula = gpk_helper_eula_new ();
-	g_signal_connect (task->priv->helper_eula, "event", G_CALLBACK (gpk_dbus_task_eula_event_cb), task);
-	gpk_helper_eula_set_parent (task->priv->helper_eula, main_window);
-
 	task->priv->helper_run = gpk_helper_run_new ();
 	gpk_helper_run_set_parent (task->priv->helper_run, main_window);
 
-#if (!PK_CHECK_VERSION(0,5,0))
-	task->priv->helper_untrusted = gpk_helper_untrusted_new ();
-	g_signal_connect (task->priv->helper_untrusted, "event", G_CALLBACK (gpk_dbus_task_untrusted_event_cb), task);
-	gpk_helper_untrusted_set_parent (task->priv->helper_untrusted, main_window);
-#endif
-
 	task->priv->helper_chooser = gpk_helper_chooser_new ();
 	g_signal_connect (task->priv->helper_chooser, "event", G_CALLBACK (gpk_dbus_task_chooser_event_cb), task);
 	gpk_helper_chooser_set_parent (task->priv->helper_chooser, main_window);
@@ -3328,13 +3184,8 @@ gpk_dbus_task_finalize (GObject *object)
 	g_object_unref (task->priv->dialog);
 	g_object_unref (task->priv->vendor);
 	g_object_unref (task->priv->language);
-	g_object_unref (task->priv->helper_eula);
 	g_object_unref (task->priv->helper_run);
-#if (!PK_CHECK_VERSION(0,5,0))
-	g_object_unref (task->priv->helper_untrusted);
-#endif
 	g_object_unref (task->priv->helper_chooser);
-	g_object_unref (task->priv->helper_repo_signature);
 
 	G_OBJECT_CLASS (gpk_dbus_task_parent_class)->finalize (object);
 }
diff --git a/src/gpk-self-test.c b/src/gpk-self-test.c
index bf38fa1..6e84de9 100644
--- a/src/gpk-self-test.c
+++ b/src/gpk-self-test.c
@@ -25,6 +25,7 @@
 #include "egg-debug.h"
 #include "gpk-common.h"
 #include "gpk-enum.h"
+#include "gpk-task.h"
 
 void egg_markdown_test (EggTest *test);
 void egg_string_test (EggTest *test);
@@ -49,6 +50,7 @@ main (int argc, char **argv)
 	/* tests go here */
 	egg_markdown_test (test);
 	egg_string_test (test);
+	gpk_task_test (test);
 	gpk_enum_test (test);
 	gpk_common_test (test);
 //	gpk_dbus_test (test);
diff --git a/src/gpk-task.c b/src/gpk-task.c
new file mode 100644
index 0000000..83a3e04
--- /dev/null
+++ b/src/gpk-task.c
@@ -0,0 +1,716 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard hughsie com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+#include <packagekit-glib2/packagekit.h>
+
+#include "egg-debug.h"
+
+#include "gpk-task.h"
+#include "gpk-gnome.h"
+#include "gpk-common.h"
+#include "gpk-enum.h"
+
+static void     gpk_task_finalize	(GObject     *object);
+
+#define GPK_TASK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GPK_TYPE_TASK, GpkTaskPrivate))
+
+/**
+ * GpkTaskPrivate:
+ *
+ * Private #GpkTask data
+ **/
+struct _GpkTaskPrivate
+{
+	gpointer		 user_data;
+	GtkWindow		*parent_window;
+	GtkWindow		*current_window;
+	GtkBuilder		*builder_untrusted;
+	GtkBuilder		*builder_signature;
+	GtkBuilder		*builder_eula;
+	guint			 request;
+	const gchar		*help_id;
+};
+
+G_DEFINE_TYPE (GpkTask, gpk_task, PK_TYPE_TASK)
+
+/**
+ * gpk_task_set_parent_window:
+ **/
+gboolean
+gpk_task_set_parent_window (GpkTask *task, GtkWindow *parent_window)
+{
+	g_return_val_if_fail (GPK_IS_TASK (task), FALSE);
+	g_return_val_if_fail (parent_window != NULL, FALSE);
+	task->priv->parent_window = parent_window;
+	return TRUE;
+}
+
+/**
+ * gpk_task_button_accept_cb:
+ **/
+static void
+gpk_task_button_accept_cb (GtkWidget *widget, GpkTask *task)
+{
+	gtk_widget_hide (GTK_WIDGET(task->priv->current_window));
+	pk_task_user_accepted (PK_TASK(task), task->priv->request);
+	task->priv->request = 0;
+	task->priv->current_window = NULL;
+}
+
+/**
+ * gpk_task_button_decline_cb:
+ **/
+static void
+gpk_task_button_decline_cb (GtkWidget *widget, GpkTask *task)
+{
+	gtk_widget_hide (GTK_WIDGET(task->priv->current_window));
+	pk_task_user_declined (PK_TASK(task), task->priv->request);
+	task->priv->request = 0;
+	task->priv->current_window = NULL;
+}
+
+/**
+ * gpk_task_dialog_response_cb:
+ **/
+static void
+gpk_task_dialog_response_cb (GtkDialog *dialog, gint response_id, GpkTask *task)
+{
+	if (response_id == GTK_RESPONSE_YES) {
+		gpk_task_button_accept_cb (GTK_WIDGET(dialog), task);
+		return;
+	}
+	/* all other options */
+	gpk_task_button_decline_cb (GTK_WIDGET(dialog), task);
+}
+
+/**
+ * gpk_task_button_help_cb:
+ **/
+static void
+gpk_task_button_help_cb (GtkWidget *widget, GpkTask *task)
+{
+	/* show the help */
+	gpk_gnome_help (task->priv->help_id);
+}
+
+/**
+ * gpk_task_untrusted_question:
+ **/
+static void
+gpk_task_untrusted_question (PkTask *task, guint request, PkResults *results)
+{
+	GtkWidget *widget;
+	gchar *text;
+	gchar *message;
+	PkRoleEnum role;
+	GpkTaskPrivate *priv = GPK_TASK(task)->priv;
+
+	/* save the current request */
+	priv->request = request;
+
+	/* title */
+	widget = GTK_WIDGET(gtk_builder_get_object (priv->builder_untrusted, "label_title"));
+	text = g_strdup_printf ("<b><big>%s</big></b>", _("The software is not signed by a trusted provider."));
+	gtk_label_set_label (GTK_LABEL (widget), text);
+	g_free (text);
+
+	/* message */
+	g_object_get (results, "role", &role, NULL);
+	if (role == PK_ROLE_ENUM_UPDATE_PACKAGES ||
+	    role == PK_ROLE_ENUM_UPDATE_SYSTEM) {
+		message = g_strdup_printf ("%s\n%s\n\n%s\n%s",
+					   /* TRANSLATORS: is not GPG signed */
+					   _("The software is not signed by a trusted provider."),
+					   /* TRANSLATORS: user has to trust provider -- I know, this sucks */
+					   _("Do not update this package unless you are sure it is safe to do so."),
+					   /* TRANSLATORS: warn the user that all bets are off */
+					   _("Malicious software can damage your computer or cause other harm."),
+					   /* TRANSLATORS: ask if they are absolutely sure they want to do this */
+					   _("Are you <b>sure</b> you want to update this package?"));
+	} else {
+		message = g_strdup_printf ("%s\n%s\n\n%s\n%s",
+					   /* TRANSLATORS: is not GPG signed */
+					   _("The software is not signed by a trusted provider."),
+					   /* TRANSLATORS: user has to trust provider -- I know, this sucks */
+					   _("Do not install this package unless you are sure it is safe to do so."),
+					   /* TRANSLATORS: warn the user that all bets are off */
+					   _("Malicious software can damage your computer or cause other harm."),
+					   /* TRANSLATORS: ask if they are absolutely sure they want to do this */
+					   _("Are you <b>sure</b> you want to install this package?"));
+	}
+	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder_untrusted, "label_message"));
+	gtk_label_set_markup (GTK_LABEL (widget), message);
+	g_free (message);
+
+	/* show window */
+	priv->current_window = GTK_WINDOW(gtk_builder_get_object (priv->builder_untrusted, "dialog_error"));
+	if (priv->parent_window != NULL) {
+		gtk_window_set_transient_for (priv->current_window, priv->parent_window);
+		gtk_window_set_modal (priv->current_window, TRUE);
+		/* this is a modal popup, so don't show a window title */
+		gtk_window_set_title (priv->current_window, "");
+	}
+	gtk_widget_show (GTK_WIDGET(priv->current_window));
+}
+
+/**
+ * gpk_task_key_question:
+ **/
+static void
+gpk_task_key_question (PkTask *task, guint request, PkResults *results)
+{
+	GPtrArray *array;
+	const PkItemRepoSignatureRequired *item;
+	GpkTaskPrivate *priv = GPK_TASK(task)->priv;
+	GtkWidget *widget;
+	gchar *text;
+
+	/* save the current request */
+	priv->request = request;
+
+	/* get data */
+	array = pk_results_get_repo_signature_required_array (results);
+	if (array->len != 1) {
+		egg_warning ("array length %i, aborting", array->len);
+		goto out;
+	}
+
+	/* only one item supported */
+	item = g_ptr_array_index (array, 0);
+
+	/* show correct text */
+	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder_signature, "label_name"));
+	gtk_label_set_label (GTK_LABEL (widget), item->repository_name);
+	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder_signature, "label_url"));
+	gtk_label_set_label (GTK_LABEL (widget), item->key_url);
+	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder_signature, "label_user"));
+	gtk_label_set_label (GTK_LABEL (widget), item->key_userid);
+	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder_signature, "label_id"));
+	gtk_label_set_label (GTK_LABEL (widget), item->key_id);
+
+	text = pk_package_id_to_printable (item->package_id);
+	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder_signature, "label_package"));
+	gtk_label_set_label (GTK_LABEL (widget), text);
+	g_free (text);
+
+	/* show window */
+	priv->current_window = GTK_WINDOW(gtk_builder_get_object (priv->builder_signature, "dialog_gpg"));
+	if (priv->parent_window != NULL) {
+		gtk_window_set_transient_for (priv->current_window, priv->parent_window);
+		gtk_window_set_modal (priv->current_window, TRUE);
+		/* this is a modal popup, so don't show a window title */
+		gtk_window_set_title (priv->current_window, "");
+	}
+	priv->help_id = "gpg-signature";
+	gtk_widget_show (GTK_WIDGET(priv->current_window));
+out:
+	g_ptr_array_unref (array);
+}
+
+/**
+ * gpk_task_eula_question:
+ **/
+static void
+gpk_task_eula_question (PkTask *task, guint request, PkResults *results)
+{
+	GPtrArray *array;
+	const PkItemEulaRequired *item;
+	GpkTaskPrivate *priv = GPK_TASK(task)->priv;
+	GtkWidget *widget;
+	GtkTextBuffer *buffer;
+	gchar *text;
+	gchar **split;
+
+	/* save the current request */
+	priv->request = request;
+
+	/* get data */
+	array = pk_results_get_eula_required_array (results);
+	if (array->len != 1) {
+		egg_warning ("array length %i, aborting", array->len);
+		goto out;
+	}
+
+	/* only one item supported */
+	item = g_ptr_array_index (array, 0);
+
+	/* title */
+	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder_eula, "label_title"));
+
+	split = pk_package_id_split (item->package_id);
+	text = g_strdup_printf ("<b><big>License required for %s by %s</big></b>", split[0], item->vendor_name);
+	gtk_label_set_label (GTK_LABEL (widget), text);
+	g_free (text);
+
+	buffer = gtk_text_buffer_new (NULL);
+	gtk_text_buffer_insert_at_cursor (buffer, item->license_agreement, strlen (item->license_agreement));
+	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder_eula, "textview_details"));
+	gtk_text_view_set_buffer (GTK_TEXT_VIEW (widget), buffer);
+
+	/* set minimum size a bit bigger */
+	gtk_widget_set_size_request (widget, 100, 200);
+
+	/* show window */
+	priv->current_window = GTK_WINDOW(gtk_builder_get_object (priv->builder_eula, "dialog_eula"));
+	if (priv->parent_window != NULL) {
+		gtk_window_set_transient_for (priv->current_window, priv->parent_window);
+		gtk_window_set_modal (priv->current_window, TRUE);
+		/* this is a modal popup, so don't show a window title */
+		gtk_window_set_title (priv->current_window, "");
+	}
+	priv->help_id = "eula";
+	gtk_widget_show (GTK_WIDGET(priv->current_window));
+
+	g_object_unref (buffer);
+	g_strfreev (split);
+out:
+	g_ptr_array_unref (array);
+}
+
+/**
+ * gpk_task_media_change_question:
+ **/
+static void
+gpk_task_media_change_question (PkTask *task, guint request, PkResults *results)
+{
+	GPtrArray *array;
+	const PkItemMediaChangeRequired *item;
+	GpkTaskPrivate *priv = GPK_TASK(task)->priv;
+	const gchar *name;
+	gchar *message = NULL;
+
+	/* save the current request */
+	priv->request = request;
+
+	/* get data */
+	array = pk_results_get_media_change_required_array (results);
+	if (array->len != 1) {
+		egg_warning ("array length %i, aborting", array->len);
+		goto out;
+	}
+
+	/* only one item supported */
+	item = g_ptr_array_index (array, 0);
+
+	name = gpk_media_type_enum_to_localised_text (item->media_type);
+	/* TRANSLATORS: dialog body, explains to the user that they need to insert a disk to continue. The first replacement is DVD, CD etc */
+	message = g_strdup_printf (_("Additional media is required. Please insert the %s labeled '%s' to continue."), name, item->media_text);
+
+	priv->current_window = GTK_WINDOW (gtk_message_dialog_new (priv->parent_window, GTK_DIALOG_DESTROY_WITH_PARENT,
+								   /* TRANSLATORS: this is the window title when a new cd or dvd is required */
+								   GTK_MESSAGE_INFO, GTK_BUTTONS_CANCEL, _("A media change is required")));
+	gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG(priv->current_window), "%s", message);
+
+	/* TRANSLATORS: this is button text */
+	gtk_dialog_add_button (GTK_DIALOG(priv->current_window), _("Continue"), GTK_RESPONSE_YES);
+
+	/* set icon name */
+	gtk_window_set_icon_name (priv->current_window, GPK_ICON_SOFTWARE_INSTALLER);
+
+	g_signal_connect (priv->current_window, "response", G_CALLBACK (gpk_task_dialog_response_cb), task);
+	gtk_widget_show_all (GTK_WIDGET(priv->current_window));
+out:
+	g_free (message);
+	g_ptr_array_unref (array);
+}
+
+/**
+ * gpk_task_simulate_question_type_to_text:
+ **/
+static const gchar *
+gpk_task_simulate_question_type_to_text (PkInfoEnum info)
+{
+	if (info == PK_INFO_ENUM_REMOVING) {
+		/* TRANSLATORS: When processing, we might have to remove other dependencies */
+		return _("The following packages have to be removed:");
+	}
+
+	if (info == PK_INFO_ENUM_INSTALLING) {
+		/* TRANSLATORS: When processing, we might have to install other dependencies */
+		return _("The following packages have to be installed:");
+	}
+
+	if (info == PK_INFO_ENUM_UPDATING) {
+		/* TRANSLATORS: When processing, we might have to update other dependencies */
+		return _("The following packages have to be updated:");
+	}
+
+	if (info == PK_INFO_ENUM_REINSTALLING) {
+		/* TRANSLATORS: When processing, we might have to reinstall other dependencies */
+		return _("The following packages have to be reinstalled:");
+	}
+
+	if (info == PK_INFO_ENUM_DOWNGRADING) {
+		/* TRANSLATORS: When processing, we might have to downgrade other dependencies */
+		return _("The following packages have to be downgraded:");
+	}
+
+	/* do not show */
+	return NULL;
+}
+
+/**
+ * gpk_task_simulate_question:
+ **/
+static void
+gpk_task_simulate_question (PkTask *task, guint request, PkResults *results)
+{
+	guint i;
+	guint len;
+	const gchar *package_id;
+	const gchar *title;
+	gchar *printable;
+	gchar *summary;
+	PkPackage *package;
+	PkPackageSack *sack;
+	PkInfoEnum info;
+	PkInfoEnum info_last = PK_INFO_ENUM_UNKNOWN;
+	GpkTaskPrivate *priv = GPK_TASK(task)->priv;
+
+	/* save the current request */
+	priv->request = request;
+
+	/* get data */
+	sack = pk_results_get_package_sack (results);
+
+	/* print data */
+	len = pk_package_sack_get_size (sack);
+	for (i=0; i<len; i++) {
+		package = pk_package_sack_get_index (sack, i);
+		g_object_get (package,
+			      "info", &info,
+			      "summary", &summary,
+			      NULL);
+		/* new header */
+		if (info != info_last) {
+			title = gpk_task_simulate_question_type_to_text (info);
+			g_print ("%s\n", title);
+			info_last = info;
+		}
+		package_id = pk_package_get_id (package);
+		printable = pk_package_id_to_printable (package_id);
+		g_print (" %s\t%s\n", printable, summary);
+
+		g_free (summary);
+		g_free (printable);
+		g_object_unref (package);
+	}
+
+	/* TRANSLATORS: ask the user if the proposed changes are okay */
+//	ret = gpk_console_get_prompt (_("Proceed with changes?"), FALSE);
+//	if (ret) {
+//		pk_task_user_accepted (task, request);
+//	} else {
+//		/* TRANSLATORS: tell the user we didn't do anything */
+//		g_print ("%s\n", _("The transaction did not proceed."));
+		pk_task_user_declined (task, request);
+//	}
+
+	g_object_unref (sack);
+}
+
+/**
+ * gpk_task_setup_dialog_untrusted:
+ **/
+static void
+gpk_task_setup_dialog_untrusted (GpkTask *task)
+{
+	GtkWidget *widget;
+	GtkWidget *button;
+	guint retval;
+	GError *error = NULL;
+
+	/* get UI */
+	task->priv->builder_untrusted = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (task->priv->builder_untrusted, GPK_DATA "/gpk-error.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+	}
+
+	/* connect up default actions */
+	widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_untrusted, "dialog_error"));
+	g_signal_connect (widget, "delete_event", G_CALLBACK (gpk_task_button_decline_cb), task);
+
+	/* set icon name */
+	widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_untrusted, "dialog_error"));
+	gtk_window_set_icon_name (GTK_WINDOW(widget), GPK_ICON_SOFTWARE_INSTALLER);
+
+	/* connect up buttons */
+	widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_untrusted, "button_close"));
+	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_task_button_decline_cb), task);
+
+	/* don't show text in the expander */
+	widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_untrusted, "expander_details"));
+	gtk_widget_hide (widget);
+
+	/* TRANSLATORS: button label, force the install, even though it's untrusted */
+	button = gtk_button_new_with_mnemonic (_("_Force install"));
+	g_signal_connect (button, "clicked", G_CALLBACK (gpk_task_button_accept_cb), task);
+
+	/* TRANSLATORS: button tooltip */
+	gtk_widget_set_tooltip_text (button, _("Force installing package"));
+
+	/* add to box */
+	widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_untrusted, "dialog_error"));
+	widget = gtk_dialog_get_action_area (GTK_DIALOG(widget));
+	gtk_box_pack_start (GTK_BOX (widget), button, FALSE, FALSE, 0);
+	gtk_widget_show (button);
+}
+
+/**
+ * gpk_task_setup_dialog_signature:
+ **/
+static void
+gpk_task_setup_dialog_signature (GpkTask *task)
+{
+	GtkWidget *widget;
+	guint retval;
+	GError *error = NULL;
+
+	/* get UI */
+	task->priv->builder_signature = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (task->priv->builder_signature, GPK_DATA "/gpk-signature.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+	}
+
+	/* connect up default actions */
+	widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_signature, "dialog_gpg"));
+	g_signal_connect (widget, "delete_event", G_CALLBACK (gpk_task_button_decline_cb), task);
+
+	/* set icon name */
+	widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_signature, "dialog_gpg"));
+	gtk_window_set_icon_name (GTK_WINDOW(widget), GPK_ICON_SOFTWARE_INSTALLER);
+
+	/* connect up buttons */
+	widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_signature, "button_yes"));
+	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_task_button_accept_cb), task);
+	widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_signature, "button_help"));
+	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_task_button_help_cb), task);
+	widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_signature, "button_no"));
+	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_task_button_decline_cb), task);
+}
+
+/**
+ * gpk_task_setup_dialog_eula:
+ **/
+static void
+gpk_task_setup_dialog_eula (GpkTask *task)
+{
+	GtkWidget *widget;
+	guint retval;
+	GError *error = NULL;
+
+	/* get UI */
+	task->priv->builder_eula = gtk_builder_new ();
+	retval = gtk_builder_add_from_file (task->priv->builder_eula, GPK_DATA "/gpk-eula.ui", &error);
+	if (error != NULL) {
+		egg_warning ("failed to load ui: %s", error->message);
+		g_error_free (error);
+	}
+
+	/* connect up default actions */
+	widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_eula, "dialog_eula"));
+	g_signal_connect (widget, "delete_event", G_CALLBACK (gpk_task_button_decline_cb), task);
+
+	/* set icon name */
+	widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_eula, "dialog_eula"));
+	gtk_window_set_icon_name (GTK_WINDOW(widget), GPK_ICON_SOFTWARE_INSTALLER);
+
+	/* connect up buttons */
+	widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_eula, "button_agree"));
+	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_task_button_accept_cb), task);
+	widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_eula, "button_help"));
+	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_task_button_help_cb), task);
+	widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_eula, "button_cancel"));
+	g_signal_connect (widget, "clicked", G_CALLBACK (gpk_task_button_decline_cb), task);
+}
+
+/**
+ * gpk_task_class_init:
+ **/
+static void
+gpk_task_class_init (GpkTaskClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	PkTaskClass *task_class = PK_TASK_CLASS (klass);
+
+	object_class->finalize = gpk_task_finalize;
+	task_class->untrusted_question = gpk_task_untrusted_question;
+	task_class->key_question = gpk_task_key_question;
+	task_class->eula_question = gpk_task_eula_question;
+	task_class->media_change_question = gpk_task_media_change_question;
+	task_class->simulate_question = gpk_task_simulate_question;
+
+	g_type_class_add_private (klass, sizeof (GpkTaskPrivate));
+}
+
+/**
+ * gpk_task_init:
+ * @task: This class instance
+ **/
+static void
+gpk_task_init (GpkTask *task)
+{
+	task->priv = GPK_TASK_GET_PRIVATE (task);
+	task->priv->request = 0;
+	task->priv->parent_window = NULL;
+	task->priv->current_window = NULL;
+
+	/* setup dialogs ahead of time */
+	gpk_task_setup_dialog_untrusted (task);
+	gpk_task_setup_dialog_eula (task);
+	gpk_task_setup_dialog_signature (task);
+}
+
+/**
+ * gpk_task_finalize:
+ * @object: The object to finalize
+ **/
+static void
+gpk_task_finalize (GObject *object)
+{
+	GpkTask *task = GPK_TASK (object);
+
+	g_object_unref (task->priv->builder_untrusted);
+	g_object_unref (task->priv->builder_signature);
+	g_object_unref (task->priv->builder_eula);
+
+	G_OBJECT_CLASS (gpk_task_parent_class)->finalize (object);
+}
+
+/**
+ * gpk_task_new:
+ *
+ * Return value: a new GpkTask object.
+ **/
+GpkTask *
+gpk_task_new (void)
+{
+	GpkTask *task;
+	task = g_object_new (GPK_TYPE_TASK, NULL);
+	return GPK_TASK (task);
+}
+
+/***************************************************************************
+ ***                          MAKE CHECK TESTS                           ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+static void
+gpk_task_test_install_packages_cb (GObject *object, GAsyncResult *res, EggTest *test)
+{
+	GpkTask *task = GPK_TASK (object);
+	GError *error = NULL;
+	PkResults *results;
+	PkExitEnum exit_enum;
+	GPtrArray *packages;
+	const PkItemPackage *item;
+	guint i;
+
+	/* get the results */
+	results = pk_task_generic_finish (GPK_TASK (task), res, &error);
+	if (results == NULL) {
+		egg_test_failed (test, "failed to resolve: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	exit_enum = pk_results_get_exit_code (results);
+	if (exit_enum != GPK_EXIT_ENUM_SUCCESS)
+		egg_test_failed (test, "failed to resolve success: %s", pk_exit_enum_to_text (exit_enum));
+
+	packages = pk_results_get_package_array (results);
+	if (packages == NULL)
+		egg_test_failed (test, "no packages!");
+
+	/* list, just for shits and giggles */
+	for (i=0; i<packages->len; i++) {
+		item = g_ptr_array_index (packages, i);
+		egg_debug ("%s\t%s\t%s", pk_info_enum_to_text (item->info), item->package_id, item->summary);
+	}
+
+	if (packages->len != 3)
+		egg_test_failed (test, "invalid number of packages: %i", packages->len);
+
+	g_ptr_array_unref (packages);
+
+	egg_debug ("results exit enum = %s", pk_exit_enum_to_text (exit_enum));
+out:
+	if (results != NULL)
+		g_object_unref (results);
+	egg_test_loop_quit (test);
+}
+
+static void
+gpk_task_test_progress_cb (PkProgress *progress, PkProgressType type, EggTest *test)
+{
+	PkStatusEnum status;
+	if (type == GPK_PROGRESS_TYPE_STATUS) {
+		g_object_get (progress,
+			      "status", &status,
+			      NULL);
+		egg_debug ("now %s", pk_status_enum_to_text (status));
+	}
+}
+
+void
+gpk_task_test (gpointer user_data)
+{
+	EggTest *test = (EggTest *) user_data;
+	GpkTask *task;
+	gchar **package_ids;
+
+	if (!egg_test_start (test, "GpkTask"))
+		return;
+
+	/************************************************************/
+	egg_test_title (test, "get task");
+	task = gpk_task_new ();
+	egg_test_assert (test, task != NULL);
+
+	/* For testing, you will need to manually do:
+	pkcon repo-set-data dummy use-gpg 1
+	pkcon repo-set-data dummy use-eula 1
+	pkcon repo-set-data dummy use-media 1
+	*/
+
+	/************************************************************/
+	egg_test_title (test, "install package");
+	package_ids = pk_package_ids_from_id ("vips-doc;7.12.4-2.fc8;noarch;linva");
+	pk_task_install_packages_async (GPK_TASK (task), package_ids, NULL,
+				        (PkProgressCallback) gpk_task_test_progress_cb, test,
+				        (GAsyncReadyCallback) gpk_task_test_install_packages_cb, test);
+	g_strfreev (package_ids);
+	egg_test_loop_wait (test, 150000);
+	egg_test_success (test, "installed in %i", egg_test_elapsed (test));
+
+	g_object_unref (task);
+	egg_test_end (test);
+}
+#endif
+
diff --git a/src/gpk-task.h b/src/gpk-task.h
new file mode 100644
index 0000000..8e0c9a0
--- /dev/null
+++ b/src/gpk-task.h
@@ -0,0 +1,63 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offtask: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard hughsie com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GPK_TASK_H
+#define __GPK_TASK_H
+
+#include <glib-object.h>
+#include <gtk/gtk.h>
+#include <packagekit-glib2/packagekit.h>
+
+G_BEGIN_DECLS
+
+#define GPK_TYPE_TASK		(gpk_task_get_type ())
+#define GPK_TASK(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), GPK_TYPE_TASK, GpkTask))
+#define GPK_TASK_CLASS(k)	(G_TYPE_CHECK_CLASS_CAST((k), GPK_TYPE_TASK, GpkTaskClass))
+#define GPK_IS_TASK(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), GPK_TYPE_TASK))
+#define GPK_IS_TASK_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), GPK_TYPE_TASK))
+#define GPK_TASK_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), GPK_TYPE_TASK, GpkTaskClass))
+
+typedef struct _GpkTaskPrivate	GpkTaskPrivate;
+typedef struct _GpkTask		GpkTask;
+typedef struct _GpkTaskClass	GpkTaskClass;
+
+struct _GpkTask
+{
+	 PkTask			 parent;
+	 GpkTaskPrivate		*priv;
+};
+
+struct _GpkTaskClass
+{
+	PkTaskClass		 parent_class;
+};
+
+GQuark		 gpk_task_error_quark		(void);
+GType		 gpk_task_get_type		(void);
+GpkTask		*gpk_task_new			(void);
+void		 gpk_task_test			(gpointer	 user_data);
+gboolean	 gpk_task_set_parent_window	(GpkTask	*task,
+						 GtkWindow	*window);
+
+G_END_DECLS
+
+#endif /* __GPK_TASK_H */
+
diff --git a/src/gpk-update-viewer.c b/src/gpk-update-viewer.c
index 76e7eeb..fcec96b 100644
--- a/src/gpk-update-viewer.c
+++ b/src/gpk-update-viewer.c
@@ -49,8 +49,6 @@
 #include "gpk-cell-renderer-restart.h"
 #include "gpk-cell-renderer-spinner.h"
 #include "gpk-enum.h"
-#include "gpk-helper-repo-signature.h"
-#include "gpk-helper-eula.h"
 #include "gpk-helper-deps-update.h"
 
 #define GPK_UPDATE_VIEWER_AUTO_QUIT_TIMEOUT	10 /* seconds */
@@ -69,8 +67,6 @@ static PkClient *client_primary = NULL;
 static PkClient *client_secondary = NULL;
 static PkControl *control = NULL;
 static GPtrArray *update_list = NULL;
-static GpkHelperRepoSignature *helper_repo_signature = NULL;
-static GpkHelperEula *helper_eula = NULL;
 static GpkHelperDepsUpdate *helper_deps_update = NULL;
 static EggMarkdown *markdown = NULL;
 static gchar *package_id_last = NULL;
@@ -2363,97 +2359,6 @@ gpk_update_viewer_allow_cancel_cb (PkClient *client, gboolean allow_cancel, gpoi
 }
 
 /**
- * gpk_update_viewer_eula_cb:
- **/
-static void
-gpk_update_viewer_eula_required_cb (PkClient *client, const gchar *eula_id, const gchar *package_id,
-				    const gchar *vendor_name, const gchar *license_agreement, gpointer data)
-{
-	/* use the helper */
-	gpk_helper_eula_show (helper_eula, eula_id, package_id, vendor_name, license_agreement);
-}
-
-/**
- * gpk_update_viewer_repo_signature_event_cb:
- **/
-static void
-gpk_update_viewer_repo_signature_event_cb (GpkHelperRepoSignature *_helper_repo_signature, GtkResponseType type, const gchar *key_id, const gchar *package_id, gpointer data)
-{
-	GtkTreeView *treeview;
-	GtkTreeModel *model;
-	gboolean ret;
-	GError *error = NULL;
-
-	if (type != GTK_RESPONSE_YES) {
-		/* make sensitive again */
-		gpk_update_viewer_undisable_packages ();
-		goto out;
-	}
-
-	/* install signature */
-	ret = pk_client_install_signature (client_secondary, PK_SIGTYPE_ENUM_GPG, key_id, package_id, &error);
-	if (!ret) {
-		egg_warning ("cannot install signature: %s", error->message);
-		g_error_free (error);
-
-		/* make sensitive again */
-		gpk_update_viewer_undisable_packages ();
-		goto out;
-	}
-out:
-	/* set state */
-	treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
-	model = gtk_tree_view_get_model (treeview);
-	gpk_update_viewer_reconsider_info (model);
-}
-
-/**
- * gpk_update_viewer_eula_event_cb:
- **/
-static void
-gpk_update_viewer_eula_event_cb (GpkHelperRepoSignature *_helper_eula, GtkResponseType type, const gchar *eula_id, gpointer data)
-{
-	GtkTreeView *treeview;
-	GtkTreeModel *model;
-	gboolean ret;
-	GError *error = NULL;
-
-	if (type != GTK_RESPONSE_YES) {
-		/* make sensitive again */
-		gpk_update_viewer_undisable_packages ();
-		goto out;
-	}
-
-	/* install signature */
-	ret = pk_client_accept_eula (client_secondary, eula_id, &error);
-	if (!ret) {
-		egg_warning ("cannot accept eula: %s", error->message);
-		g_error_free (error);
-		/* make sensitive again */
-		gpk_update_viewer_undisable_packages ();
-		goto out;
-	}
-out:
-	/* set state */
-	treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
-	model = gtk_tree_view_get_model (treeview);
-	gpk_update_viewer_reconsider_info (model);
-}
-
-/**
- * gpk_update_viewer_repo_signature_required_cb:
- **/
-static void
-gpk_update_viewer_repo_signature_required_cb (PkClient *client, const gchar *package_id, const gchar *repository_name,
-					      const gchar *key_url, const gchar *key_userid, const gchar *key_id,
-					      const gchar *key_fingerprint, const gchar *key_timestamp,
-					      PkSigTypeEnum type, gpointer data)
-{
-	/* use the helper */
-	gpk_helper_repo_signature_show (helper_repo_signature, package_id, repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp);
-}
-
-/**
  * pk_client_distro_upgrade_cb:
  **/
 static void
@@ -2863,14 +2768,6 @@ main (int argc, char *argv[])
 	gtk_window_set_icon_name (GTK_WINDOW (main_window), GPK_ICON_SOFTWARE_INSTALLER);
 
 	/* helpers */
-	helper_repo_signature = gpk_helper_repo_signature_new ();
-	g_signal_connect (helper_repo_signature, "event", G_CALLBACK (gpk_update_viewer_repo_signature_event_cb), NULL);
-	gpk_helper_repo_signature_set_parent (helper_repo_signature, GTK_WINDOW (main_window));
-
-	helper_eula = gpk_helper_eula_new ();
-	g_signal_connect (helper_eula, "event", G_CALLBACK (gpk_update_viewer_eula_event_cb), NULL);
-	gpk_helper_eula_set_parent (helper_eula, GTK_WINDOW (main_window));
-
 	helper_deps_update = gpk_helper_deps_update_new ();
 	g_signal_connect (helper_deps_update, "event", G_CALLBACK (gpk_update_viewer_deps_update_event_cb), NULL);
 	gpk_helper_deps_update_set_parent (helper_deps_update, GTK_WINDOW (main_window));
@@ -3006,8 +2903,6 @@ main (int argc, char *argv[])
 		g_object_unref (update_list);
 
 	g_strfreev (install_package_ids);
-	g_object_unref (helper_eula);
-	g_object_unref (helper_repo_signature);
 	g_object_unref (helper_deps_update);
 	g_object_unref (list_store_updates);
 	g_object_unref (text_buffer);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]