[PackageKit-commit] packagekit: Branch 'master' - 52 commits

Richard Hughes hughsient at kemper.freedesktop.org
Thu Sep 3 10:42:19 PDT 2009


 backends/dummy/pk-backend-dummy.c                |   10 
 backends/ports/portsBackend.rb                   |  137 +
 backends/ports/ruby_packagekit/Makefile.am       |    1 
 backends/ports/ruby_packagekit/prints.rb         |   59 
 backends/yum/yumBackend.py                       |  118 +
 backends/yum/yumMediaManager.py                  |   23 
 client/.gitignore                                |    3 
 client/Makefile.am                               |   47 
 client/pk-console-test.c                         | 1709 +++++++++++++++++++++++
 client/pk-console.c                              |   11 
 client/pk-generate-pack.c                        |    2 
 client/pk-monitor.c                              |    6 
 client/pk-progress-bar.c                         |    1 
 client/pk-progress-bar.h                         |    1 
 client/pk-self-test.c                            |    3 
 client/pk-task-text.c                            |  445 +++++
 client/pk-task-text.h                            |   60 
 client/pk-text.c                                 |  100 +
 client/pk-text.h                                 |   35 
 client/pk-tools-common.c                         |   62 
 client/pk-tools-common.h                         |   19 
 configure.ac                                     |    6 
 contrib/PackageKit.spec.in                       |    7 
 contrib/command-not-found/Makefile.am            |    4 
 contrib/command-not-found/pk-command-not-found.c |    2 
 contrib/command-not-found/pk-text.c              |    1 
 contrib/command-not-found/pk-text.h              |    1 
 contrib/command-not-found/pk-tools-common.c      |    1 
 contrib/command-not-found/pk-tools-common.h      |    1 
 contrib/debuginfo-install/pk-progress-bar.c      |    4 
 docs/html/pk-intro.html                          |    2 
 lib/packagekit-glib/egg-string.c                 |    3 
 lib/packagekit-glib/egg-string.h                 |    1 
 lib/packagekit-glib/pk-bitfield.c                |    5 
 lib/packagekit-glib/pk-bitfield.h                |    1 
 lib/packagekit-glib/pk-common.c                  |    3 
 lib/packagekit-glib/pk-common.h                  |    1 
 lib/packagekit-glib/pk-control.c                 |    6 
 lib/packagekit-glib/pk-enum.c                    |    3 
 lib/packagekit-glib/pk-enum.h                    |    1 
 lib/packagekit-glib2/Makefile.am                 |    9 
 lib/packagekit-glib2/packagekit.h                |    2 
 lib/packagekit-glib2/pk-client.c                 |   71 
 lib/packagekit-glib2/pk-client.h                 |    3 
 lib/packagekit-glib2/pk-control-sync.c           |    4 
 lib/packagekit-glib2/pk-control-sync.h           |    1 
 lib/packagekit-glib2/pk-control.c                |   13 
 lib/packagekit-glib2/pk-control.h                |    1 
 lib/packagekit-glib2/pk-package-id.c             |  309 ++++
 lib/packagekit-glib2/pk-package-id.h             |   46 
 lib/packagekit-glib2/pk-package-sack.c           |  297 ++-
 lib/packagekit-glib2/pk-package-sack.h           |    6 
 lib/packagekit-glib2/pk-package.c                |   18 
 lib/packagekit-glib2/pk-package.h                |    1 
 lib/packagekit-glib2/pk-progress.c               |    3 
 lib/packagekit-glib2/pk-progress.h               |    1 
 lib/packagekit-glib2/pk-results.c                |   96 +
 lib/packagekit-glib2/pk-results.h                |   39 
 lib/packagekit-glib2/pk-self-test.c              |   18 
 lib/packagekit-glib2/pk-task-wrapper.c           |  349 ++++
 lib/packagekit-glib2/pk-task-wrapper.h           |   60 
 lib/packagekit-glib2/pk-task.c                   | 1082 ++++++++++++++
 lib/packagekit-glib2/pk-task.h                   |  142 +
 lib/packagekit-qt/src/daemonproxy.h              |   92 -
 lib/packagekit-qt/src/transaction.cpp            |   28 
 lib/packagekit-qt/src/transaction.h              |   13 
 lib/packagekit-qt/src/transactionprivate.h       |    2 
 lib/packagekit-qt/src/transactionproxy.cpp       |    1 
 lib/packagekit-qt/src/transactionproxy.h         |  221 +-
 po/POTFILES.in                                   |    3 
 po/POTFILES.skip                                 |    1 
 po/es.po                                         |  495 +++---
 po/gu.po                                         |  678 ++++-----
 po/hi.po                                         |  519 +++---
 po/ml.po                                         |  559 +++----
 po/nl.po                                         |  614 ++++----
 src/org.freedesktop.PackageKit.Transaction.xml   |   16 
 src/org.freedesktop.PackageKit.xml               |    6 
 src/pk-transaction.c                             |    7 
 79 files changed, 6764 insertions(+), 1967 deletions(-)

New commits:
commit ca8c7540b05aacae3cec2228c5eb076553f4de9a
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 18:33:32 2009 +0100

    trivial: Rename the debuginfo-install subpackage to debug-install

diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index d5c16c8..9531277 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -135,12 +135,13 @@ Requires: %{name} = %{version}-%{release}
 %description cron
 Crontab and utilities for running PackageKit as a cron job.
 
-%package debuginfo-install
+%package debug-install
 Summary: Facility to install debugging packages using PackageKit
 Group: System Environment/Base
 Requires: %{name} = %{version}-%{release}
+Obsoletes: PackageKit-debuginfo-install <= 0.5.2-0.1.20090902git.fc12
 
-%description debuginfo-install
+%description debug-install
 Provides facility to install debugging packages using PackageKit.
 
 %package glib-devel
commit 09d9cfad1fe1e86be0cd0e7ff5e47104ca03b6e9
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 18:26:03 2009 +0100

    trivial: Remove some obsolete code

diff --git a/client/pk-console-test.c b/client/pk-console-test.c
index 1d8bcb3..fe97457 100644
--- a/client/pk-console-test.c
+++ b/client/pk-console-test.c
@@ -425,20 +425,7 @@ pk_console_files_cb (PkResultItemFiles *obj, gpointer data)
 static void
 pk_console_finished_cb (PkExitEnum exit_enum, guint runtime, gpointer data)
 {
-	PkRoleEnum role;
-	const gchar *role_text;
-	gfloat time_s;
 	PkRestartEnum restart;
-	gboolean ret;
-	GError *error = NULL;
-
-	pk_client_get_role (PK_CLIENT(task), &role, NULL, NULL);
-
-	role_text = pk_role_enum_to_text (role);
-	time_s = (gfloat) runtime / 1000.0;
-
-	/* do we need to new line? */
-	egg_debug ("%s runtime was %.1f seconds", role_text, time_s);
 
 	/* is there any restart to notify the user? */
 	restart = pk_client_get_require_restart (client);
@@ -458,35 +445,6 @@ pk_console_finished_cb (PkExitEnum exit_enum, guint runtime, gpointer data)
 		/* TRANSLATORS: a package needs to restart the session (due to security) */
 		g_print ("%s\n", _("Please logout and login to complete the update as important security updates have been installed."));
 	}
-
-	/* need to handle retry with only_trusted=FALSE */
-	if (exit_enum == PK_EXIT_ENUM_NEED_UNTRUSTED) {
-		egg_debug ("need to handle untrusted");
-
-		/* retry new action with untrusted */
-		pk_client_set_only_trusted (PK_CLIENT(task), FALSE);
-		ret = pk_client_requeue (PK_CLIENT(task), &error);
-		if (!ret) {
-			egg_warning ("Failed to requeue: %s", error->message);
-			g_error_free (error);
-		}
-		return;
-	}
-
-	if ((role == PK_ROLE_ENUM_INSTALL_FILES || role == PK_ROLE_ENUM_INSTALL_PACKAGES) &&
-	    exit_enum == PK_EXIT_ENUM_FAILED && need_requeue) {
-		egg_warning ("waiting for second install file to finish");
-		return;
-	}
-
-	/* have we failed to install, and the gpg key is now installed */
-	if (exit_enum == PK_EXIT_ENUM_KEY_REQUIRED && need_requeue) {
-		egg_debug ("key now installed");
-		return;
-	}
-
-	/* close the loop */
-	g_main_loop_quit (loop);
 }
 
 /**
@@ -608,61 +566,6 @@ pk_console_install_stuff (gchar **packages, GError **error)
 		/* convert to strv */
 		package_ids = pk_ptr_array_to_strv (array_packages);
 
-		/* can we simulate? */
-		if (pk_bitfield_contain (roles, PK_ROLE_ENUM_SIMULATE_INSTALL_PACKAGES)) {
-			ret = pk_client_reset (client_sync, &error_local);
-			if (!ret) {
-				/* TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows */
-				*error = g_error_new (1, 0, _("Internal error: %s"), error_local->message);
-				g_error_free (error_local);
-				goto out;
-			}
-
-			egg_debug ("Simulating install for %s", package_ids[0]);
-			ret = pk_client_simulate_install_packages (client_sync, package_ids, error);
-			if (!ret) {
-				egg_warning ("failed to simulate a package install");
-				goto out;
-			}
-
-			/* see how many packages there are */
-			list_single = pk_client_get_package_list (client_sync);
-			pk_obj_list_add_list (PK_OBJ_LIST(list), PK_OBJ_LIST(list_single));
-			g_object_unref (list_single);
-
-			/* one of the simulate-install-packages failed */
-			if (!ret)
-				goto out;
-
-			/* if there are no required packages, just do the remove */
-			length = pk_package_list_get_size (list);
-			if (length != 0) {
-
-				/* print the additional deps to the screen */
-				pk_console_print_deps_list (list);
-
-				/* TRANSLATORS: We are checking if it's okay to remove a list of packages */
-				accept_changes = pk_console_get_prompt (_("Proceed with changes?"), FALSE);
-
-				/* we chickened out */
-				if (!accept_changes) {
-					/* TRANSLATORS: There was an error removing the packages. The detailed error follows */
-					*error = g_error_new (1, 0, "%s", _("The package install was canceled!"));
-					ret = FALSE;
-					goto out;
-				}
-			}
-		}
-
-		/* reset */
-		ret = pk_client_reset (PK_CLIENT(task), &error_local);
-		if (!ret) {
-			/* TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows */
-			*error = g_error_new (1, 0, _("Internal error: %s"), error_local->message);
-			g_error_free (error_local);
-			goto out;
-		}
-
 		ret = pk_client_install_packages (PK_CLIENT(task), TRUE, package_ids, &error_local);
 		if (!ret) {
 			/* TRANSLATORS: There was an error installing the packages. The detailed error follows */
@@ -677,52 +580,6 @@ pk_console_install_stuff (gchar **packages, GError **error)
 		/* convert to strv */
 		files = pk_ptr_array_to_strv (array_files);
 
-		/* can we simulate? */
-		if (pk_bitfield_contain (roles, PK_ROLE_ENUM_SIMULATE_INSTALL_FILES)) {
-			ret = pk_client_reset (client_sync, &error_local);
-			if (!ret) {
-				/* TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows */
-				*error = g_error_new (1, 0, _("Internal error: %s"), error_local->message);
-				g_error_free (error_local);
-				goto out;
-			}
-
-			egg_debug ("Simulating install for %s", files[0]);
-			ret = pk_client_simulate_install_files (client_sync, files, error);
-			if (!ret) {
-				egg_warning ("failed to simulate a package install");
-				goto out;
-			}
-
-			/* see how many packages there are */
-			list_single = pk_client_get_package_list (client_sync);
-			pk_obj_list_add_list (PK_OBJ_LIST(list), PK_OBJ_LIST(list_single));
-			g_object_unref (list_single);
-
-			/* one of the simulate-install-files failed */
-			if (!ret)
-				goto out;
-
-			/* if there are no required packages, just do the remove */
-			length = pk_package_list_get_size (list);
-			if (length != 0) {
-
-				/* print the additional deps to the screen */
-				pk_console_print_deps_list (list);
-
-				/* TRANSLATORS: We are checking if it's okay to remove a list of packages */
-				accept_changes = pk_console_get_prompt (_("Proceed with changes?"), FALSE);
-
-				/* we chickened out */
-				if (!accept_changes) {
-					/* TRANSLATORS: There was an error removing the packages. The detailed error follows */
-					*error = g_error_new (1, 0, "%s", _("The package install was canceled!"));
-					ret = FALSE;
-					goto out;
-				}
-			}
-		}
-
 		ret = pk_client_install_files (PK_CLIENT(task), TRUE, files, &error_local);
 		if (!ret) {
 			/* TRANSLATORS: There was an error installing the files. The detailed error follows */
@@ -749,12 +606,6 @@ out:
 static gboolean
 pk_console_remove_only (gchar **package_ids, gboolean force, GError **error)
 {
-	gboolean ret;
-
-	egg_debug ("remove+ %s", package_ids[0]);
-	ret = pk_client_reset (PK_CLIENT(task), error);
-	if (!ret)
-		return ret;
 	return pk_client_remove_packages (PK_CLIENT(task), package_ids, force, FALSE, error);
 }
 
@@ -799,74 +650,8 @@ pk_console_remove_packages (gchar **packages, GError **error)
 	/* convert to strv */
 	package_ids = pk_ptr_array_to_strv (array);
 
-	/* are we dumb and can't check for requires? */
-	if (!pk_bitfield_contain (roles, PK_ROLE_ENUM_SIMULATE_REMOVE_PACKAGES)) {
-		/* no, just try to remove it without deps */
-		ret = pk_console_remove_only (PK_CLIENT(task), package_ids, FALSE, &error_local);
-		if (!ret) {
-			/* TRANSLATORS: There was an error removing the packages. The detailed error follows */
-			*error = g_error_new (1, 0, _("This tool could not remove the packages: %s"), error_local->message);
-			g_error_free (error_local);
-		}
-		goto out;
-	}
-
-	ret = pk_client_reset (client_sync, &error_local);
-	if (!ret) {
-		/* TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows */
-		*error = g_error_new (1, 0, _("Internal error: %s"), error_local->message);
-		g_error_free (error_local);
-		goto out;
-	}
-
-	egg_debug ("Getting installed requires for %s", package_ids[0]);
-	/* see if any packages require this one */
-	ret = pk_client_simulate_remove_packages (client_sync, package_ids, error);
-	if (!ret) {
-		egg_warning ("failed to simulate a package removal");
-		goto out;
-	}
-
-	/* see how many packages there are */
-	list_single = pk_client_get_package_list (client_sync);
-	pk_obj_list_add_list (PK_OBJ_LIST(list), PK_OBJ_LIST(list_single));
-	g_object_unref (list_single);
-
-	/* one of the simulate-remove-packages failed */
-	if (!ret)
-		goto out;
-
-	/* if there are no required packages, just do the remove */
-	length = pk_package_list_get_size (list);
-	if (length == 0) {
-		egg_debug ("no requires");
-		ret = pk_console_remove_only (PK_CLIENT(task), package_ids, FALSE, &error_local);
-		if (!ret) {
-			/* TRANSLATORS: There was an error removing the packages. The detailed error follows */
-			*error = g_error_new (1, 0, _("This tool could not remove the packages: %s"), error_local->message);
-			g_error_free (error_local);
-		}
-		goto out;
-	}
-
-	/* present this to the user */
-
-	/* print the additional deps to the screen */
-	pk_console_print_deps_list (list);
-
-	/* TRANSLATORS: We are checking if it's okay to remove a list of packages */
-	remove_deps = pk_console_get_prompt (_("Proceed with additional packages?"), FALSE);
-
-	/* we chickened out */
-	if (!remove_deps) {
-		/* TRANSLATORS: There was an error removing the packages. The detailed error follows */
-		*error = g_error_new (1, 0, "%s", _("The package removal was canceled!"));
-		ret = FALSE;
-		goto out;
-	}
-
-	/* remove all the stuff */
-	ret = pk_console_remove_only (PK_CLIENT(task), package_ids, TRUE, &error_local);
+	/* no, just try to remove it without deps */
+	ret = pk_console_remove_only (PK_CLIENT(task), package_ids, FALSE, &error_local);
 	if (!ret) {
 		/* TRANSLATORS: There was an error removing the packages. The detailed error follows */
 		*error = g_error_new (1, 0, _("This tool could not remove the packages: %s"), error_local->message);
@@ -920,15 +705,6 @@ pk_console_download_packages (gchar **packages, const gchar *directory, GError *
 		/* convert to strv */
 		package_ids = pk_ptr_array_to_strv (array_packages);
 
-		/* reset */
-		ret = pk_client_reset (PK_CLIENT(task), &error_local);
-		if (!ret) {
-			/* TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows */
-			*error = g_error_new (1, 0, _("Internal error: %s"), error_local->message);
-			g_error_free (error_local);
-			goto out;
-		}
-
 		ret = pk_client_download_packages (PK_CLIENT(task), package_ids, directory, error);
 		if (!ret) {
 			/* TRANSLATORS: Could not download the packages for some reason. The detailed error follows */
@@ -970,67 +746,15 @@ pk_console_update_package (const gchar *package, GError **error)
 	}
 	package_ids = pk_package_ids_from_id (package_id);
 
-	/* are we dumb and can't simulate? */
-	if (!pk_bitfield_contain (roles, PK_ROLE_ENUM_SIMULATE_UPDATE_PACKAGES)) {
-		/* no, just try to update it without deps */
-		ret = pk_client_update_packages (PK_CLIENT(task), TRUE, package_ids, error);
-		if (!ret) {
-			/* TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows */
-			*error = g_error_new (1, 0, _("This tool could not update %s: %s"), package, error_local->message);
-			g_error_free (error_local);
-		}
-		goto out;
-	}
-
-	ret = pk_client_reset (client_sync, &error_local);
-	if (!ret) {
-		/* TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows */
-		*error = g_error_new (1, 0, _("Internal error: %s"), error_local->message);
-		g_error_free (error_local);
-		goto out;
-	}
-
-	egg_debug ("Simulating update for %s", package_ids[0]);
-	ret = pk_client_simulate_update_packages (client_sync, package_ids, error);
-	if (!ret) {
-		egg_warning ("failed to simulate a package update");
-		goto out;
-	}
-
-	/* see how many packages there are */
-	list_single = pk_client_get_package_list (client_sync);
-	pk_obj_list_add_list (PK_OBJ_LIST(list), PK_OBJ_LIST(list_single));
-	g_object_unref (list_single);
-
-	/* one of the simulate-update-packages failed */
-	if (!ret)
-		goto out;
-
-	/* if there are no required packages, just do the remove */
-	length = pk_package_list_get_size (list);
-	if (length != 0) {
-
-		/* print the additional deps to the screen */
-		pk_console_print_deps_list (list);
-
-		/* TRANSLATORS: We are checking if it's okay to remove a list of packages */
-		accept_changes = pk_console_get_prompt (_("Proceed with changes?"), FALSE);
-
-		/* we chickened out */
-		if (!accept_changes) {
-			/* TRANSLATORS: There was an error removing the packages. The detailed error follows */
-			*error = g_error_new (1, 0, "%s", _("The package update was canceled!"));
-			ret = FALSE;
-			goto out;
-		}
-	}
-
+	/* no, just try to update it without deps */
 	ret = pk_client_update_packages (PK_CLIENT(task), TRUE, package_ids, error);
 	if (!ret) {
 		/* TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows */
 		*error = g_error_new (1, 0, _("This tool could not update %s: %s"), package, error_local->message);
 		g_error_free (error_local);
 	}
+	goto out;
+
 out:
 	g_object_unref (list);
 	g_strfreev (package_ids);
@@ -1187,31 +911,6 @@ pk_console_get_update_detail (const gchar *package, GError **error)
 	g_free (package_id);
 	return ret;
 }
-
-/**
- * pk_console_error_code_cb:
- **/
-static void
-pk_console_error_code_cb (PkErrorCodeEnum error_code, const gchar *details, gpointer data)
-{
-	PkRoleEnum role;
-
-	pk_client_get_role (PK_CLIENT(task), &role, NULL, NULL);
-
-	/* handled */
-	if (need_requeue) {
-		if (error_code == PK_ERROR_ENUM_NO_LICENSE_AGREEMENT ||
-		    pk_error_code_is_need_untrusted (error_code)) {
-			egg_debug ("ignoring %s error as handled", pk_error_enum_to_text (error_code));
-			return;
-		}
-		egg_warning ("set requeue, but did not handle error");
-	}
-
-	/* TRANSLATORS: This was an unhandled error, and we don't have _any_ context */
-	g_print ("%s %s: %s\n", _("Error:"), pk_error_enum_to_text (error_code), details);
-}
-
 #endif
 
 /**
@@ -1244,22 +943,11 @@ pk_console_sigint_handler (int sig)
 
 #if 0
 	/* cancel any tasks */
-	pk_client_get_role (PK_CLIENT(task), &role, NULL, NULL);
-	if (role != PK_ROLE_ENUM_UNKNOWN) {
-		ret = pk_client_cancel (PK_CLIENT(task), &error);
-		if (!ret) {
-			egg_warning ("failed to cancel normal client: %s", error->message);
-			g_error_free (error);
-			error = NULL;
-		}
-	}
-	pk_client_get_role (client_sync, &role, NULL, NULL);
-	if (role != PK_ROLE_ENUM_UNKNOWN) {
-		ret = pk_client_cancel (client_sync, &error);
-		if (!ret) {
-			egg_warning ("failed to cancel task client: %s", error->message);
-			g_error_free (error);
-		}
+	ret = pk_client_cancel (PK_CLIENT(task), &error);
+	if (!ret) {
+		egg_warning ("failed to cancel normal client: %s", error->message);
+		g_error_free (error);
+		error = NULL;
 	}
 #endif
 
commit f2e30662f72d7c4fd74637497cc3545246450aac
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 18:13:24 2009 +0100

    glib2: Fix GetOldTransactions

diff --git a/client/pk-console-test.c b/client/pk-console-test.c
index 9f36e72..1d8bcb3 100644
--- a/client/pk-console-test.c
+++ b/client/pk-console-test.c
@@ -187,76 +187,12 @@ pk_console_transaction_cb (const PkResultItemTransaction *obj, gpointer user_dat
 
 		/* create printable */
 		package = pk_package_id_to_printable (parts[1]);
-		g_print (" - %s %s", parts[0], package);
+		g_print (" - %s %s\n", parts[0], package);
 		g_free (package);
 		g_strfreev (parts);
 	}
 	g_strfreev (lines);
 }
-#if 0
-
-/**
- * pk_console_print_deps_list_info:
- **/
-static guint
-pk_console_print_deps_list_info (PkPackageSack *list, PkInfoEnum info, const gchar *header)
-{
-	const PkResultItemPackage *obj;
-	gboolean ret = FALSE;
-	guint found = 0;
-	guint i;
-	guint length;
-
-	length = pk_package_list_get_size (list);
-	for (i=0; i<length; i++) {
-		obj = pk_package_list_get_obj (list, i);
-
-		/* are we interested in this type */
-		if (obj->info != info)
-			continue;
-
-		/* is this package already local */
-		if (g_strcmp0 (obj->id->data, "local") == 0)
-			continue;
-
-		/* print header if it's not been done before */
-		if (!ret) {
-			g_print ("%s\n", header);
-			ret = TRUE;
-		}
-
-		/* print package */
-		g_print ("%i\t%s\n", ++found, package);
-	}
-	return found;
-}
-
-/**
- * pk_console_print_deps_list:
- **/
-static guint
-pk_console_print_deps_list (PkPackageSack *list)
-{
-	guint found = 0;
-
-	/* TRANSLATORS: When processing, we might have to remove other dependencies */
-	found += pk_console_print_deps_list_info (list, PK_INFO_ENUM_REMOVING, _("The following packages have to be removed:"));
-
-	/* TRANSLATORS: When processing, we might have to install other dependencies */
-	found += pk_console_print_deps_list_info (list, PK_INFO_ENUM_INSTALLING, _("The following packages have to be installed:"));
-
-	/* TRANSLATORS: When processing, we might have to update other dependencies */
-	found += pk_console_print_deps_list_info (list, PK_INFO_ENUM_UPDATING, _("The following packages have to be updated:"));
-
-	/* TRANSLATORS: When processing, we might have to reinstall other dependencies */
-	found += pk_console_print_deps_list_info (list, PK_INFO_ENUM_REINSTALLING, _("The following packages have to be reinstalled:"));
-
-	/* TRANSLATORS: When processing, we might have to downgrade other dependencies */
-	found += pk_console_print_deps_list_info (list, PK_INFO_ENUM_DOWNGRADING, _("The following packages have to be downgraded:"));
-
-	return found;
-}
-#endif
 
 /**
  * pk_console_distro_upgrade_cb:
diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index ebd11ba..0363b6e 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -910,7 +910,7 @@ pk_client_set_locale_cb (DBusGProxy *proxy, DBusGProxyCall *call, PkClientState
 	} else if (state->role == PK_ROLE_ENUM_GET_OLD_TRANSACTIONS) {
 		state->call = dbus_g_proxy_begin_call (state->proxy, "GetOldTransactions",
 						       (DBusGProxyCallNotify) pk_client_method_cb, state, NULL,
-						       G_TYPE_STRV, state->package_ids,
+						       G_TYPE_UINT, state->number,
 						       G_TYPE_INVALID);
 	} else if (state->role == PK_ROLE_ENUM_DOWNLOAD_PACKAGES) {
 		state->call = dbus_g_proxy_begin_call (state->proxy, "DownloadPackages",
diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c
index 358df91..4662925 100644
--- a/lib/packagekit-glib2/pk-task.c
+++ b/lib/packagekit-glib2/pk-task.c
@@ -241,7 +241,7 @@ pk_task_simulate_ready_cb (GObject *source_object, GAsyncResult *res, PkTaskStat
 	/* TODO: remove all the PK_ENUM_INFO_CLEANUP packages */
 
 	/* no results from simulate */
-	length = pk_package_list_get_size (list);
+	length = pk_package_sack_get_size (sack);
 	if (length == 0) {
 		pk_task_do_async_action (state);
 		goto out;
commit 04bd04aeca7dd13da8f9ffcbc1881fbfff89b59d
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 18:09:51 2009 +0100

    Don't finish the progress bar if one was never drawn

diff --git a/contrib/debuginfo-install/pk-progress-bar.c b/contrib/debuginfo-install/pk-progress-bar.c
index b4e4098..af3bf1c 100644
--- a/contrib/debuginfo-install/pk-progress-bar.c
+++ b/contrib/debuginfo-install/pk-progress-bar.c
@@ -263,6 +263,10 @@ pk_progress_bar_end (PkProgressBar *self)
 {
 	g_return_val_if_fail (PK_IS_PROGRESS_BAR (self), FALSE);
 
+	/* never drawn */
+	if (self->priv->percentage == G_MININT)
+		return FALSE;
+
 	self->priv->percentage = G_MININT;
 	pk_progress_bar_draw (self, 100);
 	g_print ("\n");
commit 09889751aa1151ca64ca9e993e89a456832fc25a
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 18:05:06 2009 +0100

    glib2: handle simulate in the PkTaskText

diff --git a/client/pk-task-text.c b/client/pk-task-text.c
index 511d252..f85ca2e 100644
--- a/client/pk-task-text.c
+++ b/client/pk-task-text.c
@@ -198,6 +198,101 @@ dkp_task_text_media_change_question (PkTask *task, guint request, const PkResult
 }
 
 /**
+ * pk_task_text_simulate_question_type_to_text:
+ **/
+static const gchar *
+dkp_task_text_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;
+}
+
+/**
+ * pk_task_text_simulate_question:
+ **/
+static void
+dkp_task_text_simulate_question (PkTask *task, guint request, const PkResults *results)
+{
+	guint i;
+	guint len;
+	gboolean ret;
+	const gchar *package_id;
+	const gchar *title;
+	gchar *printable;
+	gchar *summary;
+	PkPackage *package;
+	PkPackageSack *sack;
+	PkInfoEnum info;
+	PkInfoEnum info_last = PK_INFO_ENUM_UNKNOWN;
+	PkTaskTextPrivate *priv = PK_TASK_TEXT(task)->priv;
+
+	/* set some user data, for no reason */
+	priv->user_data = NULL;
+
+	/* 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 = dkp_task_text_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);
+	}
+
+	/* ask the user */
+	ret = pk_console_get_prompt (_("Proceed with changes?"), FALSE);
+	if (ret) {
+		pk_task_user_accepted (task, request);
+	} else {
+		g_print ("%s\n", _("The transaction did not proceed."));
+		pk_task_user_declined (task, request);
+	}
+
+	g_object_unref (sack);
+}
+
+/**
  * pk_task_text_class_init:
  **/
 static void
@@ -211,6 +306,7 @@ pk_task_text_class_init (PkTaskTextClass *klass)
 	task_class->key_question = dkp_task_text_key_question;
 	task_class->eula_question = dkp_task_text_eula_question;
 	task_class->media_change_question = dkp_task_text_media_change_question;
+	task_class->simulate_question = dkp_task_text_simulate_question;
 
 	g_type_class_add_private (klass, sizeof (PkTaskTextPrivate));
 }
@@ -290,7 +386,7 @@ pk_task_text_test_install_packages_cb (GObject *object, GAsyncResult *res, EggTe
 		egg_debug ("%s\t%s\t%s", pk_info_enum_to_text (item->info_enum), item->package_id, item->summary);
 	}
 
-	if (packages->len != 5)
+	if (packages->len != 3)
 		egg_test_failed (test, "invalid number of packages: %i", packages->len);
 
 	g_ptr_array_unref (packages);
commit a9ad006ae6d2a71290bd6f5c556b92d422af3133
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 18:04:35 2009 +0100

    glib2: only call the simulate callback if we really need to

diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c
index e9b0f72..358df91 100644
--- a/lib/packagekit-glib2/pk-task.c
+++ b/lib/packagekit-glib2/pk-task.c
@@ -198,6 +198,8 @@ pk_task_simulate_ready_cb (GObject *source_object, GAsyncResult *res, PkTaskStat
 	PkTaskClass *klass = PK_TASK_GET_CLASS (state->task);
 	GError *error = NULL;
 	const PkResults *results;
+	PkPackageSack *sack = NULL;
+	guint length;
 
 	/* old results no longer valid */
 	if (state->results != NULL)
@@ -233,9 +235,32 @@ pk_task_simulate_ready_cb (GObject *source_object, GAsyncResult *res, PkTaskStat
 		goto out;
 	}
 
+	/* get data */
+	sack = pk_results_get_package_sack (results);
+
+	/* TODO: remove all the PK_ENUM_INFO_CLEANUP packages */
+
+	/* no results from simulate */
+	length = pk_package_list_get_size (list);
+	if (length == 0) {
+		pk_task_do_async_action (state);
+		goto out;
+	}
+
+	/* same number of packages as the input packages */
+	if (length == g_strv_length (state->package_ids)) {
+		pk_task_do_async_action (state);
+		goto out;
+	}
+
+	/* sort the list, as clients will mostly want this */
+	pk_package_sack_sort_info (sack);
+
 	/* run the callback */
 	klass->simulate_question (state->task, state->request, state->results);
 out:
+	if (sack != NULL)
+		g_object_unref (sack);
 	return;
 }
 
commit 692ab2622b9a02bc511aa93c72f4d20b2f0b1a2c
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 17:47:12 2009 +0100

    dameon: for backends without simulate, we need to emit the original packages before we fall back

diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index af0ed87..09da9c6 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -1227,6 +1227,7 @@ G_GNUC_WARN_UNUSED_RESULT static gboolean
 pk_transaction_set_running (PkTransaction *transaction)
 {
 	gboolean ret;
+	guint i;
 	GError *error = NULL;
 	PkBackendDesc *desc;
 	PkStore *store;
@@ -1417,6 +1418,9 @@ pk_transaction_set_running (PkTransaction *transaction)
 		if (desc->simulate_install_packages != NULL) {
 			desc->simulate_install_packages (priv->backend, priv->cached_package_ids);
 		} else {
+			/* we need to emit the original packages before we fall back */
+			for (i=0; priv->cached_package_ids[i] != NULL; i++)
+				pk_backend_package (priv->backend, PK_INFO_ENUM_INSTALLING, priv->cached_package_ids[i], "");
 			filters = pk_bitfield_from_enums (PK_FILTER_ENUM_NOT_INSTALLED, PK_FILTER_ENUM_NEWEST, -1);
 			desc->get_depends (priv->backend, filters, priv->cached_package_ids, TRUE);
 		}
@@ -1433,6 +1437,9 @@ pk_transaction_set_running (PkTransaction *transaction)
 		if (desc->simulate_update_packages != NULL) {
 			desc->simulate_update_packages (priv->backend, priv->cached_package_ids);
 		} else {
+			/* we need to emit the original packages before we fall back */
+			for (i=0; priv->cached_package_ids[i] != NULL; i++)
+				pk_backend_package (priv->backend, PK_INFO_ENUM_REMOVING, priv->cached_package_ids[i], "");
 			filters = pk_bitfield_from_enums (PK_FILTER_ENUM_NOT_INSTALLED, PK_FILTER_ENUM_NEWEST, -1);
 			desc->get_depends (priv->backend, filters, priv->cached_package_ids, TRUE);
 		}
commit 1380138ec5d16bd03962d43b011b6685b69cc39f
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 17:25:08 2009 +0100

    glib2: Add simulate support into PkTask, falling back to not-simulating if not supported

diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index f070c5b..ebd11ba 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -270,6 +270,7 @@ pk_client_cancel_cb (DBusGProxy *proxy, DBusGProxyCall *call, PkClientState *sta
 	ret = dbus_g_proxy_end_call (proxy, call, &error,
 				     G_TYPE_INVALID);
 	if (!ret) {
+		/* there's not really a lot we can do here */
 		egg_warning ("failed: %s", error->message);
 		g_error_free (error);
 	}
@@ -409,7 +410,6 @@ pk_client_method_cb (DBusGProxy *proxy, DBusGProxyCall *call, PkClientState *sta
 	if (!state->ret) {
 		/* fix up the D-Bus error */
 		pk_client_fixup_dbus_error (error);
-		egg_warning ("failed: %s", error->message);
 		pk_client_state_finish (state, error);
 		return;
 	}
@@ -851,7 +851,6 @@ pk_client_set_locale_cb (DBusGProxy *proxy, DBusGProxyCall *call, PkClientState
 	if (!ret) {
 		/* fix up the D-Bus error */
 		pk_client_fixup_dbus_error (error);
-		egg_warning ("failed to set locale: %s", error->message);
 		pk_client_state_finish (state, error);
 		goto out;
 	}
@@ -2844,7 +2843,6 @@ pk_client_get_properties_cb (DBusGProxy *proxy, DBusGProxyCall *call, PkClientSt
 				     dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), &hash,
 				     G_TYPE_INVALID);
 	if (!ret) {
-		egg_warning ("failed to set proxy: %s", error->message);
 		pk_client_state_finish (state, error);
 		return;
 	}
@@ -2992,7 +2990,6 @@ pk_client_init (PkClient *client)
 	/* check dbus connections, exit if not valid */
 	client->priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
 	if (error != NULL) {
-		egg_warning ("%s", error->message);
 		g_error_free (error);
 		g_error ("This program cannot start until you start the dbus system service.");
 	}
diff --git a/lib/packagekit-glib2/pk-task-wrapper.c b/lib/packagekit-glib2/pk-task-wrapper.c
index c6d2e1e..0d25a29 100644
--- a/lib/packagekit-glib2/pk-task-wrapper.c
+++ b/lib/packagekit-glib2/pk-task-wrapper.c
@@ -23,6 +23,7 @@
 
 #include <packagekit-glib2/pk-enum.h>
 #include <packagekit-glib2/pk-results.h>
+#include <packagekit-glib2/pk-package-id.h>
 
 #include "egg-debug.h"
 
@@ -157,6 +158,51 @@ dkp_task_wrapper_media_change_question (PkTask *task, guint request, const PkRes
 }
 
 /**
+ * pk_task_wrapper_simulate_question:
+ **/
+static void
+dkp_task_wrapper_simulate_question (PkTask *task, guint request, const PkResults *results)
+{
+	guint i;
+	guint len;
+	const gchar *package_id;
+	gchar *printable;
+	gchar *summary;
+	PkPackage *package;
+	PkPackageSack *sack;
+	PkInfoEnum info;
+	PkTaskWrapperPrivate *priv = PK_TASK_WRAPPER(task)->priv;
+
+	/* set some user data, for no reason */
+	priv->user_data = NULL;
+
+	/* 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);
+		package_id = pk_package_get_id (package);
+		printable = pk_package_id_to_printable (package_id);
+		g_print ("%s\t%s\t%s\n", pk_info_enum_to_text (info), printable, summary);
+
+		g_free (summary);
+		g_free (printable);
+		g_object_unref (package);
+	}
+
+	/* just accept without asking */
+	pk_task_user_accepted (task, request);
+
+	g_object_unref (sack);
+}
+
+/**
  * pk_task_wrapper_class_init:
  **/
 static void
@@ -170,6 +216,7 @@ pk_task_wrapper_class_init (PkTaskWrapperClass *klass)
 	task_class->key_question = dkp_task_wrapper_key_question;
 	task_class->eula_question = dkp_task_wrapper_eula_question;
 	task_class->media_change_question = dkp_task_wrapper_media_change_question;
+	task_class->simulate_question = dkp_task_wrapper_simulate_question;
 
 	g_type_class_add_private (klass, sizeof (PkTaskWrapperPrivate));
 }
@@ -230,14 +277,14 @@ pk_task_wrapper_test_install_packages_cb (GObject *object, GAsyncResult *res, Eg
 	/* get the results */
 	results = pk_task_generic_finish (PK_TASK (task), res, &error);
 	if (results == NULL) {
-		egg_test_failed (test, "failed to resolve: %s", error->message);
+		egg_test_failed (test, "failed to install: %s", error->message);
 		g_error_free (error);
 		return;
 	}
 
 	exit_enum = pk_results_get_exit_code (results);
 	if (exit_enum != PK_EXIT_ENUM_SUCCESS)
-		egg_test_failed (test, "failed to resolve success: %s", pk_exit_enum_to_text (exit_enum));
+		egg_test_failed (test, "failed to install packages: %s", pk_exit_enum_to_text (exit_enum));
 
 	packages = pk_results_get_package_array (results);
 	if (packages == NULL)
@@ -249,7 +296,7 @@ pk_task_wrapper_test_install_packages_cb (GObject *object, GAsyncResult *res, Eg
 		egg_debug ("%s\t%s\t%s", pk_info_enum_to_text (item->info_enum), item->package_id, item->summary);
 	}
 
-	if (packages->len != 5)
+	if (packages->len != 3)
 		egg_test_failed (test, "invalid number of packages: %i", packages->len);
 
 	g_ptr_array_unref (packages);
diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c
index 4f380fe..e9b0f72 100644
--- a/lib/packagekit-glib2/pk-task.c
+++ b/lib/packagekit-glib2/pk-task.c
@@ -51,6 +51,7 @@ typedef struct {
 	guint				 request;
 	PkRoleEnum			 role;
 	PkExitEnum			 exit_enum;
+	gboolean			 simulate;
 	gboolean			 only_trusted;
 	gchar				**package_ids;
 	gboolean			 allow_deps;
@@ -131,7 +132,7 @@ pk_task_generic_state_finish (PkTaskState *state, const GError *error)
 	g_simple_async_result_complete_in_idle (state->res);
 
 	/* remove from list */
-	egg_warning ("remove state");
+	egg_debug ("remove state %p", state);
 	g_ptr_array_remove (state->task->priv->array, state);
 
 	/* deallocate */
@@ -149,6 +150,9 @@ pk_task_generic_state_finish (PkTaskState *state, const GError *error)
 static void
 pk_task_do_async_action (PkTaskState *state)
 {
+	/* so the callback knows if we are serious or not */
+	state->simulate = FALSE;
+
 	/* do the correct action */
 	if (state->role == PK_ROLE_ENUM_INSTALL_PACKAGES) {
 		/* start install async */
@@ -186,6 +190,95 @@ pk_task_do_async_action (PkTaskState *state)
 }
 
 /**
+ * pk_task_simulate_ready_cb:
+ **/
+static void
+pk_task_simulate_ready_cb (GObject *source_object, GAsyncResult *res, PkTaskState *state)
+{
+	PkTaskClass *klass = PK_TASK_GET_CLASS (state->task);
+	GError *error = NULL;
+	const PkResults *results;
+
+	/* old results no longer valid */
+	if (state->results != NULL)
+		g_object_unref (state->results);
+
+	/* get the results */
+	results = pk_client_generic_finish (PK_CLIENT(state->task), res, &error);
+	if (results == NULL) {
+
+		/* handle case where this is not implemented */
+		if (error->code == PK_CLIENT_ERROR_NOT_SUPPORTED) {
+			pk_task_do_async_action (state);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* just abort */
+		pk_task_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* we own a copy now */
+	state->results = g_object_ref (G_OBJECT(results));
+
+	/* get exit code */
+	state->exit_enum = pk_results_get_exit_code (state->results);
+	if (state->exit_enum != PK_EXIT_ENUM_SUCCESS) {
+		error = g_error_new (PK_CLIENT_ERROR, PK_CLIENT_ERROR_FAILED,
+				     "could not do simulate");
+		pk_task_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* run the callback */
+	klass->simulate_question (state->task, state->request, state->results);
+out:
+	return;
+}
+
+/**
+ * pk_task_do_async_simulate_action:
+ **/
+static void
+pk_task_do_async_simulate_action (PkTaskState *state)
+{
+	/* so the callback knows if we are serious or not */
+	state->simulate = TRUE;
+
+	/* do the correct action */
+	if (state->role == PK_ROLE_ENUM_INSTALL_PACKAGES) {
+		/* simulate install async */
+		egg_debug ("doing install");
+		pk_client_simulate_install_packages_async (PK_CLIENT(state->task), state->package_ids,
+							   state->cancellable, state->progress_callback, state->progress_user_data,
+							   (GAsyncReadyCallback) pk_task_simulate_ready_cb, state);
+	} else if (state->role == PK_ROLE_ENUM_UPDATE_PACKAGES) {
+		/* simulate update async */
+		egg_debug ("doing update");
+		pk_client_simulate_update_packages_async (PK_CLIENT(state->task), state->package_ids,
+							  state->cancellable, state->progress_callback, state->progress_user_data,
+							  (GAsyncReadyCallback) pk_task_simulate_ready_cb, state);
+	} else if (state->role == PK_ROLE_ENUM_REMOVE_PACKAGES) {
+		/* simulate remove async */
+		egg_debug ("doing remove");
+		pk_client_simulate_remove_packages_async (PK_CLIENT(state->task), state->package_ids,
+							  state->cancellable, state->progress_callback, state->progress_user_data,
+							  (GAsyncReadyCallback) pk_task_simulate_ready_cb, state);
+	} else if (state->role == PK_ROLE_ENUM_INSTALL_FILES) {
+		/* simulate install async */
+		egg_debug ("doing install files");
+		pk_client_simulate_install_files_async (PK_CLIENT(state->task), state->files,
+						        state->cancellable, state->progress_callback, state->progress_user_data,
+						        (GAsyncReadyCallback) pk_task_simulate_ready_cb, state);
+	} else {
+		g_assert_not_reached ();
+	}
+}
+
+/**
  * pk_task_install_signatures_ready_cb:
  **/
 static void
@@ -202,7 +295,6 @@ pk_task_install_signatures_ready_cb (GObject *source_object, GAsyncResult *res,
 	/* get the results */
 	results = pk_client_generic_finish (PK_CLIENT(task), res, &error);
 	if (results == NULL) {
-		egg_warning ("failed to install signature: %s", error->message);
 		pk_task_generic_state_finish (state, error);
 		g_error_free (error);
 		goto out;
@@ -288,7 +380,6 @@ pk_task_accept_eulas_ready_cb (GObject *source_object, GAsyncResult *res, PkTask
 	/* get the results */
 	results = pk_client_generic_finish (PK_CLIENT(task), res, &error);
 	if (results == NULL) {
-		egg_warning ("failed to accept eula: %s", error->message);
 		pk_task_generic_state_finish (state, error);
 		g_error_free (error);
 		goto out;
@@ -413,12 +504,21 @@ pk_task_user_declined_idle_cb (PkTaskState *state)
 {
 	GError *error;
 
+	/* the introduction is finished */
+	if (state->simulate) {
+		error = g_error_new (PK_CLIENT_ERROR, PK_CLIENT_ERROR_FAILED, "user declined simulation");
+		pk_task_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
 	/* doing task */
 	egg_debug ("declined request %i", state->request);
 	error = g_error_new (PK_CLIENT_ERROR, PK_CLIENT_ERROR_FAILED, "user declined interaction");
 	pk_task_generic_state_finish (state, error);
 	g_error_free (error);
 
+out:
 	/* never repeat */
 	return FALSE;
 }
@@ -460,7 +560,6 @@ pk_task_ready_cb (GObject *source_object, GAsyncResult *res, PkTaskState *state)
 	/* get the results */
 	results = pk_client_generic_finish (PK_CLIENT(task), res, &error);
 	if (results == NULL) {
-		egg_warning ("failed to resolve: %s", error->message);
 		pk_task_generic_state_finish (state, error);
 		g_error_free (error);
 		goto out;
@@ -563,6 +662,7 @@ pk_task_install_packages_async (PkTask *task, gchar **package_ids, GCancellable
 {
 	GSimpleAsyncResult *res;
 	PkTaskState *state;
+	PkTaskClass *klass = PK_TASK_GET_CLASS (task);
 
 	g_return_if_fail (PK_IS_TASK (task));
 	g_return_if_fail (callback != NULL);
@@ -584,11 +684,14 @@ pk_task_install_packages_async (PkTask *task, gchar **package_ids, GCancellable
 	state->request = pk_task_generate_request_id ();
 	g_object_add_weak_pointer (G_OBJECT (state->task), (gpointer) &state->task);
 
-	egg_warning ("adding state %p", state);
+	egg_debug ("adding state %p", state);
 	g_ptr_array_add (task->priv->array, state);
 
 	/* start trusted install async */
-	pk_task_do_async_action (state);
+	if (klass->simulate_question != NULL)
+		pk_task_do_async_simulate_action (state);
+	else
+		pk_task_do_async_action (state);
 
 	g_object_unref (res);
 }
@@ -612,6 +715,7 @@ pk_task_update_packages_async (PkTask *task, gchar **package_ids, GCancellable *
 {
 	GSimpleAsyncResult *res;
 	PkTaskState *state;
+	PkTaskClass *klass = PK_TASK_GET_CLASS (task);
 
 	g_return_if_fail (PK_IS_CLIENT (task));
 	g_return_if_fail (callback_ready != NULL);
@@ -632,11 +736,14 @@ pk_task_update_packages_async (PkTask *task, gchar **package_ids, GCancellable *
 	state->request = pk_task_generate_request_id ();
 	g_object_add_weak_pointer (G_OBJECT (state->task), (gpointer) &state->task);
 
-	egg_warning ("adding state %p", state);
+	egg_debug ("adding state %p", state);
 	g_ptr_array_add (task->priv->array, state);
 
 	/* start trusted install async */
-	pk_task_do_async_action (state);
+	if (klass->simulate_question != NULL)
+		pk_task_do_async_simulate_action (state);
+	else
+		pk_task_do_async_action (state);
 
 	g_object_unref (res);
 }
@@ -664,6 +771,7 @@ pk_task_remove_packages_async (PkTask *task, gchar **package_ids, gboolean allow
 {
 	GSimpleAsyncResult *res;
 	PkTaskState *state;
+	PkTaskClass *klass = PK_TASK_GET_CLASS (task);
 
 	g_return_if_fail (PK_IS_CLIENT (task));
 	g_return_if_fail (callback_ready != NULL);
@@ -685,11 +793,14 @@ pk_task_remove_packages_async (PkTask *task, gchar **package_ids, gboolean allow
 	state->request = pk_task_generate_request_id ();
 	g_object_add_weak_pointer (G_OBJECT (state->task), (gpointer) &state->task);
 
-	egg_warning ("adding state %p", state);
+	egg_debug ("adding state %p", state);
 	g_ptr_array_add (task->priv->array, state);
 
 	/* start trusted install async */
-	pk_task_do_async_action (state);
+	if (klass->simulate_question != NULL)
+		pk_task_do_async_simulate_action (state);
+	else
+		pk_task_do_async_action (state);
 
 	g_object_unref (res);
 }
@@ -714,6 +825,7 @@ pk_task_install_files_async (PkTask *task, gchar **files, GCancellable *cancella
 {
 	GSimpleAsyncResult *res;
 	PkTaskState *state;
+	PkTaskClass *klass = PK_TASK_GET_CLASS (task);
 
 	g_return_if_fail (PK_IS_CLIENT (task));
 	g_return_if_fail (callback_ready != NULL);
@@ -734,11 +846,14 @@ pk_task_install_files_async (PkTask *task, gchar **files, GCancellable *cancella
 	state->request = pk_task_generate_request_id ();
 	g_object_add_weak_pointer (G_OBJECT (state->task), (gpointer) &state->task);
 
-	egg_warning ("adding state %p", state);
+	egg_debug ("adding state %p", state);
 	g_ptr_array_add (task->priv->array, state);
 
 	/* start trusted install async */
-	pk_task_do_async_action (state);
+	if (klass->simulate_question != NULL)
+		pk_task_do_async_simulate_action (state);
+	else
+		pk_task_do_async_action (state);
 
 	g_object_unref (res);
 }
@@ -785,7 +900,7 @@ pk_task_update_system_async (PkTask *task, GCancellable *cancellable,
 	state->request = pk_task_generate_request_id ();
 	g_object_add_weak_pointer (G_OBJECT (state->task), (gpointer) &state->task);
 
-	egg_warning ("adding state %p", state);
+	egg_debug ("adding state %p", state);
 	g_ptr_array_add (task->priv->array, state);
 
 	/* start trusted install async */
diff --git a/lib/packagekit-glib2/pk-task.h b/lib/packagekit-glib2/pk-task.h
index a8c5550..13ab41e 100644
--- a/lib/packagekit-glib2/pk-task.h
+++ b/lib/packagekit-glib2/pk-task.h
@@ -74,6 +74,9 @@ struct _PkTaskClass
 	void	 (*media_change_question)		(PkTask			*task,
 							 guint			 request,
 							 const PkResults	*results);
+	void	 (*simulate_question)			(PkTask			*task,
+							 guint			 request,
+							 const PkResults	*results);
 	/* padding for future expansion */
 	void (*_pk_reserved1)	(void);
 	void (*_pk_reserved2)	(void);
commit fc6713ec7f289c2c7fac8c42bf412dc6f9473e9d
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 16:29:12 2009 +0100

    glib2: Add some of the glib1 sorting methods to PkPackageSack

diff --git a/lib/packagekit-glib2/pk-package-sack.c b/lib/packagekit-glib2/pk-package-sack.c
index 2c73420..970a71a 100644
--- a/lib/packagekit-glib2/pk-package-sack.c
+++ b/lib/packagekit-glib2/pk-package-sack.c
@@ -268,6 +268,93 @@ pk_package_sack_find_by_id (PkPackageSack *sack, const gchar *package_id)
 }
 
 /**
+ * pk_package_sack_sort_compare_package_id_func:
+ **/
+static gint
+pk_package_sack_sort_compare_package_id_func (PkPackage **a, PkPackage **b)
+{
+	const gchar *package_id1;
+	const gchar *package_id2;
+	package_id1 = pk_package_get_id (*a);
+	package_id2 = pk_package_get_id (*b);
+	return g_strcmp0 (package_id1, package_id2);
+}
+
+/**
+ * pk_package_sack_sort_compare_summary_func:
+ **/
+static gint
+pk_package_sack_sort_compare_summary_func (PkPackage **a, PkPackage **b)
+{
+	gint retval;
+	gchar *summary1;
+	gchar *summary2;
+
+	g_object_get (*a, "summary", &summary1, NULL);
+	g_object_get (*b, "summary", &summary2, NULL);
+	retval = g_strcmp0 (summary1, summary2);
+
+	g_free (summary1);
+	g_free (summary2);
+	return retval;
+}
+
+/**
+ * pk_package_sack_sort_compare_info_func:
+ **/
+static gint
+pk_package_sack_sort_compare_info_func (PkPackage **a, PkPackage **b)
+{
+	PkInfoEnum *info1;
+	PkInfoEnum *info2;
+
+	g_object_get (*a, "info", &info1, NULL);
+	g_object_get (*b, "info", &info2, NULL);
+
+	if (info1 == info2)
+		return 0;
+	else if (info1 > info2)
+		return -1;
+	return 1;
+}
+
+/**
+ * pk_package_sack_sort_package_id:
+ *
+ * Sorts by Package ID
+ **/
+void
+pk_package_sack_sort_package_id (PkPackageSack *sack)
+{
+	g_return_if_fail (PK_IS_PACKAGE_SACK (sack));
+	g_ptr_array_sort (sack->priv->array, (GCompareFunc) pk_package_sack_sort_compare_package_id_func);
+}
+
+/**
+ * pk_package_sack_sort_summary:
+ *
+ * Sorts by summary
+ **/
+void
+pk_package_sack_sort_summary (PkPackageSack *sack)
+{
+	g_return_if_fail (PK_IS_PACKAGE_SACK (sack));
+	g_ptr_array_sort (sack->priv->array, (GCompareFunc) pk_package_sack_sort_compare_summary_func);
+}
+
+/**
+ * pk_package_sack_sort_info:
+ *
+ * Sorts by PkInfoEnum
+ **/
+void
+pk_package_sack_sort_info (PkPackageSack *sack)
+{
+	g_return_if_fail (PK_IS_PACKAGE_SACK (sack));
+	g_ptr_array_sort (sack->priv->array, (GCompareFunc) pk_package_sack_sort_compare_info_func);
+}
+
+/**
  * pk_package_sack_get_total_bytes:
  * @sack: a valid #PkPackageSack instance
  *
@@ -417,7 +504,6 @@ pk_package_sack_merge_resolve_cb (GObject *source_object, GAsyncResult *res, PkP
 		g_object_unref (package);
 	}
 
-
 	/* all okay */
 	state->ret = TRUE;
 
diff --git a/lib/packagekit-glib2/pk-package-sack.h b/lib/packagekit-glib2/pk-package-sack.h
index 9c58d0a..38325e1 100644
--- a/lib/packagekit-glib2/pk-package-sack.h
+++ b/lib/packagekit-glib2/pk-package-sack.h
@@ -81,6 +81,9 @@ void		 pk_package_sack_test			(gpointer		 user_data);
 guint		 pk_package_sack_get_size		(PkPackageSack		*sack);
 PkPackage	*pk_package_sack_get_index		(PkPackageSack		*sack,
 							 guint			 i);
+void		 pk_package_sack_sort_package_id	(PkPackageSack		*sack);
+void		 pk_package_sack_sort_info		(PkPackageSack		*sack);
+void		 pk_package_sack_sort_summary		(PkPackageSack		*sack);
 gboolean	 pk_package_sack_add_package		(PkPackageSack		*sack,
 							 PkPackage		*package);
 gboolean	 pk_package_sack_add_package_by_id	(PkPackageSack		*sack,
commit 25a70a76fae38de9587f79f36f04a3ffcc15572f
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 16:28:40 2009 +0100

    glib2: don't add Finished packages to the sack, they are uninteresting

diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index 0cbd10f..f070c5b 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -428,7 +428,8 @@ pk_client_package_cb (DBusGProxy *proxy, const gchar *info_text, const gchar *pa
 
 	/* add to results */
 	info_enum = pk_info_enum_from_text (info_text);
-	pk_results_add_package (state->results, info_enum, package_id, summary);
+	if (info_enum != PK_INFO_ENUM_FINISHED)
+		pk_results_add_package (state->results, info_enum, package_id, summary);
 
 	/* save progress */
 	g_object_set (state->progress,
commit 10b49db3536e633a46784de07598fe5a7d3f01d7
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 14:36:34 2009 +0100

    glib2: store the role in the PkResults object too

diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index 20a769d..0cbd10f 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -1064,6 +1064,10 @@ pk_client_set_locale_cb (DBusGProxy *proxy, DBusGProxyCall *call, PkClientState
 
 	/* we'll have results from now on */
 	state->results = pk_results_new ();
+	g_object_set (state->results,
+		      "role", state->role,
+		      NULL);
+
 out:
 	g_free (filters_text);
 	return;
@@ -2886,7 +2890,7 @@ pk_client_adopt_async (PkClient *client, const gchar *transaction_id, GCancellab
 
 	/* save state */
 	state = g_slice_new0 (PkClientState);
-	state->role = PK_ROLE_ENUM_SIMULATE_UPDATE_PACKAGES;
+	state->role = PK_ROLE_ENUM_UNKNOWN;
 	state->res = g_object_ref (res);
 	if (cancellable != NULL) {
 		state->cancellable = g_object_ref (cancellable);
@@ -2926,6 +2930,9 @@ pk_client_adopt_async (PkClient *client, const gchar *transaction_id, GCancellab
 
 	/* we'll have results from now on */
 	state->results = pk_results_new ();
+	g_object_set (state->results,
+		      "role", state->role,
+		      NULL);
 
 	/* track state */
 	g_ptr_array_add (client->priv->calls, state);
diff --git a/lib/packagekit-glib2/pk-results.c b/lib/packagekit-glib2/pk-results.c
index 2c0f382..cea84df 100644
--- a/lib/packagekit-glib2/pk-results.c
+++ b/lib/packagekit-glib2/pk-results.c
@@ -44,6 +44,7 @@ static void     pk_results_finalize	(GObject     *object);
  **/
 struct _PkResultsPrivate
 {
+	PkRoleEnum		 role;
 	PkExitEnum		 exit_enum;
 	GPtrArray		*package_array;
 	GPtrArray		*details_array;
@@ -61,9 +62,53 @@ struct _PkResultsPrivate
 	GPtrArray		*message_array;
 };
 
+enum {
+	PROP_0,
+	PROP_ROLE,
+	PROP_LAST
+};
+
 G_DEFINE_TYPE (PkResults, pk_results, G_TYPE_OBJECT)
 
 /**
+ * pk_results_get_property:
+ **/
+static void
+pk_results_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+	PkResults *results = PK_RESULTS (object);
+	PkResultsPrivate *priv = results->priv;
+
+	switch (prop_id) {
+	case PROP_ROLE:
+		g_value_set_uint (value, priv->role);
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
+}
+
+/**
+ * pk_results_set_property:
+ **/
+static void
+pk_results_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+	PkResults *results = PK_RESULTS (object);
+	PkResultsPrivate *priv = results->priv;
+
+	switch (prop_id) {
+	case PROP_ROLE:
+		priv->role = g_value_get_uint (value);
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
+}
+
+/**
  * pk_result_item_package_free:
  **/
 static void
@@ -990,8 +1035,20 @@ pk_results_get_message_array (const PkResults *results)
 static void
 pk_results_class_init (PkResultsClass *klass)
 {
+	GParamSpec *pspec;
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 	object_class->finalize = pk_results_finalize;
+	object_class->get_property = pk_results_get_property;
+	object_class->set_property = pk_results_set_property;
+
+	/**
+	 * PkResults:role:
+	 */
+	pspec = g_param_spec_uint ("role", NULL, NULL,
+				   0, PK_ROLE_ENUM_UNKNOWN, PK_ROLE_ENUM_UNKNOWN,
+				   G_PARAM_READWRITE);
+	g_object_class_install_property (object_class, PROP_ROLE, pspec);
+
 	g_type_class_add_private (klass, sizeof (PkResultsPrivate));
 }
 
commit 828b1d961e0e89fa775a0acf70fd71ade235bf02
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 14:29:42 2009 +0100

    glib2: Add some more of the PkTask methods

diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c
index 6708f9e..4f380fe 100644
--- a/lib/packagekit-glib2/pk-task.c
+++ b/lib/packagekit-glib2/pk-task.c
@@ -53,6 +53,9 @@ typedef struct {
 	PkExitEnum			 exit_enum;
 	gboolean			 only_trusted;
 	gchar				**package_ids;
+	gboolean			 allow_deps;
+	gboolean			 autoremove;
+	gchar				**files;
 	GSimpleAsyncResult		*res;
 	PkResults			*results;
 	gboolean			 ret;
@@ -135,6 +138,7 @@ pk_task_generic_state_finish (PkTaskState *state, const GError *error)
 	if (state->results != NULL)
 		g_object_unref (state->results);
 	g_strfreev (state->package_ids);
+	g_strfreev (state->files);
 	g_object_unref (state->res);
 	g_slice_free (PkTaskState, state);
 }
@@ -148,10 +152,34 @@ pk_task_do_async_action (PkTaskState *state)
 	/* do the correct action */
 	if (state->role == PK_ROLE_ENUM_INSTALL_PACKAGES) {
 		/* start install async */
-		egg_debug ("doing install untrusted");
+		egg_debug ("doing install");
 		pk_client_install_packages_async (PK_CLIENT(state->task), state->only_trusted, state->package_ids,
 						  state->cancellable, state->progress_callback, state->progress_user_data,
 						  (GAsyncReadyCallback) pk_task_ready_cb, state);
+	} else if (state->role == PK_ROLE_ENUM_UPDATE_PACKAGES) {
+		/* start update async */
+		egg_debug ("doing update");
+		pk_client_update_packages_async (PK_CLIENT(state->task), state->only_trusted, state->package_ids,
+						 state->cancellable, state->progress_callback, state->progress_user_data,
+						 (GAsyncReadyCallback) pk_task_ready_cb, state);
+	} else if (state->role == PK_ROLE_ENUM_REMOVE_PACKAGES) {
+		/* start remove async */
+		egg_debug ("doing remove");
+		pk_client_remove_packages_async (PK_CLIENT(state->task), state->package_ids, state->allow_deps, state->autoremove,
+						 state->cancellable, state->progress_callback, state->progress_user_data,
+						 (GAsyncReadyCallback) pk_task_ready_cb, state);
+	} else if (state->role == PK_ROLE_ENUM_UPDATE_SYSTEM) {
+		/* start update async */
+		egg_debug ("doing update system");
+		pk_client_update_system_async (PK_CLIENT(state->task), state->only_trusted,
+					       state->cancellable, state->progress_callback, state->progress_user_data,
+					       (GAsyncReadyCallback) pk_task_ready_cb, state);
+	} else if (state->role == PK_ROLE_ENUM_INSTALL_FILES) {
+		/* start install async */
+		egg_debug ("doing install files");
+		pk_client_install_files_async (PK_CLIENT(state->task), state->only_trusted, state->files,
+					       state->cancellable, state->progress_callback, state->progress_user_data,
+					       (GAsyncReadyCallback) pk_task_ready_cb, state);
 	} else {
 		g_assert_not_reached ();
 	}
@@ -566,6 +594,207 @@ pk_task_install_packages_async (PkTask *task, gchar **package_ids, GCancellable
 }
 
 /**
+ * pk_task_update_packages_async:
+ * @task: a valid #PkTask instance
+ * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @callback_ready: the function to run on completion
+ * @user_data: the data to pass to @callback_ready
+ *
+ * Update specific packages to the newest available versions.
+ **/
+void
+pk_task_update_packages_async (PkTask *task, gchar **package_ids, GCancellable *cancellable,
+			       PkProgressCallback progress_callback, gpointer progress_user_data,
+			       GAsyncReadyCallback callback_ready, gpointer user_data)
+{
+	GSimpleAsyncResult *res;
+	PkTaskState *state;
+
+	g_return_if_fail (PK_IS_CLIENT (task));
+	g_return_if_fail (callback_ready != NULL);
+
+	res = g_simple_async_result_new (G_OBJECT (task), callback_ready, user_data, pk_task_update_packages_async);
+
+	/* save state */
+	state = g_slice_new0 (PkTaskState);
+	state->role = PK_ROLE_ENUM_UPDATE_PACKAGES;
+	state->res = g_object_ref (res);
+	if (cancellable != NULL)
+		state->cancellable = g_object_ref (cancellable);
+	state->task = task;
+	state->only_trusted = TRUE;
+	state->package_ids = g_strdupv (package_ids);
+	state->progress_callback = progress_callback;
+	state->progress_user_data = progress_user_data;
+	state->request = pk_task_generate_request_id ();
+	g_object_add_weak_pointer (G_OBJECT (state->task), (gpointer) &state->task);
+
+	egg_warning ("adding state %p", state);
+	g_ptr_array_add (task->priv->array, state);
+
+	/* start trusted install async */
+	pk_task_do_async_action (state);
+
+	g_object_unref (res);
+}
+
+/**
+ * pk_task_remove_packages_async:
+ * @task: a valid #PkTask instance
+ * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @allow_deps: if other dependant packages are allowed to be removed from the computer
+ * @autoremove: if other packages installed at the same time should be tried to remove
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @callback_ready: the function to run on completion
+ * @user_data: the data to pass to @callback_ready
+ *
+ * Remove a package (optionally with dependancies) from the system.
+ * If %allow_deps is set to %FALSE, and other packages would have to be removed,
+ * then the transaction would fail.
+ **/
+void
+pk_task_remove_packages_async (PkTask *task, gchar **package_ids, gboolean allow_deps, gboolean autoremove, GCancellable *cancellable,
+			       PkProgressCallback progress_callback, gpointer progress_user_data,
+			       GAsyncReadyCallback callback_ready, gpointer user_data)
+{
+	GSimpleAsyncResult *res;
+	PkTaskState *state;
+
+	g_return_if_fail (PK_IS_CLIENT (task));
+	g_return_if_fail (callback_ready != NULL);
+
+	res = g_simple_async_result_new (G_OBJECT (task), callback_ready, user_data, pk_task_remove_packages_async);
+
+	/* save state */
+	state = g_slice_new0 (PkTaskState);
+	state->role = PK_ROLE_ENUM_REMOVE_PACKAGES;
+	state->res = g_object_ref (res);
+	if (cancellable != NULL)
+		state->cancellable = g_object_ref (cancellable);
+	state->allow_deps = allow_deps;
+	state->autoremove = autoremove;
+	state->task = task;
+	state->package_ids = g_strdupv (package_ids);
+	state->progress_callback = progress_callback;
+	state->progress_user_data = progress_user_data;
+	state->request = pk_task_generate_request_id ();
+	g_object_add_weak_pointer (G_OBJECT (state->task), (gpointer) &state->task);
+
+	egg_warning ("adding state %p", state);
+	g_ptr_array_add (task->priv->array, state);
+
+	/* start trusted install async */
+	pk_task_do_async_action (state);
+
+	g_object_unref (res);
+}
+
+/**
+ * pk_task_install_files_async:
+ * @task: a valid #PkTask instance
+ * @files: a file such as "/home/hughsie/Desktop/hal-devel-0.10.0.rpm"
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @callback_ready: the function to run on completion
+ * @user_data: the data to pass to @callback_ready
+ *
+ * Install a file locally, and get the deps from the repositories.
+ * This is useful for double clicking on a .rpm or .deb file.
+ **/
+void
+pk_task_install_files_async (PkTask *task, gchar **files, GCancellable *cancellable,
+			     PkProgressCallback progress_callback, gpointer progress_user_data,
+			     GAsyncReadyCallback callback_ready, gpointer user_data)
+{
+	GSimpleAsyncResult *res;
+	PkTaskState *state;
+
+	g_return_if_fail (PK_IS_CLIENT (task));
+	g_return_if_fail (callback_ready != NULL);
+
+	res = g_simple_async_result_new (G_OBJECT (task), callback_ready, user_data, pk_task_install_files_async);
+
+	/* save state */
+	state = g_slice_new0 (PkTaskState);
+	state->role = PK_ROLE_ENUM_INSTALL_FILES;
+	state->res = g_object_ref (res);
+	if (cancellable != NULL)
+		state->cancellable = g_object_ref (cancellable);
+	state->task = task;
+	state->only_trusted = TRUE;
+	state->files = g_strdupv (files);
+	state->progress_callback = progress_callback;
+	state->progress_user_data = progress_user_data;
+	state->request = pk_task_generate_request_id ();
+	g_object_add_weak_pointer (G_OBJECT (state->task), (gpointer) &state->task);
+
+	egg_warning ("adding state %p", state);
+	g_ptr_array_add (task->priv->array, state);
+
+	/* start trusted install async */
+	pk_task_do_async_action (state);
+
+	g_object_unref (res);
+}
+
+/**
+ * pk_task_update_system_async:
+ * @task: a valid #PkTask instance
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @callback_ready: the function to run on completion
+ * @user_data: the data to pass to @callback_ready
+ *
+ * Update all the packages on the system with the highest versions found in all
+ * repositories.
+ * NOTE: you can't choose what repositories to update from, but you can do:
+ * - pk_task_repo_disable()
+ * - pk_task_update_system()
+ * - pk_task_repo_enable()
+ **/
+void
+pk_task_update_system_async (PkTask *task, GCancellable *cancellable,
+			     PkProgressCallback progress_callback, gpointer progress_user_data,
+			     GAsyncReadyCallback callback_ready, gpointer user_data)
+{
+	GSimpleAsyncResult *res;
+	PkTaskState *state;
+
+	g_return_if_fail (PK_IS_CLIENT (task));
+	g_return_if_fail (callback_ready != NULL);
+
+	res = g_simple_async_result_new (G_OBJECT (task), callback_ready, user_data, pk_task_update_system_async);
+
+	/* save state */
+	state = g_slice_new0 (PkTaskState);
+	state->role = PK_ROLE_ENUM_UPDATE_SYSTEM;
+	state->res = g_object_ref (res);
+	if (cancellable != NULL)
+		state->cancellable = g_object_ref (cancellable);
+	state->task = task;
+	state->only_trusted = TRUE;
+	state->progress_callback = progress_callback;
+	state->progress_user_data = progress_user_data;
+	state->request = pk_task_generate_request_id ();
+	g_object_add_weak_pointer (G_OBJECT (state->task), (gpointer) &state->task);
+
+	egg_warning ("adding state %p", state);
+	g_ptr_array_add (task->priv->array, state);
+
+	/* start trusted install async */
+	pk_task_do_async_action (state);
+
+	g_object_unref (res);
+}
+
+/**
  * pk_task_generic_finish:
  * @task: a valid #PkTask instance
  * @res: the #GAsyncResult
diff --git a/lib/packagekit-glib2/pk-task.h b/lib/packagekit-glib2/pk-task.h
index 087c218..a8c5550 100644
--- a/lib/packagekit-glib2/pk-task.h
+++ b/lib/packagekit-glib2/pk-task.h
@@ -98,11 +98,36 @@ void		 pk_task_install_packages_async		(PkTask			*task,
 							 gpointer		 progress_user_data,
 							 GAsyncReadyCallback	 callback,
 							 gpointer		 user_data);
-/* TODO:
- *    pk_task_remove_packages_async
- *    pk_task_update_packages_async
- *    pk_task_update_system_async
- */
+void		 pk_task_update_packages_async		(PkTask			*task,
+							 gchar			**package_ids,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GAsyncReadyCallback	 callback_ready,
+							 gpointer		 user_data);
+void		 pk_task_remove_packages_async		(PkTask			*task,
+							 gchar			**package_ids,
+							 gboolean		 allow_deps,
+							 gboolean		 autoremove,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GAsyncReadyCallback	 callback_ready,
+							 gpointer		 user_data);
+void		 pk_task_install_files_async		(PkTask			*task,
+							 gchar			**files,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GAsyncReadyCallback	 callback_ready,
+							 gpointer		 user_data);
+void		 pk_task_update_system_async		(PkTask			*task,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GAsyncReadyCallback	 callback_ready,
+							 gpointer		 user_data);
+
 gboolean	 pk_task_user_accepted			(PkTask			*task,
 							 guint			 request);
 gboolean	 pk_task_user_declined			(PkTask			*task,
commit 67b1f2320f18f9f7123ac4f2775ba2d90a75f559
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 14:06:17 2009 +0100

    trivial: fix make distcheck

diff --git a/lib/packagekit-glib2/pk-task.h b/lib/packagekit-glib2/pk-task.h
index 57a2efd..087c218 100644
--- a/lib/packagekit-glib2/pk-task.h
+++ b/lib/packagekit-glib2/pk-task.h
@@ -101,6 +101,7 @@ void		 pk_task_install_packages_async		(PkTask			*task,
 /* TODO:
  *    pk_task_remove_packages_async
  *    pk_task_update_packages_async
+ *    pk_task_update_system_async
  */
 gboolean	 pk_task_user_accepted			(PkTask			*task,
 							 guint			 request);
diff --git a/po/POTFILES.in b/po/POTFILES.in
index d9a2ebb..94a5b47 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -2,8 +2,11 @@
 # List of source files containing translatable strings.
 # Please keep this file sorted alphabetically.
 client/pk-console.c
+client/pk-console-test.c
 client/pk-generate-pack.c
 client/pk-monitor.c
+client/pk-task-text.c
+client/pk-text.c
 client/pk-tools-common.c
 contrib/browser-plugin/pk-plugin-install.c
 contrib/command-not-found/pk-command-not-found.c
@@ -15,5 +18,4 @@ data/packagekit-servicepack.xml.in
 policy/org.freedesktop.packagekit.policy.in
 src/pk-main.c
 src/pk-polkit-action-lookup.c
-client/pk-text.c
 
commit b184f9b378a3016a625789175f6aa8cb67f8f660
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 14:06:05 2009 +0100

    glib2: use PkTaskText in pkcon-test

diff --git a/client/pk-console-test.c b/client/pk-console-test.c
index f1e25d8..9f36e72 100644
--- a/client/pk-console-test.c
+++ b/client/pk-console-test.c
@@ -36,6 +36,7 @@
 //#include "egg-string.h"
 
 #include "pk-text.h"
+#include "pk-task-text.h"
 #include "pk-progress-bar.h"
 
 #define PK_EXIT_CODE_SYNTAX_INVALID	3
@@ -46,7 +47,7 @@ static PkBitfield roles;
 static gboolean is_console = FALSE;
 static gboolean nowait = FALSE;
 static PkControlSync *control = NULL;
-static PkTask *task = NULL;
+static PkTaskText *task = NULL;
 PkProgressBar *progressbar = NULL;
 
 /**
@@ -481,103 +482,6 @@ pk_console_files_cb (PkResultItemFiles *obj, gpointer data)
 	}
 }
 
-/**
- * pk_console_repo_signature_required_cb:
- **/
-static void
-pk_console_repo_signature_required_cb (const PkResultItemRepoSignatureRequired *obj, gpointer data)
-{
-//	gboolean import;
-//	gboolean ret;
-//	GError *error = NULL;
-	gchar *package = NULL;
-
-	/* create printable */
-	package = pk_package_id_to_printable (obj->package_id);
-
-	/* TRANSLATORS: This a request for a GPG key signature from the backend, which the client will prompt for later */
-	g_print ("%s\n", _("Repository signature required"));
-	g_print ("Package:     %s\n", package);
-	g_print ("Name:        %s\n", obj->repository_name);
-	g_print ("URL:         %s\n", obj->key_url);
-	g_print ("User:        %s\n", obj->key_userid);
-	g_print ("ID:          %s\n", obj->key_id);
-	g_print ("Fingerprint: %s\n", obj->key_fingerprint);
-	g_print ("Timestamp:   %s\n", obj->key_timestamp);
-
-#if 0
-	/* TRANSLATORS: This a prompt asking the user to import the security key */
-	import = pk_console_get_prompt (_("Do you accept this signature?"), FALSE);
-	if (!import) {
-		need_requeue = FALSE;
-		/* TRANSLATORS: This is where the user declined the security key */
-		g_print ("%s\n", _("The signature was not accepted."));
-		return;
-	}
-
-	/* install signature */
-	egg_debug ("install signature %s", key_id);
-	ret = pk_client_install_signature (client_secondary, PK_SIGTYPE_ENUM_GPG,
-					   key_id, package_id, &error);
-	/* we succeeded, so wait for the requeue */
-	if (!ret) {
-		egg_warning ("failed to install signature: %s", error->message);
-		g_error_free (error);
-		return;
-	}
-#endif
-
-	g_free (package);
-}
-
-/**
- * pk_console_eula_required_cb:
- **/
-static void
-pk_console_eula_required_cb (const PkResultItemEulaRequired *obj, gpointer data)
-{
-//	gboolean import;
-//	gboolean ret;
-//	GError *error = NULL;
-	gchar *package = NULL;
-
-	/* create printable */
-	package = pk_package_id_to_printable (obj->package_id);
-
-	/* TRANSLATORS: This a request for a EULA */
-	g_print ("%s\n", _("End user license agreement required"));
-	g_print ("Eula:        %s\n", obj->eula_id);
-	g_print ("Package:     %s\n", package);
-	g_print ("Vendor:      %s\n", obj->vendor_name);
-	g_print ("Agreement:   %s\n", obj->license_agreement);
-
-#if 0
-	/* TRANSLATORS: This a prompt asking the user to agree to the license */
-	import = pk_console_get_prompt (_("Do you agree to this license?"), FALSE);
-	if (!import) {
-		need_requeue = FALSE;
-		/* TRANSLATORS: This is where the user declined the license */
-		g_print ("%s\n", _("The license was refused."));
-		return;
-	}
-
-	/* accept eula */
-	egg_debug ("accept eula %s", eula_id);
-	ret = pk_client_accept_eula (client_secondary, eula_id, &error);
-	/* we succeeded, so wait for the requeue */
-	if (!ret) {
-		egg_warning ("failed to accept eula: %s", error->message);
-		g_error_free (error);
-		return;
-	}
-
-	/* we accepted eula */
-	need_requeue = TRUE;
-#endif
-
-	g_free (package);
-}
-
 #if 0
 /**
  * pk_console_finished_cb:
@@ -645,12 +549,6 @@ pk_console_finished_cb (PkExitEnum exit_enum, guint runtime, gpointer data)
 		return;
 	}
 
-	/* have we failed to install, and the eula key is now installed */
-	if (exit_enum == PK_EXIT_ENUM_EULA_REQUIRED && need_requeue) {
-		egg_debug ("eula now agreed");
-		return;
-	}
-
 	/* close the loop */
 	g_main_loop_quit (loop);
 }
@@ -1647,16 +1545,6 @@ pk_console_finished_cb (GObject *object, GAsyncResult *res, gpointer data)
 	array = pk_results_get_files_array (results);
 	g_ptr_array_foreach (array, (GFunc) pk_console_files_cb, NULL);
 	g_ptr_array_unref (array);
-
-	/* repo_signature_required */
-	array = pk_results_get_repo_signature_required_array (results);
-	g_ptr_array_foreach (array, (GFunc) pk_console_repo_signature_required_cb, NULL);
-	g_ptr_array_unref (array);
-
-	/* eula_required */
-	array = pk_results_get_eula_required_array (results);
-	g_ptr_array_foreach (array, (GFunc) pk_console_eula_required_cb, NULL);
-	g_ptr_array_unref (array);
 out:
 	g_main_loop_quit (loop);
 }
@@ -1679,7 +1567,7 @@ main (int argc, char *argv[])
 	const gchar *details = NULL;
 	const gchar *parameter = NULL;
 //	PkBitfield groups;
-//	gchar *text;
+	gchar *text;
 //	gboolean maybe_sync = TRUE;
 	PkBitfield filters = 0;
 	gint retval = EXIT_SUCCESS;
@@ -1718,7 +1606,11 @@ main (int argc, char *argv[])
 
 	/* we need the roles early, as we only show the user only what they can do */
 	control = pk_control_sync_new ();
-	roles = pk_control_sync_get_roles (control, NULL);
+	roles = pk_control_sync_get_roles (control, &error);
+	if (roles == 0) {
+		g_print ("Failed to startup: %s\n", error->message);
+		goto out_last;
+	}
 	summary = pk_console_get_summary ();
 	progressbar = pk_progress_bar_new ();
 	pk_progress_bar_set_size (progressbar, 25);
@@ -1753,7 +1645,7 @@ main (int argc, char *argv[])
 			  G_CALLBACK (pk_connection_changed_cb), loop);
 
 	/* create transactions */
-	task = pk_task_new ();
+	task = pk_task_text_new ();
 
 	/* check filter */
 	if (filter != NULL) {
@@ -1790,7 +1682,6 @@ main (int argc, char *argv[])
 				retval = PK_EXIT_CODE_SYNTAX_INVALID;
 				goto out;
 			}
-//			pk_progress_bar_start (progressbar, _("Searching"));
 			/* fire off an async request */
 			pk_client_search_name_async (PK_CLIENT(task), filters, details, NULL,
 						     (PkProgressCallback) pk_console_progress_cb, NULL,
@@ -2052,33 +1943,6 @@ main (int argc, char *argv[])
 			goto out;
 		}
 		ret = pk_console_get_files (PK_CLIENT(task), value, &error);
-
-	} else if (strcmp (mode, "list-create") == 0) {
-		if (value == NULL) {
-			/* TRANSLATORS: The user didn't specify a filename to create as a list */
-			error = g_error_new (1, 0, "%s", _("A list file name to create is required"));
-			retval = PK_EXIT_CODE_SYNTAX_INVALID;
-			goto out;
-		}
-		ret = pk_console_list_create (PK_CLIENT(task), value, &error);
-
-	} else if (strcmp (mode, "list-diff") == 0) {
-		if (value == NULL) {
-			/* TRANSLATORS: The user didn't specify a filename to open as a list */
-			error = g_error_new (1, 0, "%s", _("A list file to open is required"));
-			retval = PK_EXIT_CODE_SYNTAX_INVALID;
-			goto out;
-		}
-		ret = pk_console_list_diff (PK_CLIENT(task), value, &error);
-
-	} else if (strcmp (mode, "list-install") == 0) {
-		if (value == NULL) {
-			/* TRANSLATORS: The user didn't specify a filename to open as a list */
-			error = g_error_new (1, 0, "%s", _("A list file to open is required"));
-			retval = PK_EXIT_CODE_SYNTAX_INVALID;
-			goto out;
-		}
-		ret = pk_console_list_install (PK_CLIENT(task), value, &error);
 #endif
 	} else if (strcmp (mode, "get-updates") == 0) {
 		pk_client_get_updates_async (PK_CLIENT(task), filters, NULL,
@@ -2094,23 +1958,20 @@ main (int argc, char *argv[])
 		pk_client_get_packages_async (PK_CLIENT(task), filters, NULL,
 					      (PkProgressCallback) pk_console_progress_cb, NULL,
 					      (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-#if 0
-	} else if (strcmp (mode, "get-actions") == 0) {
+
+	} else if (strcmp (mode, "get-roles") == 0) {
 		text = pk_role_bitfield_to_text (roles);
 		g_strdelimit (text, ";", '\n');
 		g_print ("%s\n", text);
 		g_free (text);
-		/* these can never fail */
-		ret = TRUE;
-
+		nowait = TRUE;
+#if 0
 	} else if (strcmp (mode, "get-filters") == 0) {
 		filters = pk_control_get_filters (control, NULL);
 		text = pk_filter_bitfield_to_text (filters);
 		g_strdelimit (text, ";", '\n');
 		g_print ("%s\n", text);
 		g_free (text);
-		/* these can never fail */
-		ret = TRUE;
 
 	} else if (strcmp (mode, "get-groups") == 0) {
 		groups = pk_control_get_groups (control, NULL);
@@ -2118,8 +1979,6 @@ main (int argc, char *argv[])
 		g_strdelimit (text, ";", '\n');
 		g_print ("%s\n", text);
 		g_free (text);
-		/* these can never fail */
-		ret = TRUE;
 #endif
 	} else if (strcmp (mode, "get-transactions") == 0) {
 		pk_client_get_old_transactions_async (PK_CLIENT(task), 10, NULL,
@@ -2127,8 +1986,6 @@ main (int argc, char *argv[])
 						      (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 	} else if (strcmp (mode, "refresh") == 0) {
-		/* special case - this takes a long time, and doesn't do packages */
-//		pk_console_start_bar ("refresh-cache");
 		pk_client_refresh_cache_async (PK_CLIENT(task), FALSE, NULL,
 					       (PkProgressCallback) pk_console_progress_cb, NULL,
 					       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
commit a322425de153f48fc47a19903dfed6a01e08d04f
Merge: 4c53217... 5af2e88...
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 13:47:41 2009 +0100

    Merge branch 'master' of git+ssh://git.packagekit.org/srv/git/PackageKit

commit 4c53217ce0830151c24e3675ae768a7135b1a3a0
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 13:42:18 2009 +0100

    yum: Don't check for unfinished transactions when the cache is lazy loaded

diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 05a9bbb..9cfe4d2 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -1412,7 +1412,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
         Implement the update-system functionality
         '''
         try:
-            self._check_init(lazy_cache=True)
+            self._check_init()
         except PkError, e:
             self.error(e.code, e.details, exit=False)
             return
@@ -2650,7 +2650,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
         # should we suggest yum-complete-transaction?
         unfinished = yum.misc.find_unfinished_transactions(yumlibpath=self.yumbase.conf.persistdir)
-        if unfinished:
+        if unfinished and not lazy_cache:
             raise PkError(ERROR_FAILED_INITIALIZATION, 'There are unfinished transactions remaining. Please run yum-complete-transaction as root.')
 
         # default to 100% unless method overrides
commit 5f9c952bf326d2360ac8858f2742d176d7e605e3
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 13:40:29 2009 +0100

    yum: Check for initialisation failures in more cases

diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 38414c3..05a9bbb 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -352,7 +352,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def set_locale(self, code):
         '''
-        Implement the {backend}-set-locale functionality
+        Implement the set-locale functionality
         Needed to be implemented in a sub class
         '''
         self.lang = code
@@ -404,9 +404,13 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def search_name(self, filters, key):
         '''
-        Implement the {backend}-search-name functionality
+        Implement the search-name functionality
         '''
-        self._check_init(lazy_cache=True)
+        try:
+            self._check_init(lazy_cache=True)
+        except PkError, e:
+            self.error(e.code, e.details, exit=False)
+            return
         self.yumbase.conf.cache = 0 # Allow new files
         self.allow_cancel(True)
         self.percentage(None)
@@ -423,9 +427,13 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
             self.error(e.code, e.details, exit=False)
     def search_details(self, filters, key):
         '''
-        Implement the {backend}-search-details functionality
+        Implement the search-details functionality
         '''
-        self._check_init(lazy_cache=True)
+        try:
+            self._check_init(lazy_cache=True)
+        except PkError, e:
+            self.error(e.code, e.details, exit=False)
+            return
         try:
             self.yumbase.doConfigSetup(errorlevel=0, debuglevel=0)# Setup Yum Config
         except Exception, e:
@@ -543,9 +551,13 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def search_group(self, filters, group_key):
         '''
-        Implement the {backend}-search-group functionality
+        Implement the search-group functionality
         '''
-        self._check_init(lazy_cache=True)
+        try:
+            self._check_init(lazy_cache=True)
+        except PkError, e:
+            self.error(e.code, e.details, exit=False)
+            return
         self.allow_cancel(True)
         try:
             self.yumbase.doConfigSetup(errorlevel=0, debuglevel=0)# Setup Yum Config
@@ -655,9 +667,13 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def search_file(self, filters, key):
         '''
-        Implement the {backend}-search-file functionality
+        Implement the search-file functionality
         '''
-        self._check_init(lazy_cache=True)
+        try:
+            self._check_init(lazy_cache=True)
+        except PkError, e:
+            self.error(e.code, e.details, exit=False)
+            return
         self.yumbase.conf.cache = 0 # Allow new files
         self.allow_cancel(True)
         self.percentage(None)
@@ -720,9 +736,13 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def what_provides(self, filters, provides_type, search):
         '''
-        Implement the {backend}-what-provides functionality
+        Implement the what-provides functionality
         '''
-        self._check_init(lazy_cache=True)
+        try:
+            self._check_init(lazy_cache=True)
+        except PkError, e:
+            self.error(e.code, e.details, exit=False)
+            return
         self.yumbase.conf.cache = 0 # Allow new files
         self.allow_cancel(True)
         self.percentage(None)
@@ -764,7 +784,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def get_categories(self):
         '''
-        Implement the {backend}-get-categories functionality
+        Implement the get-categories functionality
         '''
         self.status(STATUS_QUERY)
         self.allow_cancel(True)
@@ -796,7 +816,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def _get_groups(self, cat_id):
         '''
-        Implement the {backend}-get-collections functionality
+        Implement the get-collections functionality
         '''
         self.status(STATUS_QUERY)
         self.allow_cancel(True)
@@ -830,7 +850,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def download_packages(self, directory, package_ids):
         '''
-        Implement the {backend}-download-packages functionality
+        Implement the download-packages functionality
         '''
         try:
             self._check_init()
@@ -995,7 +1015,11 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
         '''
         Print a list of requires for a given package
         '''
-        self._check_init(lazy_cache=True)
+        try:
+            self._check_init(lazy_cache=True)
+        except PkError, e:
+            self.error(e.code, e.details, exit=False)
+            return
         self.yumbase.conf.cache = 0 # Allow new files
         self.allow_cancel(True)
         self.percentage(None)
@@ -1307,7 +1331,11 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
         '''
         Print a list of depends for a given package
         '''
-        self._check_init(lazy_cache=True)
+        try:
+            self._check_init(lazy_cache=True)
+        except PkError, e:
+            self.error(e.code, e.details, exit=False)
+            return
         self.yumbase.conf.cache = 0 # Allow new files
         self.allow_cancel(True)
         self.percentage(None)
@@ -1381,9 +1409,13 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def update_system(self, only_trusted):
         '''
-        Implement the {backend}-update-system functionality
+        Implement the update-system functionality
         '''
-        self._check_init(lazy_cache=True)
+        try:
+            self._check_init(lazy_cache=True)
+        except PkError, e:
+            self.error(e.code, e.details, exit=False)
+            return
         self.yumbase.conf.cache = 0 # Allow new files
         self.allow_cancel(True)
         self.percentage(0)
@@ -1423,7 +1455,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def refresh_cache(self, force):
         '''
-        Implement the {backend}-refresh_cache functionality
+        Implement the refresh_cache functionality
         '''
         # TODO: use force ?
         self.allow_cancel(True)
@@ -1483,9 +1515,13 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def resolve(self, filters, packages):
         '''
-        Implement the {backend}-resolve functionality
+        Implement the resolve functionality
         '''
-        self._check_init(lazy_cache=True)
+        try:
+            self._check_init(lazy_cache=True)
+        except PkError, e:
+            self.error(e.code, e.details, exit=False)
+            return
         self.allow_cancel(True)
         self.percentage(None)
         try:
@@ -1531,7 +1567,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def install_packages(self, only_trusted, package_ids):
         '''
-        Implement the {backend}-install-packages functionality
+        Implement the install-packages functionality
         This will only work with yum 3.2.4 or higher
         '''
         try:
@@ -1608,7 +1644,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def install_files(self, only_trusted, inst_files):
         '''
-        Implement the {backend}-install-files functionality
+        Implement the install-files functionality
         Install the package containing the inst_file file
         Needed to be implemented in a sub class
         '''
@@ -1835,7 +1871,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def update_packages(self, only_trusted, package_ids):
         '''
-        Implement the {backend}-install functionality
+        Implement the install functionality
         This will only work with yum 3.2.4 or higher
         '''
         try:
@@ -1982,7 +2018,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def remove_packages(self, allowdep, autoremove, package_ids):
         '''
-        Implement the {backend}-remove functionality
+        Implement the remove functionality
         Needed to be implemented in a sub class
         '''
         # TODO: use autoremove
@@ -2040,7 +2076,11 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
         '''
         Print a detailed details for a given package
         '''
-        self._check_init(lazy_cache=True)
+        try:
+            self._check_init(lazy_cache=True)
+        except PkError, e:
+            self.error(e.code, e.details, exit=False)
+            return
         self.yumbase.conf.cache = 0 # Allow new files
         self.allow_cancel(True)
         self.percentage(None)
@@ -2124,7 +2164,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def get_distro_upgrades(self):
         '''
-        Implement the {backend}-get-distro-upgrades functionality
+        Implement the get-distro-upgrades functionality
         '''
         try:
             self._check_init()
@@ -2188,7 +2228,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def get_updates(self, filters):
         '''
-        Implement the {backend}-get-updates functionality
+        Implement the get-updates functionality
         @param filters: package types to show
         '''
         try:
@@ -2248,7 +2288,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def repo_enable(self, repoid, enable):
         '''
-        Implement the {backend}-repo-enable functionality
+        Implement the repo-enable functionality
         '''
         try:
             self._check_init()
@@ -2282,7 +2322,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def get_repo_list(self, filters):
         '''
-        Implement the {backend}-get-repo-list functionality
+        Implement the get-repo-list functionality
         '''
         self._check_init(repo_setup=False)
         self.yumbase.conf.cache = 0 # Allow new files
@@ -2385,7 +2425,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def get_update_detail(self, package_ids):
         '''
-        Implement the {backend}-get-update_detail functionality
+        Implement the get-update_detail functionality
         '''
         try:
             self._check_init()
@@ -2456,7 +2496,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
     def repo_set_data(self, repoid, parameter, value):
         '''
-        Implement the {backend}-repo-set-data functionality
+        Implement the repo-set-data functionality
         '''
         try:
             self._check_init()
@@ -2534,7 +2574,11 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
         self.percentage(100)
 
     def install_signature(self, sigtype, key_id, package):
-        self._check_init(repo_setup=False)
+        try:
+            self._check_init(repo_setup=False)
+        except PkError, e:
+            self.error(e.code, e.details, exit=False)
+            return
         self.yumbase.conf.cache = 0 # Allow new files
         self.allow_cancel(True)
         self.percentage(None)
commit 5af2e889e045194a47b3fbbfe5f4f26b17fac485
Author: beckerde <beckerde at fedoraproject.org>
Date:   Thu Sep 3 12:26:48 2009 +0000

    Sending translation for Spanish

diff --git a/po/es.po b/po/es.po
index 3bf9a1b..fac8600 100644
--- a/po/es.po
+++ b/po/es.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: packagekit\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-08-26 14:37+0000\n"
-"PO-Revision-Date: 2009-08-26 12:47-0300\n"
+"POT-Creation-Date: 2009-09-03 08:34+0000\n"
+"PO-Revision-Date: 2009-09-03 09:35-0300\n"
 "Last-Translator: Domingo Becker <domingobecker at gmail.com>\n"
 "Language-Team: Fedora Spanish <fedora-trans-es at redhat.com>\n"
 "MIME-Version: 1.0\n"
@@ -20,152 +20,149 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #. TRANSLATORS: this is an atomic transaction
-#: ../client/pk-console.c:235
+#: ../client/pk-console.c:238
 msgid "Transaction"
 msgstr "Transacción"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:237
+#: ../client/pk-console.c:240
 msgid "System time"
 msgstr "Hora del sistema"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:239
+#: ../client/pk-console.c:242
 msgid "Succeeded"
 msgstr "Existosa"
 
-#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:239
-#: ../client/pk-console.c:468
+#: ../client/pk-console.c:242
 msgid "True"
 msgstr "Verdadero"
 
-#: ../client/pk-console.c:239
-#: ../client/pk-console.c:468
+#: ../client/pk-console.c:242
 msgid "False"
 msgstr "Falso"
 
 #. TRANSLATORS: this is the transactions role, e.g. "update-system"
 #. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:241
+#: ../client/pk-console.c:244
 #: ../src/pk-polkit-action-lookup.c:327
 msgid "Role"
 msgstr "Rol"
 
 #. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:246
+#: ../client/pk-console.c:249
 msgid "Duration"
 msgstr "Duración"
 
-#: ../client/pk-console.c:246
+#: ../client/pk-console.c:249
 msgid "(seconds)"
 msgstr "(segundos)"
 
 #. TRANSLATORS: this is The command line used to do the action
 #. TRANSLATORS: the command line of the thing that wants the authentication
-#: ../client/pk-console.c:250
+#: ../client/pk-console.c:253
 #: ../src/pk-polkit-action-lookup.c:341
 msgid "Command line"
 msgstr "Línea de comandos"
 
 #. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:252
+#: ../client/pk-console.c:255
 msgid "User ID"
 msgstr "ID del usuario"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:259
+#: ../client/pk-console.c:262
 msgid "Username"
 msgstr "Nombre de usuario"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:263
+#: ../client/pk-console.c:266
 msgid "Real name"
 msgstr "Nombre real"
 
-#: ../client/pk-console.c:271
+#: ../client/pk-console.c:274
 msgid "Affected packages:"
 msgstr "Paquete afectados:"
 
-#: ../client/pk-console.c:273
+#: ../client/pk-console.c:276
 msgid "Affected packages: None"
 msgstr "Paquetes afectados: Ninguno"
 
 #. TRANSLATORS: When processing, we might have to remove other dependencies
-#: ../client/pk-console.c:334
+#: ../client/pk-console.c:337
 msgid "The following packages have to be removed:"
 msgstr "Se eliminarán los siguientes paquetes:"
 
 #. TRANSLATORS: When processing, we might have to install other dependencies
-#: ../client/pk-console.c:337
+#: ../client/pk-console.c:340
 msgid "The following packages have to be installed:"
 msgstr "Los siguientes paquetes se deben instalar:"
 
 #. TRANSLATORS: When processing, we might have to update other dependencies
-#: ../client/pk-console.c:340
+#: ../client/pk-console.c:343
 msgid "The following packages have to be updated:"
 msgstr "Los siguientes paquetes se deben actualizar:"
 
 #. TRANSLATORS: When processing, we might have to reinstall other dependencies
-#: ../client/pk-console.c:343
+#: ../client/pk-console.c:346
 msgid "The following packages have to be reinstalled:"
 msgstr "Los siguientes paquetes se deben reinstalar:"
 
 #. TRANSLATORS: When processing, we might have to downgrade other dependencies
-#: ../client/pk-console.c:346
+#: ../client/pk-console.c:349
 msgid "The following packages have to be downgraded:"
 msgstr "Los siguientes paquetes se deben desactualizar:"
 
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:360
+#: ../client/pk-console.c:363
 msgid "Distribution"
 msgstr "Distribución"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:362
+#: ../client/pk-console.c:365
 msgid "Type"
 msgstr "Tipo"
 
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:364
-#: ../client/pk-console.c:387
+#: ../client/pk-console.c:367
+#: ../client/pk-console.c:390
 msgid "Summary"
 msgstr "Resúmen"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:376
+#: ../client/pk-console.c:379
 msgid "Category"
 msgstr "Categoría"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:378
+#: ../client/pk-console.c:381
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:381
+#: ../client/pk-console.c:384
 msgid "Parent"
 msgstr "Padre"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:384
+#: ../client/pk-console.c:387
 msgid "Name"
 msgstr "Nombre"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:390
+#: ../client/pk-console.c:393
 msgid "Icon"
 msgstr "Icono"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:405
+#: ../client/pk-console.c:408
 msgid "Details about the update:"
 msgstr "Detalles acerca de la actualización:"
 
 #. TRANSLATORS: details about the update, package name and version
 #. TRANSLATORS: title, the names of the packages that the method is processing
-#: ../client/pk-console.c:407
+#: ../client/pk-console.c:410
 #: ../src/pk-polkit-action-lookup.c:352
 msgid "Package"
 msgid_plural "Packages"
@@ -173,691 +170,701 @@ msgstr[0] "Paquete"
 msgstr[1] "Paquetes"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:410
+#: ../client/pk-console.c:413
 msgid "Updates"
 msgstr "Actualizaciones"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:414
+#: ../client/pk-console.c:417
 msgid "Obsoletes"
 msgstr "Sustituye"
 
 #. TRANSLATORS: details about the update, the vendor URLs
-#: ../client/pk-console.c:418
+#: ../client/pk-console.c:421
 msgid "Vendor"
 msgstr "Fabricante"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:422
+#: ../client/pk-console.c:425
 msgid "Bugzilla"
 msgstr "Bugzilla"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:426
+#: ../client/pk-console.c:429
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:430
+#: ../client/pk-console.c:433
 msgid "Restart"
 msgstr "Reiniciar"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:434
+#: ../client/pk-console.c:437
 msgid "Update text"
 msgstr "Texto de actualización"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:438
+#: ../client/pk-console.c:441
 msgid "Changes"
 msgstr "Cambios"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:442
+#: ../client/pk-console.c:445
 msgid "State"
 msgstr "Estado"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:447
+#: ../client/pk-console.c:450
 msgid "Issued"
 msgstr "Emitido"
 
 #. TRANSLATORS: details about the update, date the update was updated
-#: ../client/pk-console.c:452
+#: ../client/pk-console.c:455
 msgid "Updated"
 msgstr "Actualizado"
 
-#: ../client/pk-console.c:539
-#: ../client/pk-console.c:541
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:475
+msgid "Enabled"
+msgstr "Habilitado"
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:478
+msgid "Disabled"
+msgstr "Deshabilitado"
+
+#: ../client/pk-console.c:555
+#: ../client/pk-console.c:557
 msgid "Percentage"
 msgstr "Porcentaje"
 
-#: ../client/pk-console.c:541
+#: ../client/pk-console.c:557
 msgid "Unknown"
 msgstr "Desconocido"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:583
+#: ../client/pk-console.c:599
 msgid "System restart required by:"
 msgstr "Se necesita reiniciar el sistema debido a:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:586
+#: ../client/pk-console.c:602
 msgid "Session restart required:"
 msgstr "Se necesita reiniciar la sesión:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:589
+#: ../client/pk-console.c:605
 msgid "System restart (security) required by:"
 msgstr "Reinicio del sistema (seguridad) solicitado por:"
 
 #. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:592
+#: ../client/pk-console.c:608
 msgid "Session restart (security) required:"
 msgstr "Reinicio de la sesión (seguridad) solicitado por:"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:595
+#: ../client/pk-console.c:611
 msgid "Application restart required by:"
 msgstr "Se necesita reiniciar una aplicación debido a:"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:650
+#: ../client/pk-console.c:666
 msgid "Please restart the computer to complete the update."
 msgstr "Reinicie el equipo para completar la actualización."
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:653
+#: ../client/pk-console.c:669
 msgid "Please logout and login to complete the update."
 msgstr "Cierre la sesión y vuelva a entrar para completar la actualización."
 
 #. TRANSLATORS: a package needs to restart the application
-#: ../client/pk-console.c:656
+#: ../client/pk-console.c:672
 msgid "Please restart the application as it is being used."
 msgstr "Reinicie la aplicación que está usando."
 
 #. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:659
+#: ../client/pk-console.c:675
 msgid "Please restart the computer to complete the update as important security updates have been installed."
 msgstr "Por favor, reinicie el equipo para completar la actualización, ya que se han instalado actualizaciones de seguridad importantes."
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:662
+#: ../client/pk-console.c:678
 msgid "Please logout and login to complete the update as important security updates have been installed."
 msgstr "Por favor, cierre la sesión y vuelva a registrarse para completar la actualización, ya que se han instalado actualizaciones de seguridad importantes."
 
 #. TRANSLATORS: The package is already installed on the system
-#: ../client/pk-console.c:794
+#: ../client/pk-console.c:810
 #, c-format
 msgid "The package %s is already installed"
 msgstr "El paquete %s ya está instalado"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:802
+#: ../client/pk-console.c:818
 #, c-format
 msgid "The package %s could not be installed: %s"
 msgstr "No se pudo instalar el paquete %s: %s"
 
 #. TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows
-#: ../client/pk-console.c:828
-#: ../client/pk-console.c:876
-#: ../client/pk-console.c:900
-#: ../client/pk-console.c:948
-#: ../client/pk-console.c:1044
-#: ../client/pk-console.c:1157
-#: ../client/pk-console.c:1218
-#: ../client/pk-tools-common.c:62
-#: ../client/pk-tools-common.c:81
-#: ../client/pk-tools-common.c:89
+#: ../client/pk-console.c:844
+#: ../client/pk-console.c:892
+#: ../client/pk-console.c:916
+#: ../client/pk-console.c:964
+#: ../client/pk-console.c:1060
+#: ../client/pk-console.c:1173
+#: ../client/pk-console.c:1234
+#: ../client/pk-tools-common.c:63
+#: ../client/pk-tools-common.c:82
+#: ../client/pk-tools-common.c:90
 #, c-format
 msgid "Internal error: %s"
 msgstr "Error interno: %s"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:860
-#: ../client/pk-console.c:932
-#: ../client/pk-console.c:1250
+#: ../client/pk-console.c:876
+#: ../client/pk-console.c:948
+#: ../client/pk-console.c:1266
 msgid "Proceed with changes?"
 msgstr "¿Proceder con los cambios?"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:865
-#: ../client/pk-console.c:937
+#: ../client/pk-console.c:881
+#: ../client/pk-console.c:953
 msgid "The package install was canceled!"
 msgstr "¡Se canceló la instalación del paquete!"
 
 #. TRANSLATORS: There was an error installing the packages. The detailed error follows
-#: ../client/pk-console.c:884
-#: ../client/pk-console.c:1618
+#: ../client/pk-console.c:900
+#: ../client/pk-console.c:1634
 #, c-format
 msgid "This tool could not install the packages: %s"
 msgstr "Esta herramienta no pudo instalar los paquetes: %s"
 
 #. TRANSLATORS: There was an error installing the files. The detailed error follows
-#: ../client/pk-console.c:956
+#: ../client/pk-console.c:972
 #, c-format
 msgid "This tool could not install the files: %s"
 msgstr "Esta herramienta no pudo instalar los archivos: %s"
 
 #. TRANSLATORS: The package name was not found in the installed list. The detailed error follows
-#: ../client/pk-console.c:1012
+#: ../client/pk-console.c:1028
 #, c-format
 msgid "This tool could not remove %s: %s"
 msgstr "Esta herramienta no pudo eliminar %s: %s"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:1035
-#: ../client/pk-console.c:1073
-#: ../client/pk-console.c:1102
+#: ../client/pk-console.c:1051
+#: ../client/pk-console.c:1089
+#: ../client/pk-console.c:1118
 #, c-format
 msgid "This tool could not remove the packages: %s"
 msgstr "Esta herramienta no pudo eliminar los paquetes: %s"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:1088
+#: ../client/pk-console.c:1104
 msgid "Proceed with additional packages?"
 msgstr "¿Proceder con los paquetes adicionales?"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:1093
+#: ../client/pk-console.c:1109
 msgid "The package removal was canceled!"
 msgstr "Se canceló la eliminación de paquetes"
 
 #. TRANSLATORS: The package name was not found in any software sources
-#: ../client/pk-console.c:1134
+#: ../client/pk-console.c:1150
 #, c-format
 msgid "This tool could not download the package %s as it could not be found"
 msgstr "Esta herramienta no pudo descargar el paquete %s debido a que no se encontró"
 
 #. TRANSLATORS: Could not download the packages for some reason. The detailed error follows
-#: ../client/pk-console.c:1165
+#: ../client/pk-console.c:1181
 #, c-format
 msgid "This tool could not download the packages: %s"
 msgstr "Esta herramienta no pudo descargar los paquetes: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1197
-#: ../client/pk-console.c:1209
-#: ../client/pk-console.c:1264
+#: ../client/pk-console.c:1213
+#: ../client/pk-console.c:1225
+#: ../client/pk-console.c:1280
 #, c-format
 msgid "This tool could not update %s: %s"
 msgstr "Esta herramienta no pudo actualizar %s: %s"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:1255
+#: ../client/pk-console.c:1271
 msgid "The package update was canceled!"
 msgstr "¡Se canceló la actualización del paquete!"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1288
-#: ../client/pk-console.c:1296
+#: ../client/pk-console.c:1304
+#: ../client/pk-console.c:1312
 #, c-format
 msgid "This tool could not get the requirements for %s: %s"
 msgstr "Esta herramienta no pudo obtener los requerimientos de %s: %s"
 
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
-#: ../client/pk-console.c:1318
-#: ../client/pk-console.c:1326
+#: ../client/pk-console.c:1334
+#: ../client/pk-console.c:1342
 #, c-format
 msgid "This tool could not get the dependencies for %s: %s"
 msgstr "Esta herramienta no pudo obtener las dependencias de %s: %s"
 
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
-#: ../client/pk-console.c:1348
-#: ../client/pk-console.c:1356
+#: ../client/pk-console.c:1364
+#: ../client/pk-console.c:1372
 #, c-format
 msgid "This tool could not get package details for %s: %s"
 msgstr "Esta herramienta no pudo obtener los detalles del paquete %s: %s"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1378
+#: ../client/pk-console.c:1394
 #, c-format
 msgid "This tool could not find the files for %s: %s"
 msgstr "Esta herramienta no pudo encontrar los archivos de %s: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1386
+#: ../client/pk-console.c:1402
 #, c-format
 msgid "This tool could not get the file list for %s: %s"
 msgstr "Esta herramienta no pudo obtener la lista de archivos de %s: %s"
 
 #. TRANSLATORS: There was an error getting the list of packages. The filename follows
-#: ../client/pk-console.c:1408
+#: ../client/pk-console.c:1424
 #, c-format
 msgid "File already exists: %s"
 msgstr "El archivo ya existe: %s"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1413
-#: ../client/pk-console.c:1469
-#: ../client/pk-console.c:1544
+#: ../client/pk-console.c:1429
+#: ../client/pk-console.c:1485
+#: ../client/pk-console.c:1560
 msgid "Getting package list"
 msgstr "Obteniendo la lista de paquetes"
 
 #. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
-#: ../client/pk-console.c:1419
-#: ../client/pk-console.c:1475
-#: ../client/pk-console.c:1550
+#: ../client/pk-console.c:1435
+#: ../client/pk-console.c:1491
+#: ../client/pk-console.c:1566
 #, c-format
 msgid "This tool could not get package list: %s"
 msgstr "Esta herramienta no pudo obtener la lista de paquetes: %s"
 
 #. TRANSLATORS: There was an error saving the list
-#: ../client/pk-console.c:1430
+#: ../client/pk-console.c:1446
 #, c-format
 msgid "Failed to save to disk"
 msgstr "Falló al guardar en el disco"
 
 #. TRANSLATORS: There was an error getting the list. The filename follows
-#: ../client/pk-console.c:1464
-#: ../client/pk-console.c:1539
+#: ../client/pk-console.c:1480
+#: ../client/pk-console.c:1555
 #, c-format
 msgid "File does not exist: %s"
 msgstr "El archivo no existe: %s"
 
 #. TRANSLATORS: header to a list of packages newly added
-#: ../client/pk-console.c:1496
+#: ../client/pk-console.c:1512
 msgid "Packages to add"
 msgstr "Paquetes para añadir"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1504
+#: ../client/pk-console.c:1520
 msgid "Packages to remove"
 msgstr "Paquetes para eliminar"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1572
+#: ../client/pk-console.c:1588
 #, c-format
 msgid "No new packages need to be installed"
 msgstr "No hay paquetes nuevos para instalar"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1578
+#: ../client/pk-console.c:1594
 msgid "To install"
 msgstr "Para instalar"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1590
+#: ../client/pk-console.c:1606
 msgid "Searching for package: "
 msgstr "Buscando el paquete: "
 
 #. TRANSLATORS: package was not found -- this is the end of a string ended in ...
-#: ../client/pk-console.c:1594
+#: ../client/pk-console.c:1610
 msgid "not found."
 msgstr "no encontrado."
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1605
+#: ../client/pk-console.c:1621
 #, c-format
 msgid "No packages can be found to install"
 msgstr "No se encontró ningún paquete para instalar"
 
 #. TRANSLATORS: installing new packages from package list
 #. TRANSLATORS: we are now installing the debuginfo packages we found earlier
-#: ../client/pk-console.c:1611
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:886
+#: ../client/pk-console.c:1627
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
 #, c-format
 msgid "Installing packages"
 msgstr "Instalando paquetes"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1647
+#: ../client/pk-console.c:1663
 #, c-format
 msgid "This tool could not find the update details for %s: %s"
 msgstr "Esta herramienta no pudo encontrar los detalles de actualización de %s: %s"
 
 #. TRANSLATORS: There was an error getting the details about the update for the package. The detailed error follows
-#: ../client/pk-console.c:1655
+#: ../client/pk-console.c:1671
 #, c-format
 msgid "This tool could not get the update details for %s: %s"
 msgstr "Esta herramienta no pudo obtener los detalles de actualización de %s: %s"
 
 #. TRANSLATORS: This was an unhandled error, and we don't have _any_ context
-#: ../client/pk-console.c:1686
+#: ../client/pk-console.c:1702
 msgid "Error:"
 msgstr "Error:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1700
+#: ../client/pk-console.c:1716
 msgid "Package description"
 msgstr "Descripción del paquete"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:1716
+#: ../client/pk-console.c:1732
 msgid "Message:"
 msgstr "Mensaje:"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1744
+#: ../client/pk-console.c:1760
 msgid "Package files"
 msgstr "Archivos del paquete"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1752
+#: ../client/pk-console.c:1768
 msgid "No files"
 msgstr "No hay archivos"
 
 #. TRANSLATORS: This a request for a GPG key signature from the backend, which the client will prompt for later
-#: ../client/pk-console.c:1775
+#: ../client/pk-console.c:1791
 msgid "Repository signature required"
 msgstr "Se requiere la firma del repositorio"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
-#: ../client/pk-console.c:1785
+#: ../client/pk-console.c:1801
 msgid "Do you accept this signature?"
 msgstr "¿Acepta esta firma?"
 
 #. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1789
+#: ../client/pk-console.c:1805
 msgid "The signature was not accepted."
 msgstr "No se aceptó la firma."
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1823
+#: ../client/pk-console.c:1839
 msgid "End user license agreement required"
 msgstr "Se requiere un acuerdo de licencia de usuario final"
 
 #. TRANSLATORS: This a prompt asking the user to agree to the license
-#: ../client/pk-console.c:1830
+#: ../client/pk-console.c:1846
 msgid "Do you agree to this license?"
 msgstr "¿Está de acuerdo con esta licencia?"
 
 #. TRANSLATORS: This is where the user declined the license
-#: ../client/pk-console.c:1834
+#: ../client/pk-console.c:1850
 msgid "The license was refused."
 msgstr "Se rechazó la licencia."
 
 #. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1863
+#: ../client/pk-console.c:1879
 msgid "The daemon crashed mid-transaction!"
 msgstr "El demonio se colgó en medio de una transacción."
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1916
+#: ../client/pk-console.c:1932
 msgid "PackageKit Console Interface"
 msgstr "Interfaz de consola de PackageKit"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1918
+#: ../client/pk-console.c:1934
 msgid "Subcommands:"
 msgstr "Subcomandos:"
 
 #. TRANSLATORS: command line argument, if we should show debugging information
 #. TRANSLATORS: if we should show debugging data
-#: ../client/pk-console.c:2011
-#: ../client/pk-generate-pack.c:185
+#: ../client/pk-console.c:2027
+#: ../client/pk-generate-pack.c:187
 #: ../client/pk-monitor.c:128
 #: ../contrib/command-not-found/pk-command-not-found.c:616
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:550
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:549
 #: ../contrib/device-rebind/pk-device-rebind.c:293
 #: ../src/pk-main.c:211
 msgid "Show extra debugging information"
 msgstr "Mostrar información extra de depuración"
 
 #. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:2014
+#: ../client/pk-console.c:2030
 #: ../client/pk-monitor.c:130
 msgid "Show the program version and exit"
 msgstr "Mostrar la versión del programa y salir"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:2017
+#: ../client/pk-console.c:2033
 msgid "Set the filter, e.g. installed"
 msgstr "Establecer el filtro, ej. instalado"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:2020
+#: ../client/pk-console.c:2036
 msgid "Exit without waiting for actions to complete"
 msgstr "Salir sin esperar que las acciones se completen"
 
 #. TRANSLATORS: This is when we could not connect to the system bus, and is fatal
-#: ../client/pk-console.c:2047
+#: ../client/pk-console.c:2063
 msgid "This tool could not connect to system DBUS."
 msgstr "Esta herramienta no se pudo conectar al DBUS del sistema."
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:2137
+#: ../client/pk-console.c:2153
 msgid "The filter specified was invalid"
 msgstr "El filtro especificado fue inválido"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:2156
+#: ../client/pk-console.c:2172
 msgid "A search type is required, e.g. name"
 msgstr "Se necesita un tipo de búsqueda, por ejemplo, nombre"
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:2163
-#: ../client/pk-console.c:2172
-#: ../client/pk-console.c:2181
-#: ../client/pk-console.c:2190
+#: ../client/pk-console.c:2179
+#: ../client/pk-console.c:2188
+#: ../client/pk-console.c:2197
+#: ../client/pk-console.c:2206
 msgid "A search term is required"
 msgstr "Se necesita un término de búsqueda"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:2197
+#: ../client/pk-console.c:2213
 msgid "Invalid search type"
 msgstr "Tipo de búsqueda inválido"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:2203
+#: ../client/pk-console.c:2219
 msgid "A package name or filename to install is required"
 msgstr "Se requiere un nombre de paquete o nombre de archivo para instalar"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2212
+#: ../client/pk-console.c:2228
 msgid "A type, key_id and package_id are required"
 msgstr "Se necesita un tipo, key_id y package_id"
 
 #. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:2221
+#: ../client/pk-console.c:2237
 msgid "A package name to remove is required"
 msgstr "Necesita un nombre de paquete para eliminar"
 
 #. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:2229
+#: ../client/pk-console.c:2245
 msgid "A destination directory and the package names to download are required"
 msgstr "Se necesita un directorio de destino y los nombres de los paquetes a descargar"
 
 #. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:2236
+#: ../client/pk-console.c:2252
 msgid "Directory not found"
 msgstr "Directorio no encontrado"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2244
+#: ../client/pk-console.c:2260
 msgid "A licence identifier (eula-id) is required"
 msgstr "Se necesita un identificador de licencia (eula-id)"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2254
+#: ../client/pk-console.c:2270
 msgid "A transaction identifier (tid) is required"
 msgstr "Se necesita un identificador de transacción (tid)"
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:2271
+#: ../client/pk-console.c:2287
 msgid "A package name to resolve is required"
 msgstr "Se necesita un nombre de paquete para resolver"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:2280
-#: ../client/pk-console.c:2289
+#: ../client/pk-console.c:2296
+#: ../client/pk-console.c:2305
 msgid "A repository name is required"
 msgstr "Se necesita un nombre de repositorio"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:2298
+#: ../client/pk-console.c:2314
 msgid "A repo name, parameter and value are required"
 msgstr "Debe especificar un nombre de repositorio, parámetro y valor"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:2312
+#: ../client/pk-console.c:2328
 msgid "An action, e.g. 'update-system' is required"
 msgstr "Debe especificar una acción, por ejemplo, «update-system»"
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:2319
+#: ../client/pk-console.c:2335
 msgid "A correct role is required"
 msgstr "Se necesita un rol correcto"
 
 #. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:2326
+#: ../client/pk-console.c:2342
 msgid "Failed to get the time since this action was last completed"
 msgstr "Falló al obtener la hora de la última vez que se completó esta acción"
 
 #. TRANSLATORS: The user did not provide a package name
 #. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:2336
-#: ../client/pk-console.c:2348
-#: ../client/pk-console.c:2357
-#: ../client/pk-console.c:2375
-#: ../client/pk-console.c:2384
-#: ../client/pk-generate-pack.c:241
+#: ../client/pk-console.c:2352
+#: ../client/pk-console.c:2364
+#: ../client/pk-console.c:2373
+#: ../client/pk-console.c:2391
+#: ../client/pk-console.c:2400
+#: ../client/pk-generate-pack.c:243
 msgid "A package name is required"
 msgstr "Se necesita un nombre de paquete"
 
 #. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:2366
+#: ../client/pk-console.c:2382
 msgid "A package provide string is required"
 msgstr "Se necesita la cadena de lo que proporciona el paquete"
 
 #. TRANSLATORS: The user didn't specify a filename to create as a list
-#: ../client/pk-console.c:2393
+#: ../client/pk-console.c:2409
 msgid "A list file name to create is required"
 msgstr "Se necesita un nombre de archivo de la lista"
 
 #. TRANSLATORS: The user didn't specify a filename to open as a list
-#: ../client/pk-console.c:2403
-#: ../client/pk-console.c:2413
+#: ../client/pk-console.c:2419
+#: ../client/pk-console.c:2429
 msgid "A list file to open is required"
 msgstr "Se necesita un archivo de lista para abrir"
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:2467
+#: ../client/pk-console.c:2483
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "La opción «%s» no está soportada"
 
 #. TRANSLATORS: User does not have permission to do this
-#: ../client/pk-console.c:2480
+#: ../client/pk-console.c:2496
 msgid "Incorrect privileges for this operation"
 msgstr "Privilegios incorrectos para esta operación"
 
 #. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:2483
+#: ../client/pk-console.c:2499
 msgid "Command failed"
 msgstr "Falló el comando"
 
 #. TRANSLATORS: This is the state of the transaction
-#: ../client/pk-generate-pack.c:101
+#: ../client/pk-generate-pack.c:103
 msgid "Downloading"
 msgstr "Descargando"
 
 #. TRANSLATORS: This is when the main packages are being downloaded
-#: ../client/pk-generate-pack.c:121
+#: ../client/pk-generate-pack.c:123
 msgid "Downloading packages"
 msgstr "Descargando paquetes"
 
 #. TRANSLATORS: This is when the dependency packages are being downloaded
-#: ../client/pk-generate-pack.c:126
+#: ../client/pk-generate-pack.c:128
 msgid "Downloading dependencies"
 msgstr "Descargando dependencias"
 
 #. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll exist on the target
-#: ../client/pk-generate-pack.c:188
+#: ../client/pk-generate-pack.c:190
 msgid "Set the file name of dependencies to be excluded"
 msgstr "Establezca el nombre del archivo de dependencias para excluir"
 
 #. TRANSLATORS: the output location
-#: ../client/pk-generate-pack.c:191
+#: ../client/pk-generate-pack.c:193
 msgid "The output file or directory (the current directory is used if ommitted)"
 msgstr "El directorio o archivo de salida (se usará si se omite el directorio actual)"
 
 #. TRANSLATORS: put a list of packages in the pack
-#: ../client/pk-generate-pack.c:194
+#: ../client/pk-generate-pack.c:196
 msgid "The package to be put into the service pack"
 msgstr "El paquete será puesto en el paquete de servicio"
 
 #. TRANSLATORS: put all pending updates in the pack
-#: ../client/pk-generate-pack.c:197
+#: ../client/pk-generate-pack.c:199
 msgid "Put all updates available in the service pack"
 msgstr "Poner todas las actualizaciones disponibles en el paquete de servicio"
 
 #. TRANSLATORS: This is when the user fails to supply the correct arguments
-#: ../client/pk-generate-pack.c:225
+#: ../client/pk-generate-pack.c:227
 msgid "Neither --package or --updates option selected."
 msgstr "No se seleccionó ni la opción --package o --updates."
 
 #. TRANSLATORS: This is when the user fails to supply just one argument
-#: ../client/pk-generate-pack.c:233
+#: ../client/pk-generate-pack.c:235
 msgid "Both options selected."
 msgstr "Se seleccionaron ambas opciones."
 
 #. TRANSLATORS: This is when the user fails to supply the output
-#: ../client/pk-generate-pack.c:249
+#: ../client/pk-generate-pack.c:251
 msgid "A output directory or file name is required"
 msgstr "Se necesita un directorio o nombre de archivo de salida"
 
 #. TRANSLATORS: This is when the backend doesn't have the capability to get-depends
 #. TRANSLATORS: This is when the backend doesn't have the capability to download
-#: ../client/pk-generate-pack.c:267
-#: ../client/pk-generate-pack.c:273
+#: ../client/pk-generate-pack.c:269
+#: ../client/pk-generate-pack.c:275
 msgid "The package manager cannot perform this type of operation."
 msgstr "El gestor de paquetes no puede realizar este tipo de operación."
 
 #. TRANSLATORS: This is when the distro didn't include libarchive support into PK
-#: ../client/pk-generate-pack.c:280
+#: ../client/pk-generate-pack.c:282
 msgid "Service packs cannot be created as PackageKit was not built with libarchive support."
 msgstr "No se pueden crear paquetes de servicio ya que PackageKit no se construyó con soporte para libarchive."
 
 #. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
-#: ../client/pk-generate-pack.c:291
+#: ../client/pk-generate-pack.c:293
 msgid "If specifying a file, the service pack name must end with"
 msgstr "Si especifica un archivo, el nombre del paquete de servicio debe finalizar con"
 
 #. TRANSLATORS: This is when file already exists
-#: ../client/pk-generate-pack.c:307
+#: ../client/pk-generate-pack.c:309
 msgid "A pack with the same name already exists, do you want to overwrite it?"
 msgstr "Ya existe un paquete con ese nombre, ¿desea sobreescribirlo?"
 
 #. TRANSLATORS: This is when the pack was not overwritten
-#: ../client/pk-generate-pack.c:310
+#: ../client/pk-generate-pack.c:312
 msgid "The pack was not overwritten."
 msgstr "No se sobreescribió el paquete."
 
 #. TRANSLATORS: This is when the temporary directory cannot be created, the directory name follows
-#: ../client/pk-generate-pack.c:323
+#: ../client/pk-generate-pack.c:325
 msgid "Failed to create directory:"
 msgstr "Falló al crear el directorio:"
 
 #. TRANSLATORS: This is when the list of packages from the remote computer cannot be opened
-#: ../client/pk-generate-pack.c:333
+#: ../client/pk-generate-pack.c:335
 msgid "Failed to open package list."
 msgstr "Falló al abrir la lista de paquetes."
 
 #. TRANSLATORS: The package name is being matched up to available packages
-#: ../client/pk-generate-pack.c:344
+#: ../client/pk-generate-pack.c:346
 msgid "Finding package name."
 msgstr "Buscando el nombre de paquete."
 
 #. TRANSLATORS: This is when the package cannot be found in any software source. The detailed error follows
-#: ../client/pk-generate-pack.c:348
+#: ../client/pk-generate-pack.c:350
 #, c-format
 msgid "Failed to find package '%s': %s"
 msgstr "Falló al buscar el paquete «%s»: %s"
 
 #. TRANSLATORS: This is telling the user we are in the process of making the pack
-#: ../client/pk-generate-pack.c:365
+#: ../client/pk-generate-pack.c:367
 msgid "Creating service pack..."
 msgstr "Creando el paquete de servicio..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:372
+#: ../client/pk-generate-pack.c:374
 #, c-format
 msgid "Service pack created '%s'"
 msgstr "Paquete de servicio «%s» creado"
 
 #. TRANSLATORS: we failed to make te file
-#: ../client/pk-generate-pack.c:377
+#: ../client/pk-generate-pack.c:379
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "Falló al crear «%s»: %s"
@@ -872,26 +879,21 @@ msgid "Cannot show the list of transactions"
 msgstr "No es posible mostrar la lista de transacciones"
 
 #. TRANSLATORS: The package was not found in any software sources
-#: ../client/pk-tools-common.c:118
+#: ../client/pk-tools-common.c:119
 #, c-format
 msgid "The package could not be found"
 msgstr "No se pudo encontrar el paquete"
 
 #. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../client/pk-tools-common.c:130
+#: ../client/pk-tools-common.c:131
 msgid "More than one package matches:"
 msgstr "Coincide más de un paquete:"
 
 #. TRANSLATORS: This finds out which package in the list to use
-#: ../client/pk-tools-common.c:137
+#: ../client/pk-tools-common.c:138
 msgid "Please choose the correct package: "
 msgstr "Elija el paquete correcto: "
 
-#: ../client/pk-tools-common.c:162
-#, c-format
-msgid "Please enter a number from 1 to %i: "
-msgstr "Introduzca un número de 1 a %i: "
-
 #. TRANSLATORS: when we are getting data from the daemon
 #: ../contrib/browser-plugin/pk-plugin-install.c:466
 msgid "Getting package information..."
@@ -1047,174 +1049,174 @@ msgid "Failed to find the package %s, or already installed: %s"
 msgstr "No se ha podido encontrar el paquete %s, o tal vez ya se encuentre instalado: %s"
 
 #. command line argument, simulate what would be done, but don't actually do it
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:553
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:552
 msgid "Don't actually install any packages, only simulate what would be installed"
 msgstr "No se instala ningún paquete realmente, solo se indica cuáles serían instalados"
 
 #. command line argument, do we skip packages that depend on the ones specified
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:556
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:555
 msgid "Do not install dependencies of the core packages"
 msgstr "No se instalan dependencias de los paquetes principales"
 
 #. command line argument, do we operate quietly
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:559
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:558
 msgid "Do not display information or progress"
 msgstr "No se muestra información ni progreso"
 
 #. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:577
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:576
 msgid "PackageKit Debuginfo Installer"
 msgstr "Instalador de depuración de errores de PackageKit"
 
 #. TRANSLATORS: the use needs to specify a list of package names on the command line
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:589
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:588
 #, c-format
 msgid "ERROR: Specify package names to install."
 msgstr "ERROR: Debe especificar los nombres de los paquetes a instalar."
 
 #. TRANSLATORS: we are getting the list of repositories
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:623
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:622
 #, c-format
 msgid "Getting sources list"
 msgstr "Obteniendo lista desde las fuentes"
 
 #. TRANSLATORS: all completed 100%
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:641
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:681
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:716
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:800
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:844
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:911
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:955
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:640
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:680
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:715
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:799
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:843
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:910
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:954
 #, c-format
 msgid "OK."
 msgstr "OK."
 
 #. TRANSLATORS: tell the user what we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:644
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:643
 #, c-format
 msgid "Found %i enabled and %i disabled sources."
 msgstr "Se han encontrado %i fuentes activas y %i fuentes deshabilitadas."
 
 #. TRANSLATORS: we're finding repositories that match out pattern
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:651
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:650
 #, c-format
 msgid "Finding debugging sources"
 msgstr "Buscando fuentes para depuración"
 
 #. TRANSLATORS: tell the user what we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:684
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:683
 #, c-format
 msgid "Found %i disabled debuginfo repos."
 msgstr "Se han encontrado %i repositorios deshabilitados para depuración."
 
 #. TRANSLATORS: we're now enabling all the debug sources we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:691
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
 #, c-format
 msgid "Enabling debugging sources"
 msgstr "Habilitando fuentes para depuración"
 
 #. TRANSLATORS: operation was not successful
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:701
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:785
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:829
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:896
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:940
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:784
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:828
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:895
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:939
 msgid "FAILED."
 msgstr "FALLO."
 
 #. TRANSLATORS: tell the user how many we enabled
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:719
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:718
 #, c-format
 msgid "Enabled %i debugging sources."
 msgstr "Se han habilitado %i fuentes para depuración."
 
 #. TRANSLATORS: we're now finding packages that match in all the repos
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:726
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:725
 #, c-format
 msgid "Finding debugging packages"
 msgstr "Buscando paquetes de depuración."
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:738
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:737
 #, c-format
 msgid "Failed to find the package %s: %s"
 msgstr "Falló al buscar el paquete %s: %s"
 
 #. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:761
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:760
 #, c-format
 msgid "Failed to find the debuginfo package %s: %s"
 msgstr "Fallo al buscar el paquete de depuración %s: %s"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:789
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:788
 #, c-format
 msgid "Found no packages to install."
 msgstr "No se han encontrado paquetes para instalar."
 
 #. TRANSLATORS: tell the user we found some packages, and then list them
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:802
 #, c-format
 msgid "Found %i packages:"
 msgstr "Se han encontrado %i paquetes:"
 
 #. TRANSLATORS: tell the user we are searching for deps
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:819
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
 #, c-format
 msgid "Finding packages that depend on these packages"
 msgstr "Buscando paquetes que dependan de esos paquetes."
 
 #. TRANSLATORS: could not install, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:832
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:831
 #, c-format
 msgid "Could not find dependant packages: %s"
 msgstr "No se han podido encontrar paquetes dependientes: %s"
 
 #. TRANSLATORS: tell the user we found some more packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:847
 #, c-format
 msgid "Found %i extra packages."
 msgstr "Se han encontrado %i paquetes extra."
 
 #. TRANSLATORS: tell the user we found some more packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:852
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:851
 #, c-format
 msgid "No extra packages required."
 msgstr "No son necesarios paquetes extra."
 
 #. TRANSLATORS: tell the user we found some packages (and deps), and then list them
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:861
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
 #, c-format
 msgid "Found %i packages to install:"
 msgstr "Se han encontrado %i paquetes para instalar:"
 
 #. TRANSLATORS: simulate mode is a testing mode where we quit before the action
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:874
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
 #, c-format
 msgid "Not installing packages in simulate mode"
 msgstr "No se instalan paquetes en modo de simulación"
 
 #. TRANSLATORS: could not install, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:899
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:898
 #, c-format
 msgid "Could not install packages: %s"
 msgstr "No se han podido instalar paquetes: %s"
 
 #. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:931
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:930
 #, c-format
 msgid "Disabling sources previously enabled"
 msgstr "Deshabilitando fuentes previamente habilitadas"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:943
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:942
 #, c-format
 msgid "Could not disable the debugging sources: %s"
 msgstr "No es posible deshabilitar las fuentes para depuración:%s"
 
 #. TRANSLATORS: we disabled all the debugging repos that we enabled before
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:958
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:957
 #, c-format
 msgid "Disabled %i debugging sources."
 msgstr "Se han deshabilitado %i fuentes para la depuración. "
@@ -1589,6 +1591,11 @@ msgstr "Varios paquetes"
 msgid "Only trusted"
 msgstr "Solo confiable"
 
+#: ../client/pk-text.c:50
+#, c-format
+msgid "Please enter a number from 1 to %i: "
+msgstr "Introduzca un número de 1 a %i: "
+
 #~ msgid "Main cache file to use (if not specififed, default is used)"
 #~ msgstr ""
 #~ "Archivo caché principal a usar (si no se especifica, se usará el "
commit 266f02a217f3537d1d3dadb623097f00b1f9cb5f
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 13:23:02 2009 +0100

    glib2: add a PkTaskText implementation for the text tools to use

diff --git a/client/Makefile.am b/client/Makefile.am
index cbbad92..d8cb840 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -67,12 +67,16 @@ PK_GLIB2_LIBS =						\
 
 noinst_PROGRAMS = pkcon-test
 
+# TODO: private library
+
 pkcon_test_SOURCES =					\
 	egg-debug.c					\
 	egg-debug.h					\
 	egg-string.c					\
 	egg-string.h					\
 	pk-console-test.c				\
+	pk-task-text.c					\
+	pk-task-text.h					\
 	pk-text.c					\
 	pk-text.h					\
 	pk-progress-bar.c				\
@@ -163,8 +167,11 @@ pk_self_test_SOURCES =					\
 	egg-string.h					\
 	egg-test.c					\
 	egg-test.h					\
+	pk-text.c					\
+	pk-text.h					\
+	pk-task-text.c					\
+	pk-task-text.h					\
 	pk-self-test.c					\
-	$(shared_SOURCES)				\
 	$(NULL)
 
 pk_self_test_LDADD =					\
@@ -172,7 +179,7 @@ pk_self_test_LDADD =					\
 	$(DBUS_LIBS)					\
 	$(SELFTEST_LIBS)				\
 	$(ARCHIVE_LIBS)					\
-	$(PK_GLIB_LIBS)					\
+	$(PK_GLIB2_LIBS)				\
 	$(NULL)
 
 pk_self_test_CFLAGS = -DEGG_TEST $(AM_CFLAGS)
diff --git a/client/pk-console-test.c b/client/pk-console-test.c
index a80e5b4..f1e25d8 100644
--- a/client/pk-console-test.c
+++ b/client/pk-console-test.c
@@ -85,29 +85,6 @@ pk_strpad (const gchar *data, guint length)
 }
 
 /**
- * pk_package_id_get_printable:
- **/
-static gchar *
-pk_package_id_get_printable (const gchar *package_id)
-{
-	gchar **split = NULL;
-	gchar *value = NULL;
-
-	/* invalid */
-	if (package_id == NULL)
-		goto out;
-
-	/* split */
-	split = g_strsplit (package_id, ";", -1);
-	if (g_strv_length (split) != 4)
-		goto out;
-	value = g_strdup_printf ("%s-%s.%s", split[0], split[1], split[2]);
-out:
-	g_strfreev (split);
-	return value;
-}
-
-/**
  * pk_console_package_cb:
  **/
 static void
@@ -131,7 +108,7 @@ pk_console_package_cb (const PkResultItemPackage *obj, gpointer data)
 	info_pad = pk_strpad (pk_info_enum_to_text (obj->info_enum), 12);
 
 	/* create printable */
-	package = pk_package_id_get_printable (obj->package_id);
+	package = pk_package_id_to_printable (obj->package_id);
 
 	/* don't pretty print */
 	if (!is_console) {
@@ -208,7 +185,7 @@ pk_console_transaction_cb (const PkResultItemTransaction *obj, gpointer user_dat
 		parts = g_strsplit (lines[i], "\t", 3);
 
 		/* create printable */
-		package = pk_package_id_get_printable (parts[1]);
+		package = pk_package_id_to_printable (parts[1]);
 		g_print (" - %s %s", parts[0], package);
 		g_free (package);
 		g_strfreev (parts);
@@ -332,7 +309,7 @@ pk_console_update_detail_cb (const PkResultItemUpdateDetail *detail, gpointer da
 	g_print ("%s\n", _("Details about the update:"));
 
 	/* create printable */
-	package = pk_package_id_get_printable (detail->package_id);
+	package = pk_package_id_to_printable (detail->package_id);
 
 	/* TRANSLATORS: details about the update, package name and version */
 	g_print (" %s: %s\n", _("Package"), package);
@@ -419,7 +396,7 @@ pk_console_require_restart_cb (const PkResultItemRequireRestart *obj, gpointer d
 	gchar *package = NULL;
 
 	/* create printable */
-	package = pk_package_id_get_printable (obj->package_id);
+	package = pk_package_id_to_printable (obj->package_id);
 
 	if (obj->restart == PK_RESTART_ENUM_SYSTEM) {
 		/* TRANSLATORS: a package requires the system to be restarted */
@@ -449,7 +426,7 @@ pk_console_details_cb (const PkResultItemDetails *obj, gpointer data)
 	gchar *package = NULL;
 
 	/* create printable */
-	package = pk_package_id_get_printable (obj->package_id);
+	package = pk_package_id_to_printable (obj->package_id);
 
 	/* TRANSLATORS: This a list of details about the package */
 	g_print ("%s\n", _("Package description"));
@@ -516,7 +493,7 @@ pk_console_repo_signature_required_cb (const PkResultItemRepoSignatureRequired *
 	gchar *package = NULL;
 
 	/* create printable */
-	package = pk_package_id_get_printable (obj->package_id);
+	package = pk_package_id_to_printable (obj->package_id);
 
 	/* TRANSLATORS: This a request for a GPG key signature from the backend, which the client will prompt for later */
 	g_print ("%s\n", _("Repository signature required"));
@@ -565,7 +542,7 @@ pk_console_eula_required_cb (const PkResultItemEulaRequired *obj, gpointer data)
 	gchar *package = NULL;
 
 	/* create printable */
-	package = pk_package_id_get_printable (obj->package_id);
+	package = pk_package_id_to_printable (obj->package_id);
 
 	/* TRANSLATORS: This a request for a EULA */
 	g_print ("%s\n", _("End user license agreement required"));
@@ -1562,7 +1539,7 @@ pk_console_progress_cb (PkProgress *progress, PkProgressType type, gpointer data
 		g_object_get (progress,
 			      "package-id", &package_id,
 			      NULL);
-		text = pk_package_id_get_printable (package_id);
+		text = pk_package_id_to_printable (package_id);
 		pk_progress_bar_start (progressbar, text);
 		g_free (package_id);
 		g_free (text);
diff --git a/client/pk-self-test.c b/client/pk-self-test.c
index eba7cc5..9c5032a 100644
--- a/client/pk-self-test.c
+++ b/client/pk-self-test.c
@@ -27,6 +27,8 @@
 #include "egg-test.h"
 #include "egg-debug.h"
 
+#include "pk-task-text.h"
+
 /* prototypes */
 void pk_genpack_test (EggTest *test);
 
@@ -41,6 +43,7 @@ main (int argc, char **argv)
 
 	/* tests go here */
 	//pk_genpack_test (test);
+	pk_task_text_test (test);
 	
 	return (egg_test_finish (test));
 }
diff --git a/client/pk-task-text.c b/client/pk-task-text.c
new file mode 100644
index 0000000..511d252
--- /dev/null
+++ b/client/pk-task-text.c
@@ -0,0 +1,349 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at 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 "pk-task-text.h"
+#include "pk-text.h"
+
+static void     pk_task_text_finalize	(GObject     *object);
+
+#define PK_TASK_TEXT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PK_TYPE_TASK_TEXT, PkTaskTextPrivate))
+
+/**
+ * PkTaskTextPrivate:
+ *
+ * Private #PkTaskText data
+ **/
+struct _PkTaskTextPrivate
+{
+	gpointer		 user_data;
+};
+
+G_DEFINE_TYPE (PkTaskText, pk_task_text, PK_TYPE_TASK)
+
+/**
+ * pk_task_text_untrusted_question:
+ **/
+static void
+dkp_task_text_untrusted_question (PkTask *task, guint request, const PkResults *results)
+{
+	gboolean ret;
+	PkTaskTextPrivate *priv = PK_TASK_TEXT(task)->priv;
+
+	/* set some user data, for no reason */
+	priv->user_data = NULL;
+
+	/* ask the user */
+	ret = pk_console_get_prompt (_("Do you want to allow installing of unsigned software?"), FALSE);
+	if (ret) {
+		pk_task_user_accepted (task, request);
+	} else {
+		g_print ("%s\n", _("The unsigned software will not be installed."));
+		pk_task_user_declined (task, request);
+	}
+}
+
+/**
+ * pk_task_text_key_question:
+ **/
+static void
+dkp_task_text_key_question (PkTask *task, guint request, const PkResults *results)
+{
+	guint i;
+	gboolean ret;
+	GPtrArray *array;
+	gchar *package = NULL;
+	PkResultItemRepoSignatureRequired *item;
+	PkTaskTextPrivate *priv = PK_TASK_TEXT(task)->priv;
+
+	/* set some user data, for no reason */
+	priv->user_data = NULL;
+
+	/* get data */
+	array = pk_results_get_repo_signature_required_array (results);
+	for (i=0; i<array->len; i++) {
+		item = g_ptr_array_index (array, i);
+
+		/* create printable */
+		package = pk_package_id_to_printable (item->package_id);
+
+		g_print ("%s\n", _("Software source signature required"));
+		g_print (" %s: %s\n", _("Package"), package);
+		g_print (" %s: %s\n", _("Software source name"), item->repository_name);
+		g_print (" %s: %s\n", _("Key URL"), item->key_url);
+		g_print (" %s: %s\n", _("Key user"), item->key_userid);
+		g_print (" %s: %s\n", _("Key ID"), item->key_id);
+		g_print (" %s: %s\n", _("Key fingerprint"), item->key_fingerprint);
+		g_print (" %s: %s\n", _("Key Timestamp"), item->key_timestamp);
+
+		g_free (package);
+	}
+
+	/* ask the user */
+	ret = pk_console_get_prompt (_("Do you accept this signature?"), FALSE);
+	if (ret) {
+		pk_task_user_accepted (task, request);
+	} else {
+		g_print ("%s\n", _("The signature was not accepted."));
+		pk_task_user_declined (task, request);
+	}
+
+	g_ptr_array_unref (array);
+}
+
+/**
+ * pk_task_text_eula_question:
+ **/
+static void
+dkp_task_text_eula_question (PkTask *task, guint request, const PkResults *results)
+{
+	guint i;
+	gboolean ret;
+	gchar *package = NULL;
+	GPtrArray *array;
+	PkResultItemEulaRequired *item;
+	PkTaskTextPrivate *priv = PK_TASK_TEXT(task)->priv;
+
+	/* set some user data, for no reason */
+	priv->user_data = NULL;
+
+	/* get data */
+	array = pk_results_get_eula_required_array (results);
+	for (i=0; i<array->len; i++) {
+		item = g_ptr_array_index (array, i);
+
+		/* create printable */
+		package = pk_package_id_to_printable (item->package_id);
+
+		g_print ("%s\n", _("End user licence agreement required"));
+		g_print (" %s: %s\n", _("EULA ID"), item->eula_id);
+		g_print (" %s: %s\n", _("Package"), package);
+		g_print (" %s: %s\n", _("Vendor"), item->vendor_name);
+		g_print (" %s: %s\n", _("Agreement"), item->license_agreement);
+
+		g_free (package);
+	}
+
+	/* ask the user */
+	ret = pk_console_get_prompt (_("Do you accept this agreement?"), FALSE);
+	if (ret) {
+		pk_task_user_accepted (task, request);
+	} else {
+		g_print ("%s\n", _("The agreement was not accepted."));
+		pk_task_user_declined (task, request);
+	}
+
+	g_ptr_array_unref (array);
+}
+
+/**
+ * pk_task_text_media_change_question:
+ **/
+static void
+dkp_task_text_media_change_question (PkTask *task, guint request, const PkResults *results)
+{
+	guint i;
+	gboolean ret;
+	GPtrArray *array;
+	PkResultItemMediaChangeRequired *item;
+	PkTaskTextPrivate *priv = PK_TASK_TEXT(task)->priv;
+
+	/* set some user data, for no reason */
+	priv->user_data = NULL;
+
+	/* get data */
+	array = pk_results_get_media_change_required_array (results);
+	for (i=0; i<array->len; i++) {
+		item = g_ptr_array_index (array, i);
+		g_print ("%s\n", _("Media change required"));
+		g_print (" %s: %s\n", _("Media type"), pk_media_type_enum_to_text (item->media_type));
+		g_print (" %s: %s\n", _("Media ID"), item->media_id);
+		g_print (" %s: %s\n", _("Text"), item->media_text);
+	}
+
+	/* ask the user */
+	ret = pk_console_get_prompt (_("Please insert the correct media"), FALSE);
+	if (ret) {
+		pk_task_user_accepted (task, request);
+	} else {
+		g_print ("%s\n", _("The correct media was not inserted."));
+		pk_task_user_declined (task, request);
+	}
+
+	g_ptr_array_unref (array);
+}
+
+/**
+ * pk_task_text_class_init:
+ **/
+static void
+pk_task_text_class_init (PkTaskTextClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	PkTaskClass *task_class = PK_TASK_CLASS (klass);
+
+	object_class->finalize = pk_task_text_finalize;
+	task_class->untrusted_question = dkp_task_text_untrusted_question;
+	task_class->key_question = dkp_task_text_key_question;
+	task_class->eula_question = dkp_task_text_eula_question;
+	task_class->media_change_question = dkp_task_text_media_change_question;
+
+	g_type_class_add_private (klass, sizeof (PkTaskTextPrivate));
+}
+
+/**
+ * pk_task_text_init:
+ * @task_text: This class instance
+ **/
+static void
+pk_task_text_init (PkTaskText *task)
+{
+	task->priv = PK_TASK_TEXT_GET_PRIVATE (task);
+	task->priv->user_data = NULL;
+}
+
+/**
+ * pk_task_text_finalize:
+ * @object: The object to finalize
+ **/
+static void
+pk_task_text_finalize (GObject *object)
+{
+	PkTaskText *task = PK_TASK_TEXT (object);
+	task->priv->user_data = NULL;
+	G_OBJECT_CLASS (pk_task_text_parent_class)->finalize (object);
+}
+
+/**
+ * pk_task_text_new:
+ *
+ * Return value: a new PkTaskText object.
+ **/
+PkTaskText *
+pk_task_text_new (void)
+{
+	PkTaskText *task;
+	task = g_object_new (PK_TYPE_TASK_TEXT, NULL);
+	return PK_TASK_TEXT (task);
+}
+
+/***************************************************************************
+ ***                          MAKE CHECK TESTS                           ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+static void
+pk_task_text_test_install_packages_cb (GObject *object, GAsyncResult *res, EggTest *test)
+{
+	PkTaskText *task = PK_TASK_TEXT (object);
+	GError *error = NULL;
+	const PkResults *results = NULL;
+	PkExitEnum exit_enum;
+	GPtrArray *packages;
+	const PkResultItemPackage *item;
+	guint i;
+
+	/* get the results */
+	results = pk_task_generic_finish (PK_TASK (task), res, &error);
+	if (results == NULL) {
+		egg_test_failed (test, "failed to resolve: %s", error->message);
+		g_error_free (error);
+		return;
+	}
+
+	exit_enum = pk_results_get_exit_code (results);
+	if (exit_enum != PK_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_enum), item->package_id, item->summary);
+	}
+
+	if (packages->len != 5)
+		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));
+	egg_test_loop_quit (test);
+}
+
+static void
+pk_task_text_test_progress_cb (PkProgress *progress, PkProgressType type, EggTest *test)
+{
+	PkStatusEnum status;
+	if (type == PK_PROGRESS_TYPE_STATUS) {
+		g_object_get (progress,
+			      "status", &status,
+			      NULL);
+		egg_debug ("now %s", pk_status_enum_to_text (status));
+	}
+}
+
+void
+pk_task_text_test (gpointer user_data)
+{
+	EggTest *test = (EggTest *) user_data;
+	PkTaskText *task;
+	gchar **package_ids;
+
+	if (!egg_test_start (test, "PkTaskText"))
+		return;
+
+	/************************************************************/
+	egg_test_title (test, "get task_text");
+	task = pk_task_text_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 = g_strsplit ("vips-doc;7.12.4-2.fc8;noarch;linva", ",", -1);
+	pk_task_install_packages_async (PK_TASK (task), package_ids, NULL,
+				        (PkProgressCallback) pk_task_text_test_progress_cb, test,
+				        (GAsyncReadyCallback) pk_task_text_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/client/pk-task-text.h b/client/pk-task-text.h
new file mode 100644
index 0000000..3ec72c2
--- /dev/null
+++ b/client/pk-task-text.h
@@ -0,0 +1,60 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offtask_text: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at 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 __PK_TASK_TEXT_H
+#define __PK_TASK_TEXT_H
+
+#include <glib-object.h>
+#include <packagekit-glib2/packagekit.h>
+
+G_BEGIN_DECLS
+
+#define PK_TYPE_TASK_TEXT		(pk_task_text_get_type ())
+#define PK_TASK_TEXT(o)			(G_TYPE_CHECK_INSTANCE_CAST ((o), PK_TYPE_TASK_TEXT, PkTaskText))
+#define PK_TASK_TEXT_CLASS(k)		(G_TYPE_CHECK_CLASS_CAST((k), PK_TYPE_TASK_TEXT, PkTaskTextClass))
+#define PK_IS_TASK_TEXT(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), PK_TYPE_TASK_TEXT))
+#define PK_IS_TASK_TEXT_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), PK_TYPE_TASK_TEXT))
+#define PK_TASK_TEXT_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_TASK_TEXT, PkTaskTextClass))
+
+typedef struct _PkTaskTextPrivate	PkTaskTextPrivate;
+typedef struct _PkTaskText		PkTaskText;
+typedef struct _PkTaskTextClass		PkTaskTextClass;
+
+struct _PkTaskText
+{
+	 PkTask				 parent;
+	 PkTaskTextPrivate		*priv;
+};
+
+struct _PkTaskTextClass
+{
+	PkTaskClass			 parent_class;
+};
+
+GQuark		 pk_task_text_error_quark			(void);
+GType		 pk_task_text_get_type				(void);
+PkTaskText	*pk_task_text_new				(void);
+void		 pk_task_text_test				(gpointer		 user_data);
+
+G_END_DECLS
+
+#endif /* __PK_TASK_TEXT_H */
+
commit 59041064e8f878b4f4e43c66ec3dfcaf82d131c2
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 13:19:15 2009 +0100

    bugfix: detect the new libnm-glib name as well as the old libnm_glib

diff --git a/configure.ac b/configure.ac
index 1b2e180..209ab12 100644
--- a/configure.ac
+++ b/configure.ac
@@ -295,7 +295,11 @@ AC_ARG_ENABLE(networkmanager, AC_HELP_STRING([--disable-networkmanager],
 		[Disable NetworkManager support]),
 		enable_networkmanager=$enableval)
 if test x$enable_networkmanager != xno; then
-	PKG_CHECK_MODULES(LIBNM, libnm_glib >= $LIBNM_GLIB_REQUIRED, PK_BUILD_NETWORKMANAGER="yes", PK_BUILD_NETWORKMANAGER="no")
+	PKG_CHECK_MODULES(LIBNM, libnm-glib >= $LIBNM_GLIB_REQUIRED, PK_BUILD_NETWORKMANAGER="yes", PK_BUILD_NETWORKMANAGER="no")
+	# look for the old name for the library too
+	if test "x$PK_BUILD_NETWORKMANAGER" = "xno"; then
+		PKG_CHECK_MODULES(LIBNM, libnm_glib >= $LIBNM_GLIB_REQUIRED, PK_BUILD_NETWORKMANAGER="yes", PK_BUILD_NETWORKMANAGER="no")
+	fi
 	if test "x$PK_BUILD_NETWORKMANAGER" = "xyes"; then
 		networking_apis="${networking_apis},NetworkManager"
 		AC_DEFINE(PK_BUILD_NETWORKMANAGER, 1, [define if NetworkManager is installed])
commit bb881b39fe7cffc16b9a5fc03cf0a75abc00c492
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 13:01:03 2009 +0100

    glib2: handle EULAs and repo-signatures in PkTask too

diff --git a/lib/packagekit-glib2/pk-task-wrapper.c b/lib/packagekit-glib2/pk-task-wrapper.c
index d63d6c9..c6d2e1e 100644
--- a/lib/packagekit-glib2/pk-task-wrapper.c
+++ b/lib/packagekit-glib2/pk-task-wrapper.c
@@ -21,12 +21,13 @@
 
 #include "config.h"
 
-#include <packagekit-glib2/pk-task-wrapper.h>
 #include <packagekit-glib2/pk-enum.h>
 #include <packagekit-glib2/pk-results.h>
 
 #include "egg-debug.h"
 
+#include "pk-task-wrapper.h"
+
 static void     pk_task_wrapper_finalize	(GObject     *object);
 
 #define PK_TASK_WRAPPER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PK_TYPE_TASK_WRAPPER, PkTaskWrapperPrivate))
@@ -57,7 +58,7 @@ dkp_task_wrapper_untrusted_question (PkTask *task, guint request, const PkResult
 	g_print ("UNTRUSTED\n");
 
 	/* just accept without asking */
-	pk_task_user_acceptance (task, request);
+	pk_task_user_accepted (task, request);
 }
 
 /**
@@ -89,7 +90,7 @@ dkp_task_wrapper_key_question (PkTask *task, guint request, const PkResults *res
 	}
 
 	/* just accept without asking */
-	pk_task_user_acceptance (task, request);
+	pk_task_user_accepted (task, request);
 
 	g_ptr_array_unref (array);
 }
@@ -120,7 +121,7 @@ dkp_task_wrapper_eula_question (PkTask *task, guint request, const PkResults *re
 	}
 
 	/* just accept without asking */
-	pk_task_user_acceptance (task, request);
+	pk_task_user_accepted (task, request);
 
 	g_ptr_array_unref (array);
 }
@@ -150,7 +151,7 @@ dkp_task_wrapper_media_change_question (PkTask *task, guint request, const PkRes
 	}
 
 	/* just accept without asking */
-	pk_task_user_acceptance (task, request);
+	pk_task_user_accepted (task, request);
 
 	g_ptr_array_unref (array);
 }
@@ -286,7 +287,7 @@ pk_task_wrapper_test (gpointer user_data)
 
 	/************************************************************/
 	egg_test_title (test, "install package");
-	package_ids = g_strsplit ("glib2;2.14.0;i386;fedora", ",", -1);
+	package_ids = g_strsplit ("vips-doc;7.12.4-2.fc8;noarch;linva", ",", -1);
 	pk_task_install_packages_async (PK_TASK (task), package_ids, NULL,
 				        (PkProgressCallback) pk_task_wrapper_test_progress_cb, test,
 				        (GAsyncReadyCallback) pk_task_wrapper_test_install_packages_cb, test);
diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c
index 3af390a..6708f9e 100644
--- a/lib/packagekit-glib2/pk-task.c
+++ b/lib/packagekit-glib2/pk-task.c
@@ -54,7 +54,7 @@ typedef struct {
 	gboolean			 only_trusted;
 	gchar				**package_ids;
 	GSimpleAsyncResult		*res;
-	const PkResults			*results;
+	PkResults			*results;
 	gboolean			 ret;
 	PkTask				*task;
 	GCancellable			*cancellable;
@@ -132,6 +132,8 @@ pk_task_generic_state_finish (PkTaskState *state, const GError *error)
 	g_ptr_array_remove (state->task->priv->array, state);
 
 	/* deallocate */
+	if (state->results != NULL)
+		g_object_unref (state->results);
 	g_strfreev (state->package_ids);
 	g_object_unref (state->res);
 	g_slice_free (PkTaskState, state);
@@ -156,29 +158,211 @@ pk_task_do_async_action (PkTaskState *state)
 }
 
 /**
- * pk_task_user_acceptance_idle_cb:
+ * pk_task_install_signatures_ready_cb:
+ **/
+static void
+pk_task_install_signatures_ready_cb (GObject *source_object, GAsyncResult *res, PkTaskState *state)
+{
+	PkTask *task = PK_TASK (source_object);
+	GError *error = NULL;
+	const PkResults *results;
+
+	/* old results no longer valid */
+	if (state->results != NULL)
+		g_object_unref (state->results);
+
+	/* get the results */
+	results = pk_client_generic_finish (PK_CLIENT(task), res, &error);
+	if (results == NULL) {
+		egg_warning ("failed to install signature: %s", error->message);
+		pk_task_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* we own a copy now */
+	state->results = g_object_ref (G_OBJECT(results));
+
+	/* get exit code */
+	state->exit_enum = pk_results_get_exit_code (state->results);
+
+	/* need untrusted */
+	if (state->exit_enum != PK_EXIT_ENUM_SUCCESS) {
+		error = g_error_new (PK_CLIENT_ERROR, PK_CLIENT_ERROR_FAILED, "failed to install signature");
+		pk_task_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* now try the action again */
+	pk_task_do_async_action (state);
+out:
+	return;
+}
+
+/**
+ * pk_task_install_signatures:
+ **/
+static void
+pk_task_install_signatures (PkTaskState *state)
+{
+	GError *error = NULL;
+	GPtrArray *array;
+	const PkResultItemRepoSignatureRequired *item;
+
+	/* get results */
+	array = pk_results_get_repo_signature_required_array (state->results);
+	if (array == NULL)
+		egg_error ("failed to get signatures, fatal error");
+
+	/* did we get no results? */
+	if (array->len == 0) {
+		error = g_error_new (PK_CLIENT_ERROR, PK_CLIENT_ERROR_FAILED, "no signatures to install");
+		pk_task_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* did we get more than result? */
+	if (array->len > 1) {
+		/* TODO: support more than one signature */
+		error = g_error_new (PK_CLIENT_ERROR, PK_CLIENT_ERROR_FAILED, "more than one signature to install");
+		pk_task_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* get first item of data */
+	item = g_ptr_array_index (array, 0);
+
+	/* do new async method */
+	pk_client_install_signature_async (PK_CLIENT(state->task), item->type, item->key_id, item->package_id,
+					   state->cancellable, state->progress_callback, state->progress_user_data,
+					   (GAsyncReadyCallback) pk_task_install_signatures_ready_cb, state);
+out:
+	g_ptr_array_unref (array);
+}
+
+/**
+ * pk_task_accept_eulas_ready_cb:
+ **/
+static void
+pk_task_accept_eulas_ready_cb (GObject *source_object, GAsyncResult *res, PkTaskState *state)
+{
+	PkTask *task = PK_TASK (source_object);
+	GError *error = NULL;
+	const PkResults *results;
+
+	/* old results no longer valid */
+	if (state->results != NULL)
+		g_object_unref (state->results);
+
+	/* get the results */
+	results = pk_client_generic_finish (PK_CLIENT(task), res, &error);
+	if (results == NULL) {
+		egg_warning ("failed to accept eula: %s", error->message);
+		pk_task_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* we own a copy now */
+	state->results = g_object_ref (G_OBJECT(results));
+
+	/* get exit code */
+	state->exit_enum = pk_results_get_exit_code (state->results);
+
+	/* need untrusted */
+	if (state->exit_enum != PK_EXIT_ENUM_SUCCESS) {
+		error = g_error_new (PK_CLIENT_ERROR, PK_CLIENT_ERROR_FAILED, "failed to accept eula");
+		pk_task_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* now try the action again */
+	pk_task_do_async_action (state);
+out:
+	return;
+}
+
+/**
+ * pk_task_accept_eulas:
+ **/
+static void
+pk_task_accept_eulas (PkTaskState *state)
+{
+	GError *error = NULL;
+	GPtrArray *array;
+	const PkResultItemEulaRequired *item;
+
+	/* get results */
+	array = pk_results_get_eula_required_array (state->results);
+	if (array == NULL)
+		egg_error ("failed to get eulas, fatal error");
+
+	/* did we get no results? */
+	if (array->len == 0) {
+		error = g_error_new (PK_CLIENT_ERROR, PK_CLIENT_ERROR_FAILED, "no eulas to accept");
+		pk_task_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* did we get more than result? */
+	if (array->len > 1) {
+		/* TODO: support more than one eula */
+		error = g_error_new (PK_CLIENT_ERROR, PK_CLIENT_ERROR_FAILED, "more than one eula to accept");
+		pk_task_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* get first item of data */
+	item = g_ptr_array_index (array, 0);
+
+	/* do new async method */
+	pk_client_accept_eula_async (PK_CLIENT(state->task), item->eula_id,
+				     state->cancellable, state->progress_callback, state->progress_user_data,
+				     (GAsyncReadyCallback) pk_task_accept_eulas_ready_cb, state);
+out:
+	g_ptr_array_unref (array);
+}
+
+/**
+ * pk_task_user_accepted_idle_cb:
  **/
 static gboolean
-pk_task_user_acceptance_idle_cb (PkTaskState *state)
+pk_task_user_accepted_idle_cb (PkTaskState *state)
 {
-	if (state->exit_enum == PK_EXIT_ENUM_KEY_REQUIRED)
-		egg_error ("need to do install-sig");
-	if (state->exit_enum == PK_EXIT_ENUM_EULA_REQUIRED)
-		egg_error ("need to do accept-eula");
+	/* this needs another step in the dance */
+	if (state->exit_enum == PK_EXIT_ENUM_KEY_REQUIRED) {
+		egg_debug ("need to do install-sig");
+		pk_task_install_signatures (state);
+		goto out;
+	}
+
+	/* this needs another step in the dance */
+	if (state->exit_enum == PK_EXIT_ENUM_EULA_REQUIRED) {
+		egg_debug ("need to do accept-eula");
+		pk_task_accept_eulas (state);
+		goto out;
+	}
 
 	/* doing task */
 	egg_debug ("continuing with request %i", state->request);
 	pk_task_do_async_action (state);
 
+out:
 	/* never repeat */
 	return FALSE;
 }
 
 /**
- * pk_task_user_acceptance:
+ * pk_task_user_accepted:
  **/
 gboolean
-pk_task_user_acceptance (PkTask *task, guint request)
+pk_task_user_accepted (PkTask *task, guint request)
 {
 	PkTaskState *state;
 
@@ -189,7 +373,44 @@ pk_task_user_acceptance (PkTask *task, guint request)
 		return FALSE;
 	}
 
-	g_idle_add ((GSourceFunc) pk_task_user_acceptance_idle_cb, state);
+	g_idle_add ((GSourceFunc) pk_task_user_accepted_idle_cb, state);
+	return TRUE;
+}
+
+/**
+ * pk_task_user_declined_idle_cb:
+ **/
+static gboolean
+pk_task_user_declined_idle_cb (PkTaskState *state)
+{
+	GError *error;
+
+	/* doing task */
+	egg_debug ("declined request %i", state->request);
+	error = g_error_new (PK_CLIENT_ERROR, PK_CLIENT_ERROR_FAILED, "user declined interaction");
+	pk_task_generic_state_finish (state, error);
+	g_error_free (error);
+
+	/* never repeat */
+	return FALSE;
+}
+
+/**
+ * pk_task_user_declined:
+ **/
+gboolean
+pk_task_user_declined (PkTask *task, guint request)
+{
+	PkTaskState *state;
+
+	/* get the not-yet-completed request */
+	state = pk_task_find_by_request (task, request);
+	if (state == NULL) {
+		egg_warning ("request %i not found", request);
+		return FALSE;
+	}
+
+	g_idle_add ((GSourceFunc) pk_task_user_declined_idle_cb, state);
 	return TRUE;
 }
 
@@ -202,16 +423,24 @@ pk_task_ready_cb (GObject *source_object, GAsyncResult *res, PkTaskState *state)
 	PkTask *task = PK_TASK (source_object);
 	PkTaskClass *klass = PK_TASK_GET_CLASS (task);
 	GError *error = NULL;
+	const PkResults *results;
+
+	/* old results no longer valid */
+	if (state->results != NULL)
+		g_object_unref (state->results);
 
 	/* get the results */
-	state->results = pk_client_generic_finish (PK_CLIENT(task), res, &error);
-	if (state->results == NULL) {
+	results = pk_client_generic_finish (PK_CLIENT(task), res, &error);
+	if (results == NULL) {
 		egg_warning ("failed to resolve: %s", error->message);
 		pk_task_generic_state_finish (state, error);
 		g_error_free (error);
 		goto out;
 	}
 
+	/* we own a copy now */
+	state->results = g_object_ref (G_OBJECT(results));
+
 	/* get exit code */
 	state->exit_enum = pk_results_get_exit_code (state->results);
 
@@ -221,7 +450,8 @@ pk_task_ready_cb (GObject *source_object, GAsyncResult *res, PkTaskState *state)
 
 		/* no support */
 		if (klass->untrusted_question == NULL) {
-			error = g_error_new (1, 0, "could not do untrusted question as no klass support");
+			error = g_error_new (PK_CLIENT_ERROR, PK_CLIENT_ERROR_NOT_SUPPORTED,
+					     "could not do untrusted question as no klass support");
 			pk_task_generic_state_finish (state, error);
 			g_error_free (error);
 			goto out;
@@ -236,7 +466,8 @@ pk_task_ready_cb (GObject *source_object, GAsyncResult *res, PkTaskState *state)
 	if (state->exit_enum == PK_EXIT_ENUM_KEY_REQUIRED) {
 		/* no support */
 		if (klass->key_question == NULL) {
-			error = g_error_new (1, 0, "could not do key question as no klass support");
+			error = g_error_new (PK_CLIENT_ERROR, PK_CLIENT_ERROR_NOT_SUPPORTED,
+					     "could not do key question as no klass support");
 			pk_task_generic_state_finish (state, error);
 			g_error_free (error);
 			goto out;
@@ -251,7 +482,8 @@ pk_task_ready_cb (GObject *source_object, GAsyncResult *res, PkTaskState *state)
 	if (state->exit_enum == PK_EXIT_ENUM_EULA_REQUIRED) {
 		/* no support */
 		if (klass->eula_question == NULL) {
-			error = g_error_new (1, 0, "could not do eula question as no klass support");
+			error = g_error_new (PK_CLIENT_ERROR, PK_CLIENT_ERROR_NOT_SUPPORTED,
+					     "could not do eula question as no klass support");
 			pk_task_generic_state_finish (state, error);
 			g_error_free (error);
 			goto out;
@@ -266,7 +498,8 @@ pk_task_ready_cb (GObject *source_object, GAsyncResult *res, PkTaskState *state)
 	if (state->exit_enum == PK_EXIT_ENUM_MEDIA_CHANGE_REQUIRED) {
 		/* no support */
 		if (klass->media_change_question == NULL) {
-			error = g_error_new (1, 0, "could not do media change question as no klass support");
+			error = g_error_new (PK_CLIENT_ERROR, PK_CLIENT_ERROR_NOT_SUPPORTED,
+					     "could not do media change question as no klass support");
 			pk_task_generic_state_finish (state, error);
 			g_error_free (error);
 			goto out;
diff --git a/lib/packagekit-glib2/pk-task.h b/lib/packagekit-glib2/pk-task.h
index f529f36..57a2efd 100644
--- a/lib/packagekit-glib2/pk-task.h
+++ b/lib/packagekit-glib2/pk-task.h
@@ -102,7 +102,9 @@ void		 pk_task_install_packages_async		(PkTask			*task,
  *    pk_task_remove_packages_async
  *    pk_task_update_packages_async
  */
-gboolean	 pk_task_user_acceptance		(PkTask			*task,
+gboolean	 pk_task_user_accepted			(PkTask			*task,
+							 guint			 request);
+gboolean	 pk_task_user_declined			(PkTask			*task,
 							 guint			 request);
 
 G_END_DECLS
commit 08556da40284519a912f2f0a7c354015d40a3434
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 12:21:53 2009 +0100

    pkcon: remove the trailing newline from fgetc so multiple requests work

diff --git a/client/pk-text.c b/client/pk-text.c
index 8793ec9..27d5b85 100644
--- a/client/pk-text.c
+++ b/client/pk-text.c
@@ -59,6 +59,7 @@ gboolean
 pk_console_get_prompt (const gchar *question, gboolean defaultyes)
 {
 	gchar answer = '\0';
+	gboolean ret = FALSE;
 
 	/* pretty print */
 	g_print ("%s", question);
@@ -69,23 +70,31 @@ pk_console_get_prompt (const gchar *question, gboolean defaultyes)
 
 	do {
 		/* ITS4: ignore, we are copying into the same variable, not a string */
-		answer = (gchar) getchar();
+		answer = (gchar) fgetc (stdin);
 
 		/* positive */
-		if (answer == 'y' || answer == 'Y')
-			return TRUE;
+		if (answer == 'y' || answer == 'Y') {
+			ret = TRUE;
+			break;
+		}
 		/* negative */
 		if (answer == 'n' || answer == 'N')
-			return FALSE;
+			break;
 
 		/* default choice */
-		if (answer == '\n' && defaultyes)
-			return TRUE;
+		if (answer == '\n' && defaultyes) {
+			ret = TRUE;
+			break;
+		}
 		if (answer == '\n' && !defaultyes)
-			return FALSE;
+			break;
 	} while (TRUE);
 
-	/* keep GCC happy */
-	return FALSE;
+	/* remove the trailing \n */
+	answer = (gchar) fgetc (stdin);
+	if (answer != '\n')
+		ungetc (answer, stdin);
+
+	return ret;
 }
 
commit 3b833d4d494717028919bc910ee375d9c837ccb0
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 11:44:13 2009 +0100

    glib2: add some of the pk_package_id_x helpers from glib1

diff --git a/lib/packagekit-glib2/Makefile.am b/lib/packagekit-glib2/Makefile.am
index e8d6af2..9e34f70 100644
--- a/lib/packagekit-glib2/Makefile.am
+++ b/lib/packagekit-glib2/Makefile.am
@@ -65,6 +65,8 @@ libpackagekit_glib2_la_SOURCES =				\
 	pk-marshal.h						\
 	pk-package.c						\
 	pk-package.h						\
+	pk-package-id.c						\
+	pk-package-id.h						\
 	pk-package-sack.c					\
 	pk-package-sack.h					\
 	pk-progress.c						\
diff --git a/lib/packagekit-glib2/packagekit.h b/lib/packagekit-glib2/packagekit.h
index ef83613..d1baec7 100644
--- a/lib/packagekit-glib2/packagekit.h
+++ b/lib/packagekit-glib2/packagekit.h
@@ -29,6 +29,7 @@
 #include <packagekit-glib2/pk-control.h>
 #include <packagekit-glib2/pk-control-sync.h>
 #include <packagekit-glib2/pk-enum.h>
+#include <packagekit-glib2/pk-package-id.h>
 #include <packagekit-glib2/pk-package-sack.h>
 #include <packagekit-glib2/pk-results.h>
 #include <packagekit-glib2/pk-task.h>
diff --git a/lib/packagekit-glib2/pk-package-id.c b/lib/packagekit-glib2/pk-package-id.c
new file mode 100644
index 0000000..2424376
--- /dev/null
+++ b/lib/packagekit-glib2/pk-package-id.c
@@ -0,0 +1,309 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007-2009 Richard Hughes <richard at 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.
+ */
+
+/**
+ * SECTION:pk-package-id
+ * @short_description: Functionality to read a PackageID
+ */
+
+#include "config.h"
+
+#include "egg-debug.h"
+
+#include <packagekit-glib2/pk-package-id.h>
+
+/**
+ * pk_package_id_split:
+ * @package_id: the ; delimited PackageID to split
+ *
+ * Splits a PackageID into the correct number of parts, checking the correct
+ * number of delimiters are present.
+ *
+ * Return value: a GStrv or %NULL if invalid, use g_strfreev() to free
+ **/
+gchar **
+pk_package_id_split (const gchar *package_id)
+{
+	gchar **sections = NULL;
+
+	if (package_id == NULL)
+		goto out;
+
+	/* split by delimeter ';' */
+	sections = g_strsplit (package_id, ";", -1);
+	if (g_strv_length (sections) != 4)
+		goto out;
+
+	/* name has to be valid */
+	if (sections[0][0] != '\0')
+		return sections;
+out:
+	g_strfreev (sections);
+	return NULL;
+}
+
+/**
+ * pk_package_id_check:
+ * @package_id: the PackageID to check
+ *
+ * Return value: %TRUE if the PackageID was well formed.
+ **/
+gboolean
+pk_package_id_check (const gchar *package_id)
+{
+	gchar **sections;
+	gboolean ret;
+
+	/* NULL check */
+	if (package_id == NULL)
+		return FALSE;
+
+	/* UTF8 */
+	ret = g_utf8_validate (package_id, -1, NULL);
+	if (!ret) {
+		egg_warning ("invalid UTF8!");
+		return FALSE;
+	}
+
+	/* correct number of sections */
+	sections = pk_package_id_split (package_id);
+	if (sections == NULL)
+		return FALSE;
+
+	/* all okay */
+	g_strfreev (sections);
+	return TRUE;
+}
+
+/**
+ * pk_package_id_build:
+ * @name: the package name
+ * @version: the package version
+ * @arch: the package architecture
+ * @data: the package extra data
+ *
+ * Return value: returns a string to form the PackageID.
+ **/
+gchar *
+pk_package_id_build (const gchar *name, const gchar *version,
+		     const gchar *arch, const gchar *data)
+{
+	g_return_val_if_fail (name != NULL, NULL);
+	return g_strdup_printf ("%s;%s;%s;%s", name,
+				version != NULL ? version : "",
+				arch != NULL ? arch : "",
+				data != NULL ? data : "");
+}
+
+/**
+ * pk_arch_base_ix86:
+ **/
+static gboolean
+pk_arch_base_ix86 (const gchar *arch)
+{
+	if (g_strcmp0 (arch, "i386") == 0 ||
+	    g_strcmp0 (arch, "i486") == 0 ||
+	    g_strcmp0 (arch, "i586") == 0 ||
+	    g_strcmp0 (arch, "i686") == 0)
+		return TRUE;
+	return FALSE;
+}
+
+/**
+ * pk_package_id_equal_fuzzy_arch_section:
+ **/
+static gboolean
+pk_package_id_equal_fuzzy_arch_section (const gchar *arch1, const gchar *arch2)
+{
+	if (g_strcmp0 (arch1, arch2) == 0)
+		return TRUE;
+	if (pk_arch_base_ix86 (arch1) && pk_arch_base_ix86 (arch2))
+		return TRUE;
+	return FALSE;
+}
+
+/**
+ * pk_package_id_equal_fuzzy_arch:
+ * @package_id1: the first PackageID
+ * @package_id2: the second PackageID
+ *
+ * Only compare the name, version, and arch, where the architecture will fuzzy
+ * match with i*86.
+ *
+ * Return value: %TRUE if the PackageIDs can be considered equal.
+ **/
+gboolean
+pk_package_id_equal_fuzzy_arch (const gchar *package_id1, const gchar *package_id2)
+{
+	gchar **sections1;
+	gchar **sections2;
+	gboolean ret = FALSE;
+
+	sections1 = pk_package_id_split (package_id1);
+	sections2 = pk_package_id_split (package_id2);
+	if (g_strcmp0 (sections1[0], sections2[0]) == 0 &&
+	    g_strcmp0 (sections1[1], sections2[1]) == 0 &&
+	    pk_package_id_equal_fuzzy_arch_section (sections1[2], sections2[2]))
+		ret = TRUE;
+
+	g_strfreev (sections1);
+	g_strfreev (sections2);
+	return ret;
+}
+
+/**
+ * pk_package_id_to_printable:
+ * @package_id: the PackageID
+ *
+ * Formats the PackageID to be printable to the user.
+ *
+ * Return value: the name-version.arch formatted string, use g_free() to free.
+ **/
+gchar *
+pk_package_id_to_printable (const gchar *package_id)
+{
+	gchar **split = NULL;
+	gchar *value = NULL;
+
+	/* invalid */
+	if (package_id == NULL)
+		goto out;
+
+	/* split */
+	split = pk_package_id_split (package_id);
+	if (split == NULL)
+		goto out;
+
+	/* form name-version.arch */
+	value = g_strdup_printf ("%s-%s.%s", split[0], split[1], split[2]);
+out:
+	g_strfreev (split);
+	return value;
+}
+
+/***************************************************************************
+ ***                          MAKE CHECK TESTS                           ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+pk_package_id_test (gpointer user_data)
+{
+	EggTest *test = (EggTest *) user_data;
+	gboolean ret;
+	gchar *text;
+	gchar **sections;
+
+	if (!egg_test_start (test, "PkPackageId"))
+		return;
+
+	/************************************************************/
+	egg_test_title (test, "check not valid - NULL");
+	ret = pk_package_id_check (NULL);
+	egg_test_assert (test, !ret);
+
+	/************************************************************/
+	egg_test_title (test, "check not valid - no name");
+	ret = pk_package_id_check (";0.0.1;i386;fedora");
+	egg_test_assert (test, !ret);
+
+	/************************************************************/
+	egg_test_title (test, "check not valid - invalid");
+	ret = pk_package_id_check ("moo;0.0.1;i386");
+	egg_test_assert (test, !ret);
+
+	/************************************************************/
+	egg_test_title (test, "check valid");
+	ret = pk_package_id_check ("moo;0.0.1;i386;fedora");
+	egg_test_assert (test, ret);
+
+	/************************************************************/
+	egg_test_title (test, "id build");
+	text = pk_package_id_build ("moo", "0.0.1", "i386", "fedora");
+	if (g_strcmp0 (text, "moo;0.0.1;i386;fedora") == 0)
+		egg_test_success (test, NULL);
+	else
+		egg_test_failed (test, NULL);
+	g_free (text);
+
+	egg_test_title (test, "id build partial");
+	text = pk_package_id_build ("moo", NULL, NULL, NULL);
+	if (g_strcmp0 (text, "moo;;;") == 0)
+		egg_test_success (test, NULL);
+	else
+		egg_test_failed (test, "got '%s', expected '%s'", text, "moo;;;");
+	g_free (text);
+
+	/************************************************************/
+	egg_test_title (test, "test printable");
+	text = pk_package_id_to_printable ("moo;0.0.1;i386;fedora");
+	if (g_strcmp0 (text, "moo-0.0.1.i386") == 0)
+		egg_test_success (test, NULL);
+	else
+		egg_test_failed (test, "printable is '%s'", text);
+	g_free (text);
+
+	/************************************************************/
+	egg_test_title (test, "test on real packageid");
+	sections = pk_package_id_split ("kde-i18n-csb;4:3.5.8~pre20071001-0ubuntu1;all;");
+	if (sections != NULL &&
+	    g_strcmp0 (sections[0], "kde-i18n-csb") == 0 &&
+	    g_strcmp0 (sections[1], "4:3.5.8~pre20071001-0ubuntu1") == 0 &&
+	    g_strcmp0 (sections[2], "all") == 0 &&
+	    g_strcmp0 (sections[3], "") == 0)
+		egg_test_success (test, NULL);
+	else
+		egg_test_failed (test, "got %s, %s, %s, %s", sections[0], sections[1], sections[2], sections[3]);
+	g_strfreev (sections);
+
+	/************************************************************/
+	egg_test_title (test, "test on short packageid");
+	sections = pk_package_id_split ("kde-i18n-csb;4:3.5.8~pre20071001-0ubuntu1;;");
+	if (sections != NULL &&
+	    g_strcmp0 (sections[0], "kde-i18n-csb") == 0 &&
+	    g_strcmp0 (sections[1], "4:3.5.8~pre20071001-0ubuntu1") == 0 &&
+	    g_strcmp0 (sections[2], "") == 0 &&
+	    g_strcmp0 (sections[3], "") == 0)
+		egg_test_success (test, NULL);
+	else
+		egg_test_failed (test, "got %s, %s, %s, %s", sections[0], sections[1], sections[2], sections[3]);
+	g_strfreev (sections);
+
+	/************************************************************/
+	egg_test_title (test, "test fail under");
+	sections = pk_package_id_split ("foo;moo");
+	egg_test_assert (test, sections == NULL);
+
+	/************************************************************/
+	egg_test_title (test, "test fail over");
+	sections = pk_package_id_split ("foo;moo;dave;clive;dan");
+	egg_test_assert (test, sections == NULL);
+
+	/************************************************************/
+	egg_test_title (test, "test fail missing first");
+	sections = pk_package_id_split (";0.1.2;i386;data");
+	egg_test_assert (test, sections == NULL);
+
+	egg_test_end (test);
+}
+#endif
+
diff --git a/lib/packagekit-glib2/pk-package-id.h b/lib/packagekit-glib2/pk-package-id.h
new file mode 100644
index 0000000..0bb2e0d
--- /dev/null
+++ b/lib/packagekit-glib2/pk-package-id.h
@@ -0,0 +1,46 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007-2008 Richard Hughes <richard at 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.
+ */
+
+#if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
+#error "Only <packagekit.h> can be included directly."
+#endif
+
+#ifndef __PK_PACKAGE_ID_H
+#define __PK_PACKAGE_ID_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+void		 pk_package_id_test			(gpointer		 user_data);
+gchar		*pk_package_id_build			(const gchar		*name,
+							 const gchar		*version,
+							 const gchar		*arch,
+							 const gchar		*data);
+gboolean	 pk_package_id_check			(const gchar		*package_id);
+gchar		**pk_package_id_split			(const gchar		*package_id);
+gchar		*pk_package_id_to_printable		(const gchar		*package_id);
+gboolean	 pk_package_id_equal_fuzzy_arch		(const gchar		*package_id1,
+							 const gchar		*package_id2);
+G_END_DECLS
+
+#endif /* __PK_PACKAGE_ID_H */
+
diff --git a/lib/packagekit-glib2/pk-self-test.c b/lib/packagekit-glib2/pk-self-test.c
index 7c103cb..9ccf59d 100644
--- a/lib/packagekit-glib2/pk-self-test.c
+++ b/lib/packagekit-glib2/pk-self-test.c
@@ -31,6 +31,8 @@
 #include "pk-control.h"
 #include "pk-control-sync.h"
 #include "pk-enum.h"
+#include "pk-package.h"
+#include "pk-package-id.h"
 #include "pk-package-sack.h"
 #include "pk-results.h"
 #include "pk-task.h"
@@ -51,6 +53,7 @@ main (int argc, char **argv)
 	pk_common_test (test);
 	pk_enum_test (test);
 	pk_bitfield_test (test);
+	pk_package_id_test (test);
 	pk_progress_test (test);
 	pk_results_test (test);
 	pk_package_test (test);
commit 0bd29f2054f0c086235834aa35feb54bd48f99f8
Author: rajesh <rajesh at fedoraproject.org>
Date:   Thu Sep 3 10:20:35 2009 +0000

    Sending translation for Hindi

diff --git a/po/hi.po b/po/hi.po
index a008737..4fdcf2e 100644
--- a/po/hi.po
+++ b/po/hi.po
@@ -1,21 +1,21 @@
-# translation of packagekit.master.PackageKit.po to Hindi
+# translation of packagekit.master.po to Hindi
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 #
 # Rajesh Ranjan <rajesh672 at gmail.com>, 2009.
 msgid ""
 msgstr ""
-"Project-Id-Version: packagekit.master.PackageKit\n"
+"Project-Id-Version: packagekit.master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-08-24 11:06+0100\n"
-"PO-Revision-Date: 2009-05-27 16:31+0530\n"
+"POT-Creation-Date: 2009-09-02 02:37+0000\n"
+"PO-Revision-Date: 2009-09-03 15:50+0530\n"
 "Last-Translator: Rajesh Ranjan <rajesh672 at gmail.com>\n"
 "Language-Team: Hindi <hindi.sf.net>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n\n"
 "\n"
 
 #. TRANSLATORS: this is an atomic transaction
@@ -33,12 +33,11 @@ msgstr "सिस्टम समय"
 msgid "Succeeded"
 msgstr "सफल"
 
-#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:239 ../client/pk-console.c:406
+#: ../client/pk-console.c:239
 msgid "True"
 msgstr "सही"
 
-#: ../client/pk-console.c:239 ../client/pk-console.c:406
+#: ../client/pk-console.c:239
 msgid "False"
 msgstr "गलत"
 
@@ -86,452 +85,495 @@ msgstr "प्रभावित संकुल:"
 msgid "Affected packages: None"
 msgstr "प्रभावित संकुल: कुछ नहीं"
 
+#. TRANSLATORS: When processing, we might have to remove other dependencies
+#: ../client/pk-console.c:334
+msgid "The following packages have to be removed:"
+msgstr "निम्नलिखित संकुल को हटाया जाने वाला है:"
+
+#. TRANSLATORS: When processing, we might have to install other dependencies
+#: ../client/pk-console.c:337
+msgid "The following packages have to be installed:"
+msgstr "निम्नलिखित संकुल को संस्थापित किया जाने वाला है:"
+
+#. TRANSLATORS: When processing, we might have to update other dependencies
+#: ../client/pk-console.c:340
+msgid "The following packages have to be updated:"
+msgstr "निम्नलिखित संकुल को अद्यतन किया जाना है:"
+
+#. TRANSLATORS: When processing, we might have to reinstall other dependencies
+#: ../client/pk-console.c:343
+msgid "The following packages have to be reinstalled:"
+msgstr "निम्नलिखित संकुल को फिर संस्थापित किया जाने वाला है:"
+
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../client/pk-console.c:346
+msgid "The following packages have to be downgraded:"
+msgstr "निम्नलिखित संकुल को फिर पदावनत किया जाने वाला है:"
+
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:298
+#: ../client/pk-console.c:360
 msgid "Distribution"
 msgstr "वितरण"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:300
+#: ../client/pk-console.c:362
 msgid "Type"
 msgstr "क़िस्म"
 
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:302 ../client/pk-console.c:325
+#: ../client/pk-console.c:364 ../client/pk-console.c:387
 msgid "Summary"
 msgstr "सारांश"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:314
+#: ../client/pk-console.c:376
 msgid "Category"
 msgstr "श्रेणी"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:316
+#: ../client/pk-console.c:378
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:319
+#: ../client/pk-console.c:381
 msgid "Parent"
 msgstr "पैरेंट"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:322
+#: ../client/pk-console.c:384
 msgid "Name"
 msgstr "नाम"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:328
+#: ../client/pk-console.c:390
 msgid "Icon"
 msgstr "प्रतीक"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:343
+#: ../client/pk-console.c:405
 msgid "Details about the update:"
 msgstr "अद्यतन के बारे में विवरण:"
 
 #. TRANSLATORS: details about the update, package name and version
 #. TRANSLATORS: title, the names of the packages that the method is processing
-#: ../client/pk-console.c:345 ../src/pk-polkit-action-lookup.c:352
-#, fuzzy
+#: ../client/pk-console.c:407 ../src/pk-polkit-action-lookup.c:352
 msgid "Package"
 msgid_plural "Packages"
-msgstr[0] "पैकेज"
-msgstr[1] "पैकेज"
+msgstr[0] "संकुल"
+msgstr[1] "संकुल"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:348
+#: ../client/pk-console.c:410
 msgid "Updates"
 msgstr "अद्यतन"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:352
+#: ../client/pk-console.c:414
 msgid "Obsoletes"
 msgstr "पुराना"
 
 #. TRANSLATORS: details about the update, the vendor URLs
-#: ../client/pk-console.c:356
+#: ../client/pk-console.c:418
 msgid "Vendor"
 msgstr "विक्रेता"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:360
+#: ../client/pk-console.c:422
 msgid "Bugzilla"
 msgstr "बगजिला"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:364
+#: ../client/pk-console.c:426
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:368
+#: ../client/pk-console.c:430
 msgid "Restart"
 msgstr "फिर से  चालू करें"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:372
+#: ../client/pk-console.c:434
 msgid "Update text"
 msgstr "पाठ अद्यतन करें"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:376
+#: ../client/pk-console.c:438
 msgid "Changes"
 msgstr "परिवर्तन"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:380
+#: ../client/pk-console.c:442
 msgid "State"
 msgstr "स्थिति"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:385
+#: ../client/pk-console.c:447
 msgid "Issued"
 msgstr "निर्गत"
 
 #. TRANSLATORS: details about the update, date the update was updated
-#: ../client/pk-console.c:390
+#: ../client/pk-console.c:452
 msgid "Updated"
 msgstr "अद्यतन किया गया"
 
-#: ../client/pk-console.c:477 ../client/pk-console.c:479
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:472
+msgid "Enabled"
+msgstr "सक्षम"
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:475
+msgid "Disabled"
+msgstr "अक्षम"
+
+#: ../client/pk-console.c:552 ../client/pk-console.c:554
 msgid "Percentage"
 msgstr "प्रतिशत"
 
-#: ../client/pk-console.c:479
+#: ../client/pk-console.c:554
 msgid "Unknown"
 msgstr "अज्ञात"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:521
+#: ../client/pk-console.c:596
 msgid "System restart required by:"
 msgstr "तंत्र पुनःप्रारंभ इनके द्वारा जरूरी:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:524
+#: ../client/pk-console.c:599
 msgid "Session restart required:"
 msgstr "सत्र पुनःप्रारंभ जरूरी:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:527
-#, fuzzy
+#: ../client/pk-console.c:602
 msgid "System restart (security) required by:"
-msgstr "तंत्र पुनःप्रारंभ इनके द्वारा जरूरी:"
+msgstr "तंत्र पुनःप्रारंभ (सुरक्षा) इनके द्वारा जरूरी:"
 
 #. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:530
-#, fuzzy
+#: ../client/pk-console.c:605
 msgid "Session restart (security) required:"
-msgstr "सत्र पुनःप्रारंभ जरूरी:"
+msgstr "तंत्र पुनःप्रारंभ (सुरक्षा) जरूरी:"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:533
+#: ../client/pk-console.c:608
 msgid "Application restart required by:"
 msgstr "अनुप्रयोग पुनःप्रारंभ इसके द्वारा जरूरी:"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:588
+#: ../client/pk-console.c:663
 msgid "Please restart the computer to complete the update."
 msgstr "कृपया अद्यतन पूरी करने के लिए कंप्यूटर पुनःप्रारंभ करें."
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:591
+#: ../client/pk-console.c:666
 msgid "Please logout and login to complete the update."
 msgstr "कृपया अद्यतन पूरा करने के लिए लॉगआउट और लॉगिन करें"
 
 #. TRANSLATORS: a package needs to restart the application
-#: ../client/pk-console.c:594
+#: ../client/pk-console.c:669
 msgid "Please restart the application as it is being used."
 msgstr "कृपया अनुप्रयोग पुनःप्रारंभ करें जैसा यह प्रयुक्त हो रहा है."
 
 #. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:597
-#, fuzzy
+#: ../client/pk-console.c:672
 msgid ""
 "Please restart the computer to complete the update as important security "
 "updates have been installed."
-msgstr "कृपया अद्यतन पूरी करने के लिए कंप्यूटर पुनःप्रारंभ करें."
+msgstr "कृपया अद्यतन पूरी करने के लिए कंप्यूटर पुनःप्रारंभ करें क्योंकि कोई महत्वपूर्ण सुरक्षा अद्यतन को संस्थापित किया जाना है."
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:600
-#, fuzzy
+#: ../client/pk-console.c:675
 msgid ""
 "Please logout and login to complete the update as important security updates "
 "have been installed."
-msgstr "कृपया अद्यतन पूरा करने के लिए लॉगआउट और लॉगिन करें"
+msgstr "कृपया अद्यतन पूरी करने के लिए लॉगआउट व लॉगिन होएँ क्योंकि किसी महत्वपूर्ण सुरक्षा अद्यतन को संस्थापित किया जाना है."
 
 #. TRANSLATORS: The package is already installed on the system
-#: ../client/pk-console.c:727
+#: ../client/pk-console.c:807
 #, c-format
 msgid "The package %s is already installed"
 msgstr "यह संकुल %s पहले से संस्थापित है"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:735
+#: ../client/pk-console.c:815
 #, c-format
 msgid "The package %s could not be installed: %s"
 msgstr "संकुल %s संस्थापित नहीं किया जा सका: %s"
 
 #. TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows
-#: ../client/pk-console.c:760 ../client/pk-console.c:783
-#: ../client/pk-console.c:879 ../client/pk-console.c:996
-#: ../client/pk-tools-common.c:62 ../client/pk-tools-common.c:81
-#: ../client/pk-tools-common.c:89
+#: ../client/pk-console.c:841 ../client/pk-console.c:889
+#: ../client/pk-console.c:913 ../client/pk-console.c:961
+#: ../client/pk-console.c:1057 ../client/pk-console.c:1170
+#: ../client/pk-console.c:1231 ../client/pk-tools-common.c:62
+#: ../client/pk-tools-common.c:81 ../client/pk-tools-common.c:89
 #, c-format
 msgid "Internal error: %s"
 msgstr "आंतरिक त्रुटि: %s"
 
+#. TRANSLATORS: We are checking if it's okay to remove a list of packages
+#: ../client/pk-console.c:873 ../client/pk-console.c:945
+#: ../client/pk-console.c:1263
+msgid "Proceed with changes?"
+msgstr "परिवर्तन के साथ आगे बढ़ें?"
+
+#. TRANSLATORS: There was an error removing the packages. The detailed error follows
+#: ../client/pk-console.c:878 ../client/pk-console.c:950
+msgid "The package install was canceled!"
+msgstr "संकुल हटाया जाना रद्द किया गया था!"
+
 #. TRANSLATORS: There was an error installing the packages. The detailed error follows
-#: ../client/pk-console.c:768 ../client/pk-console.c:1392
+#: ../client/pk-console.c:897 ../client/pk-console.c:1631
 #, c-format
 msgid "This tool could not install the packages: %s"
 msgstr "यह औजार संकुल को नहीं संस्थापित कर सका: %s"
 
 #. TRANSLATORS: There was an error installing the files. The detailed error follows
-#: ../client/pk-console.c:791
+#: ../client/pk-console.c:969
 #, c-format
 msgid "This tool could not install the files: %s"
 msgstr "यह औज़ार फाइलों को नहीं संस्थापित कर सका: %s"
 
 #. TRANSLATORS: The package name was not found in the installed list. The detailed error follows
-#: ../client/pk-console.c:847
+#: ../client/pk-console.c:1025
 #, c-format
 msgid "This tool could not remove %s: %s"
 msgstr "यह औज़ार %s को हटा नहीं सका: %s"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:870 ../client/pk-console.c:908
-#: ../client/pk-console.c:941
+#: ../client/pk-console.c:1048 ../client/pk-console.c:1086
+#: ../client/pk-console.c:1115
 #, c-format
 msgid "This tool could not remove the packages: %s"
 msgstr "यह औज़ार संकुलों को हटा नहीं सका: %s"
 
-#. TRANSLATORS: When removing, we might have to remove other dependencies
-#: ../client/pk-console.c:920
-msgid "The following packages have to be removed:"
-msgstr "निम्नलिखित संकुल को हटाया जाने वाला है:"
-
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:927
-msgid "Proceed removing additional packages?"
-msgstr "अतिरिक्त संकुल को हटाना जारी रखें?"
+#: ../client/pk-console.c:1101
+msgid "Proceed with additional packages?"
+msgstr "अतिरिक्त संकुल के साथ आगे बढ़ें?"
 
-#. TRANSLATORS: We did not remove any packages
-#: ../client/pk-console.c:932
+#. TRANSLATORS: There was an error removing the packages. The detailed error follows
+#: ../client/pk-console.c:1106
 msgid "The package removal was canceled!"
 msgstr "संकुल हटाया जाना रद्द किया गया था!"
 
 #. TRANSLATORS: The package name was not found in any software sources
-#: ../client/pk-console.c:973
+#: ../client/pk-console.c:1147
 #, c-format
 msgid "This tool could not download the package %s as it could not be found"
 msgstr "यह औज़ार %s को डाउनलोड नहीं कर सका क्योंकि यह नहीं पाया जा सका"
 
 #. TRANSLATORS: Could not download the packages for some reason. The detailed error follows
-#: ../client/pk-console.c:1004
+#: ../client/pk-console.c:1178
 #, c-format
 msgid "This tool could not download the packages: %s"
 msgstr "यह औज़ार को डाउनलोड नहीं कर सका: %s "
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1031 ../client/pk-console.c:1040
+#: ../client/pk-console.c:1210 ../client/pk-console.c:1222
+#: ../client/pk-console.c:1277
 #, c-format
 msgid "This tool could not update %s: %s"
 msgstr "यह औज़ार %s को अद्यतन नहीं कर सका: %s"
 
+#. TRANSLATORS: There was an error removing the packages. The detailed error follows
+#: ../client/pk-console.c:1268
+msgid "The package update was canceled!"
+msgstr "संकुल अद्यतन रद्द किया गया था!"
+
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1062 ../client/pk-console.c:1070
+#: ../client/pk-console.c:1301 ../client/pk-console.c:1309
 #, c-format
 msgid "This tool could not get the requirements for %s: %s"
 msgstr "यह औज़ार %s के लिए जरूरतें नहीं पा सका: %s"
 
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
-#: ../client/pk-console.c:1092 ../client/pk-console.c:1100
+#: ../client/pk-console.c:1331 ../client/pk-console.c:1339
 #, c-format
 msgid "This tool could not get the dependencies for %s: %s"
 msgstr "यह औज़ार %s के लिए निर्भरता नहीं पा सका: %s"
 
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
-#: ../client/pk-console.c:1122 ../client/pk-console.c:1130
+#: ../client/pk-console.c:1361 ../client/pk-console.c:1369
 #, c-format
 msgid "This tool could not get package details for %s: %s"
 msgstr "यह औज़ार %s के लिए संकुल विवरण नहीं पा सका: %s"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1152
+#: ../client/pk-console.c:1391
 #, c-format
 msgid "This tool could not find the files for %s: %s"
 msgstr "यह औज़ार %s के लिए फ़ाइलें नहीं पा सका: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1160
+#: ../client/pk-console.c:1399
 #, c-format
 msgid "This tool could not get the file list for %s: %s"
 msgstr "यह औज़ार %s के लिए फ़ाइल सूची नहीं पा सका: %s"
 
 #. TRANSLATORS: There was an error getting the list of packages. The filename follows
-#: ../client/pk-console.c:1182
+#: ../client/pk-console.c:1421
 #, c-format
 msgid "File already exists: %s"
 msgstr "पहले से मौजूद है: %s"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1187 ../client/pk-console.c:1243
-#: ../client/pk-console.c:1318
+#: ../client/pk-console.c:1426 ../client/pk-console.c:1482
+#: ../client/pk-console.c:1557
 msgid "Getting package list"
 msgstr "पैकेज सूची पा रहा है"
 
 #. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
-#: ../client/pk-console.c:1193 ../client/pk-console.c:1249
-#: ../client/pk-console.c:1324
+#: ../client/pk-console.c:1432 ../client/pk-console.c:1488
+#: ../client/pk-console.c:1563
 #, c-format
 msgid "This tool could not get package list: %s"
 msgstr "यह औज़ार संकुल सूची नहीं पा सका: %s"
 
 #. TRANSLATORS: There was an error saving the list
-#: ../client/pk-console.c:1204
+#: ../client/pk-console.c:1443
 #, c-format
 msgid "Failed to save to disk"
 msgstr "डिस्क में सहेजने में विफल"
 
 #. TRANSLATORS: There was an error getting the list. The filename follows
-#: ../client/pk-console.c:1238 ../client/pk-console.c:1313
+#: ../client/pk-console.c:1477 ../client/pk-console.c:1552
 #, c-format
 msgid "File does not exist: %s"
 msgstr "फ़ाइल मौजूद नहीं है: %s"
 
 #. TRANSLATORS: header to a list of packages newly added
-#: ../client/pk-console.c:1270
+#: ../client/pk-console.c:1509
 msgid "Packages to add"
 msgstr "जोड़ने के लिए संकुल"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1278
+#: ../client/pk-console.c:1517
 msgid "Packages to remove"
 msgstr "हटाने के लिए संकुल"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1346
+#: ../client/pk-console.c:1585
 #, c-format
 msgid "No new packages need to be installed"
 msgstr "कोई नया संकुल संस्थापित होने के लिए नहीं"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1352
+#: ../client/pk-console.c:1591
 msgid "To install"
 msgstr "संस्थापित करने के लिए"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1364
+#: ../client/pk-console.c:1603
 msgid "Searching for package: "
 msgstr "संकुल के खोज रहा है: "
 
 #. TRANSLATORS: package was not found -- this is the end of a string ended in ...
-#: ../client/pk-console.c:1368
+#: ../client/pk-console.c:1607
 msgid "not found."
 msgstr "नहीं पाया."
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1379
+#: ../client/pk-console.c:1618
 #, c-format
 msgid "No packages can be found to install"
 msgstr "संस्थापित करने के लिए कोई संकुल नहीं मिला"
 
 #. TRANSLATORS: installing new packages from package list
 #. TRANSLATORS: we are now installing the debuginfo packages we found earlier
-#: ../client/pk-console.c:1385
+#: ../client/pk-console.c:1624
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:886
 #, c-format
 msgid "Installing packages"
 msgstr "संकुल अधिष्ठापित कर रहा है"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1421
+#: ../client/pk-console.c:1660
 #, c-format
 msgid "This tool could not find the update details for %s: %s"
 msgstr "यह औज़ार %s के लिए अद्यतन विवरण नहीं ढूँढ़ सका: %s"
 
 #. TRANSLATORS: There was an error getting the details about the update for the package. The detailed error follows
-#: ../client/pk-console.c:1429
+#: ../client/pk-console.c:1668
 #, c-format
 msgid "This tool could not get the update details for %s: %s"
 msgstr "यह औज़ार %s के लिए अद्यतन विवरण नहीं पा सका: %s"
 
 #. TRANSLATORS: This was an unhandled error, and we don't have _any_ context
-#: ../client/pk-console.c:1460
+#: ../client/pk-console.c:1699
 msgid "Error:"
 msgstr "त्रुटि:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1474
+#: ../client/pk-console.c:1713
 msgid "Package description"
 msgstr "संकुल विवरण"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:1490
+#: ../client/pk-console.c:1729
 msgid "Message:"
 msgstr "संदेशः"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1518
+#: ../client/pk-console.c:1757
 msgid "Package files"
 msgstr "संकुल फ़ाइल"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1526
+#: ../client/pk-console.c:1765
 msgid "No files"
 msgstr "कोई फ़ाइल नहीं"
 
 #. TRANSLATORS: This a request for a GPG key signature from the backend, which the client will prompt for later
-#: ../client/pk-console.c:1549
+#: ../client/pk-console.c:1788
 msgid "Repository signature required"
 msgstr "रिपोजिटरी हस्ताक्षर जरूरी"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
-#: ../client/pk-console.c:1559
+#: ../client/pk-console.c:1798
 msgid "Do you accept this signature?"
 msgstr "क्या आप यह हस्ताक्षर स्वीकार करते हैं?"
 
 #. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1563
+#: ../client/pk-console.c:1802
 msgid "The signature was not accepted."
 msgstr "हस्ताक्षर स्वीकार नहीं किया गया था."
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1597
+#: ../client/pk-console.c:1836
 msgid "End user license agreement required"
 msgstr "अंत्य उपयोक्ता लाइसेंस मसौदा जरूरी"
 
 #. TRANSLATORS: This a prompt asking the user to agree to the license
-#: ../client/pk-console.c:1604
+#: ../client/pk-console.c:1843
 msgid "Do you agree to this license?"
 msgstr "क्या आप इस लाइसेंस से सहमत हैं?"
 
 #. TRANSLATORS: This is where the user declined the license
-#: ../client/pk-console.c:1608
+#: ../client/pk-console.c:1847
 msgid "The license was refused."
 msgstr "लाइसेंस अस्वीकृत किया गया."
 
 #. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1637
+#: ../client/pk-console.c:1876
 msgid "The daemon crashed mid-transaction!"
 msgstr "यह डेमॉन मध्य विनिमय में क्रैश कर गया!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1690
+#: ../client/pk-console.c:1929
 msgid "PackageKit Console Interface"
 msgstr "पैकेजकिट कंसोल अंतरफलक"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1692
+#: ../client/pk-console.c:1931
 msgid "Subcommands:"
 msgstr "उपकमांड:"
 
 #. TRANSLATORS: command line argument, if we should show debugging information
 #. TRANSLATORS: if we should show debugging data
-#: ../client/pk-console.c:1785 ../client/pk-generate-pack.c:185
+#: ../client/pk-console.c:2024 ../client/pk-generate-pack.c:185
 #: ../client/pk-monitor.c:128
 #: ../contrib/command-not-found/pk-command-not-found.c:616
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:550
@@ -540,148 +582,147 @@ msgid "Show extra debugging information"
 msgstr "अतिरिक्त डिबगिंग सूचना दिखाएं"
 
 #. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1788 ../client/pk-monitor.c:130
+#: ../client/pk-console.c:2027 ../client/pk-monitor.c:130
 msgid "Show the program version and exit"
 msgstr "प्रोग्राम संस्करण दिखाएँ और बाहर निकलें"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1791
+#: ../client/pk-console.c:2030
 msgid "Set the filter, e.g. installed"
 msgstr "फ़िल्टर सेट करें, उदा. संस्थापित"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1794
+#: ../client/pk-console.c:2033
 msgid "Exit without waiting for actions to complete"
 msgstr "पूरा होने के लिए क्रिया के लिए प्रतीक्षारत रहे बिना बाहर निकलें"
 
 #. TRANSLATORS: This is when we could not connect to the system bus, and is fatal
-#: ../client/pk-console.c:1821
+#: ../client/pk-console.c:2060
 msgid "This tool could not connect to system DBUS."
 msgstr "यह औज़ार DBUS में कनेक्ट नहीं हो सका."
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1911
+#: ../client/pk-console.c:2150
 msgid "The filter specified was invalid"
 msgstr "निर्दिष्ट फिल्टर अवैध था"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1930
+#: ../client/pk-console.c:2169
 msgid "A search type is required, e.g. name"
 msgstr "खोज प्रकार जरूरी है, उदा. name"
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1937 ../client/pk-console.c:1946
-#: ../client/pk-console.c:1955 ../client/pk-console.c:1964
+#: ../client/pk-console.c:2176 ../client/pk-console.c:2185
+#: ../client/pk-console.c:2194 ../client/pk-console.c:2203
 msgid "A search term is required"
 msgstr "खोज पद जरूरी है"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1971
+#: ../client/pk-console.c:2210
 msgid "Invalid search type"
 msgstr "अवैध खोज प्रकार"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1977
+#: ../client/pk-console.c:2216
 msgid "A package name or filename to install is required"
 msgstr "संस्थापित करने के लिए पैकेज नाम या फाइलनाम जरूरी है"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1986
+#: ../client/pk-console.c:2225
 msgid "A type, key_id and package_id are required"
 msgstr "प्रकार, key_id और package_id जरूरी है"
 
 #. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1995
+#: ../client/pk-console.c:2234
 msgid "A package name to remove is required"
 msgstr "हटाने के लिए संकुल नाम जरूरी है"
 
 #. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:2003
-#, fuzzy
+#: ../client/pk-console.c:2242
 msgid "A destination directory and the package names to download are required"
 msgstr "गंतव्य निर्देशिका और फिर डाउनलोड करने के लिए संकुल नाम जरूरी है"
 
 #. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:2010
+#: ../client/pk-console.c:2249
 msgid "Directory not found"
 msgstr "निर्देशिका नहीं मिला"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2018
+#: ../client/pk-console.c:2257
 msgid "A licence identifier (eula-id) is required"
 msgstr "लाइसेंस पहचानकर्ता (eula-id) जरूरी है"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2028
+#: ../client/pk-console.c:2267
 msgid "A transaction identifier (tid) is required"
 msgstr "विनिमय पहचानकर्ता (tid) जरूरी है"
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:2045
+#: ../client/pk-console.c:2284
 msgid "A package name to resolve is required"
 msgstr "हल किया पैकेज नाम जरूरी है"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:2054 ../client/pk-console.c:2063
+#: ../client/pk-console.c:2293 ../client/pk-console.c:2302
 msgid "A repository name is required"
 msgstr "रिपाजिटरी नाम जरूरी है"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:2072
+#: ../client/pk-console.c:2311
 msgid "A repo name, parameter and value are required"
 msgstr "रेपो नाम, पैरामीटर और मान जरूरी है"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:2086
+#: ../client/pk-console.c:2325
 msgid "An action, e.g. 'update-system' is required"
 msgstr "क्रिया, उदा. 'update-system' जरूरी है"
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:2093
+#: ../client/pk-console.c:2332
 msgid "A correct role is required"
 msgstr "सही भूमिका जरूरी है"
 
 #. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:2100
+#: ../client/pk-console.c:2339
 msgid "Failed to get the time since this action was last completed"
 msgstr "समय पाने में विफल क्योंकि यह काम अंतिम में पूरा किया गया था"
 
 #. TRANSLATORS: The user did not provide a package name
 #. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:2110 ../client/pk-console.c:2122
-#: ../client/pk-console.c:2131 ../client/pk-console.c:2149
-#: ../client/pk-console.c:2158 ../client/pk-generate-pack.c:241
+#: ../client/pk-console.c:2349 ../client/pk-console.c:2361
+#: ../client/pk-console.c:2370 ../client/pk-console.c:2388
+#: ../client/pk-console.c:2397 ../client/pk-generate-pack.c:241
 msgid "A package name is required"
 msgstr "संकुल नाम जरूरी है"
 
 #. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:2140
+#: ../client/pk-console.c:2379
 msgid "A package provide string is required"
 msgstr "संकुल प्रदत्त स्ट्रिंग जरूरी है"
 
 #. TRANSLATORS: The user didn't specify a filename to create as a list
-#: ../client/pk-console.c:2167
+#: ../client/pk-console.c:2406
 msgid "A list file name to create is required"
 msgstr "बनाने के लिए सूची फाइल नाम जरूरी है"
 
 #. TRANSLATORS: The user didn't specify a filename to open as a list
-#: ../client/pk-console.c:2177 ../client/pk-console.c:2187
+#: ../client/pk-console.c:2416 ../client/pk-console.c:2426
 msgid "A list file to open is required"
 msgstr "खोलने के लिए सूची फाइल जरूरी है"
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:2241
+#: ../client/pk-console.c:2480
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "विकल्प '%s' समर्थित नहीं है"
 
 #. TRANSLATORS: User does not have permission to do this
-#: ../client/pk-console.c:2254
+#: ../client/pk-console.c:2493
 msgid "Incorrect privileges for this operation"
 msgstr "इस ऑपरेशन के लिए गलत अधिकार"
 
 #. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:2257
+#: ../client/pk-console.c:2496
 msgid "Command failed"
 msgstr "कमांड असफल"
 
@@ -707,10 +748,8 @@ msgstr "चलाने के लिए निर्भरता के फाà
 
 #. TRANSLATORS: the output location
 #: ../client/pk-generate-pack.c:191
-msgid ""
-"The output file or directory (the current directory is used if ommitted)"
-msgstr ""
-"आउटपुट फाइल या निर्देशिका (मौजूदा निर्देशिका का प्रयोग किया जा सकता यदि मिटाया गया)"
+msgid "The output file or directory (the current directory is used if ommitted)"
+msgstr "आउटपुट फाइल या निर्देशिका (मौजूदा निर्देशिका का प्रयोग किया जा सकता यदि मिटाया गया)"
 
 #. TRANSLATORS: put a list of packages in the pack
 #: ../client/pk-generate-pack.c:194
@@ -812,7 +851,7 @@ msgstr "PackageKit मानिटर"
 
 #: ../client/pk-monitor.c:183
 msgid "Cannot show the list of transactions"
-msgstr ""
+msgstr "लेनदेन की सूची नहीं दिखा सकता है"
 
 #. TRANSLATORS: The package was not found in any software sources
 #: ../client/pk-tools-common.c:118
@@ -892,24 +931,22 @@ msgstr "संस्थापित कर रहा है..."
 #. TRANSLATORS: downloading repo data so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:349
 msgid "Downloading details about the software sources."
-msgstr ""
+msgstr "सॉफ़्टवेयर स्रोत के बारे में विवरण डाउनलोज कर रहा है"
 
 #. TRANSLATORS: downloading file lists so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:353
 msgid "Downloading filelists (this may take some time to complete)."
-msgstr ""
+msgstr "फ़ाइललिस्ट डाउनलोड कर रहा है (यह पूरा होने में कुछ समय ले सकता है)."
 
 #. TRANSLATORS: waiting for native lock
 #: ../contrib/command-not-found/pk-command-not-found.c:357
-#, fuzzy
 msgid "Waiting for package manager lock."
-msgstr "संकुल नाम ढूँढ़ रहा है."
+msgstr "संकुल प्रबंधक लॉक के लिए प्रतीक्षारत."
 
 #. TRANSLATORS: loading package cache so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:361
-#, fuzzy
 msgid "Loading list of packages."
-msgstr "संकुल डाउनलोड कर रहा है"
+msgstr "संकुल सूची डाउनलोड कर रहा है."
 
 #. TRANSLATORS: we failed to find the package, this shouldn't happen
 #: ../contrib/command-not-found/pk-command-not-found.c:420
@@ -982,49 +1019,46 @@ msgstr "संस्थापित करने के लिए कोई सà
 
 #. TRANSLATORS: we are starting to install the packages
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:187
-#, fuzzy
 msgid "Starting install"
-msgstr "संस्थापित करने के लिए"
+msgstr "संस्थापन आरंभ कर रहा है"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:397
-#, fuzzy, c-format
+#, c-format
 msgid "Failed to find the package %s, or already installed: %s"
-msgstr "यह संकुल %s पहले से संस्थापित है"
+msgstr "संकुल %s ढूँढ़ने में विफल, या पहले से संस्थापित: %s"
 
 #. command line argument, simulate what would be done, but don't actually do it
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:553
-msgid ""
-"Don't actually install any packages, only simulate what would be installed"
-msgstr ""
+msgid "Don't actually install any packages, only simulate what would be installed"
+msgstr "किसी संकुल को वास्तव में मत संस्थापित करें, केवल देखें कि क्या संस्थापित होगा"
 
 #. command line argument, do we skip packages that depend on the ones specified
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:556
 msgid "Do not install dependencies of the core packages"
-msgstr ""
+msgstr "कोर संकुल की निर्भरता को मत संस्थापित करें"
 
 #. command line argument, do we operate quietly
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:559
 msgid "Do not display information or progress"
-msgstr ""
+msgstr "सूचना या प्रगति पर मत कुछ दिखाएँ"
 
 #. TRANSLATORS: tool that gets called when the command is not found
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:577
-#, fuzzy
 msgid "PackageKit Debuginfo Installer"
-msgstr "पैकेजकिट कंसोल अंतरफलक"
+msgstr "पैकेजकिट डिबगइंफो संस्थापक"
 
 #. TRANSLATORS: the use needs to specify a list of package names on the command line
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:589
-#, fuzzy, c-format
+#, c-format
 msgid "ERROR: Specify package names to install."
-msgstr "कोई नया संकुल संस्थापित होने के लिए नहीं"
+msgstr "त्रुटि: संस्थापन के लिए संकुल नाम निर्दिष्ट करें."
 
 #. TRANSLATORS: we are getting the list of repositories
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:623
-#, fuzzy, c-format
+#, c-format
 msgid "Getting sources list"
-msgstr "पैकेज सूची पा रहा है"
+msgstr "स्रोत सूची पा रहा है"
 
 #. TRANSLATORS: all completed 100%
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:641
@@ -1036,31 +1070,31 @@ msgstr "पैकेज सूची पा रहा है"
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:955
 #, c-format
 msgid "OK."
-msgstr ""
+msgstr "ठीक."
 
 #. TRANSLATORS: tell the user what we found
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:644
 #, c-format
 msgid "Found %i enabled and %i disabled sources."
-msgstr ""
+msgstr "%i सक्रिय और %i निष्क्रिय स्रोत पाया."
 
 #. TRANSLATORS: we're finding repositories that match out pattern
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:651
 #, c-format
 msgid "Finding debugging sources"
-msgstr ""
+msgstr "डबगिंग स्रोत ढूँढ़ रहा है"
 
 #. TRANSLATORS: tell the user what we found
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:684
 #, c-format
 msgid "Found %i disabled debuginfo repos."
-msgstr ""
+msgstr "%i निष्क्रिय डिबगइंफो रिपोज पाया."
 
 #. TRANSLATORS: we're now enabling all the debug sources we found
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:691
 #, c-format
 msgid "Enabling debugging sources"
-msgstr ""
+msgstr "डिबगिंग स्रोत सक्रिय कर रहा है"
 
 #. TRANSLATORS: operation was not successful
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:701
@@ -1069,199 +1103,189 @@ msgstr ""
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:896
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:940
 msgid "FAILED."
-msgstr ""
+msgstr "विफल."
 
 #. TRANSLATORS: tell the user how many we enabled
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:719
 #, c-format
 msgid "Enabled %i debugging sources."
-msgstr ""
+msgstr "%i डबगिंग स्रोतों को सक्रिय किया."
 
 #. TRANSLATORS: we're now finding packages that match in all the repos
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:726
-#, fuzzy, c-format
+#, c-format
 msgid "Finding debugging packages"
-msgstr "संकुल नाम ढूँढ़ रहा है."
+msgstr "डबगिंग संकुल को ढूँढ़ रहा है"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:738
-#, fuzzy, c-format
+#, c-format
 msgid "Failed to find the package %s: %s"
-msgstr "'%s' संकुल ढूँढ़ने में विफल: %s"
+msgstr "संकुल %s ढूँढ़ने में असमर्थ: %s"
 
 #. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:761
-#, fuzzy, c-format
+#, c-format
 msgid "Failed to find the debuginfo package %s: %s"
-msgstr "'%s' संकुल ढूँढ़ने में विफल: %s"
+msgstr "डिबगइंफो संकुल %s ढूँढ़ने में विफल: %s"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:789
-#, fuzzy, c-format
+#, c-format
 msgid "Found no packages to install."
-msgstr "कोई नया संकुल संस्थापित होने के लिए नहीं"
+msgstr "कोई नया संकुल संस्थापित होने के लिए नहीं पाया."
 
 #. TRANSLATORS: tell the user we found some packages, and then list them
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
-#, fuzzy, c-format
+#, c-format
 msgid "Found %i packages:"
-msgstr "संकुल डाउनलोड कर रहा है"
+msgstr "%i संकुल पाया:"
 
 #. TRANSLATORS: tell the user we are searching for deps
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:819
 #, c-format
 msgid "Finding packages that depend on these packages"
-msgstr ""
+msgstr "संकुलों को पा रहा है जो इन संकुलों पर निर्भर करता है"
 
 #. TRANSLATORS: could not install, detailed error follows
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:832
-#, fuzzy, c-format
+#, c-format
 msgid "Could not find dependant packages: %s"
-msgstr "'%s' संकुल ढूँढ़ने में विफल: %s"
+msgstr "निर्भर संकुलों को नहीं ढूँढ़ सका: %s"
 
 #. TRANSLATORS: tell the user we found some more packages
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
 #, c-format
 msgid "Found %i extra packages."
-msgstr ""
+msgstr "अतिरिक्त संकुल %i पाया."
 
 #. TRANSLATORS: tell the user we found some more packages
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:852
-#, fuzzy, c-format
+#, c-format
 msgid "No extra packages required."
-msgstr "संकुल नाम जरूरी है"
+msgstr "कोई अतिरिक्त संकुल जरूरी नहीं है."
 
 #. TRANSLATORS: tell the user we found some packages (and deps), and then list them
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:861
-#, fuzzy, c-format
+#, c-format
 msgid "Found %i packages to install:"
-msgstr "कोई नया संकुल संस्थापित होने के लिए नहीं"
+msgstr "संस्थापित करने के लिए %i संकुल:"
 
 #. TRANSLATORS: simulate mode is a testing mode where we quit before the action
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:874
-#, fuzzy, c-format
+#, c-format
 msgid "Not installing packages in simulate mode"
-msgstr "संकुल अधिष्ठापित कर रहा है"
+msgstr "सिमुलेट मोड में कोई संस्थापन संकुल नहीं"
 
 #. TRANSLATORS: could not install, detailed error follows
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:899
-#, fuzzy, c-format
+#, c-format
 msgid "Could not install packages: %s"
-msgstr "यह औजार संकुल को नहीं संस्थापित कर सका: %s"
+msgstr "संकुलों को संस्थापित नहीं कर सका: %s"
 
 #. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:931
 #, c-format
 msgid "Disabling sources previously enabled"
-msgstr ""
+msgstr "पहले से सक्रिय किए गए स्रोत को निष्क्रिय कर रहा है"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed, detailed error follows
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:943
 #, c-format
 msgid "Could not disable the debugging sources: %s"
-msgstr ""
+msgstr "डिबगिंग स्रोत को निष्क्रिय नहीं कर सका: %s"
 
 #. TRANSLATORS: we disabled all the debugging repos that we enabled before
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:958
 #, c-format
 msgid "Disabled %i debugging sources."
-msgstr ""
+msgstr "निष्क्रिय किया %i डिबगिंग स्रोत."
 
 #. TRANSLATORS: couldn't open device to write
 #: ../contrib/device-rebind/pk-device-rebind.c:61
-#, fuzzy
 msgid "Failed to open file"
-msgstr "फाइल के लिए खोजने में विफल"
+msgstr "फाइल खोलने में विफल"
 
 #. TRANSLATORS: could not write to the device
 #: ../contrib/device-rebind/pk-device-rebind.c:70
-#, fuzzy
 msgid "Failed to write to the file"
-msgstr "फाइल के लिए खोजने में विफल"
+msgstr "फाइल में लिखने में विफल"
 
 #. TRANSLATORS: we failed to release the current driver
 #: ../contrib/device-rebind/pk-device-rebind.c:110
 #: ../contrib/device-rebind/pk-device-rebind.c:147
-#, fuzzy
 msgid "Failed to write to device"
-msgstr "डिस्क में सहेजने में विफल"
+msgstr "युक्ति में लिखने में विफल"
 
 #. TRANSLATORS: the device could not be found in sysfs
 #: ../contrib/device-rebind/pk-device-rebind.c:175
-#, fuzzy
 msgid "Device could not be found"
-msgstr "यह संकुल नहीं मिल सका"
+msgstr "युक्ति नहीं मिल सका"
 
 #. TRANSLATORS: we failed to release the current driver
 #: ../contrib/device-rebind/pk-device-rebind.c:202
-#, fuzzy
 msgid "Failed to unregister driver"
-msgstr "निर्देशिका बनाने में विफल:"
+msgstr "ड्राइवर अपंजीकृत करने में विफल"
 
 #. TRANSLATORS: we failed to bind the old driver
 #: ../contrib/device-rebind/pk-device-rebind.c:211
-#, fuzzy
 msgid "Failed to register driver"
-msgstr "निर्देशिका बनाने में विफल:"
+msgstr "ड्राइवर रजिस्टर करने में विफल"
 
 #. TRANSLATORS: user did not specify a device sysfs path that exists
 #: ../contrib/device-rebind/pk-device-rebind.c:260
-#, fuzzy
 msgid "Device path not found"
-msgstr "निर्देशिका नहीं मिला"
+msgstr "युक्ति पथ नहीं मिला"
 
 #. TRANSLATORS: user did not specify a valid device sysfs path
 #: ../contrib/device-rebind/pk-device-rebind.c:268
 msgid "Incorrect device path specified"
-msgstr ""
+msgstr "गलत युक्ति पथ निर्दिष्ट"
 
 #. command line argument, simulate what would be done, but don't actually do it
 #: ../contrib/device-rebind/pk-device-rebind.c:296
 msgid "Don't actually touch the hardware, only simulate what would be done"
-msgstr ""
+msgstr "हार्डवेयर को मत छूएँ, केवल उसे सिमुलेट करें कि कब क्या हो सकता है"
 
 #. TRANSLATORS: command line option: a list of files to install
 #: ../contrib/device-rebind/pk-device-rebind.c:299
 msgid "Device paths"
-msgstr ""
+msgstr "युक्ति पथ"
 
 #. TRANSLATORS: tool that gets called when the device needs reloading after installing firmware
 #: ../contrib/device-rebind/pk-device-rebind.c:314
-#, fuzzy
 msgid "PackageKit Device Reloader"
-msgstr "PackageKit सेवा पैक"
+msgstr "PackageKit युक्ति रिलोडर"
 
 #. TRANSLATORS: user did not specify a valid device sysfs path
 #: ../contrib/device-rebind/pk-device-rebind.c:322
 msgid "You need to specify at least one valid device path"
-msgstr ""
+msgstr "आपको कम से कम एक वैध युक्ति पथ बताने की जरूरत है"
 
 #. TRANSLATORS: user did not specify a valid device sysfs path
 #: ../contrib/device-rebind/pk-device-rebind.c:332
 msgid "This script can only be used by the root user"
-msgstr ""
+msgstr "यह स्क्रिप्ट को केवल रूट उपयोक्ता के द्वारा प्रयोग किया जा सकता है"
 
 #. TRANSLATORS: we're going to verify the path first
 #: ../contrib/device-rebind/pk-device-rebind.c:341
 msgid "Verifying device path"
-msgstr ""
+msgstr "युक्ति पथ जाँच रहा है"
 
 #. TRANSLATORS: user did not specify a device sysfs path that exists
 #: ../contrib/device-rebind/pk-device-rebind.c:346
-#, fuzzy
 msgid "Failed to verify device path"
-msgstr "फाइल के लिए खोजने में विफल"
+msgstr "युक्ति पथ जाँचने में विफल"
 
 #. TRANSLATORS: we're going to try
 #: ../contrib/device-rebind/pk-device-rebind.c:360
 msgid "Attempting to rebind device"
-msgstr ""
+msgstr "युक्ति फिर बाइंड करने का प्रयास"
 
 #. TRANSLATORS: we failed to release the current driver
 #: ../contrib/device-rebind/pk-device-rebind.c:365
-#, fuzzy
 msgid "Failed to rebind device"
-msgstr "निर्देशिका बनाने में विफल:"
+msgstr "युक्ति फिर बाइंड करने में विफल"
 
 #: ../data/packagekit-catalog.xml.in.h:1
 msgid "PackageKit Catalog"
@@ -1290,10 +1314,8 @@ msgid "Authentication is required to accept a EULA"
 msgstr "EULA स्वीकार करने के लिए प्रमाणीकरण जरूरी है"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:9
-msgid ""
-"Authentication is required to cancel a task that was not started by yourself"
-msgstr ""
-"कोई कार्य अस्वीकार करने के लिए प्रमाणीकरण जरूरी है जो आपके द्वारा आरंभ नहीं किया गया है"
+msgid "Authentication is required to cancel a task that was not started by yourself"
+msgstr "कोई कार्य अस्वीकार करने के लिए प्रमाणीकरण जरूरी है जो आपके द्वारा आरंभ नहीं किया गया है"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:10
 msgid "Authentication is required to change software source parameters"
@@ -1303,8 +1325,7 @@ msgstr "सॉफ़्टवेयर स्रोत पैरामीटर
 msgid ""
 "Authentication is required to consider a key used for signing packages as "
 "trusted"
-msgstr ""
-"बतौर विश्वसनीय संकुल के हस्ताक्षर के लिए प्रयुक्त कुंजी स्वीकारने के लिए प्रमाणीकरण जरूरी है"
+msgstr "बतौर विश्वसनीय संकुल के हस्ताक्षर के लिए प्रयुक्त कुंजी स्वीकारने के लिए प्रमाणीकरण जरूरी है"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:12
 msgid "Authentication is required to install a signed package"
@@ -1319,9 +1340,8 @@ msgid "Authentication is required to refresh the system sources"
 msgstr "तंत्र स्रोत ताज़ा करने के लिए प्रमाणीकरण जरूरी है"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:15
-#, fuzzy
 msgid "Authentication is required to reload the device with a new driver"
-msgstr "तंत्र स्रोत ताज़ा करने के लिए प्रमाणीकरण जरूरी है"
+msgstr "नए ड्राइवर से युक्ति ताज़ा करने के लिए प्रमाणीकरण जरूरी है"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:16
 msgid "Authentication is required to remove packages"
@@ -1396,7 +1416,7 @@ msgstr "तंत्र स्रोत ताज़ा करें"
 #.
 #: ../policy/org.freedesktop.packagekit.policy.in.h:58
 msgid "Reload a device"
-msgstr ""
+msgstr "युक्ति फिर लोड करें"
 
 #. SECURITY:
 #. - Normal users require admin authentication to remove packages as
@@ -1517,43 +1537,42 @@ msgid "Error trying to start:"
 msgstr "आरंभ होने की कोशिश में त्रुटि:"
 
 #: ../src/pk-polkit-action-lookup.c:147
-#, fuzzy
 msgid "To install debugging packages, extra sources need to be enabled"
-msgstr "कोई नया संकुल संस्थापित होने के लिए नहीं"
+msgstr "डिबगिंग संकुल संस्थापित करने के लिए, अतिरिक्त स्रोत सक्रिय किए जाने की जरूरत है"
 
 #. TRANSLATORS: is not GPG signed
 #: ../src/pk-polkit-action-lookup.c:168 ../src/pk-polkit-action-lookup.c:187
 msgid "The software is not from a trusted source."
-msgstr ""
+msgstr "यह सॉफ्टवेयर भरोसेमंद स्रोत से नहीं है."
 
 #: ../src/pk-polkit-action-lookup.c:173
 msgid "Do not update this package unless you are sure it is safe to do so."
-msgstr ""
+msgstr "इस संकुल को अद्यतन मत करें जब तक वाकई ऐसा करने के लिए सुरक्षित है."
 
 #: ../src/pk-polkit-action-lookup.c:174
 msgid "Do not update these packages unless you are sure it is safe to do so."
-msgstr ""
+msgstr "इस संकुलों को अद्यतन मत करें जब तक वाकई ऐसा करने के लिए सुरक्षित है."
 
 #: ../src/pk-polkit-action-lookup.c:192
 msgid "Do not install this package unless you are sure it is safe to do so."
-msgstr ""
+msgstr "इस संकुल संस्थापित मत करें जब तक वाकई ऐसा करने के लिए सुरक्षित है."
 
 #: ../src/pk-polkit-action-lookup.c:193
 msgid "Do not install these packages unless you are sure it is safe to do so."
-msgstr ""
+msgstr "इन संकुलों को अद्यतन मत करें जब तक वाकई ऐसा करने के लिए सुरक्षित है."
 
 #. TRANSLATORS: warn the user that all bets are off
 #: ../src/pk-polkit-action-lookup.c:199
 msgid "Malicious software can damage your computer or cause other harm."
-msgstr ""
+msgstr "दुर्भावनापूर्ण सॉफ्टवेयर आपके कंप्यूटर को नुकसान पहुँचा सकते हैं या दूसरे को नुकसान पहुँचा सकते हैं."
 
 #. TRANSLATORS: too many packages to list each one
 #: ../src/pk-polkit-action-lookup.c:274
-#, fuzzy
 msgid "Many packages"
-msgstr "संकुल अद्यतन करें"
+msgstr "कई संकुल"
 
 #. TRANSLATORS: if the transaction is forced to install only trusted packages
 #: ../src/pk-polkit-action-lookup.c:334
 msgid "Only trusted"
-msgstr ""
+msgstr "केवल भरोसेमंद"
+
commit b55c038aaa09d64a22bd76893caa936f608a7ee6
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date:   Thu Sep 3 12:05:04 2009 +0200

    ports: implement vuxml for get-update-detail

diff --git a/backends/ports/portsBackend.rb b/backends/ports/portsBackend.rb
index ea4a92a..b6e1f24 100755
--- a/backends/ports/portsBackend.rb
+++ b/backends/ports/portsBackend.rb
@@ -461,6 +461,56 @@ def refresh_cache(force)
     percentage(100)
 end
 
+# (security/vxquery)
+VXQUERY = "#{PREFIX}/bin/vxquery"
+
+# http://www.vuxml.org
+VULN_XML = 'vuln.xml'
+
+def _match_range(range, version)
+   cmp = PkgVersion.new(version.to_s) <=> PkgVersion.new(range.text)
+   return true if range.name == 'lt' && cmp <  0
+   return true if range.name == 'le' && cmp <= 0
+   return true if range.name == 'eq' && cmp == 0
+   return true if range.name == 'ge' && cmp >= 0
+   return true if range.name == 'gt' && cmp >  0
+   return false
+end
+
+def _vuxml(name, oldversion=nil, newversion=nil)
+    vulnxml = File.join($portsdb.portdir('security/vuxml'), VULN_XML)
+    vulns = []
+    if File.exist?(VXQUERY) and File.exist?(vulnxml)
+      require 'rexml/document'
+      vuxml = `#{VXQUERY} -t 'vuxml' #{vulnxml} '#{name}'`
+      doc = REXML::Document.new vuxml
+      doc.root.each_element('//vuln') do |vuln|
+        match = false
+        vuln.each_element('affects/package') do |package|
+          package.elements['name'].each do |element|
+            if element == name
+              match = true
+              break
+            end
+          end
+          next unless match
+          if oldversion and newversion
+            match = false
+            package.elements['range'].each do |element|
+              if _match_range(element, oldversion) and
+                 not _match_range(element, newversion)
+                match = true
+                break
+              end
+            end
+          end
+        end
+        vulns << vuln if match
+      end
+    end
+    return vulns
+end
+
 def get_updates(filters)
     status(STATUS_DEP_RESOLVE)
     filterlist = filters.split(';')
@@ -543,7 +593,30 @@ def get_update_detail(package_ids)
         issued = ''
         updated = ''
 
-        # TODO: http://www.vuxml.org
+        vulns = _vuxml(pkg.name, oldpkg.version, pkg.version)
+        vulns.each do |vuln|
+          if topic = vuln.elements['topic']
+            description += topic.text
+          end
+          if vid = vuln.attributes["vid"]
+            vendor_urls << "http://vuxml.freebsd.org/#{vid}.html"
+          end
+          vuln.each_element('references/cvename') do |cve|
+            cve_urls << "http://cve.mitre.org/cgi-bin/cvename.cgi?name=#{cve.text}"
+          end
+          vuln.each_element('references/url') do |element|
+            url = element.text.chomp
+            if url.match(/bugzilla/)
+              bugzilla_urls << url
+            end
+          end
+          if date = vuln.elements['dates/entry']
+            issued = date.text
+          end
+          if date = vuln.elements['dates/modified']
+            updated = date.text
+          end
+        end
 
         vendor_urls = vendor_urls.join(';')
         bugzilla_urls = bugzilla_urls.join(';')
commit 116243028c4f7e0cb1d1448d081c9152770659f6
Merge: 373ef03... 319ea84...
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 11:03:26 2009 +0100

    Merge branch 'master' into client-glib2

commit 319ea84e25ccc10013f477949f89fc2499b2a078
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 11:02:32 2009 +0100

    trivial: fix up a few vim-tags

diff --git a/lib/packagekit-glib2/pk-package-sack.c b/lib/packagekit-glib2/pk-package-sack.c
index aa8325e..2c73420 100644
--- a/lib/packagekit-glib2/pk-package-sack.c
+++ b/lib/packagekit-glib2/pk-package-sack.c
@@ -1,4 +1,4 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offsack: 8 -*-
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
diff --git a/lib/packagekit-glib2/pk-package-sack.h b/lib/packagekit-glib2/pk-package-sack.h
index 6d826cc..9c58d0a 100644
--- a/lib/packagekit-glib2/pk-package-sack.h
+++ b/lib/packagekit-glib2/pk-package-sack.h
@@ -1,4 +1,4 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offsack: 8 -*-
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
diff --git a/lib/packagekit-glib2/pk-self-test.c b/lib/packagekit-glib2/pk-self-test.c
index e306668..7c103cb 100644
--- a/lib/packagekit-glib2/pk-self-test.c
+++ b/lib/packagekit-glib2/pk-self-test.c
@@ -47,7 +47,6 @@ main (int argc, char **argv)
 	egg_debug_init (TRUE);
 
 	/* tests go here */
-#if 0
 	egg_string_test (test);
 	pk_common_test (test);
 	pk_enum_test (test);
@@ -59,7 +58,6 @@ main (int argc, char **argv)
 	pk_control_sync_test (test);
 	pk_client_test (test);
 	pk_package_sack_test (test);
-#endif
 	pk_task_test (test);
 	pk_task_wrapper_test (test);
 
diff --git a/lib/packagekit-glib2/pk-task-wrapper.h b/lib/packagekit-glib2/pk-task-wrapper.h
index 2a365d2..9d0887d 100644
--- a/lib/packagekit-glib2/pk-task-wrapper.h
+++ b/lib/packagekit-glib2/pk-task-wrapper.h
@@ -1,4 +1,4 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offtask_wrapper: 8 -*-
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c
index 751ea6d..3af390a 100644
--- a/lib/packagekit-glib2/pk-task.c
+++ b/lib/packagekit-glib2/pk-task.c
@@ -1,4 +1,4 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offtask: 8 -*-
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
diff --git a/lib/packagekit-glib2/pk-task.h b/lib/packagekit-glib2/pk-task.h
index ab61e1c..f529f36 100644
--- a/lib/packagekit-glib2/pk-task.h
+++ b/lib/packagekit-glib2/pk-task.h
@@ -1,4 +1,4 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offtask: 8 -*-
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
  *
  * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
  *
commit 373ef0333acf08af7606c58636f6cae759ec280c
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 11:00:52 2009 +0100

    glib2: make pkcon-test use PkTask

diff --git a/client/pk-console-test.c b/client/pk-console-test.c
index 179897c..a80e5b4 100644
--- a/client/pk-console-test.c
+++ b/client/pk-console-test.c
@@ -46,7 +46,7 @@ static PkBitfield roles;
 static gboolean is_console = FALSE;
 static gboolean nowait = FALSE;
 static PkControlSync *control = NULL;
-static PkClient *client = NULL;
+static PkTask *task = NULL;
 PkProgressBar *progressbar = NULL;
 
 /**
@@ -484,7 +484,7 @@ pk_console_files_cb (PkResultItemFiles *obj, gpointer data)
 	PkRoleEnum role;
 
 	/* don't print if we are DownloadPackages */
-	pk_client_get_role (client, &role, NULL, NULL);
+	pk_client_get_role (PK_CLIENT(task), &role, NULL, NULL);
 	if (role == PK_ROLE_ENUM_DOWNLOAD_PACKAGES) {
 		egg_debug ("ignoring ::files");
 		return;
@@ -615,7 +615,7 @@ pk_console_finished_cb (PkExitEnum exit_enum, guint runtime, gpointer data)
 	gboolean ret;
 	GError *error = NULL;
 
-	pk_client_get_role (client, &role, NULL, NULL);
+	pk_client_get_role (PK_CLIENT(task), &role, NULL, NULL);
 
 	role_text = pk_role_enum_to_text (role);
 	time_s = (gfloat) runtime / 1000.0;
@@ -647,8 +647,8 @@ pk_console_finished_cb (PkExitEnum exit_enum, guint runtime, gpointer data)
 		egg_debug ("need to handle untrusted");
 
 		/* retry new action with untrusted */
-		pk_client_set_only_trusted (client, FALSE);
-		ret = pk_client_requeue (client, &error);
+		pk_client_set_only_trusted (PK_CLIENT(task), FALSE);
+		ret = pk_client_requeue (PK_CLIENT(task), &error);
 		if (!ret) {
 			egg_warning ("Failed to requeue: %s", error->message);
 			g_error_free (error);
@@ -774,7 +774,7 @@ pk_console_install_stuff (gchar **packages, GError **error)
 				break;
 			}
 			/* try and find a package */
-			package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), packages[i], &error_local);
+			package_id = pk_console_perhaps_resolve (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), packages[i], &error_local);
 			if (package_id == NULL) {
 				/* TRANSLATORS: The package name was not found in any software sources. The detailed error follows */
 				*error = g_error_new (1, 0, _("The package %s could not be installed: %s"), packages[i], error_local->message);
@@ -844,7 +844,7 @@ pk_console_install_stuff (gchar **packages, GError **error)
 		}
 
 		/* reset */
-		ret = pk_client_reset (client, &error_local);
+		ret = pk_client_reset (PK_CLIENT(task), &error_local);
 		if (!ret) {
 			/* TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows */
 			*error = g_error_new (1, 0, _("Internal error: %s"), error_local->message);
@@ -852,7 +852,7 @@ pk_console_install_stuff (gchar **packages, GError **error)
 			goto out;
 		}
 
-		ret = pk_client_install_packages (client, TRUE, package_ids, &error_local);
+		ret = pk_client_install_packages (PK_CLIENT(task), TRUE, package_ids, &error_local);
 		if (!ret) {
 			/* TRANSLATORS: There was an error installing the packages. The detailed error follows */
 			*error = g_error_new (1, 0, _("This tool could not install the packages: %s"), error_local->message);
@@ -912,7 +912,7 @@ pk_console_install_stuff (gchar **packages, GError **error)
 			}
 		}
 
-		ret = pk_client_install_files (client, TRUE, files, &error_local);
+		ret = pk_client_install_files (PK_CLIENT(task), TRUE, files, &error_local);
 		if (!ret) {
 			/* TRANSLATORS: There was an error installing the files. The detailed error follows */
 			*error = g_error_new (1, 0, _("This tool could not install the files: %s"), error_local->message);
@@ -941,10 +941,10 @@ pk_console_remove_only (gchar **package_ids, gboolean force, GError **error)
 	gboolean ret;
 
 	egg_debug ("remove+ %s", package_ids[0]);
-	ret = pk_client_reset (client, error);
+	ret = pk_client_reset (PK_CLIENT(task), error);
 	if (!ret)
 		return ret;
-	return pk_client_remove_packages (client, package_ids, force, FALSE, error);
+	return pk_client_remove_packages (PK_CLIENT(task), package_ids, force, FALSE, error);
 }
 
 /**
@@ -968,7 +968,7 @@ pk_console_remove_packages (gchar **packages, GError **error)
 	list = pk_package_list_new ();
 	length = g_strv_length (packages);
 	for (i=2; i<length; i++) {
-		package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), packages[i], &error_local);
+		package_id = pk_console_perhaps_resolve (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), packages[i], &error_local);
 		if (package_id == NULL) {
 			/* TRANSLATORS: The package name was not found in the installed list. The detailed error follows */
 			*error = g_error_new (1, 0, _("This tool could not remove %s: %s"), packages[i], error_local->message);
@@ -991,7 +991,7 @@ pk_console_remove_packages (gchar **packages, GError **error)
 	/* are we dumb and can't check for requires? */
 	if (!pk_bitfield_contain (roles, PK_ROLE_ENUM_SIMULATE_REMOVE_PACKAGES)) {
 		/* no, just try to remove it without deps */
-		ret = pk_console_remove_only (client, package_ids, FALSE, &error_local);
+		ret = pk_console_remove_only (PK_CLIENT(task), package_ids, FALSE, &error_local);
 		if (!ret) {
 			/* TRANSLATORS: There was an error removing the packages. The detailed error follows */
 			*error = g_error_new (1, 0, _("This tool could not remove the packages: %s"), error_local->message);
@@ -1029,7 +1029,7 @@ pk_console_remove_packages (gchar **packages, GError **error)
 	length = pk_package_list_get_size (list);
 	if (length == 0) {
 		egg_debug ("no requires");
-		ret = pk_console_remove_only (client, package_ids, FALSE, &error_local);
+		ret = pk_console_remove_only (PK_CLIENT(task), package_ids, FALSE, &error_local);
 		if (!ret) {
 			/* TRANSLATORS: There was an error removing the packages. The detailed error follows */
 			*error = g_error_new (1, 0, _("This tool could not remove the packages: %s"), error_local->message);
@@ -1055,7 +1055,7 @@ pk_console_remove_packages (gchar **packages, GError **error)
 	}
 
 	/* remove all the stuff */
-	ret = pk_console_remove_only (client, package_ids, TRUE, &error_local);
+	ret = pk_console_remove_only (PK_CLIENT(task), package_ids, TRUE, &error_local);
 	if (!ret) {
 		/* TRANSLATORS: There was an error removing the packages. The detailed error follows */
 		*error = g_error_new (1, 0, _("This tool could not remove the packages: %s"), error_local->message);
@@ -1087,7 +1087,7 @@ pk_console_download_packages (gchar **packages, const gchar *directory, GError *
 	array_packages = g_ptr_array_new ();
 	length = g_strv_length (packages);
 	for (i=3; i<length; i++) {
-			package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_NONE), packages[i], &error_local);
+			package_id = pk_console_perhaps_resolve (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), packages[i], &error_local);
 			if (package_id == NULL) {
 				/* TRANSLATORS: The package name was not found in any software sources */
 				*error = g_error_new (1, 0, _("This tool could not download the package %s as it could not be found"), packages[i]);
@@ -1110,7 +1110,7 @@ pk_console_download_packages (gchar **packages, const gchar *directory, GError *
 		package_ids = pk_ptr_array_to_strv (array_packages);
 
 		/* reset */
-		ret = pk_client_reset (client, &error_local);
+		ret = pk_client_reset (PK_CLIENT(task), &error_local);
 		if (!ret) {
 			/* TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows */
 			*error = g_error_new (1, 0, _("Internal error: %s"), error_local->message);
@@ -1118,7 +1118,7 @@ pk_console_download_packages (gchar **packages, const gchar *directory, GError *
 			goto out;
 		}
 
-		ret = pk_client_download_packages (client, package_ids, directory, error);
+		ret = pk_client_download_packages (PK_CLIENT(task), package_ids, directory, error);
 		if (!ret) {
 			/* TRANSLATORS: Could not download the packages for some reason. The detailed error follows */
 			*error = g_error_new (1, 0, _("This tool could not download the packages: %s"), error_local->message);
@@ -1150,7 +1150,7 @@ pk_console_update_package (const gchar *package, GError **error)
 	PkPackageSack *list_single;
 
 	list = pk_package_list_new ();
-	package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), package, &error_local);
+	package_id = pk_console_perhaps_resolve (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), package, &error_local);
 	if (package_id == NULL) {
 		/* TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows */
 		*error = g_error_new (1, 0, _("This tool could not update %s: %s"), package, error_local->message);
@@ -1162,7 +1162,7 @@ pk_console_update_package (const gchar *package, GError **error)
 	/* are we dumb and can't simulate? */
 	if (!pk_bitfield_contain (roles, PK_ROLE_ENUM_SIMULATE_UPDATE_PACKAGES)) {
 		/* no, just try to update it without deps */
-		ret = pk_client_update_packages (client, TRUE, package_ids, error);
+		ret = pk_client_update_packages (PK_CLIENT(task), TRUE, package_ids, error);
 		if (!ret) {
 			/* TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows */
 			*error = g_error_new (1, 0, _("This tool could not update %s: %s"), package, error_local->message);
@@ -1214,7 +1214,7 @@ pk_console_update_package (const gchar *package, GError **error)
 		}
 	}
 
-	ret = pk_client_update_packages (client, TRUE, package_ids, error);
+	ret = pk_client_update_packages (PK_CLIENT(task), TRUE, package_ids, error);
 	if (!ret) {
 		/* TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows */
 		*error = g_error_new (1, 0, _("This tool could not update %s: %s"), package, error_local->message);
@@ -1238,7 +1238,7 @@ pk_console_get_requires (PkBitfield filters, const gchar *package, GError **erro
 	gchar **package_ids;
 	GError *error_local = NULL;
 
-	package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_NONE), package, &error_local);
+	package_id = pk_console_perhaps_resolve (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), package, &error_local);
 	if (package_id == NULL) {
 		/* TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows */
 		*error = g_error_new (1, 0, _("This tool could not get the requirements for %s: %s"), package, error_local->message);
@@ -1246,7 +1246,7 @@ pk_console_get_requires (PkBitfield filters, const gchar *package, GError **erro
 		return FALSE;
 	}
 	package_ids = pk_package_ids_from_id (package_id);
-	ret = pk_client_get_requires (client, filters, package_ids, TRUE, &error_local);
+	ret = pk_client_get_requires (PK_CLIENT(task), filters, package_ids, TRUE, &error_local);
 	if (!ret) {
 		/* TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows */
 		*error = g_error_new (1, 0, _("This tool could not get the requirements for %s: %s"), package, error_local->message);
@@ -1268,7 +1268,7 @@ pk_console_get_depends (PkBitfield filters, const gchar *package, GError **error
 	gchar **package_ids;
 	GError *error_local = NULL;
 
-	package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_NONE), package, &error_local);
+	package_id = pk_console_perhaps_resolve (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), package, &error_local);
 	if (package_id == NULL) {
 		/* TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows */
 		*error = g_error_new (1, 0, _("This tool could not get the dependencies for %s: %s"), package, error_local->message);
@@ -1276,7 +1276,7 @@ pk_console_get_depends (PkBitfield filters, const gchar *package, GError **error
 		return FALSE;
 	}
 	package_ids = pk_package_ids_from_id (package_id);
-	ret = pk_client_get_depends (client, filters, package_ids, FALSE, &error_local);
+	ret = pk_client_get_depends (PK_CLIENT(task), filters, package_ids, FALSE, &error_local);
 	if (!ret) {
 		/* TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows */
 		*error = g_error_new (1, 0, _("This tool could not get the dependencies for %s: %s"), package, error_local->message);
@@ -1298,7 +1298,7 @@ pk_console_get_details (const gchar *package, GError **error)
 	gchar **package_ids;
 	GError *error_local = NULL;
 
-	package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_NONE), package, &error_local);
+	package_id = pk_console_perhaps_resolve (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), package, &error_local);
 	if (package_id == NULL) {
 		/* TRANSLATORS: There was an error getting the details about the package. The detailed error follows */
 		*error = g_error_new (1, 0, _("This tool could not get package details for %s: %s"), package, error_local->message);
@@ -1306,7 +1306,7 @@ pk_console_get_details (const gchar *package, GError **error)
 		return FALSE;
 	}
 	package_ids = pk_package_ids_from_id (package_id);
-	ret = pk_client_get_details (client, package_ids, &error_local);
+	ret = pk_client_get_details (PK_CLIENT(task), package_ids, &error_local);
 	if (!ret) {
 		/* TRANSLATORS: There was an error getting the details about the package. The detailed error follows */
 		*error = g_error_new (1, 0, _("This tool could not get package details for %s: %s"), package, error_local->message);
@@ -1328,7 +1328,7 @@ pk_console_get_files (const gchar *package, GError **error)
 	gchar **package_ids;
 	GError *error_local = NULL;
 
-	package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_NONE), package, &error_local);
+	package_id = pk_console_perhaps_resolve (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), package, &error_local);
 	if (package_id == NULL) {
 		/* TRANSLATORS: The package name was not found in any software sources. The detailed error follows */
 		*error = g_error_new (1, 0, _("This tool could not find the files for %s: %s"), package, error_local->message);
@@ -1336,7 +1336,7 @@ pk_console_get_files (const gchar *package, GError **error)
 		return FALSE;
 	}
 	package_ids = pk_package_ids_from_id (package_id);
-	ret = pk_client_get_files (client, package_ids, error);
+	ret = pk_client_get_files (PK_CLIENT(task), package_ids, error);
 	if (!ret) {
 		/* TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows */
 		*error = g_error_new (1, 0, _("This tool could not get the file list for %s: %s"), package, error_local->message);
@@ -1358,7 +1358,7 @@ pk_console_get_update_detail (const gchar *package, GError **error)
 	gchar **package_ids;
 	GError *error_local = NULL;
 
-	package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), package, &error_local);
+	package_id = pk_console_perhaps_resolve (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), package, &error_local);
 	if (package_id == NULL) {
 		/* TRANSLATORS: The package name was not found in any software sources. The detailed error follows */
 		*error = g_error_new (1, 0, _("This tool could not find the update details for %s: %s"), package, error_local->message);
@@ -1366,7 +1366,7 @@ pk_console_get_update_detail (const gchar *package, GError **error)
 		return FALSE;
 	}
 	package_ids = pk_package_ids_from_id (package_id);
-	ret = pk_client_get_update_detail (client, package_ids, &error_local);
+	ret = pk_client_get_update_detail (PK_CLIENT(task), package_ids, &error_local);
 	if (!ret) {
 		/* TRANSLATORS: There was an error getting the details about the update for the package. The detailed error follows */
 		*error = g_error_new (1, 0, _("This tool could not get the update details for %s: %s"), package, error_local->message);
@@ -1385,7 +1385,7 @@ pk_console_error_code_cb (PkErrorCodeEnum error_code, const gchar *details, gpoi
 {
 	PkRoleEnum role;
 
-	pk_client_get_role (client, &role, NULL, NULL);
+	pk_client_get_role (PK_CLIENT(task), &role, NULL, NULL);
 
 	/* handled */
 	if (need_requeue) {
@@ -1433,9 +1433,9 @@ pk_console_sigint_handler (int sig)
 
 #if 0
 	/* cancel any tasks */
-	pk_client_get_role (client, &role, NULL, NULL);
+	pk_client_get_role (PK_CLIENT(task), &role, NULL, NULL);
 	if (role != PK_ROLE_ENUM_UNKNOWN) {
-		ret = pk_client_cancel (client, &error);
+		ret = pk_client_cancel (PK_CLIENT(task), &error);
 		if (!ret) {
 			egg_warning ("failed to cancel normal client: %s", error->message);
 			g_error_free (error);
@@ -1594,7 +1594,7 @@ pk_console_finished_cb (GObject *object, GAsyncResult *res, gpointer data)
 {
 //	PkClient *client = PK_CLIENT (object);
 	GError *error = NULL;
-	PkResults *results = NULL;
+	const PkResults *results;
 	PkExitEnum exit_enum;
 	const PkResultItemErrorCode *error_item;
 	GPtrArray *array;
@@ -1603,7 +1603,7 @@ pk_console_finished_cb (GObject *object, GAsyncResult *res, gpointer data)
 	pk_progress_bar_end (progressbar);
 
 	/* get the results */
-	results = pk_client_generic_finish (client, res, &error);
+	results = pk_client_generic_finish (PK_CLIENT(task), res, &error);
 	if (results == NULL) {
 		g_print ("Failed to complete: %s\n", error->message);
 		g_error_free (error);
@@ -1776,7 +1776,7 @@ main (int argc, char *argv[])
 			  G_CALLBACK (pk_connection_changed_cb), loop);
 
 	/* create transactions */
-	client = pk_client_new ();
+	task = pk_task_new ();
 
 	/* check filter */
 	if (filter != NULL) {
@@ -1815,7 +1815,7 @@ main (int argc, char *argv[])
 			}
 //			pk_progress_bar_start (progressbar, _("Searching"));
 			/* fire off an async request */
-			pk_client_search_name_async (client, filters, details, NULL,
+			pk_client_search_name_async (PK_CLIENT(task), filters, details, NULL,
 						     (PkProgressCallback) pk_console_progress_cb, NULL,
 						     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
@@ -1827,7 +1827,7 @@ main (int argc, char *argv[])
 				goto out;
 			}
 			/* fire off an async request */
-			pk_client_search_details_async (client, filters, details, NULL,
+			pk_client_search_details_async (PK_CLIENT(task), filters, details, NULL,
 						        (PkProgressCallback) pk_console_progress_cb, NULL,
 						        (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
@@ -1839,7 +1839,7 @@ main (int argc, char *argv[])
 				goto out;
 			}
 			/* fire off an async request */
-			pk_client_search_group_async (client, filters, details, NULL,
+			pk_client_search_group_async (PK_CLIENT(task), filters, details, NULL,
 						      (PkProgressCallback) pk_console_progress_cb, NULL,
 						      (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
@@ -1851,7 +1851,7 @@ main (int argc, char *argv[])
 				goto out;
 			}
 			/* fire off an async request */
-			pk_client_search_file_async (client, filters, details, NULL,
+			pk_client_search_file_async (PK_CLIENT(task), filters, details, NULL,
 						     (PkProgressCallback) pk_console_progress_cb, NULL,
 						     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 		} else {
@@ -1867,7 +1867,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_console_install_stuff (client, argv, &error);
+		ret = pk_console_install_stuff (PK_CLIENT(task), argv, &error);
 #endif
 
 	} else if (strcmp (mode, "install-sig") == 0) {
@@ -1877,7 +1877,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		pk_client_install_signature_async (client, PK_SIGTYPE_ENUM_GPG, details, parameter, NULL,
+		pk_client_install_signature_async (PK_CLIENT(task), PK_SIGTYPE_ENUM_GPG, details, parameter, NULL,
 						   (PkProgressCallback) pk_console_progress_cb, NULL,
 						   (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 #if 0
@@ -1888,7 +1888,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_console_remove_packages (client, argv, &error);
+		ret = pk_console_remove_packages (PK_CLIENT(task), argv, &error);
 	} else if (strcmp (mode, "download") == 0) {
 		if (value == NULL || details == NULL) {
 			/* TRANSLATORS: the user did not specify anything about what to download or where */
@@ -1903,7 +1903,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_FILE_NOT_FOUND;
 			goto out;
 		}
-		ret = pk_console_download_packages (client, argv, value, &error);
+		ret = pk_console_download_packages (PK_CLIENT(task), argv, value, &error);
 #endif
 	} else if (strcmp (mode, "accept-eula") == 0) {
 		if (value == NULL) {
@@ -1912,7 +1912,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		pk_client_accept_eula_async (client, value, NULL,
+		pk_client_accept_eula_async (PK_CLIENT(task), value, NULL,
 					     (PkProgressCallback) pk_console_progress_cb, NULL,
 					     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
@@ -1924,18 +1924,18 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		pk_client_rollback_async (client, value, NULL,
+		pk_client_rollback_async (PK_CLIENT(task), value, NULL,
 					  (PkProgressCallback) pk_console_progress_cb, NULL,
 					  (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 	} else if (strcmp (mode, "update") == 0) {
 		if (value == NULL) {
 			/* do the system update */
-			pk_client_update_system_async (client, TRUE, NULL,
+			pk_client_update_system_async (PK_CLIENT(task), TRUE, NULL,
 						       (PkProgressCallback) pk_console_progress_cb, NULL,
 						       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 		} else {
-			ret = pk_console_update_package (client, value, &error);
+			ret = pk_console_update_package (PK_CLIENT(task), value, &error);
 		}
 #endif
 
@@ -1946,7 +1946,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		pk_client_resolve_async (client, filters, argv+2, NULL,
+		pk_client_resolve_async (PK_CLIENT(task), filters, argv+2, NULL,
 				         (PkProgressCallback) pk_console_progress_cb, NULL,
 					 (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
@@ -1957,7 +1957,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		pk_client_repo_enable_async (client, value, TRUE, NULL,
+		pk_client_repo_enable_async (PK_CLIENT(task), value, TRUE, NULL,
 					     (PkProgressCallback) pk_console_progress_cb, NULL,
 					     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
@@ -1968,7 +1968,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		pk_client_repo_enable_async (client, value, FALSE, NULL,
+		pk_client_repo_enable_async (PK_CLIENT(task), value, FALSE, NULL,
 					     (PkProgressCallback) pk_console_progress_cb, NULL,
 					     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
@@ -1979,12 +1979,12 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		pk_client_repo_set_data_async (client, value, details, parameter, NULL,
+		pk_client_repo_set_data_async (PK_CLIENT(task), value, details, parameter, NULL,
 					       (PkProgressCallback) pk_console_progress_cb, NULL,
 					       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 	} else if (strcmp (mode, "repo-list") == 0) {
-		pk_client_get_repo_list_async (client, filters, NULL,
+		pk_client_get_repo_list_async (PK_CLIENT(task), filters, NULL,
 					       (PkProgressCallback) pk_console_progress_cb, NULL,
 					       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 #if 0
@@ -2020,10 +2020,10 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_console_get_depends (client, filters, value, &error);
+		ret = pk_console_get_depends (PK_CLIENT(task), filters, value, &error);
 #endif
 	} else if (strcmp (mode, "get-distro-upgrades") == 0) {
-		pk_client_get_distro_upgrades_async (client, NULL,
+		pk_client_get_distro_upgrades_async (PK_CLIENT(task), NULL,
 						     (PkProgressCallback) pk_console_progress_cb, NULL,
 						     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
@@ -2035,7 +2035,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_console_get_update_detail (client, value, &error);
+		ret = pk_console_get_update_detail (PK_CLIENT(task), value, &error);
 
 	} else if (strcmp (mode, "get-requires") == 0) {
 		if (value == NULL) {
@@ -2044,7 +2044,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_console_get_requires (client, filters, value, &error);
+		ret = pk_console_get_requires (PK_CLIENT(task), filters, value, &error);
 #endif
 
 	} else if (strcmp (mode, "what-provides") == 0) {
@@ -2054,7 +2054,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		pk_client_what_provides_async (client, filters, PK_PROVIDES_ENUM_CODEC, value, NULL,
+		pk_client_what_provides_async (PK_CLIENT(task), filters, PK_PROVIDES_ENUM_CODEC, value, NULL,
 					       (PkProgressCallback) pk_console_progress_cb, NULL,
 					       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 #if 0
@@ -2065,7 +2065,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_console_get_details (client, value, &error);
+		ret = pk_console_get_details (PK_CLIENT(task), value, &error);
 
 	} else if (strcmp (mode, "get-files") == 0) {
 		if (value == NULL) {
@@ -2074,7 +2074,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_console_get_files (client, value, &error);
+		ret = pk_console_get_files (PK_CLIENT(task), value, &error);
 
 	} else if (strcmp (mode, "list-create") == 0) {
 		if (value == NULL) {
@@ -2083,7 +2083,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_console_list_create (client, value, &error);
+		ret = pk_console_list_create (PK_CLIENT(task), value, &error);
 
 	} else if (strcmp (mode, "list-diff") == 0) {
 		if (value == NULL) {
@@ -2092,7 +2092,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_console_list_diff (client, value, &error);
+		ret = pk_console_list_diff (PK_CLIENT(task), value, &error);
 
 	} else if (strcmp (mode, "list-install") == 0) {
 		if (value == NULL) {
@@ -2101,20 +2101,20 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_console_list_install (client, value, &error);
+		ret = pk_console_list_install (PK_CLIENT(task), value, &error);
 #endif
 	} else if (strcmp (mode, "get-updates") == 0) {
-		pk_client_get_updates_async (client, filters, NULL,
+		pk_client_get_updates_async (PK_CLIENT(task), filters, NULL,
 					     (PkProgressCallback) pk_console_progress_cb, NULL,
 					     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 	} else if (strcmp (mode, "get-categories") == 0) {
-		pk_client_get_categories_async (client, NULL,
+		pk_client_get_categories_async (PK_CLIENT(task), NULL,
 						(PkProgressCallback) pk_console_progress_cb, NULL,
 						(GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 	} else if (strcmp (mode, "get-packages") == 0) {
-		pk_client_get_packages_async (client, filters, NULL,
+		pk_client_get_packages_async (PK_CLIENT(task), filters, NULL,
 					      (PkProgressCallback) pk_console_progress_cb, NULL,
 					      (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 #if 0
@@ -2145,14 +2145,14 @@ main (int argc, char *argv[])
 		ret = TRUE;
 #endif
 	} else if (strcmp (mode, "get-transactions") == 0) {
-		pk_client_get_old_transactions_async (client, 10, NULL,
+		pk_client_get_old_transactions_async (PK_CLIENT(task), 10, NULL,
 						      (PkProgressCallback) pk_console_progress_cb, NULL,
 						      (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 	} else if (strcmp (mode, "refresh") == 0) {
 		/* special case - this takes a long time, and doesn't do packages */
 //		pk_console_start_bar ("refresh-cache");
-		pk_client_refresh_cache_async (client, FALSE, NULL,
+		pk_client_refresh_cache_async (PK_CLIENT(task), FALSE, NULL,
 					       (PkProgressCallback) pk_console_progress_cb, NULL,
 					       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
@@ -2180,9 +2180,7 @@ out:
 	g_free (summary);
 	g_object_unref (progressbar);
 	g_object_unref (control);
-//	g_object_unref (client);
-//	g_object_unref (client_sync);
-	g_object_unref (client);
+	g_object_unref (task);
 out_last:
 	return retval;
 }
commit 5f914dfdb22226ade7da067558895fea2356e1f5
Merge: e27cc04... 066a0e0...
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 10:54:26 2009 +0100

    Merge branch 'master' into client-glib2

commit 066a0e066207e82a6a778bf92d58bc029c5d47c0
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 10:50:08 2009 +0100

    glib2: Add better examples to the PkTaskWrapper

diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index 4f06f80..20a769d 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -1124,7 +1124,7 @@ pk_client_get_tid_cb (GObject *object, GAsyncResult *res, PkClientState *state)
  *
  * Return value: the #PkResults, or %NULL
  **/
-PkResults *
+const PkResults *
 pk_client_generic_finish (PkClient *client, GAsyncResult *res, GError **error)
 {
 	GSimpleAsyncResult *simple;
@@ -3115,7 +3115,7 @@ pk_client_test_resolve_cb (GObject *object, GAsyncResult *res, EggTest *test)
 {
 	PkClient *client = PK_CLIENT (object);
 	GError *error = NULL;
-	PkResults *results = NULL;
+	const PkResults *results = NULL;
 	PkExitEnum exit_enum;
 	GPtrArray *packages;
 	const PkResultItemPackage *item;
@@ -3157,7 +3157,7 @@ pk_client_test_get_details_cb (GObject *object, GAsyncResult *res, EggTest *test
 {
 	PkClient *client = PK_CLIENT (object);
 	GError *error = NULL;
-	PkResults *results = NULL;
+	const PkResults *results = NULL;
 	PkExitEnum exit_enum;
 	GPtrArray *details;
 	const PkResultItemDetails *item;
@@ -3199,7 +3199,7 @@ pk_client_test_get_updates_cb (GObject *object, GAsyncResult *res, EggTest *test
 {
 	PkClient *client = PK_CLIENT (object);
 	GError *error = NULL;
-	PkResults *results = NULL;
+	const PkResults *results = NULL;
 	PkExitEnum exit_enum;
 	PkPackageSack *sack;
 	guint size;
@@ -3236,7 +3236,7 @@ pk_client_test_search_name_cb (GObject *object, GAsyncResult *res, EggTest *test
 {
 	PkClient *client = PK_CLIENT (object);
 	GError *error = NULL;
-	PkResults *results = NULL;
+	const PkResults *results = NULL;
 	PkExitEnum exit_enum;
 	const PkResultItemErrorCode *error_item;
 
diff --git a/lib/packagekit-glib2/pk-client.h b/lib/packagekit-glib2/pk-client.h
index eed293d..bc81d9d 100644
--- a/lib/packagekit-glib2/pk-client.h
+++ b/lib/packagekit-glib2/pk-client.h
@@ -103,7 +103,7 @@ PkClient	*pk_client_new				(void);
 void		 pk_client_test				(gpointer	 user_data);
 
 /* get transaction results */
-PkResults	*pk_client_generic_finish		(PkClient		*client,
+const PkResults	*pk_client_generic_finish		(PkClient		*client,
 							 GAsyncResult		*res,
 							 GError			**error);
 
diff --git a/lib/packagekit-glib2/pk-results.c b/lib/packagekit-glib2/pk-results.c
index c9fc53e..2c0f382 100644
--- a/lib/packagekit-glib2/pk-results.c
+++ b/lib/packagekit-glib2/pk-results.c
@@ -699,7 +699,7 @@ pk_results_add_message (PkResults *results, PkMessageEnum message_enum, const gc
  * Return value: The #PkExitEnum or %PK_EXIT_ENUM_UNKNOWN for error or if it was not set
  **/
 PkExitEnum
-pk_results_get_exit_code (PkResults *results)
+pk_results_get_exit_code (const PkResults *results)
 {
 	g_return_val_if_fail (PK_IS_RESULTS (results), PK_EXIT_ENUM_UNKNOWN);
 	return results->priv->exit_enum;
@@ -729,7 +729,7 @@ pk_results_get_package_array (const PkResults *results)
  * Return value: A #PkPackageSack of data.
  **/
 PkPackageSack *
-pk_results_get_package_sack (PkResults *results)
+pk_results_get_package_sack (const PkResults *results)
 {
 	PkPackage *package;
 	PkPackageSack *sack;
@@ -957,7 +957,7 @@ pk_results_get_error_code_array (const PkResults *results)
  * Return value: A #PkResultItemErrorCode, or %NULL
  **/
 const PkResultItemErrorCode *
-pk_results_get_error_code (PkResults *results)
+pk_results_get_error_code (const PkResults *results)
 {
 	GPtrArray *array;
 
diff --git a/lib/packagekit-glib2/pk-results.h b/lib/packagekit-glib2/pk-results.h
index 46d7f54..949ab52 100644
--- a/lib/packagekit-glib2/pk-results.h
+++ b/lib/packagekit-glib2/pk-results.h
@@ -342,9 +342,9 @@ gboolean	 pk_results_add_message 		(PkResults		*results,
 							 const gchar		*details);
 
 /* get single data */
-PkExitEnum	 pk_results_get_exit_code		(PkResults		*results);
-PkPackageSack	*pk_results_get_package_sack		(PkResults		*results);
-const PkResultItemErrorCode *pk_results_get_error_code	(PkResults		*results);
+PkExitEnum	 pk_results_get_exit_code		(const PkResults	*results);
+PkPackageSack	*pk_results_get_package_sack		(const PkResults	*results);
+const PkResultItemErrorCode *pk_results_get_error_code	(const PkResults	*results);
 
 /* get array objects */
 GPtrArray	*pk_results_get_package_array		(const PkResults	*results);
diff --git a/lib/packagekit-glib2/pk-task-wrapper.c b/lib/packagekit-glib2/pk-task-wrapper.c
index edad583..d63d6c9 100644
--- a/lib/packagekit-glib2/pk-task-wrapper.c
+++ b/lib/packagekit-glib2/pk-task-wrapper.c
@@ -22,7 +22,6 @@
 #include "config.h"
 
 #include <packagekit-glib2/pk-task-wrapper.h>
-//#include <packagekit-glib2/pk-common.h>
 #include <packagekit-glib2/pk-enum.h>
 #include <packagekit-glib2/pk-results.h>
 
@@ -80,6 +79,13 @@ dkp_task_wrapper_key_question (PkTask *task, guint request, const PkResults *res
 	for (i=0; i<array->len; i++) {
 		item = g_ptr_array_index (array, i);
 		g_print ("KEY:\n");
+		g_print (" Package: %s\n", item->package_id);
+		g_print (" Name: %s\n", item->repository_name);
+		g_print (" URL: %s\n", item->key_url);
+		g_print (" User: %s\n", item->key_userid);
+		g_print (" ID: %s\n", item->key_id);
+		g_print (" Fingerprint: %s\n", item->key_fingerprint);
+		g_print (" Timestamp: %s\n", item->key_timestamp);
 	}
 
 	/* just accept without asking */
@@ -107,6 +113,10 @@ dkp_task_wrapper_eula_question (PkTask *task, guint request, const PkResults *re
 	for (i=0; i<array->len; i++) {
 		item = g_ptr_array_index (array, i);
 		g_print ("EULA:\n");
+		g_print (" Eula ID: %s\n", item->eula_id);
+		g_print (" Package: %s\n", item->package_id);
+		g_print (" Vendor: %s\n", item->vendor_name);
+		g_print (" Agreement: %s\n", item->license_agreement);
 	}
 
 	/* just accept without asking */
@@ -134,6 +144,9 @@ dkp_task_wrapper_media_change_question (PkTask *task, guint request, const PkRes
 	for (i=0; i<array->len; i++) {
 		item = g_ptr_array_index (array, i);
 		g_print ("MEDIA CHANGE:\n");
+		g_print (" Media type: %s\n", pk_media_type_enum_to_text (item->media_type));
+		g_print (" ID: %s\n", item->media_id);
+		g_print (" Text: %s\n", item->media_text);
 	}
 
 	/* just accept without asking */
@@ -207,7 +220,7 @@ pk_task_wrapper_test_install_packages_cb (GObject *object, GAsyncResult *res, Eg
 {
 	PkTaskWrapper *task = PK_TASK_WRAPPER (object);
 	GError *error = NULL;
-	PkResults *results = NULL;
+	const PkResults *results = NULL;
 	PkExitEnum exit_enum;
 	GPtrArray *packages;
 	const PkResultItemPackage *item;
diff --git a/lib/packagekit-glib2/pk-task-wrapper.h b/lib/packagekit-glib2/pk-task-wrapper.h
index b64d535..2a365d2 100644
--- a/lib/packagekit-glib2/pk-task-wrapper.h
+++ b/lib/packagekit-glib2/pk-task-wrapper.h
@@ -23,7 +23,6 @@
 #define __PK_TASK_WRAPPER_H
 
 #include <glib-object.h>
-//#include <gio/gio.h>
 #include <packagekit-glib2/pk-task.h>
 
 G_BEGIN_DECLS
diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c
index 14b58cc..751ea6d 100644
--- a/lib/packagekit-glib2/pk-task.c
+++ b/lib/packagekit-glib2/pk-task.c
@@ -54,7 +54,7 @@ typedef struct {
 	gboolean			 only_trusted;
 	gchar				**package_ids;
 	GSimpleAsyncResult		*res;
-	PkResults			*results;
+	const PkResults			*results;
 	gboolean			 ret;
 	PkTask				*task;
 	GCancellable			*cancellable;
@@ -118,7 +118,7 @@ pk_task_generic_state_finish (PkTaskState *state, const GError *error)
 
 	/* get result */
 	if (state->ret) {
-		g_simple_async_result_set_op_res_gpointer (state->res, g_object_ref (state->results), g_object_unref);
+		g_simple_async_result_set_op_res_gpointer (state->res, g_object_ref ((GObject*) state->results), g_object_unref);
 	} else {
 		/* FIXME: change g_simple_async_result_set_from_error() to accept const GError */
 		g_simple_async_result_set_from_error (state->res, (GError*) error);
@@ -342,7 +342,7 @@ pk_task_install_packages_async (PkTask *task, gchar **package_ids, GCancellable
  *
  * Return value: %TRUE for success
  **/
-PkResults *
+const PkResults *
 pk_task_generic_finish (PkTask *task, GAsyncResult *res, GError **error)
 {
 	GSimpleAsyncResult *simple;
@@ -416,7 +416,7 @@ pk_task_test_install_packages_cb (GObject *object, GAsyncResult *res, EggTest *t
 {
 	PkTask *task = PK_TASK (object);
 	GError *error = NULL;
-	PkResults *results = NULL;
+	const PkResults *results = NULL;
 
 	/* get the results */
 	results = pk_task_generic_finish (task, res, &error);
diff --git a/lib/packagekit-glib2/pk-task.h b/lib/packagekit-glib2/pk-task.h
index 82d6936..ab61e1c 100644
--- a/lib/packagekit-glib2/pk-task.h
+++ b/lib/packagekit-glib2/pk-task.h
@@ -87,7 +87,7 @@ GType		 pk_task_get_type			(void);
 PkTask		*pk_task_new				(void);
 void		 pk_task_test				(gpointer		 user_data);
 
-PkResults	*pk_task_generic_finish			(PkTask			*task,
+const PkResults	*pk_task_generic_finish			(PkTask			*task,
 							 GAsyncResult		*res,
 							 GError			**error);
 
commit 3e452314d0040fe75488285783bedf9bbc0b3567
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Sep 3 10:37:06 2009 +0100

    Add PkTaskWrapper to just test the PkTask functionality

diff --git a/lib/packagekit-glib2/Makefile.am b/lib/packagekit-glib2/Makefile.am
index 4b1abb2..e8d6af2 100644
--- a/lib/packagekit-glib2/Makefile.am
+++ b/lib/packagekit-glib2/Makefile.am
@@ -102,6 +102,8 @@ pk_self_test_SOURCES =						\
 	$(libpackagekit_glib2_la_SOURCES)			\
 	egg-test.h						\
 	egg-test.c						\
+	pk-task-wrapper.c					\
+	pk-task-wrapper.h					\
 	pk-self-test.c						\
 	$(NULL)
 
diff --git a/lib/packagekit-glib2/pk-package-sack.c b/lib/packagekit-glib2/pk-package-sack.c
index 962a65c..aa8325e 100644
--- a/lib/packagekit-glib2/pk-package-sack.c
+++ b/lib/packagekit-glib2/pk-package-sack.c
@@ -729,7 +729,6 @@ pk_package_sack_merge_update_detail_async (PkPackageSack *sack, GCancellable *ca
 
 /**
  * pk_package_sack_class_init:
- * @klass: The PkPackageSackClass
  **/
 static void
 pk_package_sack_class_init (PkPackageSackClass *klass)
@@ -757,7 +756,6 @@ pk_package_sack_class_init (PkPackageSackClass *klass)
 
 /**
  * pk_package_sack_init:
- * @sack: This class instance
  **/
 static void
 pk_package_sack_init (PkPackageSack *sack)
@@ -772,7 +770,6 @@ pk_package_sack_init (PkPackageSack *sack)
 
 /**
  * pk_package_sack_finalize:
- * @object: The object to finalize
  **/
 static void
 pk_package_sack_finalize (GObject *object)
diff --git a/lib/packagekit-glib2/pk-self-test.c b/lib/packagekit-glib2/pk-self-test.c
index 18cd64a..e306668 100644
--- a/lib/packagekit-glib2/pk-self-test.c
+++ b/lib/packagekit-glib2/pk-self-test.c
@@ -34,6 +34,7 @@
 #include "pk-package-sack.h"
 #include "pk-results.h"
 #include "pk-task.h"
+#include "pk-task-wrapper.h"
 #include "pk-version.h"
 
 int
@@ -46,6 +47,7 @@ main (int argc, char **argv)
 	egg_debug_init (TRUE);
 
 	/* tests go here */
+#if 0
 	egg_string_test (test);
 	pk_common_test (test);
 	pk_enum_test (test);
@@ -57,7 +59,9 @@ main (int argc, char **argv)
 	pk_control_sync_test (test);
 	pk_client_test (test);
 	pk_package_sack_test (test);
+#endif
 	pk_task_test (test);
+	pk_task_wrapper_test (test);
 
 	return (egg_test_finish (test));
 }
diff --git a/lib/packagekit-glib2/pk-task-wrapper.c b/lib/packagekit-glib2/pk-task-wrapper.c
new file mode 100644
index 0000000..edad583
--- /dev/null
+++ b/lib/packagekit-glib2/pk-task-wrapper.c
@@ -0,0 +1,288 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at 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 <packagekit-glib2/pk-task-wrapper.h>
+//#include <packagekit-glib2/pk-common.h>
+#include <packagekit-glib2/pk-enum.h>
+#include <packagekit-glib2/pk-results.h>
+
+#include "egg-debug.h"
+
+static void     pk_task_wrapper_finalize	(GObject     *object);
+
+#define PK_TASK_WRAPPER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PK_TYPE_TASK_WRAPPER, PkTaskWrapperPrivate))
+
+/**
+ * PkTaskWrapperPrivate:
+ *
+ * Private #PkTaskWrapper data
+ **/
+struct _PkTaskWrapperPrivate
+{
+	gpointer		 user_data;
+};
+
+G_DEFINE_TYPE (PkTaskWrapper, pk_task_wrapper, PK_TYPE_TASK)
+
+/**
+ * pk_task_wrapper_untrusted_question:
+ **/
+static void
+dkp_task_wrapper_untrusted_question (PkTask *task, guint request, const PkResults *results)
+{
+	PkTaskWrapperPrivate *priv = PK_TASK_WRAPPER(task)->priv;
+
+	/* set some user data, for no reason */
+	priv->user_data = NULL;
+
+	g_print ("UNTRUSTED\n");
+
+	/* just accept without asking */
+	pk_task_user_acceptance (task, request);
+}
+
+/**
+ * pk_task_wrapper_key_question:
+ **/
+static void
+dkp_task_wrapper_key_question (PkTask *task, guint request, const PkResults *results)
+{
+	guint i;
+	GPtrArray *array;
+	PkResultItemRepoSignatureRequired *item;
+	PkTaskWrapperPrivate *priv = PK_TASK_WRAPPER(task)->priv;
+
+	/* set some user data, for no reason */
+	priv->user_data = NULL;
+
+	/* get data */
+	array = pk_results_get_repo_signature_required_array (results);
+	for (i=0; i<array->len; i++) {
+		item = g_ptr_array_index (array, i);
+		g_print ("KEY:\n");
+	}
+
+	/* just accept without asking */
+	pk_task_user_acceptance (task, request);
+
+	g_ptr_array_unref (array);
+}
+
+/**
+ * pk_task_wrapper_eula_question:
+ **/
+static void
+dkp_task_wrapper_eula_question (PkTask *task, guint request, const PkResults *results)
+{
+	guint i;
+	GPtrArray *array;
+	PkResultItemEulaRequired *item;
+	PkTaskWrapperPrivate *priv = PK_TASK_WRAPPER(task)->priv;
+
+	/* set some user data, for no reason */
+	priv->user_data = NULL;
+
+	/* get data */
+	array = pk_results_get_eula_required_array (results);
+	for (i=0; i<array->len; i++) {
+		item = g_ptr_array_index (array, i);
+		g_print ("EULA:\n");
+	}
+
+	/* just accept without asking */
+	pk_task_user_acceptance (task, request);
+
+	g_ptr_array_unref (array);
+}
+
+/**
+ * pk_task_wrapper_media_change_question:
+ **/
+static void
+dkp_task_wrapper_media_change_question (PkTask *task, guint request, const PkResults *results)
+{
+	guint i;
+	GPtrArray *array;
+	PkResultItemMediaChangeRequired *item;
+	PkTaskWrapperPrivate *priv = PK_TASK_WRAPPER(task)->priv;
+
+	/* set some user data, for no reason */
+	priv->user_data = NULL;
+
+	/* get data */
+	array = pk_results_get_media_change_required_array (results);
+	for (i=0; i<array->len; i++) {
+		item = g_ptr_array_index (array, i);
+		g_print ("MEDIA CHANGE:\n");
+	}
+
+	/* just accept without asking */
+	pk_task_user_acceptance (task, request);
+
+	g_ptr_array_unref (array);
+}
+
+/**
+ * pk_task_wrapper_class_init:
+ **/
+static void
+pk_task_wrapper_class_init (PkTaskWrapperClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	PkTaskClass *task_class = PK_TASK_CLASS (klass);
+
+	object_class->finalize = pk_task_wrapper_finalize;
+	task_class->untrusted_question = dkp_task_wrapper_untrusted_question;
+	task_class->key_question = dkp_task_wrapper_key_question;
+	task_class->eula_question = dkp_task_wrapper_eula_question;
+	task_class->media_change_question = dkp_task_wrapper_media_change_question;
+
+	g_type_class_add_private (klass, sizeof (PkTaskWrapperPrivate));
+}
+
+/**
+ * pk_task_wrapper_init:
+ * @task_wrapper: This class instance
+ **/
+static void
+pk_task_wrapper_init (PkTaskWrapper *task)
+{
+	task->priv = PK_TASK_WRAPPER_GET_PRIVATE (task);
+	task->priv->user_data = NULL;
+}
+
+/**
+ * pk_task_wrapper_finalize:
+ * @object: The object to finalize
+ **/
+static void
+pk_task_wrapper_finalize (GObject *object)
+{
+	PkTaskWrapper *task = PK_TASK_WRAPPER (object);
+	task->priv->user_data = NULL;
+	G_OBJECT_CLASS (pk_task_wrapper_parent_class)->finalize (object);
+}
+
+/**
+ * pk_task_wrapper_new:
+ *
+ * Return value: a new PkTaskWrapper object.
+ **/
+PkTaskWrapper *
+pk_task_wrapper_new (void)
+{
+	PkTaskWrapper *task;
+	task = g_object_new (PK_TYPE_TASK_WRAPPER, NULL);
+	return PK_TASK_WRAPPER (task);
+}
+
+/***************************************************************************
+ ***                          MAKE CHECK TESTS                           ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+static void
+pk_task_wrapper_test_install_packages_cb (GObject *object, GAsyncResult *res, EggTest *test)
+{
+	PkTaskWrapper *task = PK_TASK_WRAPPER (object);
+	GError *error = NULL;
+	PkResults *results = NULL;
+	PkExitEnum exit_enum;
+	GPtrArray *packages;
+	const PkResultItemPackage *item;
+	guint i;
+
+	/* get the results */
+	results = pk_task_generic_finish (PK_TASK (task), res, &error);
+	if (results == NULL) {
+		egg_test_failed (test, "failed to resolve: %s", error->message);
+		g_error_free (error);
+		return;
+	}
+
+	exit_enum = pk_results_get_exit_code (results);
+	if (exit_enum != PK_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_enum), item->package_id, item->summary);
+	}
+
+	if (packages->len != 5)
+		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));
+	egg_test_loop_quit (test);
+}
+
+static void
+pk_task_wrapper_test_progress_cb (PkProgress *progress, PkProgressType type, EggTest *test)
+{
+	PkStatusEnum status;
+	if (type == PK_PROGRESS_TYPE_STATUS) {
+		g_object_get (progress,
+			      "status", &status,
+			      NULL);
+		egg_debug ("now %s", pk_status_enum_to_text (status));
+	}
+}
+
+void
+pk_task_wrapper_test (gpointer user_data)
+{
+	EggTest *test = (EggTest *) user_data;
+	PkTaskWrapper *task;
+	gchar **package_ids;
+
+	if (!egg_test_start (test, "PkTaskWrapper"))
+		return;
+
+	/************************************************************/
+	egg_test_title (test, "get task_wrapper");
+	task = pk_task_wrapper_new ();
+	egg_test_assert (test, task != NULL);
+
+	/************************************************************/
+	egg_test_title (test, "install package");
+	package_ids = g_strsplit ("glib2;2.14.0;i386;fedora", ",", -1);
+	pk_task_install_packages_async (PK_TASK (task), package_ids, NULL,
+				        (PkProgressCallback) pk_task_wrapper_test_progress_cb, test,
+				        (GAsyncReadyCallback) pk_task_wrapper_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/lib/packagekit-glib2/pk-task-wrapper.h b/lib/packagekit-glib2/pk-task-wrapper.h
new file mode 100644
index 0000000..b64d535
--- /dev/null
+++ b/lib/packagekit-glib2/pk-task-wrapper.h
@@ -0,0 +1,61 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offtask_wrapper: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at 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 __PK_TASK_WRAPPER_H
+#define __PK_TASK_WRAPPER_H
+
+#include <glib-object.h>
+//#include <gio/gio.h>
+#include <packagekit-glib2/pk-task.h>
+
+G_BEGIN_DECLS
+
+#define PK_TYPE_TASK_WRAPPER		(pk_task_wrapper_get_type ())
+#define PK_TASK_WRAPPER(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), PK_TYPE_TASK_WRAPPER, PkTaskWrapper))
+#define PK_TASK_WRAPPER_CLASS(k)	(G_TYPE_CHECK_CLASS_CAST((k), PK_TYPE_TASK_WRAPPER, PkTaskWrapperClass))
+#define PK_IS_TASK_WRAPPER(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), PK_TYPE_TASK_WRAPPER))
+#define PK_IS_TASK_WRAPPER_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), PK_TYPE_TASK_WRAPPER))
+#define PK_TASK_WRAPPER_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_TASK_WRAPPER, PkTaskWrapperClass))
+
+typedef struct _PkTaskWrapperPrivate	PkTaskWrapperPrivate;
+typedef struct _PkTaskWrapper		PkTaskWrapper;
+typedef struct _PkTaskWrapperClass	PkTaskWrapperClass;
+
+struct _PkTaskWrapper
+{
+	 PkTask				 parent;
+	 PkTaskWrapperPrivate		*priv;
+};
+
+struct _PkTaskWrapperClass
+{
+	PkTaskClass			 parent_class;
+};
+
+GQuark		 pk_task_wrapper_error_quark			(void);
+GType		 pk_task_wrapper_get_type			(void);
+PkTaskWrapper	*pk_task_wrapper_new				(void);
+void		 pk_task_wrapper_test				(gpointer		 user_data);
+
+G_END_DECLS
+
+#endif /* __PK_TASK_WRAPPER_H */
+
diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c
index c3c64e4..14b58cc 100644
--- a/lib/packagekit-glib2/pk-task.c
+++ b/lib/packagekit-glib2/pk-task.c
@@ -21,26 +21,6 @@
 
 #include "config.h"
 
-#include <stdlib.h>
-#include <stdio.h>
-#include <time.h>
-#include <errno.h>
-
-#include <string.h>
-#include <locale.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif /* HAVE_UNISTD_H */
-
-#include <sys/wait.h>
-#include <fcntl.h>
-
-#include <glib/gi18n.h>
-#include <glib/gprintf.h>
-#include <dbus/dbus-glib.h>
-
 #include <packagekit-glib2/pk-task.h>
 #include <packagekit-glib2/pk-common.h>
 #include <packagekit-glib2/pk-enum.h>
@@ -381,7 +361,6 @@ pk_task_generic_finish (PkTask *task, GAsyncResult *res, GError **error)
 
 /**
  * pk_task_class_init:
- * @klass: The PkTaskClass
  **/
 static void
 pk_task_class_init (PkTaskClass *klass)
@@ -394,7 +373,6 @@ pk_task_class_init (PkTaskClass *klass)
 
 /**
  * pk_task_init:
- * @task: This class instance
  **/
 static void
 pk_task_init (PkTask *task)
@@ -405,7 +383,6 @@ pk_task_init (PkTask *task)
 
 /**
  * pk_task_finalize:
- * @object: The object to finalize
  **/
 static void
 pk_task_finalize (GObject *object)
@@ -440,39 +417,22 @@ pk_task_test_install_packages_cb (GObject *object, GAsyncResult *res, EggTest *t
 	PkTask *task = PK_TASK (object);
 	GError *error = NULL;
 	PkResults *results = NULL;
-	PkExitEnum exit_enum;
-	GPtrArray *packages;
-	const PkResultItemPackage *item;
-	guint i;
 
 	/* get the results */
 	results = pk_task_generic_finish (task, res, &error);
-	if (results == NULL) {
-		egg_test_failed (test, "failed to resolve: %s", error->message);
-		g_error_free (error);
+	if (results != NULL) {
+		egg_test_failed (test, "finish should fail!");
 		return;
 	}
 
-	exit_enum = pk_results_get_exit_code (results);
-	if (exit_enum != PK_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_enum), item->package_id, item->summary);
+	/* check error */
+	if (g_strcmp0 (error->message, "could not do untrusted question as no klass support") != 0) {
+		egg_test_failed (test, "wrong message: %s", error->message);
+		g_error_free (error);
+		return;
 	}
 
-	if (packages->len != 5)
-		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));
+	g_error_free (error);
 	egg_test_loop_quit (test);
 }
 
diff --git a/lib/packagekit-glib2/pk-task.h b/lib/packagekit-glib2/pk-task.h
index 8e17471..82d6936 100644
--- a/lib/packagekit-glib2/pk-task.h
+++ b/lib/packagekit-glib2/pk-task.h
@@ -52,7 +52,6 @@ G_BEGIN_DECLS
 typedef struct _PkTaskPrivate	PkTaskPrivate;
 typedef struct _PkTask		PkTask;
 typedef struct _PkTaskClass	PkTaskClass;
-typedef struct _PkTaskResults	PkTaskResults;
 
 struct _PkTask
 {
commit ec218a8699100c362008685684fd945e5f8d564f
Author: swkothar <swkothar at fedoraproject.org>
Date:   Thu Sep 3 09:11:06 2009 +0000

    Sending translation for Gujarati

diff --git a/po/gu.po b/po/gu.po
index 57962d7..70fed21 100644
--- a/po/gu.po
+++ b/po/gu.po
@@ -1,4 +1,4 @@
-# translation of gu.po to Gujarati
+# translation of packagekit.po to Gujarati
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 #
@@ -6,10 +6,10 @@
 # Sweta Kothari <swkothar at redhat.com>, 2009.
 msgid ""
 msgstr ""
-"Project-Id-Version: gu\n"
+"Project-Id-Version: packagekit\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-08-24 11:06+0100\n"
-"PO-Revision-Date: 2009-06-04 11:24+0530\n"
+"POT-Creation-Date: 2009-09-03 02:38+0000\n"
+"PO-Revision-Date: 2009-09-03 14:39+0530\n"
 "Last-Translator: Sweta Kothari <swkothar at redhat.com>\n"
 "Language-Team: Gujarati\n"
 "MIME-Version: 1.0\n"
@@ -21,786 +21,827 @@ msgstr ""
 "\n"
 
 #. TRANSLATORS: this is an atomic transaction
-#: ../client/pk-console.c:235
+#: ../client/pk-console.c:238
 msgid "Transaction"
 msgstr "પરિવહન"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:237
+#: ../client/pk-console.c:240
 msgid "System time"
 msgstr "સિસ્ટમ સમય"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:239
+#: ../client/pk-console.c:242
 msgid "Succeeded"
 msgstr "સફળ થયેલ"
 
-#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:239 ../client/pk-console.c:406
+#: ../client/pk-console.c:242
 msgid "True"
 msgstr "True"
 
-#: ../client/pk-console.c:239 ../client/pk-console.c:406
+#: ../client/pk-console.c:242
 msgid "False"
 msgstr "False"
 
 #. TRANSLATORS: this is the transactions role, e.g. "update-system"
 #. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:241 ../src/pk-polkit-action-lookup.c:327
+#: ../client/pk-console.c:244 ../src/pk-polkit-action-lookup.c:327
 msgid "Role"
 msgstr "ભૂમિકા"
 
 #. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:246
+#: ../client/pk-console.c:249
 msgid "Duration"
 msgstr "ગાળો"
 
-#: ../client/pk-console.c:246
+#: ../client/pk-console.c:249
 msgid "(seconds)"
 msgstr "(સકંડો)"
 
 #. TRANSLATORS: this is The command line used to do the action
 #. TRANSLATORS: the command line of the thing that wants the authentication
-#: ../client/pk-console.c:250 ../src/pk-polkit-action-lookup.c:341
+#: ../client/pk-console.c:253 ../src/pk-polkit-action-lookup.c:341
 msgid "Command line"
 msgstr "આદેશ વાક્ય"
 
 #. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:252
+#: ../client/pk-console.c:255
 msgid "User ID"
 msgstr "વપરાશકર્તા ID"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:259
+#: ../client/pk-console.c:262
 msgid "Username"
 msgstr "વપરાશકર્તાનામ"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:263
+#: ../client/pk-console.c:266
 msgid "Real name"
 msgstr "સાચુ નામ"
 
-#: ../client/pk-console.c:271
+#: ../client/pk-console.c:274
 msgid "Affected packages:"
 msgstr "અસર થયેલ પેકેજો:"
 
-#: ../client/pk-console.c:273
+#: ../client/pk-console.c:276
 msgid "Affected packages: None"
 msgstr "અસર થયેલ પેકેજો: કંઇ નહિં"
 
+#. TRANSLATORS: When processing, we might have to remove other dependencies
+#: ../client/pk-console.c:337
+msgid "The following packages have to be removed:"
+msgstr "નીચેના પેકેજો દૂર કરવામાં આવવા જોઈએ:"
+
+#. TRANSLATORS: When processing, we might have to install other dependencies
+#: ../client/pk-console.c:340
+msgid "The following packages have to be installed:"
+msgstr "નીચેનાં પેકેજોને સ્થાપિત કરવુ જ પડશે:"
+
+#. TRANSLATORS: When processing, we might have to update other dependencies
+#: ../client/pk-console.c:343
+msgid "The following packages have to be updated:"
+msgstr "નીચેનાં પેકેજોને સુધારવુ જ પડશે:"
+
+#. TRANSLATORS: When processing, we might have to reinstall other dependencies
+#: ../client/pk-console.c:346
+msgid "The following packages have to be reinstalled:"
+msgstr "નીચેનાં પેકેજોને પુન:સ્થાપિત કરવુ જ પડશે:"
+
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../client/pk-console.c:349
+msgid "The following packages have to be downgraded:"
+msgstr "નીચેનાં પેકેજોને નીચે ઉતારવા જ પડશે:"
+
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:298
+#: ../client/pk-console.c:363
 msgid "Distribution"
 msgstr "વિતરણ"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:300
+#: ../client/pk-console.c:365
 msgid "Type"
 msgstr "પ્રકાર"
 
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:302 ../client/pk-console.c:325
+#: ../client/pk-console.c:367 ../client/pk-console.c:390
 msgid "Summary"
 msgstr "સારાંશ"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:314
+#: ../client/pk-console.c:379
 msgid "Category"
 msgstr "વર્ગ"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:316
+#: ../client/pk-console.c:381
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:319
+#: ../client/pk-console.c:384
 msgid "Parent"
 msgstr "પિતૃ"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:322
+#: ../client/pk-console.c:387
 msgid "Name"
 msgstr "નામ"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:328
+#: ../client/pk-console.c:393
 msgid "Icon"
 msgstr "ચિહ્ન"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:343
+#: ../client/pk-console.c:408
 msgid "Details about the update:"
 msgstr "સુધારા વિશે વિગતો:"
 
 #. TRANSLATORS: details about the update, package name and version
 #. TRANSLATORS: title, the names of the packages that the method is processing
-#: ../client/pk-console.c:345 ../src/pk-polkit-action-lookup.c:352
-#, fuzzy
+#: ../client/pk-console.c:410 ../src/pk-polkit-action-lookup.c:352
 msgid "Package"
 msgid_plural "Packages"
 msgstr[0] "પેકેજ"
-msgstr[1] "પેકેજ"
+msgstr[1] "પેકેજો"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:348
+#: ../client/pk-console.c:413
 msgid "Updates"
 msgstr "સુધારો"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:352
+#: ../client/pk-console.c:417
 msgid "Obsoletes"
 msgstr "અપ્રચલિત"
 
 #. TRANSLATORS: details about the update, the vendor URLs
-#: ../client/pk-console.c:356
+#: ../client/pk-console.c:421
 msgid "Vendor"
 msgstr "વિક્રેતા"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:360
+#: ../client/pk-console.c:425
 msgid "Bugzilla"
 msgstr "બગઝીલા"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:364
+#: ../client/pk-console.c:429
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:368
+#: ../client/pk-console.c:433
 msgid "Restart"
 msgstr "પુન:શરૂ કરો"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:372
+#: ../client/pk-console.c:437
 msgid "Update text"
 msgstr "લખાણને સુધારો"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:376
+#: ../client/pk-console.c:441
 msgid "Changes"
 msgstr "બદલાવો"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:380
+#: ../client/pk-console.c:445
 msgid "State"
 msgstr "સ્થિતિ"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:385
+#: ../client/pk-console.c:450
 msgid "Issued"
 msgstr "અદા કરેલ"
 
 #. TRANSLATORS: details about the update, date the update was updated
-#: ../client/pk-console.c:390
+#: ../client/pk-console.c:455
 msgid "Updated"
 msgstr "સુધારેલ"
 
-#: ../client/pk-console.c:477 ../client/pk-console.c:479
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:475
+msgid "Enabled"
+msgstr "સક્રિય થયેલ છે"
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:478
+msgid "Disabled"
+msgstr "નિષ્ક્રિય થયેલ"
+
+#: ../client/pk-console.c:555 ../client/pk-console.c:557
 msgid "Percentage"
 msgstr "ટકાવારી"
 
-#: ../client/pk-console.c:479
+#: ../client/pk-console.c:557
 msgid "Unknown"
 msgstr "અજ્ઞાત"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:521
+#: ../client/pk-console.c:599
 msgid "System restart required by:"
 msgstr "સિસ્ટમ જરૂરિયાત પ્રમાણે પુન:શરૂ થાય છે:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:524
+#: ../client/pk-console.c:602
 msgid "Session restart required:"
 msgstr "સત્ર પુન:શરૂ કરવુ જરૂરી:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:527
-#, fuzzy
+#: ../client/pk-console.c:605
 msgid "System restart (security) required by:"
-msgstr "સિસ્ટમ જરૂરિયાત પ્રમાણે પુન:શરૂ થાય છે:"
+msgstr "સિસ્ટમ જરૂરિયાત પ્રમાણે પુન:શરૂ (સુરક્ષા) થાય છે:"
 
 #. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:530
-#, fuzzy
+#: ../client/pk-console.c:608
 msgid "Session restart (security) required:"
-msgstr "સત્ર પુન:શરૂ કરવુ જરૂરી:"
+msgstr "સત્ર પુન:શરૂ (સુરક્ષા)કરવુ જરૂરી:"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:533
+#: ../client/pk-console.c:611
 msgid "Application restart required by:"
 msgstr "કાર્યક્રમ એ જરૂરિયાત પ્રમાણે પુન:શરૂ થાય છે:"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:588
+#: ../client/pk-console.c:666
 msgid "Please restart the computer to complete the update."
 msgstr "સુધારો સમાપ્ત કરવા માટે મહેરબાની કરીને કમ્પ્યૂટર પુનઃશરૂ કરો."
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:591
+#: ../client/pk-console.c:669
 msgid "Please logout and login to complete the update."
 msgstr "સુધારો સમાપ્ત કરવા માટે મહેરબાની કરીને બહાર નીકળો અને પછી ફરી પ્રવેશ કરો."
 
 #. TRANSLATORS: a package needs to restart the application
-#: ../client/pk-console.c:594
+#: ../client/pk-console.c:672
 msgid "Please restart the application as it is being used."
 msgstr "મહેરબાની કરીને કાર્યક્રમ ફરી શરૂ કરો કારણ કે તે વપરાઈ રહ્યો છે."
 
 #. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:597
-#, fuzzy
+#: ../client/pk-console.c:675
 msgid ""
 "Please restart the computer to complete the update as important security "
 "updates have been installed."
-msgstr "સુધારો સમાપ્ત કરવા માટે મહેરબાની કરીને કમ્પ્યૂટર પુનઃશરૂ કરો."
+msgstr ""
+"મહેરબાની કરીને સુધારાને સમાપ્ત કરવા માટે કમ્પ્યૂટરને પુન:શરૂ કરો મહત્વની સુરક્ષા સુધારાઓને સ્થાપિત કરી "
+"દેવામાં આવ્યા છે."
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:600
-#, fuzzy
+#: ../client/pk-console.c:678
 msgid ""
 "Please logout and login to complete the update as important security updates "
 "have been installed."
-msgstr "સુધારો સમાપ્ત કરવા માટે મહેરબાની કરીને બહાર નીકળો અને પછી ફરી પ્રવેશ કરો."
+msgstr "મહેરબાની કરીને બહાર નીકળો અને સુધારાને સમાપ્ત કરવા માટે પ્રવેશો મહત્વનાં સુધારાઓને સ્થાપિત કરી દેવામાં આવ્યા છે."
 
 #. TRANSLATORS: The package is already installed on the system
-#: ../client/pk-console.c:727
+#: ../client/pk-console.c:810
 #, c-format
 msgid "The package %s is already installed"
 msgstr "પેકેજ %s પહેલાથી જ સ્થાપિત થયેલ છે"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:735
+#: ../client/pk-console.c:818
 #, c-format
 msgid "The package %s could not be installed: %s"
 msgstr "પેકેજ %s સ્થાપિત કરી શક્યા નહિં: %s"
 
 #. TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows
-#: ../client/pk-console.c:760 ../client/pk-console.c:783
-#: ../client/pk-console.c:879 ../client/pk-console.c:996
-#: ../client/pk-tools-common.c:62 ../client/pk-tools-common.c:81
-#: ../client/pk-tools-common.c:89
+#: ../client/pk-console.c:844 ../client/pk-console.c:892
+#: ../client/pk-console.c:916 ../client/pk-console.c:964
+#: ../client/pk-console.c:1060 ../client/pk-console.c:1173
+#: ../client/pk-console.c:1234 ../client/pk-tools-common.c:63
+#: ../client/pk-tools-common.c:82 ../client/pk-tools-common.c:90
 #, c-format
 msgid "Internal error: %s"
 msgstr "આંતરિક ભૂલ: %s"
 
+#. TRANSLATORS: We are checking if it's okay to remove a list of packages
+#: ../client/pk-console.c:876 ../client/pk-console.c:948
+#: ../client/pk-console.c:1266
+msgid "Proceed with changes?"
+msgstr "બદલાવો સાથે આગળ વધો?"
+
+#. TRANSLATORS: There was an error removing the packages. The detailed error follows
+#: ../client/pk-console.c:881 ../client/pk-console.c:953
+msgid "The package install was canceled!"
+msgstr "પેકેજ સ્થાપન રદ કરેલ હતુ!"
+
 #. TRANSLATORS: There was an error installing the packages. The detailed error follows
-#: ../client/pk-console.c:768 ../client/pk-console.c:1392
+#: ../client/pk-console.c:900 ../client/pk-console.c:1634
 #, c-format
 msgid "This tool could not install the packages: %s"
 msgstr "આ સાધન પેકેજો સ્થાપિત કરી શક્યું નહિં: %s"
 
 #. TRANSLATORS: There was an error installing the files. The detailed error follows
-#: ../client/pk-console.c:791
+#: ../client/pk-console.c:972
 #, c-format
 msgid "This tool could not install the files: %s"
 msgstr "આ સાધન ફાઈલો સ્થાપિત કરી શક્યું નહિં: %s"
 
 #. TRANSLATORS: The package name was not found in the installed list. The detailed error follows
-#: ../client/pk-console.c:847
+#: ../client/pk-console.c:1028
 #, c-format
 msgid "This tool could not remove %s: %s"
 msgstr "આ સાધન %s દૂર કરી શક્યું નહિં: %s"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:870 ../client/pk-console.c:908
-#: ../client/pk-console.c:941
+#: ../client/pk-console.c:1051 ../client/pk-console.c:1089
+#: ../client/pk-console.c:1118
 #, c-format
 msgid "This tool could not remove the packages: %s"
 msgstr "આ સાધન પેકેજો દૂર કરી શક્યું નહિં: %s"
 
-#. TRANSLATORS: When removing, we might have to remove other dependencies
-#: ../client/pk-console.c:920
-msgid "The following packages have to be removed:"
-msgstr "નીચેના પેકેજો દૂર કરવામાં આવવા જોઈએ:"
-
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:927
-msgid "Proceed removing additional packages?"
-msgstr "શું વધારાના પેકેજો દૂર કરવા પર પ્રક્રિયા કરવી છે?"
+#: ../client/pk-console.c:1104
+msgid "Proceed with additional packages?"
+msgstr "વધારાનાં પેકેજો સાથે આગળ જાઓ?"
 
-#. TRANSLATORS: We did not remove any packages
-#: ../client/pk-console.c:932
+#. TRANSLATORS: There was an error removing the packages. The detailed error follows
+#: ../client/pk-console.c:1109
 msgid "The package removal was canceled!"
 msgstr "પેકેજ નિરાકરણ રદ થઈ હતી!"
 
 #. TRANSLATORS: The package name was not found in any software sources
-#: ../client/pk-console.c:973
+#: ../client/pk-console.c:1150
 #, c-format
 msgid "This tool could not download the package %s as it could not be found"
 msgstr "આ સાધન પેકેજ %s દૂર કરી શક્યું નહિં કારણ કે તે શોધી શકાયું નહિં"
 
 #. TRANSLATORS: Could not download the packages for some reason. The detailed error follows
-#: ../client/pk-console.c:1004
+#: ../client/pk-console.c:1181
 #, c-format
 msgid "This tool could not download the packages: %s"
 msgstr "આ સાધન પેકેજો ડાઉનલોડ કરી શક્યા નહિં: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1031 ../client/pk-console.c:1040
+#: ../client/pk-console.c:1213 ../client/pk-console.c:1225
+#: ../client/pk-console.c:1280
 #, c-format
 msgid "This tool could not update %s: %s"
 msgstr "આ સાધન %s સુધારી શક્યું નહિં: %s"
 
+#. TRANSLATORS: There was an error removing the packages. The detailed error follows
+#: ../client/pk-console.c:1271
+msgid "The package update was canceled!"
+msgstr "પેકેજ સુધારો રદ થયેલ હતુ!"
+
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1062 ../client/pk-console.c:1070
+#: ../client/pk-console.c:1304 ../client/pk-console.c:1312
 #, c-format
 msgid "This tool could not get the requirements for %s: %s"
 msgstr "આ સાધન %s માટેની જરૂરીયાતો મેળવી શક્યું નહિં: %s"
 
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
-#: ../client/pk-console.c:1092 ../client/pk-console.c:1100
+#: ../client/pk-console.c:1334 ../client/pk-console.c:1342
 #, c-format
 msgid "This tool could not get the dependencies for %s: %s"
 msgstr "આ સાધન %s માટે આધારભૂતપણાઓ મેળવી શક્યું નહિં: %s"
 
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
-#: ../client/pk-console.c:1122 ../client/pk-console.c:1130
+#: ../client/pk-console.c:1364 ../client/pk-console.c:1372
 #, c-format
 msgid "This tool could not get package details for %s: %s"
 msgstr "આ સાધન %s માટે પેકેજ વિગતો મેળવી શક્યું નહિં: %s"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1152
+#: ../client/pk-console.c:1394
 #, c-format
 msgid "This tool could not find the files for %s: %s"
 msgstr "આ સાધન %s માટે ફાઈલો શોધી શક્યું નહિં: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1160
+#: ../client/pk-console.c:1402
 #, c-format
 msgid "This tool could not get the file list for %s: %s"
 msgstr "આ સાધન %s માટે ફાઈલ યાદી મેળવી શક્યું નહિં: %s"
 
 #. TRANSLATORS: There was an error getting the list of packages. The filename follows
-#: ../client/pk-console.c:1182
+#: ../client/pk-console.c:1424
 #, c-format
 msgid "File already exists: %s"
 msgstr "ફાઇલ પહેલેથી જ અસ્તિત્વ ધરાવે છે: %s"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1187 ../client/pk-console.c:1243
-#: ../client/pk-console.c:1318
+#: ../client/pk-console.c:1429 ../client/pk-console.c:1485
+#: ../client/pk-console.c:1560
 msgid "Getting package list"
 msgstr "પેકેજ યાદી મેળવી રહ્યા છે"
 
 #. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
-#: ../client/pk-console.c:1193 ../client/pk-console.c:1249
-#: ../client/pk-console.c:1324
+#: ../client/pk-console.c:1435 ../client/pk-console.c:1491
+#: ../client/pk-console.c:1566
 #, c-format
 msgid "This tool could not get package list: %s"
 msgstr "આ સાધન પેકેજ યાદી મેળવી શક્યું નહિં: %s"
 
 #. TRANSLATORS: There was an error saving the list
-#: ../client/pk-console.c:1204
+#: ../client/pk-console.c:1446
 #, c-format
 msgid "Failed to save to disk"
 msgstr "ડિસ્કમાં સંગ્રહ કરવા માટે નિષ્ફળ"
 
 #. TRANSLATORS: There was an error getting the list. The filename follows
-#: ../client/pk-console.c:1238 ../client/pk-console.c:1313
+#: ../client/pk-console.c:1480 ../client/pk-console.c:1555
 #, c-format
 msgid "File does not exist: %s"
 msgstr "ફાઇલ અસ્તિત્વ ધરાવતી નથી: %s"
 
 #. TRANSLATORS: header to a list of packages newly added
-#: ../client/pk-console.c:1270
+#: ../client/pk-console.c:1512
 msgid "Packages to add"
 msgstr "ઉમેરવા માટે પેકેજો"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1278
+#: ../client/pk-console.c:1520
 msgid "Packages to remove"
 msgstr "દૂક કરવા માટે પેકેજો"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1346
+#: ../client/pk-console.c:1588
 #, c-format
 msgid "No new packages need to be installed"
 msgstr "સ્થાપિત કરવા માટે નવા પેકેજોની જરૂર નથી"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1352
+#: ../client/pk-console.c:1594
 msgid "To install"
 msgstr "સ્થાપન કરવા માટે"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1364
+#: ../client/pk-console.c:1606
 msgid "Searching for package: "
 msgstr "પેકેજ માટે શોધી રહ્યા છે: "
 
 #. TRANSLATORS: package was not found -- this is the end of a string ended in ...
-#: ../client/pk-console.c:1368
+#: ../client/pk-console.c:1610
 msgid "not found."
 msgstr "શોધાયુ નથી."
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1379
+#: ../client/pk-console.c:1621
 #, c-format
 msgid "No packages can be found to install"
 msgstr "સ્થાપિત કરવા માટે પેકેજોને શોધી શકાયા નહિં"
 
 #. TRANSLATORS: installing new packages from package list
 #. TRANSLATORS: we are now installing the debuginfo packages we found earlier
-#: ../client/pk-console.c:1385
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:886
+#: ../client/pk-console.c:1627
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
 #, c-format
 msgid "Installing packages"
 msgstr "પેકેજોને સ્થાપિત કરી રહ્યા છે"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1421
+#: ../client/pk-console.c:1663
 #, c-format
 msgid "This tool could not find the update details for %s: %s"
 msgstr "આ સાધન %s માટે સુધારા વિગતો શોધી શક્યું નહિં: %s"
 
 #. TRANSLATORS: There was an error getting the details about the update for the package. The detailed error follows
-#: ../client/pk-console.c:1429
+#: ../client/pk-console.c:1671
 #, c-format
 msgid "This tool could not get the update details for %s: %s"
 msgstr "આ સાધન %s માટે સુધારા વિગતો મેળવી શક્યું નહિં: %s"
 
 #. TRANSLATORS: This was an unhandled error, and we don't have _any_ context
-#: ../client/pk-console.c:1460
+#: ../client/pk-console.c:1702
 msgid "Error:"
 msgstr "ભૂલ:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1474
+#: ../client/pk-console.c:1716
 msgid "Package description"
 msgstr "પેકેજ વર્ણન"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:1490
+#: ../client/pk-console.c:1732
 msgid "Message:"
 msgstr "સંદેશ:"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1518
+#: ../client/pk-console.c:1760
 msgid "Package files"
 msgstr "પેકેજ ફાઈલો"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1526
+#: ../client/pk-console.c:1768
 msgid "No files"
 msgstr "કોઈ ફાઈલો નથી"
 
 #. TRANSLATORS: This a request for a GPG key signature from the backend, which the client will prompt for later
-#: ../client/pk-console.c:1549
+#: ../client/pk-console.c:1791
 msgid "Repository signature required"
 msgstr "રીપોઝીટરી સહી જરૂરી"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
-#: ../client/pk-console.c:1559
+#: ../client/pk-console.c:1801
 msgid "Do you accept this signature?"
 msgstr "શું તમે આ સહી સ્વીકારશો?"
 
 #. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1563
+#: ../client/pk-console.c:1805
 msgid "The signature was not accepted."
 msgstr "સહી સ્વીકારાયેલ ન હતી."
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1597
+#: ../client/pk-console.c:1839
 msgid "End user license agreement required"
 msgstr "અંતિમ વપરાશકર્તા લાઈસન્સ મંજૂરીપત્રક જરૂરી"
 
 #. TRANSLATORS: This a prompt asking the user to agree to the license
-#: ../client/pk-console.c:1604
+#: ../client/pk-console.c:1846
 msgid "Do you agree to this license?"
 msgstr "શું તમે આ લાઈસન્સ સાથે મંજૂર છો?"
 
 #. TRANSLATORS: This is where the user declined the license
-#: ../client/pk-console.c:1608
+#: ../client/pk-console.c:1850
 msgid "The license was refused."
 msgstr "લાઈસન્સ રદ થયું હતું."
 
 #. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1637
+#: ../client/pk-console.c:1879
 msgid "The daemon crashed mid-transaction!"
 msgstr "ડિમન મધ્ય-પરિવહન દરમ્યાન ભાંગી પડ્યું!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1690
+#: ../client/pk-console.c:1932
 msgid "PackageKit Console Interface"
 msgstr "PackageKit કન્સોલ ઈન્ટરફેસ"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1692
+#: ../client/pk-console.c:1934
 msgid "Subcommands:"
 msgstr "ઉપઆદેશો:"
 
 #. TRANSLATORS: command line argument, if we should show debugging information
 #. TRANSLATORS: if we should show debugging data
-#: ../client/pk-console.c:1785 ../client/pk-generate-pack.c:185
+#: ../client/pk-console.c:2027 ../client/pk-generate-pack.c:187
 #: ../client/pk-monitor.c:128
 #: ../contrib/command-not-found/pk-command-not-found.c:616
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:550
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:549
 #: ../contrib/device-rebind/pk-device-rebind.c:293 ../src/pk-main.c:211
 msgid "Show extra debugging information"
 msgstr "વધારાની ડિબગીંગ જાણકારી બતાવો"
 
 #. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1788 ../client/pk-monitor.c:130
+#: ../client/pk-console.c:2030 ../client/pk-monitor.c:130
 msgid "Show the program version and exit"
 msgstr "કાર્યક્રમ આવૃત્તિ બતાવો અને બહાર નીકળો"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1791
+#: ../client/pk-console.c:2033
 msgid "Set the filter, e.g. installed"
 msgstr "ગાળક સુયોજીત કરો, દા.ત. સ્થાપિત"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1794
+#: ../client/pk-console.c:2036
 msgid "Exit without waiting for actions to complete"
 msgstr "ક્રિયાઓ સમાપ્ત થવાની રાહ જોયા વિના બહાર નીકળો"
 
 #. TRANSLATORS: This is when we could not connect to the system bus, and is fatal
-#: ../client/pk-console.c:1821
+#: ../client/pk-console.c:2063
 msgid "This tool could not connect to system DBUS."
 msgstr "આ સાધન સિસ્ટમ DBUS સાથે જોડી શક્યા નહિં."
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1911
+#: ../client/pk-console.c:2153
 msgid "The filter specified was invalid"
 msgstr "સ્પષ્ટ થયેલ ફિલ્ટર અયોગ્ય હતુ"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1930
+#: ../client/pk-console.c:2172
 msgid "A search type is required, e.g. name"
 msgstr "શોધ પ્રકારની જરૂરિયાત છે, દા.ત. નામ"
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1937 ../client/pk-console.c:1946
-#: ../client/pk-console.c:1955 ../client/pk-console.c:1964
+#: ../client/pk-console.c:2179 ../client/pk-console.c:2188
+#: ../client/pk-console.c:2197 ../client/pk-console.c:2206
 msgid "A search term is required"
 msgstr "શોધ ટર્મ જરૂરી છે"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1971
+#: ../client/pk-console.c:2213
 msgid "Invalid search type"
 msgstr "અયોગ્ય શોધ પ્રકાર"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1977
+#: ../client/pk-console.c:2219
 msgid "A package name or filename to install is required"
 msgstr "સ્થાપન કરવા માટે પેકેજ નામ અથવા ફાઇલનામ જરૂરી છે"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1986
+#: ../client/pk-console.c:2228
 msgid "A type, key_id and package_id are required"
 msgstr "પ્રકાર, key_id અને package_id જરૂરી છે"
 
 #. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1995
+#: ../client/pk-console.c:2237
 msgid "A package name to remove is required"
 msgstr "દૂર કરવા માટે પેકેજ નામ જરૂરી છે"
 
 #. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:2003
-#, fuzzy
+#: ../client/pk-console.c:2245
 msgid "A destination directory and the package names to download are required"
 msgstr "અંતિમ મુકામ ડિરેક્ટરી અને પછી પેકેજ નામો ડાઉનલોડ કરવા માટે જરૂરી છે"
 
 #. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:2010
+#: ../client/pk-console.c:2252
 msgid "Directory not found"
 msgstr "ડિરેક્ટરી મળી નહિં"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2018
+#: ../client/pk-console.c:2260
 msgid "A licence identifier (eula-id) is required"
 msgstr "લાઈસન્સ ઓળખનાર (eula-id) જરૂરી છે"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2028
+#: ../client/pk-console.c:2270
 msgid "A transaction identifier (tid) is required"
 msgstr "પરિવહન ઓળખનાર (tid) જરૂરી છે"
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:2045
+#: ../client/pk-console.c:2287
 msgid "A package name to resolve is required"
 msgstr "સુધારવા માટે પેકેજ નામ જરૂરી છે"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:2054 ../client/pk-console.c:2063
+#: ../client/pk-console.c:2296 ../client/pk-console.c:2305
 msgid "A repository name is required"
 msgstr "રીપોઝીટરી નામ જરૂરી છે"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:2072
+#: ../client/pk-console.c:2314
 msgid "A repo name, parameter and value are required"
 msgstr "રીપો નામ, પરિમાણ અને કિંમતની જરૂર છે"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:2086
+#: ../client/pk-console.c:2328
 msgid "An action, e.g. 'update-system' is required"
 msgstr "ક્રિયા, દા.ત. 'update-system જરૂરી છે"
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:2093
+#: ../client/pk-console.c:2335
 msgid "A correct role is required"
 msgstr "સાચી ભૂમિકા જરૂરી છે"
 
 #. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:2100
+#: ../client/pk-console.c:2342
 msgid "Failed to get the time since this action was last completed"
 msgstr "આ ક્રિયા છેલ્લી સમાપ્ત થયેલ હતી ત્યાં સુધી સમયને મેળવવાનું નિષ્ફળ"
 
 #. TRANSLATORS: The user did not provide a package name
 #. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:2110 ../client/pk-console.c:2122
-#: ../client/pk-console.c:2131 ../client/pk-console.c:2149
-#: ../client/pk-console.c:2158 ../client/pk-generate-pack.c:241
+#: ../client/pk-console.c:2352 ../client/pk-console.c:2364
+#: ../client/pk-console.c:2373 ../client/pk-console.c:2391
+#: ../client/pk-console.c:2400 ../client/pk-generate-pack.c:243
 msgid "A package name is required"
 msgstr "પેકેજ નામ જરૂરી છે"
 
 #. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:2140
+#: ../client/pk-console.c:2382
 msgid "A package provide string is required"
 msgstr "પેકેજ શબ્દમાળાની પૂરી પાડે છે તેની જરૂર છે"
 
 #. TRANSLATORS: The user didn't specify a filename to create as a list
-#: ../client/pk-console.c:2167
+#: ../client/pk-console.c:2409
 msgid "A list file name to create is required"
 msgstr "બનાવવા માટે ફાઇલ નામ યાદી જરૂરી છે"
 
 #. TRANSLATORS: The user didn't specify a filename to open as a list
-#: ../client/pk-console.c:2177 ../client/pk-console.c:2187
+#: ../client/pk-console.c:2419 ../client/pk-console.c:2429
 msgid "A list file to open is required"
 msgstr "ખોલવા માટે ફાઇલ યાદી જરૂરી છે"
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:2241
+#: ../client/pk-console.c:2483
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "વિકલ્પ '%s' આધારભૂત નથી"
 
 #. TRANSLATORS: User does not have permission to do this
-#: ../client/pk-console.c:2254
+#: ../client/pk-console.c:2496
 msgid "Incorrect privileges for this operation"
 msgstr "આ પ્રક્રિયા કરવા માટે અયોગ્ય વિશેષાધિકારો"
 
 #. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:2257
+#: ../client/pk-console.c:2499
 msgid "Command failed"
 msgstr "આદેશ નિષ્ફળ"
 
 #. TRANSLATORS: This is the state of the transaction
-#: ../client/pk-generate-pack.c:101
+#: ../client/pk-generate-pack.c:103
 msgid "Downloading"
 msgstr "ડાઉનલોડ કરી રહ્યા છીએ"
 
 #. TRANSLATORS: This is when the main packages are being downloaded
-#: ../client/pk-generate-pack.c:121
+#: ../client/pk-generate-pack.c:123
 msgid "Downloading packages"
 msgstr "પેકેજો ડાઉનલોડ કરી રહ્યા છીએ"
 
 #. TRANSLATORS: This is when the dependency packages are being downloaded
-#: ../client/pk-generate-pack.c:126
+#: ../client/pk-generate-pack.c:128
 msgid "Downloading dependencies"
 msgstr "આધારભૂતપણાઓ ડાઉનલોડ કરી રહ્યા છીએ"
 
 #. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll exist on the target
-#: ../client/pk-generate-pack.c:188
+#: ../client/pk-generate-pack.c:190
 msgid "Set the file name of dependencies to be excluded"
 msgstr "નહિં સમાવવાના આધારભૂતપણાઓના ફાઈલ નામ સુયોજીત કરો"
 
 #. TRANSLATORS: the output location
-#: ../client/pk-generate-pack.c:191
-msgid ""
-"The output file or directory (the current directory is used if ommitted)"
+#: ../client/pk-generate-pack.c:193
+msgid "The output file or directory (the current directory is used if ommitted)"
 msgstr "આઉટપુટ ફાઇલ અથવા ડિરેક્ટરી (વર્તમાન ડિરેક્ટરી વાપરવામાં આવશે જો અવગણવામાં આવે)"
 
 #. TRANSLATORS: put a list of packages in the pack
-#: ../client/pk-generate-pack.c:194
+#: ../client/pk-generate-pack.c:196
 msgid "The package to be put into the service pack"
 msgstr "સેવા પેકમાં મૂકવા માટેનું પેકેજ"
 
 #. TRANSLATORS: put all pending updates in the pack
-#: ../client/pk-generate-pack.c:197
+#: ../client/pk-generate-pack.c:199
 msgid "Put all updates available in the service pack"
 msgstr "સેવા પેકમાં ઉપલબ્ધ બધા સુધારાઓ મૂકો"
 
 #. TRANSLATORS: This is when the user fails to supply the correct arguments
-#: ../client/pk-generate-pack.c:225
+#: ../client/pk-generate-pack.c:227
 msgid "Neither --package or --updates option selected."
 msgstr "ના તો --package કે --updates વિકલ્પ પસંદ થયેલ છે."
 
 #. TRANSLATORS: This is when the user fails to supply just one argument
-#: ../client/pk-generate-pack.c:233
+#: ../client/pk-generate-pack.c:235
 msgid "Both options selected."
 msgstr "બંને વિકલ્પો પસંદ થયેલ છે."
 
 #. TRANSLATORS: This is when the user fails to supply the output
-#: ../client/pk-generate-pack.c:249
+#: ../client/pk-generate-pack.c:251
 msgid "A output directory or file name is required"
 msgstr "આઉટપુટ ડિરેક્ટરી અથવા ફાઇલ નામ જરૂરી છે"
 
 #. TRANSLATORS: This is when the backend doesn't have the capability to get-depends
 #. TRANSLATORS: This is when the backend doesn't have the capability to download
-#: ../client/pk-generate-pack.c:267 ../client/pk-generate-pack.c:273
+#: ../client/pk-generate-pack.c:269 ../client/pk-generate-pack.c:275
 msgid "The package manager cannot perform this type of operation."
 msgstr "પેકેજ વ્યવસ્થાપક એ ક્રિયાનાં આ પ્રકારને ચલાવી શકતુ નથી."
 
 #. TRANSLATORS: This is when the distro didn't include libarchive support into PK
-#: ../client/pk-generate-pack.c:280
+#: ../client/pk-generate-pack.c:282
 msgid ""
 "Service packs cannot be created as PackageKit was not built with libarchive "
 "support."
-msgstr ""
-"PackageKit એ libarchive આધાર સાથે બિલ્ટ ન હતુ તે તરીકે સેવા પેકેજોને બનાવી શકાતા નથી."
+msgstr "PackageKit એ libarchive આધાર સાથે બિલ્ટ ન હતુ તે તરીકે સેવા પેકેજોને બનાવી શકાતા નથી."
 
 #. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
-#: ../client/pk-generate-pack.c:291
+#: ../client/pk-generate-pack.c:293
 msgid "If specifying a file, the service pack name must end with"
 msgstr "જો ફાઇલને સ્પષ્ટ કરી રહ્યા હોય ત્યારે, સેવા પેકેજ નામ એની સાથે છેલ્લે જ હોવુ જોઇએ"
 
 #. TRANSLATORS: This is when file already exists
-#: ../client/pk-generate-pack.c:307
+#: ../client/pk-generate-pack.c:309
 msgid "A pack with the same name already exists, do you want to overwrite it?"
 msgstr "એ જ નામ સાથેનું પેક પહેલાથી જ હાજર છે, શું તમે તેના પર ફરીથી લખવા માંગો છો?"
 
 #. TRANSLATORS: This is when the pack was not overwritten
-#: ../client/pk-generate-pack.c:310
+#: ../client/pk-generate-pack.c:312
 msgid "The pack was not overwritten."
 msgstr "પેક ઉપર ફરીથી લખાયેલ નથી."
 
 #. TRANSLATORS: This is when the temporary directory cannot be created, the directory name follows
-#: ../client/pk-generate-pack.c:323
+#: ../client/pk-generate-pack.c:325
 msgid "Failed to create directory:"
 msgstr "ડિરેક્ટરી બનાવવામાં નિષ્ફળ:"
 
 #. TRANSLATORS: This is when the list of packages from the remote computer cannot be opened
-#: ../client/pk-generate-pack.c:333
+#: ../client/pk-generate-pack.c:335
 msgid "Failed to open package list."
 msgstr "પેકેજ યાદી ખોલવામાં નિષ્ફળ."
 
 #. TRANSLATORS: The package name is being matched up to available packages
-#: ../client/pk-generate-pack.c:344
+#: ../client/pk-generate-pack.c:346
 msgid "Finding package name."
 msgstr "પેકેજ નામ શોધી રહ્યા છીએ."
 
 #. TRANSLATORS: This is when the package cannot be found in any software source. The detailed error follows
-#: ../client/pk-generate-pack.c:348
+#: ../client/pk-generate-pack.c:350
 #, c-format
 msgid "Failed to find package '%s': %s"
 msgstr "પેકેજ '%s' શોધવામાં નિષ્ફળ: %s"
 
 #. TRANSLATORS: This is telling the user we are in the process of making the pack
-#: ../client/pk-generate-pack.c:365
+#: ../client/pk-generate-pack.c:367
 msgid "Creating service pack..."
 msgstr "સેવા પેક બનાવી રહ્યા છીએ..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:372
+#: ../client/pk-generate-pack.c:374
 #, c-format
 msgid "Service pack created '%s'"
 msgstr "સેવા પેક બનાવાયું '%s'"
 
 #. TRANSLATORS: we failed to make te file
-#: ../client/pk-generate-pack.c:377
+#: ../client/pk-generate-pack.c:379
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "'%s' બનાવવામાં નિષ્ફળ: %s"
@@ -812,29 +853,24 @@ msgstr "PackageKit મોનીટર"
 
 #: ../client/pk-monitor.c:183
 msgid "Cannot show the list of transactions"
-msgstr ""
+msgstr "પરિવહનોની યાદી ને બતાવી શકતા નથી"
 
 #. TRANSLATORS: The package was not found in any software sources
-#: ../client/pk-tools-common.c:118
+#: ../client/pk-tools-common.c:119
 #, c-format
 msgid "The package could not be found"
 msgstr "પેકેજ શોધી શક્યા નહિં"
 
 #. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../client/pk-tools-common.c:130
+#: ../client/pk-tools-common.c:131
 msgid "More than one package matches:"
 msgstr "એક પેકેજ કરતાં વધુ જોડણીઓ:"
 
 #. TRANSLATORS: This finds out which package in the list to use
-#: ../client/pk-tools-common.c:137
+#: ../client/pk-tools-common.c:138
 msgid "Please choose the correct package: "
 msgstr "મહેરબાની કરીને યોગ્ય પેકેજ પસંદ કરો: "
 
-#: ../client/pk-tools-common.c:162
-#, c-format
-msgid "Please enter a number from 1 to %i: "
-msgstr "મહેરબાની કરીને ૧ થી %i સુધીનો નંબર દાખલ કરો: "
-
 #. TRANSLATORS: when we are getting data from the daemon
 #: ../contrib/browser-plugin/pk-plugin-install.c:466
 msgid "Getting package information..."
@@ -892,24 +928,22 @@ msgstr "સ્થાપિત કરી રહ્યા છીએ..."
 #. TRANSLATORS: downloading repo data so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:349
 msgid "Downloading details about the software sources."
-msgstr ""
+msgstr "સોફ્ટવેર સ્ત્રોતો વિશે વિગતો ને ડાઉનલોડ કરી રહ્યા છે."
 
 #. TRANSLATORS: downloading file lists so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:353
 msgid "Downloading filelists (this may take some time to complete)."
-msgstr ""
+msgstr "ફાઇલ યાદીઓને ડાઉનલોડ કરી રહ્યા છે (આ ને સમાપ્ત થવા માટે થોડો સમય લાગી શકે છે)."
 
 #. TRANSLATORS: waiting for native lock
 #: ../contrib/command-not-found/pk-command-not-found.c:357
-#, fuzzy
 msgid "Waiting for package manager lock."
-msgstr "પેકેજ નામ શોધી રહ્યા છીએ."
+msgstr "પેકેજ વ્યવસ્થાપક તાળા માટે રાહ જોઇ રહ્યા છે."
 
 #. TRANSLATORS: loading package cache so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:361
-#, fuzzy
 msgid "Loading list of packages."
-msgstr "પેકેજો ડાઉનલોડ કરી રહ્યા છીએ"
+msgstr "પેકેજોની યાદીને લોડ કરી રહ્યા છે."
 
 #. TRANSLATORS: we failed to find the package, this shouldn't happen
 #: ../contrib/command-not-found/pk-command-not-found.c:420
@@ -982,286 +1016,273 @@ msgstr "મહેરબાની કરીને સ્થાપિત કરવ
 
 #. TRANSLATORS: we are starting to install the packages
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:187
-#, fuzzy
 msgid "Starting install"
-msgstr "સ્થાપન કરવા માટે"
+msgstr "સ્થાપન શરૂ કરી રહ્યા છે"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:397
-#, fuzzy, c-format
+#, c-format
 msgid "Failed to find the package %s, or already installed: %s"
-msgstr "પેકેજ %s પહેલાથી જ સ્થાપિત થયેલ છે"
+msgstr "પેકેજ %s ને શોધતી વખતે નિષ્ફળતા, અથવા પહેલેથી જ સ્થાપિત થયેલ છે: %s"
 
 #. command line argument, simulate what would be done, but don't actually do it
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:553
-msgid ""
-"Don't actually install any packages, only simulate what would be installed"
-msgstr ""
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:552
+msgid "Don't actually install any packages, only simulate what would be installed"
+msgstr "કોઇપણ પેકેજોને વાસ્તવમાં સ્થાપિત કરો નહિં, ફક્ત દેખાવ કરો ક્યુ સ્થાપિત થયેલ છે"
 
 #. command line argument, do we skip packages that depend on the ones specified
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:556
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:555
 msgid "Do not install dependencies of the core packages"
-msgstr ""
+msgstr "કોર પેકેજોનાં આધારોને સ્થાપિત કરો નહિં"
 
 #. command line argument, do we operate quietly
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:559
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:558
 msgid "Do not display information or progress"
-msgstr ""
+msgstr "જાણકારી અથવા પ્રગતિને દર્શાવો નહિં"
 
 #. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:577
-#, fuzzy
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:576
 msgid "PackageKit Debuginfo Installer"
-msgstr "PackageKit કન્સોલ ઈન્ટરફેસ"
+msgstr "PackageKit Debuginfo Installer"
 
 #. TRANSLATORS: the use needs to specify a list of package names on the command line
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:589
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:588
+#, c-format
 msgid "ERROR: Specify package names to install."
-msgstr "સ્થાપિત કરવા માટે નવા પેકેજોની જરૂર નથી"
+msgstr "ભૂલ: સ્થાપિત કરવા માટે પેકેજ નામો ને સ્પષ્ટ કરો."
 
 #. TRANSLATORS: we are getting the list of repositories
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:623
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:622
+#, c-format
 msgid "Getting sources list"
-msgstr "પેકેજ યાદી મેળવી રહ્યા છે"
+msgstr "સ્ત્રોત યાદીને મેળવી રહ્યા છે"
 
 #. TRANSLATORS: all completed 100%
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:641
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:681
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:716
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:800
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:844
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:911
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:955
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:640
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:680
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:715
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:799
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:843
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:910
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:954
 #, c-format
 msgid "OK."
-msgstr ""
+msgstr "OK."
 
 #. TRANSLATORS: tell the user what we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:644
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:643
 #, c-format
 msgid "Found %i enabled and %i disabled sources."
-msgstr ""
+msgstr "%i સક્રિય થયેલ અને %i નિષ્ક્રિય થયેલ સ્ત્રોતો મળ્યા."
 
 #. TRANSLATORS: we're finding repositories that match out pattern
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:651
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:650
 #, c-format
 msgid "Finding debugging sources"
-msgstr ""
+msgstr "ડિબગીંગ સ્ત્રોતોને શોધી રહ્યા છે"
 
 #. TRANSLATORS: tell the user what we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:684
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:683
 #, c-format
 msgid "Found %i disabled debuginfo repos."
-msgstr ""
+msgstr "%i નિષ્ક્રિય થયેલ debuginfo repos મળ્યુ."
 
 #. TRANSLATORS: we're now enabling all the debug sources we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:691
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
 #, c-format
 msgid "Enabling debugging sources"
-msgstr ""
+msgstr "ડિબગીંગ સ્ત્રોતોને સક્રિય કરી રહ્યા છે"
 
 #. TRANSLATORS: operation was not successful
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:701
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:785
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:829
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:896
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:940
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:784
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:828
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:895
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:939
 msgid "FAILED."
-msgstr ""
+msgstr "FAILED."
 
 #. TRANSLATORS: tell the user how many we enabled
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:719
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:718
 #, c-format
 msgid "Enabled %i debugging sources."
-msgstr ""
+msgstr "સક્રિય થયેલ %i ડિબગીંગ સ્ત્રોતો."
 
 #. TRANSLATORS: we're now finding packages that match in all the repos
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:726
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:725
+#, c-format
 msgid "Finding debugging packages"
-msgstr "પેકેજ નામ શોધી રહ્યા છીએ."
+msgstr "ડિબગીંગ પેકેજોને શોધી રહ્યા છીએ"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:738
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:737
+#, c-format
 msgid "Failed to find the package %s: %s"
-msgstr "પેકેજ '%s' શોધવામાં નિષ્ફળ: %s"
+msgstr "પેકેજ %s ને શોધતી વખતે નિષ્ફળતા: %s"
 
 #. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:761
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:760
+#, c-format
 msgid "Failed to find the debuginfo package %s: %s"
-msgstr "પેકેજ '%s' શોધવામાં નિષ્ફળ: %s"
+msgstr "debuginfo પેકેજ શોધતી વખતે નિષ્ફળતા %s: %s"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:789
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:788
+#, c-format
 msgid "Found no packages to install."
-msgstr "સ્થાપિત કરવા માટે નવા પેકેજોની જરૂર નથી"
+msgstr "સ્થાપિત કરવા માટે પેકેજોની મળ્યા નહિં."
 
 #. TRANSLATORS: tell the user we found some packages, and then list them
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:802
+#, c-format
 msgid "Found %i packages:"
-msgstr "પેકેજો ડાઉનલોડ કરી રહ્યા છીએ"
+msgstr "%i પેકેજો મળ્યા:"
 
 #. TRANSLATORS: tell the user we are searching for deps
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:819
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
 #, c-format
 msgid "Finding packages that depend on these packages"
-msgstr ""
+msgstr "પેકેજોને શોધી રહ્યા છે કે જે આ પેકેજો પર આધાર રાખે છે"
 
 #. TRANSLATORS: could not install, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:832
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:831
+#, c-format
 msgid "Could not find dependant packages: %s"
-msgstr "પેકેજ '%s' શોધવામાં નિષ્ફળ: %s"
+msgstr "આધારિત પેકેજો ને શોધી શક્યા નહિં: %s"
 
 #. TRANSLATORS: tell the user we found some more packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:847
 #, c-format
 msgid "Found %i extra packages."
-msgstr ""
+msgstr "%i બહારનાં પેકેજો મળ્યા."
 
 #. TRANSLATORS: tell the user we found some more packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:852
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:851
+#, c-format
 msgid "No extra packages required."
-msgstr "પેકેજ નામ જરૂરી છે"
+msgstr "વધારાનાં પેકેજો જરૂરી નથી."
 
 #. TRANSLATORS: tell the user we found some packages (and deps), and then list them
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:861
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
+#, c-format
 msgid "Found %i packages to install:"
-msgstr "સ્થાપિત કરવા માટે નવા પેકેજોની જરૂર નથી"
+msgstr "સ્થાપિત કરવા માટે %i પેકેજો મળ્યા:"
 
 #. TRANSLATORS: simulate mode is a testing mode where we quit before the action
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:874
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
+#, c-format
 msgid "Not installing packages in simulate mode"
-msgstr "પેકેજોને સ્થાપિત કરી રહ્યા છે"
+msgstr "simulate સ્થિતિમાં પેકેજોને સ્થાપિત કરી રહ્યા નથી"
 
 #. TRANSLATORS: could not install, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:899
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:898
+#, c-format
 msgid "Could not install packages: %s"
-msgstr "આ સાધન પેકેજો સ્થાપિત કરી શક્યું નહિં: %s"
+msgstr "પેકેજોનું સ્થાપન કરી શક્યા નહિં: %s"
 
 #. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:931
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:930
 #, c-format
 msgid "Disabling sources previously enabled"
-msgstr ""
+msgstr "પહેલાનાં સક્રિય થયેલ સ્ત્રોતોને નિષ્ક્રિય કરી રહ્યા છે"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:943
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:942
 #, c-format
 msgid "Could not disable the debugging sources: %s"
-msgstr ""
+msgstr "ડિબગીંગ સ્ત્રોતો ને નિષ્ક્રિય કરી શક્યા નહિં: %s"
 
 #. TRANSLATORS: we disabled all the debugging repos that we enabled before
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:958
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:957
 #, c-format
 msgid "Disabled %i debugging sources."
-msgstr ""
+msgstr "નિષ્ક્રિય થયેલ %i ડિબગીંગ સ્ત્રોતો."
 
 #. TRANSLATORS: couldn't open device to write
 #: ../contrib/device-rebind/pk-device-rebind.c:61
-#, fuzzy
 msgid "Failed to open file"
-msgstr "ફાઇલ માટે શોધવાનું નિષ્ફળ"
+msgstr "ફાઇલને ખોલવામાં નિષ્ફળતા"
 
 #. TRANSLATORS: could not write to the device
 #: ../contrib/device-rebind/pk-device-rebind.c:70
-#, fuzzy
 msgid "Failed to write to the file"
-msgstr "ફાઇલ માટે શોધવાનું નિષ્ફળ"
+msgstr "ફાઇલમાં લખતી વખતે નિષ્ફળતા"
 
 #. TRANSLATORS: we failed to release the current driver
 #: ../contrib/device-rebind/pk-device-rebind.c:110
 #: ../contrib/device-rebind/pk-device-rebind.c:147
-#, fuzzy
 msgid "Failed to write to device"
-msgstr "ડિસ્કમાં સંગ્રહ કરવા માટે નિષ્ફળ"
+msgstr "ઉપકરણમાં લખતી વખતે નિષ્ફળતા"
 
 #. TRANSLATORS: the device could not be found in sysfs
 #: ../contrib/device-rebind/pk-device-rebind.c:175
-#, fuzzy
 msgid "Device could not be found"
-msgstr "પેકેજ શોધી શક્યા નહિં"
+msgstr "ઉપકરણને શોધી શક્યા નહિં"
 
 #. TRANSLATORS: we failed to release the current driver
 #: ../contrib/device-rebind/pk-device-rebind.c:202
-#, fuzzy
 msgid "Failed to unregister driver"
-msgstr "ડિરેક્ટરી બનાવવામાં નિષ્ફળ:"
+msgstr "ડ્રાઇવરને રજીસ્ટર ન કરતી વખતે નિષ્ફળતા"
 
 #. TRANSLATORS: we failed to bind the old driver
 #: ../contrib/device-rebind/pk-device-rebind.c:211
-#, fuzzy
 msgid "Failed to register driver"
-msgstr "ડિરેક્ટરી બનાવવામાં નિષ્ફળ:"
+msgstr "ડ્રાઇવરને રજીસ્ટર કરવામાં નિષ્ફળતા"
 
 #. TRANSLATORS: user did not specify a device sysfs path that exists
 #: ../contrib/device-rebind/pk-device-rebind.c:260
-#, fuzzy
 msgid "Device path not found"
-msgstr "ડિરેક્ટરી મળી નહિં"
+msgstr "ઉપકરણ પાથ મળ્યુ નહિં"
 
 #. TRANSLATORS: user did not specify a valid device sysfs path
 #: ../contrib/device-rebind/pk-device-rebind.c:268
 msgid "Incorrect device path specified"
-msgstr ""
+msgstr "અયોગ્ય ઉપકરણ પાથ સ્પષ્ટ થયેલ છે"
 
 #. command line argument, simulate what would be done, but don't actually do it
 #: ../contrib/device-rebind/pk-device-rebind.c:296
 msgid "Don't actually touch the hardware, only simulate what would be done"
-msgstr ""
+msgstr "વાસ્તવમાં હાર્ડવેરને અડશો નહિં, ફક્ત દેખાવ છે કે શું પૂરુ થયુ"
 
 #. TRANSLATORS: command line option: a list of files to install
 #: ../contrib/device-rebind/pk-device-rebind.c:299
 msgid "Device paths"
-msgstr ""
+msgstr "ઉપકરણ પાથો"
 
 #. TRANSLATORS: tool that gets called when the device needs reloading after installing firmware
 #: ../contrib/device-rebind/pk-device-rebind.c:314
-#, fuzzy
 msgid "PackageKit Device Reloader"
-msgstr "PackageKit સેવા પેક"
+msgstr "PackageKit Device Reloader"
 
 #. TRANSLATORS: user did not specify a valid device sysfs path
 #: ../contrib/device-rebind/pk-device-rebind.c:322
 msgid "You need to specify at least one valid device path"
-msgstr ""
+msgstr "તમારે ઓછામાં ઓછો એક યોગ્ય ઉપકરણ પાથને સ્પષ્ટ કરવો જરૂરી છે"
 
 #. TRANSLATORS: user did not specify a valid device sysfs path
 #: ../contrib/device-rebind/pk-device-rebind.c:332
 msgid "This script can only be used by the root user"
-msgstr ""
+msgstr "આ સ્ક્રિપ્ટ રુટ વપરાશકર્તા દ્દારા માત્ર વાપરી શકાય છે"
 
 #. TRANSLATORS: we're going to verify the path first
 #: ../contrib/device-rebind/pk-device-rebind.c:341
 msgid "Verifying device path"
-msgstr ""
+msgstr "ઉપકરણ પાથ ને ચકાસી રહ્યા છે"
 
 #. TRANSLATORS: user did not specify a device sysfs path that exists
 #: ../contrib/device-rebind/pk-device-rebind.c:346
-#, fuzzy
 msgid "Failed to verify device path"
-msgstr "ફાઇલ માટે શોધવાનું નિષ્ફળ"
+msgstr "ઉપકરણ પાથ ચકાસવામાં નિષ્ફળતા"
 
 #. TRANSLATORS: we're going to try
 #: ../contrib/device-rebind/pk-device-rebind.c:360
 msgid "Attempting to rebind device"
-msgstr ""
+msgstr "ઉપકરણને પુન:બાંધવાનો પ્રયત્ન કરી રહ્યા છે"
 
 #. TRANSLATORS: we failed to release the current driver
 #: ../contrib/device-rebind/pk-device-rebind.c:365
-#, fuzzy
 msgid "Failed to rebind device"
-msgstr "ડિરેક્ટરી બનાવવામાં નિષ્ફળ:"
+msgstr "ઉપકરણ ને પુન:બાઇન્ડ કરવામાં નિષ્ફળતા"
 
 #: ../data/packagekit-catalog.xml.in.h:1
 msgid "PackageKit Catalog"
@@ -1290,8 +1311,7 @@ msgid "Authentication is required to accept a EULA"
 msgstr "EULA ને સ્વીકારવા માટે સત્તાધિકરણ જરૂરી છે"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:9
-msgid ""
-"Authentication is required to cancel a task that was not started by yourself"
+msgid "Authentication is required to cancel a task that was not started by yourself"
 msgstr "કાર્યને રદ કરવા માટે સત્તાધિકરણ જરૂરી છે કે જે તમારીજાતે શરૂ થયેલ ન હતુ"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:10
@@ -1319,9 +1339,8 @@ msgid "Authentication is required to refresh the system sources"
 msgstr "સિસ્ટમ સ્ત્રોતોને તાજુ કરવા માટે સત્તાધિકરણ જરૂરી છે"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:15
-#, fuzzy
 msgid "Authentication is required to reload the device with a new driver"
-msgstr "સિસ્ટમ સ્ત્રોતોને તાજુ કરવા માટે સત્તાધિકરણ જરૂરી છે"
+msgstr "નવા ડ્રાઇવર સાથે ઉપકરણને પુન:લોડ કરવા માટે તાજુ કરવા માટે સત્તાધિકરણ જરૂરી છે"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:16
 msgid "Authentication is required to remove packages"
@@ -1335,8 +1354,7 @@ msgstr "પરિવહન ને પાછુ લાવવા માટે સà
 msgid ""
 "Authentication is required to set the network proxy used for downloading "
 "packages"
-msgstr ""
-"પેકેજોને ડાઉનલોડ કરવા માટે વપરાયેલ નેટવર્ક પ્રોક્સીને સુયોજિત કરવા માટે સત્તાધિકરણ જરૂરી છે"
+msgstr "પેકેજોને ડાઉનલોડ કરવા માટે વપરાયેલ નેટવર્ક પ્રોક્સીને સુયોજિત કરવા માટે સત્તાધિકરણ જરૂરી છે"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:19
 msgid "Authentication is required to update packages"
@@ -1397,7 +1415,7 @@ msgstr "સિસ્ટમ સ્ત્રોતોને તાજુ કરો
 #.
 #: ../policy/org.freedesktop.packagekit.policy.in.h:58
 msgid "Reload a device"
-msgstr ""
+msgstr "ઉપકરણને પુન:લોડ કરો"
 
 #. SECURITY:
 #. - Normal users require admin authentication to remove packages as
@@ -1518,43 +1536,47 @@ msgid "Error trying to start:"
 msgstr "શરૂ કરવાનો પ્રયાસ કરવામાં ભૂલ:"
 
 #: ../src/pk-polkit-action-lookup.c:147
-#, fuzzy
 msgid "To install debugging packages, extra sources need to be enabled"
-msgstr "સ્થાપિત કરવા માટે નવા પેકેજોની જરૂર નથી"
+msgstr "ડિબગીંગ પેકેજોને સ્થાપિત કરવા માટે, બહારનાં સ્ત્રોતોને સક્રિય કરવાની જરૂર છે"
 
 #. TRANSLATORS: is not GPG signed
 #: ../src/pk-polkit-action-lookup.c:168 ../src/pk-polkit-action-lookup.c:187
 msgid "The software is not from a trusted source."
-msgstr ""
+msgstr "વિશ્ર્વાસપાત્ર સ્ત્રોત માંથી સોફ્ટવેર નથી."
 
 #: ../src/pk-polkit-action-lookup.c:173
 msgid "Do not update this package unless you are sure it is safe to do so."
-msgstr ""
+msgstr "આ પેકેજમાં સુધારો નહિં નહિં તો તમે ચોક્કસ છો કે તે કરવા માટે સલામત છે."
 
 #: ../src/pk-polkit-action-lookup.c:174
 msgid "Do not update these packages unless you are sure it is safe to do so."
-msgstr ""
+msgstr "આ પેકેજોમાં સુધારો કરો નહિં  નહિં તો તમે ચોક્કસ છો કે તે કરવા માટે સલામત છે."
 
 #: ../src/pk-polkit-action-lookup.c:192
 msgid "Do not install this package unless you are sure it is safe to do so."
-msgstr ""
+msgstr "આ પેકેજ ને સ્થાપિત કરો નહિં નહિં તો તમે ચોક્કસ છો કે તે કરવા માટે સલામત છે."
 
 #: ../src/pk-polkit-action-lookup.c:193
 msgid "Do not install these packages unless you are sure it is safe to do so."
-msgstr ""
+msgstr "આ પેકેજોને સ્થાપિત કરવા માટ સ્થાપિત કરો નહિં નહિં તો તમે ચોક્કસ છો કે તે કરવા માટે સલામત છે."
 
 #. TRANSLATORS: warn the user that all bets are off
 #: ../src/pk-polkit-action-lookup.c:199
 msgid "Malicious software can damage your computer or cause other harm."
-msgstr ""
+msgstr "દુષ્ટ સોફ્ટવેર તમારા સોફ્ટવેરને ખરાબ કરી શકે છે અથવા બીજા નુકશાનને કારણે."
 
 #. TRANSLATORS: too many packages to list each one
 #: ../src/pk-polkit-action-lookup.c:274
-#, fuzzy
 msgid "Many packages"
-msgstr "પેકેજોને સુધારો"
+msgstr "ઘણાબધા પેકેજો"
 
 #. TRANSLATORS: if the transaction is forced to install only trusted packages
 #: ../src/pk-polkit-action-lookup.c:334
 msgid "Only trusted"
-msgstr ""
+msgstr "માત્ર વિશ્ર્વાસપાત્ર"
+
+#: ../client/pk-text.c:50
+#, c-format
+msgid "Please enter a number from 1 to %i: "
+msgstr "મહેરબાની કરીને ૧ થી %i સુધીનો નંબર દાખલ કરો: "
+
commit deb70ebfcf570a0cfec026cde8180737dd60e24f
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date:   Thu Sep 3 10:07:29 2009 +0200

    typo: it's KDE, not Qt

diff --git a/docs/html/pk-intro.html b/docs/html/pk-intro.html
index 0fc1bc3..70458f3 100644
--- a/docs/html/pk-intro.html
+++ b/docs/html/pk-intro.html
@@ -64,7 +64,7 @@ tools for PackageKit to be used in the GNOME desktop.
 </p>
 <p>
 <a href="http://www.kde-apps.org/content/show.php/show.php?content=84745">
-PackageKit-Qt</a> is the name of the QT graphical tools designed
+KPackageKit</a> is the name of the KDE graphical tools designed
 for PackageKit.
 </p>
 
commit 7ac15eb3610ff7fff4a74f1184e118ce2bc92eb4
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date:   Thu Sep 3 10:04:29 2009 +0200

    trivial: move the prints to separate file

diff --git a/backends/ports/portsBackend.rb b/backends/ports/portsBackend.rb
index 81af152..ea4a92a 100755
--- a/backends/ports/portsBackend.rb
+++ b/backends/ports/portsBackend.rb
@@ -26,6 +26,7 @@ PROGRAM_DIR=File.dirname(File.expand_path($PROGRAM_NAME))
 $LOAD_PATH.unshift PROGRAM_DIR
 
 require 'ruby_packagekit/enums'
+require 'ruby_packagekit/prints'
 
 PACKAGE_IDS_DELIM = '&'
 FILENAME_DELIM = '|'
@@ -824,67 +825,6 @@ end
 
 #######################################################################
 
-def message(typ, msg)
-   $stdout.printf "message\t%s\t%s\n", typ, msg
-   $stdout.flush
-end
-
-def package(package_id, status, summary)
-   $stdout.printf "package\t%s\t%s\t%s\n", status, package_id, summary
-   $stdout.flush
-end
-
-def repo_detail(repoid, name, state)
-   $stdout.printf "repo-detail\t%s\t%s\t%s\n", repoid, name, state
-   $stdout.flush
-end
-
-def update_detail(package_id, updates, obsoletes, vendor_url, bugzilla_url, cve_url, restart, update_text, changelog, state, issued, updated)
-   $stdout.printf "updatedetail\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", package_id, updates, obsoletes, vendor_url, bugzilla_url, cve_url, restart, update_text, changelog, state, issued, updated
-   $stdout.flush
-end
-
-def details(package_id, package_license, group, desc, url, bytes)
-   $stdout.printf "details\t%s\t%s\t%s\t%s\t%s\t%d\n", package_id, package_license, group, desc, url, bytes
-   $stdout.flush
-end
-
-def files(package_id, file_list)
-   $stdout.printf "files\t%s\t%s\n", package_id, file_list
-   $stdout.flush
-end
-
-def status(state)
-   $stdout.printf "status\t%s\n", state
-   $stdout.flush
-end
-
-def error(err, description, exit=true)
-   $stdout.printf "error\t%s\t%s\n", err, description
-   $stdout.flush
-   if exit
-      finished
-      exit(1)
-   end
-end
-
-def percentage(percent=nil)
-   if percent==nil
-      $stdout.printf "finished\n"
-   else percent == 0 or percent > $percentage_old
-      $stdout.printf "percentage\t%i\n", percent
-      $percentage_old = percent
-   end
-   $stdout.flush
-end
-
-def finished
-   $stdout.printf "finished\n"
-   $stdout.flush
-end
-
-#######################################################################
-
 def to_b(string)
     return true if string == true || string =~ /^true$/i
     return false if string == false || string.nil? || string =~ /^false$/i
diff --git a/backends/ports/ruby_packagekit/Makefile.am b/backends/ports/ruby_packagekit/Makefile.am
index a1d7a7c..87db75e 100644
--- a/backends/ports/ruby_packagekit/Makefile.am
+++ b/backends/ports/ruby_packagekit/Makefile.am
@@ -4,6 +4,7 @@ NULL =
 
 dist_helper_DATA =                                              \
 	enums.rb                                                \
+	prints.rb                                               \
 	$(NULL)
 
 clean-local :
diff --git a/backends/ports/ruby_packagekit/prints.rb b/backends/ports/ruby_packagekit/prints.rb
new file mode 100644
index 0000000..389720d
--- /dev/null
+++ b/backends/ports/ruby_packagekit/prints.rb
@@ -0,0 +1,59 @@
+def message(typ, msg)
+   $stdout.printf "message\t%s\t%s\n", typ, msg
+   $stdout.flush
+end
+
+def package(package_id, status, summary)
+   $stdout.printf "package\t%s\t%s\t%s\n", status, package_id, summary
+   $stdout.flush
+end
+
+def repo_detail(repoid, name, state)
+   $stdout.printf "repo-detail\t%s\t%s\t%s\n", repoid, name, state
+   $stdout.flush
+end
+
+def update_detail(package_id, updates, obsoletes, vendor_url, bugzilla_url, cve_url, restart, update_text, changelog, state, issued, updated)
+   $stdout.printf "updatedetail\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", package_id, updates, obsoletes, vendor_url, bugzilla_url, cve_url, restart, update_text, changelog, state, issued, updated
+   $stdout.flush
+end
+
+def details(package_id, package_license, group, desc, url, bytes)
+   $stdout.printf "details\t%s\t%s\t%s\t%s\t%s\t%d\n", package_id, package_license, group, desc, url, bytes
+   $stdout.flush
+end
+
+def files(package_id, file_list)
+   $stdout.printf "files\t%s\t%s\n", package_id, file_list
+   $stdout.flush
+end
+
+def status(state)
+   $stdout.printf "status\t%s\n", state
+   $stdout.flush
+end
+
+def error(err, description, exit=true)
+   $stdout.printf "error\t%s\t%s\n", err, description
+   $stdout.flush
+   if exit
+      finished
+      exit(1)
+   end
+end
+
+def percentage(percent=nil)
+   if percent==nil
+      $stdout.printf "finished\n"
+   else percent == 0 or percent > $percentage_old
+      $stdout.printf "percentage\t%i\n", percent
+      $percentage_old = percent
+   end
+   $stdout.flush
+end
+
+def finished
+   $stdout.printf "finished\n"
+   $stdout.flush
+end
+
commit 277413b5378868a22e91f8936ee97bfa93cab04d
Author: Dennis Gregorovic <dgregor at redhat.com>
Date:   Thu Sep 3 09:00:23 2009 +0100

    yum: If we're on RHEL, then preupgrade functionality isn't available

diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index b38f10a..38414c3 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -2136,6 +2136,10 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
         self.percentage(None)
         self.status(STATUS_QUERY)
 
+        # if we're RHEL, then we don't have preupgrade
+        if not os.path.exists('/usr/share/preupgrade/releases.list'):
+            return
+
         # parse the releases file
         config = ConfigParser.ConfigParser()
         config.read('/usr/share/preupgrade/releases.list')
diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index 8f2a873..d5c16c8 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -25,7 +25,9 @@ Requires: PackageKit-yum-plugin = %{version}-%{release}
 Requires: PackageKit-yum = %{version}-%{release}
 Requires: shared-mime-info
 Requires: comps-extras
+%if 0%{?rhel} != 0
 Requires: preupgrade
+%endif
 BuildRequires: polkit >= %{polkit_version}
 
 BuildRequires: glib2-devel >= %{glib2_version}
commit fc013bca5b0b120ca7a3efeeba31d825dbc453f4
Author: Tim Lauridsen <tim.lauridsen at googlemail.com>
Date:   Thu Sep 3 08:48:18 2009 +0100

    yum: Use NotImplementedError to fix a backtrace

diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index d140a93..b38f10a 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -2929,7 +2929,7 @@ class PackageKitYumBase(yum.YumBase):
 
         try:
             manager = MediaManager()
-        except NotImplemented:
+        except NotImplementedError, e:
             # yumRepo will catch this
             raise yum.Errors.MediaError, "media handling is not implemented"
 
diff --git a/backends/yum/yumMediaManager.py b/backends/yum/yumMediaManager.py
index a8eaaa2..9147621 100644
--- a/backends/yum/yumMediaManager.py
+++ b/backends/yum/yumMediaManager.py
@@ -22,7 +22,6 @@ This is a module for dealing with removable media
 NOTE: releasing (unmounting and unlocking) is done when media is destructed
 """
 
-
 class MediaDevice(object):
     """
     You should just use acquire() to get the mount point (the implementation is
@@ -36,7 +35,7 @@ class MediaDevice(object):
         """
         self._unmount_needed = False
         self._unlock_needed = False
-        raise NotImplemented
+        raise NotImplementedError()
 
     def __del__(self):
         """
@@ -49,36 +48,36 @@ class MediaDevice(object):
             self.unlock()
 
     def is_removable(self):
-        raise NotImplemented
+        raise NotImplementedError()
 
     def is_mounted(self):
-        raise NotImplemented
+        raise NotImplementedError()
 
     def is_locked(self):
-        raise NotImplemented
+        raise NotImplementedError()
 
     def get_mount_point(self):
         """return the mount point or None if not mounted"""
-        raise NotImplemented
+        raise NotImplementedError()
 
     def lock(self):
         """return True if lock is successfully acquired."""
-        raise NotImplemented
+        raise NotImplementedError()
 
     def unlock(self):
         """return True if it was able to release the lock successfully."""
-        raise NotImplemented
+        raise NotImplementedError()
 
     def mount(self):
         """
         mount the device and return the mount point.
         If it's already mounted, just return the mount point.
         """
-        raise NotImplemented
+        raise NotImplementedError()
 
     def unmount(self):
         """unmount the device and return True."""
-        raise NotImplemented
+        raise NotImplementedError()
 
     # no need to re-implement the following methods when you derive from this class
     def acquire(self):
@@ -98,8 +97,8 @@ class MediaDevice(object):
 class MediaManager (object):
     """Just iterate over an instance of this class to get MediaDevice objects"""
     def __init__(self):
-        raise NotImplemented
+        raise NotImplementedError()
 
     def __iter__(self):
-        raise NotImplemented
+        raise NotImplementedError()
 
commit e6e75f3f8d628bcec4607f007e58c005e42c45cd
Author: anipeter <anipeter at fedoraproject.org>
Date:   Thu Sep 3 06:06:04 2009 +0000

    Sending translation for Malayalam

diff --git a/po/ml.po b/po/ml.po
index e55d0c5..0dfe8be 100644
--- a/po/ml.po
+++ b/po/ml.po
@@ -7,243 +7,277 @@ msgid ""
 msgstr ""
 "Project-Id-Version: packagekit.master.ml\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-08-24 11:06+0100\n"
-"PO-Revision-Date: 2009-07-15 17:19+0530\n"
+"POT-Creation-Date: 2009-09-03 02:38+0000\n"
+"PO-Revision-Date: 2009-09-03 11:33+0530\n"
 "Last-Translator: \n"
 "Language-Team:  <en at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #. TRANSLATORS: this is an atomic transaction
-#: ../client/pk-console.c:235
+#: ../client/pk-console.c:238
 msgid "Transaction"
 msgstr "ഇടപാടു്"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:237
+#: ../client/pk-console.c:240
 msgid "System time"
 msgstr "സിസ്റ്റം സമയം"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:239
+#: ../client/pk-console.c:242
 msgid "Succeeded"
 msgstr "ഇടപാടു് പൂര്‍ത്തിയായി"
 
-#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:239 ../client/pk-console.c:406
+#: ../client/pk-console.c:242
 msgid "True"
 msgstr "True"
 
-#: ../client/pk-console.c:239 ../client/pk-console.c:406
+#: ../client/pk-console.c:242
 msgid "False"
 msgstr "False"
 
 #. TRANSLATORS: this is the transactions role, e.g. "update-system"
 #. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:241 ../src/pk-polkit-action-lookup.c:327
+#: ../client/pk-console.c:244 ../src/pk-polkit-action-lookup.c:327
 msgid "Role"
 msgstr "റോള്‍"
 
 #. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:246
+#: ../client/pk-console.c:249
 msgid "Duration"
 msgstr "സമയം"
 
-#: ../client/pk-console.c:246
+#: ../client/pk-console.c:249
 msgid "(seconds)"
 msgstr "(സെക്കന്‍ഡുകള്‍)"
 
 #. TRANSLATORS: this is The command line used to do the action
 #. TRANSLATORS: the command line of the thing that wants the authentication
-#: ../client/pk-console.c:250 ../src/pk-polkit-action-lookup.c:341
+#: ../client/pk-console.c:253 ../src/pk-polkit-action-lookup.c:341
 msgid "Command line"
 msgstr "കമാന്‍ഡ് ലൈന്‍"
 
 #. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:252
+#: ../client/pk-console.c:255
 msgid "User ID"
 msgstr "ഉപയോക്താവിനുള്ള ID"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:259
+#: ../client/pk-console.c:262
 msgid "Username"
 msgstr "ഉപയോക്തൃനാമം"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:263
+#: ../client/pk-console.c:266
 msgid "Real name"
 msgstr "യഥാര്‍ത്ഥ പേരു്"
 
-#: ../client/pk-console.c:271
+#: ../client/pk-console.c:274
 msgid "Affected packages:"
 msgstr "ബാധിച്ച പാക്കേജുകള്‍:"
 
-#: ../client/pk-console.c:273
+#: ../client/pk-console.c:276
 msgid "Affected packages: None"
 msgstr "ബാധിച്ച പാക്കേജുകള്‍: ഒന്നുമില്ല"
 
+#. TRANSLATORS: When processing, we might have to remove other dependencies
+#: ../client/pk-console.c:337
+msgid "The following packages have to be removed:"
+msgstr "താഴെ പറയുന്ന പാക്കേജുകള്‍ നീക്കം ചെയ്യേണ്ടതുണ്ടു്."
+
+#. TRANSLATORS: When processing, we might have to install other dependencies
+#: ../client/pk-console.c:340
+msgid "The following packages have to be installed:"
+msgstr "താഴെ പറയുന്ന പാക്കേജുകള്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്യേണ്ടതാണു്:"
+
+#. TRANSLATORS: When processing, we might have to update other dependencies
+#: ../client/pk-console.c:343
+msgid "The following packages have to be updated:"
+msgstr "താഴെ പറയുന്ന പാക്കേജുകള്‍ പരിഷ്കരിക്കേണ്ടതുണ്ടു്:"
+
+#. TRANSLATORS: When processing, we might have to reinstall other dependencies
+#: ../client/pk-console.c:346
+msgid "The following packages have to be reinstalled:"
+msgstr "താഴെ പറയുന്ന പാക്കേജുകള്‍ വീണ്ടും ഇന്‍സ്റ്റോള്‍ ചെയ്യേണ്ടതുണ്ടു്:"
+
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../client/pk-console.c:349
+msgid "The following packages have to be downgraded:"
+msgstr "താഴെ പറയുന്ന പാക്കേജുകള്‍ ഡൌണ്‍ഗ്രേഡ് ചെയ്യേണ്ടതുണ്ടു്:"
+
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:298
+#: ../client/pk-console.c:363
 msgid "Distribution"
 msgstr "വിതരണം"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:300
+#: ../client/pk-console.c:365
 msgid "Type"
 msgstr "തരം"
 
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:302 ../client/pk-console.c:325
+#: ../client/pk-console.c:367 ../client/pk-console.c:390
 msgid "Summary"
 msgstr "സമ്മറി"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:314
+#: ../client/pk-console.c:379
 msgid "Category"
 msgstr "വിഭാഗം"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:316
+#: ../client/pk-console.c:381
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:319
+#: ../client/pk-console.c:384
 msgid "Parent"
 msgstr "പേരന്റ്"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:322
+#: ../client/pk-console.c:387
 msgid "Name"
 msgstr "പേരു്"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:328
+#: ../client/pk-console.c:393
 msgid "Icon"
 msgstr "ചിഹ്നം"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:343
+#: ../client/pk-console.c:408
 msgid "Details about the update:"
 msgstr "പരിഷ്കരണങ്ങള്‍ സംബന്ധിച്ചുള്ള വിശദാംശങ്ങള്‍:"
 
 #. TRANSLATORS: details about the update, package name and version
 #. TRANSLATORS: title, the names of the packages that the method is processing
-#: ../client/pk-console.c:345 ../src/pk-polkit-action-lookup.c:352
-#, fuzzy
+#: ../client/pk-console.c:410 ../src/pk-polkit-action-lookup.c:352
 msgid "Package"
 msgid_plural "Packages"
 msgstr[0] "പാക്കേജ്"
-msgstr[1] "പാക്കേജ്"
+msgstr[1] "പാക്കേജുകള്‍"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:348
+#: ../client/pk-console.c:413
 msgid "Updates"
 msgstr "പരിഷ്കരണങ്ങള്‍"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:352
+#: ../client/pk-console.c:417
 msgid "Obsoletes"
 msgstr "വേണ്ടെന്നു് വച്ചവ"
 
 #. TRANSLATORS: details about the update, the vendor URLs
-#: ../client/pk-console.c:356
+#: ../client/pk-console.c:421
 msgid "Vendor"
 msgstr "കച്ചവടക്കാരന്‍"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:360
+#: ../client/pk-console.c:425
 msgid "Bugzilla"
 msgstr "Bugzilla"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:364
+#: ../client/pk-console.c:429
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:368
+#: ../client/pk-console.c:433
 msgid "Restart"
 msgstr "വീണ്ടും ആരംഭിക്കുക"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:372
+#: ../client/pk-console.c:437
 msgid "Update text"
 msgstr "പരിഷ്കരിച്ച വാചകം"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:376
+#: ../client/pk-console.c:441
 msgid "Changes"
 msgstr "മാറ്റങ്ങള്‍"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:380
+#: ../client/pk-console.c:445
 msgid "State"
 msgstr "അവസ്ഥ"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:385
+#: ../client/pk-console.c:450
 msgid "Issued"
 msgstr "നല്‍കിയതു്"
 
 #. TRANSLATORS: details about the update, date the update was updated
-#: ../client/pk-console.c:390
+#: ../client/pk-console.c:455
 msgid "Updated"
 msgstr "പരിഷ്കരിച്ചിരിക്കുന്നു"
 
-#: ../client/pk-console.c:477 ../client/pk-console.c:479
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:475
+msgid "Enabled"
+msgstr "പ്രവര്‍ത്തന സജ്ജം"
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:478
+msgid "Disabled"
+msgstr "പ്രവര്‍ത്തന രഹിതം"
+
+#: ../client/pk-console.c:555 ../client/pk-console.c:557
 msgid "Percentage"
 msgstr "ശതമാനം"
 
-#: ../client/pk-console.c:479
+#: ../client/pk-console.c:557
 msgid "Unknown"
 msgstr "അപരിചിതം"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:521
+#: ../client/pk-console.c:599
 msgid "System restart required by:"
 msgstr "സിസ്റ്റം വീണ്ടും ആരംഭിക്കുന്നതു് ആവശ്യമുള്ളതു്:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:524
+#: ../client/pk-console.c:602
 msgid "Session restart required:"
 msgstr "സെഷന്‍ വീണ്ടും ആരംഭിക്കേണ്ടതുണ്ടു്:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:527
+#: ../client/pk-console.c:605
 msgid "System restart (security) required by:"
 msgstr "സിസ്റ്റം വീണ്ടും ആരംഭിക്കുന്നതു് (സുരക്ഷാ പരിഷ്കരണം) ആവശ്യമുള്ളതു്:"
 
 #. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:530
+#: ../client/pk-console.c:608
 msgid "Session restart (security) required:"
 msgstr "സെഷന്‍ വീണ്ടും ആരംഭിക്കുന്നതു് (സുരക്ഷാ പരിഷ്കരണം) ആവശ്യമുള്ളതു്:"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:533
+#: ../client/pk-console.c:611
 msgid "Application restart required by:"
 msgstr "പ്രയോഗം വീണ്ടും ആരംഭിക്കേണ്ടതു് ആവശ്യമുള്ളതു്:"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:588
+#: ../client/pk-console.c:666
 msgid "Please restart the computer to complete the update."
 msgstr "പരിഷ്കരണങ്ങള്‍ പൂര്‍ത്തിയാക്കുന്നതിനായി ദയവായി നിങ്ങളുടെ കമ്പ്യൂട്ടര്‍ വീണ്ടും ആരംഭിക്കുക."
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:591
+#: ../client/pk-console.c:669
 msgid "Please logout and login to complete the update."
 msgstr "പരിഷ്കരണങ്ങള്‍ പൂര്‍ത്തിയാക്കുന്നതിനായി ദയവായി ലോഗൌട്ട് ചെയ്ത് ലോഗിന്‍ ചെയ്യുക."
 
 #. TRANSLATORS: a package needs to restart the application
-#: ../client/pk-console.c:594
+#: ../client/pk-console.c:672
 msgid "Please restart the application as it is being used."
 msgstr "ഈ പ്രയോഗം ഉപയോഗിക്കേണ്ടപ്പോള്‍ തന്നെ വീണ്ടും ആരംഭിക്കുക."
 
 #. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:597
+#: ../client/pk-console.c:675
 msgid ""
 "Please restart the computer to complete the update as important security "
 "updates have been installed."
@@ -252,7 +286,7 @@ msgstr ""
 "വീണ്ടും ആരംഭിക്കുക."
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:600
+#: ../client/pk-console.c:678
 msgid ""
 "Please logout and login to complete the update as important security updates "
 "have been installed."
@@ -261,544 +295,554 @@ msgstr ""
 "ചെയ്യുക."
 
 #. TRANSLATORS: The package is already installed on the system
-#: ../client/pk-console.c:727
+#: ../client/pk-console.c:810
 #, c-format
 msgid "The package %s is already installed"
 msgstr "%s എന്ന പാക്കേജ് നിലവില്‍ കമ്പ്യൂട്ടറില്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്തിരിക്കുന്നു."
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:735
+#: ../client/pk-console.c:818
 #, c-format
 msgid "The package %s could not be installed: %s"
 msgstr "%s എന്ന പാക്കേജ് നിങ്ങളുടെ കമ്പ്യൂട്ടറില്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്യുവാന്‍ സാധ്യമായില്ല: %s"
 
 #. TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows
-#: ../client/pk-console.c:760 ../client/pk-console.c:783
-#: ../client/pk-console.c:879 ../client/pk-console.c:996
-#: ../client/pk-tools-common.c:62 ../client/pk-tools-common.c:81
-#: ../client/pk-tools-common.c:89
+#: ../client/pk-console.c:844 ../client/pk-console.c:892
+#: ../client/pk-console.c:916 ../client/pk-console.c:964
+#: ../client/pk-console.c:1060 ../client/pk-console.c:1173
+#: ../client/pk-console.c:1234 ../client/pk-tools-common.c:63
+#: ../client/pk-tools-common.c:82 ../client/pk-tools-common.c:90
 #, c-format
 msgid "Internal error: %s"
 msgstr "ആന്തരിക പിശക്: %s"
 
+#. TRANSLATORS: We are checking if it's okay to remove a list of packages
+#: ../client/pk-console.c:876 ../client/pk-console.c:948
+#: ../client/pk-console.c:1266
+msgid "Proceed with changes?"
+msgstr "മാറ്റങ്ങളുമായി മുമ്പോട്ട് പോകണമോ?"
+
+#. TRANSLATORS: There was an error removing the packages. The detailed error follows
+#: ../client/pk-console.c:881 ../client/pk-console.c:953
+msgid "The package install was canceled!"
+msgstr "പാക്കേജ് ഇന്‍സ്റ്റോള്‍ ചെയ്യല്‍ റദ്ദാക്കിയിരിക്കുന്നു!"
+
 #. TRANSLATORS: There was an error installing the packages. The detailed error follows
-#: ../client/pk-console.c:768 ../client/pk-console.c:1392
+#: ../client/pk-console.c:900 ../client/pk-console.c:1634
 #, c-format
 msgid "This tool could not install the packages: %s"
 msgstr "ഈ പ്രയോഗത്തിനു് പാക്കേജുകള്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്യുവാന്‍ സാധ്യമല്ല: %s"
 
 #. TRANSLATORS: There was an error installing the files. The detailed error follows
-#: ../client/pk-console.c:791
+#: ../client/pk-console.c:972
 #, c-format
 msgid "This tool could not install the files: %s"
 msgstr "ഈ പ്രയോഗത്തിനു് ഫയലുകള്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്യുവാന്‍ സാധ്യമല്ല: %s"
 
 #. TRANSLATORS: The package name was not found in the installed list. The detailed error follows
-#: ../client/pk-console.c:847
+#: ../client/pk-console.c:1028
 #, c-format
 msgid "This tool could not remove %s: %s"
 msgstr "ഈ പ്രയോഗത്തിനു് %s നീക്കം ചെയ്യുവാന്‍ സാധ്യമായില്ല: %s"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:870 ../client/pk-console.c:908
-#: ../client/pk-console.c:941
+#: ../client/pk-console.c:1051 ../client/pk-console.c:1089
+#: ../client/pk-console.c:1118
 #, c-format
 msgid "This tool could not remove the packages: %s"
 msgstr "ഈ പ്രയോഗത്തിനു് പാക്കേജുകള്‍ നീക്കം ചെയ്യുവാന്‍ സാധ്യമല്ല: %s"
 
-#. TRANSLATORS: When removing, we might have to remove other dependencies
-#: ../client/pk-console.c:920
-msgid "The following packages have to be removed:"
-msgstr "താഴെ പറയുന്ന പാക്കേജുകള്‍ നീക്കം ചെയ്യേണ്ടതുണ്ടു്."
-
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:927
-msgid "Proceed removing additional packages?"
-msgstr "അഡീഷണലായ പാക്കേജുകള്‍ നീക്കം ചെയ്യാമല്ലോ?"
+#: ../client/pk-console.c:1104
+msgid "Proceed with additional packages?"
+msgstr "കൂടുതല്‍ പാക്കേജുകളുമായി മുമ്പോട്ട് പോകണമോ?"
 
-#. TRANSLATORS: We did not remove any packages
-#: ../client/pk-console.c:932
+#. TRANSLATORS: There was an error removing the packages. The detailed error follows
+#: ../client/pk-console.c:1109
 msgid "The package removal was canceled!"
 msgstr "പാക്കേജ് നീക്കം ചെയ്യല്‍ റദ്ദാക്കിയിരിക്കുന്നു!"
 
 #. TRANSLATORS: The package name was not found in any software sources
-#: ../client/pk-console.c:973
+#: ../client/pk-console.c:1150
 #, c-format
 msgid "This tool could not download the package %s as it could not be found"
 msgstr "%s പാക്കേജ് ലഭ്യമല്ലാത്തതിനാല്‍ ഈ പ്രയോഗത്തിനു് അതു് ഇന്‍സ്റ്റോള്‍ ചെയ്യുവാന്‍ സാധ്യമായില്ല"
 
 #. TRANSLATORS: Could not download the packages for some reason. The detailed error follows
-#: ../client/pk-console.c:1004
+#: ../client/pk-console.c:1181
 #, c-format
 msgid "This tool could not download the packages: %s"
 msgstr "ഈ പ്രയോഗത്തിനു് പാക്കേജുകള്‍ ഡൌണ്‍ലോട് ചെയ്യുവാന്‍ സാധ്യമല്ല: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1031 ../client/pk-console.c:1040
+#: ../client/pk-console.c:1213 ../client/pk-console.c:1225
+#: ../client/pk-console.c:1280
 #, c-format
 msgid "This tool could not update %s: %s"
 msgstr "ഈ പ്രയോഗത്തിനു് %s പരിഷ്കരിക്കുവാന്‍ സാധ്യമല്ല: %s"
 
+#. TRANSLATORS: There was an error removing the packages. The detailed error follows
+#: ../client/pk-console.c:1271
+msgid "The package update was canceled!"
+msgstr "പാക്കേജ് പുതുക്കല്‍ റദ്ദാക്കിയിരിക്കുന്നു!"
+
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1062 ../client/pk-console.c:1070
+#: ../client/pk-console.c:1304 ../client/pk-console.c:1312
 #, c-format
 msgid "This tool could not get the requirements for %s: %s"
 msgstr "%s-നു് ആവശ്യമുള്ളവ ലഭ്യമാക്കുവാന്‍ ഈ പ്രയോഗത്തിനു് സാധ്യമായില്ല: %s"
 
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
-#: ../client/pk-console.c:1092 ../client/pk-console.c:1100
+#: ../client/pk-console.c:1334 ../client/pk-console.c:1342
 #, c-format
 msgid "This tool could not get the dependencies for %s: %s"
 msgstr "%s-നുള്ള ഡിപന്‍ഡന്‍സികള്‍ ലഭ്യമാക്കുവാന്‍ ഈ പ്രയോഗത്തിനു് സാധ്യമായില്ല: %s"
 
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
-#: ../client/pk-console.c:1122 ../client/pk-console.c:1130
+#: ../client/pk-console.c:1364 ../client/pk-console.c:1372
 #, c-format
 msgid "This tool could not get package details for %s: %s"
 msgstr "%s-നുള്ള പാക്കേജിന്റെ വിശദാംശങ്ങള്‍ ലഭ്യമാക്കുവാന്‍ ഈ പ്രയോഗത്തിനു് സാധ്യമായില്ല: %s"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1152
+#: ../client/pk-console.c:1394
 #, c-format
 msgid "This tool could not find the files for %s: %s"
 msgstr "%s-നുള്ള ഫയലുകള്‍ ലഭ്യമാക്കുവാന്‍ ഈ പ്രയോഗത്തിനു് സാധ്യമായില്ല: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1160
+#: ../client/pk-console.c:1402
 #, c-format
 msgid "This tool could not get the file list for %s: %s"
 msgstr "%s-നുള്ള ഫയലുകളുടെ പട്ടിക ലഭ്യമാക്കുവാന്‍ ഈ പ്രയോഗത്തിനു് സാധ്യമായില്ല: %s"
 
 #. TRANSLATORS: There was an error getting the list of packages. The filename follows
-#: ../client/pk-console.c:1182
+#: ../client/pk-console.c:1424
 #, c-format
 msgid "File already exists: %s"
 msgstr "ഫയല്‍ നിലവിലുണ്ടു്: %s"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1187 ../client/pk-console.c:1243
-#: ../client/pk-console.c:1318
+#: ../client/pk-console.c:1429 ../client/pk-console.c:1485
+#: ../client/pk-console.c:1560
 msgid "Getting package list"
 msgstr "പാക്കേജ് സംബന്ധിച്ചുള്ള വിവരം ലഭ്യമാകുന്നു"
 
 #. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
-#: ../client/pk-console.c:1193 ../client/pk-console.c:1249
-#: ../client/pk-console.c:1324
+#: ../client/pk-console.c:1435 ../client/pk-console.c:1491
+#: ../client/pk-console.c:1566
 #, c-format
 msgid "This tool could not get package list: %s"
 msgstr "ഈ പ്രയോഗത്തിനു് പാക്കേജുകളുടെ പട്ടിക ലഭ്യമാക്കുവാന്‍ സാധ്യമായില്ല: %s"
 
 #. TRANSLATORS: There was an error saving the list
-#: ../client/pk-console.c:1204
+#: ../client/pk-console.c:1446
 #, c-format
 msgid "Failed to save to disk"
 msgstr "ഡിസ്കിലേക്കു് സൂക്ഷിക്കുവാന്‍ സാധ്യമായില്ല"
 
 #. TRANSLATORS: There was an error getting the list. The filename follows
-#: ../client/pk-console.c:1238 ../client/pk-console.c:1313
+#: ../client/pk-console.c:1480 ../client/pk-console.c:1555
 #, c-format
 msgid "File does not exist: %s"
 msgstr "ഫയല്‍ നിലവിലില്ല: %s"
 
 #. TRANSLATORS: header to a list of packages newly added
-#: ../client/pk-console.c:1270
+#: ../client/pk-console.c:1512
 msgid "Packages to add"
 msgstr "ചേര്‍ക്കുവാനുള്ള പാക്കേജുകള്‍"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1278
+#: ../client/pk-console.c:1520
 msgid "Packages to remove"
 msgstr "നീക്കം ചെയ്യുവാനുള്ള പാക്കേജുകള്‍"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1346
+#: ../client/pk-console.c:1588
 #, c-format
 msgid "No new packages need to be installed"
 msgstr "പുതിയ പാക്കേജുകള്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്യുവാന്‍ സാധ്യമായില്ല"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1352
+#: ../client/pk-console.c:1594
 msgid "To install"
 msgstr "ഇന്‍സ്റ്റോള്‍ ചെയ്യുവാനുള്ള പാക്കേജുകള്‍"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1364
+#: ../client/pk-console.c:1606
 msgid "Searching for package: "
 msgstr "പാക്കേജിനായി തെരയുന്നു: "
 
 #. TRANSLATORS: package was not found -- this is the end of a string ended in ...
-#: ../client/pk-console.c:1368
+#: ../client/pk-console.c:1610
 msgid "not found."
 msgstr "ലഭ്യമായില്ല."
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1379
+#: ../client/pk-console.c:1621
 #, c-format
 msgid "No packages can be found to install"
 msgstr "ഇന്‍സ്റ്റോള്‍ ചെയ്യുന്നതിനുള്ള പാക്കേജുകള്‍ ലഭ്യമല്ല"
 
 #. TRANSLATORS: installing new packages from package list
 #. TRANSLATORS: we are now installing the debuginfo packages we found earlier
-#: ../client/pk-console.c:1385
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:886
+#: ../client/pk-console.c:1627
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
 #, c-format
 msgid "Installing packages"
 msgstr "പാക്കേജുകള്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്യുന്നു"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1421
+#: ../client/pk-console.c:1663
 #, c-format
 msgid "This tool could not find the update details for %s: %s"
 msgstr "%s-നു് പരിഷ്കരണത്തിനുള്ള വിശദാംശങ്ങള്‍ ലഭ്യമാക്കുവാന്‍ ഈ പ്രയോഗത്തിനു് സാധ്യമായില്ല: %s"
 
 #. TRANSLATORS: There was an error getting the details about the update for the package. The detailed error follows
-#: ../client/pk-console.c:1429
+#: ../client/pk-console.c:1671
 #, c-format
 msgid "This tool could not get the update details for %s: %s"
 msgstr "%s-നു് പരിഷ്കരണത്തിനുള്ള വിശദാംശങ്ങള്‍ ലഭ്യമാക്കുവാന്‍ ഈ പ്രയോഗത്തിനു് സാധ്യമായില്ല: %s"
 
 #. TRANSLATORS: This was an unhandled error, and we don't have _any_ context
-#: ../client/pk-console.c:1460
+#: ../client/pk-console.c:1702
 msgid "Error:"
 msgstr "പിശക്:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1474
+#: ../client/pk-console.c:1716
 msgid "Package description"
 msgstr "പാക്കേജ് വിശദാംശങ്ങള്‍"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:1490
+#: ../client/pk-console.c:1732
 msgid "Message:"
 msgstr "സന്ദേശം:"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1518
+#: ../client/pk-console.c:1760
 msgid "Package files"
 msgstr "പാക്കേജിലുള്ള ഫയലുകള്‍"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1526
+#: ../client/pk-console.c:1768
 msgid "No files"
 msgstr "ഫയലുകള്‍ ലഭ്യമല്ല"
 
 #. TRANSLATORS: This a request for a GPG key signature from the backend, which the client will prompt for later
-#: ../client/pk-console.c:1549
+#: ../client/pk-console.c:1791
 msgid "Repository signature required"
 msgstr "സംഭരണിയ്ക്കുള്ള ജിപിജി ഒപ്പ് ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
-#: ../client/pk-console.c:1559
+#: ../client/pk-console.c:1801
 msgid "Do you accept this signature?"
 msgstr "ഈ ഓപ്പ് നിങ്ങള്‍ അംഗീകരിക്കുന്നുവോ?"
 
 #. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1563
+#: ../client/pk-console.c:1805
 msgid "The signature was not accepted."
 msgstr "ഒപ്പ് സ്വീകരിക്കുന്നില്ല."
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1597
+#: ../client/pk-console.c:1839
 msgid "End user license agreement required"
 msgstr "ഉപയോക്താവിനുള്ള ലൈസന്‍സ് എഗ്രീമെന്റ് ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: This a prompt asking the user to agree to the license
-#: ../client/pk-console.c:1604
+#: ../client/pk-console.c:1846
 msgid "Do you agree to this license?"
 msgstr "നിങ്ങള്‍ ഈ ലൈസന്‍സ് സ്വീകരിക്കുന്നുവോ?"
 
 #. TRANSLATORS: This is where the user declined the license
-#: ../client/pk-console.c:1608
+#: ../client/pk-console.c:1850
 msgid "The license was refused."
 msgstr "ലൈസന്‍സ് നിഷേധിച്ചിരിക്കുന്നു."
 
 #. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1637
+#: ../client/pk-console.c:1879
 msgid "The daemon crashed mid-transaction!"
 msgstr "ഡെമണ്‍ തകര്‍ന്നിരിക്കുന്നു!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1690
+#: ../client/pk-console.c:1932
 msgid "PackageKit Console Interface"
 msgstr "പാക്കേജ്കിറ്റ് കണ്‍സോള്‍ ഇന്റര്‍ഫെയിസ്"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1692
+#: ../client/pk-console.c:1934
 msgid "Subcommands:"
 msgstr "സബ്കമാന്‍ഡുകള്‍:"
 
 #. TRANSLATORS: command line argument, if we should show debugging information
 #. TRANSLATORS: if we should show debugging data
-#: ../client/pk-console.c:1785 ../client/pk-generate-pack.c:185
+#: ../client/pk-console.c:2027 ../client/pk-generate-pack.c:187
 #: ../client/pk-monitor.c:128
 #: ../contrib/command-not-found/pk-command-not-found.c:616
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:550
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:549
 #: ../contrib/device-rebind/pk-device-rebind.c:293 ../src/pk-main.c:211
 msgid "Show extra debugging information"
 msgstr "കൂടുതല്‍ ഡീബഗ്ഗിങ് വിവരം കാണിക്കുക"
 
 #. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1788 ../client/pk-monitor.c:130
+#: ../client/pk-console.c:2030 ../client/pk-monitor.c:130
 msgid "Show the program version and exit"
 msgstr "പ്രോഗ്രാമിന്റെ പതിപ്പ് കാണിച്ചശേഷം പുറത്ത് കടക്കുക"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1791
+#: ../client/pk-console.c:2033
 msgid "Set the filter, e.g. installed"
 msgstr "ഫില്‍‌റ്റര്‍ ക്രമികരിക്കുക, e.g. ഇന്‍സ്റ്റോള്‍ ചെയ്തിരിക്കുന്നു"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1794
+#: ../client/pk-console.c:2036
 msgid "Exit without waiting for actions to complete"
 msgstr "പൂര്‍ത്തിയാകുന്നതിനുള്ള പ്രവര്‍ത്തികള്‍ക്കായി കാത്തിരിക്കാതെ പുറത്ത് കടക്കുക"
 
 #. TRANSLATORS: This is when we could not connect to the system bus, and is fatal
-#: ../client/pk-console.c:1821
+#: ../client/pk-console.c:2063
 msgid "This tool could not connect to system DBUS."
 msgstr "സിസ്റ്റം ഡീബസിലേക്ക് കണക്ട് ചെയ്യുവാന്‍ ഈ പ്രയോഗത്തിനു് സാധ്യമല്ല."
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1911
+#: ../client/pk-console.c:2153
 msgid "The filter specified was invalid"
 msgstr "നല്‍കിയ ഫില്‍‌റ്റര്‍ തെറ്റാണു്"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1930
+#: ../client/pk-console.c:2172
 msgid "A search type is required, e.g. name"
 msgstr "തെരയുന്നതിനുള്ള തരം ആവശ്യമുണ്ടു്, ഉദാ. പേരു്"
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1937 ../client/pk-console.c:1946
-#: ../client/pk-console.c:1955 ../client/pk-console.c:1964
+#: ../client/pk-console.c:2179 ../client/pk-console.c:2188
+#: ../client/pk-console.c:2197 ../client/pk-console.c:2206
 msgid "A search term is required"
 msgstr "തെരയുന്നതിനുള്ള വാചകം ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1971
+#: ../client/pk-console.c:2213
 msgid "Invalid search type"
 msgstr "തെറ്റായ തരത്തിലുള്ള തെരച്ചില്‍"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1977
+#: ../client/pk-console.c:2219
 msgid "A package name or filename to install is required"
 msgstr "ഇന്‍സ്റ്റോള്‍ ചെയ്യുന്നതിനുള്ള പാക്കേജിന്റെ പേരു് അല്ലെങ്കില്‍ ഫയലിന്റെ പേരു് ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1986
+#: ../client/pk-console.c:2228
 msgid "A type, key_id and package_id are required"
 msgstr "ഏത് തരം, key_id, package_id എന്നിവ ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1995
+#: ../client/pk-console.c:2237
 msgid "A package name to remove is required"
 msgstr "നീക്കം ചെയ്യുവാനുള്ള പാക്കേജിന്റെ പേരു് ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:2003
-#, fuzzy
+#: ../client/pk-console.c:2245
 msgid "A destination directory and the package names to download are required"
 msgstr "ഏതു് ഡയറക്ടറി എന്നും ഡൌണ്‍ലോട് ചെയ്യുവാനുള്ള പാക്കേജുകളും ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:2010
+#: ../client/pk-console.c:2252
 msgid "Directory not found"
 msgstr "ഡയറക്ടറി ലഭ്യമല്ല"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2018
+#: ../client/pk-console.c:2260
 msgid "A licence identifier (eula-id) is required"
 msgstr "ലൈസന്‍സ് ഐഡന്റിഫയര്‍ (eula-id) ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2028
+#: ../client/pk-console.c:2270
 msgid "A transaction identifier (tid) is required"
 msgstr "ഒരു ട്രാന്‍സാക്ഷന്‍ ഐഡന്റിഫയര്‍ (tid) ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:2045
+#: ../client/pk-console.c:2287
 msgid "A package name to resolve is required"
 msgstr "റിസോള്‍വ് ചെയ്യുവാനുള്ള പാക്കേജിന്റെ പേരു് ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:2054 ../client/pk-console.c:2063
+#: ../client/pk-console.c:2296 ../client/pk-console.c:2305
 msgid "A repository name is required"
 msgstr "സംഭരണിയ്ക്കുള്ള പേരു് ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:2072
+#: ../client/pk-console.c:2314
 msgid "A repo name, parameter and value are required"
 msgstr "ഒരു റിപ്പോയുടെ പേരും പരാമീറ്റരും മൂല്ല്യവും ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:2086
+#: ../client/pk-console.c:2328
 msgid "An action, e.g. 'update-system' is required"
 msgstr "ഒരു പ്രവര്‍ത്തി ആവശ്യമുണ്ടു്, ഉദാ. 'update-system'"
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:2093
+#: ../client/pk-console.c:2335
 msgid "A correct role is required"
 msgstr "ശരിയായ റോള്‍ ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:2100
+#: ../client/pk-console.c:2342
 msgid "Failed to get the time since this action was last completed"
 msgstr "ഈ പ്രവര്‍ത്തി അവസാനമായി പൂര്‍ത്തിയാക്കിയ സമയം ലഭ്യമായില്ല"
 
 #. TRANSLATORS: The user did not provide a package name
 #. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:2110 ../client/pk-console.c:2122
-#: ../client/pk-console.c:2131 ../client/pk-console.c:2149
-#: ../client/pk-console.c:2158 ../client/pk-generate-pack.c:241
+#: ../client/pk-console.c:2352 ../client/pk-console.c:2364
+#: ../client/pk-console.c:2373 ../client/pk-console.c:2391
+#: ../client/pk-console.c:2400 ../client/pk-generate-pack.c:243
 msgid "A package name is required"
 msgstr "പാക്കേജിന്റ് പേരു് ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:2140
+#: ../client/pk-console.c:2382
 msgid "A package provide string is required"
 msgstr "പാക്കേജ് ലഭ്യമാക്കുന്ന സ്ട്രിങ് ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: The user didn't specify a filename to create as a list
-#: ../client/pk-console.c:2167
+#: ../client/pk-console.c:2409
 msgid "A list file name to create is required"
 msgstr "ലിസ്റ്റായി ഉണ്ടാക്കുവാനുള്ള ഫയലിന്റെ നാമം ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: The user didn't specify a filename to open as a list
-#: ../client/pk-console.c:2177 ../client/pk-console.c:2187
+#: ../client/pk-console.c:2419 ../client/pk-console.c:2429
 msgid "A list file to open is required"
 msgstr "ലിസ്റ്റായി തുറക്കുവാനുള്ള ഫയലിന്റെ നാമം ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:2241
+#: ../client/pk-console.c:2483
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "'%s' എന്ന ഐച്ഛികത്തിനുള്ള പിന്തുണ ലഭ്യമല്ല"
 
 #. TRANSLATORS: User does not have permission to do this
-#: ../client/pk-console.c:2254
+#: ../client/pk-console.c:2496
 msgid "Incorrect privileges for this operation"
 msgstr "ഈ പ്രക്രിയ നടപ്പിലാക്കുന്നതിനുള്ള തെറ്റായ അനുമതികള്‍"
 
 #. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:2257
+#: ../client/pk-console.c:2499
 msgid "Command failed"
 msgstr "നിര്‍ദ്ദേശം പരാജയപ്പെട്ടു"
 
 #. TRANSLATORS: This is the state of the transaction
-#: ../client/pk-generate-pack.c:101
+#: ../client/pk-generate-pack.c:103
 msgid "Downloading"
 msgstr "ഡൌണ്‍ലോട് ചെയ്യുന്നു"
 
 #. TRANSLATORS: This is when the main packages are being downloaded
-#: ../client/pk-generate-pack.c:121
+#: ../client/pk-generate-pack.c:123
 msgid "Downloading packages"
 msgstr "പാക്കേജുകള്‍ ഡൌണ്‍ലോട് ചെയ്യുന്നു"
 
 #. TRANSLATORS: This is when the dependency packages are being downloaded
-#: ../client/pk-generate-pack.c:126
+#: ../client/pk-generate-pack.c:128
 msgid "Downloading dependencies"
 msgstr "ഡിപെന്‍ഡന്‍സികള്‍ ഡൌണ്‍ലോട് ചെയ്യുന്നു"
 
 #. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll exist on the target
-#: ../client/pk-generate-pack.c:188
+#: ../client/pk-generate-pack.c:190
 msgid "Set the file name of dependencies to be excluded"
 msgstr "ചേര്‍ക്കേണ്ടാത്ത ഡിപന്‍ഡസികളുടെ ഫയല്‍ നാമം സജ്ജമാക്കുക"
 
 #. TRANSLATORS: the output location
-#: ../client/pk-generate-pack.c:191
-msgid ""
-"The output file or directory (the current directory is used if ommitted)"
+#: ../client/pk-generate-pack.c:193
+msgid "The output file or directory (the current directory is used if ommitted)"
 msgstr ""
 "ഔട്ട്പുട്ട് ഫയല്‍ അല്ലെങ്കില്‍ ഡയറക്ടറി (നല്‍കിയിട്ടില്ല എങ്കില്‍ നിലവിലുള്ള ഡയറക്ടറി ആണു് "
 "ഉപയോഗിക്കുന്നതു്)"
 
 #. TRANSLATORS: put a list of packages in the pack
-#: ../client/pk-generate-pack.c:194
+#: ../client/pk-generate-pack.c:196
 msgid "The package to be put into the service pack"
 msgstr "സര്‍വീസ് പാക്കിലേക്ക് ചേര്‍ക്കേണ്ട പാക്കേജ്"
 
 #. TRANSLATORS: put all pending updates in the pack
-#: ../client/pk-generate-pack.c:197
+#: ../client/pk-generate-pack.c:199
 msgid "Put all updates available in the service pack"
 msgstr "സര്‍വീസ് പാക്കില്‍ ലഭ്യമായ എല്ലാ പരിഷ്കരണങ്ങളും നല്‍കുക"
 
 #. TRANSLATORS: This is when the user fails to supply the correct arguments
-#: ../client/pk-generate-pack.c:225
+#: ../client/pk-generate-pack.c:227
 msgid "Neither --package or --updates option selected."
 msgstr "--package അല്ലെങ്കില്‍ --updates എച്ഛികം തെരഞ്ഞെടുത്തിട്ടില്ല."
 
 #. TRANSLATORS: This is when the user fails to supply just one argument
-#: ../client/pk-generate-pack.c:233
+#: ../client/pk-generate-pack.c:235
 msgid "Both options selected."
 msgstr "രണ്ടു് ഐച്ഛികങ്ങളും തെരഞ്ഞെടുത്തിട്ടില്ല."
 
 #. TRANSLATORS: This is when the user fails to supply the output
-#: ../client/pk-generate-pack.c:249
+#: ../client/pk-generate-pack.c:251
 msgid "A output directory or file name is required"
 msgstr "ഒരു ഔട്ട്പുട്ട് ഡയറക്ടറി അല്ലെങ്കില്‍ ഫയലിന്റെ പേരു് ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: This is when the backend doesn't have the capability to get-depends
 #. TRANSLATORS: This is when the backend doesn't have the capability to download
-#: ../client/pk-generate-pack.c:267 ../client/pk-generate-pack.c:273
+#: ../client/pk-generate-pack.c:269 ../client/pk-generate-pack.c:275
 msgid "The package manager cannot perform this type of operation."
 msgstr "പാക്കേജ് നിരീക്ഷകനു് ഈ തരത്തിലുള്ള പ്രക്രിയ നടത്തുവാന്‍ സാധ്യമല്ല"
 
 #. TRANSLATORS: This is when the distro didn't include libarchive support into PK
-#: ../client/pk-generate-pack.c:280
+#: ../client/pk-generate-pack.c:282
 msgid ""
 "Service packs cannot be created as PackageKit was not built with libarchive "
 "support."
-msgstr ""
-"libarchive പിന്തുണ ഇല്ലാതെ PackageKit ഉണ്ടാക്കിയതിനാല്‍, സര്‍വീസ് പാക്കുകള്‍ ലഭ്യമാകുന്നതല്ല."
+msgstr "libarchive പിന്തുണ ഇല്ലാതെ PackageKit ഉണ്ടാക്കിയതിനാല്‍, സര്‍വീസ് പാക്കുകള്‍ ലഭ്യമാകുന്നതല്ല."
 
 #. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
-#: ../client/pk-generate-pack.c:291
+#: ../client/pk-generate-pack.c:293
 msgid "If specifying a file, the service pack name must end with"
 msgstr "ഒരു ഫയല്‍ നല്‍കുന്നു എങ്കില്‍, സര്‍വീസ് പാക്ക് അവസാനിക്കേണ്ടതു്"
 
 #. TRANSLATORS: This is when file already exists
-#: ../client/pk-generate-pack.c:307
+#: ../client/pk-generate-pack.c:309
 msgid "A pack with the same name already exists, do you want to overwrite it?"
 msgstr "ഇതേ പേരില്‍ ഒരു ഫയല്‍ നിലവിലുണ്ടു്, അതു് മാറ്റി എഴുതണമോ?"
 
 #. TRANSLATORS: This is when the pack was not overwritten
-#: ../client/pk-generate-pack.c:310
+#: ../client/pk-generate-pack.c:312
 msgid "The pack was not overwritten."
 msgstr "ഫയല്‍ തിരുത്തിയെഴുതിയിട്ടില്ല."
 
 #. TRANSLATORS: This is when the temporary directory cannot be created, the directory name follows
-#: ../client/pk-generate-pack.c:323
+#: ../client/pk-generate-pack.c:325
 msgid "Failed to create directory:"
 msgstr "ഡയറക്ടറി ഉണ്ടാക്കുന്നതില്‍ പരാജയം:"
 
 #. TRANSLATORS: This is when the list of packages from the remote computer cannot be opened
-#: ../client/pk-generate-pack.c:333
+#: ../client/pk-generate-pack.c:335
 msgid "Failed to open package list."
 msgstr "പാക്കേജുകളുടെ പട്ടിക തുറക്കുന്നതില്‍ പരാജയം."
 
 #. TRANSLATORS: The package name is being matched up to available packages
-#: ../client/pk-generate-pack.c:344
+#: ../client/pk-generate-pack.c:346
 msgid "Finding package name."
 msgstr "പാക്കേജിന്റെ പേര് കണ്ടുപിടിക്കുന്നു."
 
 #. TRANSLATORS: This is when the package cannot be found in any software source. The detailed error follows
-#: ../client/pk-generate-pack.c:348
+#: ../client/pk-generate-pack.c:350
 #, c-format
 msgid "Failed to find package '%s': %s"
 msgstr "'%s' എന്ന പാക്കേജ് കണ്ടുപിടിക്കുവാനായില്ല: %s"
 
 #. TRANSLATORS: This is telling the user we are in the process of making the pack
-#: ../client/pk-generate-pack.c:365
+#: ../client/pk-generate-pack.c:367
 msgid "Creating service pack..."
 msgstr "സര്‍വീസ് പാക്ക് ഉണ്ടാക്കുന്നു..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:372
+#: ../client/pk-generate-pack.c:374
 #, c-format
 msgid "Service pack created '%s'"
 msgstr "'%s' സര്‍വീസ് പാക്ക് ഉണ്ടാക്കിയിരിക്കുന്നു"
 
 #. TRANSLATORS: we failed to make te file
-#: ../client/pk-generate-pack.c:377
+#: ../client/pk-generate-pack.c:379
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "'%s' ഉണ്ടാക്കുന്നതില്‍ പരാജയം: %s"
@@ -810,29 +854,24 @@ msgstr "പാക്കേജ്കിറ്റ് നിരീക്ഷകനàµ
 
 #: ../client/pk-monitor.c:183
 msgid "Cannot show the list of transactions"
-msgstr ""
+msgstr "ഇടപാടുകള്‍ കാണിക്കുവാന്‍ സാധ്യമല്ല"
 
 #. TRANSLATORS: The package was not found in any software sources
-#: ../client/pk-tools-common.c:118
+#: ../client/pk-tools-common.c:119
 #, c-format
 msgid "The package could not be found"
 msgstr "പാക്കേജ് ലഭ്യമായില്ല"
 
 #. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../client/pk-tools-common.c:130
+#: ../client/pk-tools-common.c:131
 msgid "More than one package matches:"
 msgstr "ഒന്നില്‍ കൂടുതല്‍ ചേരുന്ന പാക്കേജുകള്‍:"
 
 #. TRANSLATORS: This finds out which package in the list to use
-#: ../client/pk-tools-common.c:137
+#: ../client/pk-tools-common.c:138
 msgid "Please choose the correct package: "
 msgstr "ദയവായി ശരിയായ പാക്കേജ് തെരഞ്ഞെടുക്കുക: "
 
-#: ../client/pk-tools-common.c:162
-#, c-format
-msgid "Please enter a number from 1 to %i: "
-msgstr "ദയവായി 1 മുതല്‍ %i വരെയുള്ള ഒരു അക്കം നല്‍കുക: "
-
 #. TRANSLATORS: when we are getting data from the daemon
 #: ../contrib/browser-plugin/pk-plugin-install.c:466
 msgid "Getting package information..."
@@ -890,24 +929,22 @@ msgstr "ഇന്‍സ്റ്റോള്‍ ചെയ്യുന്നു..
 #. TRANSLATORS: downloading repo data so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:349
 msgid "Downloading details about the software sources."
-msgstr ""
+msgstr "സോഫ്റ്റ്‌വെയര്‍ സോഴ്സുകളെപ്പറ്റിയുള്ള വിവരങ്ങള്‍ ഡൌണ്‍ലോട് ചെയ്യുന്നു."
 
 #. TRANSLATORS: downloading file lists so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:353
 msgid "Downloading filelists (this may take some time to complete)."
-msgstr ""
+msgstr "ഫയല്‍ലിസ്റ്റുകള്‍ ഡൌണ്‍ലോട് ചെയ്യുന്നു (ഇതല്‍പം സമയമെടുക്കുന്നു)."
 
 #. TRANSLATORS: waiting for native lock
 #: ../contrib/command-not-found/pk-command-not-found.c:357
-#, fuzzy
 msgid "Waiting for package manager lock."
-msgstr "പാക്കേജിന്റെ പേര് കണ്ടുപിടിക്കുന്നു."
+msgstr "പാക്കേജ് മാനേജര്‍ ലോക്കിനായി കാത്തിരിക്കുന്നു."
 
 #. TRANSLATORS: loading package cache so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:361
-#, fuzzy
 msgid "Loading list of packages."
-msgstr "പാക്കേജുകള്‍ ഡൌണ്‍ലോട് ചെയ്യുന്നു"
+msgstr "പാക്കേജുകളുടെ പട്ടിക ലഭ്യമാക്കുന്നു."
 
 #. TRANSLATORS: we failed to find the package, this shouldn't happen
 #: ../contrib/command-not-found/pk-command-not-found.c:420
@@ -990,275 +1027,263 @@ msgid "Failed to find the package %s, or already installed: %s"
 msgstr "%s എന്ന പാക്കേജ് നിലവില്‍ ലഭ്യമല്ല അല്ലെങ്കില്‍ കമ്പ്യൂട്ടറില്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്തിരിക്കുന്നു: %s"
 
 #. command line argument, simulate what would be done, but don't actually do it
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:553
-msgid ""
-"Don't actually install any packages, only simulate what would be installed"
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:552
+msgid "Don't actually install any packages, only simulate what would be installed"
 msgstr "പാക്കേജുകള്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്യേണ്ട പകരം, ഇന്‍സ്റ്റോള്‍ ചെയ്യേണ്ടവ സിമുലേറ്റ് ചെയ്യുക"
 
 #. command line argument, do we skip packages that depend on the ones specified
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:556
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:555
 msgid "Do not install dependencies of the core packages"
 msgstr "കോര്‍ പാക്കേജുകളുടെ ഡിപന്‍ഡന്‍സികള്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്യരുതു്"
 
 #. command line argument, do we operate quietly
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:559
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:558
 msgid "Do not display information or progress"
 msgstr "വിവരം അല്ലെങ്കില്‍ പുരോഗതി ലഭ്യമാക്കേണ്ട"
 
 #. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:577
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:576
 msgid "PackageKit Debuginfo Installer"
 msgstr "PackageKit Debuginfo Installer"
 
 #. TRANSLATORS: the use needs to specify a list of package names on the command line
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:589
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:588
 #, c-format
 msgid "ERROR: Specify package names to install."
 msgstr "പിശക്: ഇന്‍സ്റ്റോള്‍ ചെയ്യുവാനുള്ള പാക്കേജുകള്‍ വ്യക്തമാക്കുക."
 
 #. TRANSLATORS: we are getting the list of repositories
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:623
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:622
 #, c-format
 msgid "Getting sources list"
 msgstr "റിപ്പോസിറ്ററികളുടെ വിവരം ലഭ്യമാകുന്നു"
 
 #. TRANSLATORS: all completed 100%
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:641
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:681
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:716
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:800
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:844
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:911
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:955
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:640
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:680
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:715
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:799
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:843
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:910
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:954
 #, c-format
 msgid "OK."
 msgstr "ശരി."
 
 #. TRANSLATORS: tell the user what we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:644
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:643
 #, c-format
 msgid "Found %i enabled and %i disabled sources."
 msgstr "%i സജ്ജമാക്കിയവയും %i പ്രവര്‍ത്തന രഹിതവുമായ സോഴ്സുകള്‍ ലഭ്യമാണു്."
 
 #. TRANSLATORS: we're finding repositories that match out pattern
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:651
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:650
 #, c-format
 msgid "Finding debugging sources"
 msgstr "ഡീബഗ്ഗിങ് സോഴ്സുകള്‍ ലഭ്യമാക്കുന്നു"
 
 #. TRANSLATORS: tell the user what we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:684
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:683
 #, c-format
 msgid "Found %i disabled debuginfo repos."
 msgstr "പ്രവര്‍ത്തന രഹിതമായ %i debuginfo റിപ്പോകള്‍ ലഭ്യമാക്കിയിരിക്കുന്നു."
 
 #. TRANSLATORS: we're now enabling all the debug sources we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:691
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
 #, c-format
 msgid "Enabling debugging sources"
 msgstr "ഡീബഗ്ഗിങ് സോഴ്സുകള്‍ സജ്ജമാക്കുന്നു"
 
 #. TRANSLATORS: operation was not successful
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:701
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:785
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:829
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:896
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:940
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:784
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:828
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:895
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:939
 msgid "FAILED."
 msgstr "FAILED."
 
 #. TRANSLATORS: tell the user how many we enabled
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:719
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:718
 #, c-format
 msgid "Enabled %i debugging sources."
 msgstr "%i ഡീബഗ്ഗിങ് സോഴ്സുകള്‍ സജ്ജമാക്കിയിരിക്കുന്നു."
 
 #. TRANSLATORS: we're now finding packages that match in all the repos
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:726
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:725
 #, c-format
 msgid "Finding debugging packages"
 msgstr "എല്ലാ റിപ്പോകളിലുമുള്ള പാക്കേജുകള്‍ (ഡീബഗ്ഗിങ്) കണ്ടുപിടിക്കുന്നു."
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:738
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:737
 #, c-format
 msgid "Failed to find the package %s: %s"
 msgstr "%s എന്ന പാക്കേജ് കണ്ടുപിടിക്കുവാനായില്ല: %s"
 
 #. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:761
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:760
 #, c-format
 msgid "Failed to find the debuginfo package %s: %s"
 msgstr "debuginfo പാക്കേജ് %s കണ്ടുപിടിക്കുവാനായില്ല: %s"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:789
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:788
 #, c-format
 msgid "Found no packages to install."
 msgstr "ഇന്‍സ്റ്റോള്‍ ചെയ്യുവാന്‍ പാക്കേജുകള്‍ ലഭ്യമായില്ല."
 
 #. TRANSLATORS: tell the user we found some packages, and then list them
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:802
 #, c-format
 msgid "Found %i packages:"
 msgstr "%i പാക്കേജുകള്‍ ലഭ്യമായി:"
 
 #. TRANSLATORS: tell the user we are searching for deps
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:819
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
 #, c-format
 msgid "Finding packages that depend on these packages"
 msgstr "ഈ പാക്കേജുകളെ ആശ്രയിക്കുന്ന പാക്കേജുകള്‍ ലഭ്യമാക്കുന്നു"
 
 #. TRANSLATORS: could not install, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:832
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:831
 #, c-format
 msgid "Could not find dependant packages: %s"
 msgstr "ഡിപന്‍ഡന്റ് പാക്കേജുകള്‍ കണ്ടുപിടിക്കുവാനായില്ല: %s"
 
 #. TRANSLATORS: tell the user we found some more packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:847
 #, c-format
 msgid "Found %i extra packages."
 msgstr "അധികമായ %i പാക്കേജുകള്‍ ലഭ്യമായിരിക്കുന്നു."
 
 #. TRANSLATORS: tell the user we found some more packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:852
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:851
 #, c-format
 msgid "No extra packages required."
 msgstr "അധികമായ പാക്കേജുകള്‍ ആവശ്യമില്ല."
 
 #. TRANSLATORS: tell the user we found some packages (and deps), and then list them
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:861
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
 #, c-format
 msgid "Found %i packages to install:"
 msgstr "%i പാക്കേജുകള്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്യുവാനുണ്ടു്:"
 
 #. TRANSLATORS: simulate mode is a testing mode where we quit before the action
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:874
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
 #, c-format
 msgid "Not installing packages in simulate mode"
 msgstr "സിമുലേറ്റ് മോഡില്‍ പാക്കേജുകള്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്യുന്നതല്ല"
 
 #. TRANSLATORS: could not install, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:899
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:898
 #, c-format
 msgid "Could not install packages: %s"
 msgstr "പാക്കേജുകള്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്യുവാന്‍ സാധ്യമല്ല: %s"
 
 #. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:931
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:930
 #, c-format
 msgid "Disabling sources previously enabled"
 msgstr "മുമ്പ് സജ്ജമാക്കിയ സോഴ്സുകള്‍ പ്രവര്‍ത്തന രഹിതമാക്കുന്നു"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:943
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:942
 #, c-format
 msgid "Could not disable the debugging sources: %s"
 msgstr "ഡീബഗ്ഗിങ് സോഴ്സുകള്‍ പ്രവര്‍ത്തന രഹിതമാക്കുവാന്‍ സാധിച്ചില്ല: %s"
 
 #. TRANSLATORS: we disabled all the debugging repos that we enabled before
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:958
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:957
 #, c-format
 msgid "Disabled %i debugging sources."
 msgstr "%i ഡീബഗ്ഗിങ് സോഴ്സുകള്‍ പ്രവര്‍ത്തന രഹിതമാക്കിയിരിക്കുന്നു."
 
 #. TRANSLATORS: couldn't open device to write
 #: ../contrib/device-rebind/pk-device-rebind.c:61
-#, fuzzy
 msgid "Failed to open file"
-msgstr "ഫയല്‍ കണ്ടുപിടിക്കുന്നതില്‍ പരാജയപ്പെട്ടു"
+msgstr "ഫയല്‍ തുറക്കുന്നതില്‍ പരാജയപ്പെട്ടു"
 
 #. TRANSLATORS: could not write to the device
 #: ../contrib/device-rebind/pk-device-rebind.c:70
-#, fuzzy
 msgid "Failed to write to the file"
-msgstr "ഫയല്‍ കണ്ടുപിടിക്കുന്നതില്‍ പരാജയപ്പെട്ടു"
+msgstr "ഫയലിലേക്ക് എഴുതുന്നതില്‍ പരാജയപ്പെട്ടു"
 
 #. TRANSLATORS: we failed to release the current driver
 #: ../contrib/device-rebind/pk-device-rebind.c:110
 #: ../contrib/device-rebind/pk-device-rebind.c:147
-#, fuzzy
 msgid "Failed to write to device"
-msgstr "ഡിസ്കിലേക്കു് സൂക്ഷിക്കുവാന്‍ സാധ്യമായില്ല"
+msgstr "ഡിവൈസിലേക്ക് എഴുതുന്നതില്‍ പരാജയപ്പെട്ടു"
 
 #. TRANSLATORS: the device could not be found in sysfs
 #: ../contrib/device-rebind/pk-device-rebind.c:175
-#, fuzzy
 msgid "Device could not be found"
-msgstr "പാക്കേജ് ലഭ്യമായില്ല"
+msgstr "ഡിവൈസ് ലഭ്യമായില്ല"
 
 #. TRANSLATORS: we failed to release the current driver
 #: ../contrib/device-rebind/pk-device-rebind.c:202
-#, fuzzy
 msgid "Failed to unregister driver"
-msgstr "ഡയറക്ടറി ഉണ്ടാക്കുന്നതില്‍ പരാജയം:"
+msgstr "ഡ്രൈവര്‍ അണ്‍രജിസ്ടര്‍ ചെയ്യുന്നതില്‍ പരാജയം:"
 
 #. TRANSLATORS: we failed to bind the old driver
 #: ../contrib/device-rebind/pk-device-rebind.c:211
-#, fuzzy
 msgid "Failed to register driver"
-msgstr "ഡയറക്ടറി ഉണ്ടാക്കുന്നതില്‍ പരാജയം:"
+msgstr "ഡ്രൈവര്‍ ര്‍രജിസ്ടര്‍ ചെയ്യുന്നതില്‍ പരാജയം:"
 
 #. TRANSLATORS: user did not specify a device sysfs path that exists
 #: ../contrib/device-rebind/pk-device-rebind.c:260
-#, fuzzy
 msgid "Device path not found"
-msgstr "ഡയറക്ടറി ലഭ്യമല്ല"
+msgstr "ഡിവൈസ് പാഥ് ലഭ്യമല്ല"
 
 #. TRANSLATORS: user did not specify a valid device sysfs path
 #: ../contrib/device-rebind/pk-device-rebind.c:268
 msgid "Incorrect device path specified"
-msgstr ""
+msgstr "തെറ്റായ ഡിവൈസ് പാഥ് നല്‍കിയിരിക്കുന്നു"
 
 #. command line argument, simulate what would be done, but don't actually do it
 #: ../contrib/device-rebind/pk-device-rebind.c:296
-#, fuzzy
 msgid "Don't actually touch the hardware, only simulate what would be done"
-msgstr "പാക്കേജുകള്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്യേണ്ട പകരം, ഇന്‍സ്റ്റോള്‍ ചെയ്യേണ്ടവ സിമുലേറ്റ് ചെയ്യുക"
+msgstr "ഹാര്‍ഡ്‌വെയറില്‍ ചെയ്യേണ്ടതെന്തെന്നു് സിമുലേറ്റ് ചെയ്തു് കാണിക്കുക"
 
 #. TRANSLATORS: command line option: a list of files to install
 #: ../contrib/device-rebind/pk-device-rebind.c:299
 msgid "Device paths"
-msgstr ""
+msgstr "ഡിവൈസ് പാഥുകള്‍"
 
 #. TRANSLATORS: tool that gets called when the device needs reloading after installing firmware
 #: ../contrib/device-rebind/pk-device-rebind.c:314
-#, fuzzy
 msgid "PackageKit Device Reloader"
-msgstr "പാക്കേജ്കിറ്റിനുള്ള സര്‍വീസ് പാക്ക്"
+msgstr "പാക്കേജ്കിറ്റിനുള്ള ഡിവൈസ് റീലോഡര്‍"
 
 #. TRANSLATORS: user did not specify a valid device sysfs path
 #: ../contrib/device-rebind/pk-device-rebind.c:322
 msgid "You need to specify at least one valid device path"
-msgstr ""
+msgstr "ശരിയായ ഒരു ഡിവൈസ് പാഥെങ്കിലും നല്‍കേണ്ടതുണ്ടു്"
 
 #. TRANSLATORS: user did not specify a valid device sysfs path
 #: ../contrib/device-rebind/pk-device-rebind.c:332
 msgid "This script can only be used by the root user"
-msgstr ""
+msgstr "ഈ സ്ക്രിപ്റ്റ് റൂട്ടായി മാത്രമേ ഉപയോഗിക്കുവാന്‍ സാധിക്കൂ"
 
 #. TRANSLATORS: we're going to verify the path first
 #: ../contrib/device-rebind/pk-device-rebind.c:341
 msgid "Verifying device path"
-msgstr ""
+msgstr "ഡിവൈസ് പാഥ് ഉറപ്പാക്കുന്നു"
 
 #. TRANSLATORS: user did not specify a device sysfs path that exists
 #: ../contrib/device-rebind/pk-device-rebind.c:346
-#, fuzzy
 msgid "Failed to verify device path"
-msgstr "ഫയല്‍ കണ്ടുപിടിക്കുന്നതില്‍ പരാജയപ്പെട്ടു"
+msgstr "ഡിവൈസ് പാഥ് ഉറപ്പാക്കുന്നതില്‍ പരാജയപ്പെട്ടു"
 
 #. TRANSLATORS: we're going to try
 #: ../contrib/device-rebind/pk-device-rebind.c:360
 msgid "Attempting to rebind device"
-msgstr ""
+msgstr "ഡിവൈസ് റീബൈന്‍ഡ് ചെയ്യുന്നതിനു് ശ്രമിക്കുന്നു"
 
 #. TRANSLATORS: we failed to release the current driver
 #: ../contrib/device-rebind/pk-device-rebind.c:365
-#, fuzzy
 msgid "Failed to rebind device"
-msgstr "ഡയറക്ടറി ഉണ്ടാക്കുന്നതില്‍ പരാജയം:"
+msgstr "ഡിവൈസ് റീബൈന്‍ഡ് ചെയ്യുന്നതില്‍ പരാജയം"
 
 #: ../data/packagekit-catalog.xml.in.h:1
 msgid "PackageKit Catalog"
@@ -1287,8 +1312,7 @@ msgid "Authentication is required to accept a EULA"
 msgstr "ഒരു EULA സ്വീകരിക്കുന്നതിനായി ആവശ്യമുള്ള ആധികാരികത"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:9
-msgid ""
-"Authentication is required to cancel a task that was not started by yourself"
+msgid "Authentication is required to cancel a task that was not started by yourself"
 msgstr "നിങ്ങളായി ആരംഭിച്ചിട്ടില്ലാത്ത ഒരു ജോലി റദ്ദാക്കുന്നതിനായി ആധികാരികത ആവശ്യമുണ്ടു്"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:10
@@ -1316,9 +1340,8 @@ msgid "Authentication is required to refresh the system sources"
 msgstr "പാക്കേജുകള്‍ നീക്കം ചെയ്യുവാന്‍ ആധികാരികത ആവശ്യമുണ്ടു്"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:15
-#, fuzzy
 msgid "Authentication is required to reload the device with a new driver"
-msgstr "പാക്കേജുകള്‍ നീക്കം ചെയ്യുവാന്‍ ആധികാരികത ആവശ്യമുണ്ടു്"
+msgstr "ഒരു പുതിയ ഡ്രൈവറുപയോഗിച്ചു് ഡിവൈസ് വീണ്ടും ലഭ്യമാക്കുന്നതിനു് ആധികാരികത ആവശ്യമുണ്ടു്"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:16
 msgid "Authentication is required to remove packages"
@@ -1395,7 +1418,7 @@ msgstr "സിസ്റ്റം സോഴ്സുകള്‍ പുതുകà
 #.
 #: ../policy/org.freedesktop.packagekit.policy.in.h:58
 msgid "Reload a device"
-msgstr ""
+msgstr "ഒരു ഡിവൈസ് വീണ്ടും ലഭ്യമാക്കുക"
 
 #. SECURITY:
 #. - Normal users require admin authentication to remove packages as
@@ -1468,8 +1491,7 @@ msgstr "ശരിയായ ഉപയോക്താവല്ല എക്സിà
 msgid ""
 "The org.freedesktop.PackageKit.conf file is not installed in the system "
 "directory:"
-msgstr ""
-"സിസ്റ്റം ഡയറക്ടറിയില്‍ org.freedesktop.PackageKit.conf ഫയല്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്തിട്ടില്ല:"
+msgstr "സിസ്റ്റം ഡയറക്ടറിയില്‍ org.freedesktop.PackageKit.conf ഫയല്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്തിട്ടില്ല:"
 
 #. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
 #: ../src/pk-main.c:205
@@ -1530,7 +1552,6 @@ msgid "Do not update this package unless you are sure it is safe to do so."
 msgstr "ഈ പാക്കേജ് സുരക്ഷിതമാണു് എന്നുറപ്പു് വരുത്താതെ ഇതു് പരിഷ്കരിക്കരുത്."
 
 #: ../src/pk-polkit-action-lookup.c:174
-#, fuzzy
 msgid "Do not update these packages unless you are sure it is safe to do so."
 msgstr "ഈ പാക്കേജ് സുരക്ഷിതമാണു് എന്നുറപ്പു് വരുത്താതെ ഇതു് പരിഷ്കരിക്കരുത്."
 
@@ -1539,7 +1560,6 @@ msgid "Do not install this package unless you are sure it is safe to do so."
 msgstr "ഈ പാക്കേജ് സുരക്ഷിതമാണു് എന്നുറപ്പു് വരുത്താതെ ഇതു് ഇന്‍സ്റ്റോള്‍ ചെയ്യരുതു്."
 
 #: ../src/pk-polkit-action-lookup.c:193
-#, fuzzy
 msgid "Do not install these packages unless you are sure it is safe to do so."
 msgstr "ഈ പാക്കേജ് സുരക്ഷിതമാണു് എന്നുറപ്പു് വരുത്താതെ ഇതു് ഇന്‍സ്റ്റോള്‍ ചെയ്യരുതു്."
 
@@ -1550,11 +1570,16 @@ msgstr "അപകടകരമായ സോഫ്റ്റ്‌വെയര്â€
 
 #. TRANSLATORS: too many packages to list each one
 #: ../src/pk-polkit-action-lookup.c:274
-#, fuzzy
 msgid "Many packages"
-msgstr "പാക്കേജുകള്‍ പരിഷ്കരിക്കുക"
+msgstr "അനവധി പാക്കേജുകള്‍"
 
 #. TRANSLATORS: if the transaction is forced to install only trusted packages
 #: ../src/pk-polkit-action-lookup.c:334
 msgid "Only trusted"
 msgstr "ട്രസ്റ്റഡ് മാത്രം"
+
+#: ../client/pk-text.c:50
+#, c-format
+msgid "Please enter a number from 1 to %i: "
+msgstr "ദയവായി 1 മുതല്‍ %i വരെയുള്ള ഒരു അക്കം നല്‍കുക: "
+
commit dca807e07e77336b6a23be8fce5969c493f01d83
Author: Adrien Bustany <madcat at mymadcat.com>
Date:   Wed Sep 2 12:39:03 2009 -0400

    PackageKit-Qt : migrate to the new properties based API

diff --git a/lib/packagekit-qt/src/daemonproxy.h b/lib/packagekit-qt/src/daemonproxy.h
index 45287c6..4d7ebdc 100644
--- a/lib/packagekit-qt/src/daemonproxy.h
+++ b/lib/packagekit-qt/src/daemonproxy.h
@@ -1,15 +1,15 @@
 /*
- * This file was generated by dbusxml2cpp version 0.6
- * Command line was: dbusxml2cpp -c DaemonProxy -p daemonproxy.h /home/madcat/code/PackageKit/src/org.freedesktop.PackageKit.xml org.freedesktop.PackageKit
+ * This file was generated by qdbusxml2cpp version 0.7
+ * Command line was: qdbusxml2cpp -c DaemonProxy -p daemonproxy.h /home/madcat/code/PackageKit/src/org.freedesktop.PackageKit.xml org.freedesktop.PackageKit
  *
- * dbusxml2cpp is Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+ * qdbusxml2cpp is Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
  *
  * This is an auto-generated file.
  * Do not edit! All changes made to it will be lost.
  */
 
-#ifndef DAEMONPROXY_H_1228501948
-#define DAEMONPROXY_H_1228501948
+#ifndef DAEMONPROXY_H_1251899971
+#define DAEMONPROXY_H_1251899971
 
 #include <QtCore/QObject>
 #include <QtCore/QByteArray>
@@ -20,11 +20,11 @@
 #include <QtCore/QVariant>
 #include <QtDBus/QtDBus>
 
+namespace PackageKit {
+
 /*
  * Proxy class for interface org.freedesktop.PackageKit
  */
-namespace PackageKit {
-
 class DaemonProxy: public QDBusAbstractInterface
 {
     Q_OBJECT
@@ -37,13 +37,37 @@ public:
 
     ~DaemonProxy();
 
+    Q_PROPERTY(uint VersionMajor READ versionMajor)
+    inline uint versionMajor() const
+    { return qvariant_cast< uint >(internalPropGet("VersionMajor")); }
+
+    Q_PROPERTY(uint VersionMicro READ versionMicro)
+    inline uint versionMicro() const
+    { return qvariant_cast< uint >(internalPropGet("VersionMicro")); }
+
+    Q_PROPERTY(uint VersionMinor READ versionMinor)
+    inline uint versionMinor() const
+    { return qvariant_cast< uint >(internalPropGet("VersionMinor")); }
+
 public Q_SLOTS: // METHODS
-    inline QDBusReply<QString> GetActions()
+    inline QDBusPendingReply<QString> CanAuthorize(const QString &action_id)
+    {
+        QList<QVariant> argumentList;
+        argumentList << qVariantFromValue(action_id);
+        return asyncCallWithArgumentList(QLatin1String("CanAuthorize"), argumentList);
+    }
+
+    inline QDBusPendingReply<QString> GetActions()
     {
         QList<QVariant> argumentList;
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetActions"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetActions"), argumentList);
     }
 
+    inline QDBusPendingReply<QString, QString> GetBackendDetail()
+    {
+        QList<QVariant> argumentList;
+        return asyncCallWithArgumentList(QLatin1String("GetBackendDetail"), argumentList);
+    }
     inline QDBusReply<QString> GetBackendDetail(QString &author)
     {
         QList<QVariant> argumentList;
@@ -54,67 +78,73 @@ public Q_SLOTS: // METHODS
         return reply;
     }
 
-    inline QDBusReply<QString> GetFilters()
+    inline QDBusPendingReply<QString> GetDaemonState()
+    {
+        QList<QVariant> argumentList;
+        return asyncCallWithArgumentList(QLatin1String("GetDaemonState"), argumentList);
+    }
+
+    inline QDBusPendingReply<QString> GetFilters()
     {
         QList<QVariant> argumentList;
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetFilters"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetFilters"), argumentList);
     }
 
-    inline QDBusReply<QString> GetGroups()
+    inline QDBusPendingReply<QString> GetGroups()
     {
         QList<QVariant> argumentList;
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetGroups"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetGroups"), argumentList);
     }
 
-    inline QDBusReply<QString> GetMimeTypes()
+    inline QDBusPendingReply<QString> GetMimeTypes()
     {
         QList<QVariant> argumentList;
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetMimeTypes"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetMimeTypes"), argumentList);
     }
 
-    inline QDBusReply<QString> GetNetworkState()
+    inline QDBusPendingReply<QString> GetNetworkState()
     {
         QList<QVariant> argumentList;
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetNetworkState"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetNetworkState"), argumentList);
     }
 
-    inline QDBusReply<QString> GetTid()
+    inline QDBusPendingReply<QString> GetTid()
     {
         QList<QVariant> argumentList;
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetTid"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetTid"), argumentList);
     }
 
-    inline QDBusReply<uint> GetTimeSinceAction(const QString &role)
+    inline QDBusPendingReply<uint> GetTimeSinceAction(const QString &role)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(role);
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetTimeSinceAction"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetTimeSinceAction"), argumentList);
     }
 
-    inline QDBusReply<QStringList> GetTransactionList()
+    inline QDBusPendingReply<QStringList> GetTransactionList()
     {
         QList<QVariant> argumentList;
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetTransactionList"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetTransactionList"), argumentList);
     }
 
-    inline QDBusReply<void> SetProxy(const QString &proxy_http, const QString &proxy_ftp)
+    inline QDBusPendingReply<> SetProxy(const QString &proxy_http, const QString &proxy_ftp)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(proxy_http) << qVariantFromValue(proxy_ftp);
-        return callWithArgumentList(QDBus::Block, QLatin1String("SetProxy"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("SetProxy"), argumentList);
     }
 
-    inline QDBusReply<void> StateHasChanged(const QString &reason)
+    inline QDBusPendingReply<> StateHasChanged(const QString &reason)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(reason);
-        return callWithArgumentList(QDBus::Block, QLatin1String("StateHasChanged"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("StateHasChanged"), argumentList);
     }
 
-    inline QDBusReply<void> SuggestDaemonQuit()
+    inline QDBusPendingReply<> SuggestDaemonQuit()
     {
         QList<QVariant> argumentList;
-        return callWithArgumentList(QDBus::Block, QLatin1String("SuggestDaemonQuit"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("SuggestDaemonQuit"), argumentList);
     }
 
 Q_SIGNALS: // SIGNALS
@@ -126,8 +156,6 @@ Q_SIGNALS: // SIGNALS
     void UpdatesChanged();
 };
 
-} // End namespace PackageKit
-
-
+} // namespace PackageKit
 #endif
 
diff --git a/lib/packagekit-qt/src/transaction.cpp b/lib/packagekit-qt/src/transaction.cpp
index df7e498..adbcb2a 100644
--- a/lib/packagekit-qt/src/transaction.cpp
+++ b/lib/packagekit-qt/src/transaction.cpp
@@ -71,9 +71,7 @@ Transaction::Transaction(const QString& tid, const QString& timespec, bool succe
 	d->tid = tid;
 	d->timespec = QDateTime::fromString(timespec, Qt::ISODate);
 	d->succeeded = succeeded;
-	RoleInfo r;
-	r.action = (Client::Action)Util::enumFromString<Client>(role, "Action", "Action");
-	d->role = r;
+	d->role = (Client::Action)Util::enumFromString<Client>(role, "Action", "Action");
 	d->duration = duration;
 	d->data = data;
 	d->uid = uid;
@@ -99,12 +97,12 @@ Client::DaemonError Transaction::error () const
 
 bool Transaction::allowCancel()
 {
-	return d->p->GetAllowCancel().value();
+	return d->p->allowCancel ();
 }
 
 bool Transaction::callerActive()
 {
-	return d->p->IsCallerActive().value();
+	return d->p->callerActive ();
 }
 
 void Transaction::cancel()
@@ -117,7 +115,7 @@ void Transaction::cancel()
 
 Package* Transaction::lastPackage()
 {
-	return new Package(d->p->GetPackageLast().value());
+	return new Package(d->p->lastPackage ());
 }
 
 Transaction::ProgressInfo Transaction::progress()
@@ -125,26 +123,20 @@ Transaction::ProgressInfo Transaction::progress()
 	uint p, subp, elaps, rem;
 	p = d->p->GetProgress(subp, elaps, rem);
 	ProgressInfo i;
-	i.percentage = p;
-	i.subpercentage = subp;
+	i.percentage = d->p->percentage ();
+	i.subpercentage = d->p->subpercentage ();
 	i.elapsed = elaps;
 	i.remaining = rem;
 
 	return i;
 }
 
-Transaction::RoleInfo Transaction::role()
+Client::Action Transaction::role()
 {
 	if(d->oldtrans)
 		return d->role;
 
-	QString terms;
-	RoleInfo i;
-
-	i.action = (Client::Action) Util::enumFromString<Client>(d->p->GetRole(terms).value(), "Action", "Action");
-	i.terms = terms.split(";");
-
-	return i;
+	return (Client::Action) Util::enumFromString<Client>(d->p->role (), "Action", "Action");
 }
 
 void Transaction::setLocale(const QString& locale)
@@ -154,7 +146,7 @@ void Transaction::setLocale(const QString& locale)
 
 Transaction::Status Transaction::status()
 {
-	return (Transaction::Status) Util::enumFromString<Transaction>(d->p->GetStatus().value(), "Status", "Status");
+	return (Transaction::Status) Util::enumFromString<Transaction>(d->p->status (), "Status", "Status");
 }
 
 QDateTime Transaction::timespec()
@@ -179,7 +171,7 @@ QString Transaction::data()
 
 uint Transaction::uid()
 {
-	return d->uid;
+	return d->p->uid ();
 }
 
 QString Transaction::cmdline()
diff --git a/lib/packagekit-qt/src/transaction.h b/lib/packagekit-qt/src/transaction.h
index 81fa781..3b16e2a 100644
--- a/lib/packagekit-qt/src/transaction.h
+++ b/lib/packagekit-qt/src/transaction.h
@@ -126,19 +126,10 @@ public:
 	ProgressInfo progress();
 
 	/**
-	 * The RoleInfo is a describing the current state of a transaction
-	 * \li \c action describes the operation carried on by the transaction
-	 * \li \c terms are the terms (for example search terms) used when creating the transaction
-	 */
-	typedef struct {
-		Client::Action action;
-		QStringList terms;
-	} RoleInfo;
-	/**
 	 * Returns information describing the transaction
-	 * \return a RoleInfo struct describing the current transaction
+	 * \return the current action of the transaction
 	 */
-	RoleInfo role();
+	Client::Action role();
 
 	/**
 	 * \brief Tells the underlying package manager to use the given \p locale
diff --git a/lib/packagekit-qt/src/transactionprivate.h b/lib/packagekit-qt/src/transactionprivate.h
index 4cec47f..d72bbbf 100644
--- a/lib/packagekit-qt/src/transactionprivate.h
+++ b/lib/packagekit-qt/src/transactionprivate.h
@@ -44,7 +44,7 @@ public:
 	// Only used for old transactions
 	bool oldtrans;
 	QDateTime timespec;
-	Transaction::RoleInfo role;
+	Client::Action role;
 	bool succeeded;
 	uint duration;
 	QString data;
diff --git a/lib/packagekit-qt/src/transactionproxy.cpp b/lib/packagekit-qt/src/transactionproxy.cpp
index 0010f3d..734ac59 100644
--- a/lib/packagekit-qt/src/transactionproxy.cpp
+++ b/lib/packagekit-qt/src/transactionproxy.cpp
@@ -15,4 +15,5 @@ TransactionProxy::~TransactionProxy()
 {
 }
 
+
 #include "transactionproxy.moc"
diff --git a/lib/packagekit-qt/src/transactionproxy.h b/lib/packagekit-qt/src/transactionproxy.h
index 015091a..a5deb90 100644
--- a/lib/packagekit-qt/src/transactionproxy.h
+++ b/lib/packagekit-qt/src/transactionproxy.h
@@ -1,15 +1,15 @@
 /*
- * This file was generated by dbusxml2cpp version 0.6
- * Command line was: dbusxml2cpp -c TransactionProxy -p transactionproxy.h /home/madcat/code/PackageKit/src/org.freedesktop.PackageKit.Transaction.xml org.freedesktop.PackageKit.Transaction
+ * This file was generated by qdbusxml2cpp version 0.7
+ * Command line was: qdbusxml2cpp -c TransactionProxy -p transactionproxy.h /home/madcat/code/PackageKit/src/org.freedesktop.PackageKit.Transaction.xml org.freedesktop.PackageKit.Transaction
  *
- * dbusxml2cpp is Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+ * qdbusxml2cpp is Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
  *
  * This is an auto-generated file.
  * Do not edit! All changes made to it will be lost.
  */
 
-#ifndef TRANSACTIONPROXY_H_1228504363
-#define TRANSACTIONPROXY_H_1228504363
+#ifndef TRANSACTIONPROXY_H_1251898448
+#define TRANSACTIONPROXY_H_1251898448
 
 #include <QtCore/QObject>
 #include <QtCore/QByteArray>
@@ -37,86 +37,123 @@ public:
 
     ~TransactionProxy();
 
+    Q_PROPERTY(bool AllowCancel READ allowCancel)
+    inline bool allowCancel() const
+    { return qvariant_cast< bool >(internalPropGet("AllowCancel")); }
+
+    Q_PROPERTY(bool CallerActive READ callerActive)
+    inline bool callerActive() const
+    { return qvariant_cast< bool >(internalPropGet("CallerActive")); }
+
+    Q_PROPERTY(QString LastPackage READ lastPackage)
+    inline QString lastPackage() const
+    { return qvariant_cast< QString >(internalPropGet("LastPackage")); }
+
+    Q_PROPERTY(uint Percentage READ percentage)
+    inline uint percentage() const
+    { return qvariant_cast< uint >(internalPropGet("Percentage")); }
+
+    Q_PROPERTY(QString Role READ role)
+    inline QString role() const
+    { return qvariant_cast< QString >(internalPropGet("Role")); }
+
+    Q_PROPERTY(QString Status READ status)
+    inline QString status() const
+    { return qvariant_cast< QString >(internalPropGet("Status")); }
+
+    Q_PROPERTY(uint Subpercentage READ subpercentage)
+    inline uint subpercentage() const
+    { return qvariant_cast< uint >(internalPropGet("Subpercentage")); }
+
+    Q_PROPERTY(uint Uid READ uid)
+    inline uint uid() const
+    { return qvariant_cast< uint >(internalPropGet("Uid")); }
+
 public Q_SLOTS: // METHODS
-    inline QDBusReply<void> AcceptEula(const QString &eula_id)
+    inline QDBusPendingReply<> AcceptEula(const QString &eula_id)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(eula_id);
-        return callWithArgumentList(QDBus::Block, QLatin1String("AcceptEula"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("AcceptEula"), argumentList);
     }
 
-    inline QDBusReply<void> Cancel()
+    inline QDBusPendingReply<> Cancel()
     {
         QList<QVariant> argumentList;
-        return callWithArgumentList(QDBus::Block, QLatin1String("Cancel"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("Cancel"), argumentList);
     }
 
-    inline QDBusReply<void> DownloadPackages(const QStringList &package_ids)
+    inline QDBusPendingReply<> DownloadPackages(const QStringList &package_ids)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(package_ids);
-        return callWithArgumentList(QDBus::Block, QLatin1String("DownloadPackages"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("DownloadPackages"), argumentList);
     }
 
-    inline QDBusReply<bool> GetAllowCancel()
+    inline QDBusPendingReply<bool> GetAllowCancel()
     {
         QList<QVariant> argumentList;
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetAllowCancel"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetAllowCancel"), argumentList);
     }
 
-    inline QDBusReply<void> GetCategories()
+    inline QDBusPendingReply<> GetCategories()
     {
         QList<QVariant> argumentList;
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetCategories"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetCategories"), argumentList);
     }
 
-    inline QDBusReply<void> GetDepends(const QString &filter, const QStringList &package_ids, bool recursive)
+    inline QDBusPendingReply<> GetDepends(const QString &filter, const QStringList &package_ids, bool recursive)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(filter) << qVariantFromValue(package_ids) << qVariantFromValue(recursive);
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetDepends"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetDepends"), argumentList);
     }
 
-    inline QDBusReply<void> GetDetails(const QStringList &package_ids)
+    inline QDBusPendingReply<> GetDetails(const QStringList &package_ids)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(package_ids);
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetDetails"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetDetails"), argumentList);
     }
 
-    inline QDBusReply<void> GetDistroUpgrades()
+    inline QDBusPendingReply<> GetDistroUpgrades()
     {
         QList<QVariant> argumentList;
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetDistroUpgrades"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetDistroUpgrades"), argumentList);
     }
 
-    inline QDBusReply<void> GetFiles(const QStringList &package_ids)
+    inline QDBusPendingReply<> GetFiles(const QStringList &package_ids)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(package_ids);
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetFiles"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetFiles"), argumentList);
     }
 
-    inline QDBusReply<void> GetOldTransactions(uint number)
+    inline QDBusPendingReply<> GetOldTransactions(uint number)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(number);
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetOldTransactions"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetOldTransactions"), argumentList);
     }
 
-    inline QDBusReply<QString> GetPackageLast()
+    inline QDBusPendingReply<QString> GetPackageLast()
     {
         QList<QVariant> argumentList;
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetPackageLast"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetPackageLast"), argumentList);
     }
 
-    inline QDBusReply<void> GetPackages(const QString &filter)
+    inline QDBusPendingReply<> GetPackages(const QString &filter)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(filter);
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetPackages"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetPackages"), argumentList);
     }
 
+    inline QDBusPendingReply<uint, uint, uint, uint> GetProgress()
+    {
+        QList<QVariant> argumentList;
+        return asyncCallWithArgumentList(QLatin1String("GetProgress"), argumentList);
+    }
     inline QDBusReply<uint> GetProgress(uint &subpercentage, uint &elapsed, uint &remaining)
     {
         QList<QVariant> argumentList;
@@ -129,20 +166,25 @@ public Q_SLOTS: // METHODS
         return reply;
     }
 
-    inline QDBusReply<void> GetRepoList(const QString &filter)
+    inline QDBusPendingReply<> GetRepoList(const QString &filter)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(filter);
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetRepoList"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetRepoList"), argumentList);
     }
 
-    inline QDBusReply<void> GetRequires(const QString &filter, const QStringList &package_ids, bool recursive)
+    inline QDBusPendingReply<> GetRequires(const QString &filter, const QStringList &package_ids, bool recursive)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(filter) << qVariantFromValue(package_ids) << qVariantFromValue(recursive);
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetRequires"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetRequires"), argumentList);
     }
 
+    inline QDBusPendingReply<QString, QString> GetRole()
+    {
+        QList<QVariant> argumentList;
+        return asyncCallWithArgumentList(QLatin1String("GetRole"), argumentList);
+    }
     inline QDBusReply<QString> GetRole(QString &text)
     {
         QList<QVariant> argumentList;
@@ -153,177 +195,177 @@ public Q_SLOTS: // METHODS
         return reply;
     }
 
-    inline QDBusReply<QString> GetStatus()
+    inline QDBusPendingReply<QString> GetStatus()
     {
         QList<QVariant> argumentList;
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetStatus"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetStatus"), argumentList);
     }
 
-    inline QDBusReply<void> GetUpdateDetail(const QStringList &package_ids)
+    inline QDBusPendingReply<> GetUpdateDetail(const QStringList &package_ids)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(package_ids);
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetUpdateDetail"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetUpdateDetail"), argumentList);
     }
 
-    inline QDBusReply<void> GetUpdates(const QString &filter)
+    inline QDBusPendingReply<> GetUpdates(const QString &filter)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(filter);
-        return callWithArgumentList(QDBus::Block, QLatin1String("GetUpdates"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("GetUpdates"), argumentList);
     }
 
-    inline QDBusReply<void> InstallFiles(bool only_trusted, const QStringList &full_paths)
+    inline QDBusPendingReply<> InstallFiles(bool only_trusted, const QStringList &full_paths)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(only_trusted) << qVariantFromValue(full_paths);
-        return callWithArgumentList(QDBus::Block, QLatin1String("InstallFiles"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("InstallFiles"), argumentList);
     }
 
-    inline QDBusReply<void> InstallPackages(bool only_trusted, const QStringList &package_ids)
+    inline QDBusPendingReply<> InstallPackages(bool only_trusted, const QStringList &package_ids)
     {
         QList<QVariant> argumentList;
-        argumentList << qVariantFromValue (only_trusted) << qVariantFromValue(package_ids);
-        return callWithArgumentList(QDBus::Block, QLatin1String("InstallPackages"), argumentList);
+        argumentList << qVariantFromValue(only_trusted) << qVariantFromValue(package_ids);
+        return asyncCallWithArgumentList(QLatin1String("InstallPackages"), argumentList);
     }
 
-    inline QDBusReply<void> InstallSignature(const QString &sig_type, const QString &key_id, const QString &package_id)
+    inline QDBusPendingReply<> InstallSignature(const QString &sig_type, const QString &key_id, const QString &package_id)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(sig_type) << qVariantFromValue(key_id) << qVariantFromValue(package_id);
-        return callWithArgumentList(QDBus::Block, QLatin1String("InstallSignature"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("InstallSignature"), argumentList);
     }
 
-    inline QDBusReply<bool> IsCallerActive()
+    inline QDBusPendingReply<bool> IsCallerActive()
     {
         QList<QVariant> argumentList;
-        return callWithArgumentList(QDBus::Block, QLatin1String("IsCallerActive"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("IsCallerActive"), argumentList);
     }
 
-    inline QDBusReply<void> RefreshCache(bool force)
+    inline QDBusPendingReply<> RefreshCache(bool force)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(force);
-        return callWithArgumentList(QDBus::Block, QLatin1String("RefreshCache"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("RefreshCache"), argumentList);
     }
 
-    inline QDBusReply<void> RemovePackages(const QStringList &package_ids, bool allow_deps, bool autoremove)
+    inline QDBusPendingReply<> RemovePackages(const QStringList &package_ids, bool allow_deps, bool autoremove)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(package_ids) << qVariantFromValue(allow_deps) << qVariantFromValue(autoremove);
-        return callWithArgumentList(QDBus::Block, QLatin1String("RemovePackages"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("RemovePackages"), argumentList);
     }
 
-    inline QDBusReply<void> RepoEnable(const QString &repo_id, bool enabled)
+    inline QDBusPendingReply<> RepoEnable(const QString &repo_id, bool enabled)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(repo_id) << qVariantFromValue(enabled);
-        return callWithArgumentList(QDBus::Block, QLatin1String("RepoEnable"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("RepoEnable"), argumentList);
     }
 
-    inline QDBusReply<void> RepoSetData(const QString &repo_id, const QString &parameter, const QString &value)
+    inline QDBusPendingReply<> RepoSetData(const QString &repo_id, const QString &parameter, const QString &value)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(repo_id) << qVariantFromValue(parameter) << qVariantFromValue(value);
-        return callWithArgumentList(QDBus::Block, QLatin1String("RepoSetData"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("RepoSetData"), argumentList);
     }
 
-    inline QDBusReply<void> Resolve(const QString &filter, const QStringList &package)
+    inline QDBusPendingReply<> Resolve(const QString &filter, const QStringList &package)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(filter) << qVariantFromValue(package);
-        return callWithArgumentList(QDBus::Block, QLatin1String("Resolve"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("Resolve"), argumentList);
     }
 
-    inline QDBusReply<void> Rollback(const QString &transaction_id)
+    inline QDBusPendingReply<> Rollback(const QString &transaction_id)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(transaction_id);
-        return callWithArgumentList(QDBus::Block, QLatin1String("Rollback"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("Rollback"), argumentList);
     }
 
-    inline QDBusReply<void> SearchDetails(const QString &filter, const QString &search)
+    inline QDBusPendingReply<> SearchDetails(const QString &filter, const QString &search)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(filter) << qVariantFromValue(search);
-        return callWithArgumentList(QDBus::Block, QLatin1String("SearchDetails"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("SearchDetails"), argumentList);
     }
 
-    inline QDBusReply<void> SearchFile(const QString &filter, const QString &search)
+    inline QDBusPendingReply<> SearchFile(const QString &filter, const QString &search)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(filter) << qVariantFromValue(search);
-        return callWithArgumentList(QDBus::Block, QLatin1String("SearchFile"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("SearchFile"), argumentList);
     }
 
-    inline QDBusReply<void> SearchGroup(const QString &filter, const QString &search)
+    inline QDBusPendingReply<> SearchGroup(const QString &filter, const QString &search)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(filter) << qVariantFromValue(search);
-        return callWithArgumentList(QDBus::Block, QLatin1String("SearchGroup"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("SearchGroup"), argumentList);
     }
 
-    inline QDBusReply<void> SearchName(const QString &filter, const QString &search)
+    inline QDBusPendingReply<> SearchName(const QString &filter, const QString &search)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(filter) << qVariantFromValue(search);
-        return callWithArgumentList(QDBus::Block, QLatin1String("SearchName"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("SearchName"), argumentList);
     }
 
-    inline QDBusReply<void> SetLocale(const QString &code)
+    inline QDBusPendingReply<> SetLocale(const QString &code)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(code);
-        return callWithArgumentList(QDBus::Block, QLatin1String("SetLocale"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("SetLocale"), argumentList);
     }
 
-    inline QDBusReply<void> SimulateInstallFiles(const QStringList &full_paths)
+    inline QDBusPendingReply<> SimulateInstallFiles(const QStringList &full_paths)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(full_paths);
-        return callWithArgumentList(QDBus::Block, QLatin1String("SimulateInstallFiles"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("SimulateInstallFiles"), argumentList);
     }
 
-    inline QDBusReply<void> SimulateInstallPackages(const QStringList &package_ids)
+    inline QDBusPendingReply<> SimulateInstallPackages(const QStringList &package_ids)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(package_ids);
-        return callWithArgumentList(QDBus::Block, QLatin1String("SimulateInstallPackages"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("SimulateInstallPackages"), argumentList);
     }
 
-    inline QDBusReply<void> SimulateRemovePackages(const QStringList &package_ids)
+    inline QDBusPendingReply<> SimulateRemovePackages(const QStringList &package_ids)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(package_ids);
-        return callWithArgumentList(QDBus::Block, QLatin1String("SimulateRemovePackages"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("SimulateRemovePackages"), argumentList);
     }
 
-    inline QDBusReply<void> SimulateUpdatePackages(const QStringList &package_ids)
+    inline QDBusPendingReply<> SimulateUpdatePackages(const QStringList &package_ids)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(package_ids);
-        return callWithArgumentList(QDBus::Block, QLatin1String("SimulateUpdatePackages"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("SimulateUpdatePackages"), argumentList);
     }
 
-    inline QDBusReply<void> UpdatePackages(bool only_trusted, const QStringList &package_ids)
+    inline QDBusPendingReply<> UpdatePackages(bool only_trusted, const QStringList &package_ids)
     {
         QList<QVariant> argumentList;
-        argumentList << qVariantFromValue (only_trusted) << qVariantFromValue(package_ids);
-        return callWithArgumentList(QDBus::Block, QLatin1String("UpdatePackages"), argumentList);
+        argumentList << qVariantFromValue(only_trusted) << qVariantFromValue(package_ids);
+        return asyncCallWithArgumentList(QLatin1String("UpdatePackages"), argumentList);
     }
 
-    inline QDBusReply<void> UpdateSystem(bool only_trusted)
+    inline QDBusPendingReply<> UpdateSystem(bool only_trusted)
     {
         QList<QVariant> argumentList;
-        argumentList << qVariantFromValue (only_trusted);
-        return callWithArgumentList(QDBus::Block, QLatin1String("UpdateSystem"), argumentList);
+        argumentList << qVariantFromValue(only_trusted);
+        return asyncCallWithArgumentList(QLatin1String("UpdateSystem"), argumentList);
     }
 
-    inline QDBusReply<void> WhatProvides(const QString &filter, const QString &type, const QString &search)
+    inline QDBusPendingReply<> WhatProvides(const QString &filter, const QString &type, const QString &search)
     {
         QList<QVariant> argumentList;
         argumentList << qVariantFromValue(filter) << qVariantFromValue(type) << qVariantFromValue(search);
-        return callWithArgumentList(QDBus::Block, QLatin1String("WhatProvides"), argumentList);
+        return asyncCallWithArgumentList(QLatin1String("WhatProvides"), argumentList);
     }
 
 Q_SIGNALS: // SIGNALS
@@ -335,21 +377,20 @@ Q_SIGNALS: // SIGNALS
     void DistroUpgrade(const QString &type, const QString &name, const QString &summary);
     void ErrorCode(const QString &code, const QString &details);
     void EulaRequired(const QString &eula_id, const QString &package_id, const QString &vendor_name, const QString &license_agreement);
-    void MediaChangeRequired(const QString &media_type, const QString &media_id, const QString &media_text);
     void Files(const QString &package_id, const QString &file_list);
     void Finished(const QString &exit, uint runtime);
+    void MediaChangeRequired(const QString &media_type, const QString &media_id, const QString &media_text);
     void Message(const QString &type, const QString &details);
     void Package(const QString &info, const QString &package_id, const QString &summary);
     void ProgressChanged(uint percentage, uint subpercentage, uint elapsed, uint remaining);
     void RepoDetail(const QString &repo_id, const QString &description, bool enabled);
     void RepoSignatureRequired(const QString &package_id, const QString &repository_name, const QString &key_url, const QString &key_userid, const QString &key_id, const QString &key_fingerprint, const QString &key_timestamp, const QString &type);
-    void RequireRestart(const QString &type, const QString &details);
+    void RequireRestart(const QString &type, const QString &package_id);
     void StatusChanged(const QString &status);
     void Transaction(const QString &old_tid, const QString &timespec, bool succeeded, const QString &role, uint duration, const QString &data, uint uid, const QString &cmdline);
     void UpdateDetail(const QString &package_id, const QString &updates, const QString &obsoletes, const QString &vendor_url, const QString &bugzilla_url, const QString &cve_url, const QString &restart, const QString &update_text, const QString &changelog, const QString &state, const QString &issued, const QString &updated);
 };
 
-} // End namespace PackageKit
-
+} // namespace PackageKit
 #endif
 
commit e6dac257d91d1fa67082af3865aa05259723ea5a
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 2 21:35:07 2009 +0100

    glib2: Add the start of a PkTask object to handle the client dance

diff --git a/lib/packagekit-glib2/Makefile.am b/lib/packagekit-glib2/Makefile.am
index 9c837a1..4b1abb2 100644
--- a/lib/packagekit-glib2/Makefile.am
+++ b/lib/packagekit-glib2/Makefile.am
@@ -40,6 +40,7 @@ libpackagekit_glib2_include_HEADERS =				\
 	pk-package-sack.h					\
 	pk-progress.h						\
 	pk-results.h						\
+	pk-task.h						\
 	$(NULL)
 
 libpackagekit_glib2_la_SOURCES =				\
@@ -70,6 +71,8 @@ libpackagekit_glib2_la_SOURCES =				\
 	pk-progress.h						\
 	pk-results.c						\
 	pk-results.h						\
+	pk-task.c						\
+	pk-task.h						\
 	pk-version.h						\
 	$(NULL)
 
diff --git a/lib/packagekit-glib2/packagekit.h b/lib/packagekit-glib2/packagekit.h
index 623ecc8..ef83613 100644
--- a/lib/packagekit-glib2/packagekit.h
+++ b/lib/packagekit-glib2/packagekit.h
@@ -31,6 +31,7 @@
 #include <packagekit-glib2/pk-enum.h>
 #include <packagekit-glib2/pk-package-sack.h>
 #include <packagekit-glib2/pk-results.h>
+#include <packagekit-glib2/pk-task.h>
 #include <packagekit-glib2/pk-version.h>
 
 #undef __PACKAGEKIT_H_INSIDE__
diff --git a/lib/packagekit-glib2/pk-self-test.c b/lib/packagekit-glib2/pk-self-test.c
index a13abe8..18cd64a 100644
--- a/lib/packagekit-glib2/pk-self-test.c
+++ b/lib/packagekit-glib2/pk-self-test.c
@@ -33,6 +33,7 @@
 #include "pk-enum.h"
 #include "pk-package-sack.h"
 #include "pk-results.h"
+#include "pk-task.h"
 #include "pk-version.h"
 
 int
@@ -56,6 +57,7 @@ main (int argc, char **argv)
 	pk_control_sync_test (test);
 	pk_client_test (test);
 	pk_package_sack_test (test);
+	pk_task_test (test);
 
 	return (egg_test_finish (test));
 }
diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c
new file mode 100644
index 0000000..c3c64e4
--- /dev/null
+++ b/lib/packagekit-glib2/pk-task.c
@@ -0,0 +1,520 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offtask: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at 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 <stdlib.h>
+#include <stdio.h>
+#include <time.h>
+#include <errno.h>
+
+#include <string.h>
+#include <locale.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+
+#include <sys/wait.h>
+#include <fcntl.h>
+
+#include <glib/gi18n.h>
+#include <glib/gprintf.h>
+#include <dbus/dbus-glib.h>
+
+#include <packagekit-glib2/pk-task.h>
+#include <packagekit-glib2/pk-common.h>
+#include <packagekit-glib2/pk-enum.h>
+#include <packagekit-glib2/pk-results.h>
+
+#include "egg-debug.h"
+
+static void     pk_task_finalize	(GObject     *object);
+
+#define PK_TASK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PK_TYPE_TASK, PkTaskPrivate))
+
+/**
+ * PkTaskPrivate:
+ *
+ * Private #PkTask data
+ **/
+struct _PkTaskPrivate
+{
+	GPtrArray			*array;
+};
+
+/**
+ * PkTaskState:
+ *
+ * For use in the async methods
+ **/
+typedef struct {
+	guint				 request;
+	PkRoleEnum			 role;
+	PkExitEnum			 exit_enum;
+	gboolean			 only_trusted;
+	gchar				**package_ids;
+	GSimpleAsyncResult		*res;
+	PkResults			*results;
+	gboolean			 ret;
+	PkTask				*task;
+	GCancellable			*cancellable;
+	PkProgressCallback		 progress_callback;
+	gpointer			 progress_user_data;
+} PkTaskState;
+
+G_DEFINE_TYPE (PkTask, pk_task, PK_TYPE_CLIENT)
+
+static void pk_task_ready_cb (GObject *source_object, GAsyncResult *res, PkTaskState *state);
+
+/**
+ * pk_task_generate_request_id:
+ **/
+static guint
+pk_task_generate_request_id (void)
+{
+	static guint id = 0;
+	return ++id;
+}
+
+/**
+ * pk_task_find_by_request:
+ **/
+static PkTaskState *
+pk_task_find_by_request (PkTask *task, guint request)
+{
+	PkTaskState *item;
+	guint i;
+	GPtrArray *array;
+
+	g_return_val_if_fail (PK_IS_TASK (task), FALSE);
+	g_return_val_if_fail (request != 0, FALSE);
+
+	array = task->priv->array;
+	for (i=0; i<array->len; i++) {
+		item = g_ptr_array_index (array, i);
+		if (item->request == request)
+			goto out;
+	}
+	item = NULL;
+out:
+	return item;
+}
+
+/**
+ * pk_task_generic_state_finish:
+ **/
+static void
+pk_task_generic_state_finish (PkTaskState *state, const GError *error)
+{
+	/* remove weak ref */
+	if (state->task != NULL)
+		g_object_remove_weak_pointer (G_OBJECT (state->task), (gpointer) &state->task);
+
+	/* cancel */
+	if (state->cancellable != NULL) {
+		g_cancellable_cancel (state->cancellable);
+		g_object_unref (state->cancellable);
+	}
+
+	/* get result */
+	if (state->ret) {
+		g_simple_async_result_set_op_res_gpointer (state->res, g_object_ref (state->results), g_object_unref);
+	} else {
+		/* FIXME: change g_simple_async_result_set_from_error() to accept const GError */
+		g_simple_async_result_set_from_error (state->res, (GError*) error);
+	}
+
+	/* complete */
+	g_simple_async_result_complete_in_idle (state->res);
+
+	/* remove from list */
+	egg_warning ("remove state");
+	g_ptr_array_remove (state->task->priv->array, state);
+
+	/* deallocate */
+	g_strfreev (state->package_ids);
+	g_object_unref (state->res);
+	g_slice_free (PkTaskState, state);
+}
+
+/**
+ * pk_task_do_async_action:
+ **/
+static void
+pk_task_do_async_action (PkTaskState *state)
+{
+	/* do the correct action */
+	if (state->role == PK_ROLE_ENUM_INSTALL_PACKAGES) {
+		/* start install async */
+		egg_debug ("doing install untrusted");
+		pk_client_install_packages_async (PK_CLIENT(state->task), state->only_trusted, state->package_ids,
+						  state->cancellable, state->progress_callback, state->progress_user_data,
+						  (GAsyncReadyCallback) pk_task_ready_cb, state);
+	} else {
+		g_assert_not_reached ();
+	}
+}
+
+/**
+ * pk_task_user_acceptance_idle_cb:
+ **/
+static gboolean
+pk_task_user_acceptance_idle_cb (PkTaskState *state)
+{
+	if (state->exit_enum == PK_EXIT_ENUM_KEY_REQUIRED)
+		egg_error ("need to do install-sig");
+	if (state->exit_enum == PK_EXIT_ENUM_EULA_REQUIRED)
+		egg_error ("need to do accept-eula");
+
+	/* doing task */
+	egg_debug ("continuing with request %i", state->request);
+	pk_task_do_async_action (state);
+
+	/* never repeat */
+	return FALSE;
+}
+
+/**
+ * pk_task_user_acceptance:
+ **/
+gboolean
+pk_task_user_acceptance (PkTask *task, guint request)
+{
+	PkTaskState *state;
+
+	/* get the not-yet-completed request */
+	state = pk_task_find_by_request (task, request);
+	if (state == NULL) {
+		egg_warning ("request %i not found", request);
+		return FALSE;
+	}
+
+	g_idle_add ((GSourceFunc) pk_task_user_acceptance_idle_cb, state);
+	return TRUE;
+}
+
+/**
+ * pk_task_ready_cb:
+ **/
+static void
+pk_task_ready_cb (GObject *source_object, GAsyncResult *res, PkTaskState *state)
+{
+	PkTask *task = PK_TASK (source_object);
+	PkTaskClass *klass = PK_TASK_GET_CLASS (task);
+	GError *error = NULL;
+
+	/* get the results */
+	state->results = pk_client_generic_finish (PK_CLIENT(task), res, &error);
+	if (state->results == NULL) {
+		egg_warning ("failed to resolve: %s", error->message);
+		pk_task_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* get exit code */
+	state->exit_enum = pk_results_get_exit_code (state->results);
+
+	/* need untrusted */
+	if (state->exit_enum == PK_EXIT_ENUM_NEED_UNTRUSTED) {
+		state->only_trusted = FALSE;
+
+		/* no support */
+		if (klass->untrusted_question == NULL) {
+			error = g_error_new (1, 0, "could not do untrusted question as no klass support");
+			pk_task_generic_state_finish (state, error);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* run the callback */
+		klass->untrusted_question (task, state->request, state->results);
+		goto out;
+	}
+
+	/* need key */
+	if (state->exit_enum == PK_EXIT_ENUM_KEY_REQUIRED) {
+		/* no support */
+		if (klass->key_question == NULL) {
+			error = g_error_new (1, 0, "could not do key question as no klass support");
+			pk_task_generic_state_finish (state, error);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* run the callback */
+		klass->key_question (task, state->request, state->results);
+		goto out;
+	}
+
+	/* need EULA */
+	if (state->exit_enum == PK_EXIT_ENUM_EULA_REQUIRED) {
+		/* no support */
+		if (klass->eula_question == NULL) {
+			error = g_error_new (1, 0, "could not do eula question as no klass support");
+			pk_task_generic_state_finish (state, error);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* run the callback */
+		klass->eula_question (task, state->request, state->results);
+		goto out;
+	}
+
+	/* need media change */
+	if (state->exit_enum == PK_EXIT_ENUM_MEDIA_CHANGE_REQUIRED) {
+		/* no support */
+		if (klass->media_change_question == NULL) {
+			error = g_error_new (1, 0, "could not do media change question as no klass support");
+			pk_task_generic_state_finish (state, error);
+			g_error_free (error);
+			goto out;
+		}
+
+		/* run the callback */
+		klass->media_change_question (task, state->request, state->results);
+		goto out;
+	}
+
+	/* we can't handle this, just finish the async method */
+	state->ret = TRUE;
+
+	/* we're done */
+	pk_task_generic_state_finish (state, error);
+out:
+	return;
+}
+
+/**
+ * pk_task_install_packages_async:
+ * @task: a valid #PkTask instance
+ * @cancellable: a #GCancellable or %NULL
+ * @callback: the function to run on completion
+ * @user_data: the data to pass to @callback
+ *
+ * Merges in details about packages using resolve.
+ **/
+void
+pk_task_install_packages_async (PkTask *task, gchar **package_ids, GCancellable *cancellable,
+				PkProgressCallback progress_callback, gpointer progress_user_data,
+				GAsyncReadyCallback callback, gpointer user_data)
+{
+	GSimpleAsyncResult *res;
+	PkTaskState *state;
+
+	g_return_if_fail (PK_IS_TASK (task));
+	g_return_if_fail (callback != NULL);
+
+	res = g_simple_async_result_new (G_OBJECT (task), callback, user_data, pk_task_install_packages_async);
+
+	/* save state */
+	state = g_slice_new0 (PkTaskState);
+	state->role = PK_ROLE_ENUM_INSTALL_PACKAGES;
+	state->res = g_object_ref (res);
+	if (cancellable != NULL)
+		state->cancellable = g_object_ref (cancellable);
+	state->task = task;
+	state->progress_callback = progress_callback;
+	state->progress_user_data = progress_user_data;
+	state->ret = FALSE;
+	state->only_trusted = TRUE;
+	state->package_ids = g_strdupv (package_ids);
+	state->request = pk_task_generate_request_id ();
+	g_object_add_weak_pointer (G_OBJECT (state->task), (gpointer) &state->task);
+
+	egg_warning ("adding state %p", state);
+	g_ptr_array_add (task->priv->array, state);
+
+	/* start trusted install async */
+	pk_task_do_async_action (state);
+
+	g_object_unref (res);
+}
+
+/**
+ * pk_task_generic_finish:
+ * @task: a valid #PkTask instance
+ * @res: the #GAsyncResult
+ * @error: A #GError or %NULL
+ *
+ * Gets the result from the asynchronous function.
+ *
+ * Return value: %TRUE for success
+ **/
+PkResults *
+pk_task_generic_finish (PkTask *task, GAsyncResult *res, GError **error)
+{
+	GSimpleAsyncResult *simple;
+
+	g_return_val_if_fail (PK_IS_TASK (task), FALSE);
+	g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (res), FALSE);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	simple = G_SIMPLE_ASYNC_RESULT (res);
+
+	if (g_simple_async_result_propagate_error (simple, error))
+		return FALSE;
+
+	return g_simple_async_result_get_op_res_gpointer (simple);
+}
+
+/**
+ * pk_task_class_init:
+ * @klass: The PkTaskClass
+ **/
+static void
+pk_task_class_init (PkTaskClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	object_class->finalize = pk_task_finalize;
+
+	g_type_class_add_private (klass, sizeof (PkTaskPrivate));
+}
+
+/**
+ * pk_task_init:
+ * @task: This class instance
+ **/
+static void
+pk_task_init (PkTask *task)
+{
+	task->priv = PK_TASK_GET_PRIVATE (task);
+	task->priv->array = g_ptr_array_new ();
+}
+
+/**
+ * pk_task_finalize:
+ * @object: The object to finalize
+ **/
+static void
+pk_task_finalize (GObject *object)
+{
+	PkTask *task = PK_TASK (object);
+	g_ptr_array_unref (task->priv->array);
+	G_OBJECT_CLASS (pk_task_parent_class)->finalize (object);
+}
+
+/**
+ * pk_task_new:
+ *
+ * Return value: a new PkTask object.
+ **/
+PkTask *
+pk_task_new (void)
+{
+	PkTask *task;
+	task = g_object_new (PK_TYPE_TASK, NULL);
+	return PK_TASK (task);
+}
+
+/***************************************************************************
+ ***                          MAKE CHECK TESTS                           ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+static void
+pk_task_test_install_packages_cb (GObject *object, GAsyncResult *res, EggTest *test)
+{
+	PkTask *task = PK_TASK (object);
+	GError *error = NULL;
+	PkResults *results = NULL;
+	PkExitEnum exit_enum;
+	GPtrArray *packages;
+	const PkResultItemPackage *item;
+	guint i;
+
+	/* get the results */
+	results = pk_task_generic_finish (task, res, &error);
+	if (results == NULL) {
+		egg_test_failed (test, "failed to resolve: %s", error->message);
+		g_error_free (error);
+		return;
+	}
+
+	exit_enum = pk_results_get_exit_code (results);
+	if (exit_enum != PK_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_enum), item->package_id, item->summary);
+	}
+
+	if (packages->len != 5)
+		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));
+	egg_test_loop_quit (test);
+}
+
+static void
+pk_task_test_progress_cb (PkProgress *progress, PkProgressType type, EggTest *test)
+{
+	PkStatusEnum status;
+	if (type == PK_PROGRESS_TYPE_STATUS) {
+		g_object_get (progress,
+			      "status", &status,
+			      NULL);
+		egg_debug ("now %s", pk_status_enum_to_text (status));
+	}
+}
+
+void
+pk_task_test (gpointer user_data)
+{
+	EggTest *test = (EggTest *) user_data;
+	PkTask *task;
+	gchar **package_ids;
+
+	if (!egg_test_start (test, "PkTask"))
+		return;
+
+	/************************************************************/
+	egg_test_title (test, "get task");
+	task = pk_task_new ();
+	egg_test_assert (test, task != NULL);
+
+	/************************************************************/
+	egg_test_title (test, "install package");
+	package_ids = g_strsplit ("glib2;2.14.0;i386;fedora", ",", -1);
+	pk_task_install_packages_async (task, package_ids, NULL,
+				        (PkProgressCallback) pk_task_test_progress_cb, test,
+				        (GAsyncReadyCallback) pk_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/lib/packagekit-glib2/pk-task.h b/lib/packagekit-glib2/pk-task.h
new file mode 100644
index 0000000..8e17471
--- /dev/null
+++ b/lib/packagekit-glib2/pk-task.h
@@ -0,0 +1,112 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offtask: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at 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.
+ */
+
+#if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
+#error "Only <packagekit.h> can be included directly."
+#endif
+
+/**
+ * SECTION:pk-task
+ * @short_description: An abstract package task GObject, dealing with unsigned
+ * transactions, GPG keys and EULA requests.
+ */
+
+#ifndef __PK_TASK_H
+#define __PK_TASK_H
+
+#include <glib-object.h>
+#include <gio/gio.h>
+#include <packagekit-glib2/pk-progress.h>
+#include <packagekit-glib2/pk-results.h>
+#include <packagekit-glib2/pk-client.h>
+
+G_BEGIN_DECLS
+
+#define PK_TYPE_TASK		(pk_task_get_type ())
+#define PK_TASK(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), PK_TYPE_TASK, PkTask))
+#define PK_TASK_CLASS(k)	(G_TYPE_CHECK_CLASS_CAST((k), PK_TYPE_TASK, PkTaskClass))
+#define PK_IS_TASK(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), PK_TYPE_TASK))
+#define PK_IS_TASK_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), PK_TYPE_TASK))
+#define PK_TASK_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_TASK, PkTaskClass))
+#define PK_TASK_ERROR		(pk_task_error_quark ())
+#define PK_TASK_TYPE_ERROR	(pk_task_error_get_type ())
+
+typedef struct _PkTaskPrivate	PkTaskPrivate;
+typedef struct _PkTask		PkTask;
+typedef struct _PkTaskClass	PkTaskClass;
+typedef struct _PkTaskResults	PkTaskResults;
+
+struct _PkTask
+{
+	 PkClient		 parent;
+	 PkTaskPrivate		*priv;
+};
+
+struct _PkTaskClass
+{
+	PkClientClass		parent_class;
+	void	 (*untrusted_question)			(PkTask			*task,
+							 guint			 request,
+							 const PkResults	*results);
+	void	 (*key_question)			(PkTask			*task,
+							 guint			 request,
+							 const PkResults	*results);
+	void	 (*eula_question)			(PkTask			*task,
+							 guint			 request,
+							 const PkResults	*results);
+	void	 (*media_change_question)		(PkTask			*task,
+							 guint			 request,
+							 const PkResults	*results);
+	/* padding for future expansion */
+	void (*_pk_reserved1)	(void);
+	void (*_pk_reserved2)	(void);
+	void (*_pk_reserved3)	(void);
+	void (*_pk_reserved4)	(void);
+	void (*_pk_reserved5)	(void);
+};
+
+GQuark		 pk_task_error_quark			(void);
+GType		 pk_task_get_type			(void);
+PkTask		*pk_task_new				(void);
+void		 pk_task_test				(gpointer		 user_data);
+
+PkResults	*pk_task_generic_finish			(PkTask			*task,
+							 GAsyncResult		*res,
+							 GError			**error);
+
+void		 pk_task_install_packages_async		(PkTask			*task,
+							 gchar			**package_ids,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GAsyncReadyCallback	 callback,
+							 gpointer		 user_data);
+/* TODO:
+ *    pk_task_remove_packages_async
+ *    pk_task_update_packages_async
+ */
+gboolean	 pk_task_user_acceptance		(PkTask			*task,
+							 guint			 request);
+
+G_END_DECLS
+
+#endif /* __PK_TASK_H */
+
commit 67d187e7d62387b8392d9cb1303802f8f0f5222a
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 2 21:30:45 2009 +0100

    glib2: trivially improve a gtk-doc description

diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index 0b292e6..4f06f80 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -23,7 +23,10 @@
  * SECTION:pk-client
  * @short_description: GObject class for PackageKit client access
  *
- * A nice GObject to use for accessing PackageKit asynchronously
+ * A nice GObject to use for accessing PackageKit asynchronously. If you're
+ * using #PkClient to install, remove, or update packages, be prepared that
+ * the eula, gpg and trusted callbacks need to be rescheduled manually, as in
+ * http://www.packagekit.org/gtk-doc/introduction-ideas-transactions.html
  */
 
 #include "config.h"
@@ -3277,8 +3280,6 @@ pk_client_test_progress_cb (PkProgress *progress, PkProgressType type, EggTest *
 		_allow_cancel_cb++;
 	if (type == PK_PROGRESS_TYPE_STATUS)
 		_status_cb++;
-
-//	egg_debug ("percentage now %i", percentage);
 }
 
 static gboolean
commit f9e14c3ffcf2123b7ecdda300c7a0bd87b58c4f4
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 2 21:30:04 2009 +0100

    trivial: fix make check

diff --git a/po/POTFILES.in b/po/POTFILES.in
index e90ecaa..d9a2ebb 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -15,4 +15,5 @@ data/packagekit-servicepack.xml.in
 policy/org.freedesktop.packagekit.policy.in
 src/pk-main.c
 src/pk-polkit-action-lookup.c
+client/pk-text.c
 
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
index bb8a3b5..5bbff14 100644
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -1,2 +1,3 @@
 contrib/command-not-found/pk-tools-common.c
+contrib/command-not-found/pk-text.c
 
commit 80a51498fb09990d6a1d4968bd06f78592130e07
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 2 21:29:39 2009 +0100

    glib2: remove unused code

diff --git a/lib/packagekit-glib2/pk-package-sack.c b/lib/packagekit-glib2/pk-package-sack.c
index 5112a43..962a65c 100644
--- a/lib/packagekit-glib2/pk-package-sack.c
+++ b/lib/packagekit-glib2/pk-package-sack.c
@@ -74,12 +74,6 @@ enum {
 	SIGNAL_LAST
 };
 
-enum {
-	PROP_0,
-	PROP_ID,
-	PROP_LAST
-};
-
 G_DEFINE_TYPE (PkPackageSack, pk_package_sack, G_TYPE_OBJECT)
 
 /**
@@ -359,7 +353,6 @@ pk_package_sack_merge_bool_state_finish (PkPackageSackState *state, const GError
 	} else {
 		/* FIXME: change g_simple_async_result_set_from_error() to accept const GError */
 		g_simple_async_result_set_from_error (state->res, (GError*) error);
-//		g_error_free (error);
 	}
 
 	/* complete */
@@ -735,65 +728,15 @@ pk_package_sack_merge_update_detail_async (PkPackageSack *sack, GCancellable *ca
 /***************************************************************************************************/
 
 /**
- * pk_package_sack_get_property:
- **/
-static void
-pk_package_sack_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
-{
-//	PkPackageSack *sack = PK_PACKAGE_SACK (object);
-//	PkPackageSackPrivate *priv = sack->priv;
-
-	switch (prop_id) {
-	case PROP_ID:
-//		g_value_sack_string (value, priv->id);
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-		break;
-	}
-}
-
-/**
- * pk_package_sack_set_property:
- **/
-static void
-pk_package_sack_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
-//	PkPackageSack *sack = PK_PACKAGE_SACK (object);
-//	PkPackageSackPrivate *priv = sack->priv;
-
-	switch (prop_id) {
-	case PROP_ID:
-//		priv->info = g_value_get_uint (value);
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-		break;
-	}
-}
-
-/**
  * pk_package_sack_class_init:
  * @klass: The PkPackageSackClass
  **/
 static void
 pk_package_sack_class_init (PkPackageSackClass *klass)
 {
-	GParamSpec *pspec;
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
-	object_class->get_property = pk_package_sack_get_property;
-	object_class->set_property = pk_package_sack_set_property;
 	object_class->finalize = pk_package_sack_finalize;
 
-	/**
-	 * PkPackageSack:id:
-	 */
-	pspec = g_param_spec_string ("id", NULL,
-				     "The full package_id, e.g. 'gnome-power-manager;0.1.2;i386;fedora'",
-				     NULL,
-				     G_PARAM_READABLE);
-	g_object_class_install_property (object_class, PROP_ID, pspec);
-
 #if 0
 	/**
 	 * PkPackageSack::changed:
commit 1355443c456588311d16867ae564bb576cbccc82
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 2 21:28:52 2009 +0100

    dummy: add _use_trusted support to install_files

diff --git a/backends/dummy/pk-backend-dummy.c b/backends/dummy/pk-backend-dummy.c
index b20807b..e5d8425 100644
--- a/backends/dummy/pk-backend-dummy.c
+++ b/backends/dummy/pk-backend-dummy.c
@@ -45,6 +45,7 @@ static gboolean _use_blocked = FALSE;
 static gboolean _use_eula = FALSE;
 static gboolean _use_media = FALSE;
 static gboolean _use_gpg = FALSE;
+static gboolean _use_trusted = TRUE;
 static gboolean _use_distro_upgrade = FALSE;
 static PkBitfield _filters = 0;
 
@@ -516,6 +517,13 @@ backend_install_packages (PkBackend *backend, gboolean only_trusted, gchar **pac
 		}
 	}
 
+	if (_use_trusted && only_trusted) {
+		pk_backend_error_code (backend, PK_ERROR_ENUM_CANNOT_INSTALL_REPO_UNSIGNED,
+				       "Can't install as untrusted");
+		pk_backend_finished (backend);
+		return;
+	}
+
 	pk_backend_set_allow_cancel (backend, TRUE);
 	_progress_percentage = 0;
 	pk_backend_package (backend, PK_INFO_ENUM_DOWNLOADING,
@@ -1073,6 +1081,8 @@ backend_repo_set_data (PkBackend *backend, const gchar *rid, const gchar *parame
 		_use_media = atoi (value);
 	else if (g_strcmp0 (parameter, "use-gpg") == 0)
 		_use_gpg = atoi (value);
+	else if (g_strcmp0 (parameter, "use-trusted") == 0)
+		_use_trusted = atoi (value);
 	else if (g_strcmp0 (parameter, "use-distro-upgrade") == 0)
 		_use_distro_upgrade = atoi (value);
 	else
commit 4f27ac643c096428f571d0b3a788f992c348f144
Author: warrink <warrink at fedoraproject.org>
Date:   Wed Sep 2 19:50:58 2009 +0000

    Sending translation for Dutch

diff --git a/po/nl.po b/po/nl.po
index 03cdcc4..1419bc3 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,16 +1,18 @@
 # translation of packagekit.master.po to Dutch
 # R.E. van der Luit <nippur at fedoraproject.org>, 2009.
+# Geert Warrink <geert.warrink at onsnet.nu>, 2009.
+# Geert Warrink <geert.warrink at onsnet.nu>, 2009.
 msgid ""
 msgstr ""
 "Project-Id-Version: packagekit.master.nl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-08-24 11:06+0100\n"
-"PO-Revision-Date: 2009-06-17 14:16+0200\n"
-"Last-Translator: R.E. van der Luit <nippur at fedoraproject.org>\n"
-"Language-Team: Dutch <nippur at fedoraproject.org>\n"
+"POT-Creation-Date: 2009-09-02 14:45+0000\n"
+"PO-Revision-Date: 2009-09-02 21:48+0200\n"
+"Last-Translator: Geert Warrink <geert.warrink at onsnet.nu>\n"
+"Language-Team: nl <nl at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
+"Content-Transfer-Encoding:  \n"
 "Plural-Forms:  nplurals=2; plural=(n != 1);\n"
 "X-Poedit-Language: Dutch\n"
 "X-Generator: KBabel 1.11.4\n"
@@ -30,12 +32,11 @@ msgstr "Systeemtijd"
 msgid "Succeeded"
 msgstr "Geslaagd"
 
-#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:239 ../client/pk-console.c:406
+#: ../client/pk-console.c:239
 msgid "True"
 msgstr "Waar"
 
-#: ../client/pk-console.c:239 ../client/pk-console.c:406
+#: ../client/pk-console.c:239
 msgid "False"
 msgstr "Niet waar"
 
@@ -58,7 +59,7 @@ msgstr "(seconden)"
 #. TRANSLATORS: the command line of the thing that wants the authentication
 #: ../client/pk-console.c:250 ../src/pk-polkit-action-lookup.c:341
 msgid "Command line"
-msgstr "Commando lijn"
+msgstr "Commando regel"
 
 #. TRANSLATORS: this is the user ID of the user that started the action
 #: ../client/pk-console.c:252
@@ -77,251 +78,290 @@ msgstr "Werkelijke naam"
 
 #: ../client/pk-console.c:271
 msgid "Affected packages:"
-msgstr "Betreffende Pakketten"
+msgstr "Betreffende pakketten"
 
 #: ../client/pk-console.c:273
 msgid "Affected packages: None"
-msgstr "Betreffende Pakketten: Geen"
+msgstr "Betreffende pakketten: Geen"
+
+#. TRANSLATORS: When processing, we might have to remove other dependencies
+#: ../client/pk-console.c:334
+msgid "The following packages have to be removed:"
+msgstr "De volgende pakketten moeten worden verwijderd:"
+
+#. TRANSLATORS: When processing, we might have to install other dependencies
+#: ../client/pk-console.c:337
+msgid "The following packages have to be installed:"
+msgstr "De volgende pakketten moeten worden geïnstalleerd"
+
+#. TRANSLATORS: When processing, we might have to update other dependencies
+#: ../client/pk-console.c:340
+msgid "The following packages have to be updated:"
+msgstr "De volgende pakketten moeten worden vernieuwd:"
+
+#. TRANSLATORS: When processing, we might have to reinstall other dependencies
+#: ../client/pk-console.c:343
+msgid "The following packages have to be reinstalled:"
+msgstr "De volgende pakketten moeten opnieuw geïnstalleerd worden:"
+
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../client/pk-console.c:346
+msgid "The following packages have to be downgraded:"
+msgstr "De volgende pakketten moeten gedegradeerd worden:"
 
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:298
+#: ../client/pk-console.c:360
 msgid "Distribution"
 msgstr "Distributie"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:300
+#: ../client/pk-console.c:362
 msgid "Type"
 msgstr "Type"
 
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:302 ../client/pk-console.c:325
+#: ../client/pk-console.c:364 ../client/pk-console.c:387
 msgid "Summary"
 msgstr "Samenvatting"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:314
+#: ../client/pk-console.c:376
 msgid "Category"
 msgstr "Categorie"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:316
+#: ../client/pk-console.c:378
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:319
+#: ../client/pk-console.c:381
 msgid "Parent"
 msgstr "Ouder"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:322
+#: ../client/pk-console.c:384
 msgid "Name"
 msgstr "Naam"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:328
+#: ../client/pk-console.c:390
 msgid "Icon"
-msgstr "Afbeelding"
+msgstr "Icoon"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:343
+#: ../client/pk-console.c:405
 msgid "Details about the update:"
-msgstr "Details van de update:"
+msgstr "Details van de vernieuwing:"
 
 #. TRANSLATORS: details about the update, package name and version
 #. TRANSLATORS: title, the names of the packages that the method is processing
-#: ../client/pk-console.c:345 ../src/pk-polkit-action-lookup.c:352
-#, fuzzy
+#: ../client/pk-console.c:407 ../src/pk-polkit-action-lookup.c:352
 msgid "Package"
 msgid_plural "Packages"
-msgstr[0] "Pakketten"
+msgstr[0] "Pakket"
 msgstr[1] "Pakketten"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:348
+#: ../client/pk-console.c:410
 msgid "Updates"
-msgstr "Updates"
+msgstr "Vernieuwingen"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:352
+#: ../client/pk-console.c:414
 msgid "Obsoletes"
-msgstr "Verouderde Paketten"
+msgstr "Verouderde pakketten"
 
 #. TRANSLATORS: details about the update, the vendor URLs
-#: ../client/pk-console.c:356
+#: ../client/pk-console.c:418
 msgid "Vendor"
 msgstr "Verkoper"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:360
+#: ../client/pk-console.c:422
 msgid "Bugzilla"
 msgstr "Bugzilla"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:364
+#: ../client/pk-console.c:426
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:368
+#: ../client/pk-console.c:430
 msgid "Restart"
 msgstr "Herstarten"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:372
+#: ../client/pk-console.c:434
 msgid "Update text"
-msgstr "Update tekst"
+msgstr "Vernieuw tekst"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:376
+#: ../client/pk-console.c:438
 msgid "Changes"
 msgstr "Veranderingen"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:380
+#: ../client/pk-console.c:442
 msgid "State"
 msgstr "Status"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:385
+#: ../client/pk-console.c:447
 msgid "Issued"
 msgstr "Uitgegeven"
 
 #. TRANSLATORS: details about the update, date the update was updated
-#: ../client/pk-console.c:390
+#: ../client/pk-console.c:452
 msgid "Updated"
-msgstr "Ge-update"
+msgstr "Vernieuwd"
+
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:472
+msgid "Enabled"
+msgstr "Aangezit"
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:475
+msgid "Disabled"
+msgstr "Uitgezet"
 
-#: ../client/pk-console.c:477 ../client/pk-console.c:479
+#: ../client/pk-console.c:552 ../client/pk-console.c:554
 msgid "Percentage"
 msgstr "Percentage"
 
-#: ../client/pk-console.c:479
+#: ../client/pk-console.c:554
 msgid "Unknown"
 msgstr "Onbekend"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:521
+#: ../client/pk-console.c:596
 msgid "System restart required by:"
 msgstr "Herstart systeem vereist door:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:524
+#: ../client/pk-console.c:599
 msgid "Session restart required:"
 msgstr "Het is vereist het systeem te herstarten:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:527
-#, fuzzy
+#: ../client/pk-console.c:602
 msgid "System restart (security) required by:"
-msgstr "Herstart systeem vereist door:"
+msgstr "Herstart systeem (beveiliging) vereist door:"
 
 #. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:530
-#, fuzzy
+#: ../client/pk-console.c:605
 msgid "Session restart (security) required:"
-msgstr "Het is vereist het systeem te herstarten:"
+msgstr "Herstart sessie (beveiliging) vereist door:"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:533
+#: ../client/pk-console.c:608
 msgid "Application restart required by:"
-msgstr "Herstart vereist door applicatie:"
+msgstr "Herstart vereist door toepassing:"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:588
+#: ../client/pk-console.c:663
 msgid "Please restart the computer to complete the update."
-msgstr "Herstart u alstublieft de computer om de update af te maken."
+msgstr "Herstart a.u.b de computer om de verneuwing af te maken."
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:591
+#: ../client/pk-console.c:666
 msgid "Please logout and login to complete the update."
-msgstr "Logt u alstublieft uit en weer in om de update af te maken."
+msgstr "Log a.u.b uit en weer in om de vernieuwing af te maken."
 
 #. TRANSLATORS: a package needs to restart the application
-#: ../client/pk-console.c:594
+#: ../client/pk-console.c:669
 msgid "Please restart the application as it is being used."
-msgstr "Herstart u alstublieft de applicatie aangezien deze in gebruik was."
+msgstr "Herstart a.ub. de toepassing omdat deze in gebruik was."
 
 #. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:597
-#, fuzzy
+#: ../client/pk-console.c:672
 msgid ""
 "Please restart the computer to complete the update as important security "
 "updates have been installed."
-msgstr "Herstart u alstublieft de computer om de update af te maken."
+msgstr ""
+"Herstart a.u.b de computer om de vernieuwing af te maken omdat belangrijke "
+"beveiligings vernieuwingen geïnstaleerd zijn."
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:600
-#, fuzzy
+#: ../client/pk-console.c:675
 msgid ""
 "Please logout and login to complete the update as important security updates "
 "have been installed."
-msgstr "Logt u alstublieft uit en weer in om de update af te maken."
+msgstr "Log a.u.b. uit en weer in om de verniewing af te maken."
 
 #. TRANSLATORS: The package is already installed on the system
-#: ../client/pk-console.c:727
+#: ../client/pk-console.c:807
 #, c-format
 msgid "The package %s is already installed"
 msgstr "Het pakket %s is reeds geïnstalleerd"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:735
+#: ../client/pk-console.c:815
 #, c-format
 msgid "The package %s could not be installed: %s"
 msgstr "Het pakket %s kon niet worden geïnstalleerd: %s"
 
 #. TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows
-#: ../client/pk-console.c:760 ../client/pk-console.c:783
-#: ../client/pk-console.c:879 ../client/pk-console.c:996
-#: ../client/pk-tools-common.c:62 ../client/pk-tools-common.c:81
-#: ../client/pk-tools-common.c:89
+#: ../client/pk-console.c:841 ../client/pk-console.c:889
+#: ../client/pk-console.c:913 ../client/pk-console.c:961
+#: ../client/pk-console.c:1057 ../client/pk-console.c:1170
+#: ../client/pk-console.c:1231 ../client/pk-tools-common.c:62
+#: ../client/pk-tools-common.c:81 ../client/pk-tools-common.c:89
 #, c-format
 msgid "Internal error: %s"
 msgstr "Interne fout: %s"
 
+#. TRANSLATORS: We are checking if it's okay to remove a list of packages
+#: ../client/pk-console.c:873 ../client/pk-console.c:945
+#: ../client/pk-console.c:1263
+msgid "Proceed with changes?"
+msgstr "Doorgaan met veranderingen?"
+
+#. TRANSLATORS: There was an error removing the packages. The detailed error follows
+#: ../client/pk-console.c:878 ../client/pk-console.c:950
+msgid "The package install was canceled!"
+msgstr "De pakket installatie is afgebroken!"
+
 #. TRANSLATORS: There was an error installing the packages. The detailed error follows
-#: ../client/pk-console.c:768 ../client/pk-console.c:1392
+#: ../client/pk-console.c:897 ../client/pk-console.c:1631
 #, c-format
 msgid "This tool could not install the packages: %s"
-msgstr "Dit programma kon niet het pakket %s installeren."
+msgstr "Dit programma kon niet de pakketten %s installeren."
 
 #. TRANSLATORS: There was an error installing the files. The detailed error follows
-#: ../client/pk-console.c:791
+#: ../client/pk-console.c:969
 #, c-format
 msgid "This tool could not install the files: %s"
 msgstr "De bestanden %s konden niet worden geïnstalleerd."
 
 #. TRANSLATORS: The package name was not found in the installed list. The detailed error follows
-#: ../client/pk-console.c:847
+#: ../client/pk-console.c:1025
 #, c-format
 msgid "This tool could not remove %s: %s"
 msgstr "Dit programma kon %s niet verwijderen: %s"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:870 ../client/pk-console.c:908
-#: ../client/pk-console.c:941
+#: ../client/pk-console.c:1048 ../client/pk-console.c:1086
+#: ../client/pk-console.c:1115
 #, c-format
 msgid "This tool could not remove the packages: %s"
 msgstr "Dit programma kon het pakket %s niet verwijderen."
 
-#. TRANSLATORS: When removing, we might have to remove other dependencies
-#: ../client/pk-console.c:920
-msgid "The following packages have to be removed:"
-msgstr "De volgende pakketten moeten worden verwijderd:"
-
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:927
-msgid "Proceed removing additional packages?"
-msgstr "Doorgaan met additionele pakketten verwijderen?"
+#: ../client/pk-console.c:1101
+msgid "Proceed with additional packages?"
+msgstr "Doorgaan met additionele pakketten?"
 
-#. TRANSLATORS: We did not remove any packages
-#: ../client/pk-console.c:932
+#. TRANSLATORS: There was an error removing the packages. The detailed error follows
+#: ../client/pk-console.c:1106
 msgid "The package removal was canceled!"
 msgstr "Het verwijderen van pakketten is afgebroken!"
 
 #. TRANSLATORS: The package name was not found in any software sources
-#: ../client/pk-console.c:973
+#: ../client/pk-console.c:1147
 #, c-format
 msgid "This tool could not download the package %s as it could not be found"
 msgstr ""
@@ -329,359 +369,364 @@ msgstr ""
 "kon worden."
 
 #. TRANSLATORS: Could not download the packages for some reason. The detailed error follows
-#: ../client/pk-console.c:1004
+#: ../client/pk-console.c:1178
 #, c-format
 msgid "This tool could not download the packages: %s"
 msgstr "Dit programma kon de pakketten niet downloaden: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1031 ../client/pk-console.c:1040
+#: ../client/pk-console.c:1210 ../client/pk-console.c:1222
+#: ../client/pk-console.c:1277
 #, c-format
 msgid "This tool could not update %s: %s"
 msgstr "Dit programma kon %s niet updaten: %s"
 
+#. TRANSLATORS: There was an error removing the packages. The detailed error follows
+#: ../client/pk-console.c:1268
+msgid "The package update was canceled!"
+msgstr "De pakket vernieuwing is afgebroken!"
+
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1062 ../client/pk-console.c:1070
+#: ../client/pk-console.c:1301 ../client/pk-console.c:1309
 #, c-format
 msgid "This tool could not get the requirements for %s: %s"
 msgstr "Dit programma kon niet de benodigdheden voor %s vinden: %s"
 
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
-#: ../client/pk-console.c:1092 ../client/pk-console.c:1100
+#: ../client/pk-console.c:1331 ../client/pk-console.c:1339
 #, c-format
 msgid "This tool could not get the dependencies for %s: %s"
 msgstr "De afhankelijkheden voor %s konden niet worden verkregen: %s"
 
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
-#: ../client/pk-console.c:1122 ../client/pk-console.c:1130
+#: ../client/pk-console.c:1361 ../client/pk-console.c:1369
 #, c-format
 msgid "This tool could not get package details for %s: %s"
 msgstr "Dit programma kon geen pakketdetails vinden voor %s: %s"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1152
+#: ../client/pk-console.c:1391
 #, c-format
 msgid "This tool could not find the files for %s: %s"
 msgstr "Dit programma kon de bestanden voor %s niet vinden: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1160
+#: ../client/pk-console.c:1399
 #, c-format
 msgid "This tool could not get the file list for %s: %s"
 msgstr "Dit programma kon de bestandenlijst voor %s niet vinden: %s"
 
 #. TRANSLATORS: There was an error getting the list of packages. The filename follows
-#: ../client/pk-console.c:1182
+#: ../client/pk-console.c:1421
 #, c-format
 msgid "File already exists: %s"
 msgstr "Bestand bestaat reeds: %s"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1187 ../client/pk-console.c:1243
-#: ../client/pk-console.c:1318
+#: ../client/pk-console.c:1426 ../client/pk-console.c:1482
+#: ../client/pk-console.c:1557
 msgid "Getting package list"
 msgstr "Ophalen Pakketlijst"
 
 #. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
-#: ../client/pk-console.c:1193 ../client/pk-console.c:1249
-#: ../client/pk-console.c:1324
+#: ../client/pk-console.c:1432 ../client/pk-console.c:1488
+#: ../client/pk-console.c:1563
 #, c-format
 msgid "This tool could not get package list: %s"
 msgstr "Dit programma kon de pakketlijst niet vinden: %s"
 
 #. TRANSLATORS: There was an error saving the list
-#: ../client/pk-console.c:1204
+#: ../client/pk-console.c:1443
 #, c-format
 msgid "Failed to save to disk"
 msgstr "Vastleggen op schijf niet gelukt"
 
 #. TRANSLATORS: There was an error getting the list. The filename follows
-#: ../client/pk-console.c:1238 ../client/pk-console.c:1313
+#: ../client/pk-console.c:1477 ../client/pk-console.c:1552
 #, c-format
 msgid "File does not exist: %s"
 msgstr "Bestand bestaat niet: %s"
 
 #. TRANSLATORS: header to a list of packages newly added
-#: ../client/pk-console.c:1270
+#: ../client/pk-console.c:1509
 msgid "Packages to add"
 msgstr "Toe te voegen pakketten"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1278
+#: ../client/pk-console.c:1517
 msgid "Packages to remove"
 msgstr "Te verwijderen pakketten"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1346
+#: ../client/pk-console.c:1585
 #, c-format
 msgid "No new packages need to be installed"
 msgstr "Er hoeven geen nieuwe pakketten te worden toegevoegd"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1352
+#: ../client/pk-console.c:1591
 msgid "To install"
 msgstr "Te installeren"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1364
+#: ../client/pk-console.c:1603
 msgid "Searching for package: "
 msgstr "Pakketten worden gezocht (kan even duren): "
 
 #. TRANSLATORS: package was not found -- this is the end of a string ended in ...
-#: ../client/pk-console.c:1368
+#: ../client/pk-console.c:1607
 msgid "not found."
 msgstr "niet gevonden."
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1379
+#: ../client/pk-console.c:1618
 #, c-format
 msgid "No packages can be found to install"
 msgstr "Er kunnen geen pakketten worden gevonden om te installeren"
 
 #. TRANSLATORS: installing new packages from package list
 #. TRANSLATORS: we are now installing the debuginfo packages we found earlier
-#: ../client/pk-console.c:1385
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:886
+#: ../client/pk-console.c:1624
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
 #, c-format
 msgid "Installing packages"
 msgstr "Pakketten installeren"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1421
+#: ../client/pk-console.c:1660
 #, c-format
 msgid "This tool could not find the update details for %s: %s"
 msgstr "Dit programma kon de update-details voor %s niet vinden: %s"
 
 #. TRANSLATORS: There was an error getting the details about the update for the package. The detailed error follows
-#: ../client/pk-console.c:1429
+#: ../client/pk-console.c:1668
 #, c-format
 msgid "This tool could not get the update details for %s: %s"
 msgstr "Dit programma kon de update-details voor %s niet verkrijgen: %s"
 
 #. TRANSLATORS: This was an unhandled error, and we don't have _any_ context
-#: ../client/pk-console.c:1460
+#: ../client/pk-console.c:1699
 msgid "Error:"
 msgstr "Fout:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1474
+#: ../client/pk-console.c:1713
 msgid "Package description"
 msgstr "Pakketomschrijving"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:1490
+#: ../client/pk-console.c:1729
 msgid "Message:"
 msgstr "Bericht:"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1518
+#: ../client/pk-console.c:1757
 msgid "Package files"
 msgstr "Pakketbestanden"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1526
+#: ../client/pk-console.c:1765
 msgid "No files"
 msgstr "Geen bestanden"
 
 #. TRANSLATORS: This a request for a GPG key signature from the backend, which the client will prompt for later
-#: ../client/pk-console.c:1549
+#: ../client/pk-console.c:1788
 msgid "Repository signature required"
 msgstr "Repository signatuur vereist"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
-#: ../client/pk-console.c:1559
+#: ../client/pk-console.c:1798
 msgid "Do you accept this signature?"
 msgstr "Accepteert u deze signatuur?"
 
 #. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1563
+#: ../client/pk-console.c:1802
 msgid "The signature was not accepted."
 msgstr "De signatuur werd niet geaccepteerd"
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1597
+#: ../client/pk-console.c:1836
 msgid "End user license agreement required"
 msgstr "Eindgebruiker licentie overeenkomst vereist"
 
 #. TRANSLATORS: This a prompt asking the user to agree to the license
-#: ../client/pk-console.c:1604
+#: ../client/pk-console.c:1843
 msgid "Do you agree to this license?"
 msgstr "Gaat u accoord met deze licentie?"
 
 #. TRANSLATORS: This is where the user declined the license
-#: ../client/pk-console.c:1608
+#: ../client/pk-console.c:1847
 msgid "The license was refused."
 msgstr "De licentie werd geweigerd."
 
 #. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1637
+#: ../client/pk-console.c:1876
 msgid "The daemon crashed mid-transaction!"
 msgstr "De service is midden in de transactie gecrashed!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1690
+#: ../client/pk-console.c:1929
 msgid "PackageKit Console Interface"
 msgstr "PackageKit console-interface"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1692
+#: ../client/pk-console.c:1931
 msgid "Subcommands:"
 msgstr "Subopdrachten:"
 
 #. TRANSLATORS: command line argument, if we should show debugging information
 #. TRANSLATORS: if we should show debugging data
-#: ../client/pk-console.c:1785 ../client/pk-generate-pack.c:185
+#: ../client/pk-console.c:2024 ../client/pk-generate-pack.c:185
 #: ../client/pk-monitor.c:128
 #: ../contrib/command-not-found/pk-command-not-found.c:616
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:550
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:549
 #: ../contrib/device-rebind/pk-device-rebind.c:293 ../src/pk-main.c:211
 msgid "Show extra debugging information"
 msgstr "Extra debuginformatie tonen"
 
 #. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1788 ../client/pk-monitor.c:130
+#: ../client/pk-console.c:2027 ../client/pk-monitor.c:130
 msgid "Show the program version and exit"
 msgstr "Programmaversie tonen en sluiten"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1791
+#: ../client/pk-console.c:2030
 msgid "Set the filter, e.g. installed"
 msgstr "Filter instellen, bijvoorbeeld geïnstalleerd"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1794
+#: ../client/pk-console.c:2033
 msgid "Exit without waiting for actions to complete"
 msgstr "Afsluiten zonder te wachten tot de transacties zijn afgerond"
 
 #. TRANSLATORS: This is when we could not connect to the system bus, and is fatal
-#: ../client/pk-console.c:1821
+#: ../client/pk-console.c:2060
 msgid "This tool could not connect to system DBUS."
 msgstr "Er kon geen verbinding worden gelegd met system DBUS"
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1911
+#: ../client/pk-console.c:2150
 msgid "The filter specified was invalid"
 msgstr "De opgegeven filter was ongeldig"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1930
+#: ../client/pk-console.c:2169
 msgid "A search type is required, e.g. name"
 msgstr "Een zoektype is verplicht, b.v. naam"
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1937 ../client/pk-console.c:1946
-#: ../client/pk-console.c:1955 ../client/pk-console.c:1964
+#: ../client/pk-console.c:2176 ../client/pk-console.c:2185
+#: ../client/pk-console.c:2194 ../client/pk-console.c:2203
 msgid "A search term is required"
 msgstr "Een zoekterm is vereist"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1971
+#: ../client/pk-console.c:2210
 msgid "Invalid search type"
 msgstr "Ongeldig zoektype"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1977
+#: ../client/pk-console.c:2216
 msgid "A package name or filename to install is required"
 msgstr "Een pakketnaam of bestandsnaam om te installeren is vereist"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1986
+#: ../client/pk-console.c:2225
 msgid "A type, key_id and package_id are required"
 msgstr "Er moet een type worden opgegeven, key_id of package_id"
 
 #. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1995
+#: ../client/pk-console.c:2234
 msgid "A package name to remove is required"
 msgstr "Een te verwijderen pakketnaam is vereist"
 
 #. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:2003
-#, fuzzy
+#: ../client/pk-console.c:2242
 msgid "A destination directory and the package names to download are required"
-msgstr "Een doelmap en dan de namen van te downloaden pakketten zijn vereist."
+msgstr "Een doelmap en dan de namen van te downloaden pakketten zijn vereist"
 
 #. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:2010
+#: ../client/pk-console.c:2249
 msgid "Directory not found"
 msgstr "Map niet gevonden"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2018
+#: ../client/pk-console.c:2257
 msgid "A licence identifier (eula-id) is required"
 msgstr "Een licentie indentificatie (eula-id) is vereis"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2028
+#: ../client/pk-console.c:2267
 msgid "A transaction identifier (tid) is required"
 msgstr "Een transactie indentificatie (tid) is vereist"
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:2045
+#: ../client/pk-console.c:2284
 msgid "A package name to resolve is required"
 msgstr "Een pakketnaam om te gebruiken is vereist"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:2054 ../client/pk-console.c:2063
+#: ../client/pk-console.c:2293 ../client/pk-console.c:2302
 msgid "A repository name is required"
 msgstr "Een naam van een repository is vereist"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:2072
+#: ../client/pk-console.c:2311
 msgid "A repo name, parameter and value are required"
 msgstr "Een repo naam, parameter en waarde zijn vereist"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:2086
+#: ../client/pk-console.c:2325
 msgid "An action, e.g. 'update-system' is required"
 msgstr "Een actie, b.v. 'update-system' is vereist"
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:2093
+#: ../client/pk-console.c:2332
 msgid "A correct role is required"
 msgstr "Een correcte rol is vereist"
 
 #. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:2100
+#: ../client/pk-console.c:2339
 msgid "Failed to get the time since this action was last completed"
 msgstr ""
 "Verkrijgen van de tijd tussen laatste actie en deze actie is niet gelukt"
 
 #. TRANSLATORS: The user did not provide a package name
 #. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:2110 ../client/pk-console.c:2122
-#: ../client/pk-console.c:2131 ../client/pk-console.c:2149
-#: ../client/pk-console.c:2158 ../client/pk-generate-pack.c:241
+#: ../client/pk-console.c:2349 ../client/pk-console.c:2361
+#: ../client/pk-console.c:2370 ../client/pk-console.c:2388
+#: ../client/pk-console.c:2397 ../client/pk-generate-pack.c:241
 msgid "A package name is required"
 msgstr "Een pakketnaam is vereist"
 
 #. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:2140
+#: ../client/pk-console.c:2379
 msgid "A package provide string is required"
 msgstr "Een pakket geleverde string is vereist"
 
 #. TRANSLATORS: The user didn't specify a filename to create as a list
-#: ../client/pk-console.c:2167
+#: ../client/pk-console.c:2406
 msgid "A list file name to create is required"
 msgstr "Een lijstbestandsnaam om aan te maken is vereist"
 
 #. TRANSLATORS: The user didn't specify a filename to open as a list
-#: ../client/pk-console.c:2177 ../client/pk-console.c:2187
+#: ../client/pk-console.c:2416 ../client/pk-console.c:2426
 msgid "A list file to open is required"
 msgstr "Een lijstbestand om te open is vereist"
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:2241
+#: ../client/pk-console.c:2480
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "Optie '%s' wordt niet ondersteund"
 
 #. TRANSLATORS: User does not have permission to do this
-#: ../client/pk-console.c:2254
+#: ../client/pk-console.c:2493
 msgid "Incorrect privileges for this operation"
 msgstr "Onjuiste privileges voor deze operatie"
 
 #. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:2257
+#: ../client/pk-console.c:2496
 msgid "Command failed"
 msgstr "Opdracht mislukt"
 
@@ -815,7 +860,7 @@ msgstr "PackageKit-monitor"
 
 #: ../client/pk-monitor.c:183
 msgid "Cannot show the list of transactions"
-msgstr ""
+msgstr "Kan de lijst van transacties niet laten zien"
 
 #. TRANSLATORS: The package was not found in any software sources
 #: ../client/pk-tools-common.c:118
@@ -895,24 +940,22 @@ msgstr "Aan het installeren......"
 #. TRANSLATORS: downloading repo data so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:349
 msgid "Downloading details about the software sources."
-msgstr ""
+msgstr "Download details over de software bronnen."
 
 #. TRANSLATORS: downloading file lists so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:353
 msgid "Downloading filelists (this may take some time to complete)."
-msgstr ""
+msgstr "Bestands lijsten downloaden (dit kan enige tijd duren)."
 
 #. TRANSLATORS: waiting for native lock
 #: ../contrib/command-not-found/pk-command-not-found.c:357
-#, fuzzy
 msgid "Waiting for package manager lock."
-msgstr "Pakketnaam wordt opgezocht."
+msgstr "Wachten op pakket beheerder blokkering."
 
 #. TRANSLATORS: loading package cache so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:361
-#, fuzzy
 msgid "Loading list of packages."
-msgstr "Pakketten aan het downloaden"
+msgstr "Lijst van pakketten downloaden."
 
 #. TRANSLATORS: we failed to find the package, this shouldn't happen
 #: ../contrib/command-not-found/pk-command-not-found.c:420
@@ -985,286 +1028,276 @@ msgstr "Kies alstublieft een pakket om te installeren"
 
 #. TRANSLATORS: we are starting to install the packages
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:187
-#, fuzzy
 msgid "Starting install"
-msgstr "Te installeren"
+msgstr "Installeren starten"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:397
-#, fuzzy, c-format
+#, c-format
 msgid "Failed to find the package %s, or already installed: %s"
-msgstr "Het pakket %s is reeds geïnstalleerd"
+msgstr "Pakket %s vinden is mislukt, of is reeds geïnstalleerd: %s"
 
 #. command line argument, simulate what would be done, but don't actually do it
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:553
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:552
 msgid ""
 "Don't actually install any packages, only simulate what would be installed"
 msgstr ""
+"Ik installeer geen pakketten, ik simuleer alleen maar wat geïinstallerd moet "
+"worden"
 
 #. command line argument, do we skip packages that depend on the ones specified
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:556
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:555
 msgid "Do not install dependencies of the core packages"
-msgstr ""
+msgstr "Installeer geen afhankelijkheden van de kern pakketten"
 
 #. command line argument, do we operate quietly
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:559
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:558
 msgid "Do not display information or progress"
-msgstr ""
+msgstr "Laat geen informatie zien over de voortgang"
 
 #. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:577
-#, fuzzy
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:576
 msgid "PackageKit Debuginfo Installer"
-msgstr "PackageKit console-interface"
+msgstr "PackageKit debuginfo installer"
 
 #. TRANSLATORS: the use needs to specify a list of package names on the command line
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:589
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:588
+#, c-format
 msgid "ERROR: Specify package names to install."
-msgstr "Er hoeven geen nieuwe pakketten te worden toegevoegd"
+msgstr "FOUT: Specificeer de te installeren pakket namen."
 
 #. TRANSLATORS: we are getting the list of repositories
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:623
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:622
+#, c-format
 msgid "Getting sources list"
-msgstr "Ophalen Pakketlijst"
+msgstr "Ophalen bronnen lijst"
 
 #. TRANSLATORS: all completed 100%
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:641
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:681
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:716
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:800
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:844
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:911
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:955
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:640
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:680
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:715
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:799
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:843
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:910
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:954
 #, c-format
 msgid "OK."
-msgstr ""
+msgstr "OK."
 
 #. TRANSLATORS: tell the user what we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:644
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:643
 #, c-format
 msgid "Found %i enabled and %i disabled sources."
-msgstr ""
+msgstr "Vond %i aangezette en %i uitgezette bronnen."
 
 #. TRANSLATORS: we're finding repositories that match out pattern
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:651
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:650
 #, c-format
 msgid "Finding debugging sources"
-msgstr ""
+msgstr "Zoeken naar debug bronnen"
 
 #. TRANSLATORS: tell the user what we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:684
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:683
 #, c-format
 msgid "Found %i disabled debuginfo repos."
-msgstr ""
+msgstr "Vond %i uitgezette debuginfo repo's"
 
 #. TRANSLATORS: we're now enabling all the debug sources we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:691
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:690
 #, c-format
 msgid "Enabling debugging sources"
-msgstr ""
+msgstr "Debug bronnen aanzetten"
 
 #. TRANSLATORS: operation was not successful
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:701
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:785
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:829
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:896
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:940
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:700
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:784
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:828
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:895
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:939
 msgid "FAILED."
-msgstr ""
+msgstr "MISLUKT."
 
 #. TRANSLATORS: tell the user how many we enabled
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:719
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:718
 #, c-format
 msgid "Enabled %i debugging sources."
-msgstr ""
+msgstr "%i debug bronnen aangezet."
 
 #. TRANSLATORS: we're now finding packages that match in all the repos
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:726
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:725
+#, c-format
 msgid "Finding debugging packages"
-msgstr "Pakketnaam wordt opgezocht."
+msgstr "Zoeken naar debug pakketten"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:738
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:737
+#, c-format
 msgid "Failed to find the package %s: %s"
-msgstr "Pakket '%s' niet gevonden: %s"
+msgstr "Pakket %s vinden mislukte: %s"
 
 #. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:761
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:760
+#, c-format
 msgid "Failed to find the debuginfo package %s: %s"
-msgstr "Pakket '%s' niet gevonden: %s"
+msgstr "Debug info pakket %s niet gevonden: %s"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:789
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:788
+#, c-format
 msgid "Found no packages to install."
-msgstr "Er hoeven geen nieuwe pakketten te worden toegevoegd"
+msgstr "Geen pakketten gevonden om te installeren."
 
 #. TRANSLATORS: tell the user we found some packages, and then list them
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:802
+#, c-format
 msgid "Found %i packages:"
-msgstr "Pakketten aan het downloaden"
+msgstr "Vond %i pakketten:"
 
 #. TRANSLATORS: tell the user we are searching for deps
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:819
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:818
 #, c-format
 msgid "Finding packages that depend on these packages"
-msgstr ""
+msgstr "Zoeken naar pakketten die afhangen van deze pakketten"
 
 #. TRANSLATORS: could not install, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:832
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:831
+#, c-format
 msgid "Could not find dependant packages: %s"
-msgstr "Pakket '%s' niet gevonden: %s"
+msgstr "Kon geen afhankelijke pakketten vinden: %s"
 
 #. TRANSLATORS: tell the user we found some more packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:847
 #, c-format
 msgid "Found %i extra packages."
-msgstr ""
+msgstr "Vond %i extra pakketten."
 
 #. TRANSLATORS: tell the user we found some more packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:852
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:851
+#, c-format
 msgid "No extra packages required."
-msgstr "Een pakketnaam is vereist"
+msgstr "Geen extra pakketten vereist."
 
 #. TRANSLATORS: tell the user we found some packages (and deps), and then list them
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:861
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
+#, c-format
 msgid "Found %i packages to install:"
-msgstr "Er hoeven geen nieuwe pakketten te worden toegevoegd"
+msgstr "Vond %i pakketten om te installeren:"
 
 #. TRANSLATORS: simulate mode is a testing mode where we quit before the action
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:874
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:873
+#, c-format
 msgid "Not installing packages in simulate mode"
-msgstr "Pakketten installeren"
+msgstr "Pakketten niet installeren in de simulatie mode"
 
 #. TRANSLATORS: could not install, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:899
-#, fuzzy, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:898
+#, c-format
 msgid "Could not install packages: %s"
-msgstr "Dit programma kon niet het pakket %s installeren."
+msgstr "Kon pakketen %s  niet installeren."
 
 #. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:931
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:930
 #, c-format
 msgid "Disabling sources previously enabled"
-msgstr ""
+msgstr "Uitzetten van bronnen die eerst aangezet waren"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:943
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:942
 #, c-format
 msgid "Could not disable the debugging sources: %s"
-msgstr ""
+msgstr "Kon de debug bronnen %s niet uitzetten"
 
 #. TRANSLATORS: we disabled all the debugging repos that we enabled before
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:958
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:957
 #, c-format
 msgid "Disabled %i debugging sources."
-msgstr ""
+msgstr "%i debug bronnen uitgezet."
 
 #. TRANSLATORS: couldn't open device to write
 #: ../contrib/device-rebind/pk-device-rebind.c:61
-#, fuzzy
 msgid "Failed to open file"
-msgstr "Zoeken naar bestand niet gelukt"
+msgstr "Bestand openen niet gelukt"
 
 #. TRANSLATORS: could not write to the device
 #: ../contrib/device-rebind/pk-device-rebind.c:70
-#, fuzzy
 msgid "Failed to write to the file"
-msgstr "Zoeken naar bestand niet gelukt"
+msgstr "Naar bestand schrijven niet gelukt"
 
 #. TRANSLATORS: we failed to release the current driver
 #: ../contrib/device-rebind/pk-device-rebind.c:110
 #: ../contrib/device-rebind/pk-device-rebind.c:147
-#, fuzzy
 msgid "Failed to write to device"
-msgstr "Vastleggen op schijf niet gelukt"
+msgstr "Naar schijf schrijven niet gelukt"
 
 #. TRANSLATORS: the device could not be found in sysfs
 #: ../contrib/device-rebind/pk-device-rebind.c:175
-#, fuzzy
 msgid "Device could not be found"
-msgstr "Het pakket kon niet worden gevonden"
+msgstr "Schijf kon niet gevonden worden"
 
 #. TRANSLATORS: we failed to release the current driver
 #: ../contrib/device-rebind/pk-device-rebind.c:202
-#, fuzzy
 msgid "Failed to unregister driver"
-msgstr "Aanmaken map mislukt:"
+msgstr "Driver uitschrijven mislukte"
 
 #. TRANSLATORS: we failed to bind the old driver
 #: ../contrib/device-rebind/pk-device-rebind.c:211
-#, fuzzy
 msgid "Failed to register driver"
-msgstr "Aanmaken map mislukt:"
+msgstr "Driver inschrijven mislukte"
 
 #. TRANSLATORS: user did not specify a device sysfs path that exists
 #: ../contrib/device-rebind/pk-device-rebind.c:260
-#, fuzzy
 msgid "Device path not found"
-msgstr "Map niet gevonden"
+msgstr "Device pad niet gevonden"
 
 #. TRANSLATORS: user did not specify a valid device sysfs path
 #: ../contrib/device-rebind/pk-device-rebind.c:268
 msgid "Incorrect device path specified"
-msgstr ""
+msgstr "Onjuist device pad opgegeven"
 
 #. command line argument, simulate what would be done, but don't actually do it
 #: ../contrib/device-rebind/pk-device-rebind.c:296
 msgid "Don't actually touch the hardware, only simulate what would be done"
-msgstr ""
+msgstr "Ik raak de hardware niet aan, ik simuleer alleen wat er zou gebeuren"
 
 #. TRANSLATORS: command line option: a list of files to install
 #: ../contrib/device-rebind/pk-device-rebind.c:299
 msgid "Device paths"
-msgstr ""
+msgstr "Device paden"
 
 #. TRANSLATORS: tool that gets called when the device needs reloading after installing firmware
 #: ../contrib/device-rebind/pk-device-rebind.c:314
-#, fuzzy
 msgid "PackageKit Device Reloader"
-msgstr "PackageKit-servicepack"
+msgstr "PackageKit device herlader"
 
 #. TRANSLATORS: user did not specify a valid device sysfs path
 #: ../contrib/device-rebind/pk-device-rebind.c:322
 msgid "You need to specify at least one valid device path"
-msgstr ""
+msgstr "Je moet tenminste een geldig device pad opgeven"
 
 #. TRANSLATORS: user did not specify a valid device sysfs path
 #: ../contrib/device-rebind/pk-device-rebind.c:332
 msgid "This script can only be used by the root user"
-msgstr ""
+msgstr "Dit script kan alleen door de root gebruiker gebruikt worden"
 
 #. TRANSLATORS: we're going to verify the path first
 #: ../contrib/device-rebind/pk-device-rebind.c:341
 msgid "Verifying device path"
-msgstr ""
+msgstr "Verifiëren van device pad"
 
 #. TRANSLATORS: user did not specify a device sysfs path that exists
 #: ../contrib/device-rebind/pk-device-rebind.c:346
-#, fuzzy
 msgid "Failed to verify device path"
-msgstr "Zoeken naar bestand niet gelukt"
+msgstr "Device pad verifiëren mislukte"
 
 #. TRANSLATORS: we're going to try
 #: ../contrib/device-rebind/pk-device-rebind.c:360
 msgid "Attempting to rebind device"
-msgstr ""
+msgstr "Probeer opnieuw te berbinden met device"
 
 #. TRANSLATORS: we failed to release the current driver
 #: ../contrib/device-rebind/pk-device-rebind.c:365
-#, fuzzy
 msgid "Failed to rebind device"
-msgstr "Aanmaken map mislukt:"
+msgstr "Opnieuw verbinden met device mislukte"
 
 #: ../data/packagekit-catalog.xml.in.h:1
 msgid "PackageKit Catalog"
@@ -1324,9 +1357,9 @@ msgid "Authentication is required to refresh the system sources"
 msgstr "Authenticatie is vereist om de systeembronnen te vernieuwen"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:15
-#, fuzzy
 msgid "Authentication is required to reload the device with a new driver"
-msgstr "Authenticatie is vereist om de systeembronnen te vernieuwen"
+msgstr ""
+"Authenticatie is vereist om het device te herladen met een nieuwe driver"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:16
 msgid "Authentication is required to remove packages"
@@ -1403,7 +1436,7 @@ msgstr "Herlaad systeembronnen"
 #.
 #: ../policy/org.freedesktop.packagekit.policy.in.h:58
 msgid "Reload a device"
-msgstr ""
+msgstr "Herlaad een device"
 
 #. SECURITY:
 #. - Normal users require admin authentication to remove packages as
@@ -1527,43 +1560,50 @@ msgid "Error trying to start:"
 msgstr "Fout bij het proberen te starten:"
 
 #: ../src/pk-polkit-action-lookup.c:147
-#, fuzzy
 msgid "To install debugging packages, extra sources need to be enabled"
-msgstr "Er hoeven geen nieuwe pakketten te worden toegevoegd"
+msgstr ""
+"Om debug pakketten te installeren, moeten extra bronnen aangezet worden"
 
 #. TRANSLATORS: is not GPG signed
 #: ../src/pk-polkit-action-lookup.c:168 ../src/pk-polkit-action-lookup.c:187
 msgid "The software is not from a trusted source."
-msgstr ""
+msgstr "De software is niet van een vertrouwde bron."
 
 #: ../src/pk-polkit-action-lookup.c:173
 msgid "Do not update this package unless you are sure it is safe to do so."
 msgstr ""
+"Vernieuw dit pakket niet behalve als je zeker weet dat het veilig is om te "
+"doen."
 
 #: ../src/pk-polkit-action-lookup.c:174
 msgid "Do not update these packages unless you are sure it is safe to do so."
 msgstr ""
+"Vernieuw deze pakketten niet behalve als je zeker weet dat het veilig is om "
+"te doen."
 
 #: ../src/pk-polkit-action-lookup.c:192
 msgid "Do not install this package unless you are sure it is safe to do so."
 msgstr ""
+"Installeer dit pakket niet behalve als je zeker weet dat het veilig is om te "
+"doen."
 
 #: ../src/pk-polkit-action-lookup.c:193
 msgid "Do not install these packages unless you are sure it is safe to do so."
 msgstr ""
+"Installeer deze pakketten niet behalve als je zeker weet dat het veilig is "
+"om te doen."
 
 #. TRANSLATORS: warn the user that all bets are off
 #: ../src/pk-polkit-action-lookup.c:199
 msgid "Malicious software can damage your computer or cause other harm."
-msgstr ""
+msgstr "Kwaadwillige software kan je computer beschadigen of ander kwaad doen."
 
 #. TRANSLATORS: too many packages to list each one
 #: ../src/pk-polkit-action-lookup.c:274
-#, fuzzy
 msgid "Many packages"
-msgstr "Pakketten bijwerken"
+msgstr "Vele pakketten"
 
 #. TRANSLATORS: if the transaction is forced to install only trusted packages
 #: ../src/pk-polkit-action-lookup.c:334
 msgid "Only trusted"
-msgstr ""
+msgstr "Alleen vertrouwde"
commit 959bad19ba8fe1c2a2505ecd08581a9789abb26f
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 2 16:17:58 2009 +0100

    trivial: fix build

diff --git a/contrib/command-not-found/Makefile.am b/contrib/command-not-found/Makefile.am
index b3c8843..028b193 100644
--- a/contrib/command-not-found/Makefile.am
+++ b/contrib/command-not-found/Makefile.am
@@ -22,8 +22,8 @@ pk_command_not_found_SOURCES =				\
 	egg-debug.h					\
 	egg-string.c					\
 	egg-string.h					\
-	pk-tools-common.c				\
-	pk-tools-common.h				\
+	pk-text.c					\
+	pk-text.h					\
 	pk-command-not-found.c				\
 	$(NULL)
 
diff --git a/contrib/command-not-found/pk-command-not-found.c b/contrib/command-not-found/pk-command-not-found.c
index 77e4a40..b2cd2c1 100644
--- a/contrib/command-not-found/pk-command-not-found.c
+++ b/contrib/command-not-found/pk-command-not-found.c
@@ -33,7 +33,7 @@
 #include "egg-debug.h"
 #include "egg-string.h"
 
-#include "pk-tools-common.h"
+#include "pk-text.h"
 
 #define PK_MAX_PATH_LEN 1023
 
diff --git a/contrib/command-not-found/pk-text.c b/contrib/command-not-found/pk-text.c
new file mode 120000
index 0000000..d27cefa
--- /dev/null
+++ b/contrib/command-not-found/pk-text.c
@@ -0,0 +1 @@
+../../client/pk-text.c
\ No newline at end of file
diff --git a/contrib/command-not-found/pk-text.h b/contrib/command-not-found/pk-text.h
new file mode 120000
index 0000000..044acfb
--- /dev/null
+++ b/contrib/command-not-found/pk-text.h
@@ -0,0 +1 @@
+../../client/pk-text.h
\ No newline at end of file
diff --git a/contrib/command-not-found/pk-tools-common.c b/contrib/command-not-found/pk-tools-common.c
deleted file mode 120000
index 4afae3b..0000000
--- a/contrib/command-not-found/pk-tools-common.c
+++ /dev/null
@@ -1 +0,0 @@
-../../client/pk-tools-common.c
\ No newline at end of file
diff --git a/contrib/command-not-found/pk-tools-common.h b/contrib/command-not-found/pk-tools-common.h
deleted file mode 120000
index f3e70b0..0000000
--- a/contrib/command-not-found/pk-tools-common.h
+++ /dev/null
@@ -1 +0,0 @@
-../../client/pk-tools-common.h
\ No newline at end of file
commit e27cc043320b4c8625e91c52819dd289f676c12d
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 2 16:06:47 2009 +0100

    glib2: migrate a new version of pkcon to using the glib2 bindings

diff --git a/client/Makefile.am b/client/Makefile.am
index 4a9cf54..cbbad92 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -58,6 +58,38 @@ bin_PROGRAMS =						\
 	pkgenpack					\
 	$(NULL)
 
+# Only build this functionality if we have glib2, and don't yet install it
+if PK_BUILD_GLIB2
+
+PK_GLIB2_LIBS =						\
+	$(top_builddir)/lib/packagekit-glib2/libpackagekit-glib2.la	\
+	$(NULL)
+
+noinst_PROGRAMS = pkcon-test
+
+pkcon_test_SOURCES =					\
+	egg-debug.c					\
+	egg-debug.h					\
+	egg-string.c					\
+	egg-string.h					\
+	pk-console-test.c				\
+	pk-text.c					\
+	pk-text.h					\
+	pk-progress-bar.c				\
+	pk-progress-bar.h				\
+	$(NULL)
+
+pkcon_test_LDADD =					\
+	$(GLIB_LIBS)					\
+	$(DBUS_LIBS)					\
+	$(PK_GLIB2_LIBS)				\
+	$(NULL)
+
+pkcon_test_CFLAGS =					\
+	$(WARNINGFLAGS_C)				\
+	$(NULL)
+endif
+
 pkcon_SOURCES =						\
 	egg-debug.c					\
 	egg-debug.h					\
diff --git a/client/pk-console-test.c b/client/pk-console-test.c
new file mode 100644
index 0000000..179897c
--- /dev/null
+++ b/client/pk-console-test.c
@@ -0,0 +1,2253 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007-2009 Richard Hughes <richard at 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 <string.h>
+#include <unistd.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <glib/gi18n.h>
+#include <packagekit-glib2/packagekit.h>
+#include <sys/types.h>
+#include <pwd.h>
+#include <locale.h>
+
+#include "egg-debug.h"
+//#include "egg-string.h"
+
+#include "pk-text.h"
+#include "pk-progress-bar.h"
+
+#define PK_EXIT_CODE_SYNTAX_INVALID	3
+#define PK_EXIT_CODE_FILE_NOT_FOUND	4
+
+static GMainLoop *loop = NULL;
+static PkBitfield roles;
+static gboolean is_console = FALSE;
+static gboolean nowait = FALSE;
+static PkControlSync *control = NULL;
+static PkClient *client = NULL;
+PkProgressBar *progressbar = NULL;
+
+/**
+ * pk_strpad:
+ * @data: the input string
+ * @length: the desired length of the output string, with padding
+ *
+ * Returns the text padded to a length with spaces. If the string is
+ * longer than length then a longer string is returned.
+ *
+ * Return value: The padded string
+ **/
+static gchar *
+pk_strpad (const gchar *data, guint length)
+{
+	gint size;
+	guint data_len;
+	gchar *text;
+	gchar *padding;
+
+	if (data == NULL)
+		return g_strnfill (length, ' ');
+
+	/* ITS4: ignore, only used for formatting */
+	data_len = strlen (data);
+
+	/* calculate */
+	size = (length - data_len);
+	if (size <= 0)
+		return g_strdup (data);
+
+	padding = g_strnfill (size, ' ');
+	text = g_strdup_printf ("%s%s", data, padding);
+	g_free (padding);
+	return text;
+}
+
+/**
+ * pk_package_id_get_printable:
+ **/
+static gchar *
+pk_package_id_get_printable (const gchar *package_id)
+{
+	gchar **split = NULL;
+	gchar *value = NULL;
+
+	/* invalid */
+	if (package_id == NULL)
+		goto out;
+
+	/* split */
+	split = g_strsplit (package_id, ";", -1);
+	if (g_strv_length (split) != 4)
+		goto out;
+	value = g_strdup_printf ("%s-%s.%s", split[0], split[1], split[2]);
+out:
+	g_strfreev (split);
+	return value;
+}
+
+/**
+ * pk_console_package_cb:
+ **/
+static void
+pk_console_package_cb (const PkResultItemPackage *obj, gpointer data)
+{
+	gchar *package = NULL;
+	gchar *package_pad = NULL;
+	gchar *info_pad = NULL;
+	gchar **split = NULL;
+
+	/* ignore finished */
+	if (obj->info_enum == PK_INFO_ENUM_FINISHED)
+		goto out;
+
+	/* split */
+	split = g_strsplit (obj->package_id, ";", -1);
+	if (g_strv_length (split) != 4)
+		goto out;
+
+	/* make these all the same length */
+	info_pad = pk_strpad (pk_info_enum_to_text (obj->info_enum), 12);
+
+	/* create printable */
+	package = pk_package_id_get_printable (obj->package_id);
+
+	/* don't pretty print */
+	if (!is_console) {
+		g_print ("%s %s\n", info_pad, package);
+		goto out;
+	}
+
+	/* pad the name-version */
+	package_pad = pk_strpad (package, 40);
+	g_print ("%s\t%s\t%s\n", info_pad, package_pad, obj->summary);
+out:
+	/* free all the data */
+	g_free (package);
+	g_free (package_pad);
+	g_free (info_pad);
+	g_strfreev (split);
+}
+
+/**
+ * pk_console_transaction_cb:
+ **/
+static void
+pk_console_transaction_cb (const PkResultItemTransaction *obj, gpointer user_data)
+{
+	struct passwd *pw;
+	const gchar *role_text;
+	gchar **lines;
+	gchar **parts;
+	guint i, lines_len;
+	gchar *package = NULL;
+
+	role_text = pk_role_enum_to_text (obj->role);
+	/* TRANSLATORS: this is an atomic transaction */
+	g_print ("%s: %s\n", _("Transaction"), obj->tid);
+	/* TRANSLATORS: this is the time the transaction was started in system timezone */
+	g_print (" %s: %s\n", _("System time"), obj->timespec);
+	/* TRANSLATORS: this is if the transaction succeeded or not */
+	g_print (" %s: %s\n", _("Succeeded"), obj->timespec ? _("True") : _("False"));
+	/* TRANSLATORS: this is the transactions role, e.g. "update-system" */
+	g_print (" %s: %s\n", _("Role"), role_text);
+
+	/* only print if not null */
+	if (obj->duration > 0) {
+		/* TRANSLATORS: this is The duration of the transaction */
+		g_print (" %s: %i %s\n", _("Duration"), obj->duration, _("(seconds)"));
+	}
+
+	/* TRANSLATORS: this is The command line used to do the action */
+	g_print (" %s: %s\n", _("Command line"), obj->cmdline);
+	/* TRANSLATORS: this is the user ID of the user that started the action */
+	g_print (" %s: %i\n", _("User ID"), obj->uid);
+
+	/* query real name */
+	pw = getpwuid (obj->uid);
+	if (pw != NULL) {
+		if (pw->pw_name != NULL) {
+			/* TRANSLATORS: this is the username, e.g. hughsie */
+			g_print (" %s: %s\n", _("Username"), pw->pw_name);
+		}
+		if (pw->pw_gecos != NULL) {
+			/* TRANSLATORS: this is the users real name, e.g. "Richard Hughes" */
+			g_print (" %s: %s\n", _("Real name"), pw->pw_gecos);
+		}
+	}
+
+	/* TRANSLATORS: these are packages touched by the transaction */
+	lines = g_strsplit (obj->data, "\n", -1);
+	lines_len = g_strv_length (lines);
+	if (lines_len > 0)
+		g_print (" %s\n", _("Affected packages:"));
+	else
+		g_print (" %s\n", _("Affected packages: None"));
+	for (i=0; i<lines_len; i++) {
+		parts = g_strsplit (lines[i], "\t", 3);
+
+		/* create printable */
+		package = pk_package_id_get_printable (parts[1]);
+		g_print (" - %s %s", parts[0], package);
+		g_free (package);
+		g_strfreev (parts);
+	}
+	g_strfreev (lines);
+}
+#if 0
+
+/**
+ * pk_console_print_deps_list_info:
+ **/
+static guint
+pk_console_print_deps_list_info (PkPackageSack *list, PkInfoEnum info, const gchar *header)
+{
+	const PkResultItemPackage *obj;
+	gboolean ret = FALSE;
+	guint found = 0;
+	guint i;
+	guint length;
+
+	length = pk_package_list_get_size (list);
+	for (i=0; i<length; i++) {
+		obj = pk_package_list_get_obj (list, i);
+
+		/* are we interested in this type */
+		if (obj->info != info)
+			continue;
+
+		/* is this package already local */
+		if (g_strcmp0 (obj->id->data, "local") == 0)
+			continue;
+
+		/* print header if it's not been done before */
+		if (!ret) {
+			g_print ("%s\n", header);
+			ret = TRUE;
+		}
+
+		/* print package */
+		g_print ("%i\t%s\n", ++found, package);
+	}
+	return found;
+}
+
+/**
+ * pk_console_print_deps_list:
+ **/
+static guint
+pk_console_print_deps_list (PkPackageSack *list)
+{
+	guint found = 0;
+
+	/* TRANSLATORS: When processing, we might have to remove other dependencies */
+	found += pk_console_print_deps_list_info (list, PK_INFO_ENUM_REMOVING, _("The following packages have to be removed:"));
+
+	/* TRANSLATORS: When processing, we might have to install other dependencies */
+	found += pk_console_print_deps_list_info (list, PK_INFO_ENUM_INSTALLING, _("The following packages have to be installed:"));
+
+	/* TRANSLATORS: When processing, we might have to update other dependencies */
+	found += pk_console_print_deps_list_info (list, PK_INFO_ENUM_UPDATING, _("The following packages have to be updated:"));
+
+	/* TRANSLATORS: When processing, we might have to reinstall other dependencies */
+	found += pk_console_print_deps_list_info (list, PK_INFO_ENUM_REINSTALLING, _("The following packages have to be reinstalled:"));
+
+	/* TRANSLATORS: When processing, we might have to downgrade other dependencies */
+	found += pk_console_print_deps_list_info (list, PK_INFO_ENUM_DOWNGRADING, _("The following packages have to be downgraded:"));
+
+	return found;
+}
+#endif
+
+/**
+ * pk_console_distro_upgrade_cb:
+ **/
+static void
+pk_console_distro_upgrade_cb (const PkResultItemDistroUpgrade *obj, gpointer user_data)
+{
+	/* TRANSLATORS: this is the distro, e.g. Fedora 10 */
+	g_print ("%s: %s\n", _("Distribution"), obj->name);
+	/* TRANSLATORS: this is type of update, stable or testing */
+	g_print (" %s: %s\n", _("Type"), pk_update_state_enum_to_text (obj->state));
+	/* TRANSLATORS: this is any summary text describing the upgrade */
+	g_print (" %s: %s\n", _("Summary"), obj->summary);
+}
+
+/**
+ * pk_console_category_cb:
+ **/
+static void
+pk_console_category_cb (const PkResultItemCategory *obj, gpointer user_data)
+{
+	/* TRANSLATORS: this is the group category name */
+	g_print ("%s: %s\n", _("Category"), obj->name);
+	/* TRANSLATORS: this is group identifier */
+	g_print (" %s: %s\n", _("ID"), obj->cat_id);
+	if (obj->parent_id != NULL) {
+		/* TRANSLATORS: this is the parent group */
+		g_print (" %s: %s\n", _("Parent"), obj->parent_id);
+	}
+	/* TRANSLATORS: this is the name of the parent group */
+	g_print (" %s: %s\n", _("Name"), obj->name);
+	if (obj->summary != NULL) {
+		/* TRANSLATORS: this is the summary of the group */
+		g_print (" %s: %s\n", _("Summary"), obj->summary);
+	}
+	/* TRANSLATORS: this is preferred icon for the group */
+	g_print (" %s: %s\n", _("Icon"), obj->icon);
+}
+
+/**
+ * pk_console_update_detail_cb:
+ **/
+static void
+pk_console_update_detail_cb (const PkResultItemUpdateDetail *detail, gpointer data)
+{
+	gchar *issued;
+	gchar *updated;
+	gchar *package = NULL;
+
+	/* TRANSLATORS: this is a header for the package that can be updated */
+	g_print ("%s\n", _("Details about the update:"));
+
+	/* create printable */
+	package = pk_package_id_get_printable (detail->package_id);
+
+	/* TRANSLATORS: details about the update, package name and version */
+	g_print (" %s: %s\n", _("Package"), package);
+	if (detail->updates != NULL) {
+		/* TRANSLATORS: details about the update, any packages that this update updates */
+		g_print (" %s: %s\n", _("Updates"), detail->updates);
+	}
+	if (detail->obsoletes != NULL) {
+		/* TRANSLATORS: details about the update, any packages that this update obsoletes */
+		g_print (" %s: %s\n", _("Obsoletes"), detail->obsoletes);
+	}
+	if (detail->vendor_url != NULL) {
+		/* TRANSLATORS: details about the update, the vendor URLs */
+		g_print (" %s: %s\n", _("Vendor"), detail->vendor_url);
+	}
+	if (detail->bugzilla_url != NULL) {
+		/* TRANSLATORS: details about the update, the bugzilla URLs */
+		g_print (" %s: %s\n", _("Bugzilla"), detail->bugzilla_url);
+	}
+	if (detail->cve_url != NULL) {
+		/* TRANSLATORS: details about the update, the CVE URLs */
+		g_print (" %s: %s\n", _("CVE"), detail->cve_url);
+	}
+	if (detail->restart_enum != PK_RESTART_ENUM_NONE) {
+		/* TRANSLATORS: details about the update, if the package requires a restart */
+		g_print (" %s: %s\n", _("Restart"), pk_restart_enum_to_text (detail->restart_enum));
+	}
+	if (detail->update_text != NULL) {
+		/* TRANSLATORS: details about the update, any description of the update */
+		g_print (" %s: %s\n", _("Update text"), detail->update_text);
+	}
+	if (detail->changelog != NULL) {
+		/* TRANSLATORS: details about the update, the changelog for the package */
+		g_print (" %s: %s\n", _("Changes"), detail->changelog);
+	}
+	if (detail->state_enum != PK_UPDATE_STATE_ENUM_UNKNOWN) {
+		/* TRANSLATORS: details about the update, the ongoing state of the update */
+		g_print (" %s: %s\n", _("State"), pk_update_state_enum_to_text (detail->state_enum));
+	}
+	issued = pk_iso8601_from_date (detail->issued);
+	if (issued != NULL) {
+		/* TRANSLATORS: details about the update, date the update was issued */
+		g_print (" %s: %s\n", _("Issued"), issued);
+	}
+	updated = pk_iso8601_from_date (detail->updated);
+	if (updated != NULL) {
+		/* TRANSLATORS: details about the update, date the update was updated */
+		g_print (" %s: %s\n", _("Updated"), updated);
+	}
+	g_free (issued);
+	g_free (updated);
+	g_free (package);
+}
+
+/**
+ * pk_console_repo_detail_cb:
+ **/
+static void
+pk_console_repo_detail_cb (const PkResultItemRepoDetail *obj, gpointer data)
+{
+	gchar *enabled_pad;
+	gchar *repo_pad;
+
+	if (obj->enabled) {
+		/* TRANSLATORS: if the repo is enabled */
+		enabled_pad = pk_strpad (_("Enabled"), 10);
+	} else {
+		/* TRANSLATORS: if the repo is disabled */
+		enabled_pad = pk_strpad (_("Disabled"), 10);
+	}
+
+	repo_pad = pk_strpad (obj->repo_id, 25);
+	g_print (" %s %s %s\n", enabled_pad, repo_pad, obj->description);
+	g_free (enabled_pad);
+	g_free (repo_pad);
+}
+
+/**
+ * pk_console_require_restart_cb:
+ **/
+static void
+pk_console_require_restart_cb (const PkResultItemRequireRestart *obj, gpointer data)
+{
+	gchar *package = NULL;
+
+	/* create printable */
+	package = pk_package_id_get_printable (obj->package_id);
+
+	if (obj->restart == PK_RESTART_ENUM_SYSTEM) {
+		/* TRANSLATORS: a package requires the system to be restarted */
+		g_print ("%s %s\n", _("System restart required by:"), package);
+	} else if (obj->restart == PK_RESTART_ENUM_SESSION) {
+		/* TRANSLATORS: a package requires the session to be restarted */
+		g_print ("%s %s\n", _("Session restart required:"), package);
+	} else if (obj->restart == PK_RESTART_ENUM_SECURITY_SYSTEM) {
+		/* TRANSLATORS: a package requires the system to be restarted due to a security update*/
+		g_print ("%s %s\n", _("System restart (security) required by:"), package);
+	} else if (obj->restart == PK_RESTART_ENUM_SECURITY_SESSION) {
+		/* TRANSLATORS: a package requires the session to be restarted due to a security update */
+		g_print ("%s %s\n", _("Session restart (security) required:"), package);
+	} else if (obj->restart == PK_RESTART_ENUM_APPLICATION) {
+		/* TRANSLATORS: a package requires the application to be restarted */
+		g_print ("%s %s\n", _("Application restart required by:"), package);
+	}
+	g_free (package);
+}
+
+/**
+ * pk_console_details_cb:
+ **/
+static void
+pk_console_details_cb (const PkResultItemDetails *obj, gpointer data)
+{
+	gchar *package = NULL;
+
+	/* create printable */
+	package = pk_package_id_get_printable (obj->package_id);
+
+	/* TRANSLATORS: This a list of details about the package */
+	g_print ("%s\n", _("Package description"));
+	g_print ("  package:     %s\n", package);
+	g_print ("  license:     %s\n", obj->license);
+	g_print ("  group:       %s\n", pk_group_enum_to_text (obj->group_enum));
+	g_print ("  description: %s\n", obj->description);
+	g_print ("  size:        %lu bytes\n", (long unsigned int) obj->size);
+	g_print ("  url:         %s\n", obj->url);
+
+	g_free (package);
+}
+
+/**
+ * pk_console_message_cb:
+ **/
+static void
+pk_console_message_cb (const PkResultItemMessage *obj, gpointer data)
+{
+	/* TRANSLATORS: This a message (like a little note that may be of interest) from the transaction */
+	g_print ("%s %s: %s\n", _("Message:"), pk_message_enum_to_text (obj->message), obj->details);
+}
+
+/**
+ * pk_console_files_cb:
+ **/
+static void
+pk_console_files_cb (PkResultItemFiles *obj, gpointer data)
+{
+	guint i;
+#if 0
+	PkRoleEnum role;
+
+	/* don't print if we are DownloadPackages */
+	pk_client_get_role (client, &role, NULL, NULL);
+	if (role == PK_ROLE_ENUM_DOWNLOAD_PACKAGES) {
+		egg_debug ("ignoring ::files");
+		return;
+	}
+#endif
+	/* empty */
+	if (obj->files == NULL || obj->files[0] == NULL) {
+		/* TRANSLATORS: This where the package has no files */
+		g_print ("%s\n", _("No files"));
+		return;
+	}
+
+	/* TRANSLATORS: This a list files contained in the package */
+	g_print ("%s\n", _("Package files"));
+	for (i=0; obj->files[i] != NULL; i++) {
+		g_print ("  %s\n", obj->files[i]);
+	}
+}
+
+/**
+ * pk_console_repo_signature_required_cb:
+ **/
+static void
+pk_console_repo_signature_required_cb (const PkResultItemRepoSignatureRequired *obj, gpointer data)
+{
+//	gboolean import;
+//	gboolean ret;
+//	GError *error = NULL;
+	gchar *package = NULL;
+
+	/* create printable */
+	package = pk_package_id_get_printable (obj->package_id);
+
+	/* TRANSLATORS: This a request for a GPG key signature from the backend, which the client will prompt for later */
+	g_print ("%s\n", _("Repository signature required"));
+	g_print ("Package:     %s\n", package);
+	g_print ("Name:        %s\n", obj->repository_name);
+	g_print ("URL:         %s\n", obj->key_url);
+	g_print ("User:        %s\n", obj->key_userid);
+	g_print ("ID:          %s\n", obj->key_id);
+	g_print ("Fingerprint: %s\n", obj->key_fingerprint);
+	g_print ("Timestamp:   %s\n", obj->key_timestamp);
+
+#if 0
+	/* TRANSLATORS: This a prompt asking the user to import the security key */
+	import = pk_console_get_prompt (_("Do you accept this signature?"), FALSE);
+	if (!import) {
+		need_requeue = FALSE;
+		/* TRANSLATORS: This is where the user declined the security key */
+		g_print ("%s\n", _("The signature was not accepted."));
+		return;
+	}
+
+	/* install signature */
+	egg_debug ("install signature %s", key_id);
+	ret = pk_client_install_signature (client_secondary, PK_SIGTYPE_ENUM_GPG,
+					   key_id, package_id, &error);
+	/* we succeeded, so wait for the requeue */
+	if (!ret) {
+		egg_warning ("failed to install signature: %s", error->message);
+		g_error_free (error);
+		return;
+	}
+#endif
+
+	g_free (package);
+}
+
+/**
+ * pk_console_eula_required_cb:
+ **/
+static void
+pk_console_eula_required_cb (const PkResultItemEulaRequired *obj, gpointer data)
+{
+//	gboolean import;
+//	gboolean ret;
+//	GError *error = NULL;
+	gchar *package = NULL;
+
+	/* create printable */
+	package = pk_package_id_get_printable (obj->package_id);
+
+	/* TRANSLATORS: This a request for a EULA */
+	g_print ("%s\n", _("End user license agreement required"));
+	g_print ("Eula:        %s\n", obj->eula_id);
+	g_print ("Package:     %s\n", package);
+	g_print ("Vendor:      %s\n", obj->vendor_name);
+	g_print ("Agreement:   %s\n", obj->license_agreement);
+
+#if 0
+	/* TRANSLATORS: This a prompt asking the user to agree to the license */
+	import = pk_console_get_prompt (_("Do you agree to this license?"), FALSE);
+	if (!import) {
+		need_requeue = FALSE;
+		/* TRANSLATORS: This is where the user declined the license */
+		g_print ("%s\n", _("The license was refused."));
+		return;
+	}
+
+	/* accept eula */
+	egg_debug ("accept eula %s", eula_id);
+	ret = pk_client_accept_eula (client_secondary, eula_id, &error);
+	/* we succeeded, so wait for the requeue */
+	if (!ret) {
+		egg_warning ("failed to accept eula: %s", error->message);
+		g_error_free (error);
+		return;
+	}
+
+	/* we accepted eula */
+	need_requeue = TRUE;
+#endif
+
+	g_free (package);
+}
+
+#if 0
+/**
+ * pk_console_finished_cb:
+ **/
+static void
+pk_console_finished_cb (PkExitEnum exit_enum, guint runtime, gpointer data)
+{
+	PkRoleEnum role;
+	const gchar *role_text;
+	gfloat time_s;
+	PkRestartEnum restart;
+	gboolean ret;
+	GError *error = NULL;
+
+	pk_client_get_role (client, &role, NULL, NULL);
+
+	role_text = pk_role_enum_to_text (role);
+	time_s = (gfloat) runtime / 1000.0;
+
+	/* do we need to new line? */
+	egg_debug ("%s runtime was %.1f seconds", role_text, time_s);
+
+	/* is there any restart to notify the user? */
+	restart = pk_client_get_require_restart (client);
+	if (restart == PK_RESTART_ENUM_SYSTEM) {
+		/* TRANSLATORS: a package needs to restart their system */
+		g_print ("%s\n", _("Please restart the computer to complete the update."));
+	} else if (restart == PK_RESTART_ENUM_SESSION) {
+		/* TRANSLATORS: a package needs to restart the session */
+		g_print ("%s\n", _("Please logout and login to complete the update."));
+	} else if (restart == PK_RESTART_ENUM_APPLICATION) {
+		/* TRANSLATORS: a package needs to restart the application */
+		g_print ("%s\n", _("Please restart the application as it is being used."));
+	} else if (restart == PK_RESTART_ENUM_SECURITY_SYSTEM) {
+		/* TRANSLATORS: a package needs to restart their system (due to security) */
+		g_print ("%s\n", _("Please restart the computer to complete the update as important security updates have been installed."));
+	} else if (restart == PK_RESTART_ENUM_SECURITY_SESSION) {
+		/* TRANSLATORS: a package needs to restart the session (due to security) */
+		g_print ("%s\n", _("Please logout and login to complete the update as important security updates have been installed."));
+	}
+
+	/* need to handle retry with only_trusted=FALSE */
+	if (exit_enum == PK_EXIT_ENUM_NEED_UNTRUSTED) {
+		egg_debug ("need to handle untrusted");
+
+		/* retry new action with untrusted */
+		pk_client_set_only_trusted (client, FALSE);
+		ret = pk_client_requeue (client, &error);
+		if (!ret) {
+			egg_warning ("Failed to requeue: %s", error->message);
+			g_error_free (error);
+		}
+		return;
+	}
+
+	if ((role == PK_ROLE_ENUM_INSTALL_FILES || role == PK_ROLE_ENUM_INSTALL_PACKAGES) &&
+	    exit_enum == PK_EXIT_ENUM_FAILED && need_requeue) {
+		egg_warning ("waiting for second install file to finish");
+		return;
+	}
+
+	/* have we failed to install, and the gpg key is now installed */
+	if (exit_enum == PK_EXIT_ENUM_KEY_REQUIRED && need_requeue) {
+		egg_debug ("key now installed");
+		return;
+	}
+
+	/* have we failed to install, and the eula key is now installed */
+	if (exit_enum == PK_EXIT_ENUM_EULA_REQUIRED && need_requeue) {
+		egg_debug ("eula now agreed");
+		return;
+	}
+
+	/* close the loop */
+	g_main_loop_quit (loop);
+}
+
+/**
+ * pk_console_perhaps_resolve:
+ **/
+static gchar *
+pk_console_perhaps_resolve (PkBitfield filter, const gchar *package, GError **error)
+{
+	PkPackageSack *list;
+	gchar *package_id = NULL;
+	gboolean valid;
+
+	/* have we passed a complete package_id? */
+	valid = pk_package_id_check (package);
+	if (valid)
+		return g_strdup (package);
+
+	/* get the list of possibles */
+	list = pk_console_resolve (filter, package, error);
+	if (list == NULL)
+		goto out;
+
+	/* else list the options if multiple matches found */
+
+	/* ask the user to select the right one */
+	package_id = pk_console_resolve_package_id (list, error);
+out:
+	if (list != NULL)
+		g_object_unref (list);
+	return package_id;
+}
+
+/**
+ * pk_console_is_installed:
+ **/
+static gboolean
+pk_console_is_installed (const gchar *package)
+{
+	PkPackageSack *list;
+	GError *error;
+	gboolean ret = FALSE;
+
+	/* get the list of possibles */
+	list = pk_console_resolve (pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), package, &error);
+	if (list == NULL) {
+		egg_debug ("not installed: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+	/* true if any installed */
+	ret = PK_OBJ_LIST(list)->len > 0;
+out:
+	if (list != NULL)
+		g_object_unref (list);
+	return ret;
+}
+
+/**
+ * pk_console_install_stuff:
+ **/
+static gboolean
+pk_console_install_stuff (gchar **packages, GError **error)
+{
+	gboolean ret = TRUE;
+	gboolean installed;
+	gboolean is_local;
+	gboolean accept_changes;
+	gchar *package_id = NULL;
+	gchar **package_ids = NULL;
+	gchar **files = NULL;
+	guint i;
+	guint length;
+	PkPackageSack *list;
+	PkPackageSack *list_single;
+	GPtrArray *array_packages;
+	GPtrArray *array_files;
+	GError *error_local = NULL;
+
+	array_packages = g_ptr_array_new ();
+	array_files = g_ptr_array_new ();
+	length = g_strv_length (packages);
+	list = pk_package_list_new ();
+
+	for (i=2; i<length; i++) {
+		/* are we a local file */
+		is_local = g_file_test (packages[i], G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR);
+		if (is_local) {
+			g_ptr_array_add (array_files, g_strdup (packages[i]));
+		} else {
+			/* if already installed, then abort */
+			installed = pk_console_is_installed (packages[i]);
+			if (installed) {
+				/* TRANSLATORS: The package is already installed on the system */
+				*error = g_error_new (1, 0, _("The package %s is already installed"), packages[i]);
+				ret = FALSE;
+				break;
+			}
+			/* try and find a package */
+			package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), packages[i], &error_local);
+			if (package_id == NULL) {
+				/* TRANSLATORS: The package name was not found in any software sources. The detailed error follows */
+				*error = g_error_new (1, 0, _("The package %s could not be installed: %s"), packages[i], error_local->message);
+				g_error_free (error_local);
+				ret = FALSE;
+				break;
+			}
+			g_ptr_array_add (array_packages, package_id);
+		}
+	}
+
+	/* one of the resolves failed */
+	if (!ret) {
+		egg_warning ("resolve failed");
+		goto out;
+	}
+
+	/* any to process? */
+	if (array_packages->len > 0) {
+		/* convert to strv */
+		package_ids = pk_ptr_array_to_strv (array_packages);
+
+		/* can we simulate? */
+		if (pk_bitfield_contain (roles, PK_ROLE_ENUM_SIMULATE_INSTALL_PACKAGES)) {
+			ret = pk_client_reset (client_sync, &error_local);
+			if (!ret) {
+				/* TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows */
+				*error = g_error_new (1, 0, _("Internal error: %s"), error_local->message);
+				g_error_free (error_local);
+				goto out;
+			}
+
+			egg_debug ("Simulating install for %s", package_ids[0]);
+			ret = pk_client_simulate_install_packages (client_sync, package_ids, error);
+			if (!ret) {
+				egg_warning ("failed to simulate a package install");
+				goto out;
+			}
+
+			/* see how many packages there are */
+			list_single = pk_client_get_package_list (client_sync);
+			pk_obj_list_add_list (PK_OBJ_LIST(list), PK_OBJ_LIST(list_single));
+			g_object_unref (list_single);
+
+			/* one of the simulate-install-packages failed */
+			if (!ret)
+				goto out;
+
+			/* if there are no required packages, just do the remove */
+			length = pk_package_list_get_size (list);
+			if (length != 0) {
+
+				/* print the additional deps to the screen */
+				pk_console_print_deps_list (list);
+
+				/* TRANSLATORS: We are checking if it's okay to remove a list of packages */
+				accept_changes = pk_console_get_prompt (_("Proceed with changes?"), FALSE);
+
+				/* we chickened out */
+				if (!accept_changes) {
+					/* TRANSLATORS: There was an error removing the packages. The detailed error follows */
+					*error = g_error_new (1, 0, "%s", _("The package install was canceled!"));
+					ret = FALSE;
+					goto out;
+				}
+			}
+		}
+
+		/* reset */
+		ret = pk_client_reset (client, &error_local);
+		if (!ret) {
+			/* TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows */
+			*error = g_error_new (1, 0, _("Internal error: %s"), error_local->message);
+			g_error_free (error_local);
+			goto out;
+		}
+
+		ret = pk_client_install_packages (client, TRUE, package_ids, &error_local);
+		if (!ret) {
+			/* TRANSLATORS: There was an error installing the packages. The detailed error follows */
+			*error = g_error_new (1, 0, _("This tool could not install the packages: %s"), error_local->message);
+			g_error_free (error_local);
+			goto out;
+		}
+	}
+
+	/* any to process? */
+	if (array_files->len > 0) {
+		/* convert to strv */
+		files = pk_ptr_array_to_strv (array_files);
+
+		/* can we simulate? */
+		if (pk_bitfield_contain (roles, PK_ROLE_ENUM_SIMULATE_INSTALL_FILES)) {
+			ret = pk_client_reset (client_sync, &error_local);
+			if (!ret) {
+				/* TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows */
+				*error = g_error_new (1, 0, _("Internal error: %s"), error_local->message);
+				g_error_free (error_local);
+				goto out;
+			}
+
+			egg_debug ("Simulating install for %s", files[0]);
+			ret = pk_client_simulate_install_files (client_sync, files, error);
+			if (!ret) {
+				egg_warning ("failed to simulate a package install");
+				goto out;
+			}
+
+			/* see how many packages there are */
+			list_single = pk_client_get_package_list (client_sync);
+			pk_obj_list_add_list (PK_OBJ_LIST(list), PK_OBJ_LIST(list_single));
+			g_object_unref (list_single);
+
+			/* one of the simulate-install-files failed */
+			if (!ret)
+				goto out;
+
+			/* if there are no required packages, just do the remove */
+			length = pk_package_list_get_size (list);
+			if (length != 0) {
+
+				/* print the additional deps to the screen */
+				pk_console_print_deps_list (list);
+
+				/* TRANSLATORS: We are checking if it's okay to remove a list of packages */
+				accept_changes = pk_console_get_prompt (_("Proceed with changes?"), FALSE);
+
+				/* we chickened out */
+				if (!accept_changes) {
+					/* TRANSLATORS: There was an error removing the packages. The detailed error follows */
+					*error = g_error_new (1, 0, "%s", _("The package install was canceled!"));
+					ret = FALSE;
+					goto out;
+				}
+			}
+		}
+
+		ret = pk_client_install_files (client, TRUE, files, &error_local);
+		if (!ret) {
+			/* TRANSLATORS: There was an error installing the files. The detailed error follows */
+			*error = g_error_new (1, 0, _("This tool could not install the files: %s"), error_local->message);
+			g_error_free (error_local);
+			goto out;
+		}
+	}
+
+out:
+	g_object_unref (list);
+	g_strfreev (package_ids);
+	g_strfreev (files);
+	g_ptr_array_foreach (array_files, (GFunc) g_free, NULL);
+	g_ptr_array_free (array_files, TRUE);
+	g_ptr_array_foreach (array_packages, (GFunc) g_free, NULL);
+	g_ptr_array_free (array_packages, TRUE);
+	return ret;
+}
+
+/**
+ * pk_console_remove_only:
+ **/
+static gboolean
+pk_console_remove_only (gchar **package_ids, gboolean force, GError **error)
+{
+	gboolean ret;
+
+	egg_debug ("remove+ %s", package_ids[0]);
+	ret = pk_client_reset (client, error);
+	if (!ret)
+		return ret;
+	return pk_client_remove_packages (client, package_ids, force, FALSE, error);
+}
+
+/**
+ * pk_console_remove_packages:
+ **/
+static gboolean
+pk_console_remove_packages (gchar **packages, GError **error)
+{
+	gchar *package_id;
+	gboolean ret = TRUE;
+	guint i;
+	guint length;
+	gboolean remove_deps;
+	GPtrArray *array;
+	gchar **package_ids = NULL;
+	PkPackageSack *list;
+	PkPackageSack *list_single;
+	GError *error_local = NULL;
+
+	array = g_ptr_array_new ();
+	list = pk_package_list_new ();
+	length = g_strv_length (packages);
+	for (i=2; i<length; i++) {
+		package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), packages[i], &error_local);
+		if (package_id == NULL) {
+			/* TRANSLATORS: The package name was not found in the installed list. The detailed error follows */
+			*error = g_error_new (1, 0, _("This tool could not remove %s: %s"), packages[i], error_local->message);
+			g_error_free (error_local);
+			ret = FALSE;
+			break;
+		}
+		g_ptr_array_add (array, g_strdup (package_id));
+		egg_debug ("resolved to %s", package_id);
+		g_free (package_id);
+	}
+
+	/* one of the resolves failed */
+	if (!ret)
+		goto out;
+
+	/* convert to strv */
+	package_ids = pk_ptr_array_to_strv (array);
+
+	/* are we dumb and can't check for requires? */
+	if (!pk_bitfield_contain (roles, PK_ROLE_ENUM_SIMULATE_REMOVE_PACKAGES)) {
+		/* no, just try to remove it without deps */
+		ret = pk_console_remove_only (client, package_ids, FALSE, &error_local);
+		if (!ret) {
+			/* TRANSLATORS: There was an error removing the packages. The detailed error follows */
+			*error = g_error_new (1, 0, _("This tool could not remove the packages: %s"), error_local->message);
+			g_error_free (error_local);
+		}
+		goto out;
+	}
+
+	ret = pk_client_reset (client_sync, &error_local);
+	if (!ret) {
+		/* TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows */
+		*error = g_error_new (1, 0, _("Internal error: %s"), error_local->message);
+		g_error_free (error_local);
+		goto out;
+	}
+
+	egg_debug ("Getting installed requires for %s", package_ids[0]);
+	/* see if any packages require this one */
+	ret = pk_client_simulate_remove_packages (client_sync, package_ids, error);
+	if (!ret) {
+		egg_warning ("failed to simulate a package removal");
+		goto out;
+	}
+
+	/* see how many packages there are */
+	list_single = pk_client_get_package_list (client_sync);
+	pk_obj_list_add_list (PK_OBJ_LIST(list), PK_OBJ_LIST(list_single));
+	g_object_unref (list_single);
+
+	/* one of the simulate-remove-packages failed */
+	if (!ret)
+		goto out;
+
+	/* if there are no required packages, just do the remove */
+	length = pk_package_list_get_size (list);
+	if (length == 0) {
+		egg_debug ("no requires");
+		ret = pk_console_remove_only (client, package_ids, FALSE, &error_local);
+		if (!ret) {
+			/* TRANSLATORS: There was an error removing the packages. The detailed error follows */
+			*error = g_error_new (1, 0, _("This tool could not remove the packages: %s"), error_local->message);
+			g_error_free (error_local);
+		}
+		goto out;
+	}
+
+	/* present this to the user */
+
+	/* print the additional deps to the screen */
+	pk_console_print_deps_list (list);
+
+	/* TRANSLATORS: We are checking if it's okay to remove a list of packages */
+	remove_deps = pk_console_get_prompt (_("Proceed with additional packages?"), FALSE);
+
+	/* we chickened out */
+	if (!remove_deps) {
+		/* TRANSLATORS: There was an error removing the packages. The detailed error follows */
+		*error = g_error_new (1, 0, "%s", _("The package removal was canceled!"));
+		ret = FALSE;
+		goto out;
+	}
+
+	/* remove all the stuff */
+	ret = pk_console_remove_only (client, package_ids, TRUE, &error_local);
+	if (!ret) {
+		/* TRANSLATORS: There was an error removing the packages. The detailed error follows */
+		*error = g_error_new (1, 0, _("This tool could not remove the packages: %s"), error_local->message);
+		g_error_free (error_local);
+	}
+
+out:
+	g_object_unref (list);
+	g_strfreev (package_ids);
+	g_ptr_array_foreach (array, (GFunc) g_free, NULL);
+	g_ptr_array_free (array, TRUE);
+	return ret;
+}
+
+/**
+ * pk_console_download_packages:
+ **/
+static gboolean
+pk_console_download_packages (gchar **packages, const gchar *directory, GError **error)
+{
+	gboolean ret = TRUE;
+	gchar *package_id = NULL;
+	gchar **package_ids = NULL;
+	guint i;
+	guint length;
+	GPtrArray *array_packages;
+	GError *error_local = NULL;
+
+	array_packages = g_ptr_array_new ();
+	length = g_strv_length (packages);
+	for (i=3; i<length; i++) {
+			package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_NONE), packages[i], &error_local);
+			if (package_id == NULL) {
+				/* TRANSLATORS: The package name was not found in any software sources */
+				*error = g_error_new (1, 0, _("This tool could not download the package %s as it could not be found"), packages[i]);
+				g_error_free (error_local);
+				ret = FALSE;
+				break;
+			}
+			g_ptr_array_add (array_packages, package_id);
+		}
+	
+	/* one of the resolves failed */
+	if (!ret) {
+		egg_warning ("resolve failed");
+		goto out;
+	}
+
+	/* any to process? */
+	if (array_packages->len > 0) {
+		/* convert to strv */
+		package_ids = pk_ptr_array_to_strv (array_packages);
+
+		/* reset */
+		ret = pk_client_reset (client, &error_local);
+		if (!ret) {
+			/* TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows */
+			*error = g_error_new (1, 0, _("Internal error: %s"), error_local->message);
+			g_error_free (error_local);
+			goto out;
+		}
+
+		ret = pk_client_download_packages (client, package_ids, directory, error);
+		if (!ret) {
+			/* TRANSLATORS: Could not download the packages for some reason. The detailed error follows */
+			*error = g_error_new (1, 0, _("This tool could not download the packages: %s"), error_local->message);
+			g_error_free (error_local);
+			goto out;
+		}
+	}
+
+out:
+	g_strfreev (package_ids);
+	g_ptr_array_foreach (array_packages, (GFunc) g_free, NULL);
+	g_ptr_array_free (array_packages, TRUE);
+	return ret;
+}
+
+/**
+ * pk_console_update_package:
+ **/
+static gboolean
+pk_console_update_package (const gchar *package, GError **error)
+{
+	gboolean ret;
+	gchar *package_id;
+	gchar **package_ids;
+	guint length;
+	GError *error_local = NULL;
+	gboolean accept_changes;
+	PkPackageSack *list;
+	PkPackageSack *list_single;
+
+	list = pk_package_list_new ();
+	package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), package, &error_local);
+	if (package_id == NULL) {
+		/* TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows */
+		*error = g_error_new (1, 0, _("This tool could not update %s: %s"), package, error_local->message);
+		g_error_free (error_local);
+		return FALSE;
+	}
+	package_ids = pk_package_ids_from_id (package_id);
+
+	/* are we dumb and can't simulate? */
+	if (!pk_bitfield_contain (roles, PK_ROLE_ENUM_SIMULATE_UPDATE_PACKAGES)) {
+		/* no, just try to update it without deps */
+		ret = pk_client_update_packages (client, TRUE, package_ids, error);
+		if (!ret) {
+			/* TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows */
+			*error = g_error_new (1, 0, _("This tool could not update %s: %s"), package, error_local->message);
+			g_error_free (error_local);
+		}
+		goto out;
+	}
+
+	ret = pk_client_reset (client_sync, &error_local);
+	if (!ret) {
+		/* TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows */
+		*error = g_error_new (1, 0, _("Internal error: %s"), error_local->message);
+		g_error_free (error_local);
+		goto out;
+	}
+
+	egg_debug ("Simulating update for %s", package_ids[0]);
+	ret = pk_client_simulate_update_packages (client_sync, package_ids, error);
+	if (!ret) {
+		egg_warning ("failed to simulate a package update");
+		goto out;
+	}
+
+	/* see how many packages there are */
+	list_single = pk_client_get_package_list (client_sync);
+	pk_obj_list_add_list (PK_OBJ_LIST(list), PK_OBJ_LIST(list_single));
+	g_object_unref (list_single);
+
+	/* one of the simulate-update-packages failed */
+	if (!ret)
+		goto out;
+
+	/* if there are no required packages, just do the remove */
+	length = pk_package_list_get_size (list);
+	if (length != 0) {
+
+		/* print the additional deps to the screen */
+		pk_console_print_deps_list (list);
+
+		/* TRANSLATORS: We are checking if it's okay to remove a list of packages */
+		accept_changes = pk_console_get_prompt (_("Proceed with changes?"), FALSE);
+
+		/* we chickened out */
+		if (!accept_changes) {
+			/* TRANSLATORS: There was an error removing the packages. The detailed error follows */
+			*error = g_error_new (1, 0, "%s", _("The package update was canceled!"));
+			ret = FALSE;
+			goto out;
+		}
+	}
+
+	ret = pk_client_update_packages (client, TRUE, package_ids, error);
+	if (!ret) {
+		/* TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows */
+		*error = g_error_new (1, 0, _("This tool could not update %s: %s"), package, error_local->message);
+		g_error_free (error_local);
+	}
+out:
+	g_object_unref (list);
+	g_strfreev (package_ids);
+	g_free (package_id);
+	return ret;
+}
+
+/**
+ * pk_console_get_requires:
+ **/
+static gboolean
+pk_console_get_requires (PkBitfield filters, const gchar *package, GError **error)
+{
+	gboolean ret;
+	gchar *package_id;
+	gchar **package_ids;
+	GError *error_local = NULL;
+
+	package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_NONE), package, &error_local);
+	if (package_id == NULL) {
+		/* TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows */
+		*error = g_error_new (1, 0, _("This tool could not get the requirements for %s: %s"), package, error_local->message);
+		g_error_free (error_local);
+		return FALSE;
+	}
+	package_ids = pk_package_ids_from_id (package_id);
+	ret = pk_client_get_requires (client, filters, package_ids, TRUE, &error_local);
+	if (!ret) {
+		/* TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows */
+		*error = g_error_new (1, 0, _("This tool could not get the requirements for %s: %s"), package, error_local->message);
+		g_error_free (error_local);
+	}
+	g_strfreev (package_ids);
+	g_free (package_id);
+	return ret;
+}
+
+/**
+ * pk_console_get_depends:
+ **/
+static gboolean
+pk_console_get_depends (PkBitfield filters, const gchar *package, GError **error)
+{
+	gboolean ret;
+	gchar *package_id;
+	gchar **package_ids;
+	GError *error_local = NULL;
+
+	package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_NONE), package, &error_local);
+	if (package_id == NULL) {
+		/* TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows */
+		*error = g_error_new (1, 0, _("This tool could not get the dependencies for %s: %s"), package, error_local->message);
+		g_error_free (error_local);
+		return FALSE;
+	}
+	package_ids = pk_package_ids_from_id (package_id);
+	ret = pk_client_get_depends (client, filters, package_ids, FALSE, &error_local);
+	if (!ret) {
+		/* TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows */
+		*error = g_error_new (1, 0, _("This tool could not get the dependencies for %s: %s"), package, error_local->message);
+		g_error_free (error_local);
+	}
+	g_strfreev (package_ids);
+	g_free (package_id);
+	return ret;
+}
+
+/**
+ * pk_console_get_details:
+ **/
+static gboolean
+pk_console_get_details (const gchar *package, GError **error)
+{
+	gboolean ret;
+	gchar *package_id;
+	gchar **package_ids;
+	GError *error_local = NULL;
+
+	package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_NONE), package, &error_local);
+	if (package_id == NULL) {
+		/* TRANSLATORS: There was an error getting the details about the package. The detailed error follows */
+		*error = g_error_new (1, 0, _("This tool could not get package details for %s: %s"), package, error_local->message);
+		g_error_free (error_local);
+		return FALSE;
+	}
+	package_ids = pk_package_ids_from_id (package_id);
+	ret = pk_client_get_details (client, package_ids, &error_local);
+	if (!ret) {
+		/* TRANSLATORS: There was an error getting the details about the package. The detailed error follows */
+		*error = g_error_new (1, 0, _("This tool could not get package details for %s: %s"), package, error_local->message);
+		g_error_free (error_local);
+	}
+	g_strfreev (package_ids);
+	g_free (package_id);
+	return ret;
+}
+
+/**
+ * pk_console_get_files:
+ **/
+static gboolean
+pk_console_get_files (const gchar *package, GError **error)
+{
+	gboolean ret;
+	gchar *package_id;
+	gchar **package_ids;
+	GError *error_local = NULL;
+
+	package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_NONE), package, &error_local);
+	if (package_id == NULL) {
+		/* TRANSLATORS: The package name was not found in any software sources. The detailed error follows */
+		*error = g_error_new (1, 0, _("This tool could not find the files for %s: %s"), package, error_local->message);
+		g_error_free (error_local);
+		return FALSE;
+	}
+	package_ids = pk_package_ids_from_id (package_id);
+	ret = pk_client_get_files (client, package_ids, error);
+	if (!ret) {
+		/* TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows */
+		*error = g_error_new (1, 0, _("This tool could not get the file list for %s: %s"), package, error_local->message);
+		g_error_free (error_local);
+	}
+	g_strfreev (package_ids);
+	g_free (package_id);
+	return ret;
+}
+
+/**
+ * pk_console_get_update_detail
+ **/
+static gboolean
+pk_console_get_update_detail (const gchar *package, GError **error)
+{
+	gboolean ret;
+	gchar *package_id;
+	gchar **package_ids;
+	GError *error_local = NULL;
+
+	package_id = pk_console_perhaps_resolve (client, pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), package, &error_local);
+	if (package_id == NULL) {
+		/* TRANSLATORS: The package name was not found in any software sources. The detailed error follows */
+		*error = g_error_new (1, 0, _("This tool could not find the update details for %s: %s"), package, error_local->message);
+		g_error_free (error_local);
+		return FALSE;
+	}
+	package_ids = pk_package_ids_from_id (package_id);
+	ret = pk_client_get_update_detail (client, package_ids, &error_local);
+	if (!ret) {
+		/* TRANSLATORS: There was an error getting the details about the update for the package. The detailed error follows */
+		*error = g_error_new (1, 0, _("This tool could not get the update details for %s: %s"), package, error_local->message);
+		g_error_free (error_local);
+	}
+	g_strfreev (package_ids);
+	g_free (package_id);
+	return ret;
+}
+
+/**
+ * pk_console_error_code_cb:
+ **/
+static void
+pk_console_error_code_cb (PkErrorCodeEnum error_code, const gchar *details, gpointer data)
+{
+	PkRoleEnum role;
+
+	pk_client_get_role (client, &role, NULL, NULL);
+
+	/* handled */
+	if (need_requeue) {
+		if (error_code == PK_ERROR_ENUM_NO_LICENSE_AGREEMENT ||
+		    pk_error_code_is_need_untrusted (error_code)) {
+			egg_debug ("ignoring %s error as handled", pk_error_enum_to_text (error_code));
+			return;
+		}
+		egg_warning ("set requeue, but did not handle error");
+	}
+
+	/* TRANSLATORS: This was an unhandled error, and we don't have _any_ context */
+	g_print ("%s %s: %s\n", _("Error:"), pk_error_enum_to_text (error_code), details);
+}
+
+#endif
+
+/**
+ * pk_connection_changed_cb:
+ **/
+static void
+pk_connection_changed_cb (PkControl *control_, gboolean connected, gpointer data)
+{
+	/* if the daemon crashed, don't hang around */
+	if (!connected) {
+		/* TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle */
+		g_print ("%s\n", _("The daemon crashed mid-transaction!"));
+		_exit (2);
+	}
+}
+
+/**
+ * pk_console_sigint_handler:
+ **/
+static void
+pk_console_sigint_handler (int sig)
+{
+//	PkRoleEnum role;
+//	gboolean ret;
+//	GError *error = NULL;
+	egg_debug ("Handling SIGINT");
+
+	/* restore default ASAP, as the cancels might hang */
+	signal (SIGINT, SIG_DFL);
+
+#if 0
+	/* cancel any tasks */
+	pk_client_get_role (client, &role, NULL, NULL);
+	if (role != PK_ROLE_ENUM_UNKNOWN) {
+		ret = pk_client_cancel (client, &error);
+		if (!ret) {
+			egg_warning ("failed to cancel normal client: %s", error->message);
+			g_error_free (error);
+			error = NULL;
+		}
+	}
+	pk_client_get_role (client_sync, &role, NULL, NULL);
+	if (role != PK_ROLE_ENUM_UNKNOWN) {
+		ret = pk_client_cancel (client_sync, &error);
+		if (!ret) {
+			egg_warning ("failed to cancel task client: %s", error->message);
+			g_error_free (error);
+		}
+	}
+#endif
+
+	/* kill ourselves */
+	egg_debug ("Retrying SIGINT");
+	kill (getpid (), SIGINT);
+}
+
+/**
+ * pk_console_get_summary:
+ **/
+static gchar *
+pk_console_get_summary (void)
+{
+	GString *string;
+	string = g_string_new ("");
+
+	/* TRANSLATORS: This is the header to the --help menu */
+	g_string_append_printf (string, "%s\n\n%s\n", _("PackageKit Console Interface"),
+				/* these are commands we can use with pkcon */
+				_("Subcommands:"));
+
+	/* always */
+	g_string_append_printf (string, "  %s\n", "get-actions");
+	g_string_append_printf (string, "  %s\n", "get-groups");
+	g_string_append_printf (string, "  %s\n", "get-filters");
+	g_string_append_printf (string, "  %s\n", "get-transactions");
+	g_string_append_printf (string, "  %s\n", "get-time");
+
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_SEARCH_NAME) ||
+	    pk_bitfield_contain (roles, PK_ROLE_ENUM_SEARCH_DETAILS) ||
+	    pk_bitfield_contain (roles, PK_ROLE_ENUM_SEARCH_GROUP) ||
+	    pk_bitfield_contain (roles, PK_ROLE_ENUM_SEARCH_FILE))
+		g_string_append_printf (string, "  %s\n", "search [name|details|group|file] [data]");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_INSTALL_PACKAGES) ||
+	    pk_bitfield_contain (roles, PK_ROLE_ENUM_INSTALL_FILES))
+		g_string_append_printf (string, "  %s\n", "install [packages|files]");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_DOWNLOAD_PACKAGES))
+		g_string_append_printf (string, "  %s\n", "download [directory] [packages]");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_INSTALL_SIGNATURE))
+		g_string_append_printf (string, "  %s\n", "install-sig [type] [key_id] [package_id]");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_REMOVE_PACKAGES))
+		g_string_append_printf (string, "  %s\n", "remove [package]");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_UPDATE_SYSTEM) ||
+	    pk_bitfield_contain (roles, PK_ROLE_ENUM_UPDATE_PACKAGES))
+		g_string_append_printf (string, "  %s\n", "update <package>");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_REFRESH_CACHE))
+		g_string_append_printf (string, "  %s\n", "refresh");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_RESOLVE))
+		g_string_append_printf (string, "  %s\n", "resolve [package]");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_UPDATES))
+		g_string_append_printf (string, "  %s\n", "get-updates");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_DEPENDS))
+		g_string_append_printf (string, "  %s\n", "get-depends [package]");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_REQUIRES))
+		g_string_append_printf (string, "  %s\n", "get-requires [package]");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_DETAILS))
+		g_string_append_printf (string, "  %s\n", "get-details [package]");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_DISTRO_UPGRADES))
+		g_string_append_printf (string, "  %s\n", "get-distro-upgrades");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_FILES))
+		g_string_append_printf (string, "  %s\n", "get-files [package]");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_UPDATE_DETAIL))
+		g_string_append_printf (string, "  %s\n", "get-update-detail [package]");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_PACKAGES))
+		g_string_append_printf (string, "  %s\n", "get-packages");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_ROLLBACK))
+		g_string_append_printf (string, "  %s\n", "rollback");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_REPO_LIST))
+		g_string_append_printf (string, "  %s\n", "repo-list");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_REPO_ENABLE))
+		g_string_append_printf (string, "  %s\n", "repo-enable [repo_id]");
+		g_string_append_printf (string, "  %s\n", "repo-disable [repo_id]");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_REPO_SET_DATA))
+		g_string_append_printf (string, "  %s\n", "repo-set-data [repo_id] [parameter] [value];");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_WHAT_PROVIDES))
+		g_string_append_printf (string, "  %s\n", "what-provides [search]");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_ACCEPT_EULA))
+		g_string_append_printf (string, "  %s\n", "accept-eula [eula-id]");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_CATEGORIES))
+		g_string_append_printf (string, "  %s\n", "get-categories");
+	return g_string_free (string, FALSE);
+}
+
+/**
+ * pk_console_progress_cb:
+ **/
+static void
+pk_console_progress_cb (PkProgress *progress, PkProgressType type, gpointer data)
+{
+	gint percentage;
+	PkRoleEnum role;
+	PkStatusEnum status;
+	gchar *package_id;
+	gchar *text;
+
+	/* packages */
+	if (type == PK_PROGRESS_TYPE_PACKAGE_ID) {
+		g_object_get (progress,
+			      "role", &role,
+			      NULL);
+		if (role == PK_ROLE_ENUM_SEARCH_NAME ||
+		    role == PK_ROLE_ENUM_SEARCH_DETAILS ||
+		    role == PK_ROLE_ENUM_SEARCH_GROUP ||
+		    role == PK_ROLE_ENUM_SEARCH_FILE ||
+		    role == PK_ROLE_ENUM_RESOLVE ||
+		    role == PK_ROLE_ENUM_GET_UPDATES ||
+		    role == PK_ROLE_ENUM_WHAT_PROVIDES ||
+		    role == PK_ROLE_ENUM_GET_PACKAGES)
+			return;
+		g_object_get (progress,
+			      "package-id", &package_id,
+			      NULL);
+		text = pk_package_id_get_printable (package_id);
+		pk_progress_bar_start (progressbar, text);
+		g_free (package_id);
+		g_free (text);
+	}
+
+	/* percentage */
+	if (type == PK_PROGRESS_TYPE_PERCENTAGE) {
+		g_object_get (progress,
+			      "percentage", &percentage,
+			      NULL);
+		pk_progress_bar_set_percentage (progressbar, percentage);
+	}
+
+	/* status */
+	if (type == PK_PROGRESS_TYPE_STATUS) {
+		g_object_get (progress,
+			      "status", &status,
+			      NULL);
+		/* TODO: translate */
+		pk_progress_bar_start (progressbar, pk_status_enum_to_text (status));
+	}
+}
+
+/**
+ * pk_console_finished_cb:
+ **/
+static void
+pk_console_finished_cb (GObject *object, GAsyncResult *res, gpointer data)
+{
+//	PkClient *client = PK_CLIENT (object);
+	GError *error = NULL;
+	PkResults *results = NULL;
+	PkExitEnum exit_enum;
+	const PkResultItemErrorCode *error_item;
+	GPtrArray *array;
+
+	/* no more progress */
+	pk_progress_bar_end (progressbar);
+
+	/* get the results */
+	results = pk_client_generic_finish (client, res, &error);
+	if (results == NULL) {
+		g_print ("Failed to complete: %s\n", error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	exit_enum = pk_results_get_exit_code (results);
+//	if (exit_enum != PK_EXIT_ENUM_CANCELLED)
+//		egg_test_failed (test, "failed to cancel search: %s", pk_exit_enum_to_text (exit_enum));
+
+	/* check error code */
+	error_item = pk_results_get_error_code (results);
+//	if (error_item->code != PK_ERROR_ENUM_TRANSACTION_CANCELLED)
+//		egg_test_failed (test, "failed to get error code: %i", error_item->code);
+//	if (g_strcmp0 (error_item->details, "The task was stopped successfully") != 0)
+//		egg_test_failed (test, "failed to get error message: %s", error_item->details);
+
+	/* package */
+	array = pk_results_get_package_array (results);
+	g_ptr_array_foreach (array, (GFunc) pk_console_package_cb, NULL);
+	g_ptr_array_unref (array);
+
+	/* transaction */
+	array = pk_results_get_transaction_array (results);
+	g_ptr_array_foreach (array, (GFunc) pk_console_transaction_cb, NULL);
+	g_ptr_array_unref (array);
+
+	/* distro_upgrade */
+	array = pk_results_get_distro_upgrade_array (results);
+	g_ptr_array_foreach (array, (GFunc) pk_console_distro_upgrade_cb, NULL);
+	g_ptr_array_unref (array);
+
+	/* category */
+	array = pk_results_get_category_array (results);
+	g_ptr_array_foreach (array, (GFunc) pk_console_category_cb, NULL);
+	g_ptr_array_unref (array);
+
+	/* update_detail */
+	array = pk_results_get_update_detail_array (results);
+	g_ptr_array_foreach (array, (GFunc) pk_console_update_detail_cb, NULL);
+	g_ptr_array_unref (array);
+
+	/* repo_detail */
+	array = pk_results_get_repo_detail_array (results);
+	g_ptr_array_foreach (array, (GFunc) pk_console_repo_detail_cb, NULL);
+	g_ptr_array_unref (array);
+
+	/* require_restart */
+	array = pk_results_get_require_restart_array (results);
+	g_ptr_array_foreach (array, (GFunc) pk_console_require_restart_cb, NULL);
+	g_ptr_array_unref (array);
+
+	/* details */
+	array = pk_results_get_details_array (results);
+	g_ptr_array_foreach (array, (GFunc) pk_console_details_cb, NULL);
+	g_ptr_array_unref (array);
+
+	/* message */
+	array = pk_results_get_message_array (results);
+	g_ptr_array_foreach (array, (GFunc) pk_console_message_cb, NULL);
+	g_ptr_array_unref (array);
+
+	/* files */
+	array = pk_results_get_files_array (results);
+	g_ptr_array_foreach (array, (GFunc) pk_console_files_cb, NULL);
+	g_ptr_array_unref (array);
+
+	/* repo_signature_required */
+	array = pk_results_get_repo_signature_required_array (results);
+	g_ptr_array_foreach (array, (GFunc) pk_console_repo_signature_required_cb, NULL);
+	g_ptr_array_unref (array);
+
+	/* eula_required */
+	array = pk_results_get_eula_required_array (results);
+	g_ptr_array_foreach (array, (GFunc) pk_console_eula_required_cb, NULL);
+	g_ptr_array_unref (array);
+out:
+	g_main_loop_quit (loop);
+}
+
+/**
+ * main:
+ **/
+int
+main (int argc, char *argv[])
+{
+	GError *error = NULL;
+	gboolean verbose = FALSE;
+	gboolean program_version = FALSE;
+	GOptionContext *context;
+	gchar *options_help;
+	gchar *filter = NULL;
+	gchar *summary = NULL;
+	const gchar *mode;
+	const gchar *value = NULL;
+	const gchar *details = NULL;
+	const gchar *parameter = NULL;
+//	PkBitfield groups;
+//	gchar *text;
+//	gboolean maybe_sync = TRUE;
+	PkBitfield filters = 0;
+	gint retval = EXIT_SUCCESS;
+
+	const GOptionEntry options[] = {
+		{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
+			/* TRANSLATORS: command line argument, if we should show debugging information */
+			_("Show extra debugging information"), NULL },
+		{ "version", '\0', 0, G_OPTION_ARG_NONE, &program_version,
+			/* TRANSLATORS: command line argument, just show the version string */
+			_("Show the program version and exit"), NULL},
+		{ "filter", '\0', 0, G_OPTION_ARG_STRING, &filter,
+			/* TRANSLATORS: command line argument, use a filter to narrow down results */
+			_("Set the filter, e.g. installed"), NULL},
+		{ "nowait", 'n', 0, G_OPTION_ARG_NONE, &nowait,
+			/* TRANSLATORS: command line argument, work asynchronously */
+			_("Exit without waiting for actions to complete"), NULL},
+		{ NULL}
+	};
+
+	setlocale (LC_ALL, "");
+	bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
+	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+	textdomain (GETTEXT_PACKAGE);
+
+	if (! g_thread_supported ())
+		g_thread_init (NULL);
+	g_type_init ();
+
+	/* do stuff on ctrl-c */
+	signal (SIGINT, pk_console_sigint_handler);
+
+	/* check if we are on console */
+	if (isatty (fileno (stdout)) == 1)
+		is_console = TRUE;
+
+	/* we need the roles early, as we only show the user only what they can do */
+	control = pk_control_sync_new ();
+	roles = pk_control_sync_get_roles (control, NULL);
+	summary = pk_console_get_summary ();
+	progressbar = pk_progress_bar_new ();
+	pk_progress_bar_set_size (progressbar, 25);
+	pk_progress_bar_set_padding (progressbar, 20);
+
+	context = g_option_context_new ("PackageKit Console Program");
+	g_option_context_set_summary (context, summary) ;
+	g_option_context_add_main_entries (context, options, NULL);
+	g_option_context_parse (context, &argc, &argv, NULL);
+	/* Save the usage string in case command parsing fails. */
+	options_help = g_option_context_get_help (context, TRUE, NULL);
+	g_option_context_free (context);
+
+	/* we are now parsed */
+	egg_debug_init (verbose);
+
+	if (program_version) {
+		g_print (VERSION "\n");
+		goto out_last;
+	}
+
+	if (argc < 2) {
+		g_print ("%s", options_help);
+		retval = PK_EXIT_CODE_SYNTAX_INVALID;
+		goto out_last;
+	}
+
+	loop = g_main_loop_new (NULL, FALSE);
+
+	/* watch when the daemon aborts */
+	g_signal_connect (control, "connection-changed",
+			  G_CALLBACK (pk_connection_changed_cb), loop);
+
+	/* create transactions */
+	client = pk_client_new ();
+
+	/* check filter */
+	if (filter != NULL) {
+		filters = pk_filter_bitfield_from_text (filter);
+		if (filters == 0) {
+			/* TRANSLATORS: The user specified an incorrect filter */
+			error = g_error_new (1, 0, "%s: %s", _("The filter specified was invalid"), filter);
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+	}
+	egg_debug ("filter=%s, filters=%" PK_BITFIELD_FORMAT, filter, filters);
+
+	mode = argv[1];
+	if (argc > 2)
+		value = argv[2];
+	if (argc > 3)
+		details = argv[3];
+	if (argc > 4)
+		parameter = argv[4];
+
+	/* parse the big list */
+	if (strcmp (mode, "search") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: a search type can be name, details, file, etc */
+			error = g_error_new (1, 0, "%s", _("A search type is required, e.g. name"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+
+		} else if (strcmp (value, "name") == 0) {
+			if (details == NULL) {
+				/* TRANSLATORS: the user needs to provide a search term */
+				error = g_error_new (1, 0, "%s", _("A search term is required"));
+				retval = PK_EXIT_CODE_SYNTAX_INVALID;
+				goto out;
+			}
+//			pk_progress_bar_start (progressbar, _("Searching"));
+			/* fire off an async request */
+			pk_client_search_name_async (client, filters, details, NULL,
+						     (PkProgressCallback) pk_console_progress_cb, NULL,
+						     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+
+		} else if (strcmp (value, "details") == 0) {
+			if (details == NULL) {
+				/* TRANSLATORS: the user needs to provide a search term */
+				error = g_error_new (1, 0, "%s", _("A search term is required"));
+				retval = PK_EXIT_CODE_SYNTAX_INVALID;
+				goto out;
+			}
+			/* fire off an async request */
+			pk_client_search_details_async (client, filters, details, NULL,
+						        (PkProgressCallback) pk_console_progress_cb, NULL,
+						        (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+
+		} else if (strcmp (value, "group") == 0) {
+			if (details == NULL) {
+				/* TRANSLATORS: the user needs to provide a search term */
+				error = g_error_new (1, 0, "%s", _("A search term is required"));
+				retval = PK_EXIT_CODE_SYNTAX_INVALID;
+				goto out;
+			}
+			/* fire off an async request */
+			pk_client_search_group_async (client, filters, details, NULL,
+						      (PkProgressCallback) pk_console_progress_cb, NULL,
+						      (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+
+		} else if (strcmp (value, "file") == 0) {
+			if (details == NULL) {
+				/* TRANSLATORS: the user needs to provide a search term */
+				error = g_error_new (1, 0, "%s", _("A search term is required"));
+				retval = PK_EXIT_CODE_SYNTAX_INVALID;
+				goto out;
+			}
+			/* fire off an async request */
+			pk_client_search_file_async (client, filters, details, NULL,
+						     (PkProgressCallback) pk_console_progress_cb, NULL,
+						     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+		} else {
+			/* TRANSLATORS: the search type was provided, but invalid */
+			error = g_error_new (1, 0, "%s", _("Invalid search type"));
+		}
+#if 0
+
+	} else if (strcmp (mode, "install") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: the user did not specify what they wanted to install */
+			error = g_error_new (1, 0, "%s", _("A package name or filename to install is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		ret = pk_console_install_stuff (client, argv, &error);
+#endif
+
+	} else if (strcmp (mode, "install-sig") == 0) {
+		if (value == NULL || details == NULL || parameter == NULL) {
+			/* TRANSLATORS: geeky error, 99.9999% of users won't see this */
+			error = g_error_new (1, 0, "%s", _("A type, key_id and package_id are required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		pk_client_install_signature_async (client, PK_SIGTYPE_ENUM_GPG, details, parameter, NULL,
+						   (PkProgressCallback) pk_console_progress_cb, NULL,
+						   (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+#if 0
+	} else if (strcmp (mode, "remove") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: the user did not specify what they wanted to remove */
+			error = g_error_new (1, 0, "%s", _("A package name to remove is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		ret = pk_console_remove_packages (client, argv, &error);
+	} else if (strcmp (mode, "download") == 0) {
+		if (value == NULL || details == NULL) {
+			/* TRANSLATORS: the user did not specify anything about what to download or where */
+			error = g_error_new (1, 0, "%s", _("A destination directory and the package names to download are required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		ret = g_file_test (value, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR);
+		if (!ret) {
+			/* TRANSLATORS: the directory does not exist, so we can't continue */
+			error = g_error_new (1, 0, "%s: %s", _("Directory not found"), value);
+			retval = PK_EXIT_CODE_FILE_NOT_FOUND;
+			goto out;
+		}
+		ret = pk_console_download_packages (client, argv, value, &error);
+#endif
+	} else if (strcmp (mode, "accept-eula") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: geeky error, 99.9999% of users won't see this */
+			error = g_error_new (1, 0, "%s", _("A licence identifier (eula-id) is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		pk_client_accept_eula_async (client, value, NULL,
+					     (PkProgressCallback) pk_console_progress_cb, NULL,
+					     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+
+#if 0
+	} else if (strcmp (mode, "rollback") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: geeky error, 99.9999% of users won't see this */
+			error = g_error_new (1, 0, "%s", _("A transaction identifier (tid) is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		pk_client_rollback_async (client, value, NULL,
+					  (PkProgressCallback) pk_console_progress_cb, NULL,
+					  (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+
+	} else if (strcmp (mode, "update") == 0) {
+		if (value == NULL) {
+			/* do the system update */
+			pk_client_update_system_async (client, TRUE, NULL,
+						       (PkProgressCallback) pk_console_progress_cb, NULL,
+						       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+		} else {
+			ret = pk_console_update_package (client, value, &error);
+		}
+#endif
+
+	} else if (strcmp (mode, "resolve") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: The user did not specify a package name */
+			error = g_error_new (1, 0, "%s", _("A package name to resolve is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		pk_client_resolve_async (client, filters, argv+2, NULL,
+				         (PkProgressCallback) pk_console_progress_cb, NULL,
+					 (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+
+	} else if (strcmp (mode, "repo-enable") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: The user did not specify a repository (software source) name */
+			error = g_error_new (1, 0, "%s", _("A repository name is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		pk_client_repo_enable_async (client, value, TRUE, NULL,
+					     (PkProgressCallback) pk_console_progress_cb, NULL,
+					     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+
+	} else if (strcmp (mode, "repo-disable") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: The user did not specify a repository (software source) name */
+			error = g_error_new (1, 0, "%s", _("A repository name is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		pk_client_repo_enable_async (client, value, FALSE, NULL,
+					     (PkProgressCallback) pk_console_progress_cb, NULL,
+					     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+
+	} else if (strcmp (mode, "repo-set-data") == 0) {
+		if (value == NULL || details == NULL || parameter == NULL) {
+			/* TRANSLATORS: The user didn't provide any data */
+			error = g_error_new (1, 0, "%s", _("A repo name, parameter and value are required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		pk_client_repo_set_data_async (client, value, details, parameter, NULL,
+					       (PkProgressCallback) pk_console_progress_cb, NULL,
+					       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+
+	} else if (strcmp (mode, "repo-list") == 0) {
+		pk_client_get_repo_list_async (client, filters, NULL,
+					       (PkProgressCallback) pk_console_progress_cb, NULL,
+					       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+#if 0
+	} else if (strcmp (mode, "get-time") == 0) {
+		PkRoleEnum role;
+		guint time_ms;
+		if (value == NULL) {
+			/* TRANSLATORS: The user didn't specify what action to use */
+			error = g_error_new (1, 0, "%s", _("An action, e.g. 'update-system' is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		role = pk_role_enum_from_text (value);
+		if (role == PK_ROLE_ENUM_UNKNOWN) {
+			/* TRANSLATORS: The user specified an invalid action */
+			error = g_error_new (1, 0, "%s", _("A correct role is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		ret = pk_control_get_time_since_action (control, role, &time_ms, &error);
+		if (!ret) {
+			/* TRANSLATORS: we keep a database updated with the time that an action was last executed */
+			error = g_error_new (1, 0, "%s", _("Failed to get the time since this action was last completed"));
+			retval = EXIT_FAILURE;
+			goto out;
+		}
+		g_print ("time since %s is %is\n", value, time_ms);
+
+	} else if (strcmp (mode, "get-depends") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: The user did not provide a package name */
+			error = g_error_new (1, 0, "%s", _("A package name is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		ret = pk_console_get_depends (client, filters, value, &error);
+#endif
+	} else if (strcmp (mode, "get-distro-upgrades") == 0) {
+		pk_client_get_distro_upgrades_async (client, NULL,
+						     (PkProgressCallback) pk_console_progress_cb, NULL,
+						     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+
+#if 0
+	} else if (strcmp (mode, "get-update-detail") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: The user did not provide a package name */
+			error = g_error_new (1, 0, "%s", _("A package name is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		ret = pk_console_get_update_detail (client, value, &error);
+
+	} else if (strcmp (mode, "get-requires") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: The user did not provide a package name */
+			error = g_error_new (1, 0, "%s", _("A package name is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		ret = pk_console_get_requires (client, filters, value, &error);
+#endif
+
+	} else if (strcmp (mode, "what-provides") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it */
+			error = g_error_new (1, 0, "%s", _("A package provide string is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		pk_client_what_provides_async (client, filters, PK_PROVIDES_ENUM_CODEC, value, NULL,
+					       (PkProgressCallback) pk_console_progress_cb, NULL,
+					       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+#if 0
+	} else if (strcmp (mode, "get-details") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: The user did not provide a package name */
+			error = g_error_new (1, 0, "%s", _("A package name is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		ret = pk_console_get_details (client, value, &error);
+
+	} else if (strcmp (mode, "get-files") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: The user did not provide a package name */
+			error = g_error_new (1, 0, "%s", _("A package name is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		ret = pk_console_get_files (client, value, &error);
+
+	} else if (strcmp (mode, "list-create") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: The user didn't specify a filename to create as a list */
+			error = g_error_new (1, 0, "%s", _("A list file name to create is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		ret = pk_console_list_create (client, value, &error);
+
+	} else if (strcmp (mode, "list-diff") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: The user didn't specify a filename to open as a list */
+			error = g_error_new (1, 0, "%s", _("A list file to open is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		ret = pk_console_list_diff (client, value, &error);
+
+	} else if (strcmp (mode, "list-install") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: The user didn't specify a filename to open as a list */
+			error = g_error_new (1, 0, "%s", _("A list file to open is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		ret = pk_console_list_install (client, value, &error);
+#endif
+	} else if (strcmp (mode, "get-updates") == 0) {
+		pk_client_get_updates_async (client, filters, NULL,
+					     (PkProgressCallback) pk_console_progress_cb, NULL,
+					     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+
+	} else if (strcmp (mode, "get-categories") == 0) {
+		pk_client_get_categories_async (client, NULL,
+						(PkProgressCallback) pk_console_progress_cb, NULL,
+						(GAsyncReadyCallback) pk_console_finished_cb, NULL);
+
+	} else if (strcmp (mode, "get-packages") == 0) {
+		pk_client_get_packages_async (client, filters, NULL,
+					      (PkProgressCallback) pk_console_progress_cb, NULL,
+					      (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+#if 0
+	} else if (strcmp (mode, "get-actions") == 0) {
+		text = pk_role_bitfield_to_text (roles);
+		g_strdelimit (text, ";", '\n');
+		g_print ("%s\n", text);
+		g_free (text);
+		/* these can never fail */
+		ret = TRUE;
+
+	} else if (strcmp (mode, "get-filters") == 0) {
+		filters = pk_control_get_filters (control, NULL);
+		text = pk_filter_bitfield_to_text (filters);
+		g_strdelimit (text, ";", '\n');
+		g_print ("%s\n", text);
+		g_free (text);
+		/* these can never fail */
+		ret = TRUE;
+
+	} else if (strcmp (mode, "get-groups") == 0) {
+		groups = pk_control_get_groups (control, NULL);
+		text = pk_group_bitfield_to_text (groups);
+		g_strdelimit (text, ";", '\n');
+		g_print ("%s\n", text);
+		g_free (text);
+		/* these can never fail */
+		ret = TRUE;
+#endif
+	} else if (strcmp (mode, "get-transactions") == 0) {
+		pk_client_get_old_transactions_async (client, 10, NULL,
+						      (PkProgressCallback) pk_console_progress_cb, NULL,
+						      (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+
+	} else if (strcmp (mode, "refresh") == 0) {
+		/* special case - this takes a long time, and doesn't do packages */
+//		pk_console_start_bar ("refresh-cache");
+		pk_client_refresh_cache_async (client, FALSE, NULL,
+					       (PkProgressCallback) pk_console_progress_cb, NULL,
+					       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+
+	} else {
+		/* TRANSLATORS: The user tried to use an unsupported option on the command line */
+		error = g_error_new (1, 0, _("Option '%s' is not supported"), mode);
+	}
+
+	/* do we wait for the method? */
+	if (!nowait && error == NULL)
+		g_main_loop_run (loop);
+
+out:
+	if (error != NULL) {
+//			/* TRANSLATORS: User does not have permission to do this */
+//			g_print ("%s\n", _("Incorrect privileges for this operation"));
+		/* TRANSLATORS: Generic failure of what they asked to do */
+		g_print ("%s:  %s\n", _("Command failed"), error->message);
+		if (retval == EXIT_SUCCESS)
+			retval = EXIT_FAILURE;
+	}
+
+	g_free (options_help);
+	g_free (filter);
+	g_free (summary);
+	g_object_unref (progressbar);
+	g_object_unref (control);
+//	g_object_unref (client);
+//	g_object_unref (client_sync);
+	g_object_unref (client);
+out_last:
+	return retval;
+}
+
+/***************************************************************************
+ ***                          MAKE CHECK TESTS                           ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+egg_test_console (EggTest *test)
+{
+	gchar *text_safe;
+
+	if (!egg_test_start (test, "PkConsole"))
+		return;
+
+	/************************************************************
+	 ****************         Padding          ******************
+	 ************************************************************/
+	egg_test_title (test, "pad smaller");
+	text_safe = pk_strpad ("richard", 10);
+	if (g_strcmp0 (text_safe, "richard   ") == 0)
+		egg_test_success (test, NULL);
+	else
+		egg_test_failed (test, "failed the padd '%s'", text_safe);
+	g_free (text_safe);
+
+	/************************************************************/
+	egg_test_title (test, "pad NULL");
+	text_safe = pk_strpad (NULL, 10);
+	if (g_strcmp0 (text_safe, "          ") == 0)
+		egg_test_success (test, NULL);
+	else
+		egg_test_failed (test, "failed the padd '%s'", text_safe);
+	g_free (text_safe);
+
+	/************************************************************/
+	egg_test_title (test, "pad nothing");
+	text_safe = pk_strpad ("", 10);
+	if (g_strcmp0 (text_safe, "          ") == 0)
+		egg_test_success (test, NULL);
+	else
+		egg_test_failed (test, "failed the padd '%s'", text_safe);
+	g_free (text_safe);
+
+	/************************************************************/
+	egg_test_title (test, "pad over");
+	text_safe = pk_strpad ("richardhughes", 10);
+	if (g_strcmp0 (text_safe, "richardhughes") == 0)
+		egg_test_success (test, NULL);
+	else
+		egg_test_failed (test, "failed the padd '%s'", text_safe);
+	g_free (text_safe);
+
+	/************************************************************/
+	egg_test_title (test, "pad zero");
+	text_safe = pk_strpad ("rich", 0);
+	if (g_strcmp0 (text_safe, "rich") == 0)
+		egg_test_success (test, NULL);
+	else
+		egg_test_failed (test, "failed the padd '%s'", text_safe);
+	g_free (text_safe);
+	egg_test_end (test);
+}
+#endif
+
diff --git a/client/pk-progress-bar.c b/client/pk-progress-bar.c
new file mode 120000
index 0000000..cee68ed
--- /dev/null
+++ b/client/pk-progress-bar.c
@@ -0,0 +1 @@
+../contrib/debuginfo-install/pk-progress-bar.c
\ No newline at end of file
diff --git a/client/pk-progress-bar.h b/client/pk-progress-bar.h
new file mode 120000
index 0000000..2c18deb
--- /dev/null
+++ b/client/pk-progress-bar.h
@@ -0,0 +1 @@
+../contrib/debuginfo-install/pk-progress-bar.h
\ No newline at end of file
commit 925a1d0d70b6aa36b32b78d2ddcde2f8ad891750
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 2 16:04:14 2009 +0100

    trivial: gitignore update

diff --git a/client/.gitignore b/client/.gitignore
index f2c5429..b724533 100644
--- a/client/.gitignore
+++ b/client/.gitignore
@@ -4,9 +4,10 @@
 pk-marshal.h
 pk-marshal.c
 pkcon
+pkcon-test
 pkmon
+pkmon-test
 pkgenpack
-pk-import-specspo
 pk-self-test
 *.glade.bak
 *.gladep
commit 96bfc2d2fc2df2608b9d7d5b22082010f5bd91b6
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 2 16:02:50 2009 +0100

    client: split out the non-packagekit-glib specific common code into pk-text

diff --git a/client/Makefile.am b/client/Makefile.am
index 5772125..4a9cf54 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -64,6 +64,8 @@ pkcon_SOURCES =						\
 	egg-string.c					\
 	egg-string.h					\
 	pk-console.c					\
+	pk-text.c					\
+	pk-text.h					\
 	pk-tools-common.c				\
 	pk-tools-common.h				\
 	$(NULL)
@@ -100,6 +102,8 @@ pkgenpack_SOURCES =					\
 	egg-string.c					\
 	egg-string.h					\
 	pk-generate-pack.c				\
+	pk-text.c					\
+	pk-text.h					\
 	pk-tools-common.c				\
 	pk-tools-common.h				\
 	$(NULL)
diff --git a/client/pk-console.c b/client/pk-console.c
index 6865875..9a1bfaa 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -38,9 +38,12 @@
 #include "egg-debug.h"
 #include "egg-string.h"
 
+#include "pk-text.h"
 #include "pk-tools-common.h"
 
 #define PROGRESS_BAR_SIZE 15
+#define PK_EXIT_CODE_SYNTAX_INVALID	3
+#define PK_EXIT_CODE_FILE_NOT_FOUND	4
 
 static GMainLoop *loop = NULL;
 static PkBitfield roles;
@@ -2016,7 +2019,7 @@ main (int argc, char *argv[])
 	gchar *text;
 	gboolean maybe_sync = TRUE;
 	PkBitfield filters = 0;
-	gint retval = PK_EXIT_CODE_SUCCESS;
+	gint retval = EXIT_SUCCESS;
 
 	const GOptionEntry options[] = {
 		{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
@@ -2337,7 +2340,7 @@ main (int argc, char *argv[])
 		if (!ret) {
 			/* TRANSLATORS: we keep a database updated with the time that an action was last executed */
 			error = g_error_new (1, 0, "%s", _("Failed to get the time since this action was last completed"));
-			retval = PK_EXIT_CODE_FAILED;
+			retval = EXIT_FAILURE;
 			goto out;
 		}
 		g_print ("time since %s is %is\n", value, time_ms);
@@ -2496,8 +2499,8 @@ out:
 			g_print ("%s:  %s\n", _("Command failed"), error->message);
 			g_error_free (error);
 		}
-		if (retval == PK_EXIT_CODE_SUCCESS)
-			retval = PK_EXIT_CODE_FAILED;
+		if (retval == EXIT_SUCCESS)
+			retval = EXIT_FAILURE;
 	}
 
 	g_free (options_help);
diff --git a/client/pk-generate-pack.c b/client/pk-generate-pack.c
index 0384cf0..c6a5760 100644
--- a/client/pk-generate-pack.c
+++ b/client/pk-generate-pack.c
@@ -24,6 +24,7 @@
 
 #include <unistd.h>
 #include <signal.h>
+#include <stdlib.h>
 #include <locale.h>
 #include <glib.h>
 #include <glib/gi18n.h>
@@ -33,6 +34,7 @@
 #include "egg-debug.h"
 #include "egg-string.h"
 
+#include "pk-text.h"
 #include "pk-tools-common.h"
 
 static guint last_percentage = 0;
diff --git a/client/pk-monitor.c b/client/pk-monitor.c
index 3ec577c..c7bd684 100644
--- a/client/pk-monitor.c
+++ b/client/pk-monitor.c
@@ -32,7 +32,7 @@
 
 #include "egg-debug.h"
 
-#include "pk-tools-common.h"
+#include "pk-text.h"
 
 static PkControl *control = NULL;
 static gboolean verbose = FALSE;
@@ -121,7 +121,7 @@ main (int argc, char *argv[])
 	gboolean program_version = FALSE;
 	gchar *state;
 	GOptionContext *context;
-	gint retval = PK_EXIT_CODE_SUCCESS;
+	gint retval = EXIT_SUCCESS;
 
 	const GOptionEntry options[] = {
 		{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
@@ -181,7 +181,7 @@ main (int argc, char *argv[])
 	ret = pk_task_list_refresh (tlist);
 	if (!ret) {
 		g_print ("%s\n", _("Cannot show the list of transactions"));
-		retval = PK_EXIT_CODE_FAILED;
+		retval = EXIT_FAILURE;
 		goto out;
 	}
 	pk_task_list_print (tlist);
diff --git a/client/pk-text.c b/client/pk-text.c
new file mode 100644
index 0000000..8793ec9
--- /dev/null
+++ b/client/pk-text.c
@@ -0,0 +1,91 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008-2009 Richard Hughes <richard at 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.h>
+#include <stdio.h>
+#include <glib/gi18n.h>
+
+#include <egg-debug.h>
+
+#include "pk-text.h"
+
+/**
+ * pk_console_get_number:
+ **/
+guint
+pk_console_get_number (const gchar *question, guint maxnum)
+{
+	gint answer = 0;
+	gint retval;
+
+	/* pretty print */
+	g_print ("%s", question);
+
+	do {
+		/* get a number */
+		retval = scanf("%u", &answer);
+
+		/* positive */
+		if (retval == 1 && answer > 0 && answer <= (gint) maxnum)
+			break;
+		g_print (_("Please enter a number from 1 to %i: "), maxnum);
+	} while (TRUE);
+	return answer;
+}
+
+/**
+ * pk_console_get_prompt:
+ **/
+gboolean
+pk_console_get_prompt (const gchar *question, gboolean defaultyes)
+{
+	gchar answer = '\0';
+
+	/* pretty print */
+	g_print ("%s", question);
+	if (defaultyes)
+		g_print (" [Y/n] ");
+	else
+		g_print (" [N/y] ");
+
+	do {
+		/* ITS4: ignore, we are copying into the same variable, not a string */
+		answer = (gchar) getchar();
+
+		/* positive */
+		if (answer == 'y' || answer == 'Y')
+			return TRUE;
+		/* negative */
+		if (answer == 'n' || answer == 'N')
+			return FALSE;
+
+		/* default choice */
+		if (answer == '\n' && defaultyes)
+			return TRUE;
+		if (answer == '\n' && !defaultyes)
+			return FALSE;
+	} while (TRUE);
+
+	/* keep GCC happy */
+	return FALSE;
+}
+
diff --git a/client/pk-text.h b/client/pk-text.h
new file mode 100644
index 0000000..75899a6
--- /dev/null
+++ b/client/pk-text.h
@@ -0,0 +1,35 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008-2009 Richard Hughes <richard at 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 __PK_TEXT_H
+#define __PK_TEXT_H
+
+#include <glib.h>
+
+guint		 pk_console_get_number			(const gchar	*question,
+							 guint		 maxnum);
+gboolean	 pk_console_get_prompt			(const gchar	*question,
+							 gboolean	 defaultyes);
+
+#endif /* __PK_TEXT_H */
+
+
+
diff --git a/client/pk-tools-common.c b/client/pk-tools-common.c
index ebd8f9d..915dc18 100644
--- a/client/pk-tools-common.c
+++ b/client/pk-tools-common.c
@@ -28,6 +28,7 @@
 #include <egg-debug.h>
 
 #include "pk-tools-common.h"
+#include "pk-text.h"
 
 /**
  * pk_console_resolve:
@@ -140,64 +141,3 @@ pk_console_resolve_package_id (const PkPackageList *list, GError **error)
 	return pk_package_id_to_string (obj->id);
 }
 
-/**
- * pk_console_get_number:
- **/
-guint
-pk_console_get_number (const gchar *question, guint maxnum)
-{
-	gint answer = 0;
-	gint retval;
-
-	/* pretty print */
-	g_print ("%s", question);
-
-	do {
-		/* get a number */
-		retval = scanf("%u", &answer);
-
-		/* positive */
-		if (retval == 1 && answer > 0 && answer <= (gint) maxnum)
-			break;
-		g_print (_("Please enter a number from 1 to %i: "), maxnum);
-	} while (TRUE);
-	return answer;
-}
-
-/**
- * pk_console_get_prompt:
- **/
-gboolean
-pk_console_get_prompt (const gchar *question, gboolean defaultyes)
-{
-	gchar answer = '\0';
-
-	/* pretty print */
-	g_print ("%s", question);
-	if (defaultyes)
-		g_print (" [Y/n] ");
-	else
-		g_print (" [N/y] ");
-
-	do {
-		/* ITS4: ignore, we are copying into the same variable, not a string */
-		answer = (gchar) getchar();
-
-		/* positive */
-		if (answer == 'y' || answer == 'Y')
-			return TRUE;
-		/* negative */
-		if (answer == 'n' || answer == 'N')
-			return FALSE;
-
-		/* default choice */
-		if (answer == '\n' && defaultyes)
-			return TRUE;
-		if (answer == '\n' && !defaultyes)
-			return FALSE;
-	} while (TRUE);
-
-	/* keep GCC happy */
-	return FALSE;
-}
-
diff --git a/client/pk-tools-common.h b/client/pk-tools-common.h
index fbfe357..93c9ecd 100644
--- a/client/pk-tools-common.h
+++ b/client/pk-tools-common.h
@@ -25,25 +25,6 @@
 #include <glib/gi18n.h>
 #include <packagekit-glib/packagekit.h>
 
-/* Reserved exit codes:
- * 1		miscellaneous errors, such as "divide by zero"
- * 2		misuse of shell builtins
- * 126		command invoked cannot execute
- * 127		"command not found"
- * 128		invalid argument to exit
- * 128+n	fatal error signal "n"
- * 130		script terminated by Control-C
- * 255		exit status out of range
- */
-#define	PK_EXIT_CODE_SUCCESS		0
-#define	PK_EXIT_CODE_FAILED		1
-#define	PK_EXIT_CODE_SYNTAX_INVALID	3
-#define	PK_EXIT_CODE_FILE_NOT_FOUND	4
-
-guint		 pk_console_get_number			(const gchar	*question,
-							 guint		 maxnum);
-gboolean	 pk_console_get_prompt			(const gchar	*question,
-							 gboolean	 defaultyes);
 PkPackageList	*pk_console_resolve			(PkBitfield	 filter,
 							 const gchar	*package,
 							 GError		**error);
commit 6af81fc35c42c999c13a318e0238ab71ef7255c2
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 2 15:49:43 2009 +0100

    glib: fix up a few shared files so glib2 can build with Werror flags set

diff --git a/lib/packagekit-glib/egg-string.c b/lib/packagekit-glib/egg-string.c
index 6203029..054b0cc 100644
--- a/lib/packagekit-glib/egg-string.c
+++ b/lib/packagekit-glib/egg-string.c
@@ -238,8 +238,9 @@ egg_strreplace (const gchar *text, const gchar *find, const gchar *replace)
 #include "egg-test.h"
 
 void
-egg_string_test (EggTest *test)
+egg_string_test (gpointer user_data)
 {
+	EggTest *test = (EggTest *) user_data;
 	gboolean ret;
 	gchar *text_safe;
 	const gchar *temp;
diff --git a/lib/packagekit-glib/egg-string.h b/lib/packagekit-glib/egg-string.h
index 668a824..5c7cf32 100644
--- a/lib/packagekit-glib/egg-string.h
+++ b/lib/packagekit-glib/egg-string.h
@@ -41,6 +41,7 @@ gboolean	 egg_strtouint				(const gchar	*text,
 gchar		*egg_strreplace				(const gchar	*text,
 							 const gchar	*find,
 							 const gchar	*replace);
+void		 egg_string_test			(gpointer	 user_data);
 
 G_END_DECLS
 
diff --git a/lib/packagekit-glib/pk-bitfield.c b/lib/packagekit-glib/pk-bitfield.c
index 347966e..72f3ea6 100644
--- a/lib/packagekit-glib/pk-bitfield.c
+++ b/lib/packagekit-glib/pk-bitfield.c
@@ -323,11 +323,12 @@ out:
 #include "egg-test.h"
 
 void
-pk_bitfield_test (EggTest *test)
+pk_bitfield_test (gpointer user_data)
 {
+	EggTest *test = (EggTest *) user_data;
 	gchar *text;
 	PkBitfield filter;
-	guint value;
+	gint value;
 	PkBitfield values;
 
 	if (!egg_test_start (test, "PkBitfield"))
diff --git a/lib/packagekit-glib/pk-bitfield.h b/lib/packagekit-glib/pk-bitfield.h
index fddca3d..07bdbec 100644
--- a/lib/packagekit-glib/pk-bitfield.h
+++ b/lib/packagekit-glib/pk-bitfield.h
@@ -51,6 +51,7 @@ PkBitfield	 pk_group_bitfield_from_text 		(const gchar	*groups);
 gchar		*pk_group_bitfield_to_text		(PkBitfield	 groups);
 PkBitfield	 pk_filter_bitfield_from_text 		(const gchar	*filters);
 gchar		*pk_filter_bitfield_to_text		(PkBitfield	 filters);
+void		 pk_bitfield_test			(gpointer	 user_data);
 
 G_END_DECLS
 
diff --git a/lib/packagekit-glib/pk-common.c b/lib/packagekit-glib/pk-common.c
index 1db2a69..b8bc3cb 100644
--- a/lib/packagekit-glib/pk-common.c
+++ b/lib/packagekit-glib/pk-common.c
@@ -599,8 +599,9 @@ pk_va_list_to_argv_test (const gchar *first_element, ...)
 }
 
 void
-pk_common_test (EggTest *test)
+pk_common_test (gpointer user_data)
 {
+	EggTest *test = (EggTest *) user_data;
 	gboolean ret;
 	gchar **array;
 	gchar *text_safe;
diff --git a/lib/packagekit-glib/pk-common.h b/lib/packagekit-glib/pk-common.h
index 4555cee..104bbc1 100644
--- a/lib/packagekit-glib/pk-common.h
+++ b/lib/packagekit-glib/pk-common.h
@@ -73,6 +73,7 @@ G_BEGIN_DECLS
  */
 #define	PK_SYSTEM_PACKAGE_LIST_FILENAME	"/var/lib/PackageKit/system.package-list"
 
+void		 pk_common_test				(gpointer	 user_data);
 gboolean	 pk_strvalidate				(const gchar	*text)
 							 G_GNUC_WARN_UNUSED_RESULT;
 gchar		*pk_strsafe				(const gchar	*text)
diff --git a/lib/packagekit-glib/pk-enum.c b/lib/packagekit-glib/pk-enum.c
index 4053bff..1d9b8e5 100644
--- a/lib/packagekit-glib/pk-enum.c
+++ b/lib/packagekit-glib/pk-enum.c
@@ -1048,8 +1048,9 @@ pk_authorize_type_enum_to_text (PkAuthorizeEnum authorize_type)
 #include "egg-test.h"
 
 void
-pk_enum_test (EggTest *test)
+pk_enum_test (gpointer user_data)
 {
+	EggTest *test = (EggTest *) user_data;
 	const gchar *string;
 	PkRoleEnum role_value;
 	guint i;
diff --git a/lib/packagekit-glib/pk-enum.h b/lib/packagekit-glib/pk-enum.h
index 292111d..6101d6e 100644
--- a/lib/packagekit-glib/pk-enum.h
+++ b/lib/packagekit-glib/pk-enum.h
@@ -590,6 +590,7 @@ typedef enum {
 } PkAuthorizeEnum;
 
 /* general */
+void		 pk_enum_test				(gpointer	 user_data);
 guint		 pk_enum_find_value			(const PkEnumMatch *table,
 							 const gchar	*string)
 							 G_GNUC_WARN_UNUSED_RESULT;
commit 762dc95a34c0a8beae0dc12fa1bc72c638f8a11b
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 2 15:49:01 2009 +0100

    glib: Fix up the PkControl properties with the interface change

diff --git a/lib/packagekit-glib/pk-control.c b/lib/packagekit-glib/pk-control.c
index 68b394f..bfba90f 100644
--- a/lib/packagekit-glib/pk-control.c
+++ b/lib/packagekit-glib/pk-control.c
@@ -1094,11 +1094,11 @@ out:
 static void
 pk_control_collect_props_cb (const char *key, const GValue *value, PkControl *control)
 {
-	if (g_strcmp0 (key, "version-major") == 0)
+	if (g_strcmp0 (key, "version-major") == 0 || g_strcmp0 (key, "VersionMajor") == 0)
 		control->priv->version_major = g_value_get_uint (value);
-	else if (g_strcmp0 (key, "version-minor") == 0)
+	else if (g_strcmp0 (key, "version-minor") == 0 || g_strcmp0 (key, "VersionMinor") == 0)
 		control->priv->version_minor = g_value_get_uint (value);
-	else if (g_strcmp0 (key, "version-micro") == 0)
+	else if (g_strcmp0 (key, "version-micro") == 0 || g_strcmp0 (key, "VersionMicro") == 0)
 		control->priv->version_micro = g_value_get_uint (value);
 	else {
 		egg_warning ("unhandled property '%s'", key);
commit 8a3d39740615de74319def0355d0540fb97e630c
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 2 15:47:58 2009 +0100

    glib2: fix up a couple of memory leaks and make valgrind and gdb happy

diff --git a/lib/packagekit-glib2/Makefile.am b/lib/packagekit-glib2/Makefile.am
index 169cad2..9c837a1 100644
--- a/lib/packagekit-glib2/Makefile.am
+++ b/lib/packagekit-glib2/Makefile.am
@@ -111,7 +111,7 @@ pk_self_test_LDADD =						\
 	$(ARCHIVE_LIBS)						\
 	$(NULL)
 
-pk_self_test_CFLAGS = -DEGG_TEST $(AM_CFLAGS)
+pk_self_test_CFLAGS = -DEGG_TEST $(AM_CFLAGS) $(WARNINGFLAGS_C)
 
 TESTS = pk-self-test
 endif
diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index 3ff01a2..0b292e6 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -301,18 +301,6 @@ pk_client_state_finish (PkClientState *state, GError *error)
 	PkClientPrivate *priv;
 	priv = state->client->priv;
 
-	g_free (state->directory);
-	g_free (state->eula_id);
-	g_free (state->key_id);
-	g_free (state->package_id);
-	g_free (state->parameter);
-	g_free (state->repo_id);
-	g_free (state->search);
-	g_free (state->value);
-	g_strfreev (state->files);
-	g_strfreev (state->package_ids);
-	g_object_unref (state->progress);
-
 	if (state->client != NULL)
 		g_object_remove_weak_pointer (G_OBJECT (state->client), (gpointer) &state->client);
 
@@ -339,9 +327,24 @@ pk_client_state_finish (PkClientState *state, GError *error)
 
 	/* remove from list */
 	g_ptr_array_remove (state->client->priv->calls, state);
+	egg_debug ("state array remove %p", state);
 
 	/* complete */
 	g_simple_async_result_complete_in_idle (state->res);
+
+	/* destroy state */
+	g_free (state->directory);
+	g_free (state->eula_id);
+	g_free (state->key_id);
+	g_free (state->package_id);
+	g_free (state->parameter);
+	g_free (state->repo_id);
+	g_free (state->search);
+	g_free (state->value);
+	g_free (state->tid);
+	g_strfreev (state->files);
+	g_strfreev (state->package_ids);
+	g_object_unref (state->progress);
 	g_object_unref (state->results);
 	g_object_unref (state->res);
 	g_slice_free (PkClientState, state);
@@ -1053,9 +1056,6 @@ pk_client_set_locale_cb (DBusGProxy *proxy, DBusGProxyCall *call, PkClientState
 		g_assert_not_reached ();
 	}
 
-	/* track state */
-	g_ptr_array_add (state->client->priv->calls, state);
-
 	/* we've sent this async */
 	egg_debug ("sent request");
 
@@ -1105,6 +1105,7 @@ pk_client_get_tid_cb (GObject *object, GAsyncResult *res, PkClientState *state)
 
 	/* track state */
 	g_ptr_array_add (state->client->priv->calls, state);
+	egg_debug ("state array add %p", state);
 
 	/* we've sent this async */
 	egg_debug ("sent locale request");
@@ -2925,6 +2926,7 @@ pk_client_adopt_async (PkClient *client, const gchar *transaction_id, GCancellab
 
 	/* track state */
 	g_ptr_array_add (client->priv->calls, state);
+	egg_debug ("state array add %p", state);
 
 	g_object_unref (res);
 }
@@ -3288,8 +3290,9 @@ pk_client_test_cancel (GCancellable *cancellable)
 }
 
 void
-pk_client_test (EggTest *test)
+pk_client_test (gpointer user_data)
 {
+	EggTest *test = (EggTest *) user_data;
 	PkClient *client;
 	gchar **package_ids;
 	gchar *file;
diff --git a/lib/packagekit-glib2/pk-client.h b/lib/packagekit-glib2/pk-client.h
index 9ad4dea..eed293d 100644
--- a/lib/packagekit-glib2/pk-client.h
+++ b/lib/packagekit-glib2/pk-client.h
@@ -100,6 +100,7 @@ struct _PkClientClass
 GQuark		 pk_client_error_quark			(void);
 GType		 pk_client_get_type		  	(void);
 PkClient	*pk_client_new				(void);
+void		 pk_client_test				(gpointer	 user_data);
 
 /* get transaction results */
 PkResults	*pk_client_generic_finish		(PkClient		*client,
diff --git a/lib/packagekit-glib2/pk-control-sync.c b/lib/packagekit-glib2/pk-control-sync.c
index c663335..8256488 100644
--- a/lib/packagekit-glib2/pk-control-sync.c
+++ b/lib/packagekit-glib2/pk-control-sync.c
@@ -266,8 +266,9 @@ pk_control_sync_new (void)
 #include "egg-test.h"
 
 void
-pk_control_sync_test (EggTest *test)
+pk_control_sync_test (gpointer user_data)
 {
+	EggTest *test = (EggTest *) user_data;
 	PkControlSync *control;
 	GError *error = NULL;
 	PkBitfield bitfield;
@@ -299,7 +300,6 @@ pk_control_sync_test (EggTest *test)
 	g_free (text);
 
 	g_object_unref (control);
-out:
 	egg_test_end (test);
 }
 #endif
diff --git a/lib/packagekit-glib2/pk-control-sync.h b/lib/packagekit-glib2/pk-control-sync.h
index 2ced5c3..f9c3b3b 100644
--- a/lib/packagekit-glib2/pk-control-sync.h
+++ b/lib/packagekit-glib2/pk-control-sync.h
@@ -64,6 +64,7 @@ struct _PkControlSyncClass
 GQuark		 pk_control_sync_error_quark		(void);
 GType		 pk_control_sync_get_type		(void);
 PkControlSync	*pk_control_sync_new			(void);
+void		 pk_control_sync_test			(gpointer		 user_data);
 
 PkBitfield	 pk_control_sync_get_roles		(PkControlSync		*control,
 							 GError			**error);
diff --git a/lib/packagekit-glib2/pk-control.c b/lib/packagekit-glib2/pk-control.c
index 28078f3..9b39586 100644
--- a/lib/packagekit-glib2/pk-control.c
+++ b/lib/packagekit-glib2/pk-control.c
@@ -1629,11 +1629,11 @@ pk_control_get_properties_state_finish (PkControlState *state, GError *error)
 static void
 pk_control_get_properties_collect_cb (const char *key, const GValue *value, PkControl *control)
 {
-	if (g_strcmp0 (key, "version-major") == 0)
+	if (g_strcmp0 (key, "version-major") == 0 || g_strcmp0 (key, "VersionMajor") == 0)
 		control->priv->version_major = g_value_get_uint (value);
-	else if (g_strcmp0 (key, "version-minor") == 0)
+	else if (g_strcmp0 (key, "version-minor") == 0 || g_strcmp0 (key, "VersionMinor") == 0)
 		control->priv->version_minor = g_value_get_uint (value);
-	else if (g_strcmp0 (key, "version-micro") == 0)
+	else if (g_strcmp0 (key, "version-micro") == 0 || g_strcmp0 (key, "VersionMicro") == 0)
 		control->priv->version_micro = g_value_get_uint (value);
 	else
 		egg_warning ("unhandled property '%s'", key);
@@ -2267,7 +2267,6 @@ pk_control_test_get_roles_cb (GObject *object, GAsyncResult *res, EggTest *test)
 	PkControl *control = PK_CONTROL (object);
 	GError *error = NULL;
 	PkBitfield *roles;
-	guint len;
 	gchar *text;
 
 	/* get the result */
@@ -2300,7 +2299,6 @@ pk_control_test_get_filters_cb (GObject *object, GAsyncResult *res, EggTest *tes
 	PkControl *control = PK_CONTROL (object);
 	GError *error = NULL;
 	PkBitfield *filters;
-	guint len;
 	gchar *text;
 
 	/* get the result */
@@ -2328,7 +2326,6 @@ pk_control_test_get_groups_cb (GObject *object, GAsyncResult *res, EggTest *test
 	PkControl *control = PK_CONTROL (object);
 	GError *error = NULL;
 	PkBitfield *groups;
-	guint len;
 	gchar *text;
 
 	/* get the result */
@@ -2423,8 +2420,9 @@ pk_control_test_get_properties_cb (GObject *object, GAsyncResult *res, EggTest *
 }
 
 void
-pk_control_test (EggTest *test)
+pk_control_test (gpointer user_data)
 {
+	EggTest *test = (EggTest *) user_data;
 	PkControl *control;
 	guint version;
 
@@ -2508,7 +2506,6 @@ pk_control_test (EggTest *test)
 	egg_test_assert (test, (version == PK_MICRO_VERSION));
 
 	g_object_unref (control);
-out:
 	egg_test_end (test);
 }
 #endif
diff --git a/lib/packagekit-glib2/pk-control.h b/lib/packagekit-glib2/pk-control.h
index 5da37bc..d708b75 100644
--- a/lib/packagekit-glib2/pk-control.h
+++ b/lib/packagekit-glib2/pk-control.h
@@ -94,6 +94,7 @@ struct _PkControlClass
 GQuark		 pk_control_error_quark			(void);
 GType		 pk_control_get_type		  	(void);
 PkControl	*pk_control_new				(void);
+void		 pk_control_test			(gpointer		 user_data);
 
 void		 pk_control_get_tid_async		(PkControl		*control,
 							 GCancellable		*cancellable,
diff --git a/lib/packagekit-glib2/pk-package-sack.c b/lib/packagekit-glib2/pk-package-sack.c
index fb21572..5112a43 100644
--- a/lib/packagekit-glib2/pk-package-sack.c
+++ b/lib/packagekit-glib2/pk-package-sack.c
@@ -146,7 +146,7 @@ pk_package_sack_add_package (PkPackageSack *sack, PkPackage *package)
 }
 
 /**
- * pk_package_sack_add_package:
+ * pk_package_sack_add_package_by_id:
  * @sack: a valid #PkPackageSack instance
  * @package_id: a package_id descriptor
  * @error: a %GError to put the error code and message in, or %NULL
@@ -168,14 +168,13 @@ pk_package_sack_add_package_by_id (PkPackageSack *sack, const gchar *package_id,
 	/* create new object */
 	package = pk_package_new ();
 	ret = pk_package_set_id (package, package_id, error);
-	if (!ret) {
-		g_object_unref (package);
+	if (!ret)
 		goto out;
-	}
-	
-	/* add to array */
-	g_ptr_array_add (sack->priv->array, package);
+
+	/* add to array, array will own object */
+	g_ptr_array_add (sack->priv->array, g_object_ref (package));
 out:
+	g_object_unref (package);
 	return ret;
 }
 
@@ -342,7 +341,7 @@ typedef struct {
  * pk_package_sack_merge_bool_state_finish:
  **/
 static void
-pk_package_sack_merge_bool_state_finish (PkPackageSackState *state, GError *error)
+pk_package_sack_merge_bool_state_finish (PkPackageSackState *state, const GError *error)
 {
 	/* remove weak ref */
 	if (state->sack != NULL)
@@ -358,8 +357,9 @@ pk_package_sack_merge_bool_state_finish (PkPackageSackState *state, GError *erro
 	if (state->ret) {
 		g_simple_async_result_set_op_res_gboolean (state->res, state->ret);
 	} else {
-		g_simple_async_result_set_from_error (state->res, error);
-		g_error_free (error);
+		/* FIXME: change g_simple_async_result_set_from_error() to accept const GError */
+		g_simple_async_result_set_from_error (state->res, (GError*) error);
+//		g_error_free (error);
 	}
 
 	/* complete */
@@ -378,8 +378,8 @@ pk_package_sack_merge_resolve_cb (GObject *source_object, GAsyncResult *res, PkP
 {
 	PkClient *client = PK_CLIENT (source_object);
 	GError *error = NULL;
-	PkResults *results;
-	GPtrArray *packages;
+	const PkResults *results;
+	GPtrArray *packages = NULL;
 	const PkResultItemPackage *item;
 	guint i;
 	PkPackage *package;
@@ -390,7 +390,7 @@ pk_package_sack_merge_resolve_cb (GObject *source_object, GAsyncResult *res, PkP
 		egg_warning ("failed to resolve: %s", error->message);
 		pk_package_sack_merge_bool_state_finish (state, error);
 		g_error_free (error);
-		return;
+		goto out;
 	}
 
 	/* get the packages */
@@ -400,7 +400,7 @@ pk_package_sack_merge_resolve_cb (GObject *source_object, GAsyncResult *res, PkP
 		error = g_error_new (1, 0, "no packages found!");
 		pk_package_sack_merge_bool_state_finish (state, error);
 		g_error_free (error);
-		return;
+		goto out;
 	}
 
 	/* set data on each item */
@@ -411,23 +411,28 @@ pk_package_sack_merge_resolve_cb (GObject *source_object, GAsyncResult *res, PkP
 
 		/* get package, and set data */
 		package = pk_package_sack_find_by_id (state->sack, item->package_id);
-		if (package != NULL) {
-			g_object_set (package,
-				      "info", item->info_enum,
-				      "summary", item->summary,
-				      NULL);
-			g_object_unref (package);
-		} else {
+		if (package == NULL) {
 			egg_warning ("failed to find %s", item->package_id);
+			continue;
 		}
+
+		/* set data */
+		g_object_set (package,
+			      "info", item->info_enum,
+			      "summary", item->summary,
+			      NULL);
+		g_object_unref (package);
 	}
 
+
 	/* all okay */
 	state->ret = TRUE;
-	g_object_unref (results);
 
 	/* we're done */
 	pk_package_sack_merge_bool_state_finish (state, error);
+out:
+	if (packages != NULL)
+		g_ptr_array_unref (packages);
 }
 
 /**
@@ -456,7 +461,9 @@ pk_package_sack_merge_resolve_async (PkPackageSack *sack, GCancellable *cancella
 	/* save state */
 	state = g_slice_new0 (PkPackageSackState);
 	state->res = g_object_ref (res);
-	state->cancellable = cancellable;
+	if (cancellable != NULL) {
+		state->cancellable = g_object_ref (cancellable);
+	}
 	state->sack = sack;
 	state->ret = FALSE;
 	g_object_add_weak_pointer (G_OBJECT (state->sack), (gpointer) &state->sack);
@@ -466,7 +473,6 @@ pk_package_sack_merge_resolve_async (PkPackageSack *sack, GCancellable *cancella
 	pk_client_resolve_async (sack->priv->client, pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), package_ids,
 				 cancellable, progress_callback, progress_user_data,
 				 (GAsyncReadyCallback) pk_package_sack_merge_resolve_cb, state);
-
 	g_strfreev (package_ids);
 	g_object_unref (res);
 }
@@ -508,8 +514,8 @@ pk_package_sack_merge_details_cb (GObject *source_object, GAsyncResult *res, PkP
 {
 	PkClient *client = PK_CLIENT (source_object);
 	GError *error = NULL;
-	PkResults *results;
-	GPtrArray *details;
+	const PkResults *results;
+	GPtrArray *details = NULL;
 	const PkResultItemDetails *item;
 	guint i;
 	PkPackage *package;
@@ -520,17 +526,16 @@ pk_package_sack_merge_details_cb (GObject *source_object, GAsyncResult *res, PkP
 		egg_warning ("failed to details: %s", error->message);
 		pk_package_sack_merge_bool_state_finish (state, error);
 		g_error_free (error);
-		return;
+		goto out;
 	}
 
 	/* get the details */
 	details = pk_results_get_details_array (results);
 	if (details->len == 0) {
-		egg_error ("%i", state->ret);
 		error = g_error_new (1, 0, "no details found!");
 		pk_package_sack_merge_bool_state_finish (state, error);
 		g_error_free (error);
-		return;
+		goto out;
 	}
 
 	/* set data on each item */
@@ -541,26 +546,30 @@ pk_package_sack_merge_details_cb (GObject *source_object, GAsyncResult *res, PkP
 
 		/* get package, and set data */
 		package = pk_package_sack_find_by_id (state->sack, item->package_id);
-		if (package != NULL) {
-			g_object_set (package,
-				      "license", item->license,
-				      "group", item->group_enum,
-				      "description", item->description,
-				      "url", item->url,
-				      "size", item->size,
-				      NULL);
-			g_object_unref (package);
-		} else {
+		if (package == NULL) {
 			egg_warning ("failed to find %s", item->package_id);
+			continue;
 		}
+
+		/* set data */
+		g_object_set (package,
+			      "license", item->license,
+			      "group", item->group_enum,
+			      "description", item->description,
+			      "url", item->url,
+			      "size", item->size,
+			      NULL);
+		g_object_unref (package);
 	}
 
 	/* all okay */
 	state->ret = TRUE;
-	g_object_unref (results);
 
 	/* we're done */
 	pk_package_sack_merge_bool_state_finish (state, error);
+out:
+	if (details != NULL)
+		g_ptr_array_unref (details);
 }
 
 /**
@@ -589,7 +598,9 @@ pk_package_sack_merge_details_async (PkPackageSack *sack, GCancellable *cancella
 	/* save state */
 	state = g_slice_new0 (PkPackageSackState);
 	state->res = g_object_ref (res);
-	state->cancellable = cancellable;
+	if (cancellable != NULL) {
+		state->cancellable = g_object_ref (cancellable);
+	}
 	state->sack = sack;
 	state->ret = FALSE;
 	g_object_add_weak_pointer (G_OBJECT (state->sack), (gpointer) &state->sack);
@@ -614,8 +625,8 @@ pk_package_sack_merge_update_detail_cb (GObject *source_object, GAsyncResult *re
 {
 	PkClient *client = PK_CLIENT (source_object);
 	GError *error = NULL;
-	PkResults *results;
-	GPtrArray *update_details;
+	const PkResults *results;
+	GPtrArray *update_details = NULL;
 	const PkResultItemUpdateDetail *item;
 	guint i;
 	PkPackage *package;
@@ -626,17 +637,16 @@ pk_package_sack_merge_update_detail_cb (GObject *source_object, GAsyncResult *re
 		egg_warning ("failed to update_detail: %s", error->message);
 		pk_package_sack_merge_bool_state_finish (state, error);
 		g_error_free (error);
-		return;
+		goto out;
 	}
 
 	/* get the update_details */
 	update_details = pk_results_get_update_detail_array (results);
 	if (update_details->len == 0) {
-		egg_error ("%i", state->ret);
 		error = g_error_new (1, 0, "no update details found!");
 		pk_package_sack_merge_bool_state_finish (state, error);
 		g_error_free (error);
-		return;
+		goto out;
 	}
 
 	/* set data on each item */
@@ -647,32 +657,36 @@ pk_package_sack_merge_update_detail_cb (GObject *source_object, GAsyncResult *re
 
 		/* get package, and set data */
 		package = pk_package_sack_find_by_id (state->sack, item->package_id);
-		if (package != NULL) {
-			g_object_set (package,
-				      "update-updates", item->updates,
-				      "update-obsoletes", item->obsoletes,
-				      "update-vendor-url", item->vendor_url,
-				      "update-bugzilla-url", item->bugzilla_url,
-				      "update-cve-url", item->cve_url,
-				      "update-restart", item->restart_enum,
-				      "update-text", item->update_text,
-				      "update-changelog", item->changelog,
-				      "update-state", item->state_enum,
-				      "update-issued", item->issued,
-				      "update-updated", item->updated,
-				      NULL);
-			g_object_unref (package);
-		} else {
+		if (package == NULL) {
 			egg_warning ("failed to find %s", item->package_id);
+			continue;
 		}
+
+		/* set data */
+		g_object_set (package,
+			      "update-updates", item->updates,
+			      "update-obsoletes", item->obsoletes,
+			      "update-vendor-url", item->vendor_url,
+			      "update-bugzilla-url", item->bugzilla_url,
+			      "update-cve-url", item->cve_url,
+			      "update-restart", item->restart_enum,
+			      "update-text", item->update_text,
+			      "update-changelog", item->changelog,
+			      "update-state", item->state_enum,
+			      "update-issued", item->issued,
+			      "update-updated", item->updated,
+			      NULL);
+		g_object_unref (package);
 	}
 
 	/* all okay */
 	state->ret = TRUE;
-	g_object_unref (results);
 
 	/* we're done */
 	pk_package_sack_merge_bool_state_finish (state, error);
+out:
+	if (update_details != NULL)
+		g_ptr_array_unref (update_details);
 }
 
 /**
@@ -701,7 +715,9 @@ pk_package_sack_merge_update_detail_async (PkPackageSack *sack, GCancellable *ca
 	/* save state */
 	state = g_slice_new0 (PkPackageSackState);
 	state->res = g_object_ref (res);
-	state->cancellable = cancellable;
+	if (cancellable != NULL) {
+		state->cancellable = g_object_ref (cancellable);
+	}
 	state->sack = sack;
 	state->ret = FALSE;
 	g_object_add_weak_pointer (G_OBJECT (state->sack), (gpointer) &state->sack);
@@ -901,12 +917,12 @@ pk_package_sack_test_update_detail_cb (GObject *object, GAsyncResult *res, EggTe
 }
 
 void
-pk_package_sack_test (EggTest *test)
+pk_package_sack_test (gpointer user_data)
 {
+	EggTest *test = (EggTest *) user_data;
 	gboolean ret;
 	PkPackageSack *sack;
 	PkPackage *package;
-	const gchar *id;
 	gchar *text;
 	guint size;
 	PkInfoEnum info = PK_INFO_ENUM_UNKNOWN;
@@ -988,6 +1004,8 @@ pk_package_sack_test (EggTest *test)
 		      "url", &text,
 		      NULL);
 	egg_test_assert (test, (g_strcmp0 (text, "http://live.gnome.org/powertop") == 0));
+	g_object_unref (package);
+	g_free (text);
 
 	/************************************************************/
 	egg_test_title (test, "merge update detail results");
@@ -1031,7 +1049,6 @@ pk_package_sack_test (EggTest *test)
 	egg_test_assert (test, !ret);
 
 	g_object_unref (sack);
-out:
 	egg_test_end (test);
 }
 #endif
diff --git a/lib/packagekit-glib2/pk-package-sack.h b/lib/packagekit-glib2/pk-package-sack.h
index f296a1d..6d826cc 100644
--- a/lib/packagekit-glib2/pk-package-sack.h
+++ b/lib/packagekit-glib2/pk-package-sack.h
@@ -75,6 +75,7 @@ struct _PkPackageSackClass
 GQuark		 pk_package_sack_error_quark		(void);
 GType		 pk_package_sack_get_type		(void);
 PkPackageSack	*pk_package_sack_new			(void);
+void		 pk_package_sack_test			(gpointer		 user_data);
 
 /* managing the array */
 guint		 pk_package_sack_get_size		(PkPackageSack		*sack);
diff --git a/lib/packagekit-glib2/pk-package.c b/lib/packagekit-glib2/pk-package.c
index 5f1295f..b95503a 100644
--- a/lib/packagekit-glib2/pk-package.c
+++ b/lib/packagekit-glib2/pk-package.c
@@ -651,6 +651,20 @@ pk_package_finalize (GObject *object)
 	g_free (priv->id_arch);
 	g_free (priv->id_data);
 	g_free (priv->summary);
+	g_free (priv->license);
+	g_free (priv->description);
+	g_free (priv->url);
+	g_free (priv->update_updates);
+	g_free (priv->update_obsoletes);
+	g_free (priv->update_vendor_url);
+	g_free (priv->update_bugzilla_url);
+	g_free (priv->update_cve_url);
+	g_free (priv->update_text);
+	g_free (priv->update_changelog);
+	if (priv->update_issued != NULL)
+		g_date_free (priv->update_issued);
+	if (priv->update_updated != NULL)
+		g_date_free (priv->update_updated);
 
 	G_OBJECT_CLASS (pk_package_parent_class)->finalize (object);
 }
@@ -675,8 +689,9 @@ pk_package_new (void)
 #include "egg-test.h"
 
 void
-pk_package_test (EggTest *test)
+pk_package_test (gpointer user_data)
 {
+	EggTest *test = (EggTest *) user_data;
 	gboolean ret;
 	PkPackage *package;
 	const gchar *id;
@@ -733,7 +748,6 @@ pk_package_test (EggTest *test)
 	g_free (text);
 
 	g_object_unref (package);
-out:
 	egg_test_end (test);
 }
 #endif
diff --git a/lib/packagekit-glib2/pk-package.h b/lib/packagekit-glib2/pk-package.h
index 0920961..762b004 100644
--- a/lib/packagekit-glib2/pk-package.h
+++ b/lib/packagekit-glib2/pk-package.h
@@ -71,6 +71,7 @@ struct _PkPackageClass
 GQuark		 pk_package_error_quark			(void);
 GType		 pk_package_get_type		  	(void);
 PkPackage	*pk_package_new				(void);
+void		 pk_package_test			(gpointer	 user_data);
 
 gboolean	 pk_package_set_id			(PkPackage	*package,
 							 const gchar	*package_id,
diff --git a/lib/packagekit-glib2/pk-progress.c b/lib/packagekit-glib2/pk-progress.c
index eb6dedf..c391233 100644
--- a/lib/packagekit-glib2/pk-progress.c
+++ b/lib/packagekit-glib2/pk-progress.c
@@ -260,8 +260,9 @@ pk_progress_new (void)
 #include "egg-test.h"
 
 void
-pk_progress_test (EggTest *test)
+pk_progress_test (gpointer user_data)
 {
+	EggTest *test = (EggTest *) user_data;
 	PkProgress *progress;
 
 	if (!egg_test_start (test, "PkProgress"))
diff --git a/lib/packagekit-glib2/pk-progress.h b/lib/packagekit-glib2/pk-progress.h
index edb1bfd..5fdc567 100644
--- a/lib/packagekit-glib2/pk-progress.h
+++ b/lib/packagekit-glib2/pk-progress.h
@@ -83,6 +83,7 @@ typedef enum {
 typedef void	(*PkProgressCallback)			(PkProgress		*progress,
 							 PkProgressType		 type,
                                                          gpointer		 user_data);
+void		 pk_progress_test			(gpointer		 user_data);
 
 G_END_DECLS
 
diff --git a/lib/packagekit-glib2/pk-results.c b/lib/packagekit-glib2/pk-results.c
index f74507f..c9fc53e 100644
--- a/lib/packagekit-glib2/pk-results.c
+++ b/lib/packagekit-glib2/pk-results.c
@@ -111,6 +111,7 @@ pk_result_item_update_detail_free (PkResultItemUpdateDetail *item)
 		g_date_free (item->issued);
 	if (item->updated != NULL)
 		g_date_free (item->updated);
+	g_free (item);
 }
 
 /**
@@ -713,7 +714,7 @@ pk_results_get_exit_code (PkResults *results)
  * Return value: A #GPtrArray array of #PkResultItemDetails's, free with g_ptr_array_unref().
  **/
 GPtrArray *
-pk_results_get_package_array (PkResults *results)
+pk_results_get_package_array (const PkResults *results)
 {
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	return g_ptr_array_ref (results->priv->package_array);
@@ -776,7 +777,7 @@ pk_results_get_package_sack (PkResults *results)
  * Return value: A #GPtrArray array of #PkResultItemPackage's, free with g_ptr_array_unref().
  **/
 GPtrArray *
-pk_results_get_details_array (PkResults *results)
+pk_results_get_details_array (const PkResults *results)
 {
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	return g_ptr_array_ref (results->priv->details_array);
@@ -791,7 +792,7 @@ pk_results_get_details_array (PkResults *results)
  * Return value: A #GPtrArray array of #PkResultItemUpdateDetail's, free with g_ptr_array_unref().
  **/
 GPtrArray *
-pk_results_get_update_detail_array (PkResults *results)
+pk_results_get_update_detail_array (const PkResults *results)
 {
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	return g_ptr_array_ref (results->priv->update_detail_array);
@@ -806,7 +807,7 @@ pk_results_get_update_detail_array (PkResults *results)
  * Return value: A #GPtrArray array of #PkResultItemCategory's, free with g_ptr_array_unref().
  **/
 GPtrArray *
-pk_results_get_category_array (PkResults *results)
+pk_results_get_category_array (const PkResults *results)
 {
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	return g_ptr_array_ref (results->priv->category_array);
@@ -821,7 +822,7 @@ pk_results_get_category_array (PkResults *results)
  * Return value: A #GPtrArray array of #PkResultItemDistroUpgrade's, free with g_ptr_array_unref().
  **/
 GPtrArray *
-pk_results_get_distro_upgrade_array (PkResults *results)
+pk_results_get_distro_upgrade_array (const PkResults *results)
 {
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	return g_ptr_array_ref (results->priv->distro_upgrade_array);
@@ -836,7 +837,7 @@ pk_results_get_distro_upgrade_array (PkResults *results)
  * Return value: A #GPtrArray array of #PkResultItemRequireRestart's, free with g_ptr_array_unref().
  **/
 GPtrArray *
-pk_results_get_require_restart_array (PkResults *results)
+pk_results_get_require_restart_array (const PkResults *results)
 {
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	return g_ptr_array_ref (results->priv->require_restart_array);
@@ -851,7 +852,7 @@ pk_results_get_require_restart_array (PkResults *results)
  * Return value: A #GPtrArray array of #PkResultItemTransaction's, free with g_ptr_array_unref().
  **/
 GPtrArray *
-pk_results_get_transaction_array (PkResults *results)
+pk_results_get_transaction_array (const PkResults *results)
 {
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	return g_ptr_array_ref (results->priv->transaction_array);
@@ -866,7 +867,7 @@ pk_results_get_transaction_array (PkResults *results)
  * Return value: A #GPtrArray array of #PkResultItemFiles's, free with g_ptr_array_unref().
  **/
 GPtrArray *
-pk_results_get_files_array (PkResults *results)
+pk_results_get_files_array (const PkResults *results)
 {
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	return g_ptr_array_ref (results->priv->files_array);
@@ -881,7 +882,7 @@ pk_results_get_files_array (PkResults *results)
  * Return value: A #GPtrArray array of #PkResultItemRepoSignatureRequired's, free with g_ptr_array_unref().
  **/
 GPtrArray *
-pk_results_get_repo_signature_required_array (PkResults *results)
+pk_results_get_repo_signature_required_array (const PkResults *results)
 {
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	return g_ptr_array_ref (results->priv->repo_signature_required_array);
@@ -896,7 +897,7 @@ pk_results_get_repo_signature_required_array (PkResults *results)
  * Return value: A #GPtrArray array of #PkResultItemEulaRequired's, free with g_ptr_array_unref().
  **/
 GPtrArray *
-pk_results_get_eula_required_array (PkResults *results)
+pk_results_get_eula_required_array (const PkResults *results)
 {
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	return g_ptr_array_ref (results->priv->eula_required_array);
@@ -911,7 +912,7 @@ pk_results_get_eula_required_array (PkResults *results)
  * Return value: A #GPtrArray array of #PkResultItemMediaChangeRequired's, free with g_ptr_array_unref().
  **/
 GPtrArray *
-pk_results_get_media_change_required_array (PkResults *results)
+pk_results_get_media_change_required_array (const PkResults *results)
 {
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	return g_ptr_array_ref (results->priv->media_change_required_array);
@@ -926,7 +927,7 @@ pk_results_get_media_change_required_array (PkResults *results)
  * Return value: A #GPtrArray array of #PkResultItemRepoDetail's, free with g_ptr_array_unref().
  **/
 GPtrArray *
-pk_results_get_repo_detail_array (PkResults *results)
+pk_results_get_repo_detail_array (const PkResults *results)
 {
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	return g_ptr_array_ref (results->priv->repo_detail_array);
@@ -941,7 +942,7 @@ pk_results_get_repo_detail_array (PkResults *results)
  * Return value: A #GPtrArray array of #PkResultItemErrorCode's, free with g_ptr_array_unref().
  **/
 GPtrArray *
-pk_results_get_error_code_array (PkResults *results)
+pk_results_get_error_code_array (const PkResults *results)
 {
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	return g_ptr_array_ref (results->priv->error_code_array);
@@ -977,7 +978,7 @@ pk_results_get_error_code (PkResults *results)
  * Return value: A #GPtrArray array of #PkResultItemMessage's, free with g_ptr_array_unref().
  **/
 GPtrArray *
-pk_results_get_message_array (PkResults *results)
+pk_results_get_message_array (const PkResults *results)
 {
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	return g_ptr_array_ref (results->priv->message_array);
@@ -1065,8 +1066,9 @@ pk_results_new (void)
 #include "egg-test.h"
 
 void
-pk_results_test (EggTest *test)
+pk_results_test (gpointer user_data)
 {
+	EggTest *test = (EggTest *) user_data;
 	gboolean ret;
 	PkResults *results;
 	PkExitEnum exit_enum;
@@ -1113,7 +1115,6 @@ pk_results_test (EggTest *test)
 	g_ptr_array_unref (packages);
 
 	g_object_unref (results);
-out:
 	egg_test_end (test);
 }
 #endif
diff --git a/lib/packagekit-glib2/pk-results.h b/lib/packagekit-glib2/pk-results.h
index 2d0834a..46d7f54 100644
--- a/lib/packagekit-glib2/pk-results.h
+++ b/lib/packagekit-glib2/pk-results.h
@@ -256,10 +256,11 @@ typedef struct
 GQuark		 pk_results_error_quark			(void);
 GType		 pk_results_get_type		  	(void);
 PkResults	*pk_results_new				(void);
+void		 pk_results_test			(gpointer		 user_data);
 
 /* set */
-gboolean	 pk_results_set_exit_code		(PkResults	*results,
-							 PkExitEnum	 exit_enum);
+gboolean	 pk_results_set_exit_code		(PkResults		*results,
+							 PkExitEnum		 exit_enum);
 
 /* add */
 gboolean	 pk_results_add_package			(PkResults		*results,
@@ -346,20 +347,20 @@ PkPackageSack	*pk_results_get_package_sack		(PkResults		*results);
 const PkResultItemErrorCode *pk_results_get_error_code	(PkResults		*results);
 
 /* get array objects */
-GPtrArray	*pk_results_get_package_array		(PkResults		*results);
-GPtrArray	*pk_results_get_details_array		(PkResults		*results);
-GPtrArray	*pk_results_get_update_detail_array	(PkResults		*results);
-GPtrArray	*pk_results_get_category_array		(PkResults		*results);
-GPtrArray	*pk_results_get_distro_upgrade_array	(PkResults		*results);
-GPtrArray	*pk_results_get_require_restart_array	(PkResults		*results);
-GPtrArray	*pk_results_get_transaction_array	(PkResults		*results);
-GPtrArray	*pk_results_get_files_array		(PkResults		*results);
-GPtrArray	*pk_results_get_repo_signature_required_array (PkResults	*results);
-GPtrArray	*pk_results_get_eula_required_array	(PkResults		*results);
-GPtrArray	*pk_results_get_media_change_required_array (PkResults		*results);
-GPtrArray	*pk_results_get_repo_detail_array	(PkResults		*results);
-GPtrArray	*pk_results_get_error_code_array	(PkResults		*results);
-GPtrArray	*pk_results_get_message_array		(PkResults		*results);
+GPtrArray	*pk_results_get_package_array		(const PkResults	*results);
+GPtrArray	*pk_results_get_details_array		(const PkResults	*results);
+GPtrArray	*pk_results_get_update_detail_array	(const PkResults	*results);
+GPtrArray	*pk_results_get_category_array		(const PkResults	*results);
+GPtrArray	*pk_results_get_distro_upgrade_array	(const PkResults	*results);
+GPtrArray	*pk_results_get_require_restart_array	(const PkResults	*results);
+GPtrArray	*pk_results_get_transaction_array	(const PkResults	*results);
+GPtrArray	*pk_results_get_files_array		(const PkResults	*results);
+GPtrArray	*pk_results_get_repo_signature_required_array (const PkResults	*results);
+GPtrArray	*pk_results_get_eula_required_array	(const PkResults	*results);
+GPtrArray	*pk_results_get_media_change_required_array (const PkResults	*results);
+GPtrArray	*pk_results_get_repo_detail_array	(const PkResults	*results);
+GPtrArray	*pk_results_get_error_code_array	(const PkResults	*results);
+GPtrArray	*pk_results_get_message_array		(const PkResults	*results);
 
 G_END_DECLS
 
diff --git a/lib/packagekit-glib2/pk-self-test.c b/lib/packagekit-glib2/pk-self-test.c
index 62cd55f..a13abe8 100644
--- a/lib/packagekit-glib2/pk-self-test.c
+++ b/lib/packagekit-glib2/pk-self-test.c
@@ -24,6 +24,16 @@
 #include <glib-object.h>
 #include "egg-test.h"
 #include "egg-debug.h"
+#include "egg-string.h"
+
+#include "pk-client.h"
+#include "pk-common.h"
+#include "pk-control.h"
+#include "pk-control-sync.h"
+#include "pk-enum.h"
+#include "pk-package-sack.h"
+#include "pk-results.h"
+#include "pk-version.h"
 
 int
 main (int argc, char **argv)
@@ -35,6 +45,7 @@ main (int argc, char **argv)
 	egg_debug_init (TRUE);
 
 	/* tests go here */
+	egg_string_test (test);
 	pk_common_test (test);
 	pk_enum_test (test);
 	pk_bitfield_test (test);
commit add0dc2feff8380c442cff241c20ffb3398dec0b
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 2 14:32:30 2009 +0100

    spec: Property names have to be WindowsStyleCaps

diff --git a/src/org.freedesktop.PackageKit.Transaction.xml b/src/org.freedesktop.PackageKit.Transaction.xml
index 44313cf..aafc394 100644
--- a/src/org.freedesktop.PackageKit.Transaction.xml
+++ b/src/org.freedesktop.PackageKit.Transaction.xml
@@ -14,7 +14,7 @@
     </doc:doc>
 
     <!--*****************************************************************************************-->
-    <property name="role" type="s" access="read">
+    <property name="Role" type="s" access="read">
       <doc:doc>
         <doc:description>
           <doc:para>
@@ -23,7 +23,7 @@
         </doc:description>
       </doc:doc>
     </property>
-    <property name="status" type="s" access="read">
+    <property name="Status" type="s" access="read">
       <doc:doc>
         <doc:description>
           <doc:para>
@@ -32,7 +32,7 @@
         </doc:description>
       </doc:doc>
     </property>
-    <property name="last-package" type="s" access="read">
+    <property name="LastPackage" type="s" access="read">
       <doc:doc>
         <doc:description>
           <doc:para>
@@ -41,7 +41,7 @@
         </doc:description>
       </doc:doc>
     </property>
-    <property name="uid" type="u" access="read">
+    <property name="Uid" type="u" access="read">
       <doc:doc>
         <doc:description>
           <doc:para>
@@ -50,7 +50,7 @@
         </doc:description>
       </doc:doc>
     </property>
-    <property name="percentage" type="u" access="read">
+    <property name="Percentage" type="u" access="read">
       <doc:doc>
         <doc:description>
           <doc:para>
@@ -62,7 +62,7 @@
         </doc:description>
       </doc:doc>
     </property>
-    <property name="subpercentage" type="u" access="read">
+    <property name="Subpercentage" type="u" access="read">
       <doc:doc>
         <doc:description>
           <doc:para>
@@ -74,7 +74,7 @@
         </doc:description>
       </doc:doc>
     </property>
-    <property name="allow-cancel" type="b" access="read">
+    <property name="AllowCancel" type="b" access="read">
       <doc:doc>
         <doc:description>
           <doc:para>
@@ -83,7 +83,7 @@
         </doc:description>
       </doc:doc>
     </property>
-    <property name="caller-active" type="b" access="read">
+    <property name="CallerActive" type="b" access="read">
       <doc:doc>
         <doc:description>
           <doc:para>
diff --git a/src/org.freedesktop.PackageKit.xml b/src/org.freedesktop.PackageKit.xml
index c229d03..6992c86 100644
--- a/src/org.freedesktop.PackageKit.xml
+++ b/src/org.freedesktop.PackageKit.xml
@@ -14,7 +14,7 @@
     </doc:doc>
 
     <!--*****************************************************************************************-->
-    <property name="version-major" type="u" access="read">
+    <property name="VersionMajor" type="u" access="read">
       <doc:doc>
         <doc:description>
           <doc:para>
@@ -23,7 +23,7 @@
         </doc:description>
       </doc:doc>
     </property>
-    <property name="version-minor" type="u" access="read">
+    <property name="VersionMinor" type="u" access="read">
       <doc:doc>
         <doc:description>
           <doc:para>
@@ -32,7 +32,7 @@
         </doc:description>
       </doc:doc>
     </property>
-    <property name="version-micro" type="u" access="read">
+    <property name="VersionMicro" type="u" access="read">
       <doc:doc>
         <doc:description>
           <doc:para>


More information about the PackageKit-commit mailing list