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

Richard Hughes hughsient at kemper.freedesktop.org
Wed Sep 9 06:43:47 PDT 2009


 backends/dummy/pk-backend-dummy.c                |   29 
 backends/yum/yum-comps-groups.conf               |    3 
 backends/yum/yumBackend.py                       |   19 
 client/.gitignore                                |    2 
 client/Makefile.am                               |   82 
 client/pk-console-test.c                         | 1639 -----------------
 client/pk-console.c                              | 2097 +++++------------------
 client/pk-generate-pack.c                        |  232 +-
 client/pk-monitor-test.c                         |  342 ---
 client/pk-monitor.c                              |  284 ++-
 client/pk-progress-bar.c                         |    1 
 client/pk-progress-bar.h                         |    1 
 client/pk-self-test.c                            |    3 
 client/pk-task-text.c                            |  463 -----
 client/pk-task-text.h                            |   60 
 client/pk-text.c                                 |  100 -
 client/pk-text.h                                 |   35 
 client/pk-tools-common.c                         |  143 -
 client/pk-tools-common.h                         |   34 
 configure.ac                                     |   24 
 contrib/PackageKit.spec.in                       |    7 
 contrib/browser-plugin/Makefile.am               |    5 
 contrib/browser-plugin/pk-main.c                 |    1 
 contrib/browser-plugin/pk-plugin-install.c       |  146 -
 contrib/browser-plugin/pk-plugin-install.h       |    1 
 contrib/command-not-found/.gitignore             |    1 
 contrib/command-not-found/Makefile.am            |   11 
 contrib/command-not-found/pk-command-not-found.c |  140 -
 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/Makefile.am            |   11 
 contrib/debuginfo-install/pk-debuginfo-install.c |  360 +--
 contrib/debuginfo-install/pk-progress-bar.c      |  357 ---
 contrib/debuginfo-install/pk-progress-bar.h      |   64 
 docs/api/Makefile.am                             |   19 
 docs/api/PackageKit-docs.sgml                    |   12 
 lib/Makefile.am                                  |    6 
 lib/packagekit-glib2/.gitignore                  |    1 
 lib/packagekit-glib2/Makefile.am                 |   45 
 lib/packagekit-glib2/packagekit-private.h        |   36 
 lib/packagekit-glib2/packagekit.h                |    5 
 lib/packagekit-glib2/pk-client-sync.c            | 1617 +++++++++++++++++
 lib/packagekit-glib2/pk-client-sync.h            |  289 +++
 lib/packagekit-glib2/pk-client.c                 |  346 +++
 lib/packagekit-glib2/pk-client.h                 |    5 
 lib/packagekit-glib2/pk-console-shared.c         |  361 +++
 lib/packagekit-glib2/pk-console-shared.h         |   45 
 lib/packagekit-glib2/pk-control-sync.c           |  330 ---
 lib/packagekit-glib2/pk-control-sync.h           |   79 
 lib/packagekit-glib2/pk-control.c                |  100 +
 lib/packagekit-glib2/pk-control.h                |    7 
 lib/packagekit-glib2/pk-desktop.c                |  407 ++++
 lib/packagekit-glib2/pk-desktop.h                |   92 +
 lib/packagekit-glib2/pk-item.c                   |  997 ++++++++++
 lib/packagekit-glib2/pk-item.h                   |  334 +++
 lib/packagekit-glib2/pk-package-sack.c           |   34 
 lib/packagekit-glib2/pk-package-sack.h           |    5 
 lib/packagekit-glib2/pk-package.c                |   86 
 lib/packagekit-glib2/pk-package.h                |    5 
 lib/packagekit-glib2/pk-progress-bar.c           |  358 +++
 lib/packagekit-glib2/pk-progress-bar.h           |   64 
 lib/packagekit-glib2/pk-progress.c               |  120 +
 lib/packagekit-glib2/pk-progress.h               |    5 
 lib/packagekit-glib2/pk-results.c                |  521 +----
 lib/packagekit-glib2/pk-results.h                |  271 --
 lib/packagekit-glib2/pk-self-test.c              |    7 
 lib/packagekit-glib2/pk-service-pack.c           | 1126 ++++++++++++
 lib/packagekit-glib2/pk-service-pack.h           |  119 +
 lib/packagekit-glib2/pk-task-sync.c              |  294 +++
 lib/packagekit-glib2/pk-task-sync.h              |   65 
 lib/packagekit-glib2/pk-task-text.c              |  496 +++++
 lib/packagekit-glib2/pk-task-text.h              |   60 
 lib/packagekit-glib2/pk-task-wrapper.c           |    8 
 lib/packagekit-glib2/pk-task.c                   |   13 
 lib/packagekit-glib2/pk-task.h                   |    6 
 lib/packagekit-qt/src/client.cpp                 |    2 
 po/POTFILES.in                                   |    7 
 po/bn_IN.po                                      |  648 ++++---
 po/cs.po                                         |  124 -
 po/es.po                                         |  859 ++++-----
 po/gu.po                                         |  605 +++---
 po/kn.po                                         |  864 +++++----
 po/ml.po                                         |  605 +++---
 po/mr.po                                         |  394 ++--
 po/nl.po                                         |  405 ++--
 po/pa.po                                         |  838 +++++----
 po/pl.po                                         |  605 +++---
 po/te.po                                         |  856 +++++----
 po/uk.po                                         |  750 +++++---
 src/Makefile.am                                  |   10 
 src/org.freedesktop.PackageKit.Transaction.xml   |   13 
 src/pk-backend-internal.h                        |    2 
 src/pk-backend-spawn.c                           |    2 
 src/pk-backend.c                                 |  139 -
 src/pk-backend.h                                 |    2 
 src/pk-cache.c                                   |   15 
 src/pk-cache.h                                   |    6 
 src/pk-conf.c                                    |    2 
 src/pk-engine.c                                  |    2 
 src/pk-file-monitor.c                            |    2 
 src/pk-network-stack.h                           |    2 
 src/pk-network.h                                 |    2 
 src/pk-polkit-action-lookup.c                    |   14 
 src/pk-spawn.c                                   |    2 
 src/pk-syslog.h                                  |    2 
 src/pk-transaction-db.c                          |    2 
 src/pk-transaction-db.h                          |    2 
 src/pk-transaction-extra.c                       |  137 -
 src/pk-transaction-list.c                        |    2 
 src/pk-transaction-list.h                        |    2 
 src/pk-transaction.c                             |  230 +-
 src/pk-transaction.h                             |    2 
 114 files changed, 13463 insertions(+), 10190 deletions(-)

New commits:
commit de05e437f3a739a84eb721eabf7e9ac05525bfc2
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 14:41:35 2009 +0100

    trivial: fix up a few translations to be easier to translate

diff --git a/lib/packagekit-glib2/pk-task-text.c b/lib/packagekit-glib2/pk-task-text.c
index b571488..20130ee 100644
--- a/lib/packagekit-glib2/pk-task-text.c
+++ b/lib/packagekit-glib2/pk-task-text.c
@@ -60,11 +60,12 @@ dkp_task_text_untrusted_question (PkTask *task, guint request, PkResults *result
 	/* clear new line */
 	g_print ("\n");
 
-	/* ask the user */
+	/* TRANSLATORS: ask the user if they are comfortable installing insecure packages */
 	ret = pk_console_get_prompt (_("Do you want to allow installing of unsigned software?"), FALSE);
 	if (ret) {
 		pk_task_user_accepted (task, request);
 	} else {
+		/* TRANSLATORS: tell the user we've not done anything */
 		g_print ("%s\n", _("The unsigned software will not be installed."));
 		pk_task_user_declined (task, request);
 	}
@@ -97,23 +98,39 @@ dkp_task_text_key_question (PkTask *task, guint request, PkResults *results)
 		/* create printable */
 		package = pk_package_id_to_printable (item->package_id);
 
+		/* TRANSLATORS: the package repository is signed by a key that is not recognised */
 		g_print ("%s\n", _("Software source signature required"));
+
+		/* TRANSLATORS: the package that is not signed by a known key */
 		g_print (" %s: %s\n", _("Package"), package);
+
+		/* TRANSLATORS: the package repository name */
 		g_print (" %s: %s\n", _("Software source name"), item->repository_name);
+
+		/* TRANSLATORS: the key URL */
 		g_print (" %s: %s\n", _("Key URL"), item->key_url);
+
+		/* TRANSLATORS: the username of the key */
 		g_print (" %s: %s\n", _("Key user"), item->key_userid);
+
+		/* TRANSLATORS: the key ID, usually a few hex digits */
 		g_print (" %s: %s\n", _("Key ID"), item->key_id);
+
+		/* TRANSLATORS: the key fingerprint, again, yet more hex */
 		g_print (" %s: %s\n", _("Key fingerprint"), item->key_fingerprint);
+
+		/* TRANSLATORS: the timestamp (a bit like a machine readable time) */
 		g_print (" %s: %s\n", _("Key Timestamp"), item->key_timestamp);
 
 		g_free (package);
 	}
 
-	/* ask the user */
+	/* TRANSLATORS: ask the user if they want to import */
 	ret = pk_console_get_prompt (_("Do you accept this signature?"), FALSE);
 	if (ret) {
 		pk_task_user_accepted (task, request);
 	} else {
+		/* TRANSLATORS: tell the user we've not done anything */
 		g_print ("%s\n", _("The signature was not accepted."));
 		pk_task_user_declined (task, request);
 	}
@@ -148,20 +165,27 @@ dkp_task_text_eula_question (PkTask *task, guint request, PkResults *results)
 		/* create printable */
 		package = pk_package_id_to_printable (item->package_id);
 
+		/* TRANSLATORS: this is another name for a software licence that has to be read before installing */
 		g_print ("%s\n", _("End user licence agreement required"));
-		g_print (" %s: %s\n", _("EULA ID"), item->eula_id);
+
+		/* TRANSLATORS: the package name that was trying to be installed */
 		g_print (" %s: %s\n", _("Package"), package);
+
+		/* TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA */
 		g_print (" %s: %s\n", _("Vendor"), item->vendor_name);
+
+		/* TRANSLATORS: the EULA text itself (long and boring) */
 		g_print (" %s: %s\n", _("Agreement"), item->license_agreement);
 
 		g_free (package);
 	}
 
-	/* ask the user */
+	/* TRANSLATORS: ask the user if they've read and accepted the EULA */
 	ret = pk_console_get_prompt (_("Do you accept this agreement?"), FALSE);
 	if (ret) {
 		pk_task_user_accepted (task, request);
 	} else {
+		/* TRANSLATORS: tell the user we've not done anything */
 		g_print ("%s\n", _("The agreement was not accepted."));
 		pk_task_user_declined (task, request);
 	}
@@ -191,17 +215,25 @@ dkp_task_text_media_change_question (PkTask *task, guint request, PkResults *res
 	array = pk_results_get_media_change_required_array (results);
 	for (i=0; i<array->len; i++) {
 		item = g_ptr_array_index (array, i);
+		/* TRANSLATORS: the user needs to change media inserted into the computer */
 		g_print ("%s\n", _("Media change required"));
+
+		/* TRANSLATORS: the type, e.g. DVD, CD, etc */
 		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);
+
+		/* TRANSLATORS: the media label, usually like 'disk-1of3' */
+		g_print (" %s: %s\n", _("Media label"), item->media_id);
+
+		/* TRANSLATORS: the media description, usually like 'Fedora 12 disk 5' */
 		g_print (" %s: %s\n", _("Text"), item->media_text);
 	}
 
-	/* ask the user */
+	/* TRANSLATORS: ask the user to insert the media */
 	ret = pk_console_get_prompt (_("Please insert the correct media"), FALSE);
 	if (ret) {
 		pk_task_user_accepted (task, request);
 	} else {
+		/* TRANSLATORS: tell the user we've not done anything as they are lazy */
 		g_print ("%s\n", _("The correct media was not inserted."));
 		pk_task_user_declined (task, request);
 	}
@@ -295,11 +327,12 @@ dkp_task_text_simulate_question (PkTask *task, guint request, PkResults *results
 		g_object_unref (package);
 	}
 
-	/* ask the user */
+	/* TRANSLATORS: ask the user if the proposed changes are okay */
 	ret = pk_console_get_prompt (_("Proceed with changes?"), FALSE);
 	if (ret) {
 		pk_task_user_accepted (task, request);
 	} else {
+		/* TRANSLATORS: tell the user we didn't do anything */
 		g_print ("%s\n", _("The transaction did not proceed."));
 		pk_task_user_declined (task, request);
 	}
commit 5203ecfb26fc39d045ea805f9b1ab6f29a7efef0
Merge: f40d7ca... 3540d88...
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 14:28:42 2009 +0100

    Merge branch 'daemon-glib2'

commit 3540d8844a9bb57c84a8e6bc349a2188848272be
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 14:24:19 2009 +0100

    yum: Add moblin-desktop to desktop-other metagroup

diff --git a/backends/yum/yum-comps-groups.conf b/backends/yum/yum-comps-groups.conf
index 24e63fd..e1ca846 100644
--- a/backends/yum/yum-comps-groups.conf
+++ b/backends/yum/yum-comps-groups.conf
@@ -3,7 +3,7 @@ admin-tools=base-system;system-tools,base-system;admin-tools,rpmfusion_free;hard
 desktop-gnome=rpmfusion_free;gnome-desktop,desktops;gnome-desktop
 desktop-kde=desktops;kde-desktop,rpmfusion_free;kde-desktop
 desktop-xfce=desktops;xfce-desktop
-desktop-other=desktops;window-managers,desktops;sugar-desktop,desktops;lxde-desktop
+desktop-other=desktops;window-managers,desktops;sugar-desktop,desktops;lxde-desktop;moblin-desktop
 education=apps;education,development;electronic-lab
 fonts=base-system;fonts,base-system;legacy-fonts
 games=apps;games,rpmfusion_free;games,rpmfusion_nonfree;games
commit 2ad60cc83809609235c956e9917ce7c63e7caf4b
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 14:20:55 2009 +0100

    Make glib2 compulsory, and convert all users to use the new library

diff --git a/client/Makefile.am b/client/Makefile.am
index d0b3bba..1cd3d54 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -54,16 +54,13 @@ 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	\
 	$(top_builddir)/lib/packagekit-glib2/libpackagekitprivate.a	\
 	$(NULL)
 
 pkcon_SOURCES =						\
-	pk-console-test.c				\
+	pk-console.c					\
 	$(NULL)
 
 pkcon_LDADD =						\
@@ -78,7 +75,7 @@ pkcon_CFLAGS =						\
 	$(NULL)
 
 pkmon_SOURCES =						\
-	pk-monitor-test.c				\
+	pk-monitor.c					\
 	$(NULL)
 
 pkmon_LDADD =						\
@@ -92,87 +89,22 @@ pkmon_CFLAGS =						\
 	$(WARNINGFLAGS_C)				\
 	$(NULL)
 
-pkgenpack_SOURCES =				\
-	pk-generate-pack-test.c				\
-	$(NULL)
-
-pkgenpack_LDADD = 					\
-	$(ARCHIVE_LIBS)					\
-	$(GLIB_LIBS)					\
-	$(DBUS_LIBS)					\
-	$(SQLITE_LIBS)					\
-	$(PK_GLIB2_LIBS)				\
-	$(NULL)
-
-pkgenpack_CFLAGS =					\
-	$(WARNINGFLAGS_C)				\
-	$(NULL)
-
-else
-
-PK_GLIB_LIBS =						\
-	$(top_builddir)/lib/packagekit-glib/libpackagekit-glib.la	\
-	$(NULL)
-
-pkcon_SOURCES =						\
-	egg-debug.c					\
-	egg-debug.h					\
-	egg-string.c					\
-	egg-string.h					\
-	pk-console.c					\
-	pk-tools-common.c				\
-	pk-tools-common.h				\
-	$(NULL)
-
-pkcon_LDADD =						\
-	$(GLIB_LIBS)					\
-	$(DBUS_LIBS)					\
-	$(PK_GLIB_LIBS)					\
-	$(NULL)
-
-pkcon_CFLAGS =						\
-	$(WARNINGFLAGS_C)				\
-	$(NULL)
-
-pkmon_SOURCES =						\
-	egg-debug.c					\
-	egg-debug.h					\
-	pk-monitor.c					\
-	$(NULL)
-
-pkmon_LDADD =						\
-	$(GLIB_LIBS)					\
-	$(DBUS_LIBS)					\
-	$(PK_GLIB_LIBS)					\
-	$(NULL)
-
-pkmon_CFLAGS =						\
-	$(WARNINGFLAGS_C)				\
-	$(NULL)
-
 pkgenpack_SOURCES =					\
-	egg-debug.c					\
-	egg-debug.h					\
-	egg-string.c					\
-	egg-string.h					\
 	pk-generate-pack.c				\
-	pk-tools-common.c				\
-	pk-tools-common.h				\
 	$(NULL)
 
 pkgenpack_LDADD = 					\
 	$(ARCHIVE_LIBS)					\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
-	$(PK_GLIB_LIBS)					\
+	$(SQLITE_LIBS)					\
+	$(PK_GLIB2_LIBS)				\
 	$(NULL)
 
 pkgenpack_CFLAGS =					\
 	$(WARNINGFLAGS_C)				\
 	$(NULL)
 
-endif
-
 if EGG_BUILD_TESTS
 
 check_PROGRAMS =					\
diff --git a/client/pk-console-test.c b/client/pk-console-test.c
deleted file mode 100644
index a0def35..0000000
--- a/client/pk-console-test.c
+++ /dev/null
@@ -1,1490 +0,0 @@
-/* -*- 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 <packagekit-glib2/packagekit-private.h>
-#include <sys/types.h>
-#include <pwd.h>
-#include <locale.h>
-
-#include "egg-debug.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 PkControl *control = NULL;
-static PkTaskText *task = NULL;
-static PkProgressBar *progressbar = NULL;
-static GCancellable *cancellable = 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_console_package_cb:
- **/
-static void
-pk_console_package_cb (const PkItemPackage *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_to_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 PkItemTransaction *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_to_printable (parts[1]);
-		g_print (" - %s %s\n", parts[0], package);
-		g_free (package);
-		g_strfreev (parts);
-	}
-	g_strfreev (lines);
-}
-
-/**
- * pk_console_distro_upgrade_cb:
- **/
-static void
-pk_console_distro_upgrade_cb (const PkItemDistroUpgrade *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 PkItemCategory *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 PkItemUpdateDetail *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_to_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 PkItemRepoDetail *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 PkItemRequireRestart *obj, gpointer data)
-{
-	gchar *package = NULL;
-
-	/* create printable */
-	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 */
-		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 PkItemDetails *obj, gpointer data)
-{
-	gchar *package = NULL;
-
-	/* create printable */
-	package = pk_package_id_to_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 PkItemMessage *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 (PkItemFiles *obj, gpointer data)
-{
-	guint i;
-
-	/* 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_progress_cb:
- **/
-static void
-pk_console_progress_cb (PkProgress *progress, PkProgressType type, gpointer data)
-{
-	gint percentage;
-	PkStatusEnum status;
-
-	/* 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);
-		if (status == PK_STATUS_ENUM_FINISHED)
-			return;
-		/* 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)
-{
-	const PkItemErrorCode *error_item;
-	PkResults *results;
-	GError *error = NULL;
-	GPtrArray *array;
-	PkExitEnum exit_enum;
-	PkRestartEnum restart;
-	PkRoleEnum role;
-
-	/* no more progress */
-	pk_progress_bar_end (progressbar);
-
-	/* get the results */
-	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);
-		goto out;
-	}
-
-	/* get the role */
-	g_object_get (G_OBJECT(results), "role", &role, NULL);
-
-	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 */
-	if (role != PK_ROLE_ENUM_INSTALL_PACKAGES &&
-	    role != PK_ROLE_ENUM_UPDATE_PACKAGES &&
-	    role != PK_ROLE_ENUM_UPDATE_SYSTEM &&
-	    role != PK_ROLE_ENUM_REMOVE_PACKAGES) {
-		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);
-
-	/* don't print files if we are DownloadPackages */
-	if (role != PK_ROLE_ENUM_DOWNLOAD_PACKAGES) {
-		array = pk_results_get_files_array (results);
-		g_ptr_array_foreach (array, (GFunc) pk_console_files_cb, NULL);
-		g_ptr_array_unref (array);
-	}
-
-	/* is there any restart to notify the user? */
-	restart = pk_results_get_require_restart_worst (results);
-	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_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."));
-	}
-out:
-	if (results != NULL)
-		g_object_unref (results);
-	g_main_loop_quit (loop);
-}
-
-/**
- * pk_console_install_packages:
- **/
-static gboolean
-pk_console_install_packages (gchar **packages, GError **error)
-{
-	gboolean ret = TRUE;
-	gchar **package_ids;
-	GError *error_local = NULL;
-
-	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), packages, &error_local);
-	if (package_ids == 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 find the available package: %s"), error_local->message);
-		g_error_free (error_local);
-		ret = FALSE;
-		goto out;
-	}
-
-	/* do the async action */
-	pk_task_install_packages_async (PK_TASK(task), package_ids, cancellable,
-				        (PkProgressCallback) pk_console_progress_cb, NULL,
-				        (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-out:
-	g_strfreev (package_ids);
-	return ret;
-}
-
-/**
- * pk_console_remove_packages:
- **/
-static gboolean
-pk_console_remove_packages (gchar **packages, GError **error)
-{
-	gboolean ret = TRUE;
-	gchar **package_ids;
-	GError *error_local = NULL;
-
-	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), packages, &error_local);
-	if (package_ids == 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 find the installed package: %s"), error_local->message);
-		g_error_free (error_local);
-		ret = FALSE;
-		goto out;
-	}
-
-	/* do the async action */
-	pk_task_remove_packages_async (PK_TASK(task), package_ids, FALSE, FALSE, cancellable,
-				       (PkProgressCallback) pk_console_progress_cb, NULL,
-				       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-out:
-	g_strfreev (package_ids);
-	return ret;
-}
-
-/**
- * pk_console_download_packages:
- **/
-static gboolean
-pk_console_download_packages (gchar **packages, const gchar *directory, GError **error)
-{
-	gboolean ret = TRUE;
-	gchar **package_ids;
-	GError *error_local = NULL;
-
-	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
-	if (package_ids == 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 find the package: %s"), error_local->message);
-		g_error_free (error_local);
-		ret = FALSE;
-		goto out;
-	}
-
-	/* do the async action */
-	pk_client_download_packages_async (PK_CLIENT(task), package_ids, directory, cancellable,
-				           (PkProgressCallback) pk_console_progress_cb, NULL,
-				           (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-out:
-	g_strfreev (package_ids);
-	return ret;
-}
-
-/**
- * pk_console_update_packages:
- **/
-static gboolean
-pk_console_update_packages (gchar **packages, GError **error)
-{
-	gboolean ret = TRUE;
-	gchar **package_ids;
-	GError *error_local = NULL;
-
-	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), packages, &error_local);
-	if (package_ids == 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 find the package: %s"), error_local->message);
-		g_error_free (error_local);
-		ret = FALSE;
-		goto out;
-	}
-
-	/* do the async action */
-	pk_task_update_packages_async (PK_TASK(task), package_ids, cancellable,
-				       (PkProgressCallback) pk_console_progress_cb, NULL,
-				       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-out:
-	g_strfreev (package_ids);
-	return ret;
-}
-
-/**
- * pk_console_get_requires:
- **/
-static gboolean
-pk_console_get_requires (PkBitfield filters, gchar **packages, GError **error)
-{
-	gboolean ret = TRUE;
-	gchar **package_ids = NULL;
-	GError *error_local = NULL;
-
-	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
-	if (package_ids == 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 find all the packages: %s"), error_local->message);
-		g_error_free (error_local);
-		ret = FALSE;
-		goto out;
-	}
-
-	/* do the async action */
-	pk_client_get_requires_async (PK_CLIENT(task), filters, package_ids, TRUE, cancellable,
-				      (PkProgressCallback) pk_console_progress_cb, NULL,
-				      (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-out:
-	g_strfreev (package_ids);
-	return ret;
-}
-
-/**
- * pk_console_get_depends:
- **/
-static gboolean
-pk_console_get_depends (PkBitfield filters, gchar **packages, GError **error)
-{
-	gboolean ret = TRUE;
-	gchar **package_ids = NULL;
-	GError *error_local = NULL;
-
-	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
-	if (package_ids == 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 find all the packages: %s"), error_local->message);
-		g_error_free (error_local);
-		ret = FALSE;
-		goto out;
-	}
-
-	/* do the async action */
-	pk_client_get_depends_async (PK_CLIENT(task), filters, package_ids, FALSE, cancellable,
-				     (PkProgressCallback) pk_console_progress_cb, NULL,
-				     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-out:
-	g_strfreev (package_ids);
-	return ret;
-}
-
-/**
- * pk_console_get_details:
- **/
-static gboolean
-pk_console_get_details (gchar **packages, GError **error)
-{
-	gboolean ret = TRUE;
-	gchar **package_ids = NULL;
-	GError *error_local = NULL;
-
-	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
-	if (package_ids == 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 find all the packages: %s"), error_local->message);
-		g_error_free (error_local);
-		ret = FALSE;
-		goto out;
-	}
-
-	/* do the async action */
-	pk_client_get_details_async (PK_CLIENT(task), package_ids, cancellable,
-				     (PkProgressCallback) pk_console_progress_cb, NULL,
-				     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-out:
-	g_strfreev (package_ids);
-	return ret;
-}
-
-/**
- * pk_console_get_files:
- **/
-static gboolean
-pk_console_get_files (gchar **packages, GError **error)
-{
-	gboolean ret = TRUE;
-	gchar **package_ids = NULL;
-	GError *error_local = NULL;
-
-	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
-	if (package_ids == 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 all the packages: %s"), error_local->message);
-		g_error_free (error_local);
-		ret = FALSE;
-		goto out;
-	}
-
-	/* do the async action */
-	pk_client_get_files_async (PK_CLIENT(task), package_ids, cancellable,
-				   (PkProgressCallback) pk_console_progress_cb, NULL,
-				   (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-out:
-	g_strfreev (package_ids);
-	return ret;
-}
-
-/**
- * pk_console_get_update_detail
- **/
-static gboolean
-pk_console_get_update_detail (gchar **packages, GError **error)
-{
-	gboolean ret = TRUE;
-	gchar **package_ids = NULL;
-	GError *error_local = NULL;
-
-	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), packages, &error_local);
-	if (package_ids == 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 all the packages: %s"), error_local->message);
-		g_error_free (error_local);
-		ret = FALSE;
-		goto out;
-	}
-
-	/* do the async action */
-	pk_client_get_update_detail_async (PK_CLIENT(task), package_ids, cancellable,
-					   (PkProgressCallback) pk_console_progress_cb, NULL,
-					   (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-out:
-	g_strfreev (package_ids);
-	return ret;
-}
-
-/**
- * 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_cb:
- **/
-static void
-pk_console_sigint_cb (int sig)
-{
-	egg_debug ("Handling SIGINT");
-
-	/* restore default ASAP, as the cancels might hang */
-	signal (SIGINT, SIG_DFL);
-
-	/* cancel any tasks still running */
-	g_cancellable_cancel (cancellable);
-
-	/* 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))
-		g_string_append_printf (string, "  %s\n", "install [packages]");
-	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_INSTALL_FILES))
-		g_string_append_printf (string, "  %s\n", "install-local [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_get_time_since_action_cb:
- **/
-static void
-pk_console_get_time_since_action_cb (GObject *object, GAsyncResult *res, gpointer data)
-{
-	guint time_ms;
-	GError *error = NULL;
-//	PkControl *control = PK_CONTROL(object);
-
-	/* get the results */
-	time_ms = pk_control_get_time_since_action_finish (control, res, &error);
-	if (time_ms == 0) {
-		/* TRANSLATORS: we keep a database updated with the time that an action was last executed */
-		g_print ("%s: %s\n", _("Failed to get the time since this action was last completed"), error->message);
-		g_error_free (error);
-		goto out;
-	}
-	g_print ("time is %is\n", time_ms);
-out:
-	g_main_loop_quit (loop);
-}
-
-/**
- * main:
- **/
-int
-main (int argc, char *argv[])
-{
-	gboolean ret;
-	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;
-	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_cb);
-
-	/* 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_new ();
-	ret = pk_control_get_properties_sync (control, &error);
-	if (!ret) {
-		/* TRANSLATORS: we failed to contact the daemon */
-		g_print ("%s: %s\n", _("Failed to contact PackageKit"), error->message);
-		g_error_free (error);
-		goto out_last;
-	}
-
-	/* get data */
-	g_object_get (control,
-		      "roles", &roles,
-		      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);
-
-	cancellable = g_cancellable_new ();
-	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 */
-	task = pk_task_text_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;
-			}
-			/* fire off an async request */
-			pk_client_search_name_async (PK_CLIENT(task), filters, details, cancellable,
-						     (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 (PK_CLIENT(task), filters, details, cancellable,
-						        (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 (PK_CLIENT(task), filters, details, cancellable,
-						      (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 (PK_CLIENT(task), filters, details, cancellable,
-						     (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"));
-		}
-
-	} 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 to install is required"));
-			retval = PK_EXIT_CODE_SYNTAX_INVALID;
-			goto out;
-		}
-		nowait = !pk_console_install_packages (argv+2, &error);
-
-	} else if (strcmp (mode, "install-local") == 0) {
-		if (value == NULL) {
-			/* TRANSLATORS: the user did not specify what they wanted to install */
-			error = g_error_new (1, 0, "%s", _("A filename to install is required"));
-			retval = PK_EXIT_CODE_SYNTAX_INVALID;
-			goto out;
-		}
-		pk_task_install_files_async (PK_TASK(task), argv+2, cancellable,
-					     (PkProgressCallback) pk_console_progress_cb, NULL,
-					     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-
-
-	} 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 (PK_CLIENT(task), PK_SIGTYPE_ENUM_GPG, details, parameter, cancellable,
-						   (PkProgressCallback) pk_console_progress_cb, NULL,
-						   (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-
-	} 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;
-		}
-		nowait = !pk_console_remove_packages (argv+2, &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;
-		}
-		nowait = !pk_console_download_packages (argv+3, value, &error);
-
-	} 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 (PK_CLIENT(task), value, cancellable,
-					     (PkProgressCallback) pk_console_progress_cb, NULL,
-					     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-
-	} 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 (PK_CLIENT(task), value, cancellable,
-					  (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_task_update_system_async (PK_TASK(task), cancellable,
-						     (PkProgressCallback) pk_console_progress_cb, NULL,
-						     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-		} else {
-			nowait = !pk_console_update_packages (argv+2, &error);
-		}
-
-	} 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 (PK_CLIENT(task), filters, argv+2, cancellable,
-				         (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 (PK_CLIENT(task), value, TRUE, cancellable,
-					     (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 (PK_CLIENT(task), value, FALSE, cancellable,
-					     (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 (PK_CLIENT(task), value, details, parameter, cancellable,
-					       (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 (PK_CLIENT(task), filters, cancellable,
-					       (PkProgressCallback) pk_console_progress_cb, NULL,
-					       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-
-	} else if (strcmp (mode, "get-time") == 0) {
-		PkRoleEnum role;
-		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;
-		}
-		pk_control_get_time_since_action_async (control, role, cancellable,
-							(GAsyncReadyCallback) pk_console_get_time_since_action_cb, NULL);
-
-	} 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;
-		}
-		nowait = !pk_console_get_depends (filters, argv+2, &error);
-
-	} else if (strcmp (mode, "get-distro-upgrades") == 0) {
-		pk_client_get_distro_upgrades_async (PK_CLIENT(task), cancellable,
-						     (PkProgressCallback) pk_console_progress_cb, NULL,
-						     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-
-
-	} 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;
-		}
-		nowait = !pk_console_get_update_detail (argv+2, &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;
-		}
-		nowait = !pk_console_get_requires (filters, argv+2, &error);
-
-	} 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 (PK_CLIENT(task), filters, PK_PROVIDES_ENUM_CODEC, value, cancellable,
-					       (PkProgressCallback) pk_console_progress_cb, NULL,
-					       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-
-	} 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;
-		}
-		nowait = !pk_console_get_details (argv+2, &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;
-		}
-		nowait = !pk_console_get_files (argv+2, &error);
-
-	} else if (strcmp (mode, "get-updates") == 0) {
-		pk_client_get_updates_async (PK_CLIENT(task), filters, cancellable,
-					     (PkProgressCallback) pk_console_progress_cb, NULL,
-					     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-
-	} else if (strcmp (mode, "get-categories") == 0) {
-		pk_client_get_categories_async (PK_CLIENT(task), cancellable,
-						(PkProgressCallback) pk_console_progress_cb, NULL,
-						(GAsyncReadyCallback) pk_console_finished_cb, NULL);
-
-	} else if (strcmp (mode, "get-packages") == 0) {
-		pk_client_get_packages_async (PK_CLIENT(task), filters, cancellable,
-					      (PkProgressCallback) pk_console_progress_cb, NULL,
-					      (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-
-	} 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);
-		nowait = TRUE;
-
-	} else if (strcmp (mode, "get-filters") == 0) {
-		g_object_get (control,
-			      "filters", &filters,
-			      NULL);
-		text = pk_filter_bitfield_to_text (filters);
-		g_strdelimit (text, ";", '\n');
-		g_print ("%s\n", text);
-		g_free (text);
-		nowait = TRUE;
-
-	} else if (strcmp (mode, "get-groups") == 0) {
-		g_object_get (control,
-			      "groups", &groups,
-			      NULL);
-		text = pk_group_bitfield_to_text (groups);
-		g_strdelimit (text, ";", '\n');
-		g_print ("%s\n", text);
-		g_free (text);
-		nowait = TRUE;
-
-	} else if (strcmp (mode, "get-transactions") == 0) {
-		pk_client_get_old_transactions_async (PK_CLIENT(task), 10, cancellable,
-						      (PkProgressCallback) pk_console_progress_cb, NULL,
-						      (GAsyncReadyCallback) pk_console_finished_cb, NULL);
-
-	} else if (strcmp (mode, "refresh") == 0) {
-		pk_client_refresh_cache_async (PK_CLIENT(task), FALSE, cancellable,
-					       (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 (task);
-	g_object_unref (cancellable);
-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-console.c b/client/pk-console.c
index 282a50b..05a675c 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -1,6 +1,6 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
  *
- * Copyright (C) 2007-2008 Richard Hughes <richard at hughsie.com>
+ * Copyright (C) 2007-2009 Richard Hughes <richard at hughsie.com>
  *
  * Licensed under the GNU General Public License Version 2
  *
@@ -21,79 +21,31 @@
 
 #include "config.h"
 
-#include <string.h>
+//#include <string.h>
 #include <unistd.h>
 #include <signal.h>
 #include <stdlib.h>
 #include <stdio.h>
-#include <sys/ioctl.h>
-#include <glib.h>
 #include <glib/gi18n.h>
-#include <dbus/dbus-glib.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
+#include <packagekit-glib2/packagekit-private.h>
 #include <sys/types.h>
 #include <pwd.h>
 #include <locale.h>
 
 #include "egg-debug.h"
-#include "egg-string.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;
 static gboolean is_console = FALSE;
-static gboolean has_output_bar = FALSE;
-static gboolean need_requeue = FALSE;
 static gboolean nowait = FALSE;
-static gboolean awaiting_space = FALSE;
-static guint timer_id = 0;
-static guint percentage_last = 0;
 static PkControl *control = NULL;
-static PkClient *client_primary = NULL;
-static PkClient *client_secondary = NULL;
-static PkClient *client_sync = NULL;
-
-typedef struct {
-	gint position;
-	gboolean move_forward;
-} PulseState;
-
-/**
- * pk_console_bar:
- **/
-static void
-pk_console_bar (guint subpercentage)
-{
-	guint section;
-	guint i;
-
-	/* don't pretty print */
-	if (!is_console)
-		return;
-	if (!has_output_bar)
-		return;
-
-	/* restore cursor */
-	g_print ("%c8", 0x1B);
-
-	section = (guint) ((gfloat) PROGRESS_BAR_SIZE / (gfloat) 100.0 * (gfloat) subpercentage);
-	g_print ("[");
-	for (i=0; i<section; i++)
-		g_print ("=");
-	for (i=0; i<PROGRESS_BAR_SIZE-section; i++)
-		g_print (" ");
-	g_print ("] ");
-	if (percentage_last != PK_CLIENT_PERCENTAGE_INVALID)
-		g_print ("(%i%%)  ", percentage_last);
-	else
-		g_print ("        ");
-	awaiting_space = TRUE;
-}
+static PkTaskText *task = NULL;
+static PkProgressBar *progressbar = NULL;
+static GCancellable *cancellable = NULL;
 
 /**
  * pk_strpad:
@@ -131,108 +83,62 @@ pk_strpad (const gchar *data, guint length)
 }
 
 /**
- * pk_console_start_bar:
- **/
-static void
-pk_console_start_bar (const gchar *text)
-{
-	gchar *text_pad;
-
-	/* make these all the same length */
-	text_pad = pk_strpad (text, 50);
-	g_print ("%s", text_pad);
-	g_free (text_pad);
-	has_output_bar = TRUE;
-
-	/* save cursor in new position */
-	g_print ("%c7", 0x1B);
-	pk_console_bar (0);
-}
-
-/**
  * pk_console_package_cb:
  **/
 static void
-pk_console_package_cb (PkClient *client, const PkPackageObj *obj, gpointer data)
+pk_console_package_cb (const PkItemPackage *obj, gpointer data)
 {
-	PkRoleEnum role;
 	gchar *package = NULL;
 	gchar *package_pad = NULL;
 	gchar *info_pad = NULL;
-	gchar *text = NULL;
+	gchar **split = NULL;
 
 	/* ignore finished */
-	if (obj->info == PK_INFO_ENUM_FINISHED)
+	if (obj->info_enum == PK_INFO_ENUM_FINISHED)
+		goto out;
+
+	/* split */
+	split = pk_package_id_split (obj->package_id);
+	if (split == NULL)
 		goto out;
 
 	/* make these all the same length */
-	info_pad = pk_strpad (pk_info_enum_to_text (obj->info), 12);
+	info_pad = pk_strpad (pk_info_enum_to_text (obj->info_enum), 12);
+
+	/* create printable */
+	package = pk_package_id_to_printable (obj->package_id);
 
 	/* don't pretty print */
 	if (!is_console) {
-		g_print ("%s %s-%s.%s\n", info_pad, obj->id->name, obj->id->version, obj->id->arch);
+		g_print ("%s %s\n", info_pad, package);
 		goto out;
 	}
 
 	/* pad the name-version */
-	if (egg_strzero (obj->id->version))
-		package = g_strdup (obj->id->name);
-	else
-		package = g_strdup_printf ("%s-%s", obj->id->name, obj->id->version);
 	package_pad = pk_strpad (package, 40);
-
-	/* mark previous complete */
-	if (has_output_bar)
-		pk_console_bar (100);
-
-	if (awaiting_space)
-		g_print ("\n");
-
-	pk_client_get_role (client, &role, NULL, NULL);
-	if (role == PK_ROLE_ENUM_SEARCH_NAME ||
-	    role == PK_ROLE_ENUM_SEARCH_GROUP ||
-	    role == PK_ROLE_ENUM_SEARCH_FILE ||
-	    role == PK_ROLE_ENUM_SEARCH_DETAILS ||
-	    role == PK_ROLE_ENUM_GET_PACKAGES ||
-	    role == PK_ROLE_ENUM_GET_DEPENDS ||
-	    role == PK_ROLE_ENUM_GET_REQUIRES ||
-	    role == PK_ROLE_ENUM_GET_UPDATES ||
-	    role == PK_ROLE_ENUM_SIMULATE_INSTALL_FILES ||
-	    role == PK_ROLE_ENUM_SIMULATE_INSTALL_PACKAGES ||
-	    role == PK_ROLE_ENUM_SIMULATE_REMOVE_PACKAGES ||
-	    role == PK_ROLE_ENUM_SIMULATE_UPDATE_PACKAGES) {
-		/* don't do the bar */
-		g_print ("%s\t%s\t%s\n", info_pad, package_pad, obj->summary);
-		goto out;
-	}
-
-	text = g_strdup_printf ("%s\t%s", info_pad, package);
-	pk_console_start_bar (text);
-	g_free (text);
-
+	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 (PkClient *client, const PkTransactionObj *obj, gpointer user_data)
+pk_console_transaction_cb (const PkItemTransaction *obj, gpointer user_data)
 {
 	struct passwd *pw;
 	const gchar *role_text;
 	gchar **lines;
 	gchar **parts;
 	guint i, lines_len;
-	PkPackageId *id;
+	gchar *package = NULL;
 
 	role_text = pk_role_enum_to_text (obj->role);
-	if (awaiting_space)
-		g_print ("\n");
 	/* 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 */
@@ -254,7 +160,7 @@ pk_console_transaction_cb (PkClient *client, const PkTransactionObj *obj, gpoint
 	g_print (" %s: %i\n", _("User ID"), obj->uid);
 
 	/* query real name */
-	pw = getpwuid(obj->uid);
+	pw = getpwuid (obj->uid);
 	if (pw != NULL) {
 		if (pw->pw_name != NULL) {
 			/* TRANSLATORS: this is the username, e.g. hughsie */
@@ -275,89 +181,22 @@ pk_console_transaction_cb (PkClient *client, const PkTransactionObj *obj, gpoint
 		g_print (" %s\n", _("Affected packages: None"));
 	for (i=0; i<lines_len; i++) {
 		parts = g_strsplit (lines[i], "\t", 3);
-		id = pk_package_id_new_from_string (parts[1]);
-		g_print (" - %s %s", parts[0], id->name);
-		if (!egg_strzero (id->version))
-			g_print ("-%s", id->version);
-		if (!egg_strzero (id->arch))
-			g_print (".%s", id->arch);
-		g_print ("\n");
-		pk_package_id_free (id);
+
+		/* create printable */
+		package = pk_package_id_to_printable (parts[1]);
+		g_print (" - %s %s\n", parts[0], package);
+		g_free (package);
 		g_strfreev (parts);
 	}
 	g_strfreev (lines);
 }
 
 /**
- * pk_console_print_deps_list_info:
- **/
-static guint
-pk_console_print_deps_list_info (PkPackageList *list, PkInfoEnum info, const gchar *header)
-{
-	const PkPackageObj *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-%s.%s\n", ++found, obj->id->name, obj->id->version, obj->id->arch);
-	}
-	return found;
-}
-
-/**
- * pk_console_print_deps_list:
- **/
-static guint
-pk_console_print_deps_list (PkPackageList *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;
-}
-
-/**
  * pk_console_distro_upgrade_cb:
  **/
 static void
-pk_console_distro_upgrade_cb (PkClient *client, const PkDistroUpgradeObj *obj, gpointer user_data)
+pk_console_distro_upgrade_cb (const PkItemDistroUpgrade *obj, gpointer user_data)
 {
-	if (awaiting_space)
-		g_print ("\n");
 	/* 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 */
@@ -370,21 +209,19 @@ pk_console_distro_upgrade_cb (PkClient *client, const PkDistroUpgradeObj *obj, g
  * pk_console_category_cb:
  **/
 static void
-pk_console_category_cb (PkClient *client, const PkCategoryObj *obj, gpointer user_data)
+pk_console_category_cb (const PkItemCategory *obj, gpointer user_data)
 {
-	if (awaiting_space)
-		g_print ("\n");
 	/* 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 (!egg_strzero (obj->parent_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 (!egg_strzero (obj->summary)) {
+	if (obj->summary != NULL) {
 		/* TRANSLATORS: this is the summary of the group */
 		g_print (" %s: %s\n", _("Summary"), obj->summary);
 	}
@@ -396,80 +233,81 @@ pk_console_category_cb (PkClient *client, const PkCategoryObj *obj, gpointer use
  * pk_console_update_detail_cb:
  **/
 static void
-pk_console_update_detail_cb (PkClient *client, const PkUpdateDetailObj *detail, gpointer data)
+pk_console_update_detail_cb (const PkItemUpdateDetail *detail, gpointer data)
 {
 	gchar *issued;
 	gchar *updated;
+	gchar *package = NULL;
 
-	if (awaiting_space)
-		g_print ("\n");
 	/* 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_to_printable (detail->package_id);
+
 	/* TRANSLATORS: details about the update, package name and version */
-	g_print (" %s: '%s-%s.%s'\n", _("Package"), detail->id->name, detail->id->version, detail->id->arch);
-	if (!egg_strzero (detail->updates)) {
+	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 (!egg_strzero (detail->obsoletes)) {
+	if (detail->obsoletes != NULL) {
 		/* TRANSLATORS: details about the update, any packages that this update obsoletes */
 		g_print (" %s: %s\n", _("Obsoletes"), detail->obsoletes);
 	}
-	if (!egg_strzero (detail->vendor_url)) {
+	if (detail->vendor_url != NULL) {
 		/* TRANSLATORS: details about the update, the vendor URLs */
 		g_print (" %s: %s\n", _("Vendor"), detail->vendor_url);
 	}
-	if (!egg_strzero (detail->bugzilla_url)) {
+	if (detail->bugzilla_url != NULL) {
 		/* TRANSLATORS: details about the update, the bugzilla URLs */
 		g_print (" %s: %s\n", _("Bugzilla"), detail->bugzilla_url);
 	}
-	if (!egg_strzero (detail->cve_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 != PK_RESTART_ENUM_NONE) {
+	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));
+		g_print (" %s: %s\n", _("Restart"), pk_restart_enum_to_text (detail->restart_enum));
 	}
-	if (!egg_strzero (detail->update_text)) {
+	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 (!egg_strzero (detail->changelog)) {
+	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 != PK_UPDATE_STATE_ENUM_UNKNOWN) {
+	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));
+		g_print (" %s: %s\n", _("State"), pk_update_state_enum_to_text (detail->state_enum));
 	}
 	issued = pk_iso8601_from_date (detail->issued);
-	if (!egg_strzero (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 (!egg_strzero (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 (PkClient *client, const gchar *repo_id,
-			   const gchar *description, gboolean enabled, gpointer data)
+pk_console_repo_detail_cb (const PkItemRepoDetail *obj, gpointer data)
 {
 	gchar *enabled_pad;
 	gchar *repo_pad;
 
-	if (awaiting_space)
-		g_print ("\n");
-	if (enabled) {
+	if (obj->enabled) {
 		/* TRANSLATORS: if the repo is enabled */
 		enabled_pad = pk_strpad (_("Enabled"), 10);
 	} else {
@@ -477,153 +315,126 @@ pk_console_repo_detail_cb (PkClient *client, const gchar *repo_id,
 		enabled_pad = pk_strpad (_("Disabled"), 10);
 	}
 
-	repo_pad = pk_strpad (repo_id, 25);
-	g_print (" %s %s %s\n", enabled_pad, repo_pad, description);
+	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_pulse_bar:
+ * pk_console_require_restart_cb:
  **/
-static gboolean
-pk_console_pulse_bar (PulseState *pulse_state)
+static void
+pk_console_require_restart_cb (const PkItemRequireRestart *obj, gpointer data)
 {
-	gint i;
-
-	if (!has_output_bar)
-		return TRUE;
-
-	/* restore cursor */
-	g_print ("%c8", 0x1B);
-
-	if (pulse_state->move_forward) {
-		if (pulse_state->position == PROGRESS_BAR_SIZE - 1)
-			pulse_state->move_forward = FALSE;
-		else
-			pulse_state->position++;
-	} else if (!pulse_state->move_forward) {
-		if (pulse_state->position == 1)
-			pulse_state->move_forward = TRUE;
-		else
-			pulse_state->position--;
-	}
+	gchar *package = NULL;
 
-	g_print ("[");
-	for (i=0; i<pulse_state->position-1; i++)
-		g_print (" ");
-	printf("==");
-	for (i=0; i<PROGRESS_BAR_SIZE-pulse_state->position-1; i++)
-		g_print (" ");
-	g_print ("] ");
-	if (percentage_last != PK_CLIENT_PERCENTAGE_INVALID)
-		g_print ("(%i%%)  ", percentage_last);
-	else
-		g_print ("        ");
+	/* create printable */
+	package = pk_package_id_to_printable (obj->package_id);
 
-	return TRUE;
+	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_draw_pulse_bar:
+ * pk_console_details_cb:
  **/
 static void
-pk_console_draw_pulse_bar (void)
+pk_console_details_cb (const PkItemDetails *obj, gpointer data)
 {
-	static PulseState pulse_state;
+	gchar *package = NULL;
 
-	/* have we already got zero percent? */
-	if (timer_id != 0)
-		return;
-	if (is_console) {
-		pulse_state.position = 1;
-		pulse_state.move_forward = TRUE;
-		timer_id = g_timeout_add (40, (GSourceFunc) pk_console_pulse_bar, &pulse_state);
-	}
+	/* create printable */
+	package = pk_package_id_to_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_progress_changed_cb:
+ * pk_console_message_cb:
  **/
 static void
-pk_console_progress_changed_cb (PkClient *client, guint percentage, guint subpercentage,
-				guint elapsed, guint remaining, gpointer data)
+pk_console_message_cb (const PkItemMessage *obj, gpointer data)
 {
-	if (!is_console) {
-		if (percentage != PK_CLIENT_PERCENTAGE_INVALID)
-			g_print ("%s: %i%%\n", _("Percentage"), percentage);
-		else
-			g_print ("%s: %s\n", _("Percentage"), _("Unknown"));
-		return;
-	}
-	percentage_last = percentage;
-	if (subpercentage == PK_CLIENT_PERCENTAGE_INVALID) {
-		pk_console_bar (0);
-		pk_console_draw_pulse_bar ();
-	} else {
-		if (timer_id != 0) {
-			g_source_remove (timer_id);
-			timer_id = 0;
-		}
-		pk_console_bar (subpercentage);
-	}
+	/* 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_signature_finished_cb:
+ * pk_console_files_cb:
  **/
 static void
-pk_console_signature_finished_cb (PkClient *client, PkExitEnum exit_enum, guint runtime, gpointer data)
+pk_console_files_cb (PkItemFiles *obj, gpointer data)
 {
-	gboolean ret;
-	GError *error = NULL;
+	guint i;
 
-	egg_debug ("trying to requeue");
-	ret = pk_client_requeue (client_primary, &error);
-	if (!ret) {
-		egg_warning ("failed to requeue action: %s", error->message);
-		g_error_free (error);
-		g_main_loop_quit (loop);
+	/* empty */
+	if (obj->files == NULL || obj->files[0] == NULL) {
+		/* TRANSLATORS: This where the package has no files */
+		g_print ("%s\n", _("No files"));
+		return;
 	}
-}
 
-/**
- * pk_console_require_restart_cb:
- **/
-static void
-pk_console_require_restart_cb (PkClient *client, const PkRequireRestartObj *obj, gpointer data)
-{
-	if (obj->restart == PK_RESTART_ENUM_SYSTEM) {
-		/* TRANSLATORS: a package requires the system to be restarted */
-		g_print ("%s %s-%s.%s\n", _("System restart required by:"), obj->id->name, obj->id->version, obj->id->arch);
-	} else if (obj->restart == PK_RESTART_ENUM_SESSION) {
-		/* TRANSLATORS: a package requires the session to be restarted */
-		g_print ("%s %s-%s.%s\n", _("Session restart required:"), obj->id->name, obj->id->version, obj->id->arch);
-	} 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-%s.%s\n", _("System restart (security) required by:"), obj->id->name, obj->id->version, obj->id->arch);
-	} 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-%s.%s\n", _("Session restart (security) required:"), obj->id->name, obj->id->version, obj->id->arch);
-	} else if (obj->restart == PK_RESTART_ENUM_APPLICATION) {
-		/* TRANSLATORS: a package requires the application to be restarted */
-		g_print ("%s %s-%s.%s\n", _("Application restart required by:"), obj->id->name, obj->id->version, obj->id->arch);
+	/* 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_destroy_cb:
+ * pk_console_progress_cb:
  **/
 static void
-pk_console_destroy_cb (PkClient *client, gpointer data)
+pk_console_progress_cb (PkProgress *progress, PkProgressType type, gpointer data)
 {
-	gboolean ret;
+	gint percentage;
+	PkStatusEnum status;
+	const gchar *status_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);
+		if (status == PK_STATUS_ENUM_FINISHED)
+			return;
 
-	/* exit our private loop if it's running */
-	ret = g_main_loop_is_running (loop);
-	if (ret) {
-		egg_warning ("maybe quit loop due to transaction being destroyed?");
-//		g_main_loop_quit (loop);
+		/* show new status on the bar */
+		status_text = pk_status_enum_to_localised_text (status);
+		pk_progress_bar_start (progressbar, status_text);
 	}
 }
 
@@ -631,44 +442,106 @@ pk_console_destroy_cb (PkClient *client, gpointer data)
  * pk_console_finished_cb:
  **/
 static void
-pk_console_finished_cb (PkClient *client, PkExitEnum exit_enum, guint runtime, gpointer data)
+pk_console_finished_cb (GObject *object, GAsyncResult *res, gpointer data)
 {
-	PkRoleEnum role;
-	const gchar *role_text;
-	gfloat time_s;
-	PkRestartEnum restart;
-	gboolean ret;
+	const PkItemErrorCode *error_item;
+	PkResults *results;
 	GError *error = NULL;
+	GPtrArray *array;
+	PkExitEnum exit_enum;
+	PkRestartEnum restart;
+	PkRoleEnum role;
 
-	pk_client_get_role (client, &role, NULL, NULL);
-
-	/* mark previous complete */
-	if (has_output_bar)
-		pk_console_bar (100);
-
-	/* cancel the spinning */
-	if (timer_id != 0)
-		g_source_remove (timer_id);
+	/* no more progress */
+	pk_progress_bar_end (progressbar);
 
-	role_text = pk_role_enum_to_text (role);
-	time_s = (gfloat) runtime / 1000.0;
+	/* get the results */
+	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);
+		goto out;
+	}
 
-	/* do we need to new line? */
-	if (awaiting_space)
-		g_print ("\n");
-	egg_debug ("%s runtime was %.1f seconds", role_text, time_s);
+	/* get the role */
+	g_object_get (G_OBJECT(results), "role", &role, NULL);
+
+	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 */
+	if (role != PK_ROLE_ENUM_INSTALL_PACKAGES &&
+	    role != PK_ROLE_ENUM_UPDATE_PACKAGES &&
+	    role != PK_ROLE_ENUM_UPDATE_SYSTEM &&
+	    role != PK_ROLE_ENUM_REMOVE_PACKAGES) {
+		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);
+
+	/* don't print files if we are DownloadPackages */
+	if (role != PK_ROLE_ENUM_DOWNLOAD_PACKAGES) {
+		array = pk_results_get_files_array (results);
+		g_ptr_array_foreach (array, (GFunc) pk_console_files_cb, NULL);
+		g_ptr_array_unref (array);
+	}
 
 	/* is there any restart to notify the user? */
-	restart = pk_client_get_require_restart (client);
+	restart = pk_results_get_require_restart_worst (results);
 	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."));
@@ -676,453 +549,65 @@ pk_console_finished_cb (PkClient *client, PkExitEnum exit_enum, guint runtime, g
 		/* 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 (PkClient *client, PkBitfield filter, const gchar *package, GError **error)
-{
-	PkPackageList *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 */
-	if (awaiting_space)
-		g_print ("\n");
-
-	/* 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)
-{
-	PkPackageList *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;
+	if (results != NULL)
+		g_object_unref (results);
+	g_main_loop_quit (loop);
 }
 
 /**
- * pk_console_install_stuff:
+ * pk_console_install_packages:
  **/
 static gboolean
-pk_console_install_stuff (PkClient *client, gchar **packages, GError **error)
+pk_console_install_packages (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;
-	PkPackageList *list;
-	PkPackageList *list_single;
-	GPtrArray *array_packages;
-	GPtrArray *array_files;
+	gchar **package_ids;
 	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");
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), packages, &error_local);
+	if (package_ids == 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 find the available package: %s"), error_local->message);
+		g_error_free (error_local);
+		ret = FALSE;
 		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) {
-				/* present this to the user */
-				if (awaiting_space)
-					g_print ("\n");
-
-				/* 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) {
-				/* present this to the user */
-				if (awaiting_space)
-					g_print ("\n");
-
-				/* 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_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;
-		}
-	}
-
+	/* do the async action */
+	pk_task_install_packages_async (PK_TASK(task), package_ids, cancellable,
+				        (PkProgressCallback) pk_console_progress_cb, NULL,
+				        (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 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 (PkClient *client, 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 (PkClient *client, gchar **packages, GError **error)
+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;
-	PkPackageList *list;
-	PkPackageList *list_single;
+	gchar **package_ids;
 	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);
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), packages, &error_local);
+	if (package_ids == 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 find the installed package: %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 */
-	if (awaiting_space)
-		g_print ("\n");
-
-	/* 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);
-	}
-
+	/* do the async action */
+	pk_task_remove_packages_async (PK_TASK(task), package_ids, FALSE, FALSE, cancellable,
+				       (PkProgressCallback) pk_console_progress_cb, NULL,
+				       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 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;
 }
 
@@ -1130,159 +615,55 @@ out:
  * pk_console_download_packages:
  **/
 static gboolean
-pk_console_download_packages (PkClient *client, gchar **packages, const gchar *directory, GError **error)
+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;
+	gchar **package_ids;
 	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");
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
+	if (package_ids == 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 find the package: %s"), error_local->message);
+		g_error_free (error_local);
+		ret = FALSE;
 		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;
-		}
-	}
-
+	/* do the async action */
+	pk_client_download_packages_async (PK_CLIENT(task), package_ids, directory, cancellable,
+				           (PkProgressCallback) pk_console_progress_cb, NULL,
+				           (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 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:
+ * pk_console_update_packages:
  **/
 static gboolean
-pk_console_update_package (PkClient *client, const gchar *package, GError **error)
+pk_console_update_packages (gchar **packages, GError **error)
 {
-	gboolean ret;
-	gchar *package_id;
+	gboolean ret = TRUE;
 	gchar **package_ids;
-	guint length;
 	GError *error_local = NULL;
-	gboolean accept_changes;
-	PkPackageList *list;
-	PkPackageList *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) {
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), packages, &error_local);
+	if (package_ids == 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);
+		*error = g_error_new (1, 0, _("This tool could not find the package: %s"), 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)
+		ret = FALSE;
 		goto out;
-
-	/* if there are no required packages, just do the remove */
-	length = pk_package_list_get_size (list);
-	if (length != 0) {
-		/* present this to the user */
-		if (awaiting_space)
-			g_print ("\n");
-
-		/* 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);
-	}
+	/* do the async action */
+	pk_task_update_packages_async (PK_TASK(task), package_ids, cancellable,
+				       (PkProgressCallback) pk_console_progress_cb, NULL,
+				       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 out:
-	g_object_unref (list);
 	g_strfreev (package_ids);
-	g_free (package_id);
 	return ret;
 }
 
@@ -1290,29 +671,27 @@ out:
  * pk_console_get_requires:
  **/
 static gboolean
-pk_console_get_requires (PkClient *client, PkBitfield filters, const gchar *package, GError **error)
+pk_console_get_requires (PkBitfield filters, gchar **packages, GError **error)
 {
-	gboolean ret;
-	gchar *package_id;
-	gchar **package_ids;
+	gboolean ret = TRUE;
+	gchar **package_ids = NULL;
 	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) {
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
+	if (package_ids == 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);
+		*error = g_error_new (1, 0, _("This tool could not find all the packages: %s"), error_local->message);
 		g_error_free (error_local);
+		ret = FALSE;
+		goto out;
 	}
+
+	/* do the async action */
+	pk_client_get_requires_async (PK_CLIENT(task), filters, package_ids, TRUE, cancellable,
+				      (PkProgressCallback) pk_console_progress_cb, NULL,
+				      (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+out:
 	g_strfreev (package_ids);
-	g_free (package_id);
 	return ret;
 }
 
@@ -1320,29 +699,27 @@ pk_console_get_requires (PkClient *client, PkBitfield filters, const gchar *pack
  * pk_console_get_depends:
  **/
 static gboolean
-pk_console_get_depends (PkClient *client, PkBitfield filters, const gchar *package, GError **error)
+pk_console_get_depends (PkBitfield filters, gchar **packages, GError **error)
 {
-	gboolean ret;
-	gchar *package_id;
-	gchar **package_ids;
+	gboolean ret = TRUE;
+	gchar **package_ids = NULL;
 	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) {
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
+	if (package_ids == 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);
+		*error = g_error_new (1, 0, _("This tool could not find all the packages: %s"), error_local->message);
 		g_error_free (error_local);
+		ret = FALSE;
+		goto out;
 	}
+
+	/* do the async action */
+	pk_client_get_depends_async (PK_CLIENT(task), filters, package_ids, FALSE, cancellable,
+				     (PkProgressCallback) pk_console_progress_cb, NULL,
+				     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+out:
 	g_strfreev (package_ids);
-	g_free (package_id);
 	return ret;
 }
 
@@ -1350,29 +727,27 @@ pk_console_get_depends (PkClient *client, PkBitfield filters, const gchar *packa
  * pk_console_get_details:
  **/
 static gboolean
-pk_console_get_details (PkClient *client, const gchar *package, GError **error)
+pk_console_get_details (gchar **packages, GError **error)
 {
-	gboolean ret;
-	gchar *package_id;
-	gchar **package_ids;
+	gboolean ret = TRUE;
+	gchar **package_ids = NULL;
 	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) {
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
+	if (package_ids == 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);
+		*error = g_error_new (1, 0, _("This tool could not find all the packages: %s"), error_local->message);
 		g_error_free (error_local);
+		ret = FALSE;
+		goto out;
 	}
+
+	/* do the async action */
+	pk_client_get_details_async (PK_CLIENT(task), package_ids, cancellable,
+				     (PkProgressCallback) pk_console_progress_cb, NULL,
+				     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+out:
 	g_strfreev (package_ids);
-	g_free (package_id);
 	return ret;
 }
 
@@ -1380,268 +755,27 @@ pk_console_get_details (PkClient *client, const gchar *package, GError **error)
  * pk_console_get_files:
  **/
 static gboolean
-pk_console_get_files (PkClient *client, const gchar *package, GError **error)
+pk_console_get_files (gchar **packages, GError **error)
 {
-	gboolean ret;
-	gchar *package_id;
-	gchar **package_ids;
+	gboolean ret = TRUE;
+	gchar **package_ids = NULL;
 	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) {
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
+	if (package_ids == 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);
+		*error = g_error_new (1, 0, _("This tool could not find all the packages: %s"), error_local->message);
 		g_error_free (error_local);
-	}
-	g_strfreev (package_ids);
-	g_free (package_id);
-	return ret;
-}
-
-/**
- * pk_console_list_create:
- **/
-static gboolean
-pk_console_list_create (PkClient *client, const gchar *file, GError **error)
-{
-	gboolean ret;
-	GError *error_local = NULL;
-	PkPackageList *list;
-
-	/* file exists */
-	ret = g_file_test (file, G_FILE_TEST_EXISTS);
-	if (ret) {
-		/* TRANSLATORS: There was an error getting the list of packages. The filename follows */
-		*error = g_error_new (1, 0, _("File already exists: %s"), file);
-		return FALSE;
-	}
-
-	/* TRANSLATORS: follows a list of packages to install */
-	g_print ("%s...\n", _("Getting package list"));
-
-	/* get all installed packages and save it to disk */
-	ret = pk_client_get_packages (client_sync, pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), &error_local);
-	if (!ret) {
-		/* TRANSLATORS: There was an error getting the list of packages. The detailed error follows */
-		*error = g_error_new (1, 0, _("This tool could not get package list: %s"), error_local->message);
-		g_error_free (error_local);
-		return FALSE;
-	}
-
-	/* save list to disk */
-	list = pk_client_get_package_list (client_sync);
-	ret = pk_obj_list_to_file (PK_OBJ_LIST(list), file);
-	g_object_unref (list);
-	if (!ret) {
-		/* TRANSLATORS: There was an error saving the list */
-		*error = g_error_new (1, 0, _("Failed to save to disk"));
-		return FALSE;
-	}
-	return TRUE;
-}
-
-/**
- * pk_console_package_obj_name_equal:
- **/
-static gboolean
-pk_console_package_obj_name_equal (const PkPackageObj *obj1, const PkPackageObj *obj2)
-{
-	return (g_strcmp0 (obj1->id->name, obj2->id->name) == 0);
-}
-
-/**
- * pk_console_list_diff:
- **/
-static gboolean
-pk_console_list_diff (PkClient *client, const gchar *file, GError **error)
-{
-	gboolean ret;
-	GError *error_local = NULL;
-	PkPackageList *list;
-	PkPackageList *list_copy;
-	PkPackageList *new;
-	const PkPackageObj *obj;
-	guint i;
-	guint length;
-
-	/* file exists */
-	ret = g_file_test (file, G_FILE_TEST_EXISTS);
-	if (!ret) {
-		/* TRANSLATORS: There was an error getting the list. The filename follows */
-		*error = g_error_new (1, 0, _("File does not exist: %s"), file);
-		return FALSE;
-	}
-
-	/* TRANSLATORS: follows a list of packages to install */
-	g_print ("%s...\n", _("Getting package list"));
-
-	/* get all installed packages */
-	ret = pk_client_get_packages (client_sync, pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), &error_local);
-	if (!ret) {
-		/* TRANSLATORS: There was an error getting the list of packages. The detailed error follows */
-		*error = g_error_new (1, 0, _("This tool could not get package list: %s"), error_local->message);
-		g_error_free (error_local);
-		return FALSE;
-	}
-
-	/* get two copies of the list */
-	list = pk_client_get_package_list (client_sync);
-	list_copy = pk_package_list_new ();
-	pk_obj_list_add_list (PK_OBJ_LIST(list_copy), PK_OBJ_LIST(list));
-
-	/* get installed copy */
-	new = pk_package_list_new ();
-	pk_obj_list_from_file (PK_OBJ_LIST(new), file);
-
-	/* only compare the name */
-	pk_obj_list_set_equal (PK_OBJ_LIST(list), (PkObjListCompareFunc) pk_console_package_obj_name_equal);
-	pk_obj_list_set_equal (PK_OBJ_LIST(new), (PkObjListCompareFunc) pk_console_package_obj_name_equal);
-	pk_obj_list_remove_list (PK_OBJ_LIST(list), PK_OBJ_LIST(new));
-	pk_obj_list_remove_list (PK_OBJ_LIST(new), PK_OBJ_LIST(list_copy));
-
-	/* TRANSLATORS: header to a list of packages newly added */
-	g_print ("%s:\n", _("Packages to add"));
-	length = PK_OBJ_LIST(list)->len;
-	for (i=0; i<length; i++) {
-		obj = pk_package_list_get_obj (list, i);
-		g_print ("%i\t%s\n", i+1, obj->id->name);
-	}
-
-	/* TRANSLATORS: header to a list of packages removed */
-	g_print ("%s:\n", _("Packages to remove"));
-	length = PK_OBJ_LIST(new)->len;
-	for (i=0; i<length; i++) {
-		obj = pk_package_list_get_obj (new, i);
-		g_print ("%i\t%s\n", i+1, obj->id->name);
-	}
-
-	g_object_unref (list);
-	g_object_unref (list_copy);
-	g_object_unref (new);
-	return TRUE;
-}
-
-/**
- * pk_console_list_install:
- **/
-static gboolean
-pk_console_list_install (PkClient *client, const gchar *file, GError **error)
-{
-	gboolean ret = FALSE;
-	GError *error_local = NULL;
-	PkPackageList *list;
-	PkPackageList *new;
-	PkBitfield filters;
-	const PkPackageObj *obj;
-	guint i;
-	guint length;
-	gchar *package_id;
-	gchar **package_ids = NULL;
-	GPtrArray *array;
-
-	/* file exists */
-	ret = g_file_test (file, G_FILE_TEST_EXISTS);
-	if (!ret) {
-		/* TRANSLATORS: There was an error getting the list. The filename follows */
-		*error = g_error_new (1, 0, _("File does not exist: %s"), file);
-		return FALSE;
-	}
-
-	/* TRANSLATORS: follows a list of packages to install */
-	g_print ("%s...\n", _("Getting package list"));
-
-	/* get all installed packages */
-	ret = pk_client_get_packages (client_sync, pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), &error_local);
-	if (!ret) {
-		/* TRANSLATORS: There was an error getting the list of packages. The detailed error follows */
-		*error = g_error_new (1, 0, _("This tool could not get package list: %s"), error_local->message);
-		g_error_free (error_local);
-		return FALSE;
-	}
-
-	/* get two copies of the list */
-	list = pk_client_get_package_list (client_sync);
-
-	/* get installed copy */
-	new = pk_package_list_new ();
-	pk_obj_list_from_file (PK_OBJ_LIST(new), file);
-
-	/* only compare the name */
-	pk_obj_list_set_equal (PK_OBJ_LIST(new), (PkObjListCompareFunc) pk_console_package_obj_name_equal);
-	pk_obj_list_remove_list (PK_OBJ_LIST(new), PK_OBJ_LIST(list));
-	array = g_ptr_array_new ();
-
-
-	/* nothing to do */
-	length = PK_OBJ_LIST(new)->len;
-	if (length == 0) {
-		/* TRANSLATORS: We didn't find any differences */
-		*error = g_error_new (1, 0, _("No new packages need to be installed"));
 		ret = FALSE;
 		goto out;
 	}
 
-	/* TRANSLATORS: follows a list of packages to install */
-	g_print ("%s:\n", _("To install"));
-	for (i=0; i<length; i++) {
-		obj = pk_package_list_get_obj (new, i);
-		g_print ("%s ", obj->id->name);
-	}
-	g_print ("\n");
-
-	/* resolve */
-	filters = pk_bitfield_from_enums (PK_FILTER_ENUM_NOT_INSTALLED, PK_FILTER_ENUM_NEWEST, -1);
-	for (i=0; i<length; i++) {
-		obj = pk_package_list_get_obj (new, i);
-		/* TRANSLATORS: searching takes some time.... */
-		g_print ("%.0f%%\t%s %s...", (100.0f/length)*i, _("Searching for package: "), obj->id->name);
-		package_id = pk_console_perhaps_resolve (client, filters, obj->id->name, NULL);
-		if (package_id == NULL) {
-			/* TRANSLATORS: package was not found -- this is the end of a string ended in ... */
-			g_print (" %s\n", _("not found."));
-		} else {
-			g_print (" %s\n", obj->id->version);
-			g_ptr_array_add (array, package_id);
-			/* no need to free */
-		}
-	}
-
-	/* nothing to do */
-	if (array->len == 0) {
-		/* TRANSLATORS: We didn't find any packages to install */
-		*error = g_error_new (1, 0, _("No packages can be found to install"));
-		ret = FALSE;
-		goto out;
-	}
-
-	/* TRANSLATORS: installing new packages from package list */
-	g_print ("%s...\n", _("Installing packages"));
-
-	/* install packages */
-	package_ids = pk_package_ids_from_array (array);
-	ret = pk_client_install_packages (client, FALSE, 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;
-	}
-
+	/* do the async action */
+	pk_client_get_files_async (PK_CLIENT(task), package_ids, cancellable,
+				   (PkProgressCallback) pk_console_progress_cb, NULL,
+				   (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 out:
-	g_ptr_array_foreach (array, (GFunc) g_free, NULL);
-	g_ptr_array_free (array, TRUE);
 	g_strfreev (package_ids);
-
-	g_object_unref (list);
-	g_object_unref (new);
 	return ret;
 }
 
@@ -1649,269 +783,57 @@ out:
  * pk_console_get_update_detail
  **/
 static gboolean
-pk_console_get_update_detail (PkClient *client, const gchar *package, GError **error)
+pk_console_get_update_detail (gchar **packages, GError **error)
 {
-	gboolean ret;
-	gchar *package_id;
-	gchar **package_ids;
+	gboolean ret = TRUE;
+	gchar **package_ids = NULL;
 	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) {
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), packages, &error_local);
+	if (package_ids == 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);
+		*error = g_error_new (1, 0, _("This tool could not find all the packages: %s"), error_local->message);
 		g_error_free (error_local);
+		ret = FALSE;
+		goto out;
 	}
+
+	/* do the async action */
+	pk_client_get_update_detail_async (PK_CLIENT(task), package_ids, cancellable,
+					   (PkProgressCallback) pk_console_progress_cb, NULL,
+					   (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+out:
 	g_strfreev (package_ids);
-	g_free (package_id);
 	return ret;
 }
 
 /**
- * pk_console_error_code_cb:
- **/
-static void
-pk_console_error_code_cb (PkClient *client, 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");
-	}
-
-	if (awaiting_space)
-		g_print ("\n");
-	/* 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);
-}
-
-/**
- * pk_console_details_cb:
- **/
-static void
-pk_console_details_cb (PkClient *client, const PkDetailsObj *details, gpointer data)
-{
-	/* if on console, clear the progress bar line */
-	if (awaiting_space)
-		g_print ("\n");
-
-	/* TRANSLATORS: This a list of details about the package */
-	g_print ("%s\n", _("Package description"));
-	g_print ("  package:     %s-%s.%s\n", details->id->name, details->id->version, details->id->arch);
-	g_print ("  license:     %s\n", details->license);
-	g_print ("  group:       %s\n", pk_group_enum_to_text (details->group));
-	g_print ("  description: %s\n", details->description);
-	g_print ("  size:        %lu bytes\n", (long unsigned int) details->size);
-	g_print ("  url:         %s\n", details->url);
-}
-
-/**
- * pk_watch_message_cb:
- **/
-static void
-pk_watch_message_cb (PkClient *client, PkMessageEnum message, const gchar *details, 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 (message), details);
-}
-
-/**
- * pk_console_files_cb:
- **/
-static void
-pk_console_files_cb (PkClient *client, const gchar *package_id,
-		     const gchar *filelist, gpointer data)
-{
-	PkRoleEnum role;
-	gchar **filevector;
-	gchar **current_file;
-
-	/* 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;
-	}
-
-	filevector = g_strsplit (filelist, ";", 0);
-
-	if (awaiting_space)
-		g_print ("\n");
-
-	if (*filevector != NULL) {
-		/* TRANSLATORS: This a list files contained in the package */
-		g_print ("%s\n", _("Package files"));
-		current_file = filevector;
-		while (*current_file != NULL) {
-			g_print ("  %s\n", *current_file);
-			current_file++;
-		}
-	} else {
-		/* TRANSLATORS: This where the package has no files */
-		g_print ("%s\n", _("No files"));
-	}
-
-	g_strfreev (filevector);
-}
-
-/**
- * pk_console_repo_signature_required_cb:
- **/
-static void
-pk_console_repo_signature_required_cb (PkClient *client, const gchar *package_id, const gchar *repository_name,
-				       const gchar *key_url, const gchar *key_userid, const gchar *key_id,
-				       const gchar *key_fingerprint, const gchar *key_timestamp,
-				       PkSigTypeEnum type, gpointer data)
-{
-	gboolean import;
-	gboolean ret;
-	GError *error = NULL;
-
-	if (awaiting_space)
-		g_print ("\n");
-
-	/* 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_id);
-	g_print ("Name:        %s\n", repository_name);
-	g_print ("URL:         %s\n", key_url);
-	g_print ("User:        %s\n", key_userid);
-	g_print ("ID:          %s\n", key_id);
-	g_print ("Fingerprint: %s\n", key_fingerprint);
-	g_print ("Timestamp:   %s\n", key_timestamp);
-
-	/* 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;
-	}
-
-	/* we imported a signature */
-	need_requeue = TRUE;
-}
-
-/**
- * pk_console_eula_required_cb:
- **/
-static void
-pk_console_eula_required_cb (PkClient *client, const gchar *eula_id, const gchar *package_id,
-			     const gchar *vendor_name, const gchar *license_agreement, gpointer data)
-{
-	gboolean import;
-	gboolean ret;
-	GError *error = NULL;
-
-	if (awaiting_space)
-		g_print ("\n");
-
-	/* TRANSLATORS: This a request for a EULA */
-	g_print ("%s\n", _("End user license agreement required"));
-	g_print ("Eula:        %s\n", eula_id);
-	g_print ("Package:     %s\n", package_id);
-	g_print ("Vendor:      %s\n", vendor_name);
-	g_print ("Agreement:   %s\n", license_agreement);
-
-	/* 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;
-}
-
-/**
  * pk_connection_changed_cb:
  **/
 static void
-pk_connection_changed_cb (PkConnection *pconnection, gboolean connected, gpointer data)
+pk_connection_changed_cb (PkControl *control_, gboolean connected, gpointer data)
 {
 	/* if the daemon crashed, don't hang around */
-	if (awaiting_space)
-		g_print ("\n");
 	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);
+		_exit (2);
 	}
 }
 
 /**
- * pk_console_sigint_handler:
+ * pk_console_sigint_cb:
  **/
 static void
-pk_console_sigint_handler (int sig)
+pk_console_sigint_cb (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);
 
-	/* cancel any tasks */
-	pk_client_get_role (client_primary, &role, NULL, NULL);
-	if (role != PK_ROLE_ENUM_UNKNOWN) {
-		ret = pk_client_cancel (client_primary, &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);
-		}
-	}
+	/* cancel any tasks still running */
+	g_cancellable_cancel (cancellable);
 
 	/* kill ourselves */
 	egg_debug ("Retrying SIGINT");
@@ -1944,9 +866,10 @@ pk_console_get_summary (void)
 	    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_INSTALL_PACKAGES))
+		g_string_append_printf (string, "  %s\n", "install [packages]");
+	if (pk_bitfield_contain (roles, PK_ROLE_ENUM_INSTALL_FILES))
+		g_string_append_printf (string, "  %s\n", "install-local [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))
@@ -1995,28 +918,48 @@ pk_console_get_summary (void)
 }
 
 /**
+ * pk_console_get_time_since_action_cb:
+ **/
+static void
+pk_console_get_time_since_action_cb (GObject *object, GAsyncResult *res, gpointer data)
+{
+	guint time_ms;
+	GError *error = NULL;
+//	PkControl *control = PK_CONTROL(object);
+
+	/* get the results */
+	time_ms = pk_control_get_time_since_action_finish (control, res, &error);
+	if (time_ms == 0) {
+		/* TRANSLATORS: we keep a database updated with the time that an action was last executed */
+		g_print ("%s: %s\n", _("Failed to get the time since this action was last completed"), error->message);
+		g_error_free (error);
+		goto out;
+	}
+	g_print ("time is %is\n", time_ms);
+out:
+	g_main_loop_quit (loop);
+}
+
+/**
  * main:
  **/
 int
 main (int argc, char *argv[])
 {
-	DBusGConnection *system_connection;
+	gboolean ret;
 	GError *error = NULL;
-	PkConnection *pconnection;
 	gboolean verbose = FALSE;
 	gboolean program_version = FALSE;
 	GOptionContext *context;
 	gchar *options_help;
 	gchar *filter = NULL;
-	gchar *summary;
-	gboolean ret = FALSE;
+	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;
 
@@ -2043,30 +986,36 @@ main (int argc, char *argv[])
 
 	if (! g_thread_supported ())
 		g_thread_init (NULL);
-	dbus_g_thread_init ();
 	g_type_init ();
 
 	/* do stuff on ctrl-c */
-	signal (SIGINT, pk_console_sigint_handler);
+	signal (SIGINT, pk_console_sigint_cb);
 
 	/* check if we are on console */
 	if (isatty (fileno (stdout)) == 1)
 		is_console = TRUE;
 
-	/* check dbus connections, exit if not valid */
-	system_connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
-	if (error) {
-		egg_warning ("%s", error->message);
+	/* we need the roles early, as we only show the user only what they can do */
+	control = pk_control_new ();
+	ret = pk_control_get_properties_sync (control, &error);
+	if (!ret) {
+		/* TRANSLATORS: we failed to contact the daemon */
+		g_print ("%s: %s\n", _("Failed to contact PackageKit"), error->message);
 		g_error_free (error);
-		/* TRANSLATORS: This is when we could not connect to the system bus, and is fatal */
-		g_error (_("This tool could not connect to system DBUS."));
+		goto out_last;
 	}
 
-	/* we need the roles early, as we only show the user only what they can do */
-	control = pk_control_new ();
-	roles = pk_control_get_actions (control, NULL);
+	/* get data */
+	g_object_get (control,
+		      "roles", &roles,
+		      NULL);
+
 	summary = pk_console_get_summary ();
+	progressbar = pk_progress_bar_new ();
+	pk_progress_bar_set_size (progressbar, 25);
+	pk_progress_bar_set_padding (progressbar, 30);
 
+	cancellable = g_cancellable_new ();
 	context = g_option_context_new ("PackageKit Console Program");
 	g_option_context_set_summary (context, summary) ;
 	g_option_context_add_main_entries (context, options, NULL);
@@ -2091,58 +1040,12 @@ main (int argc, char *argv[])
 
 	loop = g_main_loop_new (NULL, FALSE);
 
-	pconnection = pk_connection_new ();
-	g_signal_connect (pconnection, "connection-changed",
+	/* watch when the daemon aborts */
+	g_signal_connect (control, "connection-changed",
 			  G_CALLBACK (pk_connection_changed_cb), loop);
 
-	client_primary = pk_client_new ();
-	pk_client_set_use_buffer (client_primary, TRUE, NULL);
-	g_signal_connect (client_primary, "package",
-			  G_CALLBACK (pk_console_package_cb), NULL);
-	g_signal_connect (client_primary, "transaction",
-			  G_CALLBACK (pk_console_transaction_cb), NULL);
-	g_signal_connect (client_primary, "distro-upgrade",
-			  G_CALLBACK (pk_console_distro_upgrade_cb), NULL);
-	g_signal_connect (client_primary, "category",
-			  G_CALLBACK (pk_console_category_cb), NULL);
-	g_signal_connect (client_primary, "details",
-			  G_CALLBACK (pk_console_details_cb), NULL);
-	g_signal_connect (client_primary, "files",
-			  G_CALLBACK (pk_console_files_cb), NULL);
-	g_signal_connect (client_primary, "repo-signature-required",
-			  G_CALLBACK (pk_console_repo_signature_required_cb), NULL);
-	g_signal_connect (client_primary, "eula-required",
-			  G_CALLBACK (pk_console_eula_required_cb), NULL);
-	g_signal_connect (client_primary, "update-detail",
-			  G_CALLBACK (pk_console_update_detail_cb), NULL);
-	g_signal_connect (client_primary, "repo-detail",
-			  G_CALLBACK (pk_console_repo_detail_cb), NULL);
-	g_signal_connect (client_primary, "progress-changed",
-			  G_CALLBACK (pk_console_progress_changed_cb), NULL);
-	g_signal_connect (client_primary, "finished",
-			  G_CALLBACK (pk_console_finished_cb), NULL);
-	g_signal_connect (client_primary, "destroy",
-			  G_CALLBACK (pk_console_destroy_cb), NULL);
-	g_signal_connect (client_primary, "require-restart",
-			  G_CALLBACK (pk_console_require_restart_cb), NULL);
-	g_signal_connect (client_primary, "error-code",
-			  G_CALLBACK (pk_console_error_code_cb), NULL);
-	g_signal_connect (client_primary, "message",
-			  G_CALLBACK (pk_watch_message_cb), NULL);
-
-	client_sync = pk_client_new ();
-	pk_client_set_use_buffer (client_sync, TRUE, NULL);
-	pk_client_set_synchronous (client_sync, TRUE, NULL);
-	g_signal_connect (client_sync, "finished",
-			  G_CALLBACK (pk_console_finished_cb), NULL);
-	g_signal_connect (client_sync, "message",
-			  G_CALLBACK (pk_watch_message_cb), NULL);
-	g_signal_connect (client_sync, "destroy",
-			  G_CALLBACK (pk_console_destroy_cb), NULL);
-
-	client_secondary = pk_client_new ();
-	g_signal_connect (client_secondary, "finished",
-			  G_CALLBACK (pk_console_signature_finished_cb), NULL);
+	/* create transactions */
+	task = pk_task_text_new ();
 
 	/* check filter */
 	if (filter != NULL) {
@@ -2179,7 +1082,10 @@ main (int argc, char *argv[])
 				retval = PK_EXIT_CODE_SYNTAX_INVALID;
 				goto out;
 			}
-			ret = pk_client_search_name (client_primary, filters, details, &error);
+			/* fire off an async request */
+			pk_client_search_name_async (PK_CLIENT(task), filters, details, cancellable,
+						     (PkProgressCallback) pk_console_progress_cb, NULL,
+						     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 		} else if (strcmp (value, "details") == 0) {
 			if (details == NULL) {
@@ -2188,7 +1094,10 @@ main (int argc, char *argv[])
 				retval = PK_EXIT_CODE_SYNTAX_INVALID;
 				goto out;
 			}
-			ret = pk_client_search_details (client_primary, filters, details, &error);
+			/* fire off an async request */
+			pk_client_search_details_async (PK_CLIENT(task), filters, details, cancellable,
+						        (PkProgressCallback) pk_console_progress_cb, NULL,
+						        (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 		} else if (strcmp (value, "group") == 0) {
 			if (details == NULL) {
@@ -2197,7 +1106,10 @@ main (int argc, char *argv[])
 				retval = PK_EXIT_CODE_SYNTAX_INVALID;
 				goto out;
 			}
-			ret = pk_client_search_group (client_primary, filters, details, &error);
+			/* fire off an async request */
+			pk_client_search_group_async (PK_CLIENT(task), filters, details, cancellable,
+						      (PkProgressCallback) pk_console_progress_cb, NULL,
+						      (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 		} else if (strcmp (value, "file") == 0) {
 			if (details == NULL) {
@@ -2206,7 +1118,10 @@ main (int argc, char *argv[])
 				retval = PK_EXIT_CODE_SYNTAX_INVALID;
 				goto out;
 			}
-			ret = pk_client_search_file (client_primary, filters, details, &error);
+			/* fire off an async request */
+			pk_client_search_file_async (PK_CLIENT(task), filters, details, cancellable,
+						     (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"));
@@ -2215,11 +1130,23 @@ main (int argc, char *argv[])
 	} 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"));
+			error = g_error_new (1, 0, "%s", _("A package name to install is required"));
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_console_install_stuff (client_primary, argv, &error);
+		nowait = !pk_console_install_packages (argv+2, &error);
+
+	} else if (strcmp (mode, "install-local") == 0) {
+		if (value == NULL) {
+			/* TRANSLATORS: the user did not specify what they wanted to install */
+			error = g_error_new (1, 0, "%s", _("A filename to install is required"));
+			retval = PK_EXIT_CODE_SYNTAX_INVALID;
+			goto out;
+		}
+		pk_task_install_files_async (PK_TASK(task), argv+2, cancellable,
+					     (PkProgressCallback) pk_console_progress_cb, NULL,
+					     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+
 
 	} else if (strcmp (mode, "install-sig") == 0) {
 		if (value == NULL || details == NULL || parameter == NULL) {
@@ -2228,7 +1155,9 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_client_install_signature (client_primary, PK_SIGTYPE_ENUM_GPG, details, parameter, &error);
+		pk_client_install_signature_async (PK_CLIENT(task), PK_SIGTYPE_ENUM_GPG, details, parameter, cancellable,
+						   (PkProgressCallback) pk_console_progress_cb, NULL,
+						   (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 	} else if (strcmp (mode, "remove") == 0) {
 		if (value == NULL) {
@@ -2237,7 +1166,8 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_console_remove_packages (client_primary, argv, &error);
+		nowait = !pk_console_remove_packages (argv+2, &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 */
@@ -2252,7 +1182,8 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_FILE_NOT_FOUND;
 			goto out;
 		}
-		ret = pk_console_download_packages (client_primary, argv, value, &error);
+		nowait = !pk_console_download_packages (argv+3, value, &error);
+
 	} else if (strcmp (mode, "accept-eula") == 0) {
 		if (value == NULL) {
 			/* TRANSLATORS: geeky error, 99.9999% of users won't see this */
@@ -2260,8 +1191,9 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_client_accept_eula (client_primary, value, &error);
-		maybe_sync = FALSE;
+		pk_client_accept_eula_async (PK_CLIENT(task), value, cancellable,
+					     (PkProgressCallback) pk_console_progress_cb, NULL,
+					     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 	} else if (strcmp (mode, "rollback") == 0) {
 		if (value == NULL) {
@@ -2270,14 +1202,18 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_client_rollback (client_primary, value, &error);
+		pk_client_rollback_async (PK_CLIENT(task), value, cancellable,
+					  (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 */
-			ret = pk_client_update_system (client_primary, TRUE, &error);
+			pk_task_update_system_async (PK_TASK(task), cancellable,
+						     (PkProgressCallback) pk_console_progress_cb, NULL,
+						     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 		} else {
-			ret = pk_console_update_package (client_primary, value, &error);
+			nowait = !pk_console_update_packages (argv+2, &error);
 		}
 
 	} else if (strcmp (mode, "resolve") == 0) {
@@ -2287,7 +1223,9 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_client_resolve (client_primary, filters, argv+2, &error);
+		pk_client_resolve_async (PK_CLIENT(task), filters, argv+2, cancellable,
+				         (PkProgressCallback) pk_console_progress_cb, NULL,
+					 (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 	} else if (strcmp (mode, "repo-enable") == 0) {
 		if (value == NULL) {
@@ -2296,7 +1234,9 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_client_repo_enable (client_primary, value, TRUE, &error);
+		pk_client_repo_enable_async (PK_CLIENT(task), value, TRUE, cancellable,
+					     (PkProgressCallback) pk_console_progress_cb, NULL,
+					     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 	} else if (strcmp (mode, "repo-disable") == 0) {
 		if (value == NULL) {
@@ -2305,7 +1245,9 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_client_repo_enable (client_primary, value, FALSE, &error);
+		pk_client_repo_enable_async (PK_CLIENT(task), value, FALSE, cancellable,
+					     (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) {
@@ -2314,14 +1256,17 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_client_repo_set_data (client_primary, value, details, parameter, &error);
+		pk_client_repo_set_data_async (PK_CLIENT(task), value, details, parameter, cancellable,
+					       (PkProgressCallback) pk_console_progress_cb, NULL,
+					       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 	} else if (strcmp (mode, "repo-list") == 0) {
-		ret = pk_client_get_repo_list (client_primary, filters, &error);
+		pk_client_get_repo_list_async (PK_CLIENT(task), filters, cancellable,
+					       (PkProgressCallback) pk_console_progress_cb, NULL,
+					       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 	} 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"));
@@ -2335,15 +1280,8 @@ main (int argc, char *argv[])
 			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);
-		maybe_sync = FALSE;
+		pk_control_get_time_since_action_async (control, role, cancellable,
+							(GAsyncReadyCallback) pk_console_get_time_since_action_cb, NULL);
 
 	} else if (strcmp (mode, "get-depends") == 0) {
 		if (value == NULL) {
@@ -2352,10 +1290,13 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_console_get_depends (client_primary, filters, value, &error);
+		nowait = !pk_console_get_depends (filters, argv+2, &error);
 
 	} else if (strcmp (mode, "get-distro-upgrades") == 0) {
-		ret = pk_client_get_distro_upgrades (client_primary, &error);
+		pk_client_get_distro_upgrades_async (PK_CLIENT(task), cancellable,
+						     (PkProgressCallback) pk_console_progress_cb, NULL,
+						     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
+
 
 	} else if (strcmp (mode, "get-update-detail") == 0) {
 		if (value == NULL) {
@@ -2364,7 +1305,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_console_get_update_detail (client_primary, value, &error);
+		nowait = !pk_console_get_update_detail (argv+2, &error);
 
 	} else if (strcmp (mode, "get-requires") == 0) {
 		if (value == NULL) {
@@ -2373,7 +1314,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_console_get_requires (client_primary, filters, value, &error);
+		nowait = !pk_console_get_requires (filters, argv+2, &error);
 
 	} else if (strcmp (mode, "what-provides") == 0) {
 		if (value == NULL) {
@@ -2382,7 +1323,9 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_client_what_provides (client_primary, filters, PK_PROVIDES_ENUM_CODEC, value, &error);
+		pk_client_what_provides_async (PK_CLIENT(task), filters, PK_PROVIDES_ENUM_CODEC, value, cancellable,
+					       (PkProgressCallback) pk_console_progress_cb, NULL,
+					       (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 	} else if (strcmp (mode, "get-details") == 0) {
 		if (value == NULL) {
@@ -2391,7 +1334,7 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_console_get_details (client_primary, value, &error);
+		nowait = !pk_console_get_details (argv+2, &error);
 
 	} else if (strcmp (mode, "get-files") == 0) {
 		if (value == NULL) {
@@ -2400,82 +1343,59 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		ret = pk_console_get_files (client_primary, 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_primary, value, &error);
-		maybe_sync = FALSE;
-
-	} 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_primary, value, &error);
-		maybe_sync = FALSE;
-
-	} 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_primary, value, &error);
+		nowait = !pk_console_get_files (argv+2, &error);
 
 	} else if (strcmp (mode, "get-updates") == 0) {
-		ret = pk_client_get_updates (client_primary, filters, &error);
+		pk_client_get_updates_async (PK_CLIENT(task), filters, cancellable,
+					     (PkProgressCallback) pk_console_progress_cb, NULL,
+					     (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 	} else if (strcmp (mode, "get-categories") == 0) {
-		ret = pk_client_get_categories (client_primary, &error);
+		pk_client_get_categories_async (PK_CLIENT(task), cancellable,
+						(PkProgressCallback) pk_console_progress_cb, NULL,
+						(GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
 	} else if (strcmp (mode, "get-packages") == 0) {
-		ret = pk_client_get_packages (client_primary, filters, &error);
+		pk_client_get_packages_async (PK_CLIENT(task), filters, cancellable,
+					      (PkProgressCallback) pk_console_progress_cb, NULL,
+					      (GAsyncReadyCallback) pk_console_finished_cb, NULL);
 
-	} 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);
-		maybe_sync = FALSE;
-		/* these can never fail */
-		ret = TRUE;
+		nowait = TRUE;
 
 	} else if (strcmp (mode, "get-filters") == 0) {
-		filters = pk_control_get_filters (control, NULL);
+		g_object_get (control,
+			      "filters", &filters,
+			      NULL);
 		text = pk_filter_bitfield_to_text (filters);
 		g_strdelimit (text, ";", '\n');
 		g_print ("%s\n", text);
 		g_free (text);
-		maybe_sync = FALSE;
-		/* these can never fail */
-		ret = TRUE;
+		nowait = TRUE;
 
 	} else if (strcmp (mode, "get-groups") == 0) {
-		groups = pk_control_get_groups (control, NULL);
+		g_object_get (control,
+			      "groups", &groups,
+			      NULL);
 		text = pk_group_bitfield_to_text (groups);
 		g_strdelimit (text, ";", '\n');
 		g_print ("%s\n", text);
 		g_free (text);
-		maybe_sync = FALSE;
-		/* these can never fail */
-		ret = TRUE;
+		nowait = TRUE;
 
 	} else if (strcmp (mode, "get-transactions") == 0) {
-		ret = pk_client_get_old_transactions (client_primary, 10, &error);
+		pk_client_get_old_transactions_async (PK_CLIENT(task), 10, cancellable,
+						      (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");
-		ret = pk_client_refresh_cache (client_primary, FALSE, &error);
+		pk_client_refresh_cache_async (PK_CLIENT(task), FALSE, cancellable,
+					       (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 */
@@ -2483,21 +1403,13 @@ main (int argc, char *argv[])
 	}
 
 	/* do we wait for the method? */
-	if (maybe_sync && !nowait && ret)
+	if (!nowait && error == NULL)
 		g_main_loop_run (loop);
 
 out:
-	if (!ret) {
-		if (error == NULL) {
-			g_print ("Command failed in an unknown way. Please report!\n");
-		} else if (g_str_has_prefix (error->message, "org.freedesktop.packagekit."))  {
-			/* TRANSLATORS: User does not have permission to do this */
-			g_print ("%s\n", _("Incorrect privileges for this operation"));
-		} else {
-			/* TRANSLATORS: Generic failure of what they asked to do */
-			g_print ("%s:  %s\n", _("Command failed"), error->message);
-			g_error_free (error);
-		}
+	if (error != NULL) {
+		/* 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;
 	}
@@ -2505,10 +1417,10 @@ out:
 	g_free (options_help);
 	g_free (filter);
 	g_free (summary);
+	g_object_unref (progressbar);
 	g_object_unref (control);
-	g_object_unref (client_primary);
-	g_object_unref (client_sync);
-	g_object_unref (client_secondary);
+	g_object_unref (task);
+	g_object_unref (cancellable);
 out_last:
 	return retval;
 }
diff --git a/client/pk-generate-pack-test.c b/client/pk-generate-pack-test.c
deleted file mode 100644
index 9a6e33b..0000000
--- a/client/pk-generate-pack-test.c
+++ /dev/null
@@ -1,456 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
- * Copyright (C) 2008 Shishir Goel <crazyontheedge at gmail.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 <unistd.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <locale.h>
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <glib/gstdio.h>
-#include <packagekit-glib2/packagekit.h>
-#include <packagekit-glib2/packagekit-private.h>
-
-#include "egg-debug.h"
-
-static PkProgressBar *progressbar = NULL;
-static GCancellable *cancellable = NULL;
-
-/**
- * pk_generate_pack_get_filename:
- **/
-static gchar *
-pk_generate_pack_get_filename (const gchar *name, const gchar *directory)
-{
-	gchar *filename = NULL;
-	gchar *distro_id;
-	gchar *iso_time = NULL;
-
-	distro_id = pk_get_distro_id ();
-	if (name != NULL) {
-		filename = g_strdup_printf ("%s/%s-%s.%s", directory, name, distro_id, PK_SERVICE_PACK_FILE_EXTENSION);
-	} else {
-		iso_time = pk_iso8601_present ();
-		/* don't include the time, just use the date prefix */
-		iso_time[10] = '\0';
-		filename = g_strdup_printf ("%s/updates-%s-%s.%s", directory, iso_time, distro_id, PK_SERVICE_PACK_FILE_EXTENSION);
-	}
-	g_free (distro_id);
-	g_free (iso_time);
-	return filename;
-}
-
-/**
- * pk_generate_pack_progress_cb:
- **/
-static void
-pk_generate_pack_progress_cb (PkProgress *progress, PkProgressType type, gpointer data)
-{
-	gint percentage;
-	PkStatusEnum status;
-
-	/* 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);
-		if (status == PK_STATUS_ENUM_FINISHED)
-			return;
-		/* TODO: translate */
-		pk_progress_bar_start (progressbar, pk_status_enum_to_text (status));
-	}
-}
-
-/**
- * pk_generate_pack_sigint_cb:
- **/
-static void
-pk_generate_pack_sigint_cb (int sig)
-{
-	egg_debug ("Handling SIGINT");
-
-	/* restore default */
-	signal (SIGINT, SIG_DFL);
-
-	/* cancel any tasks still running */
-	g_cancellable_cancel (cancellable);
-
-	/* kill ourselves */
-	egg_debug ("Retrying SIGINT");
-	kill (getpid (), SIGINT);
-}
-
-/* tiny helper to help us do the async operation */
-typedef struct {
-	GError		**error;
-	GMainLoop	*loop;
-	gboolean	 ret;
-} PkGenpackHelper;
-
-/**
- * pk_generate_pack_generic_cb:
- **/
-static void
-pk_generate_pack_generic_cb (PkServicePack *pack, GAsyncResult *res, PkGenpackHelper *helper)
-{
-	/* get the result */
-	helper->ret = pk_service_pack_generic_finish (pack, res, helper->error);
-	g_main_loop_quit (helper->loop);
-}
-
-/**
- * pk_generate_pack_create_for_updates:
- **/
-static gboolean
-pk_generate_pack_create_for_updates (PkServicePack *pack, const gchar *filename, gchar **excludes, GError **error)
-{
-	gboolean ret;
-	PkGenpackHelper *helper;
-
-	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-	/* create temp object */
-	helper = g_new0 (PkGenpackHelper, 1);
-	helper->loop = g_main_loop_new (NULL, FALSE);
-	helper->error = error;
-
-	/* run async method */
-	pk_service_pack_create_for_updates_async (pack, filename, excludes, cancellable,
-						  (PkProgressCallback) pk_generate_pack_progress_cb, NULL,
-						  (GAsyncReadyCallback) pk_generate_pack_generic_cb, helper);
-	g_main_loop_run (helper->loop);
-
-	ret = helper->ret;
-
-	/* free temp object */
-	g_main_loop_unref (helper->loop);
-	g_free (helper);
-
-	return ret;
-}
-
-/**
- * pk_generate_pack_create_for_package_ids:
- **/
-static gboolean
-pk_generate_pack_create_for_package_ids (PkServicePack *pack, const gchar *filename, gchar **package_ids, gchar **excludes, GError **error)
-{
-	gboolean ret;
-	PkGenpackHelper *helper;
-
-	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-	/* create temp object */
-	helper = g_new0 (PkGenpackHelper, 1);
-	helper->loop = g_main_loop_new (NULL, FALSE);
-	helper->error = error;
-
-	/* run async method */
-	pk_service_pack_create_for_package_ids_async (pack, filename, package_ids, excludes, cancellable,
-						      (PkProgressCallback) pk_generate_pack_progress_cb, NULL,
-						      (GAsyncReadyCallback) pk_generate_pack_generic_cb, helper);
-	g_main_loop_run (helper->loop);
-
-	ret = helper->ret;
-
-	/* free temp object */
-	g_main_loop_unref (helper->loop);
-	g_free (helper);
-
-	return ret;
-}
-
-/**
- * main:
- **/
-int
-main (int argc, char *argv[])
-{
-	GError *error = NULL;
-	GOptionContext *context;
-	gchar *options_help;
-	gboolean ret;
-	gchar *filename = NULL;
-	PkClient *client = NULL;
-	PkControl *control = NULL;
-	PkBitfield roles;
-	gchar *tempdir = NULL;
-	gboolean exists;
-	gboolean overwrite;
-	gchar **excludes = NULL;
-	gchar *package_id = NULL;
-	PkServicePack *pack = NULL;
-
-	gboolean verbose = FALSE;
-	gchar *directory = NULL;
-	gchar *package_list = NULL;
-	gchar *package = NULL;
-	gboolean updates = FALSE;
-	gint retval = 1;
-
-	const GOptionEntry options[] = {
-		{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
-			_("Show extra debugging information"), NULL },
-		{ "with-package-list", 'l', 0, G_OPTION_ARG_STRING, &package_list,
-			/* TRANSLATORS: we can exclude certain packages (glibc) when we know they'll exist on the target */
-			_("Set the file name of dependencies to be excluded"), NULL},
-		{ "output", 'o', 0, G_OPTION_ARG_STRING, &directory,
-			/* TRANSLATORS: the output location */
-			_("The output file or directory (the current directory is used if ommitted)"), NULL},
-		{ "package", 'p', 0, G_OPTION_ARG_STRING, &package,
-			/* TRANSLATORS: put a list of packages in the pack */
-			_("The package to be put into the service pack"), NULL},
-		{ "updates", 'u', 0, G_OPTION_ARG_NONE, &updates,
-			/* TRANSLATORS: put all pending updates in the pack */
-			_("Put all updates available in the service pack"), 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_generate_pack_sigint_cb);
-
-	context = g_option_context_new ("PackageKit Pack Generator");
-	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);
-	egg_debug_init (verbose);
-
-	client = pk_client_new ();
-	pack = pk_service_pack_new ();
-	cancellable = g_cancellable_new ();
-	progressbar = pk_progress_bar_new ();
-	pk_progress_bar_set_size (progressbar, 25);
-	pk_progress_bar_set_padding (progressbar, 20);
-
-	/* neither options selected */
-	if (package == NULL && !updates) {
-		/* TRANSLATORS: This is when the user fails to supply the correct arguments */
-		g_print ("%s\n", _("Neither --package or --updates option selected."));
-		retval = 1;
-		goto out;
-	}
-
-	/* both options selected */
-	if (package != NULL && updates) {
-		/* TRANSLATORS: This is when the user fails to supply just one argument */
-		g_print ("%s\n", _("Both options selected."));
-		retval = 1;
-		goto out;
-	}
-
-	/* no argument given to --package */
-	if (package != NULL && package[0] == '\0') {
-		/* TRANSLATORS: This is when the user fails to supply the package name */
-		g_print ("%s\n", _("A package name is required"));
-		retval = 1;
-		goto out;
-	}
-
-	/* no argument given to --output */
-	if (directory != NULL && directory[0] == '\0') {
-		/* TRANSLATORS: This is when the user fails to supply the output */
-		g_print ("%s\n", _("A output directory or file name is required"));
-		retval = 1;
-		goto out;
-	}
-
-	/* fall back to the system copy */
-	if (package_list == NULL)
-		package_list = g_strdup (PK_SYSTEM_PACKAGE_LIST_FILENAME);
-
-	/* fall back to CWD */
-	if (directory == NULL)
-		directory = g_get_current_dir ();
-
-	/* are we dumb and can't do some actions */
-	control = pk_control_new ();
-	ret = pk_control_get_properties_sync (control, &error);
-	if (!ret) {
-		g_print ("Failed to startup: %s\n", error->message);
-		goto out;
-	}
-
-	/* get data */
-	g_object_get (control,
-		      "roles", &roles,
-		      NULL);
-
-	if (!pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_DEPENDS)) {
-		/* TRANSLATORS: This is when the backend doesn't have the capability to get-depends */
-		g_print ("%s (GetDepends)\n", _("The package manager cannot perform this type of operation."));
-		retval = 1;
-		goto out;
-	}
-	if (!pk_bitfield_contain (roles, PK_ROLE_ENUM_DOWNLOAD_PACKAGES)) {
-		/* TRANSLATORS: This is when the backend doesn't have the capability to download */
-		g_print ("%s (DownloadPackage)\n", _("The package manager cannot perform this type of operation."));
-		retval = 1;
-		goto out;
-	}
-
-#ifndef HAVE_ARCHIVE_H
-	/* TRANSLATORS: This is when the distro didn't include libarchive support into PK */
-	g_print ("%s\n", _("Service packs cannot be created as PackageKit was not built with libarchive support."));
-	goto out;
-#endif
-
-	/* the user can speciify a complete path */
-	ret = g_file_test (directory, G_FILE_TEST_IS_DIR);
-	if (ret) {
-		filename = pk_generate_pack_get_filename (package, directory);
-	} else {
-		if (!g_str_has_suffix (directory, PK_SERVICE_PACK_FILE_EXTENSION)) {
-			/* TRANSLATORS: the user specified an absolute path, but didn't get the extension correct */
-			g_print ("%s .%s \n", _("If specifying a file, the service pack name must end with"), PK_SERVICE_PACK_FILE_EXTENSION);
-			retval = 1;
-			goto out;
-		}
-		filename = g_strdup (directory);
-	}
-
-	/* download packages to a temporary directory */
-	tempdir = g_build_filename (g_get_tmp_dir (), "pack", NULL);
-
-	/* check if file exists before we overwrite it */
-	exists = g_file_test (filename, G_FILE_TEST_EXISTS);
-
-	/*ask user input*/
-	if (exists) {
-		/* TRANSLATORS: This is when file already exists */
-		overwrite = pk_console_get_prompt (_("A pack with the same name already exists, do you want to overwrite it?"), FALSE);
-		if (!overwrite) {
-			/* TRANSLATORS: This is when the pack was not overwritten */
-			g_print ("%s\n", _("The pack was not overwritten."));
-			retval = 1;
-			goto out;
-		}
-	}
-
-	/* get rid of temp directory if it already exists */
-	g_rmdir (tempdir);
-
-	/* make the temporary directory */
-	retval = g_mkdir_with_parents (tempdir, 0777);
-	if (retval != 0) {
-		/* TRANSLATORS: This is when the temporary directory cannot be created, the directory name follows */
-		g_print ("%s '%s'\n", _("Failed to create directory:"), tempdir);
-		retval = 1;
-		goto out;
-	}
-	pk_service_pack_set_temp_directory (pack, tempdir);
-
-	/* get the exclude list */
-	excludes = NULL;
-#if 0
-	ret = pk_obj_list_from_file (PK_OBJ_LIST(list), package_list);
-	if (!ret) {
-		/* TRANSLATORS: This is when the list of packages from the remote computer cannot be opened */
-		g_print ("%s: '%s'\n", _("Failed to open package list."), package_list);
-		retval = 1;
-		goto out;
-	}
-#endif
-
-	/* resolve package name to package_id */
-	if (!updates) {
-		/* TRANSLATORS: The package name is being matched up to available packages */
-		g_print ("%s\n", _("Finding package name."));
-		package_id = pk_console_resolve_package (client, PK_FILTER_ENUM_NONE, package, &error);
-		if (package_id == NULL) {
-			/* TRANSLATORS: This is when the package cannot be found in any software source. The detailed error follows */
-			g_print (_("Failed to find package '%s': %s"), package, error->message);
-			g_error_free (error);
-			retval = 1;
-			goto out;
-		}
-	}
-
-	/* TRANSLATORS: This is telling the user we are in the process of making the pack */
-	g_print ("%s\n", _("Creating service pack..."));
-	if (updates)
-		ret = pk_generate_pack_create_for_updates (pack, filename, excludes, &error);
-	else {
-		gchar **package_ids;
-		package_ids = pk_package_ids_from_id (package_id);
-		ret = pk_generate_pack_create_for_package_ids (pack, filename, package_ids, excludes, &error);
-		g_strfreev (package_ids);
-	}
-
-	/* no more progress */
-	pk_progress_bar_end (progressbar);
-
-	if (ret) {
-		/* TRANSLATORS: we succeeded in making the file */
-		g_print (_("Service pack created '%s'"), filename);
-		g_print ("\n");
-		retval = 0;
-	} else {
-		/* TRANSLATORS: we failed to make te file */
-		g_print (_("Failed to create '%s': %s"), filename, error->message);
-		g_print ("\n");
-		g_error_free (error);
-	}
-
-out:
-	/* get rid of temp directory */
-	g_rmdir (tempdir);
-
-	g_object_unref (cancellable);
-	if (progressbar != NULL)
-		g_object_unref (progressbar);
-	if (pack != NULL)
-		g_object_unref (pack);
-	if (client != NULL)
-		g_object_unref (client);
-	if (control != NULL)
-		g_object_unref (control);
-	g_free (tempdir);
-	g_free (filename);
-	g_free (package_id);
-	g_free (directory);
-	g_free (package_list);
-	g_free (options_help);
-	g_strfreev (excludes);
-	return retval;
-}
diff --git a/client/pk-generate-pack.c b/client/pk-generate-pack.c
index 6be3f8d..f22fa17 100644
--- a/client/pk-generate-pack.c
+++ b/client/pk-generate-pack.c
@@ -1,6 +1,6 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
  *
- * Copyright (C) 2008-2009 Richard Hughes <richard at hughsie.com>
+ * Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
  * Copyright (C) 2008 Shishir Goel <crazyontheedge at gmail.com>
  *
  * Licensed under the GNU General Public License Version 2
@@ -26,17 +26,16 @@
 #include <signal.h>
 #include <stdlib.h>
 #include <locale.h>
+#include <glib.h>
 #include <glib/gi18n.h>
 #include <glib/gstdio.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
+#include <packagekit-glib2/packagekit-private.h>
 
 #include "egg-debug.h"
-#include "egg-string.h"
 
-#include "pk-tools-common.h"
-
-static guint last_percentage = 0;
-static PkServicePack *pack = NULL;
+static PkProgressBar *progressbar = NULL;
+static GCancellable *cancellable = NULL;
 
 /**
  * pk_generate_pack_get_filename:
@@ -63,94 +62,131 @@ pk_generate_pack_get_filename (const gchar *name, const gchar *directory)
 }
 
 /**
- * pk_generate_pack_package_resolve:
+ * pk_generate_pack_progress_cb:
  **/
-static gchar *
-pk_generate_pack_package_resolve (PkClient *client, PkBitfield filter, const gchar *package, GError **error)
+static void
+pk_generate_pack_progress_cb (PkProgress *progress, PkProgressType type, gpointer data)
 {
-	PkPackageList *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;
+	gint percentage;
+	PkStatusEnum status;
+
+	/* percentage */
+	if (type == PK_PROGRESS_TYPE_PERCENTAGE) {
+		g_object_get (progress,
+			      "percentage", &percentage,
+			      NULL);
+		pk_progress_bar_set_percentage (progressbar, percentage);
+	}
 
-	/* 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;
+	/* status */
+	if (type == PK_PROGRESS_TYPE_STATUS) {
+		g_object_get (progress,
+			      "status", &status,
+			      NULL);
+		if (status == PK_STATUS_ENUM_FINISHED)
+			return;
+		/* TODO: translate */
+		pk_progress_bar_start (progressbar, pk_status_enum_to_text (status));
+	}
 }
 
 /**
- * pk_generate_pack_package_cb:
+ * pk_generate_pack_sigint_cb:
  **/
 static void
-pk_generate_pack_package_cb (PkServicePack *pack_, const PkPackageObj *obj, gpointer data)
+pk_generate_pack_sigint_cb (int sig)
 {
-	g_return_if_fail (obj != NULL);
-	/* TRANSLATORS: This is the state of the transaction */
-	g_print ("%i%%\t%s %s-%s.%s\n", last_percentage, _("Downloading"), obj->id->name, obj->id->version, obj->id->arch);
+	egg_debug ("Handling SIGINT");
+
+	/* restore default */
+	signal (SIGINT, SIG_DFL);
+
+	/* cancel any tasks still running */
+	g_cancellable_cancel (cancellable);
+
+	/* kill ourselves */
+	egg_debug ("Retrying SIGINT");
+	kill (getpid (), SIGINT);
 }
 
+/* tiny helper to help us do the async operation */
+typedef struct {
+	GError		**error;
+	GMainLoop	*loop;
+	gboolean	 ret;
+} PkGenpackHelper;
+
 /**
- * pk_generate_pack_percentage_cb:
+ * pk_generate_pack_generic_cb:
  **/
 static void
-pk_generate_pack_percentage_cb (PkServicePack *pack_, guint percentage, gpointer data)
+pk_generate_pack_generic_cb (PkServicePack *pack, GAsyncResult *res, PkGenpackHelper *helper)
 {
-	last_percentage = percentage;
+	/* get the result */
+	helper->ret = pk_service_pack_generic_finish (pack, res, helper->error);
+	g_main_loop_quit (helper->loop);
 }
 
 /**
- * pk_generate_pack_status_cb:
+ * pk_generate_pack_create_for_updates:
  **/
-static void
-pk_generate_pack_status_cb (PkServicePack *pack_, PkServicePackStatus status, gpointer data)
+static gboolean
+pk_generate_pack_create_for_updates (PkServicePack *pack, const gchar *filename, gchar **excludes, GError **error)
 {
-	if (status == PK_SERVICE_PACK_STATUS_DOWNLOAD_PACKAGES) {
-		/* TRANSLATORS: This is when the main packages are being downloaded */
-		g_print ("%s\n", _("Downloading packages"));
-		return;
-	}
-	if (status == PK_SERVICE_PACK_STATUS_DOWNLOAD_DEPENDENCIES) {
-		/* TRANSLATORS: This is when the dependency packages are being downloaded */
-		g_print ("%s\n", _("Downloading dependencies"));
-		return;
-	}
+	gboolean ret;
+	PkGenpackHelper *helper;
+
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkGenpackHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_service_pack_create_for_updates_async (pack, filename, excludes, cancellable,
+						  (PkProgressCallback) pk_generate_pack_progress_cb, NULL,
+						  (GAsyncReadyCallback) pk_generate_pack_generic_cb, helper);
+	g_main_loop_run (helper->loop);
+
+	ret = helper->ret;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return ret;
 }
 
 /**
- * pk_generate_pack_sigint_cb:
+ * pk_generate_pack_create_for_package_ids:
  **/
-static void
-pk_generate_pack_sigint_cb (int sig)
+static gboolean
+pk_generate_pack_create_for_package_ids (PkServicePack *pack, const gchar *filename, gchar **package_ids, gchar **excludes, GError **error)
 {
 	gboolean ret;
-	GError *error = NULL;
-	egg_debug ("Handling SIGINT");
+	PkGenpackHelper *helper;
 
-	/* restore default */
-	signal (SIGINT, SIG_DFL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-	/* cancel downloads */
-	ret = pk_service_pack_cancel (pack, &error);
-	if (!ret) {
-		egg_warning ("failed to cancel: %s", error->message);
-		g_error_free (error);
-	}
+	/* create temp object */
+	helper = g_new0 (PkGenpackHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
 
-	/* kill ourselves */
-	egg_debug ("Retrying SIGINT");
-	kill (getpid (), SIGINT);
+	/* run async method */
+	pk_service_pack_create_for_package_ids_async (pack, filename, package_ids, excludes, cancellable,
+						      (PkProgressCallback) pk_generate_pack_progress_cb, NULL,
+						      (GAsyncReadyCallback) pk_generate_pack_generic_cb, helper);
+	g_main_loop_run (helper->loop);
+
+	ret = helper->ret;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return ret;
 }
 
 /**
@@ -170,8 +206,9 @@ main (int argc, char *argv[])
 	gchar *tempdir = NULL;
 	gboolean exists;
 	gboolean overwrite;
-	PkPackageList *list = NULL;
+	gchar **excludes = NULL;
 	gchar *package_id = NULL;
+	PkServicePack *pack = NULL;
 
 	gboolean verbose = FALSE;
 	gchar *directory = NULL;
@@ -219,6 +256,13 @@ main (int argc, char *argv[])
 	g_option_context_free (context);
 	egg_debug_init (verbose);
 
+	client = pk_client_new ();
+	pack = pk_service_pack_new ();
+	cancellable = g_cancellable_new ();
+	progressbar = pk_progress_bar_new ();
+	pk_progress_bar_set_size (progressbar, 25);
+	pk_progress_bar_set_padding (progressbar, 20);
+
 	/* neither options selected */
 	if (package == NULL && !updates) {
 		/* TRANSLATORS: This is when the user fails to supply the correct arguments */
@@ -236,7 +280,7 @@ main (int argc, char *argv[])
 	}
 
 	/* no argument given to --package */
-	if (package != NULL && egg_strzero (package)) {
+	if (package != NULL && package[0] == '\0') {
 		/* TRANSLATORS: This is when the user fails to supply the package name */
 		g_print ("%s\n", _("A package name is required"));
 		retval = 1;
@@ -244,7 +288,7 @@ main (int argc, char *argv[])
 	}
 
 	/* no argument given to --output */
-	if (directory != NULL && egg_strzero (directory)) {
+	if (directory != NULL && directory[0] == '\0') {
 		/* TRANSLATORS: This is when the user fails to supply the output */
 		g_print ("%s\n", _("A output directory or file name is required"));
 		retval = 1;
@@ -261,7 +305,18 @@ main (int argc, char *argv[])
 
 	/* are we dumb and can't do some actions */
 	control = pk_control_new ();
-	roles = pk_control_get_actions (control, NULL);
+	ret = pk_control_get_properties_sync (control, &error);
+	if (!ret) {
+		/* TRANSLATORS: This is when the dameon is not-installed/broken and fails to startup */
+		g_print ("%s: %s\n", _("The dameon failed to startup"), error->message);
+		goto out;
+	}
+
+	/* get data */
+	g_object_get (control,
+		      "roles", &roles,
+		      NULL);
+
 	if (!pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_DEPENDS)) {
 		/* TRANSLATORS: This is when the backend doesn't have the capability to get-depends */
 		g_print ("%s (GetDepends)\n", _("The package manager cannot perform this type of operation."));
@@ -324,9 +379,11 @@ main (int argc, char *argv[])
 		retval = 1;
 		goto out;
 	}
+	pk_service_pack_set_temp_directory (pack, tempdir);
 
 	/* get the exclude list */
-	list = pk_package_list_new ();
+	excludes = NULL;
+#if 0
 	ret = pk_obj_list_from_file (PK_OBJ_LIST(list), package_list);
 	if (!ret) {
 		/* TRANSLATORS: This is when the list of packages from the remote computer cannot be opened */
@@ -334,15 +391,13 @@ main (int argc, char *argv[])
 		retval = 1;
 		goto out;
 	}
+#endif
 
 	/* resolve package name to package_id */
 	if (!updates) {
-		client = pk_client_new ();
-		pk_client_set_use_buffer (client, TRUE, NULL);
-		pk_client_set_synchronous (client, TRUE, NULL);
 		/* TRANSLATORS: The package name is being matched up to available packages */
 		g_print ("%s\n", _("Finding package name."));
-		package_id = pk_generate_pack_package_resolve (client, PK_FILTER_ENUM_NONE, package, &error);
+		package_id = pk_console_resolve_package (client, PK_FILTER_ENUM_NONE, package, &error);
 		if (package_id == NULL) {
 			/* TRANSLATORS: This is when the package cannot be found in any software source. The detailed error follows */
 			g_print (_("Failed to find package '%s': %s"), package, error->message);
@@ -352,21 +407,20 @@ main (int argc, char *argv[])
 		}
 	}
 
-	/* create pack and set initial values */
-	pack = pk_service_pack_new ();
-	g_signal_connect (pack, "package", G_CALLBACK (pk_generate_pack_package_cb), pack);
-	g_signal_connect (pack, "percentage", G_CALLBACK (pk_generate_pack_percentage_cb), pack);
-	g_signal_connect (pack, "status", G_CALLBACK (pk_generate_pack_status_cb), pack);
-	pk_service_pack_set_filename (pack, filename);
-	pk_service_pack_set_temp_directory (pack, tempdir);
-	pk_service_pack_set_exclude_list (pack, list);
-
 	/* TRANSLATORS: This is telling the user we are in the process of making the pack */
 	g_print ("%s\n", _("Creating service pack..."));
 	if (updates)
-		ret = pk_service_pack_create_for_updates (pack, &error);
-	else
-		ret = pk_service_pack_create_for_package_id (pack, package_id, &error);
+		ret = pk_generate_pack_create_for_updates (pack, filename, excludes, &error);
+	else {
+		gchar **package_ids;
+		package_ids = pk_package_ids_from_id (package_id);
+		ret = pk_generate_pack_create_for_package_ids (pack, filename, package_ids, excludes, &error);
+		g_strfreev (package_ids);
+	}
+
+	/* no more progress */
+	pk_progress_bar_end (progressbar);
+
 	if (ret) {
 		/* TRANSLATORS: we succeeded in making the file */
 		g_print (_("Service pack created '%s'"), filename);
@@ -383,12 +437,13 @@ out:
 	/* get rid of temp directory */
 	g_rmdir (tempdir);
 
+	g_object_unref (cancellable);
+	if (progressbar != NULL)
+		g_object_unref (progressbar);
 	if (pack != NULL)
 		g_object_unref (pack);
 	if (client != NULL)
 		g_object_unref (client);
-	if (list != NULL)
-		g_object_unref (list);
 	if (control != NULL)
 		g_object_unref (control);
 	g_free (tempdir);
@@ -397,5 +452,6 @@ out:
 	g_free (directory);
 	g_free (package_list);
 	g_free (options_help);
+	g_strfreev (excludes);
 	return retval;
 }
diff --git a/client/pk-monitor-test.c b/client/pk-monitor-test.c
deleted file mode 100644
index 59b2b76..0000000
--- a/client/pk-monitor-test.c
+++ /dev/null
@@ -1,342 +0,0 @@
-/* -*- 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 <stdlib.h>
-#include <locale.h>
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <packagekit-glib2/packagekit.h>
-
-#include "egg-debug.h"
-
-static gboolean verbose = FALSE;
-static PkClient *client = NULL;
-static GPtrArray *array = NULL;
-
-/**
- * pk_monitor_repo_list_changed_cb:
- **/
-static void
-pk_monitor_repo_list_changed_cb (PkControl *control, gpointer data)
-{
-	g_print ("repo-list-changed\n");
-}
-
-/**
- * pk_monitor_updates_changed_cb:
- **/
-static void
-pk_monitor_updates_changed_cb (PkControl *control, gpointer data)
-{
-	g_print ("updates-changed\n");
-}
-
-/**
- * pk_connection_changed_cb:
- **/
-static void
-pk_connection_changed_cb (PkControl *control, gboolean connected, gpointer data)
-{
-	g_print ("daemon connected=%i\n", connected);
-}
-
-/**
- * pk_monitor_locked_cb:
- **/
-static void
-pk_monitor_locked_cb (PkControl *control, gboolean is_locked, gpointer data)
-{
-	if (is_locked)
-		g_print ("backend locked\n");
-	else
-		g_print ("backend unlocked\n");
-}
-
-/**
- * pk_monitor_adopt_cb:
- **/
-static void
-pk_monitor_adopt_cb (PkClient *_client, GAsyncResult *res, const gchar *tid)
-{
-	GError *error = NULL;
-	PkResults *results = NULL;
-	PkExitEnum exit_enum;
-
-	/* get the results */
-	results = pk_client_generic_finish (client, res, &error);
-	if (results == NULL) {
-		egg_warning ("failed to adopt: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	exit_enum = pk_results_get_exit_code (results);
-	g_print ("%s\texit code: %s\n", tid, pk_exit_enum_to_text (exit_enum));
-out:
-	if (results != NULL)
-		g_object_unref (results);
-}
-
-/**
- * pk_monitor_progress_cb:
- **/
-static void
-pk_monitor_progress_cb (PkProgress *progress, PkProgressType type, const gchar *tid)
-{
-	PkRoleEnum role;
-	PkStatusEnum status;
-	guint percentage;
-	gboolean allow_cancel;
-	gchar *package_id;
-
-	/* get data */
-	g_object_get (progress,
-		      "role", &role,
-		      "status", &status,
-		      "percentage", &percentage,
-		      "allow-cancel", &allow_cancel,
-		      "package-id", &package_id,
-		      NULL);
-
-	if (type == PK_PROGRESS_TYPE_ROLE) {
-		g_print ("%s\trole         %s\n", tid, pk_role_enum_to_text (role));
-	} else if (type == PK_PROGRESS_TYPE_PACKAGE_ID) {
-		g_print ("%s\tpackage      %s\n", tid, package_id);
-	} else if (type == PK_PROGRESS_TYPE_PERCENTAGE) {
-		g_print ("%s\tpercentage   %i\n", tid, percentage);
-	} else if (type == PK_PROGRESS_TYPE_ALLOW_CANCEL) {
-		g_print ("%s\tallow_cancel %i\n", tid, allow_cancel);
-	} else if (type == PK_PROGRESS_TYPE_STATUS) {
-		g_print ("%s\tstatus       %s\n", tid, pk_status_enum_to_text (status));
-	}
-	g_free (package_id);
-}
-
-/**
- * pk_monitor_list_add:
- **/
-static void
-pk_monitor_list_add (const gchar *transaction_id)
-{
-	gchar *tid;
-
-	/* adopt client */
-	tid = g_strdup (transaction_id);
-	pk_client_adopt_async (client, transaction_id, NULL,
-			       (PkProgressCallback) pk_monitor_progress_cb, tid,
-			       (GAsyncReadyCallback) pk_monitor_adopt_cb, tid);
-	/* add tid to array */
-	g_ptr_array_add (array, tid);
-}
-
-/**
- * pk_monitor_in_array:
- **/
-static gboolean
-pk_monitor_in_array (GPtrArray *_array, const gchar *text)
-{
-	guint i;
-	const gchar *tmp;
-	for (i=0; i<_array->len; i++) {
-		tmp = g_ptr_array_index (_array, i);
-		if (g_strcmp0 (text, tmp) == 0)
-			return TRUE;
-	}
-	return FALSE;
-}
-
-/**
- * pk_monitor_list_print:
- **/
-static void
-pk_monitor_list_print (gchar **list)
-{
-	guint i;
-	gboolean ret;
-
-	g_print ("Transactions:\n");
-	if (list[0] == NULL) {
-		g_print (" [none]\n");
-		return;
-	}
-	for (i=0; list[i] != NULL; i++) {
-		g_print (" %i\t%s\n", i+1, list[i]);
-
-		/* check to see if tid is in array */
-		ret = pk_monitor_in_array (array, list[i]);
-		if (!ret)
-			pk_monitor_list_add (list[i]);
-	}
-}
-
-/**
- * pk_monitor_get_transaction_list_cb:
- **/
-static void
-pk_monitor_get_transaction_list_cb (PkControl *control, GAsyncResult *res, gpointer user_data)
-{
-	GError *error = NULL;
-	gchar **list;
-
-	/* get the result */
-	list = pk_control_get_transaction_list_finish (control, res, &error);
-	if (list == NULL) {
-		g_print ("%s: %s", _("Failed to get transaction list"), error->message);
-		g_error_free (error);
-		return;
-	}
-	pk_monitor_list_print (list);
-	g_strfreev (list);
-}
-
-/**
- * pk_monitor_get_transaction_list:
- **/
-static void
-pk_monitor_get_transaction_list (PkControl *control)
-{
-	egg_debug ("refreshing task list");
-	pk_control_get_transaction_list_async (control, NULL,
-					       (GAsyncReadyCallback) pk_monitor_get_transaction_list_cb, NULL);
-}
-
-/**
- * pk_monitor_get_daemon_state_cb:
- **/
-static void
-pk_monitor_get_daemon_state_cb (PkControl *control, GAsyncResult *res, gpointer user_data)
-{
-	GError *error = NULL;
-	gchar *state;
-
-	/* get the result */
-	state = pk_control_get_daemon_state_finish (control, res, &error);
-	if (state == NULL) {
-		g_print ("%s: %s", _("Failed to get daemon state"), error->message);
-		g_error_free (error);
-		goto out;
-	}
-	g_print ("Daemon state: '%s'\n", state);
-out:
-	g_free (state);
-}
-
-/**
- * pk_monitor_get_daemon_state:
- **/
-static void
-pk_monitor_get_daemon_state (PkControl *control)
-{
-	pk_control_get_daemon_state_async (control, NULL,
-					   (GAsyncReadyCallback) pk_monitor_get_daemon_state_cb, NULL);
-}
-
-
-/**
- * pk_monitor_task_list_changed_cb:
- **/
-static void
-pk_monitor_task_list_changed_cb (PkControl *control)
-{
-	pk_monitor_get_transaction_list (control);
-
-	/* only print state when verbose */
-	if (verbose)
-		pk_monitor_get_daemon_state (control);
-}
-
-/**
- * main:
- **/
-int
-main (int argc, char *argv[])
-{
-	GMainLoop *loop;
-	gboolean program_version = FALSE;
-	GOptionContext *context;
-	gint retval = EXIT_SUCCESS;
-	PkControl *control;
-
-	const GOptionEntry options[] = {
-		{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
-			_("Show extra debugging information"), NULL },
-		{ "version", '\0', 0, G_OPTION_ARG_NONE, &program_version,
-			_("Show the program version and exit"), 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 ();
-
-	context = g_option_context_new (NULL);
-	/* TRANSLATORS: this is a program that monitors PackageKit */
-	g_option_context_set_summary (context, _("PackageKit Monitor"));
-	g_option_context_add_main_entries (context, options, NULL);
-	g_option_context_parse (context, &argc, &argv, NULL);
-	g_option_context_free (context);
-
-	if (program_version) {
-		g_print (VERSION "\n");
-		goto out;
-	}
-
-	egg_debug_init (verbose);
-
-	loop = g_main_loop_new (NULL, FALSE);
-
-	control = pk_control_new ();
-	client = pk_client_new ();
-	array = g_ptr_array_new_with_free_func (g_free);
-	g_signal_connect (control, "locked",
-			  G_CALLBACK (pk_monitor_locked_cb), NULL);
-	g_signal_connect (control, "repo-list-changed",
-			  G_CALLBACK (pk_monitor_repo_list_changed_cb), NULL);
-	g_signal_connect (control, "updates-changed",
-			  G_CALLBACK (pk_monitor_updates_changed_cb), NULL);
-	g_signal_connect (control, "transaction-list-changed",
-			  G_CALLBACK (pk_monitor_task_list_changed_cb), NULL);
-	g_signal_connect (control, "connection-changed",
-			  G_CALLBACK (pk_connection_changed_cb), NULL);
-
-	/* coldplug */
-	pk_monitor_get_transaction_list (control);
-
-	/* only print state when verbose */
-	if (verbose)
-		pk_monitor_get_daemon_state (control);
-
-	/* spin */
-	g_main_loop_run (loop);
-
-	g_object_unref (control);
-	g_object_unref (client);
-	g_ptr_array_unref (array);
-out:
-	return retval;
-}
diff --git a/client/pk-monitor.c b/client/pk-monitor.c
index 3d9a0e2..59b2b76 100644
--- a/client/pk-monitor.c
+++ b/client/pk-monitor.c
@@ -1,6 +1,6 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
  *
- * Copyright (C) 2007-2008 Richard Hughes <richard at hughsie.com>
+ * Copyright (C) 2007-2009 Richard Hughes <richard at hughsie.com>
  *
  * Licensed under the GNU General Public License Version 2
  *
@@ -21,90 +21,248 @@
 
 #include "config.h"
 
-#include <string.h>
-#include <unistd.h>
 #include <stdlib.h>
 #include <locale.h>
 #include <glib.h>
 #include <glib/gi18n.h>
-#include <dbus/dbus-glib.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 #include "egg-debug.h"
 
-#include "pk-tools-common.h"
-
-static PkControl *control = NULL;
 static gboolean verbose = FALSE;
+static PkClient *client = NULL;
+static GPtrArray *array = NULL;
 
 /**
- * pk_monitor_task_list_changed_cb:
+ * pk_monitor_repo_list_changed_cb:
+ **/
+static void
+pk_monitor_repo_list_changed_cb (PkControl *control, gpointer data)
+{
+	g_print ("repo-list-changed\n");
+}
+
+/**
+ * pk_monitor_updates_changed_cb:
+ **/
+static void
+pk_monitor_updates_changed_cb (PkControl *control, gpointer data)
+{
+	g_print ("updates-changed\n");
+}
+
+/**
+ * pk_connection_changed_cb:
+ **/
+static void
+pk_connection_changed_cb (PkControl *control, gboolean connected, gpointer data)
+{
+	g_print ("daemon connected=%i\n", connected);
+}
+
+/**
+ * pk_monitor_locked_cb:
+ **/
+static void
+pk_monitor_locked_cb (PkControl *control, gboolean is_locked, gpointer data)
+{
+	if (is_locked)
+		g_print ("backend locked\n");
+	else
+		g_print ("backend unlocked\n");
+}
+
+/**
+ * pk_monitor_adopt_cb:
+ **/
+static void
+pk_monitor_adopt_cb (PkClient *_client, GAsyncResult *res, const gchar *tid)
+{
+	GError *error = NULL;
+	PkResults *results = NULL;
+	PkExitEnum exit_enum;
+
+	/* get the results */
+	results = pk_client_generic_finish (client, res, &error);
+	if (results == NULL) {
+		egg_warning ("failed to adopt: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	exit_enum = pk_results_get_exit_code (results);
+	g_print ("%s\texit code: %s\n", tid, pk_exit_enum_to_text (exit_enum));
+out:
+	if (results != NULL)
+		g_object_unref (results);
+}
+
+/**
+ * pk_monitor_progress_cb:
+ **/
+static void
+pk_monitor_progress_cb (PkProgress *progress, PkProgressType type, const gchar *tid)
+{
+	PkRoleEnum role;
+	PkStatusEnum status;
+	guint percentage;
+	gboolean allow_cancel;
+	gchar *package_id;
+
+	/* get data */
+	g_object_get (progress,
+		      "role", &role,
+		      "status", &status,
+		      "percentage", &percentage,
+		      "allow-cancel", &allow_cancel,
+		      "package-id", &package_id,
+		      NULL);
+
+	if (type == PK_PROGRESS_TYPE_ROLE) {
+		g_print ("%s\trole         %s\n", tid, pk_role_enum_to_text (role));
+	} else if (type == PK_PROGRESS_TYPE_PACKAGE_ID) {
+		g_print ("%s\tpackage      %s\n", tid, package_id);
+	} else if (type == PK_PROGRESS_TYPE_PERCENTAGE) {
+		g_print ("%s\tpercentage   %i\n", tid, percentage);
+	} else if (type == PK_PROGRESS_TYPE_ALLOW_CANCEL) {
+		g_print ("%s\tallow_cancel %i\n", tid, allow_cancel);
+	} else if (type == PK_PROGRESS_TYPE_STATUS) {
+		g_print ("%s\tstatus       %s\n", tid, pk_status_enum_to_text (status));
+	}
+	g_free (package_id);
+}
+
+/**
+ * pk_monitor_list_add:
  **/
 static void
-pk_monitor_task_list_changed_cb (PkTaskList *tlist, gpointer data)
+pk_monitor_list_add (const gchar *transaction_id)
+{
+	gchar *tid;
+
+	/* adopt client */
+	tid = g_strdup (transaction_id);
+	pk_client_adopt_async (client, transaction_id, NULL,
+			       (PkProgressCallback) pk_monitor_progress_cb, tid,
+			       (GAsyncReadyCallback) pk_monitor_adopt_cb, tid);
+	/* add tid to array */
+	g_ptr_array_add (array, tid);
+}
+
+/**
+ * pk_monitor_in_array:
+ **/
+static gboolean
+pk_monitor_in_array (GPtrArray *_array, const gchar *text)
 {
 	guint i;
-	PkTaskListItem *item;
-	guint length;
-	gchar *state;
+	const gchar *tmp;
+	for (i=0; i<_array->len; i++) {
+		tmp = g_ptr_array_index (_array, i);
+		if (g_strcmp0 (text, tmp) == 0)
+			return TRUE;
+	}
+	return FALSE;
+}
 
-	length = pk_task_list_get_size (tlist);
-	g_print ("Tasks:\n");
-	if (length == 0) {
-		g_print ("[none]\n");
+/**
+ * pk_monitor_list_print:
+ **/
+static void
+pk_monitor_list_print (gchar **list)
+{
+	guint i;
+	gboolean ret;
+
+	g_print ("Transactions:\n");
+	if (list[0] == NULL) {
+		g_print (" [none]\n");
 		return;
 	}
-	for (i=0; i<length; i++) {
-		item = pk_task_list_get_item (tlist, i);
-		g_print ("#%i\t%s\t%s (%s)\t%s\n", i+1, item->tid, pk_role_enum_to_text (item->role),
-			 pk_status_enum_to_text (item->status), item->text);
+	for (i=0; list[i] != NULL; i++) {
+		g_print (" %i\t%s\n", i+1, list[i]);
+
+		/* check to see if tid is in array */
+		ret = pk_monitor_in_array (array, list[i]);
+		if (!ret)
+			pk_monitor_list_add (list[i]);
 	}
+}
 
-	/* only print state when verbose */
-	if (verbose) {
-		state = pk_control_get_daemon_state (control, NULL);
-		g_print ("%s", state);
-		g_free (state);
+/**
+ * pk_monitor_get_transaction_list_cb:
+ **/
+static void
+pk_monitor_get_transaction_list_cb (PkControl *control, GAsyncResult *res, gpointer user_data)
+{
+	GError *error = NULL;
+	gchar **list;
+
+	/* get the result */
+	list = pk_control_get_transaction_list_finish (control, res, &error);
+	if (list == NULL) {
+		g_print ("%s: %s", _("Failed to get transaction list"), error->message);
+		g_error_free (error);
+		return;
 	}
+	pk_monitor_list_print (list);
+	g_strfreev (list);
 }
 
 /**
- * pk_monitor_repo_list_changed_cb:
+ * pk_monitor_get_transaction_list:
  **/
 static void
-pk_monitor_repo_list_changed_cb (PkControl *_control, gpointer data)
+pk_monitor_get_transaction_list (PkControl *control)
 {
-	g_print ("repo-list-changed\n");
+	egg_debug ("refreshing task list");
+	pk_control_get_transaction_list_async (control, NULL,
+					       (GAsyncReadyCallback) pk_monitor_get_transaction_list_cb, NULL);
 }
 
 /**
- * pk_monitor_updates_changed_cb:
+ * pk_monitor_get_daemon_state_cb:
  **/
 static void
-pk_monitor_updates_changed_cb (PkControl *_control, gpointer data)
+pk_monitor_get_daemon_state_cb (PkControl *control, GAsyncResult *res, gpointer user_data)
 {
-	g_print ("updates-changed\n");
+	GError *error = NULL;
+	gchar *state;
+
+	/* get the result */
+	state = pk_control_get_daemon_state_finish (control, res, &error);
+	if (state == NULL) {
+		g_print ("%s: %s", _("Failed to get daemon state"), error->message);
+		g_error_free (error);
+		goto out;
+	}
+	g_print ("Daemon state: '%s'\n", state);
+out:
+	g_free (state);
 }
 
 /**
- * pk_connection_changed_cb:
+ * pk_monitor_get_daemon_state:
  **/
 static void
-pk_connection_changed_cb (PkConnection *pconnection, gboolean connected, gpointer data)
+pk_monitor_get_daemon_state (PkControl *control)
 {
-	egg_debug ("connected=%i", connected);
+	pk_control_get_daemon_state_async (control, NULL,
+					   (GAsyncReadyCallback) pk_monitor_get_daemon_state_cb, NULL);
 }
 
+
 /**
- * pk_monitor_locked_cb:
+ * pk_monitor_task_list_changed_cb:
  **/
 static void
-pk_monitor_locked_cb (PkControl *_control, gboolean is_locked, gpointer data)
+pk_monitor_task_list_changed_cb (PkControl *control)
 {
-	if (is_locked)
-		g_print ("locked\n");
-	else
-		g_print ("unlocked\n");
+	pk_monitor_get_transaction_list (control);
+
+	/* only print state when verbose */
+	if (verbose)
+		pk_monitor_get_daemon_state (control);
 }
 
 /**
@@ -113,15 +271,11 @@ pk_monitor_locked_cb (PkControl *_control, gboolean is_locked, gpointer data)
 int
 main (int argc, char *argv[])
 {
-	PkTaskList *tlist;
-	gboolean ret;
 	GMainLoop *loop;
-	PkConnection *pconnection;
-	gboolean connected;
 	gboolean program_version = FALSE;
-	gchar *state;
 	GOptionContext *context;
 	gint retval = EXIT_SUCCESS;
+	PkControl *control;
 
 	const GOptionEntry options[] = {
 		{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
@@ -138,7 +292,6 @@ main (int argc, char *argv[])
 
 	if (! g_thread_supported ())
 		g_thread_init (NULL);
-	dbus_g_thread_init ();
 	g_type_init ();
 
 	context = g_option_context_new (NULL);
@@ -157,48 +310,33 @@ main (int argc, char *argv[])
 
 	loop = g_main_loop_new (NULL, FALSE);
 
-	pconnection = pk_connection_new ();
-	g_signal_connect (pconnection, "connection-changed",
-			  G_CALLBACK (pk_connection_changed_cb), loop);
-	connected = pk_connection_valid (pconnection);
-	egg_debug ("connected=%i", connected);
-
 	control = pk_control_new ();
+	client = pk_client_new ();
+	array = g_ptr_array_new_with_free_func (g_free);
 	g_signal_connect (control, "locked",
 			  G_CALLBACK (pk_monitor_locked_cb), NULL);
 	g_signal_connect (control, "repo-list-changed",
 			  G_CALLBACK (pk_monitor_repo_list_changed_cb), NULL);
 	g_signal_connect (control, "updates-changed",
 			  G_CALLBACK (pk_monitor_updates_changed_cb), NULL);
-
-	tlist = pk_task_list_new ();
-	g_signal_connect (tlist, "changed",
-			  G_CALLBACK (pk_monitor_task_list_changed_cb), NULL);
-	g_signal_connect (tlist, "status-changed",
+	g_signal_connect (control, "transaction-list-changed",
 			  G_CALLBACK (pk_monitor_task_list_changed_cb), NULL);
+	g_signal_connect (control, "connection-changed",
+			  G_CALLBACK (pk_connection_changed_cb), NULL);
 
-	egg_debug ("refreshing task list");
-	ret = pk_task_list_refresh (tlist);
-	if (!ret) {
-		g_print ("%s\n", _("Cannot show the list of transactions"));
-		retval = EXIT_FAILURE;
-		goto out;
-	}
-	pk_task_list_print (tlist);
+	/* coldplug */
+	pk_monitor_get_transaction_list (control);
 
 	/* only print state when verbose */
-	if (verbose) {
-		state = pk_control_get_daemon_state (control, NULL);
-		g_print ("%s\n", state);
-		g_free (state);
-	}
+	if (verbose)
+		pk_monitor_get_daemon_state (control);
 
 	/* spin */
 	g_main_loop_run (loop);
 
 	g_object_unref (control);
-	g_object_unref (tlist);
-	g_object_unref (pconnection);
+	g_object_unref (client);
+	g_ptr_array_unref (array);
 out:
 	return retval;
 }
diff --git a/client/pk-tools-common.c b/client/pk-tools-common.c
deleted file mode 100644
index b021d27..0000000
--- a/client/pk-tools-common.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 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.
- */
-
-#include "config.h"
-#include <glib.h>
-#include <stdio.h>
-#include <glib/gi18n.h>
-#include <packagekit-glib/packagekit.h>
-
-#include <egg-debug.h>
-
-#include "pk-tools-common.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';
-	gboolean ret = FALSE;
-
-	/* 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) fgetc (stdin);
-
-		/* positive */
-		if (answer == 'y' || answer == 'Y') {
-			ret = TRUE;
-			break;
-		}
-		/* negative */
-		if (answer == 'n' || answer == 'N')
-			break;
-
-		/* default choice */
-		if (answer == '\n' && defaultyes) {
-			ret = TRUE;
-			break;
-		}
-		if (answer == '\n' && !defaultyes)
-			break;
-	} while (TRUE);
-
-	/* remove the trailing \n */
-	answer = (gchar) fgetc (stdin);
-	if (answer != '\n')
-		ungetc (answer, stdin);
-
-	return ret;
-}
-
-/**
- * pk_console_resolve:
- **/
-PkPackageList *
-pk_console_resolve (PkBitfield filter, const gchar *package, GError **error)
-{
-	gboolean ret;
-	guint length;
-	PkPackageList *list = NULL;
-	PkControl *control;
-	PkClient *client;
-	gchar **packages;
-	GError *error_local = NULL;
-	PkBitfield roles;
-
-	/* get roles supported */
-	control = pk_control_new ();
-	roles = pk_control_get_actions (control, NULL);
-
-	/* get new client */
-	client = pk_client_new ();
-	pk_client_set_use_buffer (client, TRUE, NULL);
-	pk_client_set_synchronous (client, TRUE, NULL);
-
-	/* we need to resolve it */
-	packages = pk_package_ids_from_id (package);
-	ret = pk_client_resolve (client, filter, packages, &error_local);
-	g_strfreev (packages);
-	if (!ret) {
-		if (error != NULL)
-			*error = g_error_new (1, 0, _("Internal error: %s"), error_local->message);
-		g_error_free (error_local);
-		goto out;
-	}
-
-	/* get length of items found */
-	list = pk_client_get_package_list (client);
-	length = pk_package_list_get_size (list);
-
-	/* didn't resolve to anything, try to get a provide */
-	if (length == 0 && pk_bitfield_contain (roles, PK_ROLE_ENUM_WHAT_PROVIDES)) {
-
-		g_object_unref (list);
-		list = NULL;
-
-		/* reset */
-		ret = pk_client_reset (client, &error_local);
-		if (!ret) {
-			if (error != NULL)
-				*error = g_error_new (1, 0, _("Internal error: %s"), error_local->message);
-			g_error_free (error_local);
-			goto out;
-		}
-		/* anything provide it? */
-		ret = pk_client_what_provides (client, filter, PK_PROVIDES_ENUM_ANY, package, &error_local);
-		if (!ret) {
-			if (error != NULL)
-				*error = g_error_new (1, 0, _("Internal error: %s"), error_local->message);
-			g_error_free (error_local);
-			goto out;
-		}
-
-		/* get length of items found again (we might have had success) */
-		list = pk_client_get_package_list (client);
-	}
-out:
-	g_object_unref (control);
-	g_object_unref (client);
-	return list;
-}
-
-/**
- * pk_console_resolve_package_id:
- **/
-gchar *
-pk_console_resolve_package_id (const PkPackageList *list, GError **error)
-{
-	guint i;
-	guint length;
-	const PkPackageObj *obj;
-
-	length = pk_package_list_get_size (list);
-
-	if (length == 0) {
-		if (error != NULL) {
-			/* TRANSLATORS: The package was not found in any software sources */
-			*error = g_error_new (1, 0, _("The package could not be found"));
-		}
-		return NULL;
-	}
-
-	/* only found one, great! */
-	if (length == 1) {
-		obj = pk_package_list_get_obj (list, 0);
-		return pk_package_id_to_string (obj->id);
-	}
-
-	/* TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages  */
-	g_print ("%s\n", _("More than one package matches:"));
-	for (i=0; i<length; i++) {
-		obj = pk_package_list_get_obj (list, i);
-		g_print ("%i. %s-%s.%s\n", i+1, obj->id->name, obj->id->version, obj->id->arch);
-	}
-
-	/* TRANSLATORS: This finds out which package in the list to use */
-	i = pk_console_get_number (_("Please choose the correct package: "), length);
-	obj = pk_package_list_get_obj (list, i-1);
-
-	return pk_package_id_to_string (obj->id);
-}
-
diff --git a/client/pk-tools-common.h b/client/pk-tools-common.h
deleted file mode 100644
index 6846629..0000000
--- a/client/pk-tools-common.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 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.
- */
-
-#ifndef __PK_TOOLS_COMMON_H
-#define __PK_TOOLS_COMMON_H
-
-#include <glib.h>
-#include <packagekit-glib/packagekit.h>
-
-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);
-gchar		*pk_console_resolve_package_id		(const PkPackageList *list,
-							 GError		**error);
-
-#endif /* __PK_TOOLS_COMMON_H */
diff --git a/configure.ac b/configure.ac
index 8e93dbf..c869a72 100644
--- a/configure.ac
+++ b/configure.ac
@@ -144,7 +144,7 @@ AM_GLIB_GNU_GETTEXT
 dnl ---------------------------------------------------------------------------
 dnl - Library dependencies
 dnl ---------------------------------------------------------------------------
-GLIB_REQUIRED=2.14.0
+GLIB_REQUIRED=2.21.5
 GIO_REQUIRED=2.16.1
 DBUS_REQUIRED=1.1.1
 DBUS_GLIB_REQUIRED=0.74
@@ -156,13 +156,6 @@ QTSQL_REQUIRED=4.4.0
 QTXML_REQUIRED=4.4.0
 
 dnl ---------------------------------------------------------------------------
-dnl - Make above strings available for packaging files (e.g. rpm spec files)
-dnl ---------------------------------------------------------------------------
-AC_SUBST(GLIB_REQUIRED)
-AC_SUBST(DBUS_REQUIRED)
-AC_SUBST(DBUS_GLIB_REQUIRED)
-
-dnl ---------------------------------------------------------------------------
 dnl - Check library dependencies
 dnl ---------------------------------------------------------------------------
 PKG_CHECK_MODULES(GLIB, glib-2.0 >= $GLIB_REQUIRED gobject-2.0)
@@ -555,18 +548,6 @@ if test x$build_glib = xyes; then
 	AC_DEFINE(PK_BUILD_GLIB,1,[Build glib code])
 fi
 
-dnl ---------------------------------------------------------------------------
-dnl - Able to build GLib2 library
-dnl ---------------------------------------------------------------------------
-AC_ARG_ENABLE(glib2, AS_HELP_STRING([--enable-glib2],[Build glib2 library (experimental)]),
-	      build_glib2=$enableval,build_glib2=no)
-AM_CONDITIONAL(PK_BUILD_GLIB2, test $build_glib2 = "yes")
-if test x$build_glib2 = xyes; then
-	# needed for g_cancellable_connect() and g_ptr_array_ref()
-	PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.22.0)
-	AC_DEFINE(PK_BUILD_GLIB2,1,[Build glib2 code])
-fi
-
 # backends
 AC_ARG_ENABLE(alpm, AS_HELP_STRING([--enable-alpm],[use the ALPM backend]),enable_alpm=$enableval,enable_alpm=no)
 AC_ARG_ENABLE(apt, AS_HELP_STRING([--enable-apt],[use the APT backend]),enable_apt=$enableval,enable_apt=no)
@@ -882,8 +863,7 @@ echo "
         pm-utils scripts:          ${build_pm_utils}
         RUCK client:               ${build_ruck}
         QT library:                ${build_qt}
-        GLib:                      ${build_glib}
-        GLib2:                     ${build_glib2}
+        GLib library (legacy):     ${build_glib}
 	Managed bindings:          ${build_managed}
 
         Backends:
diff --git a/contrib/browser-plugin/Makefile.am b/contrib/browser-plugin/Makefile.am
index e2f8948..95e5469 100644
--- a/contrib/browser-plugin/Makefile.am
+++ b/contrib/browser-plugin/Makefile.am
@@ -16,13 +16,8 @@ packagekit_plugin_la_LIBADD =			\
 	$(PK_BROWSER_PLUGIN_LIBS)		\
 	$(NULL)
 
-if PK_BUILD_GLIB2
 packagekit_plugin_la_LIBADD +=			\
 	$(top_builddir)/lib/packagekit-glib2/libpackagekit-glib2.la
-else
-packagekit_plugin_la_LIBADD +=			\
-	$(top_builddir)/lib/packagekit-glib/libpackagekit-glib.la
-endif
 
 packagekit_plugin_la_SOURCES =			\
 	pk-plugin.c				\
diff --git a/contrib/browser-plugin/pk-plugin-install.c b/contrib/browser-plugin/pk-plugin-install.c
index 6564b3d..3283135 100644
--- a/contrib/browser-plugin/pk-plugin-install.c
+++ b/contrib/browser-plugin/pk-plugin-install.c
@@ -33,11 +33,7 @@
 #include <gdk/gdkx.h>
 #include <gtk/gtk.h>
 #include <math.h>
-#ifdef PK_BUILD_GLIB2
 #include <packagekit-glib2/packagekit.h>
-#else
-#include <packagekit-glib/packagekit.h>
-#endif
 
 #include "pk-main.h"
 #include "pk-plugin-install.h"
@@ -64,11 +60,7 @@ struct PkPluginInstallPrivate
 	gchar			*display_name;
 	gchar			**package_names;
 	PangoLayout		*pango_layout;
-#ifdef PK_BUILD_GLIB2
 	PkClient		*client;
-#else
-	PkClientPool		*client_pool;
-#endif
 	DBusGProxy		*install_package_proxy;
 	DBusGProxyCall		*install_package_call;
 	gint			timeout;
@@ -238,8 +230,6 @@ out:
 	return data;
 }
 
-#ifdef PK_BUILD_GLIB2
-
 /**
  * pk_plugin_install_finished_cb:
  **/
@@ -403,147 +393,6 @@ pk_plugin_install_recheck (PkPluginInstall *self)
 				 (GAsyncReadyCallback) pk_plugin_install_finished_cb, self);
 }
 
-//	package_ids = pk_package_ids_from_text ("glib2;2.14.0;i386;fedora&powertop");
-
-#else
-
-/**
- * pk_plugin_install_package_cb:
- **/
-static void
-pk_plugin_install_package_cb (PkClient *client, const PkPackageObj *obj, PkPluginInstall *self)
-{
-	gchar *filename;
-
-	/* if we didn't use displayname, use the summary */
-	if (self->priv->display_name == NULL)
-		self->priv->display_name = g_strdup (obj->summary);
-
-	/* parse the data */
-	if (obj->info == PK_INFO_ENUM_AVAILABLE) {
-		if (self->priv->status == IN_PROGRESS)
-			pk_plugin_install_set_status (self, AVAILABLE);
-		else if (self->priv->status == INSTALLED)
-			pk_plugin_install_set_status (self, UPGRADABLE);
-		pk_plugin_install_set_available_version (self, obj->id->version);
-		pk_plugin_install_set_available_package_name (self, obj->id->name);
-
-#if 0
-		/* if we have data from the repo, override the user:
-		 *  * we don't want the remote site pretending to install another package
-		 *  * it might be localised if the backend supports it */
-		if (obj->summary != NULL && obj->summary[0] != '\0')
-			self->priv->display_name = g_strdup (obj->summary);
-#endif
-
-		pk_plugin_install_clear_layout (self);
-		pk_plugin_install_refresh (self);
-
-	} else if (obj->info == PK_INFO_ENUM_INSTALLED) {
-		if (self->priv->status == IN_PROGRESS)
-			pk_plugin_install_set_status (self, INSTALLED);
-		else if (self->priv->status == AVAILABLE)
-			pk_plugin_install_set_status (self, UPGRADABLE);
-		pk_plugin_install_set_installed_version (self, obj->id->version);
-		pk_plugin_install_set_installed_package_name (self, obj->id->name);
-
-		/* get desktop file information */
-		filename = pk_plugin_install_get_best_desktop_file (self);
-		if (filename != NULL) {
-			self->priv->app_info = G_APP_INFO (g_desktop_app_info_new_from_filename (filename));
-#if 0
-			/* override, as this will have translation */
-			self->priv->display_name = g_strdup (g_app_info_get_name (self->priv->app_info));
-#endif
-		}
-		g_free (filename);
-
-		if (self->priv->app_info != 0)
-			pk_plugin_install_set_status (self, INSTALLED);
-
-		pk_plugin_install_clear_layout (self);
-		pk_plugin_install_refresh (self);
-	}
-}
-
-/**
- * pk_plugin_install_error_code_cb:
- **/
-static void
-pk_plugin_install_error_code_cb (PkClient *client, PkErrorCodeEnum code, const gchar *details, PkPluginInstall *self)
-{
-	pk_warning ("Error getting data from PackageKit: %s\n", details);
-
-	if (self->priv->status == IN_PROGRESS) {
-		pk_plugin_install_set_status (self, UNAVAILABLE);
-		pk_plugin_install_clear_layout (self);
-		pk_plugin_install_refresh (self);
-	}
-}
-
-/**
- * pk_plugin_install_finished_cb:
- **/
-static void
-pk_plugin_install_finished_cb (PkClient *client, PkExitEnum exit_code, guint runtime, PkPluginInstall *self)
-{
-	if (self->priv->status == IN_PROGRESS) {
-		pk_plugin_install_set_status (self, UNAVAILABLE);
-		pk_plugin_install_clear_layout (self);
-		pk_plugin_install_refresh (self);
-	}
-}
-
-/**
- * pk_plugin_install_recheck:
- **/
-static void
-pk_plugin_install_recheck (PkPluginInstall *self)
-{
-	guint i;
-	const gchar *data;
-	gchar **package_ids;
-	GError *error = NULL;
-	PkClient *client;
-	gboolean ret;
-
-	self->priv->status = IN_PROGRESS;
-	pk_plugin_install_set_available_version (self, NULL);
-	pk_plugin_install_set_available_package_name (self, NULL);
-	pk_plugin_install_set_installed_version (self, NULL);
-	pk_plugin_install_set_installed_package_name (self, NULL);
-
-	/* get data, if if does not exist */
-	if (self->priv->package_names == NULL) {
-		data = pk_plugin_get_data (PK_PLUGIN (self), "displayname");
-		self->priv->display_name = g_strdup (data);
-		data = pk_plugin_get_data (PK_PLUGIN (self), "packagenames");
-		self->priv->package_names = g_strsplit (data, " ", -1);
-	}
-
-	for (i=0; self->priv->package_names[i] != NULL; i++) {
-		package_ids = pk_package_ids_from_id (self->priv->package_names[i]);
-		client = pk_client_pool_create (self->priv->client_pool);
-
-		/* do async resolve */
-		ret = pk_client_resolve (client, PK_FILTER_ENUM_NONE, package_ids, &error);
-		if (!ret) {
-			pk_warning ("%s", error->message);
-			g_clear_error (&error);
-			pk_client_pool_remove (self->priv->client_pool, client);
-		}
-		g_strfreev (package_ids);
-		g_object_unref (client);
-	}
-
-	if (pk_client_pool_get_size (self->priv->client_pool) == 0 && self->priv->status == IN_PROGRESS) {
-		pk_plugin_install_set_status (self, UNAVAILABLE);
-		pk_plugin_install_clear_layout (self);
-		pk_plugin_install_refresh (self);
-	}
-}
-#endif
-
 /**
  * pk_plugin_install_append_markup:
  **/
@@ -1289,11 +1138,7 @@ pk_plugin_install_finalize (GObject *object)
 	}
 
 	/* remove clients */
-#ifdef PK_BUILD_GLIB2
 	g_object_unref (self->priv->client);
-#else
-	g_object_unref (self->priv->client_pool);
-#endif
 
 	G_OBJECT_CLASS (pk_plugin_install_parent_class)->finalize (object);
 }
@@ -1335,16 +1180,7 @@ pk_plugin_install_init (PkPluginInstall *self)
 	self->priv->pango_layout = NULL;
 	self->priv->install_package_proxy = NULL;
 	self->priv->install_package_call = NULL;
-
-#ifdef PK_BUILD_GLIB2
 	self->priv->client = pk_client_new ();
-#else
-	/* use a client pool to do everything async */
-	self->priv->client_pool = pk_client_pool_new ();
-	pk_client_pool_connect (self->priv->client_pool, "package", G_CALLBACK (pk_plugin_install_package_cb), G_OBJECT (self));
-	pk_client_pool_connect (self->priv->client_pool, "error-code", G_CALLBACK (pk_plugin_install_error_code_cb), G_OBJECT (self));
-	pk_client_pool_connect (self->priv->client_pool, "finished", G_CALLBACK (pk_plugin_install_finished_cb), G_OBJECT (self));
-#endif
 }
 
 /**
diff --git a/contrib/command-not-found/Makefile.am b/contrib/command-not-found/Makefile.am
index d07c07c..169c73f 100644
--- a/contrib/command-not-found/Makefile.am
+++ b/contrib/command-not-found/Makefile.am
@@ -15,47 +15,25 @@ INCLUDES =						\
 
 libexec_PROGRAMS = pk-command-not-found
 
-if PK_BUILD_GLIB2
-
 PK_GLIB2_LIBS =						\
 	$(top_builddir)/lib/packagekit-glib2/libpackagekit-glib2.la	\
 	$(top_builddir)/lib/packagekit-glib2/libpackagekitprivate.a	\
 	$(NULL)
 
 pk_command_not_found_SOURCES =				\
-	pk-command-not-found-test.c			\
-	$(NULL)
-
-pk_command_not_found_LDADD =				\
-	$(GLIB_LIBS)					\
-	$(DBUS_LIBS)					\
-	$(PK_GLIB2_LIBS)				\
-	$(NULL)
-
-else
-
-PK_GLIB_LIBS =						\
-	$(top_builddir)/lib/packagekit-glib/libpackagekit-glib.la	\
-	$(NULL)
-
-pk_command_not_found_SOURCES =				\
 	egg-debug.c					\
 	egg-debug.h					\
 	egg-string.c					\
 	egg-string.h					\
-	pk-tools-common.c				\
-	pk-tools-common.h				\
 	pk-command-not-found.c				\
 	$(NULL)
 
 pk_command_not_found_LDADD =				\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
-	$(PK_GLIB_LIBS)					\
+	$(PK_GLIB2_LIBS)				\
 	$(NULL)
 
-endif
-
 pk_command_not_found_CFLAGS =				\
 	$(WARNINGFLAGS_C)				\
 	$(NULL)
diff --git a/contrib/command-not-found/pk-command-not-found-test.c b/contrib/command-not-found/pk-command-not-found-test.c
deleted file mode 100644
index 9997d1e..0000000
--- a/contrib/command-not-found/pk-command-not-found-test.c
+++ /dev/null
@@ -1,798 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 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.
- */
-
-#include "config.h"
-
-#include <string.h>
-#include <locale.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <signal.h>
-#include <glib/gi18n.h>
-#include <dbus/dbus-glib.h>
-#include <packagekit-glib2/packagekit.h>
-#include <packagekit-glib2/packagekit-private.h>
-
-#include "egg-debug.h"
-#include "egg-string.h"
-
-#define PK_MAX_PATH_LEN 1023
-
-typedef enum {
-	PK_CNF_POLICY_RUN,
-	PK_CNF_POLICY_INSTALL,
-	PK_CNF_POLICY_ASK,
-	PK_CNF_POLICY_WARN,
-	PK_CNF_POLICY_UNKNOWN
-} PkCnfPolicy;
-
-typedef struct {
-	PkCnfPolicy	 single_match;
-	PkCnfPolicy	 multiple_match;
-	PkCnfPolicy	 single_install;
-	PkCnfPolicy	 multiple_install;
-	gboolean	 software_source_search;
-	gchar		**locations;
-} PkCnfPolicyConfig;
-
-static PkClient *client = NULL;
-static GCancellable *cancellable = NULL;
-
-/**
- * pk_cnf_find_alternatives_swizzle:
- *
- * Swizzle ordering, e.g. amke -> make
- **/
-static void
-pk_cnf_find_alternatives_swizzle (const gchar *cmd, guint len, GPtrArray *array)
-{
-	guint i;
-	gchar *possible;
-	gchar swap;
-
-	/*  */
-	for (i=0; i<len-1; i++) {
-		possible = g_strdup (cmd);
-		swap = possible[i];
-		possible[i] = possible[i+1];
-		possible[i+1] = swap;
-		g_ptr_array_add (array, possible);
-	}
-}
-
-/**
- * pk_cnf_find_alternatives_replace:
- *
- * Replace some easily confused chars, e.g. gnome-power-managir to gnome-power-manager
- **/
-static void
-pk_cnf_find_alternatives_replace (const gchar *cmd, guint len, GPtrArray *array)
-{
-	guint i;
-	gchar *possible;
-	gchar temp;
-
-	/* replace some easily confused chars */
-	for (i=0; i<len; i++) {
-		temp = cmd[i];
-		if (temp == 'i') {
-			possible = g_strdup (cmd);
-			possible[i] = 'e';
-			g_ptr_array_add (array, possible);
-		}
-		if (temp == 'e') {
-			possible = g_strdup (cmd);
-			possible[i] = 'i';
-			g_ptr_array_add (array, possible);
-		}
-		if (temp == 'i') {
-			possible = g_strdup (cmd);
-			possible[i] = 'o';
-			g_ptr_array_add (array, possible);
-		}
-		if (temp == 'c') {
-			possible = g_strdup (cmd);
-			possible[i] = 's';
-			g_ptr_array_add (array, possible);
-		}
-		if (temp == 's') {
-			possible = g_strdup (cmd);
-			possible[i] = 'c';
-			g_ptr_array_add (array, possible);
-		}
-		if (temp == 's') {
-			possible = g_strdup (cmd);
-			possible[i] = 'z';
-			g_ptr_array_add (array, possible);
-		}
-		if (temp == 'z') {
-			possible = g_strdup (cmd);
-			possible[i] = 's';
-			g_ptr_array_add (array, possible);
-		}
-		if (temp == 'k') {
-			possible = g_strdup (cmd);
-			possible[i] = 'c';
-			g_ptr_array_add (array, possible);
-		}
-		if (temp == 'c') {
-			possible = g_strdup (cmd);
-			possible[i] = 'k';
-			g_ptr_array_add (array, possible);
-		}
-	}
-}
-
-/**
- * pk_cnf_find_alternatives_truncate:
- *
- * Truncate first and last char, so lshall -> lshal
- **/
-static void
-pk_cnf_find_alternatives_truncate (const gchar *cmd, guint len, GPtrArray *array)
-{
-	guint i;
-	gchar *possible;
-
-	/* truncate last char */
-	possible = g_strdup (cmd);
-	possible[len-1] = '\0';
-	g_ptr_array_add (array, possible);
-
-	/* truncate first char */
-	possible = g_strdup (cmd);
-	for (i=0; i<len-1; i++)
-		possible[i] = possible[i+1];
-	possible[len-1] = '\0';
-	g_ptr_array_add (array, possible);
-}
-
-/**
- * pk_cnf_find_alternatives_remove_double:
- *
- * Remove double chars, e.g. gnome-power-manaager -> gnome-power-manager
- **/
-static void
-pk_cnf_find_alternatives_remove_double (const gchar *cmd, guint len, GPtrArray *array)
-{
-	guint i, j;
-	gchar *possible;
-
-	for (i=1; i<len; i++) {
-		if (cmd[i-1] == cmd[i]) {
-			possible = g_strdup (cmd);
-			for (j=i; j<len; j++)
-				possible[j] = possible[j+1];
-			possible[len-1] = '\0';
-			g_ptr_array_add (array, possible);
-		}
-	}
-}
-
-/**
- * pk_cnf_find_alternatives_locale:
- *
- * Fix British spellings, e.g. colourdiff -> colordiff
- **/
-static void
-pk_cnf_find_alternatives_locale (const gchar *cmd, guint len, GPtrArray *array)
-{
-	guint i, j;
-	gchar *possible;
-
-	for (i=1; i<len; i++) {
-		if (cmd[i-1] == 'o' && cmd[i] == 'u') {
-			possible = g_strdup (cmd);
-			for (j=i; j<len; j++)
-				possible[j] = possible[j+1];
-			possible[len-1] = '\0';
-			g_ptr_array_add (array, possible);
-		}
-	}
-}
-
-/**
- * pk_cnf_find_alternatives_case:
- *
- * Remove double chars, e.g. Lshal -> lshal
- **/
-static void
-pk_cnf_find_alternatives_case (const gchar *cmd, guint len, GPtrArray *array)
-{
-	guint i;
-	gchar *possible;
-	gchar temp;
-
-	for (i=0; i<len; i++) {
-		temp = g_ascii_tolower (cmd[i]);
-		if (temp != cmd[i]) {
-			possible = g_strdup (cmd);
-			possible[i] = temp;
-			g_ptr_array_add (array, possible);
-		}
-		temp = g_ascii_toupper (cmd[i]);
-		if (temp != cmd[i]) {
-			possible = g_strdup (cmd);
-			possible[i] = temp;
-			g_ptr_array_add (array, possible);
-		}
-	}
-
-	/* all lower */
-	possible = g_strdup (cmd);
-	for (i=0; i<len; i++)
-		possible[i] = g_ascii_tolower (cmd[i]);
-	if (strcmp (possible, cmd) != 0)
-		g_ptr_array_add (array, possible);
-	else
-		g_free (possible);
-
-	/* all upper */
-	possible = g_strdup (cmd);
-	for (i=0; i<len; i++)
-		possible[i] = g_ascii_toupper (cmd[i]);
-	if (strcmp (possible, cmd) != 0)
-		g_ptr_array_add (array, possible);
-	else
-		g_free (possible);
-}
-
-/**
- * pk_cnf_find_alternatives:
- *
- * Generate a list of commands it might be
- **/
-static GPtrArray *
-pk_cnf_find_alternatives (const gchar *cmd, guint len)
-{
-	GPtrArray *array;
-	GPtrArray *possible;
-	GPtrArray *unique;
-	const gchar *cmdt;
-	const gchar *cmdt2;
-	guint i, j;
-	gchar buffer_bin[PK_MAX_PATH_LEN+1];
-	gchar buffer_sbin[PK_MAX_PATH_LEN+1];
-	gboolean ret;
-
-	array = g_ptr_array_new ();
-	possible = g_ptr_array_new ();
-	unique = g_ptr_array_new ();
-	pk_cnf_find_alternatives_swizzle (cmd, len, possible);
-	pk_cnf_find_alternatives_replace (cmd, len, possible);
-	if (len > 3)
-		pk_cnf_find_alternatives_truncate (cmd, len, possible);
-	pk_cnf_find_alternatives_remove_double (cmd, len, possible);
-	pk_cnf_find_alternatives_case (cmd, len, possible);
-	pk_cnf_find_alternatives_locale (cmd, len, possible);
-
-	/* remove duplicates using a helper array */
-	for (i=0; i<possible->len; i++) {
-		cmdt = g_ptr_array_index (possible, i);
-		ret = TRUE;
-		for (j=0; j<unique->len; j++) {
-			cmdt2 = g_ptr_array_index (unique, j);
-			if (strcmp (cmdt, cmdt2) == 0) {
-				ret = FALSE;
-				break;
-			}
-		}
-		/* only add if not duplicate */
-		if (ret)
-			g_ptr_array_add (unique, (gpointer) cmdt);
-	}
-
-	/* ITS4: ignore, source is constant size */
-	strncpy (buffer_bin, "/usr/bin/", PK_MAX_PATH_LEN);
-
-	/* ITS4: ignore, source is constant size */
-	strncpy (buffer_sbin, "/usr/sbin/", PK_MAX_PATH_LEN);
-
-	/* remove any that exist (fast path) */
-	for (i=0; i<unique->len; i++) {
-		cmdt = g_ptr_array_index (unique, i);
-
-		/* ITS4: ignore, size is checked */
-		strncpy (&buffer_bin[9], cmdt, PK_MAX_PATH_LEN-9);
-
-		/* ITS4: ignore, size is checked */
-		strncpy (&buffer_sbin[10], cmdt, PK_MAX_PATH_LEN-10);
-
-		/* does file exist in bindir (common case) */
-		ret = g_file_test (buffer_bin, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_EXECUTABLE);
-		if (ret) {
-			g_ptr_array_add (array, g_strdup (cmdt));
-			continue;
-		}
-
-		/* does file exist in sbindir */
-		ret = g_file_test (buffer_sbin, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_EXECUTABLE);
-		if (ret)
-			g_ptr_array_add (array, g_strdup (cmdt));
-	}
-
-	g_ptr_array_foreach (possible, (GFunc) g_free, NULL);
-	g_ptr_array_free (possible, TRUE);
-	g_ptr_array_free (unique, TRUE);
-	return array;
-}
-
-/**
- * pk_cnf_progress_cb:
- **/
-static void
-pk_cnf_progress_cb (PkProgress *progress, PkProgressType type, gpointer data)
-{
-	PkStatusEnum status;
-	const gchar *text = NULL;
-
-	/* status */
-	if (type != PK_PROGRESS_TYPE_STATUS)
-		return;
-
-	g_object_get (progress,
-		      "status", &status,
-		      NULL);
-
-	switch (status) {
-	case PK_STATUS_ENUM_DOWNLOAD_REPOSITORY:
-		/* TRANSLATORS: downloading repo data so we can search */
-		text = _("Downloading details about the software sources.");
-		break;
-	case PK_STATUS_ENUM_DOWNLOAD_FILELIST:
-		/* TRANSLATORS: downloading file lists so we can search */
-		text = _("Downloading filelists (this may take some time to complete).");
-		break;
-	case PK_STATUS_ENUM_WAITING_FOR_LOCK:
-		/* TRANSLATORS: waiting for native lock */
-		text = _("Waiting for package manager lock.");
-		break;
-	case PK_STATUS_ENUM_LOADING_CACHE:
-		/* TRANSLATORS: loading package cache so we can search */
-		text = _("Loading list of packages.");
-		break;
-	default:
-		/* no need to print */
-		text = NULL;
-	}
-
-	/* print to screen, still one line */
-	if (text != NULL)
-		g_print ("\n * %s.. ", text);
-}
-
-/**
- * pk_cnf_search_file:
- **/
-static gchar **
-pk_cnf_search_file (PkClient *client_, PkBitfield filter, const gchar *filename, GError **error)
-{
-	gchar **package_ids = NULL;
-	PkResults *results;
-	GPtrArray *array = NULL;
-	guint i;
-	const PkItemPackage *item;
-
-	/* get the list of possibles */
-	results = pk_client_search_file_sync (client_, filter, filename, cancellable,
-					      (PkProgressCallback) pk_cnf_progress_cb, NULL, error);
-	if (results == NULL)
-		goto out;
-
-	/* get the packages returned */
-	array = pk_results_get_package_array (results);
-	if (array == NULL) {
-		*error = g_error_new (1, 0, "did not get package struct for %s", filename);
-		goto out;
-	}
-
-	/* copy results into struct */
-	package_ids = g_new0 (gchar *, array->len+1);
-	for (i=0; i<array->len; i++) {
-		item = g_ptr_array_index (array, i);
-		package_ids[i] = g_strdup (item->package_id);
-	}
-out:
-	if (results != NULL)
-		g_object_unref (results);
-	if (array != NULL)
-		g_ptr_array_unref (array);
-	return package_ids;
-}
-
-/**
- * pk_cnf_find_available:
- *
- * Find software we could install
- **/
-static gboolean
-pk_cnf_find_available (GPtrArray *array, const gchar *prefix, const gchar *cmd)
-{
-	GError *error = NULL;
-	PkBitfield filters;
-	gboolean ret = FALSE;
-	guint i;
-	gchar **package_ids = NULL;
-	gchar *path = NULL;
-	gchar **parts;
-
-	/* do search */
-	path = g_build_filename (prefix, cmd, NULL);
-	egg_debug ("searching for %s", path);
-	filters = pk_bitfield_from_enums (PK_FILTER_ENUM_NOT_INSTALLED, PK_FILTER_ENUM_NEWEST, -1);
-	package_ids = pk_cnf_search_file (client, filters, path, &error);
-	if (package_ids == NULL) {
-		/* TRANSLATORS: we failed to find the package, this shouldn't happen */
-		egg_warning ("%s: %s", _("Failed to search for file"), error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* nothing found */
-	ret = (g_strv_length (package_ids) != 0);
-	if (!ret)
-		goto out;
-
-	/* add all package names */
-	for (i=0; package_ids[i] != NULL; i++) {
-		parts = pk_package_id_split (package_ids[i]);
-		g_ptr_array_add (array, g_strdup (parts[0]));
-		egg_debug ("name=%s", parts[0]);
-		g_strfreev (parts);
-	}
-out:
-	g_strfreev (package_ids);
-	g_free (path);
-	return ret;
-}
-
-/**
- * pk_cnf_get_policy_from_string:
- **/
-static PkCnfPolicy
-pk_cnf_get_policy_from_string (const gchar *policy_text)
-{
-	if (policy_text == NULL)
-		return PK_CNF_POLICY_UNKNOWN;
-	if (strcmp (policy_text, "run") == 0)
-		return PK_CNF_POLICY_RUN;
-	if (strcmp (policy_text, "ask") == 0)
-		return PK_CNF_POLICY_ASK;
-	if (strcmp (policy_text, "warn") == 0)
-		return PK_CNF_POLICY_WARN;
-	return PK_CNF_POLICY_UNKNOWN;
-}
-
-/**
- * pk_cnf_get_policy_from_file:
- **/
-static PkCnfPolicy
-pk_cnf_get_policy_from_file (GKeyFile *file, const gchar *key)
-{
-	PkCnfPolicy policy;
-	gchar *policy_text;
-	GError *error = NULL;
-
-	/* get from file */
-	policy_text = g_key_file_get_string (file, "CommandNotFound", key, &error);
-	if (policy_text == NULL) {
-		egg_warning ("failed to get key %s: %s", key, error->message);
-		g_error_free (error);
-	}
-
-	/* convert to enum */
-	policy = pk_cnf_get_policy_from_string (policy_text);
-	g_free (policy_text);
-	return policy;
-}
-
-/**
- * pk_cnf_get_config:
- **/
-static PkCnfPolicyConfig *
-pk_cnf_get_config (void)
-{
-	GKeyFile *file;
-	gchar *path;
-	gboolean ret;
-	GError *error = NULL;
-	PkCnfPolicyConfig *config;
-
-	/* create */
-	config = g_new0 (PkCnfPolicyConfig, 1);
-
-	/* set defaults if the conf file is not found */
-	config->single_match = PK_CNF_POLICY_UNKNOWN;
-	config->multiple_match = PK_CNF_POLICY_UNKNOWN;
-	config->single_install = PK_CNF_POLICY_UNKNOWN;
-	config->multiple_install = PK_CNF_POLICY_UNKNOWN;
-	config->software_source_search = FALSE;
-	config->locations = NULL;
-
-	/* load file */
-	file = g_key_file_new ();
-	path = g_build_filename (SYSCONFDIR, "PackageKit", "CommandNotFound.conf", NULL);
-	ret = g_key_file_load_from_file (file, path, G_KEY_FILE_NONE, &error);
-	if (!ret) {
-		egg_warning ("failed to open policy: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* get data */
-	config->single_match = pk_cnf_get_policy_from_file (file, "SingleMatch");
-	config->multiple_match = pk_cnf_get_policy_from_file (file, "MultipleMatch");
-	config->single_install = pk_cnf_get_policy_from_file (file, "SingleInstall");
-	config->multiple_install = pk_cnf_get_policy_from_file (file, "MultipleInstall");
-	config->software_source_search = g_key_file_get_boolean (file, "CommandNotFound", "SoftwareSourceSearch", NULL);
-	config->locations = g_key_file_get_string_list (file, "CommandNotFound", "SearchLocations", NULL, NULL);
-
-	/* fallback */
-	if (config->locations == NULL) {
-		egg_warning ("not found SearchLocations, using fallback");
-		config->locations = g_strsplit ("/usr/bin;/usr/sbin", ";", -1);
-	}
-out:
-	g_free (path);
-	g_key_file_free (file);
-	return config;
-}
-
-/**
- * pk_cnf_spawn_command:
- **/
-static gboolean
-pk_cnf_spawn_command (const gchar *exec)
-{
-	gboolean ret;
-	GError *error = NULL;
-	ret = g_spawn_command_line_sync (exec, NULL, NULL, NULL, &error);
-	if (!ret) {
-		/* TRANSLATORS: we failed to launch the executable, the error follows */
-		g_print ("%s '%s': %s", _("Failed to launch:"), exec, error->message);
-		g_error_free (error);
-	}
-	return ret;
-}
-
-/**
- * pk_cnf_sigint_handler:
- **/
-static void
-pk_cnf_sigint_handler (int sig)
-{
-	egg_debug ("Handling SIGINT");
-
-	/* restore default ASAP, as the cancel might hang */
-	signal (SIGINT, SIG_DFL);
-
-	/* hopefully, cancel client */
-	g_cancellable_cancel (cancellable);
-
-	/* kill ourselves */
-	egg_debug ("Retrying SIGINT");
-	kill (getpid (), SIGINT);
-}
-
-/**
- * main:
- **/
-int
-main (int argc, char *argv[])
-{
-	gboolean ret;
-	gboolean verbose = FALSE;
-	GOptionContext *context;
-	GPtrArray *array = NULL;
-	GPtrArray *available = NULL;
-	PkCnfPolicyConfig *config = NULL;
-	guint i;
-	guint len;
-	gchar *text;
-	const gchar *possible;
-
-	const GOptionEntry options[] = {
-		{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
-		  _("Show extra debugging information"), 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);
-	dbus_g_thread_init ();
-	g_type_init ();
-
-	context = g_option_context_new (NULL);
-	/* TRANSLATORS: tool that gets called when the command is not found */
-	g_option_context_set_summary (context, _("PackageKit Command Not Found"));
-	g_option_context_add_main_entries (context, options, NULL);
-	g_option_context_parse (context, &argc, &argv, NULL);
-	g_option_context_free (context);
-
-	egg_debug_init (verbose);
-
-	/* no input */
-	if (argv[1] == NULL)
-		goto out;
-
-	/* do stuff on ctrl-c */
-	signal (SIGINT, pk_cnf_sigint_handler);
-
-	/* get policy config */
-	config = pk_cnf_get_config ();
-	client = pk_client_new ();
-	cancellable = g_cancellable_new ();
-
-	/* get length */
-	len = egg_strlen (argv[1], 1024);
-	if (len < 1)
-		goto out;
-
-	/* generate swizzles */
-	array = pk_cnf_find_alternatives (argv[1], len);
-
-	/* TRANSLATORS: the prefix of all the output telling the user why it's not executing */
-	g_print ("%s ", _("Command not found."));
-
-	/* one exact possibility */
-	if (array->len == 1) {
-		possible = g_ptr_array_index (array, 0);
-		if (config->single_match == PK_CNF_POLICY_WARN) {
-			/* TRANSLATORS: tell the user what we think the command is */
-			g_print ("%s '%s'\n", _("Similar command is:"), possible);
-
-		/* run */
-		} else if (config->single_match == PK_CNF_POLICY_RUN) {
-			pk_cnf_spawn_command (possible);
-
-		/* ask */
-		} else if (config->single_match == PK_CNF_POLICY_ASK) {
-			/* TRANSLATORS: Ask the user if we should run the similar command */
-			text = g_strdup_printf ("%s %s", _("Run similar command:"), possible);
-			ret = pk_console_get_prompt (text, TRUE);
-			if (ret)
-				pk_cnf_spawn_command (possible);
-			g_free (text);
-		}
-		goto out;
-
-	/* multiple choice */
-	} else if (array->len > 1) {
-		if (config->multiple_match == PK_CNF_POLICY_WARN) {
-			/* TRANSLATORS: show the user a list of commands that they could have meant */
-			g_print ("%s:\n", _("Similar commands are:"));
-			for (i=0; i<array->len; i++) {
-				possible = g_ptr_array_index (array, i);
-				g_print ("'%s'\n", possible);
-			}
-
-		/* ask */
-		} else if (config->multiple_match == PK_CNF_POLICY_ASK) {
-			/* TRANSLATORS: show the user a list of commands we could run */
-			g_print ("%s:\n", _("Similar commands are:"));
-			for (i=0; i<array->len; i++) {
-				possible = g_ptr_array_index (array, i);
-				g_print ("%i\t'%s'\n", i+1, possible);
-			}
-
-			/* TRANSLATORS: ask the user to choose a file to run */
-			i = pk_console_get_number (_("Please choose a command to run"), array->len);
-
-			/* run command */
-			possible = g_ptr_array_index (array, i);
-			pk_cnf_spawn_command (possible);
-		}
-		goto out;
-
-	/* only search using PackageKit if configured to do so */
-	} else if (config->software_source_search) {
-		available = g_ptr_array_new ();
-		pk_cnf_find_available (available, "/usr/bin", argv[1]);
-		pk_cnf_find_available (available, "/usr/sbin", argv[1]);
-		pk_cnf_find_available (available, "/bin", argv[1]);
-		pk_cnf_find_available (available, "/sbin", argv[1]);
-		if (available->len == 1) {
-			possible = g_ptr_array_index (available, 0);
-			if (config->single_install == PK_CNF_POLICY_WARN) {
-				/* TRANSLATORS: tell the user what package provides the command */
-				g_print ("%s '%s'\n", _("The package providing this file is:"), possible);
-
-			/* ask */
-			} else if (config->single_install == PK_CNF_POLICY_ASK) {
-				/* TRANSLATORS: as the user if we want to install a package to provide the command */
-				text = g_strdup_printf (_("Install package '%s' to provide command '%s'?"), possible, argv[1]);
-				ret = pk_console_get_prompt (text, FALSE);
-				g_free (text);
-				if (ret) {
-					text = g_strdup_printf ("pkcon install %s", possible);
-					ret = pk_cnf_spawn_command (text);
-					if (ret)
-						pk_cnf_spawn_command (argv[1]);
-					g_free (text);
-				}
-
-			/* install */
-			} else if (config->single_install == PK_CNF_POLICY_INSTALL) {
-				text = g_strdup_printf ("pkcon install %s", possible);
-				pk_cnf_spawn_command (text);
-				g_free (text);
-			}
-			goto out;
-		} else if (available->len > 1) {
-			if (config->multiple_install == PK_CNF_POLICY_WARN) {
-				/* TRANSLATORS: Show the user a list of packages that provide this command */
-				g_print ("%s\n", _("Packages providing this file are:"));
-				for (i=0; i<available->len; i++) {
-					possible = g_ptr_array_index (available, i);
-					g_print ("'%s'\n", possible);
-				}
-
-			/* ask */
-			} else if (config->multiple_install == PK_CNF_POLICY_ASK) {
-				/* TRANSLATORS: Show the user a list of packages that they can install to provide this command */
-				g_print ("%s:\n", _("Suitable packages are:"));
-				for (i=0; i<available->len; i++) {
-					possible = g_ptr_array_index (available, i);
-					g_print ("%i\t'%s'\n", i+1, possible);
-				}
-
-				/* get selection */
-				/* TRANSLATORS: ask the user to choose a file to install */
-				i = pk_console_get_number (_("Please choose a package to install"), available->len);
-
-				/* run command */
-				possible = g_ptr_array_index (available, i);
-				text = g_strdup_printf ("pkcon install %s", possible);
-				ret = pk_cnf_spawn_command (text);
-				if (ret)
-					pk_cnf_spawn_command (argv[1]);
-				g_free (text);
-			}
-			goto out;
-		}
-	}
-
-	g_print ("\n");
-
-out:
-	g_object_unref (client);
-	g_object_unref (cancellable);
-	if (config != NULL) {
-		g_strfreev (config->locations);
-		g_free (config);
-	}
-	if (array != NULL) {
-		g_ptr_array_foreach (array, (GFunc) g_free, NULL);
-		g_ptr_array_free (array, TRUE);
-	}
-	if (available != NULL) {
-		g_ptr_array_foreach (available, (GFunc) g_free, NULL);
-		g_ptr_array_free (available, TRUE);
-	}
-
-	return 0;
-}
-
diff --git a/contrib/command-not-found/pk-command-not-found.c b/contrib/command-not-found/pk-command-not-found.c
index 77e4a40..9997d1e 100644
--- a/contrib/command-not-found/pk-command-not-found.c
+++ b/contrib/command-not-found/pk-command-not-found.c
@@ -28,13 +28,12 @@
 #include <signal.h>
 #include <glib/gi18n.h>
 #include <dbus/dbus-glib.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
+#include <packagekit-glib2/packagekit-private.h>
 
 #include "egg-debug.h"
 #include "egg-string.h"
 
-#include "pk-tools-common.h"
-
 #define PK_MAX_PATH_LEN 1023
 
 typedef enum {
@@ -55,6 +54,7 @@ typedef struct {
 } PkCnfPolicyConfig;
 
 static PkClient *client = NULL;
+static GCancellable *cancellable = NULL;
 
 /**
  * pk_cnf_find_alternatives_swizzle:
@@ -336,13 +336,22 @@ pk_cnf_find_alternatives (const gchar *cmd, guint len)
 }
 
 /**
- * pk_cnf_status_changed_cb:
+ * pk_cnf_progress_cb:
  **/
 static void
-pk_cnf_status_changed_cb (PkClient *client_, PkStatusEnum status, gpointer data)
+pk_cnf_progress_cb (PkProgress *progress, PkProgressType type, gpointer data)
 {
+	PkStatusEnum status;
 	const gchar *text = NULL;
 
+	/* status */
+	if (type != PK_PROGRESS_TYPE_STATUS)
+		return;
+
+	g_object_get (progress,
+		      "status", &status,
+		      NULL);
+
 	switch (status) {
 	case PK_STATUS_ENUM_DOWNLOAD_REPOSITORY:
 		/* TRANSLATORS: downloading repo data so we can search */
@@ -371,6 +380,45 @@ pk_cnf_status_changed_cb (PkClient *client_, PkStatusEnum status, gpointer data)
 }
 
 /**
+ * pk_cnf_search_file:
+ **/
+static gchar **
+pk_cnf_search_file (PkClient *client_, PkBitfield filter, const gchar *filename, GError **error)
+{
+	gchar **package_ids = NULL;
+	PkResults *results;
+	GPtrArray *array = NULL;
+	guint i;
+	const PkItemPackage *item;
+
+	/* get the list of possibles */
+	results = pk_client_search_file_sync (client_, filter, filename, cancellable,
+					      (PkProgressCallback) pk_cnf_progress_cb, NULL, error);
+	if (results == NULL)
+		goto out;
+
+	/* get the packages returned */
+	array = pk_results_get_package_array (results);
+	if (array == NULL) {
+		*error = g_error_new (1, 0, "did not get package struct for %s", filename);
+		goto out;
+	}
+
+	/* copy results into struct */
+	package_ids = g_new0 (gchar *, array->len+1);
+	for (i=0; i<array->len; i++) {
+		item = g_ptr_array_index (array, i);
+		package_ids[i] = g_strdup (item->package_id);
+	}
+out:
+	if (results != NULL)
+		g_object_unref (results);
+	if (array != NULL)
+		g_ptr_array_unref (array);
+	return package_ids;
+}
+
+/**
  * pk_cnf_find_available:
  *
  * Find software we could install
@@ -378,76 +426,41 @@ pk_cnf_status_changed_cb (PkClient *client_, PkStatusEnum status, gpointer data)
 static gboolean
 pk_cnf_find_available (GPtrArray *array, const gchar *prefix, const gchar *cmd)
 {
-	PkControl *control;
 	GError *error = NULL;
-	PkBitfield roles;
 	PkBitfield filters;
 	gboolean ret = FALSE;
-	guint i, len;
-	PkPackageList *list = NULL;
-	const PkPackageObj *obj;
+	guint i;
+	gchar **package_ids = NULL;
 	gchar *path = NULL;
-
-	control = pk_control_new ();
-	client = pk_client_new ();
-	pk_client_set_synchronous (client, TRUE, NULL);
-	pk_client_set_use_buffer (client, TRUE, NULL);
-	g_signal_connect (client, "status-changed",
-			  G_CALLBACK (pk_cnf_status_changed_cb), NULL);
-	g_object_add_weak_pointer (G_OBJECT (client), (gpointer) &client);
-
-	/* get what we support */
-	roles = pk_control_get_actions (control, &error);
-	if (roles == 0) {
-		egg_warning ("Failed to contact PackageKit: %s", error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* can we search the repos */
-	if (!pk_bitfield_contain (roles, PK_ROLE_ENUM_SEARCH_FILE)) {
-		egg_warning ("cannot search file");
-		goto out;
-	}
+	gchar **parts;
 
 	/* do search */
 	path = g_build_filename (prefix, cmd, NULL);
 	egg_debug ("searching for %s", path);
 	filters = pk_bitfield_from_enums (PK_FILTER_ENUM_NOT_INSTALLED, PK_FILTER_ENUM_NEWEST, -1);
-	ret = pk_client_search_file (client, filters, path, &error);
-	if (!ret) {
+	package_ids = pk_cnf_search_file (client, filters, path, &error);
+	if (package_ids == NULL) {
 		/* TRANSLATORS: we failed to find the package, this shouldn't happen */
 		egg_warning ("%s: %s", _("Failed to search for file"), error->message);
 		g_error_free (error);
 		goto out;
 	}
 
-	/* get package list */
-	list = pk_client_get_package_list (client);
-	if (list == NULL) {
-		egg_warning ("failed to get list");
-		ret = FALSE;
-		goto out;
-	}
-
 	/* nothing found */
-	len = PK_OBJ_LIST(list)->len;
-	if (len == 0)
+	ret = (g_strv_length (package_ids) != 0);
+	if (!ret)
 		goto out;
 
 	/* add all package names */
-	for (i=0; i<len; i++) {
-		obj = pk_package_list_get_obj (list, i);
-		g_ptr_array_add (array, g_strdup (obj->id->name));
-		egg_warning ("obj->id->name=%s", obj->id->name);
+	for (i=0; package_ids[i] != NULL; i++) {
+		parts = pk_package_id_split (package_ids[i]);
+		g_ptr_array_add (array, g_strdup (parts[0]));
+		egg_debug ("name=%s", parts[0]);
+		g_strfreev (parts);
 	}
 out:
-	if (list != NULL)
-		g_object_unref (list);
-	g_object_unref (control);
-	g_object_unref (client);
+	g_strfreev (package_ids);
 	g_free (path);
-
 	return ret;
 }
 
@@ -566,29 +579,14 @@ pk_cnf_spawn_command (const gchar *exec)
 static void
 pk_cnf_sigint_handler (int sig)
 {
-	PkRoleEnum role;
-	gboolean ret;
-	GError *error = NULL;
 	egg_debug ("Handling SIGINT");
 
 	/* restore default ASAP, as the cancel might hang */
 	signal (SIGINT, SIG_DFL);
 
-	/* nothing in progress */
-	if (client == NULL)
-		goto out;
-
 	/* hopefully, cancel client */
-	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 client: %s", error->message);
-			g_error_free (error);
-		}
-	}
+	g_cancellable_cancel (cancellable);
 
-out:
 	/* kill ourselves */
 	egg_debug ("Retrying SIGINT");
 	kill (getpid (), SIGINT);
@@ -645,6 +643,8 @@ main (int argc, char *argv[])
 
 	/* get policy config */
 	config = pk_cnf_get_config ();
+	client = pk_client_new ();
+	cancellable = g_cancellable_new ();
 
 	/* get length */
 	len = egg_strlen (argv[1], 1024);
@@ -778,6 +778,8 @@ main (int argc, char *argv[])
 	g_print ("\n");
 
 out:
+	g_object_unref (client);
+	g_object_unref (cancellable);
 	if (config != NULL) {
 		g_strfreev (config->locations);
 		g_free (config);
diff --git a/contrib/debuginfo-install/Makefile.am b/contrib/debuginfo-install/Makefile.am
index 0d41fd9..d8b6ff4 100644
--- a/contrib/debuginfo-install/Makefile.am
+++ b/contrib/debuginfo-install/Makefile.am
@@ -30,8 +30,6 @@ INCLUDES =						\
 
 bin_PROGRAMS = pk-debuginfo-install
 
-if PK_BUILD_GLIB2
-
 PK_GLIB2_LIBS =						\
 	$(top_builddir)/lib/packagekit-glib2/libpackagekit-glib2.la	\
 	$(top_builddir)/lib/packagekit-glib2/libpackagekitprivate.a	\
@@ -40,37 +38,15 @@ PK_GLIB2_LIBS =						\
 pk_debuginfo_install_SOURCES =				\
 	egg-debug.c					\
 	egg-debug.h					\
-	pk-debuginfo-install-test.c			\
-	$(NULL)
-
-pk_debuginfo_install_LDADD =				\
-	$(GLIB_LIBS)					\
-	$(DBUS_LIBS)					\
-	$(PK_GLIB2_LIBS)				\
-	$(NULL)
-
-else
-
-PK_GLIB_LIBS =						\
-	$(top_builddir)/lib/packagekit-glib/libpackagekit-glib.la	\
-	$(NULL)
-
-pk_debuginfo_install_SOURCES =				\
-	egg-debug.c					\
-	egg-debug.h					\
 	pk-debuginfo-install.c				\
-	pk-progress-bar.c				\
-	pk-progress-bar.h				\
 	$(NULL)
 
 pk_debuginfo_install_LDADD =				\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
-	$(PK_GLIB_LIBS)					\
+	$(PK_GLIB2_LIBS)				\
 	$(NULL)
 
-endif
-
 pk_debuginfo_install_CFLAGS =				\
 	$(WARNINGFLAGS_C)				\
 	$(NULL)
diff --git a/contrib/debuginfo-install/pk-debuginfo-install-test.c b/contrib/debuginfo-install/pk-debuginfo-install-test.c
deleted file mode 100644
index c07ec65..0000000
--- a/contrib/debuginfo-install/pk-debuginfo-install-test.c
+++ /dev/null
@@ -1,933 +0,0 @@
-/* -*- 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.
- */
-
-/* Test with ./pk-debuginfo-install bzip2-libs-1.0.5-5.fc11.i586 glib2-2.20.3-1.fc11.i586 */
-
-#include "config.h"
-
-#include <string.h>
-#include <locale.h>
-#include <glib/gi18n.h>
-#include <packagekit-glib2/packagekit.h>
-#include <packagekit-glib2/packagekit-private.h>
-
-#include "egg-debug.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_DEBUGINFO_EXIT_CODE_FAILED				1
-#define PK_DEBUGINFO_EXIT_CODE_FAILED_TO_GET_REPOLIST		3
-#define PK_DEBUGINFO_EXIT_CODE_FAILED_TO_ENABLE			4
-#define PK_DEBUGINFO_EXIT_CODE_NOTHING_TO_DO			5
-#define PK_DEBUGINFO_EXIT_CODE_FAILED_TO_FIND_DEPS		6
-#define PK_DEBUGINFO_EXIT_CODE_FAILED_TO_INSTALL		7
-#define PK_DEBUGINFO_EXIT_CODE_FAILED_TO_DISABLE		8
-
-typedef struct {
-	GPtrArray		*enabled;
-	GPtrArray		*disabled;
-	PkClient		*client;
-	PkProgressBar		*progress_bar;
-} PkDebuginfoInstallPrivate;
-
-/**
- * pk_get_package_name_from_nevra:
- **/
-static gchar *
-pk_get_package_name_from_nevra (const gchar *nevra)
-{
-	gchar *name = NULL;
-	gchar **split;
-	guint len;
-
-	/* hal-info-data-version-arch */
-	split = g_strsplit (nevra, "-", -1);
-	len = g_strv_length (split);
-
-	/* just the package name specified */
-	if (len == 1) {
-		name = g_strdup (split[0]);
-		goto out;
-	}
-
-	/* ignore the version */
-	g_free (split[len-2]);
-	split[len-2] = NULL;
-
-	/* ignore the arch */
-	g_free (split[len-1]);
-	split[len-1] = NULL;
-
-	/* join up name elements */
-	name = g_strjoinv ("-", split);
-out:
-	g_strfreev (split); 
-	return name;
-}
-
-/**
- * pk_debuginfo_install_in_array:
- **/
-static gboolean
-pk_debuginfo_install_in_array (GPtrArray *array, const gchar *text)
-{
-	guint i;
-	gboolean ret = FALSE;
-	const gchar *possible;
-
-	/* compare each */
-	for (i=0; i<array->len; i++) {
-		possible = g_ptr_array_index (array, i);
-		if (g_strcmp0 (text, possible) == 0) {
-			ret = TRUE;
-			break;
-		}
-	}
-	return ret;
-}
-
-/**
- * pk_debuginfo_install_enable_repos:
- **/
-static gboolean
-pk_debuginfo_install_enable_repos (PkDebuginfoInstallPrivate *priv, GPtrArray *array, gboolean enable, GError **error)
-{
-	guint i;
-	gboolean ret = TRUE;
-	PkResults *results = NULL;
-	const gchar *repo_id;
-	GError *error_local = NULL;
-	PkExitEnum exit_enum;
-
-	/* enable all debuginfo repos we found */
-	for (i=0; i<array->len; i++) {
-		repo_id = g_ptr_array_index (array, i);
-
-		/* enable this repo */
-		results = pk_client_repo_enable_sync (priv->client, repo_id, enable, NULL, NULL, NULL, &error_local);
-		if (results == NULL) {
-			*error = g_error_new (1, 0, "failed to enable %s: %s", repo_id, error_local->message);
-			g_error_free (error_local);
-			ret = FALSE;
-			goto out;
-		}
-
-		/* test exit code */
-		exit_enum = pk_results_get_exit_code (results);
-		if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
-			*error = g_error_new (1, 0, "failed to resolve: %s", pk_exit_enum_to_text (exit_enum));
-			g_error_free (error_local);
-			goto out;
-		}
-
-		egg_debug ("setting %s: %i", repo_id, enable);
-		g_object_unref (results);
-	}
-out:
-	return ret;
-}
-
-/**
- * pk_debuginfo_install_progress_cb:
- **/
-static void
-pk_debuginfo_install_progress_cb (PkProgress *progress, PkProgressType type, PkDebuginfoInstallPrivate *priv)
-{
-	gint percentage;
-	gchar *package_id = NULL;
-
-	if (type == PK_PROGRESS_TYPE_PERCENTAGE) {
-		g_object_get (progress, "percentage", &percentage, NULL);
-		pk_progress_bar_set_percentage (priv->progress_bar, percentage);
-		goto out;
-	}
-	if (type == PK_PROGRESS_TYPE_PACKAGE_ID) {
-		g_object_get (progress, "package-id", &package_id, NULL);
-		egg_debug ("now downloading %s", package_id);
-		goto out;
-	}
-out:
-	g_free (package_id);
-}
-
-/**
- * pk_debuginfo_install_packages_install:
- **/
-static gboolean
-pk_debuginfo_install_packages_install (PkDebuginfoInstallPrivate *priv, GPtrArray *array, GError **error)
-{
-	gboolean ret = TRUE;
-	PkResults *results = NULL;
-	gchar **package_ids;
-	GError *error_local = NULL;
-	PkExitEnum exit_enum;
-
-	/* mush back into a char** */
-	package_ids = pk_ptr_array_to_strv (array);
-
-	/* TRANSLATORS: we are starting to install the packages */
-	pk_progress_bar_start (priv->progress_bar, _("Starting install"));
-
-	/* enable this repo */
-	results = pk_task_install_packages_sync (PK_TASK(priv->client), package_ids, NULL,
-						 (PkProgressCallback) pk_debuginfo_install_progress_cb, priv, &error_local);
-	if (results == NULL) {
-		*error = g_error_new (1, 0, "failed to install packages: %s", error_local->message);
-		g_error_free (error_local);
-		ret = FALSE;
-		goto out;
-	}
-
-	/* test exit code */
-	exit_enum = pk_results_get_exit_code (results);
-	if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
-		*error = g_error_new (1, 0, "failed to resolve: %s", pk_exit_enum_to_text (exit_enum));
-		g_error_free (error_local);
-		ret = FALSE;
-		goto out;
-	}
-
-	/* end progressbar output */
-	pk_progress_bar_end (priv->progress_bar);
-out:
-	if (results != NULL)
-		g_object_unref (results);
-	g_strfreev (package_ids);
-	return ret;
-}
-
-/**
- * pk_debuginfo_install_resolve_name_to_id:
- **/
-static gchar *
-pk_debuginfo_install_resolve_name_to_id (PkDebuginfoInstallPrivate *priv, const gchar *package_name, GError **error)
-{
-	PkResults *results = NULL;
-	const PkItemPackage *item;
-	gchar *package_id = NULL;
-	GPtrArray *list = NULL;
-	GError *error_local = NULL;
-	gchar **names;
-	PkExitEnum exit_enum;
-
-	/* resolve takes a char** */
-	names = g_strsplit (package_name, ";", -1);
-
-	/* resolve */
-	results = pk_client_resolve_sync (priv->client, pk_bitfield_from_enums (PK_FILTER_ENUM_NEWEST, -1), names, NULL, NULL, NULL, &error_local);
-	if (results == NULL) {
-		*error = g_error_new (1, 0, "failed to resolve: %s", error_local->message);
-		g_error_free (error_local);
-		goto out;
-	}
-
-	/* test exit code */
-	exit_enum = pk_results_get_exit_code (results);
-	if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
-		*error = g_error_new (1, 0, "failed to resolve: %s", pk_exit_enum_to_text (exit_enum));
-		g_error_free (error_local);
-		goto out;
-	}
-
-	/* check we only got one match */
-	list = pk_results_get_package_array (results);
-	if (list->len == 0) {
-		*error = g_error_new (1, 0, "no package %s found", package_name);
-		goto out;
-	}
-	if (list->len > 1) {
-		*error = g_error_new (1, 0, "more than one package found for %s", package_name);
-		goto out;
-	}
-
-	/* get the package id */
-	item = g_ptr_array_index (list, 0);
-	package_id = g_strdup (item->package_id);
-out:
-	if (results != NULL)
-		g_object_unref (results);
-	if (list != NULL)
-		g_ptr_array_unref (list);
-	g_strfreev (names);
-	return package_id;
-}
-
-/**
- * pk_debuginfo_install_remove_suffix:
- **/
-static gboolean
-pk_debuginfo_install_remove_suffix (gchar *name, const gchar *suffix)
-{
-	gboolean ret = FALSE;
-	guint slen, len;
-
-	if (!g_str_has_suffix (name, suffix))
-		goto out;
-
-	/* get lengths */
-	len = strlen (name);
-	slen = strlen (suffix);
-
-	/* same string */
-	if (len == slen)
-		goto out;
-
-	/* truncate */
-	name[len-slen] = '\0';
-	ret = TRUE;
-out:
-	return ret;
-}
-
-/**
- * pk_debuginfo_install_print_array:
- **/
-static void
-pk_debuginfo_install_print_array (GPtrArray *array)
-{
-	guint i;
-	const gchar *package_id;
-	gchar **split;
-
-	for (i=0; i<array->len; i++) {
-		package_id = g_ptr_array_index (array, i);
-		split = pk_package_id_split (package_id);
-		g_print ("%i\t%s-%s(%s)\t%s\n", i+1, split[0], split[1], split[2], split[3]);
-		g_strfreev (split);
-	}
-}
-
-/**
- * pk_debuginfo_install_name_to_debuginfo:
- **/
-static gchar *
-pk_debuginfo_install_name_to_debuginfo (const gchar *name)
-{
-	gchar *name_debuginfo = NULL;
-	gchar *name_tmp = NULL;
-
-	/* nothing */
-	if (name == NULL)
-		goto out;
-
-	name_tmp = g_strdup (name);
-
-	/* remove suffix */
-	pk_debuginfo_install_remove_suffix (name_tmp, "-libs");
-
-	/* append -debuginfo */
-	name_debuginfo = g_strjoin ("-", name_tmp, "debuginfo", NULL);
-out:
-	g_free (name_tmp);
-	return name_debuginfo;
-}
-
-/**
- * pk_debuginfo_install_add_deps:
- **/
-static gboolean
-pk_debuginfo_install_add_deps (PkDebuginfoInstallPrivate *priv, GPtrArray *packages_search, GPtrArray *packages_results, GError **error)
-{
-	gboolean ret = TRUE;
-	PkResults *results = NULL;
-	const PkItemPackage *item;
-	gchar *package_id = NULL;
-	GPtrArray *list = NULL;
-	GError *error_local = NULL;
-	gchar **package_ids = NULL;
-	gchar *name_debuginfo;
-	guint i;
-	gchar **split;
-	PkExitEnum exit_enum;
-
-	/* get depends for them all, not adding dup's */
-	package_ids = pk_ptr_array_to_strv (packages_search);
-	results = pk_client_get_depends_sync (priv->client, PK_FILTER_ENUM_NONE, package_ids, TRUE, NULL, NULL, NULL, &error_local);
-	if (results == NULL) {
-		*error = g_error_new (1, 0, "failed to get_depends: %s", error_local->message);
-		g_error_free (error_local);
-		ret = FALSE;
-		goto out;
-	}
-
-	/* test exit code */
-	exit_enum = pk_results_get_exit_code (results);
-	if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
-		*error = g_error_new (1, 0, "failed to resolve: %s", pk_exit_enum_to_text (exit_enum));
-		g_error_free (error_local);
-		ret = FALSE;
-		goto out;
-	}
-
-	/* add dependant packages */
-	list = pk_results_get_package_array (results);
-	for (i=0; i<list->len; i++) {
-		item = g_ptr_array_index (list, 0);
-		split = pk_package_id_split (item->package_id);
-		/* add -debuginfo */
-		name_debuginfo = pk_debuginfo_install_name_to_debuginfo (split[0]);
-		g_strfreev (split);
-
-		/* resolve name */
-		egg_debug ("resolving: %s", name_debuginfo);
-		package_id = pk_debuginfo_install_resolve_name_to_id (priv, name_debuginfo, &error_local);
-		if (package_id == NULL) {
-			/* TRANSLATORS: we couldn't find the package name, non-fatal */
-			g_print (_("Failed to find the package %s, or already installed: %s"), name_debuginfo, error_local->message);
-			g_print ("\n");
-			g_error_free (error_local);
-			/* don't quit, this is non-fatal */
-			error = NULL;
-		}
-
-		/* add to array to install */
-		if (package_id != NULL && !g_str_has_suffix (package_id, "installed")) {
-			egg_debug ("going to try to install (for deps): %s", package_id);
-			g_ptr_array_add (packages_results, g_strdup (package_id));
-		}
-
-		g_free (package_id);
-		g_free (name_debuginfo);
-	}
-out:
-	if (results != NULL)
-		g_object_unref (results);
-	if (list != NULL)
-		g_ptr_array_unref (list);
-	g_strfreev (package_ids);
-	return ret;
-}
-
-/**
- * pk_debuginfo_install_get_repo_list:
- **/
-static gboolean
-pk_debuginfo_install_get_repo_list (PkDebuginfoInstallPrivate *priv, GError **error)
-{
-	gboolean ret = FALSE;
-	PkResults *results = NULL;
-	PkExitEnum exit_enum;
-	guint i;
-	GPtrArray *array;
-	GError *error_local = NULL;
-	const PkItemRepoDetail *item;
-
-	/* get all repo details */
-	results = pk_client_get_repo_list_sync (priv->client, PK_FILTER_ENUM_NONE, NULL, NULL, NULL, &error_local);
-	if (results == NULL) {
-		*error = g_error_new (1, 0, "failed to get repo list: %s", error_local->message);
-		g_error_free (error_local);
-		goto out;
-	}
-
-	/* test exit code */
-	exit_enum = pk_results_get_exit_code (results);
-	if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
-		g_print ("failed to get repo list: %s", pk_exit_enum_to_text (exit_enum));
-		goto out;
-	}
-
-	/* get results */
-	array = pk_results_get_repo_detail_array (results);
-	for (i=0; i<array->len; i++) {
-		item = g_ptr_array_index (array, i);
-		if (item->enabled)
-			g_ptr_array_add (priv->enabled, g_strdup (item->repo_id));
-		else
-			g_ptr_array_add (priv->disabled, g_strdup (item->repo_id));
-	}
-	ret = TRUE;
-out:
-	if (results != NULL)
-		g_object_unref (results);
-	return ret;
-}
-
-/**
- * main:
- **/
-int
-main (int argc, char *argv[])
-{
-	gboolean ret;
-	GError *error = NULL;
-	GPtrArray *added_repos = NULL;
-	GPtrArray *package_ids_recognised = NULL;
-	GPtrArray *package_ids_to_install = NULL;
-	guint i;
-	guint retval = 0;
-	gchar *package_id;
-	gchar *name;
-	gchar *name_debuginfo;
-	gboolean verbose = FALSE;
-	gboolean simulate = FALSE;
-	gboolean no_depends = FALSE;
-	gboolean quiet = FALSE;
-	GOptionContext *context;
-	const gchar *repo_id;
-	gchar *repo_id_debuginfo;
-	PkDebuginfoInstallPrivate *priv = NULL;
-	guint step = 1;
-
-	const GOptionEntry options[] = {
-		{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
-		  _("Show extra debugging information"), NULL },
-		{ "simulate", 's', 0, G_OPTION_ARG_NONE, &simulate,
-		   /* command line argument, simulate what would be done, but don't actually do it */
-		  _("Don't actually install any packages, only simulate what would be installed"), NULL },
-		{ "no-depends", 'n', 0, G_OPTION_ARG_NONE, &no_depends,
-		   /* command line argument, do we skip packages that depend on the ones specified */
-		  _("Do not install dependencies of the core packages"), NULL },
-		{ "quiet", 'q', 0, G_OPTION_ARG_NONE, &quiet,
-		   /* command line argument, do we operate quietly */
-		  _("Do not display information or progress"), 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 ();
-
-	context = g_option_context_new (NULL);
-	/* TRANSLATORS: tool that gets called when the command is not found */
-	g_option_context_set_summary (context, _("PackageKit Debuginfo Installer"));
-	g_option_context_add_main_entries (context, options, NULL);
-	g_option_context_parse (context, &argc, &argv, NULL);
-	g_option_context_free (context);
-
-	egg_debug_init (verbose);
-
-	/* no input */
-	if (argv[1] == NULL) {
-		/* should be vocal? */
-		if (!quiet) {
-			/* TRANSLATORS: the use needs to specify a list of package names on the command line */
-			g_print (_("ERROR: Specify package names to install."));
-			g_print ("\n");
-		}
-		/* return correct failure retval */
-		retval = PK_DEBUGINFO_EXIT_CODE_FAILED;
-		goto out;
-	}
-
-	/* clear private struct */
-	priv = g_new0 (PkDebuginfoInstallPrivate, 1);
-
-	/* store as strings */
-	priv->enabled = g_ptr_array_new ();
-	priv->disabled = g_ptr_array_new ();
-	added_repos = g_ptr_array_new ();
-	package_ids_to_install = g_ptr_array_new ();
-	package_ids_recognised = g_ptr_array_new ();
-
-	/* create #PkClient */
-	priv->client = PK_CLIENT(pk_task_text_new ());
-
-	/* use text progressbar */
-	priv->progress_bar = pk_progress_bar_new ();
-	pk_progress_bar_set_size (priv->progress_bar, 25);
-	pk_progress_bar_set_padding (priv->progress_bar, 60);
-
-	/* should be vocal? */
-	if (!quiet) {
-		/* starting this section */
-		g_print ("%i. ", step++);
-
-		/* TRANSLATORS: we are getting the list of repositories */
-		g_print (_("Getting sources list"));
-		g_print ("...");
-	}
-
-	/* get all enabled repos */
-	ret = pk_debuginfo_install_get_repo_list (priv, &error);
-	if (!ret) {
-		/* should be vocal? */
-		if (!quiet) {
-			/* TRANSLATORS: operation was not successful */
-			g_print ("%s ", _("FAILED."));
-		}
-		/* TRANSLATORS: we're failed to enable the sources, detailed error follows */
-		g_print ("Failed to enable sources list: %s", error->message);
-		g_print ("\n");
-		g_error_free (error);
-
-		/* return correct failure retval */
-		retval = PK_DEBUGINFO_EXIT_CODE_FAILED_TO_ENABLE;
-		goto out;
-	}
-
-	/* should be vocal? */
-	if (!quiet) {
-		/* TRANSLATORS: all completed 100% */
-		g_print ("%s ", _("OK."));
-
-		/* TRANSLATORS: tell the user what we found */
-		g_print (_("Found %i enabled and %i disabled sources."), priv->enabled->len, priv->disabled->len);
-		g_print ("\n");
-
-		/* starting this section */
-		g_print ("%i. ", step++);
-
-		/* TRANSLATORS: we're finding repositories that match out pattern */
-		g_print (_("Finding debugging sources"));
-		g_print ("...");
-	}
-
-	/* find all debuginfo repos for repos that are enabled */
-	for (i=0; i<priv->enabled->len; i++) {
-
-		/* is already a -debuginfo */
-		repo_id = g_ptr_array_index (priv->enabled, i);
-		if (g_str_has_suffix (repo_id, "-debuginfo")) {
-			egg_debug ("already enabled: %s", repo_id);
-			continue;
-		}
-
-		/* has a debuginfo repo */
-		repo_id_debuginfo = g_strjoin ("-", repo_id, "debuginfo", NULL);
-		ret = pk_debuginfo_install_in_array (priv->disabled, repo_id_debuginfo);
-		if (ret) {
-			/* add to list to change back at the end */
-			g_ptr_array_add (added_repos, g_strdup (repo_id_debuginfo));
-		} else {
-			egg_debug ("no debuginfo repo for %s", repo_id_debuginfo);
-		}
-
-		g_free (repo_id_debuginfo);
-	}
-
-	/* should be vocal? */
-	if (!quiet) {
-		/* TRANSLATORS: all completed 100% */
-		g_print ("%s ", _("OK."));
-
-		/* TRANSLATORS: tell the user what we found */
-		g_print (_("Found %i disabled debuginfo repos."), added_repos->len);
-		g_print ("\n");
-
-		/* starting this section */
-		g_print ("%i. ", step++);
-
-		/* TRANSLATORS: we're now enabling all the debug sources we found */
-		g_print (_("Enabling debugging sources"));
-		g_print ("...");
-	}
-
-	/* enable all debuginfo repos we found */
-	ret = pk_debuginfo_install_enable_repos (priv, added_repos, TRUE, &error);
-	if (!ret) {
-		/* should be vocal? */
-		if (!quiet) {
-			/* TRANSLATORS: operation was not successful */
-			g_print ("%s ", _("FAILED."));
-		}
-		/* TRANSLATORS: we're failed to enable the sources, detailed error follows */
-		g_print ("Failed to enable debugging sources: %s", error->message);
-		g_print ("\n");
-		g_error_free (error);
-
-		/* return correct failure retval */
-		retval = PK_DEBUGINFO_EXIT_CODE_FAILED_TO_ENABLE;
-		goto out;
-	}
-
-	/* should be vocal? */
-	if (!quiet) {
-		/* TRANSLATORS: all completed 100% */
-		g_print ("%s ", _("OK."));
-
-		/* TRANSLATORS: tell the user how many we enabled */
-		g_print (_("Enabled %i debugging sources."), added_repos->len);
-		g_print ("\n");
-
-		/* starting this section */
-		g_print ("%i. ", step++);
-
-		/* TRANSLATORS: we're now finding packages that match in all the repos */
-		g_print (_("Finding debugging packages"));
-		g_print ("...");
-	}
-
-	/* parse arguments and resolve to packages */
-	for (i=1; argv[i] != NULL; i++) {
-		name = pk_get_package_name_from_nevra (argv[i]);
-
-		/* resolve name */
-		package_id = pk_debuginfo_install_resolve_name_to_id (priv, name, &error);
-		if (package_id == NULL) {
-			/* TRANSLATORS: we couldn't find the package name, non-fatal */
-			g_print (_("Failed to find the package %s: %s"), name, error->message);
-			g_print ("\n");
-			g_error_free (error);
-			/* don't quit, this is non-fatal */
-			error = NULL;
-		}
-
-		/* add to array to install */
-		if (package_id != NULL) {
-			egg_debug ("going to try to install: %s", package_id);
-			g_ptr_array_add (package_ids_recognised, package_id);
-		} else {
-			goto not_found;
-		}
-
-		/* convert into basename */
-		name_debuginfo = pk_debuginfo_install_name_to_debuginfo (name);
-		egg_debug ("install %s [%s]", argv[i], name_debuginfo);
-
-		/* resolve name */
-		package_id = pk_debuginfo_install_resolve_name_to_id (priv, name_debuginfo, &error);
-		if (package_id == NULL) {
-			/* TRANSLATORS: we couldn't find the debuginfo package name, non-fatal */
-			g_print (_("Failed to find the debuginfo package %s: %s"), name_debuginfo, error->message);
-			g_print ("\n");
-			g_error_free (error);
-			/* don't quit, this is non-fatal */
-			error = NULL;
-		}
-
-		/* add to array to install */
-		if (package_id != NULL && !g_str_has_suffix (package_id, "installed")) {
-			egg_debug ("going to try to install: %s", package_id);
-			g_ptr_array_add (package_ids_to_install, g_strdup (package_id));
-		}
-
-		g_free (name_debuginfo);
-not_found:
-		g_free (package_id);
-		g_free (name);
-	}
-
-	/* no packages? */
-	if (package_ids_to_install->len == 0) {
-		/* should be vocal? */
-		if (!quiet) {
-			/* TRANSLATORS: operation was not successful */
-			g_print ("%s ", _("FAILED."));
-		}
-
-		/* TRANSLATORS: no debuginfo packages could be found to be installed */
-		g_print (_("Found no packages to install."));
-		g_print ("\n");
-
-		/* return correct failure retval */
-		retval = PK_DEBUGINFO_EXIT_CODE_NOTHING_TO_DO;
-		goto out;
-	}
-
-	/* should be vocal? */
-	if (!quiet) {
-		/* TRANSLATORS: all completed 100% */
-		g_print ("%s ", _("OK."));
-
-		/* TRANSLATORS: tell the user we found some packages, and then list them */
-		g_print (_("Found %i packages:"), package_ids_to_install->len);
-		g_print ("\n");
-	}
-
-	/* optional */
-	if (!no_depends) {
-
-		/* save for later logic */
-		i = package_ids_to_install->len;
-
-		/* should be vocal? */
-		if (!quiet) {
-			/* starting this section */
-			g_print ("%i. ", step++);
-
-			/* TRANSLATORS: tell the user we are searching for deps */
-			g_print (_("Finding packages that depend on these packages"));
-			g_print ("...");
-		}
-
-		ret = pk_debuginfo_install_add_deps (priv, package_ids_recognised, package_ids_to_install, &error);
-		if (!ret) {
-
-			/* should be vocal? */
-			if (!quiet) {
-				/* TRANSLATORS: operation was not successful */
-				g_print ("%s ", _("FAILED."));
-			}
-			/* TRANSLATORS: could not install, detailed error follows */
-			g_print (_("Could not find dependant packages: %s"), error->message);
-			g_print ("\n");
-			g_error_free (error);
-
-			/* return correct failure retval */
-			retval = PK_DEBUGINFO_EXIT_CODE_FAILED_TO_FIND_DEPS;
-			goto out;
-		}
-
-		/* should be vocal? */
-		if (!quiet) {
-			/* TRANSLATORS: all completed 100% */
-			g_print ("%s ", _("OK."));
-
-			if (i < package_ids_to_install->len) {
-				/* TRANSLATORS: tell the user we found some more packages */
-				g_print (_("Found %i extra packages."), package_ids_to_install->len - i);
-				g_print ("\n");
-			} else {
-				/* TRANSLATORS: tell the user we found some more packages */
-				g_print (_("No extra packages required."));
-				g_print ("\n");
-			}
-		}
-	}
-
-	/* should be vocal? */
-	if (!quiet) {
-		/* TRANSLATORS: tell the user we found some packages (and deps), and then list them */
-		g_print (_("Found %i packages to install:"), package_ids_to_install->len);
-		g_print ("\n");
-	}
-
-	/* print list */
-	if (!quiet)
-		pk_debuginfo_install_print_array (package_ids_to_install);
-
-	/* simulate mode for testing */
-	if (simulate) {
-		/* should be vocal? */
-		if (!quiet) {
-			/* TRANSLATORS: simulate mode is a testing mode where we quit before the action */
-			g_print (_("Not installing packages in simulate mode"));
-			g_print ("\n");
-		}
-		goto out;
-	}
-
-	/* should be vocal? */
-	if (!quiet) {
-		/* starting this section */
-		g_print ("%i. ", step++);
-
-		/* TRANSLATORS: we are now installing the debuginfo packages we found earlier */
-		g_print (_("Installing packages"));
-		g_print ("...\n");
-	}
-
-	/* install */
-	ret = pk_debuginfo_install_packages_install (priv, package_ids_to_install, &error);
-	if (!ret) {
-		/* should be vocal? */
-		if (!quiet) {
-			/* TRANSLATORS: operation was not successful */
-			g_print ("%s ", _("FAILED."));
-		}
-		/* TRANSLATORS: could not install, detailed error follows */
-		g_print (_("Could not install packages: %s"), error->message);
-		g_print ("\n");
-		g_error_free (error);
-
-		/* return correct failure retval */
-		retval = PK_DEBUGINFO_EXIT_CODE_FAILED_TO_INSTALL;
-		goto out;
-	}
-
-	/* should be vocal? */
-	if (!quiet) {
-		/* TRANSLATORS: all completed 100% */
-		g_print (_("OK."));
-		g_print ("\n");
-	}
-out:
-	if (package_ids_to_install != NULL) {
-		g_ptr_array_foreach (package_ids_to_install, (GFunc) g_free, NULL);
-		g_ptr_array_free (package_ids_to_install, TRUE);
-	}
-	if (package_ids_recognised != NULL) {
-		g_ptr_array_foreach (package_ids_recognised, (GFunc) g_free, NULL);
-		g_ptr_array_free (package_ids_recognised, TRUE);
-	}
-	if (added_repos != NULL) {
-
-		/* should be vocal? */
-		if (!quiet) {
-			/* starting this section */
-			g_print ("%i. ", step++);
-
-			/* TRANSLATORS: we are now disabling all debuginfo repos we previously enabled */
-			g_print (_("Disabling sources previously enabled"));
-			g_print ("...");
-		}
-		/* disable all debuginfo repos we previously enabled */
-		ret = pk_debuginfo_install_enable_repos (priv, added_repos, FALSE, &error);
-		if (!ret) {
-			/* should be vocal? */
-			if (!quiet) {
-				/* TRANSLATORS: operation was not successful */
-				g_print ("%s ", _("FAILED."));
-			}
-			/* TRANSLATORS: no debuginfo packages could be found to be installed, detailed error follows */
-			g_print (_("Could not disable the debugging sources: %s"), error->message);
-			g_print ("\n");
-			g_error_free (error);
-
-			/* return correct failure retval */
-			retval = PK_DEBUGINFO_EXIT_CODE_FAILED_TO_DISABLE;
-
-		} else {
-
-			/* should be vocal? */
-			if (!quiet) {
-				/* TRANSLATORS: all completed 100% */
-				g_print ("%s ", _("OK."));
-
-				/* TRANSLATORS: we disabled all the debugging repos that we enabled before */
-				g_print (_("Disabled %i debugging sources."), added_repos->len);
-				g_print ("\n");
-			}
-		}
-
-		g_ptr_array_foreach (added_repos, (GFunc) g_free, NULL);
-		g_ptr_array_free (added_repos, TRUE);
-	}
-	if (priv->enabled != NULL) {
-		g_ptr_array_foreach (priv->enabled, (GFunc) g_free, NULL);
-		g_ptr_array_free (priv->enabled, TRUE);
-	}
-	if (priv->disabled != NULL) {
-		g_ptr_array_foreach (priv->disabled, (GFunc) g_free, NULL);
-		g_ptr_array_free (priv->disabled, TRUE);
-	}
-	if (priv->client != NULL)
-		g_object_unref (priv->client);
-	if (priv->progress_bar != NULL)
-		g_object_unref (priv->progress_bar);
-	g_free (priv);
-	return retval;
-}
-
diff --git a/contrib/debuginfo-install/pk-debuginfo-install.c b/contrib/debuginfo-install/pk-debuginfo-install.c
index 81e6c19..c07ec65 100644
--- a/contrib/debuginfo-install/pk-debuginfo-install.c
+++ b/contrib/debuginfo-install/pk-debuginfo-install.c
@@ -26,9 +26,8 @@
 #include <string.h>
 #include <locale.h>
 #include <glib/gi18n.h>
-#include <packagekit-glib/packagekit.h>
-
-#include "pk-progress-bar.h"
+#include <packagekit-glib2/packagekit.h>
+#include <packagekit-glib2/packagekit-private.h>
 
 #include "egg-debug.h"
 
@@ -93,18 +92,6 @@ out:
 }
 
 /**
- * pk_debuginfo_install_repo_details_cb:
- **/
-static void
-pk_debuginfo_install_repo_details_cb (PkClient *client, const gchar *repo_id, const gchar *description, gboolean enabled, PkDebuginfoInstallPrivate *priv)
-{
-	if (enabled)
-		g_ptr_array_add (priv->enabled, g_strdup (repo_id));
-	else
-		g_ptr_array_add (priv->disabled, g_strdup (repo_id));
-}
-
-/**
  * pk_debuginfo_install_in_array:
  **/
 static gboolean
@@ -133,86 +120,104 @@ pk_debuginfo_install_enable_repos (PkDebuginfoInstallPrivate *priv, GPtrArray *a
 {
 	guint i;
 	gboolean ret = TRUE;
+	PkResults *results = NULL;
 	const gchar *repo_id;
 	GError *error_local = NULL;
+	PkExitEnum exit_enum;
 
 	/* enable all debuginfo repos we found */
 	for (i=0; i<array->len; i++) {
 		repo_id = g_ptr_array_index (array, i);
 
-		/* reset client */
-		ret = pk_client_reset (priv->client, &error_local);
-		if (!ret) {
-			*error = g_error_new (1, 0, "failed to reset: %s", error_local->message);
+		/* enable this repo */
+		results = pk_client_repo_enable_sync (priv->client, repo_id, enable, NULL, NULL, NULL, &error_local);
+		if (results == NULL) {
+			*error = g_error_new (1, 0, "failed to enable %s: %s", repo_id, error_local->message);
 			g_error_free (error_local);
+			ret = FALSE;
 			goto out;
 		}
 
-		/* enable this repo */
-		ret = pk_client_repo_enable (priv->client, repo_id, enable, &error_local);
-		if (!ret) {
-			*error = g_error_new (1, 0, "failed to enable %s: %s", repo_id, error_local->message);
+		/* test exit code */
+		exit_enum = pk_results_get_exit_code (results);
+		if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
+			*error = g_error_new (1, 0, "failed to resolve: %s", pk_exit_enum_to_text (exit_enum));
 			g_error_free (error_local);
 			goto out;
 		}
+
 		egg_debug ("setting %s: %i", repo_id, enable);
+		g_object_unref (results);
 	}
 out:
 	return ret;
 }
 
 /**
+ * pk_debuginfo_install_progress_cb:
+ **/
+static void
+pk_debuginfo_install_progress_cb (PkProgress *progress, PkProgressType type, PkDebuginfoInstallPrivate *priv)
+{
+	gint percentage;
+	gchar *package_id = NULL;
+
+	if (type == PK_PROGRESS_TYPE_PERCENTAGE) {
+		g_object_get (progress, "percentage", &percentage, NULL);
+		pk_progress_bar_set_percentage (priv->progress_bar, percentage);
+		goto out;
+	}
+	if (type == PK_PROGRESS_TYPE_PACKAGE_ID) {
+		g_object_get (progress, "package-id", &package_id, NULL);
+		egg_debug ("now downloading %s", package_id);
+		goto out;
+	}
+out:
+	g_free (package_id);
+}
+
+/**
  * pk_debuginfo_install_packages_install:
  **/
 static gboolean
 pk_debuginfo_install_packages_install (PkDebuginfoInstallPrivate *priv, GPtrArray *array, GError **error)
 {
 	gboolean ret = TRUE;
+	PkResults *results = NULL;
 	gchar **package_ids;
 	GError *error_local = NULL;
-	PkExitEnum exit;
+	PkExitEnum exit_enum;
 
 	/* mush back into a char** */
-	package_ids = pk_package_ids_from_array (array);
-
-	/* reset client */
-	ret = pk_client_reset (priv->client, &error_local);
-	if (!ret) {
-		*error = g_error_new (1, 0, "failed to reset: %s", error_local->message);
-		g_error_free (error_local);
-		goto out;
-	}
+	package_ids = pk_ptr_array_to_strv (array);
 
 	/* TRANSLATORS: we are starting to install the packages */
 	pk_progress_bar_start (priv->progress_bar, _("Starting install"));
 
 	/* enable this repo */
-	ret = pk_client_install_packages (priv->client, TRUE, package_ids, &error_local);
-	if (!ret) {
-		/* need to handle retry with only_trusted=FALSE */
-		g_object_get (priv->client, "exit", &exit, NULL);
-		if (exit == PK_EXIT_ENUM_NEED_UNTRUSTED) {
-			egg_debug ("need to handle untrusted");
-
-			/* retry new action with untrusted */
-			pk_client_set_only_trusted (priv->client, FALSE);
-			g_clear_error (&error_local);
-			ret = pk_client_requeue (priv->client, &error_local);
-			if (!ret) {
-				*error = g_error_new (1, 0, "failed to requeue transaction: %s", error_local->message);
-				g_error_free (error_local);
-				goto out;
-			}
-		} else {
-			*error = g_error_new (1, 0, "failed to install packages: %s", error_local->message);
-			g_error_free (error_local);
-			goto out;
-		}
+	results = pk_task_install_packages_sync (PK_TASK(priv->client), package_ids, NULL,
+						 (PkProgressCallback) pk_debuginfo_install_progress_cb, priv, &error_local);
+	if (results == NULL) {
+		*error = g_error_new (1, 0, "failed to install packages: %s", error_local->message);
+		g_error_free (error_local);
+		ret = FALSE;
+		goto out;
+	}
+
+	/* test exit code */
+	exit_enum = pk_results_get_exit_code (results);
+	if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
+		*error = g_error_new (1, 0, "failed to resolve: %s", pk_exit_enum_to_text (exit_enum));
+		g_error_free (error_local);
+		ret = FALSE;
+		goto out;
 	}
 
 	/* end progressbar output */
 	pk_progress_bar_end (priv->progress_bar);
 out:
+	if (results != NULL)
+		g_object_unref (results);
 	g_strfreev (package_ids);
 	return ret;
 }
@@ -223,53 +228,52 @@ out:
 static gchar *
 pk_debuginfo_install_resolve_name_to_id (PkDebuginfoInstallPrivate *priv, const gchar *package_name, GError **error)
 {
-	gboolean ret;
-	const PkPackageObj *obj;
-	const PkPackageId *id;
+	PkResults *results = NULL;
+	const PkItemPackage *item;
 	gchar *package_id = NULL;
-	PkPackageList *list = NULL;
+	GPtrArray *list = NULL;
 	GError *error_local = NULL;
 	gchar **names;
-	guint len;
+	PkExitEnum exit_enum;
 
 	/* resolve takes a char** */
 	names = g_strsplit (package_name, ";", -1);
 
-	/* reset client */
-	ret = pk_client_reset (priv->client, &error_local);
-	if (!ret) {
-		*error = g_error_new (1, 0, "failed to reset: %s", error_local->message);
+	/* resolve */
+	results = pk_client_resolve_sync (priv->client, pk_bitfield_from_enums (PK_FILTER_ENUM_NEWEST, -1), names, NULL, NULL, NULL, &error_local);
+	if (results == NULL) {
+		*error = g_error_new (1, 0, "failed to resolve: %s", error_local->message);
 		g_error_free (error_local);
 		goto out;
 	}
 
-	/* resolve */
-	ret = pk_client_resolve (priv->client, pk_bitfield_from_enums (PK_FILTER_ENUM_NEWEST, -1), names, &error_local);
-	if (!ret) {
-		*error = g_error_new (1, 0, "failed to resolve: %s", error_local->message);
+	/* test exit code */
+	exit_enum = pk_results_get_exit_code (results);
+	if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
+		*error = g_error_new (1, 0, "failed to resolve: %s", pk_exit_enum_to_text (exit_enum));
 		g_error_free (error_local);
 		goto out;
 	}
 
 	/* check we only got one match */
-	list = pk_client_get_package_list (priv->client);
-	len = PK_OBJ_LIST(list)->len;
-	if (len == 0) {
+	list = pk_results_get_package_array (results);
+	if (list->len == 0) {
 		*error = g_error_new (1, 0, "no package %s found", package_name);
 		goto out;
 	}
-	if (len > 1) {
+	if (list->len > 1) {
 		*error = g_error_new (1, 0, "more than one package found for %s", package_name);
 		goto out;
 	}
 
 	/* get the package id */
-	obj = pk_package_list_get_obj (list, 0);
-	id = pk_package_obj_get_id (obj);
-	package_id = pk_package_id_to_string (id);
+	item = g_ptr_array_index (list, 0);
+	package_id = g_strdup (item->package_id);
 out:
+	if (results != NULL)
+		g_object_unref (results);
 	if (list != NULL)
-		g_object_unref (list);
+		g_ptr_array_unref (list);
 	g_strfreev (names);
 	return package_id;
 }
@@ -308,14 +312,14 @@ static void
 pk_debuginfo_install_print_array (GPtrArray *array)
 {
 	guint i;
-	PkPackageId *id;
 	const gchar *package_id;
+	gchar **split;
 
 	for (i=0; i<array->len; i++) {
 		package_id = g_ptr_array_index (array, i);
-		id = pk_package_id_new_from_string (package_id);
-		g_print ("%i\t%s-%s(%s)\t%s\n", i+1, id->name, id->version, id->arch, id->data);
-		pk_package_id_free (id);
+		split = pk_package_id_split (package_id);
+		g_print ("%i\t%s-%s(%s)\t%s\n", i+1, split[0], split[1], split[2], split[3]);
+		g_strfreev (split);
 	}
 }
 
@@ -350,43 +354,45 @@ out:
 static gboolean
 pk_debuginfo_install_add_deps (PkDebuginfoInstallPrivate *priv, GPtrArray *packages_search, GPtrArray *packages_results, GError **error)
 {
-	gboolean ret;
-	const PkPackageObj *obj;
-	const PkPackageId *id;
+	gboolean ret = TRUE;
+	PkResults *results = NULL;
+	const PkItemPackage *item;
 	gchar *package_id = NULL;
-	PkPackageList *list = NULL;
+	GPtrArray *list = NULL;
 	GError *error_local = NULL;
 	gchar **package_ids = NULL;
 	gchar *name_debuginfo;
-	guint len;
 	guint i;
+	gchar **split;
+	PkExitEnum exit_enum;
 
-	/* reset client */
-	ret = pk_client_reset (priv->client, &error_local);
-	if (!ret) {
-		*error = g_error_new (1, 0, "failed to reset: %s", error_local->message);
+	/* get depends for them all, not adding dup's */
+	package_ids = pk_ptr_array_to_strv (packages_search);
+	results = pk_client_get_depends_sync (priv->client, PK_FILTER_ENUM_NONE, package_ids, TRUE, NULL, NULL, NULL, &error_local);
+	if (results == NULL) {
+		*error = g_error_new (1, 0, "failed to get_depends: %s", error_local->message);
 		g_error_free (error_local);
+		ret = FALSE;
 		goto out;
 	}
 
-	/* get depends for them all, not adding dup's */
-	package_ids = pk_package_ids_from_array (packages_search);
-	ret = pk_client_get_depends (priv->client, PK_FILTER_ENUM_NONE, package_ids, TRUE, &error_local);
-	if (!ret) {
-		*error = g_error_new (1, 0, "failed to get_depends: %s", error_local->message);
+	/* test exit code */
+	exit_enum = pk_results_get_exit_code (results);
+	if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
+		*error = g_error_new (1, 0, "failed to resolve: %s", pk_exit_enum_to_text (exit_enum));
 		g_error_free (error_local);
+		ret = FALSE;
 		goto out;
 	}
 
 	/* add dependant packages */
-	list = pk_client_get_package_list (priv->client);
-	len = PK_OBJ_LIST(list)->len;
-	for (i=0; i<len; i++) {
-		obj = pk_package_list_get_obj (list, 0);
-		id = pk_package_obj_get_id(obj);
-
+	list = pk_results_get_package_array (results);
+	for (i=0; i<list->len; i++) {
+		item = g_ptr_array_index (list, 0);
+		split = pk_package_id_split (item->package_id);
 		/* add -debuginfo */
-		name_debuginfo = pk_debuginfo_install_name_to_debuginfo (id->name);
+		name_debuginfo = pk_debuginfo_install_name_to_debuginfo (split[0]);
+		g_strfreev (split);
 
 		/* resolve name */
 		egg_debug ("resolving: %s", name_debuginfo);
@@ -410,110 +416,57 @@ pk_debuginfo_install_add_deps (PkDebuginfoInstallPrivate *priv, GPtrArray *packa
 		g_free (name_debuginfo);
 	}
 out:
+	if (results != NULL)
+		g_object_unref (results);
 	if (list != NULL)
-		g_object_unref (list);
+		g_ptr_array_unref (list);
 	g_strfreev (package_ids);
 	return ret;
 }
 
 /**
- * pk_debuginfo_install_progress_changed_cb:
+ * pk_debuginfo_install_get_repo_list:
  **/
-static void
-pk_debuginfo_install_progress_changed_cb (PkClient *client, guint percentage, guint subpercentage,
-				guint elapsed, guint remaining, PkDebuginfoInstallPrivate *priv)
+static gboolean
+pk_debuginfo_install_get_repo_list (PkDebuginfoInstallPrivate *priv, GError **error)
 {
-	PkRoleEnum role;
-	pk_client_get_role (client, &role, NULL, NULL);
+	gboolean ret = FALSE;
+	PkResults *results = NULL;
+	PkExitEnum exit_enum;
+	guint i;
+	GPtrArray *array;
+	GError *error_local = NULL;
+	const PkItemRepoDetail *item;
 
-	/* ignore everything except InstallPackages */
-	if (role != PK_ROLE_ENUM_INSTALL_PACKAGES) {
-		egg_debug ("ignoring %s progress", pk_role_enum_to_text (role));
+	/* get all repo details */
+	results = pk_client_get_repo_list_sync (priv->client, PK_FILTER_ENUM_NONE, NULL, NULL, NULL, &error_local);
+	if (results == NULL) {
+		*error = g_error_new (1, 0, "failed to get repo list: %s", error_local->message);
+		g_error_free (error_local);
 		goto out;
 	}
 
-	pk_progress_bar_set_percentage (priv->progress_bar, percentage);
-out:
-	return;
-}
-
-/**
- * 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_debuginfo_install_package_cb:
- **/
-static void
-pk_debuginfo_install_package_cb (PkClient *client, const PkPackageObj *obj, PkDebuginfoInstallPrivate *priv)
-{
-	PkRoleEnum role;
-	gchar *package = NULL;
-	gchar *info_pad = NULL;
-	gchar *text = NULL;
-
-	/* get role */
-	pk_client_get_role (client, &role, NULL, NULL);
-
-	/* ignore some */
-	if (obj->info == PK_INFO_ENUM_FINISHED)
-		goto out;
-	if (role != PK_ROLE_ENUM_INSTALL_PACKAGES)
-		goto out;
-
-	/* make these all the same length */
-	info_pad = pk_strpad (pk_info_enum_to_text (obj->info), 12);
-
-	/* don't pretty print if not on console */
-	if (FALSE) {
-		g_print ("%s %s-%s.%s\n", info_pad, obj->id->name, obj->id->version, obj->id->arch);
+	/* test exit code */
+	exit_enum = pk_results_get_exit_code (results);
+	if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
+		g_print ("failed to get repo list: %s", pk_exit_enum_to_text (exit_enum));
 		goto out;
 	}
 
-	/* pad the name-version */
-	if (obj->id->version == NULL ||
-	    obj->id->version[0] == '\0')
-		package = g_strdup (obj->id->name);
-	else
-		package = g_strdup_printf ("%s-%s", obj->id->name, obj->id->version);
-	text = g_strdup_printf ("%s\t%s", info_pad, package);
-	pk_progress_bar_start (priv->progress_bar, text);
-
+	/* get results */
+	array = pk_results_get_repo_detail_array (results);
+	for (i=0; i<array->len; i++) {
+		item = g_ptr_array_index (array, i);
+		if (item->enabled)
+			g_ptr_array_add (priv->enabled, g_strdup (item->repo_id));
+		else
+			g_ptr_array_add (priv->disabled, g_strdup (item->repo_id));
+	}
+	ret = TRUE;
 out:
-	g_free (text);
-	g_free (package);
-	g_free (info_pad);
+	if (results != NULL)
+		g_object_unref (results);
+	return ret;
 }
 
 /**
@@ -539,8 +492,7 @@ main (int argc, char *argv[])
 	GOptionContext *context;
 	const gchar *repo_id;
 	gchar *repo_id_debuginfo;
-	PkDebuginfoInstallPrivate _priv;
-	PkDebuginfoInstallPrivate *priv = &_priv;
+	PkDebuginfoInstallPrivate *priv = NULL;
 	guint step = 1;
 
 	const GOptionEntry options[] = {
@@ -558,9 +510,6 @@ main (int argc, char *argv[])
 		{ NULL}
 	};
 
-	/* clear private struct */
-	memset (priv, 0, sizeof (PkDebuginfoInstallPrivate));
-
 	setlocale (LC_ALL, "");
 	bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
 	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
@@ -592,6 +541,9 @@ main (int argc, char *argv[])
 		goto out;
 	}
 
+	/* clear private struct */
+	priv = g_new0 (PkDebuginfoInstallPrivate, 1);
+
 	/* store as strings */
 	priv->enabled = g_ptr_array_new ();
 	priv->disabled = g_ptr_array_new ();
@@ -600,12 +552,7 @@ main (int argc, char *argv[])
 	package_ids_recognised = g_ptr_array_new ();
 
 	/* create #PkClient */
-	priv->client = pk_client_new ();
-	g_signal_connect (priv->client, "repo-detail", G_CALLBACK (pk_debuginfo_install_repo_details_cb), priv);
-	g_signal_connect (priv->client, "progress-changed", G_CALLBACK (pk_debuginfo_install_progress_changed_cb), priv);
-	g_signal_connect (priv->client, "package", G_CALLBACK (pk_debuginfo_install_package_cb), priv);
-	pk_client_set_synchronous (priv->client, TRUE, NULL);
-	pk_client_set_use_buffer (priv->client, TRUE, NULL);
+	priv->client = PK_CLIENT(pk_task_text_new ());
 
 	/* use text progressbar */
 	priv->progress_bar = pk_progress_bar_new ();
@@ -623,13 +570,20 @@ main (int argc, char *argv[])
 	}
 
 	/* get all enabled repos */
-	ret = pk_client_get_repo_list (priv->client, PK_FILTER_ENUM_NONE, &error);
+	ret = pk_debuginfo_install_get_repo_list (priv, &error);
 	if (!ret) {
-		g_print ("failed to get repo list: %s", error->message);
+		/* should be vocal? */
+		if (!quiet) {
+			/* TRANSLATORS: operation was not successful */
+			g_print ("%s ", _("FAILED."));
+		}
+		/* TRANSLATORS: we're failed to enable the sources, detailed error follows */
+		g_print ("Failed to enable sources list: %s", error->message);
+		g_print ("\n");
 		g_error_free (error);
 
 		/* return correct failure retval */
-		retval = PK_DEBUGINFO_EXIT_CODE_FAILED_TO_GET_REPOLIST;
+		retval = PK_DEBUGINFO_EXIT_CODE_FAILED_TO_ENABLE;
 		goto out;
 	}
 
@@ -973,6 +927,7 @@ out:
 		g_object_unref (priv->client);
 	if (priv->progress_bar != NULL)
 		g_object_unref (priv->progress_bar);
+	g_free (priv);
 	return retval;
 }
 
diff --git a/contrib/debuginfo-install/pk-progress-bar.c b/contrib/debuginfo-install/pk-progress-bar.c
deleted file mode 120000
index 328b7f0..0000000
--- a/contrib/debuginfo-install/pk-progress-bar.c
+++ /dev/null
@@ -1 +0,0 @@
-../../lib/packagekit-glib2/pk-progress-bar.c
\ No newline at end of file
diff --git a/contrib/debuginfo-install/pk-progress-bar.h b/contrib/debuginfo-install/pk-progress-bar.h
deleted file mode 120000
index 154855a..0000000
--- a/contrib/debuginfo-install/pk-progress-bar.h
+++ /dev/null
@@ -1 +0,0 @@
-../../lib/packagekit-glib2/pk-progress-bar.h
\ No newline at end of file
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 5e70935..976a9be 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = python
+SUBDIRS = python packagekit-glib2
 
 if PK_BUILD_QT
 SUBDIRS += packagekit-qt
@@ -12,7 +12,3 @@ if PK_BUILD_GLIB
 SUBDIRS += packagekit-glib
 endif
 
-if PK_BUILD_GLIB2
-SUBDIRS += packagekit-glib2
-endif
-
diff --git a/lib/packagekit-glib2/pk-client-sync.c b/lib/packagekit-glib2/pk-client-sync.c
index 9278226..d12d390 100644
--- a/lib/packagekit-glib2/pk-client-sync.c
+++ b/lib/packagekit-glib2/pk-client-sync.c
@@ -343,6 +343,7 @@ pk_client_get_details_sync (PkClient *client, gchar **package_ids, GCancellable
 /**
  * pk_client_get_update_detail_sync:
  * @client: a valid #PkClient 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
diff --git a/lib/packagekit-glib2/pk-console-shared.c b/lib/packagekit-glib2/pk-console-shared.c
index 62b2432..04c2c61 100644
--- a/lib/packagekit-glib2/pk-console-shared.c
+++ b/lib/packagekit-glib2/pk-console-shared.c
@@ -201,3 +201,161 @@ pk_console_resolve_packages (PkClient *client, PkBitfield filter, gchar **packag
 	return package_ids;
 }
 
+/**
+ * pk_status_enum_to_localised_text:
+ **/
+const gchar *
+pk_status_enum_to_localised_text (PkStatusEnum status)
+{
+	const gchar *text = NULL;
+	switch (status) {
+	case PK_STATUS_ENUM_UNKNOWN:
+		/* TRANSLATORS: This is when the transaction status is not known */
+		text = _("Unknown state");
+		break;
+	case PK_STATUS_ENUM_SETUP:
+		/* TRANSLATORS: transaction state, the daemon is in the process of starting */
+		text = _("Starting");
+		break;
+	case PK_STATUS_ENUM_WAIT:
+		/* TRANSLATORS: transaction state, the transaction is waiting for another to complete */
+		text = _("Waiting in queue");
+		break;
+	case PK_STATUS_ENUM_RUNNING:
+		/* TRANSLATORS: transaction state, just started */
+		text = _("Running");
+		break;
+	case PK_STATUS_ENUM_QUERY:
+		/* TRANSLATORS: transaction state, is querying data */
+		text = _("Querying");
+		break;
+	case PK_STATUS_ENUM_INFO:
+		/* TRANSLATORS: transaction state, getting data from a server */
+		text = _("Getting information");
+		break;
+	case PK_STATUS_ENUM_REMOVE:
+		/* TRANSLATORS: transaction state, removing packages */
+		text = _("Removing packages");
+		break;
+	case PK_STATUS_ENUM_DOWNLOAD:
+		/* TRANSLATORS: transaction state, downloading package files */
+		text = _("Downloading packages");
+		break;
+	case PK_STATUS_ENUM_INSTALL:
+		/* TRANSLATORS: transaction state, installing packages */
+		text = _("Installing packages");
+		break;
+	case PK_STATUS_ENUM_REFRESH_CACHE:
+		/* TRANSLATORS: transaction state, refreshing internal lists */
+		text = _("Refreshing software list");
+		break;
+	case PK_STATUS_ENUM_UPDATE:
+		/* TRANSLATORS: transaction state, installing updates */
+		text = _("Installing updates");
+		break;
+	case PK_STATUS_ENUM_CLEANUP:
+		/* TRANSLATORS: transaction state, removing old packages, and cleaning config files */
+		text = _("Cleaning up packages");
+		break;
+	case PK_STATUS_ENUM_OBSOLETE:
+		/* TRANSLATORS: transaction state, obsoleting old packages */
+		text = _("Obsoleting packages");
+		break;
+	case PK_STATUS_ENUM_DEP_RESOLVE:
+		/* TRANSLATORS: transaction state, checking the transaction before we do it */
+		text = _("Resolving dependencies");
+		break;
+	case PK_STATUS_ENUM_SIG_CHECK:
+		/* TRANSLATORS: transaction state, checking if we have all the security keys for the operation */
+		text = _("Checking signatures");
+		break;
+	case PK_STATUS_ENUM_ROLLBACK:
+		/* TRANSLATORS: transaction state, when we return to a previous system state */
+		text = _("Rolling back");
+		break;
+	case PK_STATUS_ENUM_TEST_COMMIT:
+		/* TRANSLATORS: transaction state, when we're doing a test transaction */
+		text = _("Testing changes");
+		break;
+	case PK_STATUS_ENUM_COMMIT:
+		/* TRANSLATORS: transaction state, when we're writing to the system package database */
+		text = _("Committing changes");
+		break;
+	case PK_STATUS_ENUM_REQUEST:
+		/* TRANSLATORS: transaction state, requesting data from a server */
+		text = _("Requesting data");
+		break;
+	case PK_STATUS_ENUM_FINISHED:
+		/* TRANSLATORS: transaction state, all done! */
+		text = _("Finished");
+		break;
+	case PK_STATUS_ENUM_CANCEL:
+		/* TRANSLATORS: transaction state, in the process of cancelling */
+		text = _("Cancelling");
+		break;
+	case PK_STATUS_ENUM_DOWNLOAD_REPOSITORY:
+		/* TRANSLATORS: transaction state, downloading metadata */
+		text = _("Downloading repository information");
+		break;
+	case PK_STATUS_ENUM_DOWNLOAD_PACKAGELIST:
+		/* TRANSLATORS: transaction state, downloading metadata */
+		text = _("Downloading list of packages");
+		break;
+	case PK_STATUS_ENUM_DOWNLOAD_FILELIST:
+		/* TRANSLATORS: transaction state, downloading metadata */
+		text = _("Downloading file lists");
+		break;
+	case PK_STATUS_ENUM_DOWNLOAD_CHANGELOG:
+		/* TRANSLATORS: transaction state, downloading metadata */
+		text = _("Downloading lists of changes");
+		break;
+	case PK_STATUS_ENUM_DOWNLOAD_GROUP:
+		/* TRANSLATORS: transaction state, downloading metadata */
+		text = _("Downloading groups");
+		break;
+	case PK_STATUS_ENUM_DOWNLOAD_UPDATEINFO:
+		/* TRANSLATORS: transaction state, downloading metadata */
+		text = _("Downloading update information");
+		break;
+	case PK_STATUS_ENUM_REPACKAGING:
+		/* TRANSLATORS: transaction state, repackaging delta files */
+		text = _("Repackaging files");
+		break;
+	case PK_STATUS_ENUM_LOADING_CACHE:
+		/* TRANSLATORS: transaction state, loading databases */
+		text = _("Loading cache");
+		break;
+	case PK_STATUS_ENUM_SCAN_APPLICATIONS:
+		/* TRANSLATORS: transaction state, scanning for running processes */
+		text = _("Scanning applications");
+		break;
+	case PK_STATUS_ENUM_GENERATE_PACKAGE_LIST:
+		/* TRANSLATORS: transaction state, generating a list of packages installed on the system */
+		text = _("Generating package lists");
+		break;
+	case PK_STATUS_ENUM_WAITING_FOR_LOCK:
+		/* TRANSLATORS: transaction state, when we're waiting for the native tools to exit */
+		text = _("Waiting for package manager lock");
+		break;
+	case PK_STATUS_ENUM_WAITING_FOR_AUTH:
+		/* TRANSLATORS: waiting for user to type in a password */
+		text = _("Waiting for authentication");
+		break;
+	case PK_STATUS_ENUM_SCAN_PROCESS_LIST:
+		/* TRANSLATORS: we are updating the list of processes */
+		text = _("Updating running applications");
+		break;
+	case PK_STATUS_ENUM_CHECK_EXECUTABLE_FILES:
+		/* TRANSLATORS: we are checking executable files currently in use */
+		text = _("Checking applications in use");
+		break;
+	case PK_STATUS_ENUM_CHECK_LIBRARIES:
+		/* TRANSLATORS: we are checking for libraries currently in use */
+		text = _("Checking libraries in use");
+		break;
+	default:
+		egg_warning ("status unrecognised: %s", pk_status_enum_to_text (status));
+	}
+	return text;
+}
+
diff --git a/lib/packagekit-glib2/pk-console-shared.h b/lib/packagekit-glib2/pk-console-shared.h
index 1da5336..b7d4a5a 100644
--- a/lib/packagekit-glib2/pk-console-shared.h
+++ b/lib/packagekit-glib2/pk-console-shared.h
@@ -37,6 +37,7 @@ gchar		**pk_console_resolve_packages		(PkClient	*client,
 							 PkBitfield	 filter,
 							 gchar		**packages,
 							 GError		**error);
+const gchar	*pk_status_enum_to_localised_text	(PkStatusEnum	 status);
 
 #endif /* __PK_CONSOLE_SHARED_H */
 
diff --git a/lib/packagekit-glib2/pk-progress-bar.c b/lib/packagekit-glib2/pk-progress-bar.c
index d64562a..506b660 100644
--- a/lib/packagekit-glib2/pk-progress-bar.c
+++ b/lib/packagekit-glib2/pk-progress-bar.c
@@ -94,8 +94,8 @@ pk_progress_bar_draw (PkProgressBar *self, gint percentage)
 	for (i=0; i<self->priv->size - section; i++)
 		g_print (" ");
 	g_print ("] ");
-	if (self->priv->percentage >= 0 && self->priv->percentage != PK_PROGRESS_BAR_PERCENTAGE_INVALID)
-		g_print ("(%i%%)  ", self->priv->percentage);
+	if (percentage >= 0 && percentage < 100)
+		g_print ("(%i%%)  ", percentage);
 	else
 		g_print ("        ");
 	return TRUE;
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 62a3c58..5bf15d0 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -2,15 +2,10 @@
 # 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-generate-pack-test.c
 client/pk-monitor.c
-client/pk-monitor-test.c
-client/pk-tools-common.c
 contrib/browser-plugin/pk-plugin-install.c
 contrib/command-not-found/pk-command-not-found.c
-contrib/command-not-found/pk-command-not-found-test.c
 contrib/debuginfo-install/pk-debuginfo-install.c
 contrib/device-rebind/pk-device-rebind.c
 data/packagekit-catalog.xml.in
commit e45956feebfbb4fe6cbdbc0982a144f528689eec
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 13:27:14 2009 +0100

    trivial: Fix up a metric boatload of GtkDoc problems in the new glib2 library

diff --git a/docs/api/PackageKit-docs.sgml b/docs/api/PackageKit-docs.sgml
index 2aa1a72..1b509de 100644
--- a/docs/api/PackageKit-docs.sgml
+++ b/docs/api/PackageKit-docs.sgml
@@ -68,6 +68,9 @@
     <xi:include href="xml/pk-control.xml"/>
     <xi:include href="xml/pk-task.xml"/>
     <xi:include href="xml/pk-desktop.xml"/>
+    <xi:include href="xml/pk-progress.xml"/>
+    <xi:include href="xml/pk-results.xml"/>
+    <xi:include href="xml/pk-package-sack.xml"/>
     <xi:include href="xml/pk-service-pack.xml"/>
   </reference>
 
@@ -81,6 +84,7 @@
     <xi:include href="xml/egg-debug.xml"/>
     <xi:include href="xml/pk-common.xml"/>
     <xi:include href="xml/pk-enum.xml"/>
+    <xi:include href="xml/pk-item.xml"/>
     <xi:include href="xml/pk-package-id.xml"/>
     <xi:include href="xml/pk-package-ids.xml"/>
   </reference>
diff --git a/lib/packagekit-glib2/packagekit.h b/lib/packagekit-glib2/packagekit.h
index 8ce5d71..a495015 100644
--- a/lib/packagekit-glib2/packagekit.h
+++ b/lib/packagekit-glib2/packagekit.h
@@ -33,6 +33,7 @@
 #include <packagekit-glib2/pk-package-id.h>
 #include <packagekit-glib2/pk-package-ids.h>
 #include <packagekit-glib2/pk-package-sack.h>
+#include <packagekit-glib2/pk-progress.h>
 #include <packagekit-glib2/pk-results.h>
 #include <packagekit-glib2/pk-service-pack.h>
 #include <packagekit-glib2/pk-task.h>
diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index 3754827..24da179 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -21,9 +21,9 @@
 
 /**
  * SECTION:pk-client
- * @short_description: GObject class for PackageKit client access
+ * @short_description: For creating new transactions
  *
- * A nice GObject to use for accessing PackageKit asynchronously. If you're
+ * A 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
@@ -1686,6 +1686,7 @@ pk_client_get_details_async (PkClient *client, gchar **package_ids, GCancellable
 /**
  * pk_client_get_update_detail_async:
  * @client: a valid #PkClient 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
diff --git a/lib/packagekit-glib2/pk-client.h b/lib/packagekit-glib2/pk-client.h
index a77306b..d15fa1c 100644
--- a/lib/packagekit-glib2/pk-client.h
+++ b/lib/packagekit-glib2/pk-client.h
@@ -23,11 +23,6 @@
 #error "Only <packagekit.h> can be included directly."
 #endif
 
-/**
- * SECTION:pk-client
- * @short_description: An abstract client GObject
- */
-
 #ifndef __PK_CLIENT_H
 #define __PK_CLIENT_H
 
diff --git a/lib/packagekit-glib2/pk-control.c b/lib/packagekit-glib2/pk-control.c
index 1b99e52..670dde5 100644
--- a/lib/packagekit-glib2/pk-control.c
+++ b/lib/packagekit-glib2/pk-control.c
@@ -19,6 +19,13 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
+/**
+ * SECTION:pk-control
+ * @short_description: For querying data about PackageKit
+ *
+ * A GObject to use for accessing PackageKit asynchronously.
+ */
+
 #include "config.h"
 
 #include <string.h>
@@ -776,6 +783,7 @@ out:
 /**
  * pk_control_get_time_since_action_async:
  * @control: a valid #PkControl instance
+ * @role: the role enum, e.g. %PK_ROLE_ENUM_GET_UPDATES
  * @cancellable: a #GCancellable or %NULL
  * @callback: the function to run on completion
  * @user_data: the data to pass to @callback
@@ -1066,6 +1074,7 @@ out:
 /**
  * pk_control_can_authorize_async:
  * @control: a valid #PkControl instance
+ * @action_id: The action ID, for instance "org.freedesktop.PackageKit.install-untrusted"
  * @cancellable: a #GCancellable or %NULL
  * @callback: the function to run on completion
  * @user_data: the data to pass to @callback
@@ -1250,17 +1259,15 @@ out:
 /**
  * pk_control_get_properties_async:
  * @control: a valid #PkControl instance
- * @proxy_http: a HTTP proxy string such as "username:password at server.lan:8080"
- * @proxy_ftp: a FTP proxy string such as "server.lan:8080"
  * @cancellable: a #GCancellable or %NULL
  * @callback: the function to run on completion
  * @user_data: the data to pass to @callback
  *
- * Set a proxy on the PK daemon
+ * Gets global properties from the daemon.
  **/
 void
 pk_control_get_properties_async (PkControl *control, GCancellable *cancellable,
-			    GAsyncReadyCallback callback, gpointer user_data)
+				 GAsyncReadyCallback callback, gpointer user_data)
 {
 	GSimpleAsyncResult *res;
 	PkControlState *state;
diff --git a/lib/packagekit-glib2/pk-control.h b/lib/packagekit-glib2/pk-control.h
index c32ecdb..2e01022 100644
--- a/lib/packagekit-glib2/pk-control.h
+++ b/lib/packagekit-glib2/pk-control.h
@@ -23,11 +23,6 @@
 #error "Only <packagekit.h> can be included directly."
 #endif
 
-/**
- * SECTION:pk-control
- * @short_description: An abstract control access GObject
- */
-
 #ifndef __PK_CONTROL_H
 #define __PK_CONTROL_H
 
diff --git a/lib/packagekit-glib2/pk-desktop.c b/lib/packagekit-glib2/pk-desktop.c
index efc14a8..31e5513 100644
--- a/lib/packagekit-glib2/pk-desktop.c
+++ b/lib/packagekit-glib2/pk-desktop.c
@@ -21,9 +21,10 @@
 
 /**
  * SECTION:pk-desktop
- * @short_description: Client singleton access to desktop metadata about a package
+ * @short_description: Find desktop metadata about a package
  *
- * Desktop metadata such as icon name and localised summary may be stored here
+ * Desktop metadata such as icon name and localised summary may be stored in
+ * a local sqlite cache, and this module allows applications to query this.
  */
 
 #include "config.h"
diff --git a/lib/packagekit-glib2/pk-item.c b/lib/packagekit-glib2/pk-item.c
index 8320b54..3a0088e 100644
--- a/lib/packagekit-glib2/pk-item.c
+++ b/lib/packagekit-glib2/pk-item.c
@@ -21,7 +21,10 @@
 
 /**
  * SECTION:pk-item
- * @short_description: TODO
+ * @short_description: A single piece of information from a transaction
+ *
+ * These objects represent single items of data from the transaction, and are
+ * often present in lists (#PkResults) or just refcounted in client programs.
  */
 
 #include "config.h"
@@ -603,7 +606,6 @@ pk_item_message_unref (PkItemMessage *item)
 
 /**
  * pk_item_package_new:
- * @results: a valid #PkResults instance
  *
  * Adds a package to the results set.
  *
@@ -627,7 +629,6 @@ pk_item_package_new (PkInfoEnum info_enum, const gchar *package_id, const gchar
 
 /**
  * pk_item_details_new:
- * @results: a valid #PkResults instance
  *
  * Adds some package details to the results set.
  *
@@ -654,7 +655,6 @@ pk_item_details_new (const gchar *package_id, const gchar *license,
 
 /**
  * pk_item_update_detail_new:
- * @results: a valid #PkResults instance
  *
  * Adds some update details to the results set.
  *
@@ -691,7 +691,6 @@ pk_item_update_detail_new (const gchar *package_id, const gchar *updates,
 
 /**
  * pk_item_category_new:
- * @results: a valid #PkResults instance
  *
  * Adds a category item to the results set.
  *
@@ -717,7 +716,6 @@ pk_item_category_new (const gchar *parent_id, const gchar *cat_id, const gchar *
 
 /**
  * pk_item_distro_upgrade_new:
- * @results: a valid #PkResults instance
  *
  * Adds a distribution upgrade item to the results set.
  *
@@ -741,7 +739,6 @@ pk_item_distro_upgrade_new (PkUpdateStateEnum state_enum, const gchar *name, con
 
 /**
  * pk_item_require_restart_new:
- * @results: a valid #PkResults instance
  *
  * Adds a require restart item to the results set.
  *
@@ -764,7 +761,6 @@ pk_item_require_restart_new (PkRestartEnum restart_enum, const gchar *package_id
 
 /**
  * pk_item_transaction_new:
- * @results: a valid #PkResults instance
  *
  * Adds a transaction item to the results set.
  *
@@ -796,7 +792,6 @@ pk_item_transaction_new (const gchar *tid, const gchar *timespec,
 
 /**
  * pk_item_files_new:
- * @results: a valid #PkResults instance
  *
  * Adds some files details to the results set.
  *
@@ -819,7 +814,6 @@ pk_item_files_new (const gchar *package_id, gchar **files)
 
 /**
  * pk_item_repo_signature_required_new:
- * @results: a valid #PkResults instance
  *
  * Adds some repository signature details to the results set.
  *
@@ -850,7 +844,6 @@ pk_item_repo_signature_required_new (const gchar *package_id, const gchar *repos
 
 /**
  * pk_item_eula_required_new:
- * @results: a valid #PkResults instance
  *
  * Adds some EULA details to the results set.
  *
@@ -875,7 +868,6 @@ pk_item_eula_required_new (const gchar *eula_id, const gchar *package_id,
 
 /**
  * pk_item_media_change_required_new:
- * @results: a valid #PkResults instance
  *
  * Adds some media change details to the results set.
  *
@@ -898,7 +890,6 @@ pk_item_media_change_required_new (PkMediaTypeEnum media_type_enum, const gchar
 
 /**
  * pk_item_repo_detail_new:
- * @results: a valid #PkResults instance
  *
  * Adds some repository details to the results set.
  *
@@ -921,7 +912,6 @@ pk_item_repo_detail_new (const gchar *repo_id, const gchar *description, gboolea
 
 /**
  * pk_item_error_code_new:
- * @results: a valid #PkResults instance
  *
  * Adds some error details to the results set.
  *
@@ -941,7 +931,6 @@ pk_item_error_code_new (PkErrorCodeEnum code_enum, const gchar *details)
 
 /**
  * pk_item_message_new:
- * @results: a valid #PkResults instance
  *
  * Adds some message details to the results set.
  *
diff --git a/lib/packagekit-glib2/pk-item.h b/lib/packagekit-glib2/pk-item.h
index a0eb9e5..a441e73 100644
--- a/lib/packagekit-glib2/pk-item.h
+++ b/lib/packagekit-glib2/pk-item.h
@@ -23,11 +23,6 @@
 #error "Only <packagekit.h> can be included directly."
 #endif
 
-/**
- * SECTION:pk-item
- * @short_description: Abstract items
- */
-
 #ifndef __PK_ITEM_H
 #define __PK_ITEM_H
 
diff --git a/lib/packagekit-glib2/pk-package-sack.c b/lib/packagekit-glib2/pk-package-sack.c
index e054c0b..c3a7fb8 100644
--- a/lib/packagekit-glib2/pk-package-sack.c
+++ b/lib/packagekit-glib2/pk-package-sack.c
@@ -21,7 +21,11 @@
 
 /**
  * SECTION:pk-package-sack
- * @short_description: TODO
+ * @short_description: A sack of packages that can be manipulated
+ *
+ * A package sack is a set of packages that can have operations done on them
+ * in parallel. This might be adding summary text for bare package ID's, or
+ * to add package or update details.
  */
 
 #include "config.h"
@@ -159,7 +163,6 @@ out:
  * pk_package_sack_remove_package:
  * @sack: a valid #PkPackageSack instance
  * @package: a valid #PkPackage instance
- * @package_id: a package_id descriptor
  *
  * Removes a package reference from the sack. The pointers have to match exactly.
  *
@@ -303,6 +306,7 @@ pk_package_sack_sort_compare_info_func (PkPackage **a, PkPackage **b)
 
 /**
  * pk_package_sack_sort_package_id:
+ * @sack: a valid #PkPackageSack instance
  *
  * Sorts by Package ID
  **/
@@ -315,6 +319,7 @@ pk_package_sack_sort_package_id (PkPackageSack *sack)
 
 /**
  * pk_package_sack_sort_summary:
+ * @sack: a valid #PkPackageSack instance
  *
  * Sorts by summary
  **/
@@ -327,6 +332,7 @@ pk_package_sack_sort_summary (PkPackageSack *sack)
 
 /**
  * pk_package_sack_sort_info:
+ * @sack: a valid #PkPackageSack instance
  *
  * Sorts by PkInfoEnum
  **/
@@ -497,8 +503,10 @@ out:
 
 /**
  * pk_package_sack_merge_resolve_async:
- * @package_sack: a valid #PkPackageSack instance
+ * @sack: a valid #PkPackageSack 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: the function to run on completion
  * @user_data: the data to pass to @callback
  *
@@ -539,7 +547,7 @@ pk_package_sack_merge_resolve_async (PkPackageSack *sack, GCancellable *cancella
 
 /**
  * pk_package_sack_merge_generic_finish:
- * @package_sack: a valid #PkPackageSack instance
+ * @sack: a valid #PkPackageSack instance
  * @res: the #GAsyncResult
  * @error: A #GError or %NULL
  *
@@ -548,11 +556,11 @@ pk_package_sack_merge_resolve_async (PkPackageSack *sack, GCancellable *cancella
  * Return value: %TRUE for success
  **/
 gboolean
-pk_package_sack_merge_generic_finish (PkPackageSack *package_sack, GAsyncResult *res, GError **error)
+pk_package_sack_merge_generic_finish (PkPackageSack *sack, GAsyncResult *res, GError **error)
 {
 	GSimpleAsyncResult *simple;
 
-	g_return_val_if_fail (PK_IS_PACKAGE_SACK (package_sack), FALSE);
+	g_return_val_if_fail (PK_IS_PACKAGE_SACK (sack), FALSE);
 	g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (res), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
@@ -636,8 +644,10 @@ out:
 
 /**
  * pk_package_sack_merge_details_async:
- * @package_sack: a valid #PkPackageSack instance
+ * @sack: a valid #PkPackageSack 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: the function to run on completion
  * @user_data: the data to pass to @callback
  *
@@ -755,8 +765,10 @@ out:
 
 /**
  * pk_package_sack_merge_update_detail_async:
- * @package_sack: a valid #PkPackageSack instance
+ * @sack: a valid #PkPackageSack 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: the function to run on completion
  * @user_data: the data to pass to @callback
  *
diff --git a/lib/packagekit-glib2/pk-package-sack.h b/lib/packagekit-glib2/pk-package-sack.h
index 38325e1..d4b3762 100644
--- a/lib/packagekit-glib2/pk-package-sack.h
+++ b/lib/packagekit-glib2/pk-package-sack.h
@@ -23,11 +23,6 @@
 #error "Only <packagekit.h> can be included directly."
 #endif
 
-/**
- * SECTION:pk-package-sack
- * @short_description: An abstract package sack GObject
- */
-
 #ifndef __PK_PACKAGE_SACK_H
 #define __PK_PACKAGE_SACK_H
 
diff --git a/lib/packagekit-glib2/pk-package.c b/lib/packagekit-glib2/pk-package.c
index 0ffd3e8..2aa5562 100644
--- a/lib/packagekit-glib2/pk-package.c
+++ b/lib/packagekit-glib2/pk-package.c
@@ -31,6 +31,7 @@
 #include <packagekit-glib2/pk-package.h>
 #include <packagekit-glib2/pk-common.h>
 #include <packagekit-glib2/pk-enum.h>
+#include <packagekit-glib2/pk-package-id.h>
 
 #include "egg-debug.h"
 
@@ -46,10 +47,6 @@ static void     pk_package_finalize	(GObject     *object);
 struct _PkPackagePrivate
 {
 	gchar			*id;
-	gchar			*id_name;
-	gchar			*id_version;
-	gchar			*id_arch;
-	gchar			*id_data;
 	gchar			*summary;
 	PkInfoEnum		 info;
 	gchar			*license;
@@ -78,10 +75,6 @@ enum {
 enum {
 	PROP_0,
 	PROP_ID,
-	PROP_ID_NAME,
-	PROP_ID_VERSION,
-	PROP_ID_ARCH,
-	PROP_ID_DATA,
 	PROP_SUMMARY,
 	PROP_INFO,
 	PROP_LICENSE,
@@ -110,7 +103,7 @@ G_DEFINE_TYPE (PkPackage, pk_package, G_TYPE_OBJECT)
 /**
  * pk_package_set_id:
  * @package: a valid #PkPackage instance
- * @id: the valid package_id
+ * @package_id: the valid package_id
  * @error: a %GError to put the error code and message in, or %NULL
  *
  * Sets the package object to have the given ID
@@ -154,10 +147,6 @@ pk_package_set_id (PkPackage *package, const gchar *package_id, GError **error)
 
 	/* save */
 	priv->id = g_strdup (package_id);
-	priv->id_name = g_strdup (sections[0]);
-	priv->id_version = g_strdup (sections[1]);
-	priv->id_arch = g_strdup (sections[2]);
-	priv->id_data = g_strdup (sections[3]);
 out:
 	g_strfreev (sections);
 	return ret;
@@ -187,11 +176,12 @@ pk_package_get_id (PkPackage *package)
 void
 pk_package_print (PkPackage *package)
 {
-	PkPackagePrivate *priv;
+	gchar **split;
 	g_return_if_fail (PK_IS_PACKAGE (package));
 
-	priv = package->priv;
-	g_print ("%s-%s.%s\t%s\t%s\n", priv->id_name, priv->id_version, priv->id_arch, priv->id_data, priv->summary);
+	split = pk_package_id_split (package->priv->id);
+	g_print ("%s-%s.%s\t%s\t%s\n", split[0], split[1], split[2], split[3], package->priv->summary);
+	g_strfreev (split);
 }
 
 /**
@@ -207,18 +197,6 @@ pk_package_get_property (GObject *object, guint prop_id, GValue *value, GParamSp
 	case PROP_ID:
 		g_value_set_string (value, priv->id);
 		break;
-	case PROP_ID_NAME:
-		g_value_set_string (value, priv->id_name);
-		break;
-	case PROP_ID_VERSION:
-		g_value_set_string (value, priv->id_version);
-		break;
-	case PROP_ID_ARCH:
-		g_value_set_string (value, priv->id_arch);
-		break;
-	case PROP_ID_DATA:
-		g_value_set_string (value, priv->id_data);
-		break;
 	case PROP_SUMMARY:
 		g_value_set_string (value, priv->summary);
 		break;
@@ -396,42 +374,6 @@ pk_package_class_init (PkPackageClass *klass)
 	g_object_class_install_property (object_class, PROP_ID, pspec);
 
 	/**
-	 * PkPackage:id-name:
-	 */
-	pspec = g_param_spec_string ("id-name", NULL,
-				     "The package name, e.g. 'gnome-power-manager'",
-				     NULL,
-				     G_PARAM_READABLE);
-	g_object_class_install_property (object_class, PROP_ID_NAME, pspec);
-
-	/**
-	 * PkPackage:id-version:
-	 */
-	pspec = g_param_spec_string ("id-version", NULL,
-				     "The package version, e.g. '0.1.2'",
-				     NULL,
-				     G_PARAM_READABLE);
-	g_object_class_install_property (object_class, PROP_ID_VERSION, pspec);
-
-	/**
-	 * PkPackage:id-arch:
-	 */
-	pspec = g_param_spec_string ("id-arch", NULL,
-				     "The package architecture, e.g. 'i386'",
-				     NULL,
-				     G_PARAM_READABLE);
-	g_object_class_install_property (object_class, PROP_ID_ARCH, pspec);
-
-	/**
-	 * PkPackage:id-data:
-	 */
-	pspec = g_param_spec_string ("id-data", NULL,
-				     "The package data, e.g. 'fedora'",
-				     NULL,
-				     G_PARAM_READABLE);
-	g_object_class_install_property (object_class, PROP_ID_DATA, pspec);
-
-	/**
 	 * PkPackage:summary:
 	 */
 	pspec = g_param_spec_string ("summary", NULL,
@@ -628,10 +570,6 @@ pk_package_finalize (GObject *object)
 	PkPackagePrivate *priv = package->priv;
 
 	g_free (priv->id);
-	g_free (priv->id_name);
-	g_free (priv->id_version);
-	g_free (priv->id_arch);
-	g_free (priv->id_data);
 	g_free (priv->summary);
 	g_free (priv->license);
 	g_free (priv->description);
@@ -693,8 +631,8 @@ pk_package_test (gpointer user_data)
 	egg_test_assert (test, (id == NULL));
 
 	/************************************************************/
-	egg_test_title (test, "get name of unset package");
-	g_object_get (package, "id-name", &text, NULL);
+	egg_test_title (test, "get id of unset package");
+	g_object_get (package, "id", &text, NULL);
 	egg_test_assert (test, (text == NULL));
 	g_free (text);
 
@@ -719,14 +657,14 @@ pk_package_test (gpointer user_data)
 	egg_test_assert (test, ret);
 
 	/************************************************************/
-	egg_test_title (test, "get id of unset package");
+	egg_test_title (test, "get id of set package");
 	id = pk_package_get_id (package);
 	egg_test_assert (test, (g_strcmp0 (id, "gnome-power-manager;0.1.2;i386;fedora") == 0));
 
 	/************************************************************/
-	egg_test_title (test, "get name of unset package");
-	g_object_get (package, "id-name", &text, NULL);
-	egg_test_assert (test, (g_strcmp0 (text, "gnome-power-manager") == 0));
+	egg_test_title (test, "get name of set package");
+	g_object_get (package, "id", &text, NULL);
+	egg_test_assert (test, (g_strcmp0 (text, "gnome-power-manager;0.1.2;i386;fedora") == 0));
 	g_free (text);
 
 	g_object_unref (package);
diff --git a/lib/packagekit-glib2/pk-package.h b/lib/packagekit-glib2/pk-package.h
index 762b004..fed7031 100644
--- a/lib/packagekit-glib2/pk-package.h
+++ b/lib/packagekit-glib2/pk-package.h
@@ -23,11 +23,6 @@
 #error "Only <packagekit.h> can be included directly."
 #endif
 
-/**
- * SECTION:pk-package
- * @short_description: An abstract package GObject
- */
-
 #ifndef __PK_PACKAGE_H
 #define __PK_PACKAGE_H
 
diff --git a/lib/packagekit-glib2/pk-progress-bar.c b/lib/packagekit-glib2/pk-progress-bar.c
index af3bf1c..d64562a 100644
--- a/lib/packagekit-glib2/pk-progress-bar.c
+++ b/lib/packagekit-glib2/pk-progress-bar.c
@@ -317,6 +317,7 @@ pk_progress_bar_init (PkProgressBar *self)
 
 /**
  * pk_progress_bar_new:
+ *
  * Return value: A new progress_bar class instance.
  **/
 PkProgressBar *
diff --git a/lib/packagekit-glib2/pk-progress.c b/lib/packagekit-glib2/pk-progress.c
index 38131c8..17f97d2 100644
--- a/lib/packagekit-glib2/pk-progress.c
+++ b/lib/packagekit-glib2/pk-progress.c
@@ -21,9 +21,10 @@
 
 /**
  * SECTION:pk-progress
- * @short_description: GObject class for PackageKit progress access
+ * @short_description: Transaction progress information
  *
- * A nice GObject to use for accessing PackageKit asynchronously
+ * This GObject is available to clients to be able to query details about
+ * the transaction. All of the details on this object are stored as properties.
  */
 
 #include "config.h"
diff --git a/lib/packagekit-glib2/pk-progress.h b/lib/packagekit-glib2/pk-progress.h
index 5fdc567..2ea62bc 100644
--- a/lib/packagekit-glib2/pk-progress.h
+++ b/lib/packagekit-glib2/pk-progress.h
@@ -23,11 +23,6 @@
 #error "Only <packagekit.h> can be included directly."
 #endif
 
-/**
- * SECTION:pk-progress
- * @short_description: An abstract progress GObject
- */
-
 #ifndef __PK_PROGRESS_H
 #define __PK_PROGRESS_H
 
diff --git a/lib/packagekit-glib2/pk-results.c b/lib/packagekit-glib2/pk-results.c
index 9b97f03..9e1963a 100644
--- a/lib/packagekit-glib2/pk-results.c
+++ b/lib/packagekit-glib2/pk-results.c
@@ -21,7 +21,12 @@
 
 /**
  * SECTION:pk-results
- * @short_description: TODO
+ * @short_description: Transaction results
+ *
+ * This GObject allows a client program to query the results sent from
+ * PackageKit. This will include Package(), ErrorCode() and all the other types
+ * of objects. Everything is refcounted, so ensure you unref when done with the
+ * data.
  */
 
 #include "config.h"
diff --git a/lib/packagekit-glib2/pk-results.h b/lib/packagekit-glib2/pk-results.h
index f9179a7..8925c0b 100644
--- a/lib/packagekit-glib2/pk-results.h
+++ b/lib/packagekit-glib2/pk-results.h
@@ -23,11 +23,6 @@
 #error "Only <packagekit.h> can be included directly."
 #endif
 
-/**
- * SECTION:pk-results
- * @short_description: An abstract results GObject
- */
-
 #ifndef __PK_RESULTS_H
 #define __PK_RESULTS_H
 
diff --git a/lib/packagekit-glib2/pk-service-pack.c b/lib/packagekit-glib2/pk-service-pack.c
index a793259..d425bca 100644
--- a/lib/packagekit-glib2/pk-service-pack.c
+++ b/lib/packagekit-glib2/pk-service-pack.c
@@ -20,6 +20,13 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
+/**
+ * SECTION:pk-service-pack
+ * @short_description: Functionality for creating and reading service packs
+ *
+ * Clients can use this GObject for reading and writing service packs.
+ */
+
 #ifdef HAVE_CONFIG_H
 #  include "config.h"
 #endif
@@ -73,7 +80,12 @@ typedef struct {
 	PkServicePackType		 type;
 } PkServicePackState;
 
-struct PkServicePackPrivate
+/**
+ * PkServicePackPrivate:
+ *
+ * Private #PkServicePack data
+ **/
+struct _PkServicePackPrivate
 {
 	gchar			*directory;
 	PkClient		*client;
@@ -336,6 +348,7 @@ pk_service_pack_create_temporary_directory (const gchar *prefix)
 /**
  * pk_service_pack_check_valid:
  * @pack: a valid #PkServicePack instance
+ * @filename: the filename of the pack to check
  * @error: a %GError to put the error code and message in, or %NULL
  *
  * Checks to see if a service pack file is valid, and usable with this system.
diff --git a/lib/packagekit-glib2/pk-service-pack.h b/lib/packagekit-glib2/pk-service-pack.h
index 836795a..73d8a64 100644
--- a/lib/packagekit-glib2/pk-service-pack.h
+++ b/lib/packagekit-glib2/pk-service-pack.h
@@ -46,8 +46,6 @@ G_BEGIN_DECLS
 /* the file extension to a servicepack */
 #define PK_SERVICE_PACK_FILE_EXTENSION	"servicepack"
 
-typedef struct PkServicePackPrivate PkServicePackPrivate;
-
 typedef enum
 {
 	PK_SERVICE_PACK_ERROR_FAILED_SETUP,
@@ -58,13 +56,17 @@ typedef enum
 	PK_SERVICE_PACK_ERROR_NOT_COMPATIBLE
 } PkServicePackError;
 
-typedef struct
+typedef struct _PkServicePackPrivate	PkServicePackPrivate;
+typedef struct _PkServicePack		PkServicePack;
+typedef struct _PkServicePackClass	PkServicePackClass;
+
+struct _PkServicePack
 {
 	GObject			 parent;
 	PkServicePackPrivate	*priv;
-} PkServicePack;
+};
 
-typedef struct
+struct _PkServicePackClass
 {
 	GObjectClass	parent_class;
 	/* Padding for future expansion */
@@ -72,7 +74,7 @@ typedef struct
 	void (*_pk_reserved2) (void);
 	void (*_pk_reserved3) (void);
 	void (*_pk_reserved4) (void);
-} PkServicePackClass;
+};
 
 GQuark		 pk_service_pack_error_quark		(void);
 GType		 pk_service_pack_error_get_type		(void);
diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c
index 36b47d2..2ca0aeb 100644
--- a/lib/packagekit-glib2/pk-task.c
+++ b/lib/packagekit-glib2/pk-task.c
@@ -19,6 +19,12 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
+/**
+ * SECTION:pk-task
+ * @short_description: An abstract package task GObject, dealing with unsigned
+ * transactions, GPG keys and EULA requests.
+ */
+
 #include "config.h"
 
 #include <gio/gio.h>
@@ -680,7 +686,10 @@ out:
 /**
  * pk_task_install_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: the function to run on completion
  * @user_data: the data to pass to @callback
  *
diff --git a/lib/packagekit-glib2/pk-task.h b/lib/packagekit-glib2/pk-task.h
index 768459c..d153ea8 100644
--- a/lib/packagekit-glib2/pk-task.h
+++ b/lib/packagekit-glib2/pk-task.h
@@ -23,12 +23,6 @@
 #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
 
commit f40d7ca5b7c6378ec4fe6b56bb25a3201ddec8cf
Author: anipeter <anipeter at fedoraproject.org>
Date:   Wed Sep 9 11:43:16 2009 +0000

    Sending translation for Malayalam

diff --git a/po/ml.po b/po/ml.po
index 00a1238..a151d77 100644
--- a/po/ml.po
+++ b/po/ml.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: packagekit.master.ml\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-05 08:29+0000\n"
-"PO-Revision-Date: 2009-09-05 19:25+0530\n"
+"POT-Creation-Date: 2009-09-09 08:33+0000\n"
+"PO-Revision-Date: 2009-09-09 17:12+0530\n"
 "Last-Translator: \n"
 "Language-Team:  <en at li.org>\n"
 "MIME-Version: 1.0\n"
@@ -18,106 +18,106 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #. TRANSLATORS: this is an atomic transaction
-#: ../client/pk-console.c:238 ../client/pk-console-test.c:147
+#: ../client/pk-console.c:237 ../client/pk-console-test.c:143
 msgid "Transaction"
 msgstr "ഇടപാടു്"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:240 ../client/pk-console-test.c:149
+#: ../client/pk-console.c:239 ../client/pk-console-test.c:145
 msgid "System time"
 msgstr "സിസ്റ്റം സമയം"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:147
 msgid "Succeeded"
 msgstr "ഇടപാടു് പൂര്‍ത്തിയായി"
 
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:147
 msgid "True"
 msgstr "True"
 
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:147
 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:244 ../client/pk-console-test.c:153
+#: ../client/pk-console.c:243 ../client/pk-console-test.c:149
 #: ../src/pk-polkit-action-lookup.c:327
 msgid "Role"
 msgstr "റോള്‍"
 
 #. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:249 ../client/pk-console-test.c:158
+#: ../client/pk-console.c:248 ../client/pk-console-test.c:154
 msgid "Duration"
 msgstr "സമയം"
 
-#: ../client/pk-console.c:249 ../client/pk-console-test.c:158
+#: ../client/pk-console.c:248 ../client/pk-console-test.c:154
 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:253 ../client/pk-console-test.c:162
+#: ../client/pk-console.c:252 ../client/pk-console-test.c:158
 #: ../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:255 ../client/pk-console-test.c:164
+#: ../client/pk-console.c:254 ../client/pk-console-test.c:160
 msgid "User ID"
 msgstr "ഉപയോക്താവിനുള്ള ID"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:262 ../client/pk-console-test.c:171
+#: ../client/pk-console.c:261 ../client/pk-console-test.c:167
 msgid "Username"
 msgstr "ഉപയോക്തൃനാമം"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:266 ../client/pk-console-test.c:175
+#: ../client/pk-console.c:265 ../client/pk-console-test.c:171
 msgid "Real name"
 msgstr "യഥാര്‍ത്ഥ പേരു്"
 
-#: ../client/pk-console.c:274 ../client/pk-console-test.c:183
+#: ../client/pk-console.c:273 ../client/pk-console-test.c:179
 msgid "Affected packages:"
 msgstr "ബാധിച്ച പാക്കേജുകള്‍:"
 
-#: ../client/pk-console.c:276 ../client/pk-console-test.c:185
+#: ../client/pk-console.c:275 ../client/pk-console-test.c:181
 msgid "Affected packages: None"
 msgstr "ബാധിച്ച പാക്കേജുകള്‍: ഒന്നുമില്ല"
 
 #. TRANSLATORS: When processing, we might have to remove other dependencies
-#: ../client/pk-console.c:337 ../client/pk-task-text.c:220
+#: ../client/pk-console.c:336 ../lib/packagekit-glib2/pk-task-text.c:220
 msgid "The following packages have to be removed:"
 msgstr "താഴെ പറയുന്ന പാക്കേജുകള്‍ നീക്കം ചെയ്യേണ്ടതുണ്ടു്."
 
 #. TRANSLATORS: When processing, we might have to install other dependencies
-#: ../client/pk-console.c:340 ../client/pk-task-text.c:225
+#: ../client/pk-console.c:339 ../lib/packagekit-glib2/pk-task-text.c:225
 msgid "The following packages have to be installed:"
 msgstr "താഴെ പറയുന്ന പാക്കേജുകള്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്യേണ്ടതാണു്:"
 
 #. TRANSLATORS: When processing, we might have to update other dependencies
-#: ../client/pk-console.c:343 ../client/pk-task-text.c:230
+#: ../client/pk-console.c:342 ../lib/packagekit-glib2/pk-task-text.c:230
 msgid "The following packages have to be updated:"
 msgstr "താഴെ പറയുന്ന പാക്കേജുകള്‍ പരിഷ്കരിക്കേണ്ടതുണ്ടു്:"
 
 #. TRANSLATORS: When processing, we might have to reinstall other dependencies
-#: ../client/pk-console.c:346 ../client/pk-task-text.c:235
+#: ../client/pk-console.c:345 ../lib/packagekit-glib2/pk-task-text.c:235
 msgid "The following packages have to be reinstalled:"
 msgstr "താഴെ പറയുന്ന പാക്കേജുകള്‍ വീണ്ടും ഇന്‍സ്റ്റോള്‍ ചെയ്യേണ്ടതുണ്ടു്:"
 
 #. TRANSLATORS: When processing, we might have to downgrade other dependencies
-#: ../client/pk-console.c:349 ../client/pk-task-text.c:240
+#: ../client/pk-console.c:348 ../lib/packagekit-glib2/pk-task-text.c:240
 msgid "The following packages have to be downgraded:"
 msgstr "താഴെ പറയുന്ന പാക്കേജുകള്‍ ഡൌണ്‍ഗ്രേഡ് ചെയ്യേണ്ടതുണ്ടു്:"
 
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:363 ../client/pk-console-test.c:205
+#: ../client/pk-console.c:362 ../client/pk-console-test.c:201
 msgid "Distribution"
 msgstr "വിതരണം"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:365 ../client/pk-console-test.c:207
+#: ../client/pk-console.c:364 ../client/pk-console-test.c:203
 msgid "Type"
 msgstr "തരം"
 
@@ -125,45 +125,46 @@ msgstr "തരം"
 #. TRANSLATORS: this is the summary of the group
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:367 ../client/pk-console.c:390
-#: ../client/pk-console-test.c:209 ../client/pk-console-test.c:230
+#: ../client/pk-console.c:366 ../client/pk-console.c:389
+#: ../client/pk-console-test.c:205 ../client/pk-console-test.c:226
 msgid "Summary"
 msgstr "സമ്മറി"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:379 ../client/pk-console-test.c:219
+#: ../client/pk-console.c:378 ../client/pk-console-test.c:215
 msgid "Category"
 msgstr "വിഭാഗം"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:381 ../client/pk-console-test.c:221
+#: ../client/pk-console.c:380 ../client/pk-console-test.c:217
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:384 ../client/pk-console-test.c:224
+#: ../client/pk-console.c:383 ../client/pk-console-test.c:220
 msgid "Parent"
 msgstr "പേരന്റ്"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:387 ../client/pk-console-test.c:227
+#: ../client/pk-console.c:386 ../client/pk-console-test.c:223
 msgid "Name"
 msgstr "പേരു്"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:393 ../client/pk-console-test.c:233
+#: ../client/pk-console.c:392 ../client/pk-console-test.c:229
 msgid "Icon"
 msgstr "ചിഹ്നം"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:408 ../client/pk-console-test.c:247
+#: ../client/pk-console.c:407 ../client/pk-console-test.c:243
 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:410 ../client/pk-console-test.c:253
-#: ../client/pk-task-text.c:101 ../client/pk-task-text.c:153
+#: ../client/pk-console.c:409 ../client/pk-console-test.c:249
+#: ../lib/packagekit-glib2/pk-task-text.c:101
+#: ../lib/packagekit-glib2/pk-task-text.c:153
 #: ../src/pk-polkit-action-lookup.c:352
 msgid "Package"
 msgid_plural "Packages"
@@ -171,121 +172,121 @@ msgstr[0] "പാക്കേജ്"
 msgstr[1] "പാക്കേജുകള്‍"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:413 ../client/pk-console-test.c:256
+#: ../client/pk-console.c:412 ../client/pk-console-test.c:252
 msgid "Updates"
 msgstr "പരിഷ്കരണങ്ങള്‍"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:417 ../client/pk-console-test.c:260
+#: ../client/pk-console.c:416 ../client/pk-console-test.c:256
 msgid "Obsoletes"
 msgstr "വേണ്ടെന്നു് വച്ചവ"
 
 #. TRANSLATORS: details about the update, the vendor URLs
-#: ../client/pk-console.c:421 ../client/pk-console-test.c:264
-#: ../client/pk-task-text.c:154
+#: ../client/pk-console.c:420 ../client/pk-console-test.c:260
+#: ../lib/packagekit-glib2/pk-task-text.c:154
 msgid "Vendor"
 msgstr "കച്ചവടക്കാരന്‍"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:425 ../client/pk-console-test.c:268
+#: ../client/pk-console.c:424 ../client/pk-console-test.c:264
 msgid "Bugzilla"
 msgstr "Bugzilla"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:429 ../client/pk-console-test.c:272
+#: ../client/pk-console.c:428 ../client/pk-console-test.c:268
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:433 ../client/pk-console-test.c:276
+#: ../client/pk-console.c:432 ../client/pk-console-test.c:272
 msgid "Restart"
 msgstr "വീണ്ടും ആരംഭിക്കുക"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:437 ../client/pk-console-test.c:280
+#: ../client/pk-console.c:436 ../client/pk-console-test.c:276
 msgid "Update text"
 msgstr "പരിഷ്കരിച്ച വാചകം"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:441 ../client/pk-console-test.c:284
+#: ../client/pk-console.c:440 ../client/pk-console-test.c:280
 msgid "Changes"
 msgstr "മാറ്റങ്ങള്‍"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:445 ../client/pk-console-test.c:288
+#: ../client/pk-console.c:444 ../client/pk-console-test.c:284
 msgid "State"
 msgstr "അവസ്ഥ"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:450 ../client/pk-console-test.c:293
+#: ../client/pk-console.c:449 ../client/pk-console-test.c:289
 msgid "Issued"
 msgstr "നല്‍കിയതു്"
 
 #. TRANSLATORS: details about the update, date the update was updated
-#: ../client/pk-console.c:455 ../client/pk-console-test.c:298
+#: ../client/pk-console.c:454 ../client/pk-console-test.c:294
 msgid "Updated"
 msgstr "പരിഷ്കരിച്ചിരിക്കുന്നു"
 
 #. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:475 ../client/pk-console-test.c:316
+#: ../client/pk-console.c:474 ../client/pk-console-test.c:312
 msgid "Enabled"
 msgstr "പ്രവര്‍ത്തന സജ്ജം"
 
 #. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:478 ../client/pk-console-test.c:319
+#: ../client/pk-console.c:477 ../client/pk-console-test.c:315
 msgid "Disabled"
 msgstr "പ്രവര്‍ത്തന രഹിതം"
 
-#: ../client/pk-console.c:555 ../client/pk-console.c:557
+#: ../client/pk-console.c:554 ../client/pk-console.c:556
 msgid "Percentage"
 msgstr "ശതമാനം"
 
-#: ../client/pk-console.c:557
+#: ../client/pk-console.c:556
 msgid "Unknown"
 msgstr "അപരിചിതം"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:599 ../client/pk-console-test.c:341
+#: ../client/pk-console.c:598 ../client/pk-console-test.c:337
 msgid "System restart required by:"
 msgstr "സിസ്റ്റം വീണ്ടും ആരംഭിക്കുന്നതു് ആവശ്യമുള്ളതു്:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:602 ../client/pk-console-test.c:344
+#: ../client/pk-console.c:601 ../client/pk-console-test.c:340
 msgid "Session restart required:"
 msgstr "സെഷന്‍ വീണ്ടും ആരംഭിക്കേണ്ടതുണ്ടു്:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:605 ../client/pk-console-test.c:347
+#: ../client/pk-console.c:604 ../client/pk-console-test.c:343
 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:608 ../client/pk-console-test.c:350
+#: ../client/pk-console.c:607 ../client/pk-console-test.c:346
 msgid "Session restart (security) required:"
 msgstr "സെഷന്‍ വീണ്ടും ആരംഭിക്കുന്നതു് (സുരക്ഷാ പരിഷ്കരണം) ആവശ്യമുള്ളതു്:"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:611 ../client/pk-console-test.c:353
+#: ../client/pk-console.c:610 ../client/pk-console-test.c:349
 msgid "Application restart required by:"
 msgstr "പ്രയോഗം വീണ്ടും ആരംഭിക്കേണ്ടതു് ആവശ്യമുള്ളതു്:"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:666 ../client/pk-console-test.c:704
+#: ../client/pk-console.c:665 ../client/pk-console-test.c:538
 msgid "Please restart the computer to complete the update."
 msgstr "പരിഷ്കരണങ്ങള്‍ പൂര്‍ത്തിയാക്കുന്നതിനായി ദയവായി നിങ്ങളുടെ കമ്പ്യൂട്ടര്‍ വീണ്ടും ആരംഭിക്കുക."
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:669 ../client/pk-console-test.c:707
+#: ../client/pk-console.c:668 ../client/pk-console-test.c:541
 msgid "Please logout and login to complete the update."
 msgstr "പരിഷ്കരണങ്ങള്‍ പൂര്‍ത്തിയാക്കുന്നതിനായി ദയവായി ലോഗൌട്ട് ചെയ്ത് ലോഗിന്‍ ചെയ്യുക."
 
 #. TRANSLATORS: a package needs to restart the application
-#: ../client/pk-console.c:672
+#: ../client/pk-console.c:671
 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:675 ../client/pk-console-test.c:710
+#: ../client/pk-console.c:674 ../client/pk-console-test.c:544
 msgid ""
 "Please restart the computer to complete the update as important security "
 "updates have been installed."
@@ -294,7 +295,7 @@ msgstr ""
 "വീണ്ടും ആരംഭിക്കുക."
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:678 ../client/pk-console-test.c:713
+#: ../client/pk-console.c:677 ../client/pk-console-test.c:547
 msgid ""
 "Please logout and login to complete the update as important security updates "
 "have been installed."
@@ -303,442 +304,443 @@ msgstr ""
 "ചെയ്യുക."
 
 #. TRANSLATORS: The package is already installed on the system
-#: ../client/pk-console.c:810
+#: ../client/pk-console.c:809
 #, 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:818
+#: ../client/pk-console.c:817
 #, 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: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
+#: ../client/pk-console.c:843 ../client/pk-console.c:891
+#: ../client/pk-console.c:915 ../client/pk-console.c:963
+#: ../client/pk-console.c:1059 ../client/pk-console.c:1172
+#: ../client/pk-console.c:1233 ../client/pk-tools-common.c:132
+#: ../client/pk-tools-common.c:151 ../client/pk-tools-common.c:159
 #, c-format
 msgid "Internal error: %s"
 msgstr "ആന്തരിക പിശക്: %s"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
 #. ask the user
-#: ../client/pk-console.c:876 ../client/pk-console.c:948
-#: ../client/pk-console.c:1266 ../client/pk-task-text.c:299
+#: ../client/pk-console.c:875 ../client/pk-console.c:947
+#: ../client/pk-console.c:1265 ../lib/packagekit-glib2/pk-task-text.c:299
 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
+#: ../client/pk-console.c:880 ../client/pk-console.c:952
 msgid "The package install was canceled!"
 msgstr "പാക്കേജ് ഇന്‍സ്റ്റോള്‍ ചെയ്യല്‍ റദ്ദാക്കിയിരിക്കുന്നു!"
 
 #. TRANSLATORS: There was an error installing the packages. The detailed error follows
-#: ../client/pk-console.c:900 ../client/pk-console.c:1634
+#: ../client/pk-console.c:899 ../client/pk-console.c:1633
 #, 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:972
+#: ../client/pk-console.c:971
 #, 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:1028
+#: ../client/pk-console.c:1027
 #, 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:1051 ../client/pk-console.c:1089
-#: ../client/pk-console.c:1118
+#: ../client/pk-console.c:1050 ../client/pk-console.c:1088
+#: ../client/pk-console.c:1117
 #, c-format
 msgid "This tool could not remove the packages: %s"
 msgstr "ഈ പ്രയോഗത്തിനു് പാക്കേജുകള്‍ നീക്കം ചെയ്യുവാന്‍ സാധ്യമല്ല: %s"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:1104
+#: ../client/pk-console.c:1103
 msgid "Proceed with additional packages?"
 msgstr "കൂടുതല്‍ പാക്കേജുകളുമായി മുമ്പോട്ട് പോകണമോ?"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:1109
+#: ../client/pk-console.c:1108
 msgid "The package removal was canceled!"
 msgstr "പാക്കേജ് നീക്കം ചെയ്യല്‍ റദ്ദാക്കിയിരിക്കുന്നു!"
 
 #. TRANSLATORS: The package name was not found in any software sources
-#: ../client/pk-console.c:1150
+#: ../client/pk-console.c:1149
 #, 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:1181
+#: ../client/pk-console.c:1180
 #, 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:1213 ../client/pk-console.c:1225
-#: ../client/pk-console.c:1280
+#: ../client/pk-console.c:1212 ../client/pk-console.c:1224
+#: ../client/pk-console.c:1279
 #, 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
+#: ../client/pk-console.c:1270
 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:1304 ../client/pk-console.c:1312
+#: ../client/pk-console.c:1303 ../client/pk-console.c:1311
 #, 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:1334 ../client/pk-console.c:1342
+#: ../client/pk-console.c:1333 ../client/pk-console.c:1341
 #, 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:1364 ../client/pk-console.c:1372
+#: ../client/pk-console.c:1363 ../client/pk-console.c:1371
 #, 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:1394
+#: ../client/pk-console.c:1393
 #, 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:1402
+#: ../client/pk-console.c:1401
 #, 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:1424
+#: ../client/pk-console.c:1423
 #, c-format
 msgid "File already exists: %s"
 msgstr "ഫയല്‍ നിലവിലുണ്ടു്: %s"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1429 ../client/pk-console.c:1485
-#: ../client/pk-console.c:1560
+#: ../client/pk-console.c:1428 ../client/pk-console.c:1484
+#: ../client/pk-console.c:1559
 msgid "Getting package list"
 msgstr "പാക്കേജ് സംബന്ധിച്ചുള്ള വിവരം ലഭ്യമാകുന്നു"
 
 #. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
-#: ../client/pk-console.c:1435 ../client/pk-console.c:1491
-#: ../client/pk-console.c:1566
+#: ../client/pk-console.c:1434 ../client/pk-console.c:1490
+#: ../client/pk-console.c:1565
 #, 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:1446
+#: ../client/pk-console.c:1445
 #, c-format
 msgid "Failed to save to disk"
 msgstr "ഡിസ്കിലേക്കു് സൂക്ഷിക്കുവാന്‍ സാധ്യമായില്ല"
 
 #. TRANSLATORS: There was an error getting the list. The filename follows
-#: ../client/pk-console.c:1480 ../client/pk-console.c:1555
+#: ../client/pk-console.c:1479 ../client/pk-console.c:1554
 #, c-format
 msgid "File does not exist: %s"
 msgstr "ഫയല്‍ നിലവിലില്ല: %s"
 
 #. TRANSLATORS: header to a list of packages newly added
-#: ../client/pk-console.c:1512
+#: ../client/pk-console.c:1511
 msgid "Packages to add"
 msgstr "ചേര്‍ക്കുവാനുള്ള പാക്കേജുകള്‍"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1520
+#: ../client/pk-console.c:1519
 msgid "Packages to remove"
 msgstr "നീക്കം ചെയ്യുവാനുള്ള പാക്കേജുകള്‍"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1588
+#: ../client/pk-console.c:1587
 #, c-format
 msgid "No new packages need to be installed"
 msgstr "പുതിയ പാക്കേജുകള്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്യുവാന്‍ സാധ്യമായില്ല"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1594
+#: ../client/pk-console.c:1593
 msgid "To install"
 msgstr "ഇന്‍സ്റ്റോള്‍ ചെയ്യുവാനുള്ള പാക്കേജുകള്‍"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1606
+#: ../client/pk-console.c:1605
 msgid "Searching for package: "
 msgstr "പാക്കേജിനായി തെരയുന്നു: "
 
 #. TRANSLATORS: package was not found -- this is the end of a string ended in ...
-#: ../client/pk-console.c:1610
+#: ../client/pk-console.c:1609
 msgid "not found."
 msgstr "ലഭ്യമായില്ല."
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1621
+#: ../client/pk-console.c:1620
 #, 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:1627
+#: ../client/pk-console.c:1626
 #: ../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:1663
+#: ../client/pk-console.c:1662
 #, 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:1671
+#: ../client/pk-console.c:1670
 #, 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:1702
+#: ../client/pk-console.c:1701
 msgid "Error:"
 msgstr "പിശക്:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1716 ../client/pk-console-test.c:370
+#: ../client/pk-console.c:1715 ../client/pk-console-test.c:366
 msgid "Package description"
 msgstr "പാക്കേജ് വിശദാംശങ്ങള്‍"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:1732 ../client/pk-console-test.c:388
+#: ../client/pk-console.c:1731 ../client/pk-console-test.c:384
 msgid "Message:"
 msgstr "സന്ദേശം:"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1760 ../client/pk-console-test.c:407
+#: ../client/pk-console.c:1759 ../client/pk-console-test.c:403
 msgid "Package files"
 msgstr "പാക്കേജിലുള്ള ഫയലുകള്‍"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1768 ../client/pk-console-test.c:402
+#: ../client/pk-console.c:1767 ../client/pk-console-test.c:398
 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:1791
+#: ../client/pk-console.c:1790
 msgid "Repository signature required"
 msgstr "സംഭരണിയ്ക്കുള്ള ജിപിജി ഒപ്പ് ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
 #. ask the user
-#: ../client/pk-console.c:1801 ../client/pk-task-text.c:113
+#: ../client/pk-console.c:1800 ../lib/packagekit-glib2/pk-task-text.c:113
 msgid "Do you accept this signature?"
 msgstr "ഈ ഓപ്പ് നിങ്ങള്‍ അംഗീകരിക്കുന്നുവോ?"
 
 #. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1805 ../client/pk-task-text.c:117
+#: ../client/pk-console.c:1804 ../lib/packagekit-glib2/pk-task-text.c:117
 msgid "The signature was not accepted."
 msgstr "ഒപ്പ് സ്വീകരിക്കുന്നില്ല."
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1839
+#: ../client/pk-console.c:1838
 msgid "End user license agreement required"
 msgstr "ഉപയോക്താവിനുള്ള ലൈസന്‍സ് സമ്മതപ്പത്രം ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: This a prompt asking the user to agree to the license
-#: ../client/pk-console.c:1846
+#: ../client/pk-console.c:1845
 msgid "Do you agree to this license?"
 msgstr "നിങ്ങള്‍ ഈ ലൈസന്‍സ് സ്വീകരിക്കുന്നുവോ?"
 
 #. TRANSLATORS: This is where the user declined the license
-#: ../client/pk-console.c:1850
+#: ../client/pk-console.c:1849
 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:1879 ../client/pk-console-test.c:972
+#: ../client/pk-console.c:1878 ../client/pk-console-test.c:816
 msgid "The daemon crashed mid-transaction!"
 msgstr "ഡെമണ്‍ തകര്‍ന്നിരിക്കുന്നു!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1932 ../client/pk-console-test.c:1006
+#: ../client/pk-console.c:1931 ../client/pk-console-test.c:850
 msgid "PackageKit Console Interface"
 msgstr "പാക്കേജ്കിറ്റ് കണ്‍സോള്‍ ഇന്റര്‍ഫെയിസ്"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1934 ../client/pk-console-test.c:1008
+#: ../client/pk-console.c:1933 ../client/pk-console-test.c:852
 msgid "Subcommands:"
 msgstr "സബ്കമാന്‍ഡുകള്‍:"
 
 #. TRANSLATORS: command line argument, if we should show debugging information
 #. TRANSLATORS: if we should show debugging data
-#: ../client/pk-console.c:2027 ../client/pk-console-test.c:1099
-#: ../client/pk-generate-pack.c:187 ../client/pk-monitor.c:128
-#: ../client/pk-monitor-test.c:282
+#: ../client/pk-console.c:2026 ../client/pk-console-test.c:966
+#: ../client/pk-generate-pack.c:185 ../client/pk-generate-pack-test.c:222
+#: ../client/pk-monitor.c:128 ../client/pk-monitor-test.c:282
 #: ../contrib/command-not-found/pk-command-not-found.c:616
+#: ../contrib/command-not-found/pk-command-not-found-test.c:614
 #: ../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:2030 ../client/pk-console-test.c:1102
+#: ../client/pk-console.c:2029 ../client/pk-console-test.c:969
 #: ../client/pk-monitor.c:130 ../client/pk-monitor-test.c:284
 msgid "Show the program version and exit"
 msgstr "പ്രോഗ്രാമിന്റെ പതിപ്പ് കാണിച്ചശേഷം പുറത്ത് കടക്കുക"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:2033 ../client/pk-console-test.c:1105
+#: ../client/pk-console.c:2032 ../client/pk-console-test.c:972
 msgid "Set the filter, e.g. installed"
 msgstr "ഫില്‍‌റ്റര്‍ ക്രമികരിക്കുക, e.g. ഇന്‍സ്റ്റോള്‍ ചെയ്തിരിക്കുന്നു"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:2036 ../client/pk-console-test.c:1108
+#: ../client/pk-console.c:2035 ../client/pk-console-test.c:975
 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:2063
+#: ../client/pk-console.c:2062
 msgid "This tool could not connect to system DBUS."
 msgstr "സിസ്റ്റം ഡീബസിലേക്ക് കണക്ട് ചെയ്യുവാന്‍ ഈ പ്രയോഗത്തിനു് സാധ്യമല്ല."
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:2153 ../client/pk-console-test.c:1183
+#: ../client/pk-console.c:2152 ../client/pk-console-test.c:1052
 msgid "The filter specified was invalid"
 msgstr "നല്‍കിയ ഫില്‍‌റ്റര്‍ തെറ്റാണു്"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:2172 ../client/pk-console-test.c:1202
+#: ../client/pk-console.c:2171 ../client/pk-console-test.c:1071
 msgid "A search type is required, e.g. name"
 msgstr "തെരയുന്നതിനുള്ള തരം ആവശ്യമുണ്ടു്, ഉദാ. പേരു്"
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:2179 ../client/pk-console.c:2188
-#: ../client/pk-console.c:2197 ../client/pk-console.c:2206
-#: ../client/pk-console-test.c:1209 ../client/pk-console-test.c:1221
-#: ../client/pk-console-test.c:1233 ../client/pk-console-test.c:1245
+#: ../client/pk-console.c:2178 ../client/pk-console.c:2187
+#: ../client/pk-console.c:2196 ../client/pk-console.c:2205
+#: ../client/pk-console-test.c:1078 ../client/pk-console-test.c:1090
+#: ../client/pk-console-test.c:1102 ../client/pk-console-test.c:1114
 msgid "A search term is required"
 msgstr "തെരയുന്നതിനുള്ള വാചകം ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:2213 ../client/pk-console-test.c:1255
+#: ../client/pk-console.c:2212 ../client/pk-console-test.c:1124
 msgid "Invalid search type"
 msgstr "തെറ്റായ തരത്തിലുള്ള തെരച്ചില്‍"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:2219
+#: ../client/pk-console.c:2218
 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:2228 ../client/pk-console-test.c:1282
+#: ../client/pk-console.c:2227 ../client/pk-console-test.c:1151
 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:2237 ../client/pk-console-test.c:1293
+#: ../client/pk-console.c:2236 ../client/pk-console-test.c:1162
 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:2245 ../client/pk-console-test.c:1302
+#: ../client/pk-console.c:2244 ../client/pk-console-test.c:1171
 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:2252 ../client/pk-console-test.c:1309
+#: ../client/pk-console.c:2251 ../client/pk-console-test.c:1178
 msgid "Directory not found"
 msgstr "ഡയറക്ടറി ലഭ്യമല്ല"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2260 ../client/pk-console-test.c:1318
+#: ../client/pk-console.c:2259 ../client/pk-console-test.c:1187
 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:2270 ../client/pk-console-test.c:1329
+#: ../client/pk-console.c:2269 ../client/pk-console-test.c:1198
 msgid "A transaction identifier (tid) is required"
 msgstr "ഒരു ട്രാന്‍സാക്ഷന്‍ ഐഡന്റിഫയര്‍ (tid) ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:2287 ../client/pk-console-test.c:1350
+#: ../client/pk-console.c:2286 ../client/pk-console-test.c:1219
 msgid "A package name to resolve is required"
 msgstr "റിസോള്‍വ് ചെയ്യുവാനുള്ള പാക്കേജിന്റെ പേരു് ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:2296 ../client/pk-console.c:2305
-#: ../client/pk-console-test.c:1361 ../client/pk-console-test.c:1372
+#: ../client/pk-console.c:2295 ../client/pk-console.c:2304
+#: ../client/pk-console-test.c:1230 ../client/pk-console-test.c:1241
 msgid "A repository name is required"
 msgstr "സംഭരണിയ്ക്കുള്ള പേരു് ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:2314 ../client/pk-console-test.c:1383
+#: ../client/pk-console.c:2313 ../client/pk-console-test.c:1252
 msgid "A repo name, parameter and value are required"
 msgstr "ഒരു റിപ്പോയുടെ പേരും പരാമീറ്റരും മൂല്ല്യവും ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:2328 ../client/pk-console-test.c:1401
+#: ../client/pk-console.c:2327 ../client/pk-console-test.c:1269
 msgid "An action, e.g. 'update-system' is required"
 msgstr "ഒരു പ്രവര്‍ത്തി ആവശ്യമുണ്ടു്, ഉദാ. 'update-system'"
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:2335 ../client/pk-console-test.c:1408
+#: ../client/pk-console.c:2334 ../client/pk-console-test.c:1276
 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:2342 ../client/pk-console-test.c:1415
+#: ../client/pk-console.c:2341 ../client/pk-console-test.c:931
 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:2352 ../client/pk-console.c:2364
-#: ../client/pk-console.c:2373 ../client/pk-console.c:2391
-#: ../client/pk-console.c:2400 ../client/pk-console-test.c:1425
-#: ../client/pk-console-test.c:1440 ../client/pk-console-test.c:1449
-#: ../client/pk-console-test.c:1469 ../client/pk-console-test.c:1478
-#: ../client/pk-generate-pack.c:243
+#: ../client/pk-console.c:2351 ../client/pk-console.c:2363
+#: ../client/pk-console.c:2372 ../client/pk-console.c:2390
+#: ../client/pk-console.c:2399 ../client/pk-console-test.c:1286
+#: ../client/pk-console-test.c:1301 ../client/pk-console-test.c:1310
+#: ../client/pk-console-test.c:1330 ../client/pk-console-test.c:1339
+#: ../client/pk-generate-pack.c:241 ../client/pk-generate-pack-test.c:285
 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:2382 ../client/pk-console-test.c:1458
+#: ../client/pk-console.c:2381 ../client/pk-console-test.c:1319
 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:2409
+#: ../client/pk-console.c:2408
 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:2419 ../client/pk-console.c:2429
+#: ../client/pk-console.c:2418 ../client/pk-console.c:2428
 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:2483 ../client/pk-console-test.c:1538
+#: ../client/pk-console.c:2482 ../client/pk-console-test.c:1399
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "'%s' എന്ന ഐച്ഛികത്തിനുള്ള പിന്തുണ ലഭ്യമല്ല"
 
 #. TRANSLATORS: User does not have permission to do this
-#: ../client/pk-console.c:2496
+#: ../client/pk-console.c:2495
 msgid "Incorrect privileges for this operation"
 msgstr "ഈ പ്രക്രിയ നടപ്പിലാക്കുന്നതിനുള്ള തെറ്റായ അനുമതികള്‍"
 
@@ -746,34 +748,24 @@ msgstr "à´ˆ പ്രക്രിയ നടപ്പിലാക്കുന്à
 #. /* 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
-#: ../client/pk-console.c:2499 ../client/pk-console-test.c:1550
+#: ../client/pk-console.c:2498 ../client/pk-console-test.c:1411
 msgid "Command failed"
 msgstr "നിര്‍ദ്ദേശം പരാജയപ്പെട്ടു"
 
-#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../client/pk-console-test.c:523 ../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-console-test.c:532 ../client/pk-tools-common.c:138
-msgid "Please choose the correct package: "
-msgstr "ദയവായി ശരിയായ പാക്കേജ് തെരഞ്ഞെടുക്കുക: "
-
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:734
+#: ../client/pk-console-test.c:568
 #, c-format
 msgid "This tool could not find the available package: %s"
 msgstr "ലഭ്യമായ പാക്കേജുകള്‍ കണ്ടുപിടിക്കുവാന്‍ ഈ പ്രയോഗത്തിനു് സാധ്യമായില്ല: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:762
+#: ../client/pk-console-test.c:596
 #, c-format
 msgid "This tool could not find the installed package: %s"
 msgstr "ഇന്‍സ്റ്റോള്‍ ചെയ്ത പാക്കേജുകള്‍ കണ്ടുപിടിക്കുവാന്‍ ഈ പ്രയോഗത്തിനു് സാധ്യമായില്ല: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:790 ../client/pk-console-test.c:818
+#: ../client/pk-console-test.c:624 ../client/pk-console-test.c:652
 #, c-format
 msgid "This tool could not find the package: %s"
 msgstr "പാക്കേജ് കണ്ടുപിടിക്കുവാന്‍ ഈ പ്രയോഗത്തിനു് സാധ്യമായില്ല: %s"
@@ -782,137 +774,145 @@ msgstr "പാക്കേജ് കണ്ടുപിടിക്കുവാà´
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console-test.c:846 ../client/pk-console-test.c:872
-#: ../client/pk-console-test.c:898 ../client/pk-console-test.c:924
-#: ../client/pk-console-test.c:950
+#: ../client/pk-console-test.c:680 ../client/pk-console-test.c:708
+#: ../client/pk-console-test.c:736 ../client/pk-console-test.c:764
+#: ../client/pk-console-test.c:792
 #, c-format
 msgid "This tool could not find all the packages: %s"
 msgstr "എല്ലാ പാക്കേജുകളും കണ്ടുപിടിക്കുവാന്‍ ഈ പ്രയോഗത്തിനു് സാധ്യമായില്ല: %s"
 
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console-test.c:1000
+msgid "Failed to contact PackageKit"
+msgstr "PackageKit-മായി ബന്ധപ്പെടുവാന്‍ സാധിച്ചില്ല"
+
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1261
+#: ../client/pk-console-test.c:1130
 msgid "A package name to install is required"
 msgstr "ഇന്‍സ്റ്റോള്‍ ചെയ്യുവാനുള്ള പാക്കേജിന്റെ പേരു് ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1270
+#: ../client/pk-console-test.c:1139
 msgid "A filename to install is required"
 msgstr "ഇന്‍സ്റ്റോള്‍ ചെയ്യുവാനുള്ള ഫയലിന്റെ പേരു് ആവശ്യമുണ്ടു്"
 
 #. TRANSLATORS: This is the state of the transaction
-#: ../client/pk-generate-pack.c:103
+#: ../client/pk-generate-pack.c:101
 msgid "Downloading"
 msgstr "ഡൌണ്‍ലോട് ചെയ്യുന്നു"
 
 #. TRANSLATORS: This is when the main packages are being downloaded
-#: ../client/pk-generate-pack.c:123
+#: ../client/pk-generate-pack.c:121
 msgid "Downloading packages"
 msgstr "പാക്കേജുകള്‍ ഡൌണ്‍ലോട് ചെയ്യുന്നു"
 
 #. TRANSLATORS: This is when the dependency packages are being downloaded
-#: ../client/pk-generate-pack.c:128
+#: ../client/pk-generate-pack.c:126
 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:190
+#: ../client/pk-generate-pack.c:188 ../client/pk-generate-pack-test.c:225
 msgid "Set the file name of dependencies to be excluded"
 msgstr "ചേര്‍ക്കേണ്ടാത്ത ഡിപന്‍ഡസികളുടെ ഫയല്‍ നാമം സജ്ജമാക്കുക"
 
 #. TRANSLATORS: the output location
-#: ../client/pk-generate-pack.c:193
+#: ../client/pk-generate-pack.c:191 ../client/pk-generate-pack-test.c:228
 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:196
+#: ../client/pk-generate-pack.c:194 ../client/pk-generate-pack-test.c:231
 msgid "The package to be put into the service pack"
 msgstr "സര്‍വീസ് പാക്കിലേക്ക് ചേര്‍ക്കേണ്ട പാക്കേജ്"
 
 #. TRANSLATORS: put all pending updates in the pack
-#: ../client/pk-generate-pack.c:199
+#: ../client/pk-generate-pack.c:197 ../client/pk-generate-pack-test.c:234
 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:227
+#: ../client/pk-generate-pack.c:225 ../client/pk-generate-pack-test.c:269
 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:235
+#: ../client/pk-generate-pack.c:233 ../client/pk-generate-pack-test.c:277
 msgid "Both options selected."
 msgstr "രണ്ടു് ഐച്ഛികങ്ങളും തെരഞ്ഞെടുത്തിട്ടില്ല."
 
 #. TRANSLATORS: This is when the user fails to supply the output
-#: ../client/pk-generate-pack.c:251
+#: ../client/pk-generate-pack.c:249 ../client/pk-generate-pack-test.c:293
 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:269 ../client/pk-generate-pack.c:275
+#. 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-test.c:321 ../client/pk-generate-pack-test.c:327
 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:282
+#: ../client/pk-generate-pack.c:280 ../client/pk-generate-pack-test.c:334
 msgid ""
 "Service packs cannot be created as PackageKit was not built with libarchive "
 "support."
 msgstr "libarchive പിന്തുണ ഇല്ലാതെ PackageKit ഉണ്ടാക്കിയതിനാല്‍, സര്‍വീസ് പാക്കുകള്‍ ലഭ്യമാകുന്നതല്ല."
 
 #. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
-#: ../client/pk-generate-pack.c:293
+#: ../client/pk-generate-pack.c:291 ../client/pk-generate-pack-test.c:345
 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:309
+#: ../client/pk-generate-pack.c:307 ../client/pk-generate-pack-test.c:361
 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:312
+#: ../client/pk-generate-pack.c:310 ../client/pk-generate-pack-test.c:364
 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:325
+#: ../client/pk-generate-pack.c:323 ../client/pk-generate-pack-test.c:377
 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:335
+#: ../client/pk-generate-pack.c:333 ../client/pk-generate-pack-test.c:389
 msgid "Failed to open package list."
 msgstr "പാക്കേജുകളുടെ പട്ടിക തുറക്കുന്നതില്‍ പരാജയം."
 
 #. TRANSLATORS: The package name is being matched up to available packages
-#: ../client/pk-generate-pack.c:346
+#: ../client/pk-generate-pack.c:344 ../client/pk-generate-pack-test.c:398
 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:350
+#: ../client/pk-generate-pack.c:348 ../client/pk-generate-pack-test.c:402
 #, 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:367
+#: ../client/pk-generate-pack.c:365 ../client/pk-generate-pack-test.c:410
 msgid "Creating service pack..."
 msgstr "സര്‍വീസ് പാക്ക് ഉണ്ടാക്കുന്നു..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:374
+#: ../client/pk-generate-pack.c:372 ../client/pk-generate-pack-test.c:425
 #, c-format
 msgid "Service pack created '%s'"
 msgstr "'%s' സര്‍വീസ് പാക്ക് ഉണ്ടാക്കിയിരിക്കുന്നു"
 
 #. TRANSLATORS: we failed to make te file
-#: ../client/pk-generate-pack.c:379
+#: ../client/pk-generate-pack.c:377 ../client/pk-generate-pack-test.c:430
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "'%s' ഉണ്ടാക്കുന്നതില്‍ പരാജയം: %s"
@@ -934,104 +934,30 @@ msgstr "ഇടപാടുകളുടെ പട്ടിക ലഭ്യമാà
 msgid "Failed to get daemon state"
 msgstr "ഡെമണ്‍ അവസ്ഥ ലഭ്യമാക്കുന്നതില്‍ പരാജയം"
 
-#. ask the user
-#: ../client/pk-task-text.c:64
-msgid "Do you want to allow installing of unsigned software?"
-msgstr "ഒപ്പില്ലാത്ത സോഫ്റ്റ്‌വെയര്‍ നിങ്ങള്‍ക്കു് ഇന്‍സ്റ്റോള്‍ ചെയ്യണമോ?"
-
-#: ../client/pk-task-text.c:68
-msgid "The unsigned software will not be installed."
-msgstr "ഒപ്പിട്ടിട്ടില്ലാത്ത സോഫ്റ്റ്‌വെയര്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്യുന്നതല്ല."
-
-#: ../client/pk-task-text.c:100
-msgid "Software source signature required"
-msgstr "സോഫ്റ്റ്‌വെയര്‍ സോഴ്സ് ഒപ്പു് ആവശ്യമുണ്ടു്"
-
-#: ../client/pk-task-text.c:102
-msgid "Software source name"
-msgstr "സോഫ്റ്റ്‌വെയര്‍ സോഴ്സിന്റെ പേരു്"
-
-#: ../client/pk-task-text.c:103
-msgid "Key URL"
-msgstr "കീ യുആര്‍എല്‍"
-
-#: ../client/pk-task-text.c:104
-msgid "Key user"
-msgstr "കീ ഉപയോക്താവു്"
-
-#: ../client/pk-task-text.c:105
-msgid "Key ID"
-msgstr "കീ ID"
-
-#: ../client/pk-task-text.c:106
-msgid "Key fingerprint"
-msgstr "കീ വിരലടയാളം"
-
-#: ../client/pk-task-text.c:107
-msgid "Key Timestamp"
-msgstr "കീ ടൈംസ്ടാമ്പ്"
-
-#: ../client/pk-task-text.c:151
-msgid "End user licence agreement required"
-msgstr "ഉപയോക്താവിനുള്ള ലൈസന്‍സ് സമ്മതപ്പത്രം ആവശ്യമുണ്ടു്"
-
-#: ../client/pk-task-text.c:152
-msgid "EULA ID"
-msgstr "EULA ID"
-
-#: ../client/pk-task-text.c:155
-msgid "Agreement"
-msgstr "സമ്മതപ്പത്രം"
-
-#. ask the user
-#: ../client/pk-task-text.c:161
-msgid "Do you accept this agreement?"
-msgstr "ഈ സമ്മതപ്പത്രം നിങ്ങള്‍ അംഗീകരിക്കുന്നുവോ?"
-
-#: ../client/pk-task-text.c:165
-msgid "The agreement was not accepted."
-msgstr "സമ്മതപ്പത്രം സ്വീകരിക്കുന്നില്ല."
-
-#: ../client/pk-task-text.c:194
-msgid "Media change required"
-msgstr "മീഡിയാ മാറ്റേണ്ടതുണ്ടു്"
-
-#: ../client/pk-task-text.c:195
-msgid "Media type"
-msgstr "മീഡിയാ തരം"
-
-#: ../client/pk-task-text.c:196
-msgid "Media ID"
-msgstr "മീഡിയാ ID "
-
-#: ../client/pk-task-text.c:197
-msgid "Text"
-msgstr "വാക്യം"
-
-#. ask the user
-#: ../client/pk-task-text.c:201
-msgid "Please insert the correct media"
-msgstr "ദയവായി ശരിയായ മീഡിയാ തെരഞ്ഞെടുക്കുക"
-
-#: ../client/pk-task-text.c:205
-msgid "The correct media was not inserted."
-msgstr "ശരിയായ മീഡിയാ നല്‍കിയിട്ടില്ല."
-
-#: ../client/pk-task-text.c:303
-msgid "The transaction did not proceed."
-msgstr "ഇടപാടു് തുടര്‍ന്നില്ല."
-
-#: ../client/pk-text.c:50
+#: ../client/pk-tools-common.c:51
+#: ../lib/packagekit-glib2/pk-console-shared.c:53
 #, c-format
 msgid "Please enter a number from 1 to %i: "
 msgstr "ദയവായി 1 മുതല്‍ %i വരെയുള്ള ഒരു അക്കം നല്‍കുക: "
 
 #. TRANSLATORS: The package was not found in any software sources
-#: ../client/pk-tools-common.c:119
+#: ../client/pk-tools-common.c:188
 #, 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:200
+#: ../lib/packagekit-glib2/pk-console-shared.c:153
+msgid "More than one package matches:"
+msgstr "ഒന്നില്‍ കൂടുതല്‍ ചേരുന്ന പാക്കേജുകള്‍:"
+
+#. TRANSLATORS: This finds out which package in the list to use
+#: ../client/pk-tools-common.c:207
+#: ../lib/packagekit-glib2/pk-console-shared.c:162
+msgid "Please choose the correct package: "
+msgstr "ദയവായി ശരിയായ പാക്കേജ് തെരഞ്ഞെടുക്കുക: "
+
 #. TRANSLATORS: when we are getting data from the daemon
 #: ../contrib/browser-plugin/pk-plugin-install.c:466
 msgid "Getting package information..."
@@ -1088,90 +1014,110 @@ msgstr "ഇന്‍സ്റ്റോള്‍ ചെയ്യുന്നു..
 
 #. TRANSLATORS: downloading repo data so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:349
+#: ../contrib/command-not-found/pk-command-not-found-test.c:358
 msgid "Downloading details about the software sources."
 msgstr "സോഫ്റ്റ്‌വെയര്‍ സോഴ്സുകളെപ്പറ്റിയുള്ള വിവരങ്ങള്‍ ഡൌണ്‍ലോട് ചെയ്യുന്നു."
 
 #. TRANSLATORS: downloading file lists so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:353
+#: ../contrib/command-not-found/pk-command-not-found-test.c:362
 msgid "Downloading filelists (this may take some time to complete)."
 msgstr "ഫയല്‍ലിസ്റ്റുകള്‍ ഡൌണ്‍ലോട് ചെയ്യുന്നു (ഇതല്‍പം സമയമെടുക്കുന്നു)."
 
 #. TRANSLATORS: waiting for native lock
 #: ../contrib/command-not-found/pk-command-not-found.c:357
+#: ../contrib/command-not-found/pk-command-not-found-test.c:366
 msgid "Waiting for package manager lock."
 msgstr "പാക്കേജ് മാനേജര്‍ ലോക്കിനായി കാത്തിരിക്കുന്നു."
 
 #. TRANSLATORS: loading package cache so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:361
+#: ../contrib/command-not-found/pk-command-not-found-test.c:370
 msgid "Loading list of packages."
 msgstr "പാക്കേജുകളുടെ പട്ടിക ലഭ്യമാക്കുന്നു."
 
 #. TRANSLATORS: we failed to find the package, this shouldn't happen
 #: ../contrib/command-not-found/pk-command-not-found.c:420
+#: ../contrib/command-not-found/pk-command-not-found-test.c:444
 msgid "Failed to search for file"
 msgstr "ഫയല്‍ കണ്ടുപിടിക്കുന്നതില്‍ പരാജയപ്പെട്ടു"
 
 #. TRANSLATORS: we failed to launch the executable, the error follows
 #: ../contrib/command-not-found/pk-command-not-found.c:557
+#: ../contrib/command-not-found/pk-command-not-found-test.c:570
 msgid "Failed to launch:"
 msgstr "ലഭ്യമാക്കുന്നതില്‍ പരാജയപ്പെട്ടു:"
 
 #. TRANSLATORS: tool that gets called when the command is not found
 #: ../contrib/command-not-found/pk-command-not-found.c:632
+#: ../contrib/command-not-found/pk-command-not-found-test.c:630
 msgid "PackageKit Command Not Found"
 msgstr "പാക്കേജ്കിറ്റ് കമാന്‍ഡ് ലഭ്യമായില്ല"
 
 #. TRANSLATORS: the prefix of all the output telling the user why it's not executing
 #: ../contrib/command-not-found/pk-command-not-found.c:658
+#: ../contrib/command-not-found/pk-command-not-found-test.c:658
 msgid "Command not found."
 msgstr "കമാന്‍ഡ് ലഭ്യമായില്ല."
 
 #. TRANSLATORS: tell the user what we think the command is
 #: ../contrib/command-not-found/pk-command-not-found.c:665
+#: ../contrib/command-not-found/pk-command-not-found-test.c:665
 msgid "Similar command is:"
 msgstr "ഇതു് പോലുള്ള കമാന്‍ഡ്:"
 
 #. TRANSLATORS: Ask the user if we should run the similar command
 #: ../contrib/command-not-found/pk-command-not-found.c:674
+#: ../contrib/command-not-found/pk-command-not-found-test.c:674
 msgid "Run similar command:"
 msgstr "ഇതുപോലുള്ള കമാന്‍ഡ് പ്രവര്‍ത്തിക്കുക:"
 
 #. TRANSLATORS: show the user a list of commands that they could have meant
 #. TRANSLATORS: show the user a list of commands we could run
+#. TRANSLATORS: show the user a list of commands that they could have meant
+#. TRANSLATORS: show the user a list of commands we could run
 #: ../contrib/command-not-found/pk-command-not-found.c:686
 #: ../contrib/command-not-found/pk-command-not-found.c:695
+#: ../contrib/command-not-found/pk-command-not-found-test.c:686
+#: ../contrib/command-not-found/pk-command-not-found-test.c:695
 msgid "Similar commands are:"
 msgstr "ഇതു് പോലുള്ള കമാന്‍ഡുകള്‍:"
 
 #. TRANSLATORS: ask the user to choose a file to run
 #: ../contrib/command-not-found/pk-command-not-found.c:702
+#: ../contrib/command-not-found/pk-command-not-found-test.c:702
 msgid "Please choose a command to run"
 msgstr "പ്രവര്‍ത്തിപ്പിക്കുന്നതിനുള്ള കമാന്‍ഡ് ദയവായി തെരഞ്ഞെടുക്കുക"
 
 #. TRANSLATORS: tell the user what package provides the command
 #: ../contrib/command-not-found/pk-command-not-found.c:721
+#: ../contrib/command-not-found/pk-command-not-found-test.c:721
 msgid "The package providing this file is:"
 msgstr "ഈ ഫയല്‍ ലഭ്യമാക്കുന്ന പാക്കേജ്:"
 
 #. TRANSLATORS: as the user if we want to install a package to provide the command
 #: ../contrib/command-not-found/pk-command-not-found.c:726
+#: ../contrib/command-not-found/pk-command-not-found-test.c:726
 #, c-format
 msgid "Install package '%s' to provide command '%s'?"
 msgstr "'%s' പാക്കേജ് ഇന്‍സ്റ്റോള്‍ ചെയ്യുക, ഇതു് '%s' നിര്‍ദ്ദേശം നല്‍കുന്നു?"
 
 #. TRANSLATORS: Show the user a list of packages that provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:747
+#: ../contrib/command-not-found/pk-command-not-found-test.c:747
 msgid "Packages providing this file are:"
 msgstr "ഈ ഫയല്‍ ലഭ്യമാക്കുന്ന പാക്കേജുകള്‍:"
 
 #. TRANSLATORS: Show the user a list of packages that they can install to provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:756
+#: ../contrib/command-not-found/pk-command-not-found-test.c:756
 msgid "Suitable packages are:"
 msgstr "ഉചിതമായ പാക്കേജുകള്‍:"
 
 #. get selection
 #. TRANSLATORS: ask the user to choose a file to install
 #: ../contrib/command-not-found/pk-command-not-found.c:764
+#: ../contrib/command-not-found/pk-command-not-found-test.c:764
 msgid "Please choose a package to install"
 msgstr "ദയവായി ഇന്‍സ്റ്റോള്‍ ചെയ്യുന്നതിനായി ഒരു പാക്കേജ് തെരഞ്ഞെടുക്കുക"
 
@@ -1457,6 +1403,93 @@ msgstr "പാക്കേജ്കിറ്റിനുള്ള പാക്à´
 msgid "PackageKit Service Pack"
 msgstr "പാക്കേജ്കിറ്റിനുള്ള സര്‍വീസ് പാക്ക്"
 
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:64
+msgid "Do you want to allow installing of unsigned software?"
+msgstr "ഒപ്പില്ലാത്ത സോഫ്റ്റ്‌വെയര്‍ നിങ്ങള്‍ക്കു് ഇന്‍സ്റ്റോള്‍ ചെയ്യണമോ?"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:68
+msgid "The unsigned software will not be installed."
+msgstr "ഒപ്പിട്ടിട്ടില്ലാത്ത സോഫ്റ്റ്‌വെയര്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്യുന്നതല്ല."
+
+#: ../lib/packagekit-glib2/pk-task-text.c:100
+msgid "Software source signature required"
+msgstr "സോഫ്റ്റ്‌വെയര്‍ സോഴ്സ് ഒപ്പു് ആവശ്യമുണ്ടു്"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:102
+msgid "Software source name"
+msgstr "സോഫ്റ്റ്‌വെയര്‍ സോഴ്സിന്റെ പേരു്"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:103
+msgid "Key URL"
+msgstr "കീ യുആര്‍എല്‍"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:104
+msgid "Key user"
+msgstr "കീ ഉപയോക്താവു്"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:105
+msgid "Key ID"
+msgstr "കീ ID"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:106
+msgid "Key fingerprint"
+msgstr "കീ വിരലടയാളം"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:107
+msgid "Key Timestamp"
+msgstr "കീ ടൈംസ്ടാമ്പ്"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:151
+msgid "End user licence agreement required"
+msgstr "ഉപയോക്താവിനുള്ള ലൈസന്‍സ് സമ്മതപ്പത്രം ആവശ്യമുണ്ടു്"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:152
+msgid "EULA ID"
+msgstr "EULA ID"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:155
+msgid "Agreement"
+msgstr "സമ്മതപ്പത്രം"
+
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:161
+msgid "Do you accept this agreement?"
+msgstr "ഈ സമ്മതപ്പത്രം നിങ്ങള്‍ അംഗീകരിക്കുന്നുവോ?"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:165
+msgid "The agreement was not accepted."
+msgstr "സമ്മതപ്പത്രം സ്വീകരിക്കുന്നില്ല."
+
+#: ../lib/packagekit-glib2/pk-task-text.c:194
+msgid "Media change required"
+msgstr "മീഡിയാ മാറ്റേണ്ടതുണ്ടു്"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:195
+msgid "Media type"
+msgstr "മീഡിയാ തരം"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:196
+msgid "Media ID"
+msgstr "മീഡിയാ ID "
+
+#: ../lib/packagekit-glib2/pk-task-text.c:197
+msgid "Text"
+msgstr "വാക്യം"
+
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:201
+msgid "Please insert the correct media"
+msgstr "ദയവായി ശരിയായ മീഡിയാ തെരഞ്ഞെടുക്കുക"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:205
+msgid "The correct media was not inserted."
+msgstr "ശരിയായ മീഡിയാ നല്‍കിയിട്ടില്ല."
+
+#: ../lib/packagekit-glib2/pk-task-text.c:303
+msgid "The transaction did not proceed."
+msgstr "ഇടപാടു് തുടര്‍ന്നില്ല."
+
 #. SECURITY:
 #. - Normal users do not require admin authentication to accept new
 #. licence agreements.
commit e3fb292ece690035cf727591c325114dba7a85f5
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 12:41:10 2009 +0100

    Switch the doc-generation to glib2

diff --git a/docs/api/Makefile.am b/docs/api/Makefile.am
index b3047d4..35e5eb3 100644
--- a/docs/api/Makefile.am
+++ b/docs/api/Makefile.am
@@ -16,7 +16,7 @@ DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
 # The directory containing the source code. Relative to $(srcdir).
 # gtk-doc will search all .c & .h files beneath here for inline comments
 # documenting the functions and macros.
-DOC_SOURCE_DIR=../../lib/packagekit-glib
+DOC_SOURCE_DIR=../../lib/packagekit-glib2
 
 # Extra options to pass to gtkdoc-scangobj. Not normally needed.
 SCANGOBJ_OPTIONS=
@@ -34,15 +34,13 @@ MKTMPL_OPTIONS=
 FIXXREF_OPTIONS=
 
 # Used for dependencies. The docs will be rebuilt if any of these change.
-HFILE_GLOB=$(top_srcdir)/lib/packagekit-glib/pk-*.h
-CFILE_GLOB=$(top_srcdir)/lib/packagekit-glib/pk-*.c
+HFILE_GLOB=$(top_srcdir)/lib/packagekit-glib2/pk-*.h
+CFILE_GLOB=$(top_srcdir)/lib/packagekit-glib2/pk-*.c
 
 # Header files to ignore when scanning.
 IGNORE_HFILES =						\
 	config.h					\
 	pk-marshal.h					\
-	egg-dbus-monitor.h				\
-	pk-obj-list.h					\
 	$(NULL)
 
 # Images to copy into HTML directory.
@@ -78,17 +76,20 @@ INCLUDES =						\
 	$(POLKIT_CFLAGS)				\
 	$(DBUS_CFLAGS)					\
 	$(GLIB_CFLAGS)					\
-	-I$(top_builddir)/lib/packagekit-glib		\
-	-I$(top_srcdir)/lib/packagekit-glib		\
+	-I$(top_builddir)/lib/packagekit-glib2		\
+	-I$(top_srcdir)/lib/packagekit-glib2		\
 	$(NULL)
 
-PK_GLIB_LIBS = $(top_builddir)/lib/packagekit-glib/libpackagekit-glib.la
+PK_GLIB2_LIBS =						\
+	$(top_builddir)/lib/packagekit-glib2/libpackagekit-glib2.la	\
+	$(top_builddir)/lib/packagekit-glib2/libpackagekitprivate.a	\
+	$(NULL)
 
 GTKDOC_LIBS =						\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
 	$(SQLITE_LIBS)					\
-	$(PK_GLIB_LIBS)					\
+	$(PK_GLIB2_LIBS)					\
 	$(POLKIT_LIBS)					\
 	$(NULL)
 
diff --git a/docs/api/PackageKit-docs.sgml b/docs/api/PackageKit-docs.sgml
index 9846856..2aa1a72 100644
--- a/docs/api/PackageKit-docs.sgml
+++ b/docs/api/PackageKit-docs.sgml
@@ -64,12 +64,11 @@
         This part documents GObjects used in libpackagekit.
       </para>
     </partintro>
-    <xi:include href="xml/pk-connection.xml"/>
-    <xi:include href="xml/pk-desktop.xml"/>
     <xi:include href="xml/pk-client.xml"/>
-    <xi:include href="xml/pk-package-list.xml"/>
     <xi:include href="xml/pk-control.xml"/>
-    <xi:include href="xml/pk-task-list.xml"/>
+    <xi:include href="xml/pk-task.xml"/>
+    <xi:include href="xml/pk-desktop.xml"/>
+    <xi:include href="xml/pk-service-pack.xml"/>
   </reference>
 
   <reference id="libpackagekit-helpers">
@@ -83,6 +82,7 @@
     <xi:include href="xml/pk-common.xml"/>
     <xi:include href="xml/pk-enum.xml"/>
     <xi:include href="xml/pk-package-id.xml"/>
+    <xi:include href="xml/pk-package-ids.xml"/>
   </reference>
 
   <reference id="faq">
diff --git a/lib/packagekit-glib2/Makefile.am b/lib/packagekit-glib2/Makefile.am
index ab2dd09..c4389d0 100644
--- a/lib/packagekit-glib2/Makefile.am
+++ b/lib/packagekit-glib2/Makefile.am
@@ -125,6 +125,8 @@ libpackagekitprivate_a_SOURCES =				\
 	pk-task-sync.h						\
 	pk-task-text.c						\
 	pk-task-text.h						\
+	pk-task-wrapper.c					\
+	pk-task-wrapper.h					\
 	$(NULL)
 
 libpackagekitprivate_a_CFLAGS =					\
commit b9c04ef7710200305881fe12533260b867534001
Author: beckerde <beckerde at fedoraproject.org>
Date:   Wed Sep 9 11:35:03 2009 +0000

    Sending translation for Spanish

diff --git a/po/es.po b/po/es.po
index fd7696b..d491a2f 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-09-06 16:39+0000\n"
-"PO-Revision-Date: 2009-09-06 14:01-0300\n"
+"POT-Creation-Date: 2009-09-09 08:33+0000\n"
+"PO-Revision-Date: 2009-09-09 08:32-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,127 +20,127 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #. TRANSLATORS: this is an atomic transaction
-#: ../client/pk-console.c:238
-#: ../client/pk-console-test.c:147
+#: ../client/pk-console.c:237
+#: ../client/pk-console-test.c:143
 msgid "Transaction"
 msgstr "Transacción"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:240
-#: ../client/pk-console-test.c:149
+#: ../client/pk-console.c:239
+#: ../client/pk-console-test.c:145
 msgid "System time"
 msgstr "Hora del sistema"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:242
-#: ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241
+#: ../client/pk-console-test.c:147
 msgid "Succeeded"
 msgstr "Existosa"
 
-#: ../client/pk-console.c:242
-#: ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241
+#: ../client/pk-console-test.c:147
 msgid "True"
 msgstr "Verdadero"
 
-#: ../client/pk-console.c:242
-#: ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241
+#: ../client/pk-console-test.c:147
 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:244
-#: ../client/pk-console-test.c:153
+#: ../client/pk-console.c:243
+#: ../client/pk-console-test.c:149
 #: ../src/pk-polkit-action-lookup.c:327
 msgid "Role"
 msgstr "Rol"
 
 #. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:249
-#: ../client/pk-console-test.c:158
+#: ../client/pk-console.c:248
+#: ../client/pk-console-test.c:154
 msgid "Duration"
 msgstr "Duración"
 
-#: ../client/pk-console.c:249
-#: ../client/pk-console-test.c:158
+#: ../client/pk-console.c:248
+#: ../client/pk-console-test.c:154
 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:253
-#: ../client/pk-console-test.c:162
+#: ../client/pk-console.c:252
+#: ../client/pk-console-test.c:158
 #: ../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:255
-#: ../client/pk-console-test.c:164
+#: ../client/pk-console.c:254
+#: ../client/pk-console-test.c:160
 msgid "User ID"
 msgstr "ID del usuario"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:262
-#: ../client/pk-console-test.c:171
+#: ../client/pk-console.c:261
+#: ../client/pk-console-test.c:167
 msgid "Username"
 msgstr "Nombre de usuario"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:266
-#: ../client/pk-console-test.c:175
+#: ../client/pk-console.c:265
+#: ../client/pk-console-test.c:171
 msgid "Real name"
 msgstr "Nombre real"
 
-#: ../client/pk-console.c:274
-#: ../client/pk-console-test.c:183
+#: ../client/pk-console.c:273
+#: ../client/pk-console-test.c:179
 msgid "Affected packages:"
 msgstr "Paquete afectados:"
 
-#: ../client/pk-console.c:276
-#: ../client/pk-console-test.c:185
+#: ../client/pk-console.c:275
+#: ../client/pk-console-test.c:181
 msgid "Affected packages: None"
 msgstr "Paquetes afectados: Ninguno"
 
 #. TRANSLATORS: When processing, we might have to remove other dependencies
-#: ../client/pk-console.c:337
-#: ../client/pk-task-text.c:220
+#: ../client/pk-console.c:336
+#: ../lib/packagekit-glib2/pk-task-text.c:220
 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:340
-#: ../client/pk-task-text.c:225
+#: ../client/pk-console.c:339
+#: ../lib/packagekit-glib2/pk-task-text.c:225
 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:343
-#: ../client/pk-task-text.c:230
+#: ../client/pk-console.c:342
+#: ../lib/packagekit-glib2/pk-task-text.c:230
 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:346
-#: ../client/pk-task-text.c:235
+#: ../client/pk-console.c:345
+#: ../lib/packagekit-glib2/pk-task-text.c:235
 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:349
-#: ../client/pk-task-text.c:240
+#: ../client/pk-console.c:348
+#: ../lib/packagekit-glib2/pk-task-text.c:240
 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:363
-#: ../client/pk-console-test.c:205
+#: ../client/pk-console.c:362
+#: ../client/pk-console-test.c:201
 msgid "Distribution"
 msgstr "Distribución"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:365
-#: ../client/pk-console-test.c:207
+#: ../client/pk-console.c:364
+#: ../client/pk-console-test.c:203
 msgid "Type"
 msgstr "Tipo"
 
@@ -148,55 +148,55 @@ msgstr "Tipo"
 #. TRANSLATORS: this is the summary of the group
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:367
-#: ../client/pk-console.c:390
-#: ../client/pk-console-test.c:209
-#: ../client/pk-console-test.c:230
+#: ../client/pk-console.c:366
+#: ../client/pk-console.c:389
+#: ../client/pk-console-test.c:205
+#: ../client/pk-console-test.c:226
 msgid "Summary"
 msgstr "Resúmen"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:379
-#: ../client/pk-console-test.c:219
+#: ../client/pk-console.c:378
+#: ../client/pk-console-test.c:215
 msgid "Category"
 msgstr "Categoría"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:381
-#: ../client/pk-console-test.c:221
+#: ../client/pk-console.c:380
+#: ../client/pk-console-test.c:217
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:384
-#: ../client/pk-console-test.c:224
+#: ../client/pk-console.c:383
+#: ../client/pk-console-test.c:220
 msgid "Parent"
 msgstr "Padre"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:387
-#: ../client/pk-console-test.c:227
+#: ../client/pk-console.c:386
+#: ../client/pk-console-test.c:223
 msgid "Name"
 msgstr "Nombre"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:393
-#: ../client/pk-console-test.c:233
+#: ../client/pk-console.c:392
+#: ../client/pk-console-test.c:229
 msgid "Icon"
 msgstr "Icono"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:408
-#: ../client/pk-console-test.c:247
+#: ../client/pk-console.c:407
+#: ../client/pk-console-test.c:243
 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:410
-#: ../client/pk-console-test.c:253
-#: ../client/pk-task-text.c:101
-#: ../client/pk-task-text.c:153
+#: ../client/pk-console.c:409
+#: ../client/pk-console-test.c:249
+#: ../lib/packagekit-glib2/pk-task-text.c:101
+#: ../lib/packagekit-glib2/pk-task-text.c:153
 #: ../src/pk-polkit-action-lookup.c:352
 msgid "Package"
 msgid_plural "Packages"
@@ -204,468 +204,470 @@ msgstr[0] "Paquete"
 msgstr[1] "Paquetes"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:413
-#: ../client/pk-console-test.c:256
+#: ../client/pk-console.c:412
+#: ../client/pk-console-test.c:252
 msgid "Updates"
 msgstr "Actualizaciones"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:417
-#: ../client/pk-console-test.c:260
+#: ../client/pk-console.c:416
+#: ../client/pk-console-test.c:256
 msgid "Obsoletes"
 msgstr "Sustituye"
 
 #. TRANSLATORS: details about the update, the vendor URLs
-#: ../client/pk-console.c:421
-#: ../client/pk-console-test.c:264
-#: ../client/pk-task-text.c:154
+#: ../client/pk-console.c:420
+#: ../client/pk-console-test.c:260
+#: ../lib/packagekit-glib2/pk-task-text.c:154
 msgid "Vendor"
 msgstr "Fabricante"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:425
-#: ../client/pk-console-test.c:268
+#: ../client/pk-console.c:424
+#: ../client/pk-console-test.c:264
 msgid "Bugzilla"
 msgstr "Bugzilla"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:429
-#: ../client/pk-console-test.c:272
+#: ../client/pk-console.c:428
+#: ../client/pk-console-test.c:268
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:433
-#: ../client/pk-console-test.c:276
+#: ../client/pk-console.c:432
+#: ../client/pk-console-test.c:272
 msgid "Restart"
 msgstr "Reiniciar"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:437
-#: ../client/pk-console-test.c:280
+#: ../client/pk-console.c:436
+#: ../client/pk-console-test.c:276
 msgid "Update text"
 msgstr "Texto de actualización"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:441
-#: ../client/pk-console-test.c:284
+#: ../client/pk-console.c:440
+#: ../client/pk-console-test.c:280
 msgid "Changes"
 msgstr "Cambios"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:445
-#: ../client/pk-console-test.c:288
+#: ../client/pk-console.c:444
+#: ../client/pk-console-test.c:284
 msgid "State"
 msgstr "Estado"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:450
-#: ../client/pk-console-test.c:293
+#: ../client/pk-console.c:449
+#: ../client/pk-console-test.c:289
 msgid "Issued"
 msgstr "Emitido"
 
 #. TRANSLATORS: details about the update, date the update was updated
-#: ../client/pk-console.c:455
-#: ../client/pk-console-test.c:298
+#: ../client/pk-console.c:454
+#: ../client/pk-console-test.c:294
 msgid "Updated"
 msgstr "Actualizado"
 
 #. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:475
-#: ../client/pk-console-test.c:316
+#: ../client/pk-console.c:474
+#: ../client/pk-console-test.c:312
 msgid "Enabled"
 msgstr "Habilitado"
 
 #. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:478
-#: ../client/pk-console-test.c:319
+#: ../client/pk-console.c:477
+#: ../client/pk-console-test.c:315
 msgid "Disabled"
 msgstr "Deshabilitado"
 
-#: ../client/pk-console.c:555
-#: ../client/pk-console.c:557
+#: ../client/pk-console.c:554
+#: ../client/pk-console.c:556
 msgid "Percentage"
 msgstr "Porcentaje"
 
-#: ../client/pk-console.c:557
+#: ../client/pk-console.c:556
 msgid "Unknown"
 msgstr "Desconocido"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:599
-#: ../client/pk-console-test.c:341
+#: ../client/pk-console.c:598
+#: ../client/pk-console-test.c:337
 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:602
-#: ../client/pk-console-test.c:344
+#: ../client/pk-console.c:601
+#: ../client/pk-console-test.c:340
 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:605
-#: ../client/pk-console-test.c:347
+#: ../client/pk-console.c:604
+#: ../client/pk-console-test.c:343
 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:608
-#: ../client/pk-console-test.c:350
+#: ../client/pk-console.c:607
+#: ../client/pk-console-test.c:346
 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:611
-#: ../client/pk-console-test.c:353
+#: ../client/pk-console.c:610
+#: ../client/pk-console-test.c:349
 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:666
-#: ../client/pk-console-test.c:704
+#: ../client/pk-console.c:665
+#: ../client/pk-console-test.c:538
 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:669
-#: ../client/pk-console-test.c:707
+#: ../client/pk-console.c:668
+#: ../client/pk-console-test.c:541
 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:672
+#: ../client/pk-console.c:671
 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:675
-#: ../client/pk-console-test.c:710
+#: ../client/pk-console.c:674
+#: ../client/pk-console-test.c:544
 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:678
-#: ../client/pk-console-test.c:713
+#: ../client/pk-console.c:677
+#: ../client/pk-console-test.c:547
 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:810
+#: ../client/pk-console.c:809
 #, 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:818
+#: ../client/pk-console.c:817
 #, 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: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
+#: ../client/pk-console.c:843
+#: ../client/pk-console.c:891
+#: ../client/pk-console.c:915
+#: ../client/pk-console.c:963
+#: ../client/pk-console.c:1059
+#: ../client/pk-console.c:1172
+#: ../client/pk-console.c:1233
+#: ../client/pk-tools-common.c:132
+#: ../client/pk-tools-common.c:151
+#: ../client/pk-tools-common.c:159
 #, c-format
 msgid "Internal error: %s"
 msgstr "Error interno: %s"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
 #. ask the user
-#: ../client/pk-console.c:876
-#: ../client/pk-console.c:948
-#: ../client/pk-console.c:1266
-#: ../client/pk-task-text.c:299
+#: ../client/pk-console.c:875
+#: ../client/pk-console.c:947
+#: ../client/pk-console.c:1265
+#: ../lib/packagekit-glib2/pk-task-text.c:299
 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:881
-#: ../client/pk-console.c:953
+#: ../client/pk-console.c:880
+#: ../client/pk-console.c:952
 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:900
-#: ../client/pk-console.c:1634
+#: ../client/pk-console.c:899
+#: ../client/pk-console.c:1633
 #, 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:972
+#: ../client/pk-console.c:971
 #, 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:1028
+#: ../client/pk-console.c:1027
 #, 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:1051
-#: ../client/pk-console.c:1089
-#: ../client/pk-console.c:1118
+#: ../client/pk-console.c:1050
+#: ../client/pk-console.c:1088
+#: ../client/pk-console.c:1117
 #, 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:1104
+#: ../client/pk-console.c:1103
 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:1109
+#: ../client/pk-console.c:1108
 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:1150
+#: ../client/pk-console.c:1149
 #, 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:1181
+#: ../client/pk-console.c:1180
 #, 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:1213
-#: ../client/pk-console.c:1225
-#: ../client/pk-console.c:1280
+#: ../client/pk-console.c:1212
+#: ../client/pk-console.c:1224
+#: ../client/pk-console.c:1279
 #, 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:1271
+#: ../client/pk-console.c:1270
 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:1304
-#: ../client/pk-console.c:1312
+#: ../client/pk-console.c:1303
+#: ../client/pk-console.c:1311
 #, 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:1334
-#: ../client/pk-console.c:1342
+#: ../client/pk-console.c:1333
+#: ../client/pk-console.c:1341
 #, 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:1364
-#: ../client/pk-console.c:1372
+#: ../client/pk-console.c:1363
+#: ../client/pk-console.c:1371
 #, 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:1394
+#: ../client/pk-console.c:1393
 #, 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:1402
+#: ../client/pk-console.c:1401
 #, 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:1424
+#: ../client/pk-console.c:1423
 #, 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:1429
-#: ../client/pk-console.c:1485
-#: ../client/pk-console.c:1560
+#: ../client/pk-console.c:1428
+#: ../client/pk-console.c:1484
+#: ../client/pk-console.c:1559
 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:1435
-#: ../client/pk-console.c:1491
-#: ../client/pk-console.c:1566
+#: ../client/pk-console.c:1434
+#: ../client/pk-console.c:1490
+#: ../client/pk-console.c:1565
 #, 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:1446
+#: ../client/pk-console.c:1445
 #, 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:1480
-#: ../client/pk-console.c:1555
+#: ../client/pk-console.c:1479
+#: ../client/pk-console.c:1554
 #, 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:1512
+#: ../client/pk-console.c:1511
 msgid "Packages to add"
 msgstr "Paquetes para añadir"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1520
+#: ../client/pk-console.c:1519
 msgid "Packages to remove"
 msgstr "Paquetes para eliminar"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1588
+#: ../client/pk-console.c:1587
 #, 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:1594
+#: ../client/pk-console.c:1593
 msgid "To install"
 msgstr "Para instalar"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1606
+#: ../client/pk-console.c:1605
 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:1610
+#: ../client/pk-console.c:1609
 msgid "not found."
 msgstr "no encontrado."
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1621
+#: ../client/pk-console.c:1620
 #, 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:1627
+#: ../client/pk-console.c:1626
 #: ../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:1663
+#: ../client/pk-console.c:1662
 #, 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:1671
+#: ../client/pk-console.c:1670
 #, 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:1702
+#: ../client/pk-console.c:1701
 msgid "Error:"
 msgstr "Error:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1716
-#: ../client/pk-console-test.c:370
+#: ../client/pk-console.c:1715
+#: ../client/pk-console-test.c:366
 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:1732
-#: ../client/pk-console-test.c:388
+#: ../client/pk-console.c:1731
+#: ../client/pk-console-test.c:384
 msgid "Message:"
 msgstr "Mensaje:"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1760
-#: ../client/pk-console-test.c:407
+#: ../client/pk-console.c:1759
+#: ../client/pk-console-test.c:403
 msgid "Package files"
 msgstr "Archivos del paquete"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1768
-#: ../client/pk-console-test.c:402
+#: ../client/pk-console.c:1767
+#: ../client/pk-console-test.c:398
 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:1791
+#: ../client/pk-console.c:1790
 msgid "Repository signature required"
 msgstr "Se requiere la firma del repositorio"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
 #. ask the user
-#: ../client/pk-console.c:1801
-#: ../client/pk-task-text.c:113
+#: ../client/pk-console.c:1800
+#: ../lib/packagekit-glib2/pk-task-text.c:113
 msgid "Do you accept this signature?"
 msgstr "¿Acepta esta firma?"
 
 #. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1805
-#: ../client/pk-task-text.c:117
+#: ../client/pk-console.c:1804
+#: ../lib/packagekit-glib2/pk-task-text.c:117
 msgid "The signature was not accepted."
 msgstr "No se aceptó la firma."
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1839
+#: ../client/pk-console.c:1838
 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:1846
+#: ../client/pk-console.c:1845
 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:1850
+#: ../client/pk-console.c:1849
 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:1879
-#: ../client/pk-console-test.c:972
+#: ../client/pk-console.c:1878
+#: ../client/pk-console-test.c:816
 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:1932
-#: ../client/pk-console-test.c:1006
+#: ../client/pk-console.c:1931
+#: ../client/pk-console-test.c:850
 msgid "PackageKit Console Interface"
 msgstr "Interfaz de consola de PackageKit"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1934
-#: ../client/pk-console-test.c:1008
+#: ../client/pk-console.c:1933
+#: ../client/pk-console-test.c:852
 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:2027
-#: ../client/pk-console-test.c:1099
-#: ../client/pk-generate-pack.c:187
+#: ../client/pk-console.c:2026
+#: ../client/pk-console-test.c:966
+#: ../client/pk-generate-pack.c:185
+#: ../client/pk-generate-pack-test.c:222
 #: ../client/pk-monitor.c:128
 #: ../client/pk-monitor-test.c:282
 #: ../contrib/command-not-found/pk-command-not-found.c:616
+#: ../contrib/command-not-found/pk-command-not-found-test.c:614
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:549
 #: ../contrib/device-rebind/pk-device-rebind.c:293
 #: ../src/pk-main.c:211
@@ -673,181 +675,182 @@ 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:2030
-#: ../client/pk-console-test.c:1102
+#: ../client/pk-console.c:2029
+#: ../client/pk-console-test.c:969
 #: ../client/pk-monitor.c:130
 #: ../client/pk-monitor-test.c:284
 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:2033
-#: ../client/pk-console-test.c:1105
+#: ../client/pk-console.c:2032
+#: ../client/pk-console-test.c:972
 msgid "Set the filter, e.g. installed"
 msgstr "Establecer el filtro, ej. instalado"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:2036
-#: ../client/pk-console-test.c:1108
+#: ../client/pk-console.c:2035
+#: ../client/pk-console-test.c:975
 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:2063
+#: ../client/pk-console.c:2062
 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:2153
-#: ../client/pk-console-test.c:1183
+#: ../client/pk-console.c:2152
+#: ../client/pk-console-test.c:1052
 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:2172
-#: ../client/pk-console-test.c:1202
+#: ../client/pk-console.c:2171
+#: ../client/pk-console-test.c:1071
 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:2179
-#: ../client/pk-console.c:2188
-#: ../client/pk-console.c:2197
-#: ../client/pk-console.c:2206
-#: ../client/pk-console-test.c:1209
-#: ../client/pk-console-test.c:1221
-#: ../client/pk-console-test.c:1233
-#: ../client/pk-console-test.c:1245
+#: ../client/pk-console.c:2178
+#: ../client/pk-console.c:2187
+#: ../client/pk-console.c:2196
+#: ../client/pk-console.c:2205
+#: ../client/pk-console-test.c:1078
+#: ../client/pk-console-test.c:1090
+#: ../client/pk-console-test.c:1102
+#: ../client/pk-console-test.c:1114
 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:2213
-#: ../client/pk-console-test.c:1255
+#: ../client/pk-console.c:2212
+#: ../client/pk-console-test.c:1124
 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:2219
+#: ../client/pk-console.c:2218
 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:2228
-#: ../client/pk-console-test.c:1282
+#: ../client/pk-console.c:2227
+#: ../client/pk-console-test.c:1151
 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:2237
-#: ../client/pk-console-test.c:1293
+#: ../client/pk-console.c:2236
+#: ../client/pk-console-test.c:1162
 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:2245
-#: ../client/pk-console-test.c:1302
+#: ../client/pk-console.c:2244
+#: ../client/pk-console-test.c:1171
 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:2252
-#: ../client/pk-console-test.c:1309
+#: ../client/pk-console.c:2251
+#: ../client/pk-console-test.c:1178
 msgid "Directory not found"
 msgstr "Directorio no encontrado"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2260
-#: ../client/pk-console-test.c:1318
+#: ../client/pk-console.c:2259
+#: ../client/pk-console-test.c:1187
 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:2270
-#: ../client/pk-console-test.c:1329
+#: ../client/pk-console.c:2269
+#: ../client/pk-console-test.c:1198
 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:2287
-#: ../client/pk-console-test.c:1350
+#: ../client/pk-console.c:2286
+#: ../client/pk-console-test.c:1219
 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:2296
-#: ../client/pk-console.c:2305
-#: ../client/pk-console-test.c:1361
-#: ../client/pk-console-test.c:1372
+#: ../client/pk-console.c:2295
+#: ../client/pk-console.c:2304
+#: ../client/pk-console-test.c:1230
+#: ../client/pk-console-test.c:1241
 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:2314
-#: ../client/pk-console-test.c:1383
+#: ../client/pk-console.c:2313
+#: ../client/pk-console-test.c:1252
 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:2328
-#: ../client/pk-console-test.c:1401
+#: ../client/pk-console.c:2327
+#: ../client/pk-console-test.c:1269
 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:2335
-#: ../client/pk-console-test.c:1408
+#: ../client/pk-console.c:2334
+#: ../client/pk-console-test.c:1276
 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:2342
-#: ../client/pk-console-test.c:1415
+#: ../client/pk-console.c:2341
+#: ../client/pk-console-test.c:931
 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:2352
-#: ../client/pk-console.c:2364
-#: ../client/pk-console.c:2373
-#: ../client/pk-console.c:2391
-#: ../client/pk-console.c:2400
-#: ../client/pk-console-test.c:1425
-#: ../client/pk-console-test.c:1440
-#: ../client/pk-console-test.c:1449
-#: ../client/pk-console-test.c:1469
-#: ../client/pk-console-test.c:1478
-#: ../client/pk-generate-pack.c:243
+#: ../client/pk-console.c:2351
+#: ../client/pk-console.c:2363
+#: ../client/pk-console.c:2372
+#: ../client/pk-console.c:2390
+#: ../client/pk-console.c:2399
+#: ../client/pk-console-test.c:1286
+#: ../client/pk-console-test.c:1301
+#: ../client/pk-console-test.c:1310
+#: ../client/pk-console-test.c:1330
+#: ../client/pk-console-test.c:1339
+#: ../client/pk-generate-pack.c:241
+#: ../client/pk-generate-pack-test.c:285
 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:2382
-#: ../client/pk-console-test.c:1458
+#: ../client/pk-console.c:2381
+#: ../client/pk-console-test.c:1319
 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:2409
+#: ../client/pk-console.c:2408
 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:2419
-#: ../client/pk-console.c:2429
+#: ../client/pk-console.c:2418
+#: ../client/pk-console.c:2428
 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:2483
-#: ../client/pk-console-test.c:1538
+#: ../client/pk-console.c:2482
+#: ../client/pk-console-test.c:1399
 #, 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:2496
+#: ../client/pk-console.c:2495
 msgid "Incorrect privileges for this operation"
 msgstr "Privilegios incorrectos para esta operación"
 
@@ -855,38 +858,26 @@ msgstr "Privilegios incorrectos para esta operación"
 #. /* 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
-#: ../client/pk-console.c:2499
-#: ../client/pk-console-test.c:1550
+#: ../client/pk-console.c:2498
+#: ../client/pk-console-test.c:1411
 msgid "Command failed"
 msgstr "Falló el comando"
 
-#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../client/pk-console-test.c:523
-#: ../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-console-test.c:532
-#: ../client/pk-tools-common.c:138
-msgid "Please choose the correct package: "
-msgstr "Elija el paquete correcto: "
-
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:734
+#: ../client/pk-console-test.c:568
 #, c-format
 msgid "This tool could not find the available package: %s"
 msgstr "Esta herramienta no pudo encontrar el paquete disponible: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:762
+#: ../client/pk-console-test.c:596
 #, c-format
 msgid "This tool could not find the installed package: %s"
 msgstr "Esta herramienta no pudo encontrar el paquete instalado: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:790
-#: ../client/pk-console-test.c:818
+#: ../client/pk-console-test.c:624
+#: ../client/pk-console-test.c:652
 #, c-format
 msgid "This tool could not find the package: %s"
 msgstr "Esta herramienta no pudo encontrar el paquete: %s"
@@ -895,136 +886,163 @@ msgstr "Esta herramienta no pudo encontrar el paquete: %s"
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console-test.c:846
-#: ../client/pk-console-test.c:872
-#: ../client/pk-console-test.c:898
-#: ../client/pk-console-test.c:924
-#: ../client/pk-console-test.c:950
+#: ../client/pk-console-test.c:680
+#: ../client/pk-console-test.c:708
+#: ../client/pk-console-test.c:736
+#: ../client/pk-console-test.c:764
+#: ../client/pk-console-test.c:792
 #, c-format
 msgid "This tool could not find all the packages: %s"
 msgstr "Esta herramienta no pudo encontrar todos los paquetes: %s"
 
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console-test.c:1000
+msgid "Failed to contact PackageKit"
+msgstr "Falló al contactar con PackageKit"
+
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1261
+#: ../client/pk-console-test.c:1130
 msgid "A package name to install is required"
 msgstr "Se necesita un nombre de paquete a instalar"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1270
+#: ../client/pk-console-test.c:1139
 msgid "A filename to install is required"
 msgstr "Se requiere un nombre de archivo a instalar"
 
 #. TRANSLATORS: This is the state of the transaction
-#: ../client/pk-generate-pack.c:103
+#: ../client/pk-generate-pack.c:101
 msgid "Downloading"
 msgstr "Descargando"
 
 #. TRANSLATORS: This is when the main packages are being downloaded
-#: ../client/pk-generate-pack.c:123
+#: ../client/pk-generate-pack.c:121
 msgid "Downloading packages"
 msgstr "Descargando paquetes"
 
 #. TRANSLATORS: This is when the dependency packages are being downloaded
-#: ../client/pk-generate-pack.c:128
+#: ../client/pk-generate-pack.c:126
 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:190
+#: ../client/pk-generate-pack.c:188
+#: ../client/pk-generate-pack-test.c:225
 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:193
+#: ../client/pk-generate-pack.c:191
+#: ../client/pk-generate-pack-test.c:228
 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:196
+#: ../client/pk-generate-pack.c:194
+#: ../client/pk-generate-pack-test.c:231
 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:199
+#: ../client/pk-generate-pack.c:197
+#: ../client/pk-generate-pack-test.c:234
 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:227
+#: ../client/pk-generate-pack.c:225
+#: ../client/pk-generate-pack-test.c:269
 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:235
+#: ../client/pk-generate-pack.c:233
+#: ../client/pk-generate-pack-test.c:277
 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:251
+#: ../client/pk-generate-pack.c:249
+#: ../client/pk-generate-pack-test.c:293
 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:269
-#: ../client/pk-generate-pack.c:275
+#. 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-test.c:321
+#: ../client/pk-generate-pack-test.c:327
 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:282
+#: ../client/pk-generate-pack.c:280
+#: ../client/pk-generate-pack-test.c:334
 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:293
+#: ../client/pk-generate-pack.c:291
+#: ../client/pk-generate-pack-test.c:345
 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:309
+#: ../client/pk-generate-pack.c:307
+#: ../client/pk-generate-pack-test.c:361
 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:312
+#: ../client/pk-generate-pack.c:310
+#: ../client/pk-generate-pack-test.c:364
 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:325
+#: ../client/pk-generate-pack.c:323
+#: ../client/pk-generate-pack-test.c:377
 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:335
+#: ../client/pk-generate-pack.c:333
+#: ../client/pk-generate-pack-test.c:389
 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:346
+#: ../client/pk-generate-pack.c:344
+#: ../client/pk-generate-pack-test.c:398
 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:350
+#: ../client/pk-generate-pack.c:348
+#: ../client/pk-generate-pack-test.c:402
 #, 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:367
+#: ../client/pk-generate-pack.c:365
+#: ../client/pk-generate-pack-test.c:410
 msgid "Creating service pack..."
 msgstr "Creando el paquete de servicio..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:374
+#: ../client/pk-generate-pack.c:372
+#: ../client/pk-generate-pack-test.c:425
 #, 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:379
+#: ../client/pk-generate-pack.c:377
+#: ../client/pk-generate-pack-test.c:430
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "Falló al crear «%s»: %s"
@@ -1047,104 +1065,30 @@ msgstr "Falló al obtener la lista de transacciones"
 msgid "Failed to get daemon state"
 msgstr "Falló al obtener el estado del demonio"
 
-#. ask the user
-#: ../client/pk-task-text.c:64
-msgid "Do you want to allow installing of unsigned software?"
-msgstr "¿Desea permitir la instalación de software que no esté identificado?"
-
-#: ../client/pk-task-text.c:68
-msgid "The unsigned software will not be installed."
-msgstr "El software no identificado no será instalado."
-
-#: ../client/pk-task-text.c:100
-msgid "Software source signature required"
-msgstr "Se necesita la firma de la fuente del software"
-
-#: ../client/pk-task-text.c:102
-msgid "Software source name"
-msgstr "Nombre de la fuente del software"
-
-#: ../client/pk-task-text.c:103
-msgid "Key URL"
-msgstr "URL de la clave"
-
-#: ../client/pk-task-text.c:104
-msgid "Key user"
-msgstr "Usuario de la clave"
-
-#: ../client/pk-task-text.c:105
-msgid "Key ID"
-msgstr "ID de la clave"
-
-#: ../client/pk-task-text.c:106
-msgid "Key fingerprint"
-msgstr "Huella digital de la clave"
-
-#: ../client/pk-task-text.c:107
-msgid "Key Timestamp"
-msgstr "Fecha y hora de la clave"
-
-#: ../client/pk-task-text.c:151
-msgid "End user licence agreement required"
-msgstr "Se necesita un acuerdo de licencia de usuario final"
-
-#: ../client/pk-task-text.c:152
-msgid "EULA ID"
-msgstr "ID del acuerdo de licencia de usuario final (EULA) "
-
-#: ../client/pk-task-text.c:155
-msgid "Agreement"
-msgstr "Acuerdo"
-
-#. ask the user
-#: ../client/pk-task-text.c:161
-msgid "Do you accept this agreement?"
-msgstr "¿Acepta este acuerdo?"
-
-#: ../client/pk-task-text.c:165
-msgid "The agreement was not accepted."
-msgstr "El acuerdo no fue aceptado."
-
-#: ../client/pk-task-text.c:194
-msgid "Media change required"
-msgstr "Es necesario cambiar el medio"
-
-#: ../client/pk-task-text.c:195
-msgid "Media type"
-msgstr "Tipo de medio"
-
-#: ../client/pk-task-text.c:196
-msgid "Media ID"
-msgstr "ID de medio"
-
-#: ../client/pk-task-text.c:197
-msgid "Text"
-msgstr "TExto"
-
-#. ask the user
-#: ../client/pk-task-text.c:201
-msgid "Please insert the correct media"
-msgstr "Por favor, inserte el medio correcto "
-
-#: ../client/pk-task-text.c:205
-msgid "The correct media was not inserted."
-msgstr "El medio correcto no fue insertado."
-
-#: ../client/pk-task-text.c:303
-msgid "The transaction did not proceed."
-msgstr "La transacción no pudo realizarse."
-
-#: ../client/pk-text.c:50
+#: ../client/pk-tools-common.c:51
+#: ../lib/packagekit-glib2/pk-console-shared.c:53
 #, c-format
 msgid "Please enter a number from 1 to %i: "
 msgstr "Introduzca un número de 1 a %i: "
 
 #. TRANSLATORS: The package was not found in any software sources
-#: ../client/pk-tools-common.c:119
+#: ../client/pk-tools-common.c:188
 #, 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:200
+#: ../lib/packagekit-glib2/pk-console-shared.c:153
+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:207
+#: ../lib/packagekit-glib2/pk-console-shared.c:162
+msgid "Please choose the correct package: "
+msgstr "Elija el paquete correcto: "
+
 #. TRANSLATORS: when we are getting data from the daemon
 #: ../contrib/browser-plugin/pk-plugin-install.c:466
 msgid "Getting package information..."
@@ -1201,90 +1145,110 @@ msgstr "Instalando..."
 
 #. TRANSLATORS: downloading repo data so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:349
+#: ../contrib/command-not-found/pk-command-not-found-test.c:358
 msgid "Downloading details about the software sources."
 msgstr "Descargando detalles acerca de las fuentes de software"
 
 #. TRANSLATORS: downloading file lists so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:353
+#: ../contrib/command-not-found/pk-command-not-found-test.c:362
 msgid "Downloading filelists (this may take some time to complete)."
 msgstr "Descargando listas de archivo (esto podría tardar un tiempo en completarse)."
 
 #. TRANSLATORS: waiting for native lock
 #: ../contrib/command-not-found/pk-command-not-found.c:357
+#: ../contrib/command-not-found/pk-command-not-found-test.c:366
 msgid "Waiting for package manager lock."
 msgstr "Esperando bloqueo del administrador de paquetes."
 
 #. TRANSLATORS: loading package cache so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:361
+#: ../contrib/command-not-found/pk-command-not-found-test.c:370
 msgid "Loading list of packages."
 msgstr "Cargando listas de paquetes"
 
 #. TRANSLATORS: we failed to find the package, this shouldn't happen
 #: ../contrib/command-not-found/pk-command-not-found.c:420
+#: ../contrib/command-not-found/pk-command-not-found-test.c:444
 msgid "Failed to search for file"
 msgstr "Falló al buscar el archivo"
 
 #. TRANSLATORS: we failed to launch the executable, the error follows
 #: ../contrib/command-not-found/pk-command-not-found.c:557
+#: ../contrib/command-not-found/pk-command-not-found-test.c:570
 msgid "Failed to launch:"
 msgstr "Falló al iniciar:"
 
 #. TRANSLATORS: tool that gets called when the command is not found
 #: ../contrib/command-not-found/pk-command-not-found.c:632
+#: ../contrib/command-not-found/pk-command-not-found-test.c:630
 msgid "PackageKit Command Not Found"
 msgstr "No se encontró el comando PackageKit"
 
 #. TRANSLATORS: the prefix of all the output telling the user why it's not executing
 #: ../contrib/command-not-found/pk-command-not-found.c:658
+#: ../contrib/command-not-found/pk-command-not-found-test.c:658
 msgid "Command not found."
 msgstr "Comando no encontrado."
 
 #. TRANSLATORS: tell the user what we think the command is
 #: ../contrib/command-not-found/pk-command-not-found.c:665
+#: ../contrib/command-not-found/pk-command-not-found-test.c:665
 msgid "Similar command is:"
 msgstr "Un comando similar es:"
 
 #. TRANSLATORS: Ask the user if we should run the similar command
 #: ../contrib/command-not-found/pk-command-not-found.c:674
+#: ../contrib/command-not-found/pk-command-not-found-test.c:674
 msgid "Run similar command:"
 msgstr "Ejecutar un comando similar:"
 
 #. TRANSLATORS: show the user a list of commands that they could have meant
 #. TRANSLATORS: show the user a list of commands we could run
+#. TRANSLATORS: show the user a list of commands that they could have meant
+#. TRANSLATORS: show the user a list of commands we could run
 #: ../contrib/command-not-found/pk-command-not-found.c:686
 #: ../contrib/command-not-found/pk-command-not-found.c:695
+#: ../contrib/command-not-found/pk-command-not-found-test.c:686
+#: ../contrib/command-not-found/pk-command-not-found-test.c:695
 msgid "Similar commands are:"
 msgstr "Los comandos similares son:"
 
 #. TRANSLATORS: ask the user to choose a file to run
 #: ../contrib/command-not-found/pk-command-not-found.c:702
+#: ../contrib/command-not-found/pk-command-not-found-test.c:702
 msgid "Please choose a command to run"
 msgstr "Elija un comando para ejecutar"
 
 #. TRANSLATORS: tell the user what package provides the command
 #: ../contrib/command-not-found/pk-command-not-found.c:721
+#: ../contrib/command-not-found/pk-command-not-found-test.c:721
 msgid "The package providing this file is:"
 msgstr "El paquete que proporciona este archivo es:"
 
 #. TRANSLATORS: as the user if we want to install a package to provide the command
 #: ../contrib/command-not-found/pk-command-not-found.c:726
+#: ../contrib/command-not-found/pk-command-not-found-test.c:726
 #, c-format
 msgid "Install package '%s' to provide command '%s'?"
 msgstr "¿Instalar el paquete «%s» para proporcionar el comando «%s»?"
 
 #. TRANSLATORS: Show the user a list of packages that provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:747
+#: ../contrib/command-not-found/pk-command-not-found-test.c:747
 msgid "Packages providing this file are:"
 msgstr "Los paquetes que proporcionan este archivo son:"
 
 #. TRANSLATORS: Show the user a list of packages that they can install to provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:756
+#: ../contrib/command-not-found/pk-command-not-found-test.c:756
 msgid "Suitable packages are:"
 msgstr "Los posibles paquetes son:"
 
 #. get selection
 #. TRANSLATORS: ask the user to choose a file to install
 #: ../contrib/command-not-found/pk-command-not-found.c:764
+#: ../contrib/command-not-found/pk-command-not-found-test.c:764
 msgid "Please choose a package to install"
 msgstr "Elija un paquete para instalar"
 
@@ -1570,6 +1534,93 @@ msgstr "Lista de paquetes de PackageKit"
 msgid "PackageKit Service Pack"
 msgstr "Paquete de servicio de PackageKit"
 
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:64
+msgid "Do you want to allow installing of unsigned software?"
+msgstr "¿Desea permitir la instalación de software que no esté identificado?"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:68
+msgid "The unsigned software will not be installed."
+msgstr "El software no identificado no será instalado."
+
+#: ../lib/packagekit-glib2/pk-task-text.c:100
+msgid "Software source signature required"
+msgstr "Se necesita la firma de la fuente del software"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:102
+msgid "Software source name"
+msgstr "Nombre de la fuente del software"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:103
+msgid "Key URL"
+msgstr "URL de la clave"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:104
+msgid "Key user"
+msgstr "Usuario de la clave"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:105
+msgid "Key ID"
+msgstr "ID de la clave"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:106
+msgid "Key fingerprint"
+msgstr "Huella digital de la clave"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:107
+msgid "Key Timestamp"
+msgstr "Fecha y hora de la clave"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:151
+msgid "End user licence agreement required"
+msgstr "Se necesita un acuerdo de licencia de usuario final"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:152
+msgid "EULA ID"
+msgstr "ID del acuerdo de licencia de usuario final (EULA) "
+
+#: ../lib/packagekit-glib2/pk-task-text.c:155
+msgid "Agreement"
+msgstr "Acuerdo"
+
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:161
+msgid "Do you accept this agreement?"
+msgstr "¿Acepta este acuerdo?"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:165
+msgid "The agreement was not accepted."
+msgstr "El acuerdo no fue aceptado."
+
+#: ../lib/packagekit-glib2/pk-task-text.c:194
+msgid "Media change required"
+msgstr "Es necesario cambiar el medio"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:195
+msgid "Media type"
+msgstr "Tipo de medio"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:196
+msgid "Media ID"
+msgstr "ID de medio"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:197
+msgid "Text"
+msgstr "TExto"
+
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:201
+msgid "Please insert the correct media"
+msgstr "Por favor, inserte el medio correcto "
+
+#: ../lib/packagekit-glib2/pk-task-text.c:205
+msgid "The correct media was not inserted."
+msgstr "El medio correcto no fue insertado."
+
+#: ../lib/packagekit-glib2/pk-task-text.c:303
+msgid "The transaction did not proceed."
+msgstr "La transacción no pudo realizarse."
+
 #. SECURITY:
 #. - Normal users do not require admin authentication to accept new
 #. licence agreements.
commit ff7424b88756e496e08102ae0cb9344778c2e478
Merge: 687ca91... 6145806...
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 12:18:51 2009 +0100

    Merge branch 'master' into daemon-glib2

commit 6145806ea5c021427dd236ccf6b57789dc2b09ee
Merge: 3ece72c... 826daa3...
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 12:17:55 2009 +0100

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

commit 3ece72cf449ad9f38999460806ef89f20086ed0b
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 12:16:38 2009 +0100

    trivial: remove some debugging left in

diff --git a/contrib/debuginfo-install/pk-debuginfo-install-test.c b/contrib/debuginfo-install/pk-debuginfo-install-test.c
index 6103a96..c07ec65 100644
--- a/contrib/debuginfo-install/pk-debuginfo-install-test.c
+++ b/contrib/debuginfo-install/pk-debuginfo-install-test.c
@@ -200,7 +200,6 @@ pk_debuginfo_install_packages_install (PkDebuginfoInstallPrivate *priv, GPtrArra
 	if (results == NULL) {
 		*error = g_error_new (1, 0, "failed to install packages: %s", error_local->message);
 		g_error_free (error_local);
-		egg_error ("moo: %s", error_local->message);
 		ret = FALSE;
 		goto out;
 	}
diff --git a/contrib/debuginfo-install/pk-debuginfo-install.c b/contrib/debuginfo-install/pk-debuginfo-install.c
index 00b0c4a..81e6c19 100644
--- a/contrib/debuginfo-install/pk-debuginfo-install.c
+++ b/contrib/debuginfo-install/pk-debuginfo-install.c
@@ -206,7 +206,6 @@ pk_debuginfo_install_packages_install (PkDebuginfoInstallPrivate *priv, GPtrArra
 		} else {
 			*error = g_error_new (1, 0, "failed to install packages: %s", error_local->message);
 			g_error_free (error_local);
-			egg_error ("moo: %s", error_local->message);
 			goto out;
 		}
 	}
commit 295ece896a55a0070965f69c8c9c2ad757e635b2
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 12:10:46 2009 +0100

    trivial: add a glib2ified version of pk-debuginfo-install

diff --git a/contrib/debuginfo-install/Makefile.am b/contrib/debuginfo-install/Makefile.am
index d1a9ac6..0d41fd9 100644
--- a/contrib/debuginfo-install/Makefile.am
+++ b/contrib/debuginfo-install/Makefile.am
@@ -46,7 +46,7 @@ pk_debuginfo_install_SOURCES =				\
 pk_debuginfo_install_LDADD =				\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
-	$(PK_GLIB_LIBS)					\
+	$(PK_GLIB2_LIBS)				\
 	$(NULL)
 
 else
diff --git a/contrib/debuginfo-install/pk-debuginfo-install-test.c b/contrib/debuginfo-install/pk-debuginfo-install-test.c
new file mode 100644
index 0000000..6103a96
--- /dev/null
+++ b/contrib/debuginfo-install/pk-debuginfo-install-test.c
@@ -0,0 +1,934 @@
+/* -*- 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.
+ */
+
+/* Test with ./pk-debuginfo-install bzip2-libs-1.0.5-5.fc11.i586 glib2-2.20.3-1.fc11.i586 */
+
+#include "config.h"
+
+#include <string.h>
+#include <locale.h>
+#include <glib/gi18n.h>
+#include <packagekit-glib2/packagekit.h>
+#include <packagekit-glib2/packagekit-private.h>
+
+#include "egg-debug.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_DEBUGINFO_EXIT_CODE_FAILED				1
+#define PK_DEBUGINFO_EXIT_CODE_FAILED_TO_GET_REPOLIST		3
+#define PK_DEBUGINFO_EXIT_CODE_FAILED_TO_ENABLE			4
+#define PK_DEBUGINFO_EXIT_CODE_NOTHING_TO_DO			5
+#define PK_DEBUGINFO_EXIT_CODE_FAILED_TO_FIND_DEPS		6
+#define PK_DEBUGINFO_EXIT_CODE_FAILED_TO_INSTALL		7
+#define PK_DEBUGINFO_EXIT_CODE_FAILED_TO_DISABLE		8
+
+typedef struct {
+	GPtrArray		*enabled;
+	GPtrArray		*disabled;
+	PkClient		*client;
+	PkProgressBar		*progress_bar;
+} PkDebuginfoInstallPrivate;
+
+/**
+ * pk_get_package_name_from_nevra:
+ **/
+static gchar *
+pk_get_package_name_from_nevra (const gchar *nevra)
+{
+	gchar *name = NULL;
+	gchar **split;
+	guint len;
+
+	/* hal-info-data-version-arch */
+	split = g_strsplit (nevra, "-", -1);
+	len = g_strv_length (split);
+
+	/* just the package name specified */
+	if (len == 1) {
+		name = g_strdup (split[0]);
+		goto out;
+	}
+
+	/* ignore the version */
+	g_free (split[len-2]);
+	split[len-2] = NULL;
+
+	/* ignore the arch */
+	g_free (split[len-1]);
+	split[len-1] = NULL;
+
+	/* join up name elements */
+	name = g_strjoinv ("-", split);
+out:
+	g_strfreev (split); 
+	return name;
+}
+
+/**
+ * pk_debuginfo_install_in_array:
+ **/
+static gboolean
+pk_debuginfo_install_in_array (GPtrArray *array, const gchar *text)
+{
+	guint i;
+	gboolean ret = FALSE;
+	const gchar *possible;
+
+	/* compare each */
+	for (i=0; i<array->len; i++) {
+		possible = g_ptr_array_index (array, i);
+		if (g_strcmp0 (text, possible) == 0) {
+			ret = TRUE;
+			break;
+		}
+	}
+	return ret;
+}
+
+/**
+ * pk_debuginfo_install_enable_repos:
+ **/
+static gboolean
+pk_debuginfo_install_enable_repos (PkDebuginfoInstallPrivate *priv, GPtrArray *array, gboolean enable, GError **error)
+{
+	guint i;
+	gboolean ret = TRUE;
+	PkResults *results = NULL;
+	const gchar *repo_id;
+	GError *error_local = NULL;
+	PkExitEnum exit_enum;
+
+	/* enable all debuginfo repos we found */
+	for (i=0; i<array->len; i++) {
+		repo_id = g_ptr_array_index (array, i);
+
+		/* enable this repo */
+		results = pk_client_repo_enable_sync (priv->client, repo_id, enable, NULL, NULL, NULL, &error_local);
+		if (results == NULL) {
+			*error = g_error_new (1, 0, "failed to enable %s: %s", repo_id, error_local->message);
+			g_error_free (error_local);
+			ret = FALSE;
+			goto out;
+		}
+
+		/* test exit code */
+		exit_enum = pk_results_get_exit_code (results);
+		if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
+			*error = g_error_new (1, 0, "failed to resolve: %s", pk_exit_enum_to_text (exit_enum));
+			g_error_free (error_local);
+			goto out;
+		}
+
+		egg_debug ("setting %s: %i", repo_id, enable);
+		g_object_unref (results);
+	}
+out:
+	return ret;
+}
+
+/**
+ * pk_debuginfo_install_progress_cb:
+ **/
+static void
+pk_debuginfo_install_progress_cb (PkProgress *progress, PkProgressType type, PkDebuginfoInstallPrivate *priv)
+{
+	gint percentage;
+	gchar *package_id = NULL;
+
+	if (type == PK_PROGRESS_TYPE_PERCENTAGE) {
+		g_object_get (progress, "percentage", &percentage, NULL);
+		pk_progress_bar_set_percentage (priv->progress_bar, percentage);
+		goto out;
+	}
+	if (type == PK_PROGRESS_TYPE_PACKAGE_ID) {
+		g_object_get (progress, "package-id", &package_id, NULL);
+		egg_debug ("now downloading %s", package_id);
+		goto out;
+	}
+out:
+	g_free (package_id);
+}
+
+/**
+ * pk_debuginfo_install_packages_install:
+ **/
+static gboolean
+pk_debuginfo_install_packages_install (PkDebuginfoInstallPrivate *priv, GPtrArray *array, GError **error)
+{
+	gboolean ret = TRUE;
+	PkResults *results = NULL;
+	gchar **package_ids;
+	GError *error_local = NULL;
+	PkExitEnum exit_enum;
+
+	/* mush back into a char** */
+	package_ids = pk_ptr_array_to_strv (array);
+
+	/* TRANSLATORS: we are starting to install the packages */
+	pk_progress_bar_start (priv->progress_bar, _("Starting install"));
+
+	/* enable this repo */
+	results = pk_task_install_packages_sync (PK_TASK(priv->client), package_ids, NULL,
+						 (PkProgressCallback) pk_debuginfo_install_progress_cb, priv, &error_local);
+	if (results == NULL) {
+		*error = g_error_new (1, 0, "failed to install packages: %s", error_local->message);
+		g_error_free (error_local);
+		egg_error ("moo: %s", error_local->message);
+		ret = FALSE;
+		goto out;
+	}
+
+	/* test exit code */
+	exit_enum = pk_results_get_exit_code (results);
+	if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
+		*error = g_error_new (1, 0, "failed to resolve: %s", pk_exit_enum_to_text (exit_enum));
+		g_error_free (error_local);
+		ret = FALSE;
+		goto out;
+	}
+
+	/* end progressbar output */
+	pk_progress_bar_end (priv->progress_bar);
+out:
+	if (results != NULL)
+		g_object_unref (results);
+	g_strfreev (package_ids);
+	return ret;
+}
+
+/**
+ * pk_debuginfo_install_resolve_name_to_id:
+ **/
+static gchar *
+pk_debuginfo_install_resolve_name_to_id (PkDebuginfoInstallPrivate *priv, const gchar *package_name, GError **error)
+{
+	PkResults *results = NULL;
+	const PkItemPackage *item;
+	gchar *package_id = NULL;
+	GPtrArray *list = NULL;
+	GError *error_local = NULL;
+	gchar **names;
+	PkExitEnum exit_enum;
+
+	/* resolve takes a char** */
+	names = g_strsplit (package_name, ";", -1);
+
+	/* resolve */
+	results = pk_client_resolve_sync (priv->client, pk_bitfield_from_enums (PK_FILTER_ENUM_NEWEST, -1), names, NULL, NULL, NULL, &error_local);
+	if (results == NULL) {
+		*error = g_error_new (1, 0, "failed to resolve: %s", error_local->message);
+		g_error_free (error_local);
+		goto out;
+	}
+
+	/* test exit code */
+	exit_enum = pk_results_get_exit_code (results);
+	if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
+		*error = g_error_new (1, 0, "failed to resolve: %s", pk_exit_enum_to_text (exit_enum));
+		g_error_free (error_local);
+		goto out;
+	}
+
+	/* check we only got one match */
+	list = pk_results_get_package_array (results);
+	if (list->len == 0) {
+		*error = g_error_new (1, 0, "no package %s found", package_name);
+		goto out;
+	}
+	if (list->len > 1) {
+		*error = g_error_new (1, 0, "more than one package found for %s", package_name);
+		goto out;
+	}
+
+	/* get the package id */
+	item = g_ptr_array_index (list, 0);
+	package_id = g_strdup (item->package_id);
+out:
+	if (results != NULL)
+		g_object_unref (results);
+	if (list != NULL)
+		g_ptr_array_unref (list);
+	g_strfreev (names);
+	return package_id;
+}
+
+/**
+ * pk_debuginfo_install_remove_suffix:
+ **/
+static gboolean
+pk_debuginfo_install_remove_suffix (gchar *name, const gchar *suffix)
+{
+	gboolean ret = FALSE;
+	guint slen, len;
+
+	if (!g_str_has_suffix (name, suffix))
+		goto out;
+
+	/* get lengths */
+	len = strlen (name);
+	slen = strlen (suffix);
+
+	/* same string */
+	if (len == slen)
+		goto out;
+
+	/* truncate */
+	name[len-slen] = '\0';
+	ret = TRUE;
+out:
+	return ret;
+}
+
+/**
+ * pk_debuginfo_install_print_array:
+ **/
+static void
+pk_debuginfo_install_print_array (GPtrArray *array)
+{
+	guint i;
+	const gchar *package_id;
+	gchar **split;
+
+	for (i=0; i<array->len; i++) {
+		package_id = g_ptr_array_index (array, i);
+		split = pk_package_id_split (package_id);
+		g_print ("%i\t%s-%s(%s)\t%s\n", i+1, split[0], split[1], split[2], split[3]);
+		g_strfreev (split);
+	}
+}
+
+/**
+ * pk_debuginfo_install_name_to_debuginfo:
+ **/
+static gchar *
+pk_debuginfo_install_name_to_debuginfo (const gchar *name)
+{
+	gchar *name_debuginfo = NULL;
+	gchar *name_tmp = NULL;
+
+	/* nothing */
+	if (name == NULL)
+		goto out;
+
+	name_tmp = g_strdup (name);
+
+	/* remove suffix */
+	pk_debuginfo_install_remove_suffix (name_tmp, "-libs");
+
+	/* append -debuginfo */
+	name_debuginfo = g_strjoin ("-", name_tmp, "debuginfo", NULL);
+out:
+	g_free (name_tmp);
+	return name_debuginfo;
+}
+
+/**
+ * pk_debuginfo_install_add_deps:
+ **/
+static gboolean
+pk_debuginfo_install_add_deps (PkDebuginfoInstallPrivate *priv, GPtrArray *packages_search, GPtrArray *packages_results, GError **error)
+{
+	gboolean ret = TRUE;
+	PkResults *results = NULL;
+	const PkItemPackage *item;
+	gchar *package_id = NULL;
+	GPtrArray *list = NULL;
+	GError *error_local = NULL;
+	gchar **package_ids = NULL;
+	gchar *name_debuginfo;
+	guint i;
+	gchar **split;
+	PkExitEnum exit_enum;
+
+	/* get depends for them all, not adding dup's */
+	package_ids = pk_ptr_array_to_strv (packages_search);
+	results = pk_client_get_depends_sync (priv->client, PK_FILTER_ENUM_NONE, package_ids, TRUE, NULL, NULL, NULL, &error_local);
+	if (results == NULL) {
+		*error = g_error_new (1, 0, "failed to get_depends: %s", error_local->message);
+		g_error_free (error_local);
+		ret = FALSE;
+		goto out;
+	}
+
+	/* test exit code */
+	exit_enum = pk_results_get_exit_code (results);
+	if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
+		*error = g_error_new (1, 0, "failed to resolve: %s", pk_exit_enum_to_text (exit_enum));
+		g_error_free (error_local);
+		ret = FALSE;
+		goto out;
+	}
+
+	/* add dependant packages */
+	list = pk_results_get_package_array (results);
+	for (i=0; i<list->len; i++) {
+		item = g_ptr_array_index (list, 0);
+		split = pk_package_id_split (item->package_id);
+		/* add -debuginfo */
+		name_debuginfo = pk_debuginfo_install_name_to_debuginfo (split[0]);
+		g_strfreev (split);
+
+		/* resolve name */
+		egg_debug ("resolving: %s", name_debuginfo);
+		package_id = pk_debuginfo_install_resolve_name_to_id (priv, name_debuginfo, &error_local);
+		if (package_id == NULL) {
+			/* TRANSLATORS: we couldn't find the package name, non-fatal */
+			g_print (_("Failed to find the package %s, or already installed: %s"), name_debuginfo, error_local->message);
+			g_print ("\n");
+			g_error_free (error_local);
+			/* don't quit, this is non-fatal */
+			error = NULL;
+		}
+
+		/* add to array to install */
+		if (package_id != NULL && !g_str_has_suffix (package_id, "installed")) {
+			egg_debug ("going to try to install (for deps): %s", package_id);
+			g_ptr_array_add (packages_results, g_strdup (package_id));
+		}
+
+		g_free (package_id);
+		g_free (name_debuginfo);
+	}
+out:
+	if (results != NULL)
+		g_object_unref (results);
+	if (list != NULL)
+		g_ptr_array_unref (list);
+	g_strfreev (package_ids);
+	return ret;
+}
+
+/**
+ * pk_debuginfo_install_get_repo_list:
+ **/
+static gboolean
+pk_debuginfo_install_get_repo_list (PkDebuginfoInstallPrivate *priv, GError **error)
+{
+	gboolean ret = FALSE;
+	PkResults *results = NULL;
+	PkExitEnum exit_enum;
+	guint i;
+	GPtrArray *array;
+	GError *error_local = NULL;
+	const PkItemRepoDetail *item;
+
+	/* get all repo details */
+	results = pk_client_get_repo_list_sync (priv->client, PK_FILTER_ENUM_NONE, NULL, NULL, NULL, &error_local);
+	if (results == NULL) {
+		*error = g_error_new (1, 0, "failed to get repo list: %s", error_local->message);
+		g_error_free (error_local);
+		goto out;
+	}
+
+	/* test exit code */
+	exit_enum = pk_results_get_exit_code (results);
+	if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
+		g_print ("failed to get repo list: %s", pk_exit_enum_to_text (exit_enum));
+		goto out;
+	}
+
+	/* get results */
+	array = pk_results_get_repo_detail_array (results);
+	for (i=0; i<array->len; i++) {
+		item = g_ptr_array_index (array, i);
+		if (item->enabled)
+			g_ptr_array_add (priv->enabled, g_strdup (item->repo_id));
+		else
+			g_ptr_array_add (priv->disabled, g_strdup (item->repo_id));
+	}
+	ret = TRUE;
+out:
+	if (results != NULL)
+		g_object_unref (results);
+	return ret;
+}
+
+/**
+ * main:
+ **/
+int
+main (int argc, char *argv[])
+{
+	gboolean ret;
+	GError *error = NULL;
+	GPtrArray *added_repos = NULL;
+	GPtrArray *package_ids_recognised = NULL;
+	GPtrArray *package_ids_to_install = NULL;
+	guint i;
+	guint retval = 0;
+	gchar *package_id;
+	gchar *name;
+	gchar *name_debuginfo;
+	gboolean verbose = FALSE;
+	gboolean simulate = FALSE;
+	gboolean no_depends = FALSE;
+	gboolean quiet = FALSE;
+	GOptionContext *context;
+	const gchar *repo_id;
+	gchar *repo_id_debuginfo;
+	PkDebuginfoInstallPrivate *priv = NULL;
+	guint step = 1;
+
+	const GOptionEntry options[] = {
+		{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
+		  _("Show extra debugging information"), NULL },
+		{ "simulate", 's', 0, G_OPTION_ARG_NONE, &simulate,
+		   /* command line argument, simulate what would be done, but don't actually do it */
+		  _("Don't actually install any packages, only simulate what would be installed"), NULL },
+		{ "no-depends", 'n', 0, G_OPTION_ARG_NONE, &no_depends,
+		   /* command line argument, do we skip packages that depend on the ones specified */
+		  _("Do not install dependencies of the core packages"), NULL },
+		{ "quiet", 'q', 0, G_OPTION_ARG_NONE, &quiet,
+		   /* command line argument, do we operate quietly */
+		  _("Do not display information or progress"), 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 ();
+
+	context = g_option_context_new (NULL);
+	/* TRANSLATORS: tool that gets called when the command is not found */
+	g_option_context_set_summary (context, _("PackageKit Debuginfo Installer"));
+	g_option_context_add_main_entries (context, options, NULL);
+	g_option_context_parse (context, &argc, &argv, NULL);
+	g_option_context_free (context);
+
+	egg_debug_init (verbose);
+
+	/* no input */
+	if (argv[1] == NULL) {
+		/* should be vocal? */
+		if (!quiet) {
+			/* TRANSLATORS: the use needs to specify a list of package names on the command line */
+			g_print (_("ERROR: Specify package names to install."));
+			g_print ("\n");
+		}
+		/* return correct failure retval */
+		retval = PK_DEBUGINFO_EXIT_CODE_FAILED;
+		goto out;
+	}
+
+	/* clear private struct */
+	priv = g_new0 (PkDebuginfoInstallPrivate, 1);
+
+	/* store as strings */
+	priv->enabled = g_ptr_array_new ();
+	priv->disabled = g_ptr_array_new ();
+	added_repos = g_ptr_array_new ();
+	package_ids_to_install = g_ptr_array_new ();
+	package_ids_recognised = g_ptr_array_new ();
+
+	/* create #PkClient */
+	priv->client = PK_CLIENT(pk_task_text_new ());
+
+	/* use text progressbar */
+	priv->progress_bar = pk_progress_bar_new ();
+	pk_progress_bar_set_size (priv->progress_bar, 25);
+	pk_progress_bar_set_padding (priv->progress_bar, 60);
+
+	/* should be vocal? */
+	if (!quiet) {
+		/* starting this section */
+		g_print ("%i. ", step++);
+
+		/* TRANSLATORS: we are getting the list of repositories */
+		g_print (_("Getting sources list"));
+		g_print ("...");
+	}
+
+	/* get all enabled repos */
+	ret = pk_debuginfo_install_get_repo_list (priv, &error);
+	if (!ret) {
+		/* should be vocal? */
+		if (!quiet) {
+			/* TRANSLATORS: operation was not successful */
+			g_print ("%s ", _("FAILED."));
+		}
+		/* TRANSLATORS: we're failed to enable the sources, detailed error follows */
+		g_print ("Failed to enable sources list: %s", error->message);
+		g_print ("\n");
+		g_error_free (error);
+
+		/* return correct failure retval */
+		retval = PK_DEBUGINFO_EXIT_CODE_FAILED_TO_ENABLE;
+		goto out;
+	}
+
+	/* should be vocal? */
+	if (!quiet) {
+		/* TRANSLATORS: all completed 100% */
+		g_print ("%s ", _("OK."));
+
+		/* TRANSLATORS: tell the user what we found */
+		g_print (_("Found %i enabled and %i disabled sources."), priv->enabled->len, priv->disabled->len);
+		g_print ("\n");
+
+		/* starting this section */
+		g_print ("%i. ", step++);
+
+		/* TRANSLATORS: we're finding repositories that match out pattern */
+		g_print (_("Finding debugging sources"));
+		g_print ("...");
+	}
+
+	/* find all debuginfo repos for repos that are enabled */
+	for (i=0; i<priv->enabled->len; i++) {
+
+		/* is already a -debuginfo */
+		repo_id = g_ptr_array_index (priv->enabled, i);
+		if (g_str_has_suffix (repo_id, "-debuginfo")) {
+			egg_debug ("already enabled: %s", repo_id);
+			continue;
+		}
+
+		/* has a debuginfo repo */
+		repo_id_debuginfo = g_strjoin ("-", repo_id, "debuginfo", NULL);
+		ret = pk_debuginfo_install_in_array (priv->disabled, repo_id_debuginfo);
+		if (ret) {
+			/* add to list to change back at the end */
+			g_ptr_array_add (added_repos, g_strdup (repo_id_debuginfo));
+		} else {
+			egg_debug ("no debuginfo repo for %s", repo_id_debuginfo);
+		}
+
+		g_free (repo_id_debuginfo);
+	}
+
+	/* should be vocal? */
+	if (!quiet) {
+		/* TRANSLATORS: all completed 100% */
+		g_print ("%s ", _("OK."));
+
+		/* TRANSLATORS: tell the user what we found */
+		g_print (_("Found %i disabled debuginfo repos."), added_repos->len);
+		g_print ("\n");
+
+		/* starting this section */
+		g_print ("%i. ", step++);
+
+		/* TRANSLATORS: we're now enabling all the debug sources we found */
+		g_print (_("Enabling debugging sources"));
+		g_print ("...");
+	}
+
+	/* enable all debuginfo repos we found */
+	ret = pk_debuginfo_install_enable_repos (priv, added_repos, TRUE, &error);
+	if (!ret) {
+		/* should be vocal? */
+		if (!quiet) {
+			/* TRANSLATORS: operation was not successful */
+			g_print ("%s ", _("FAILED."));
+		}
+		/* TRANSLATORS: we're failed to enable the sources, detailed error follows */
+		g_print ("Failed to enable debugging sources: %s", error->message);
+		g_print ("\n");
+		g_error_free (error);
+
+		/* return correct failure retval */
+		retval = PK_DEBUGINFO_EXIT_CODE_FAILED_TO_ENABLE;
+		goto out;
+	}
+
+	/* should be vocal? */
+	if (!quiet) {
+		/* TRANSLATORS: all completed 100% */
+		g_print ("%s ", _("OK."));
+
+		/* TRANSLATORS: tell the user how many we enabled */
+		g_print (_("Enabled %i debugging sources."), added_repos->len);
+		g_print ("\n");
+
+		/* starting this section */
+		g_print ("%i. ", step++);
+
+		/* TRANSLATORS: we're now finding packages that match in all the repos */
+		g_print (_("Finding debugging packages"));
+		g_print ("...");
+	}
+
+	/* parse arguments and resolve to packages */
+	for (i=1; argv[i] != NULL; i++) {
+		name = pk_get_package_name_from_nevra (argv[i]);
+
+		/* resolve name */
+		package_id = pk_debuginfo_install_resolve_name_to_id (priv, name, &error);
+		if (package_id == NULL) {
+			/* TRANSLATORS: we couldn't find the package name, non-fatal */
+			g_print (_("Failed to find the package %s: %s"), name, error->message);
+			g_print ("\n");
+			g_error_free (error);
+			/* don't quit, this is non-fatal */
+			error = NULL;
+		}
+
+		/* add to array to install */
+		if (package_id != NULL) {
+			egg_debug ("going to try to install: %s", package_id);
+			g_ptr_array_add (package_ids_recognised, package_id);
+		} else {
+			goto not_found;
+		}
+
+		/* convert into basename */
+		name_debuginfo = pk_debuginfo_install_name_to_debuginfo (name);
+		egg_debug ("install %s [%s]", argv[i], name_debuginfo);
+
+		/* resolve name */
+		package_id = pk_debuginfo_install_resolve_name_to_id (priv, name_debuginfo, &error);
+		if (package_id == NULL) {
+			/* TRANSLATORS: we couldn't find the debuginfo package name, non-fatal */
+			g_print (_("Failed to find the debuginfo package %s: %s"), name_debuginfo, error->message);
+			g_print ("\n");
+			g_error_free (error);
+			/* don't quit, this is non-fatal */
+			error = NULL;
+		}
+
+		/* add to array to install */
+		if (package_id != NULL && !g_str_has_suffix (package_id, "installed")) {
+			egg_debug ("going to try to install: %s", package_id);
+			g_ptr_array_add (package_ids_to_install, g_strdup (package_id));
+		}
+
+		g_free (name_debuginfo);
+not_found:
+		g_free (package_id);
+		g_free (name);
+	}
+
+	/* no packages? */
+	if (package_ids_to_install->len == 0) {
+		/* should be vocal? */
+		if (!quiet) {
+			/* TRANSLATORS: operation was not successful */
+			g_print ("%s ", _("FAILED."));
+		}
+
+		/* TRANSLATORS: no debuginfo packages could be found to be installed */
+		g_print (_("Found no packages to install."));
+		g_print ("\n");
+
+		/* return correct failure retval */
+		retval = PK_DEBUGINFO_EXIT_CODE_NOTHING_TO_DO;
+		goto out;
+	}
+
+	/* should be vocal? */
+	if (!quiet) {
+		/* TRANSLATORS: all completed 100% */
+		g_print ("%s ", _("OK."));
+
+		/* TRANSLATORS: tell the user we found some packages, and then list them */
+		g_print (_("Found %i packages:"), package_ids_to_install->len);
+		g_print ("\n");
+	}
+
+	/* optional */
+	if (!no_depends) {
+
+		/* save for later logic */
+		i = package_ids_to_install->len;
+
+		/* should be vocal? */
+		if (!quiet) {
+			/* starting this section */
+			g_print ("%i. ", step++);
+
+			/* TRANSLATORS: tell the user we are searching for deps */
+			g_print (_("Finding packages that depend on these packages"));
+			g_print ("...");
+		}
+
+		ret = pk_debuginfo_install_add_deps (priv, package_ids_recognised, package_ids_to_install, &error);
+		if (!ret) {
+
+			/* should be vocal? */
+			if (!quiet) {
+				/* TRANSLATORS: operation was not successful */
+				g_print ("%s ", _("FAILED."));
+			}
+			/* TRANSLATORS: could not install, detailed error follows */
+			g_print (_("Could not find dependant packages: %s"), error->message);
+			g_print ("\n");
+			g_error_free (error);
+
+			/* return correct failure retval */
+			retval = PK_DEBUGINFO_EXIT_CODE_FAILED_TO_FIND_DEPS;
+			goto out;
+		}
+
+		/* should be vocal? */
+		if (!quiet) {
+			/* TRANSLATORS: all completed 100% */
+			g_print ("%s ", _("OK."));
+
+			if (i < package_ids_to_install->len) {
+				/* TRANSLATORS: tell the user we found some more packages */
+				g_print (_("Found %i extra packages."), package_ids_to_install->len - i);
+				g_print ("\n");
+			} else {
+				/* TRANSLATORS: tell the user we found some more packages */
+				g_print (_("No extra packages required."));
+				g_print ("\n");
+			}
+		}
+	}
+
+	/* should be vocal? */
+	if (!quiet) {
+		/* TRANSLATORS: tell the user we found some packages (and deps), and then list them */
+		g_print (_("Found %i packages to install:"), package_ids_to_install->len);
+		g_print ("\n");
+	}
+
+	/* print list */
+	if (!quiet)
+		pk_debuginfo_install_print_array (package_ids_to_install);
+
+	/* simulate mode for testing */
+	if (simulate) {
+		/* should be vocal? */
+		if (!quiet) {
+			/* TRANSLATORS: simulate mode is a testing mode where we quit before the action */
+			g_print (_("Not installing packages in simulate mode"));
+			g_print ("\n");
+		}
+		goto out;
+	}
+
+	/* should be vocal? */
+	if (!quiet) {
+		/* starting this section */
+		g_print ("%i. ", step++);
+
+		/* TRANSLATORS: we are now installing the debuginfo packages we found earlier */
+		g_print (_("Installing packages"));
+		g_print ("...\n");
+	}
+
+	/* install */
+	ret = pk_debuginfo_install_packages_install (priv, package_ids_to_install, &error);
+	if (!ret) {
+		/* should be vocal? */
+		if (!quiet) {
+			/* TRANSLATORS: operation was not successful */
+			g_print ("%s ", _("FAILED."));
+		}
+		/* TRANSLATORS: could not install, detailed error follows */
+		g_print (_("Could not install packages: %s"), error->message);
+		g_print ("\n");
+		g_error_free (error);
+
+		/* return correct failure retval */
+		retval = PK_DEBUGINFO_EXIT_CODE_FAILED_TO_INSTALL;
+		goto out;
+	}
+
+	/* should be vocal? */
+	if (!quiet) {
+		/* TRANSLATORS: all completed 100% */
+		g_print (_("OK."));
+		g_print ("\n");
+	}
+out:
+	if (package_ids_to_install != NULL) {
+		g_ptr_array_foreach (package_ids_to_install, (GFunc) g_free, NULL);
+		g_ptr_array_free (package_ids_to_install, TRUE);
+	}
+	if (package_ids_recognised != NULL) {
+		g_ptr_array_foreach (package_ids_recognised, (GFunc) g_free, NULL);
+		g_ptr_array_free (package_ids_recognised, TRUE);
+	}
+	if (added_repos != NULL) {
+
+		/* should be vocal? */
+		if (!quiet) {
+			/* starting this section */
+			g_print ("%i. ", step++);
+
+			/* TRANSLATORS: we are now disabling all debuginfo repos we previously enabled */
+			g_print (_("Disabling sources previously enabled"));
+			g_print ("...");
+		}
+		/* disable all debuginfo repos we previously enabled */
+		ret = pk_debuginfo_install_enable_repos (priv, added_repos, FALSE, &error);
+		if (!ret) {
+			/* should be vocal? */
+			if (!quiet) {
+				/* TRANSLATORS: operation was not successful */
+				g_print ("%s ", _("FAILED."));
+			}
+			/* TRANSLATORS: no debuginfo packages could be found to be installed, detailed error follows */
+			g_print (_("Could not disable the debugging sources: %s"), error->message);
+			g_print ("\n");
+			g_error_free (error);
+
+			/* return correct failure retval */
+			retval = PK_DEBUGINFO_EXIT_CODE_FAILED_TO_DISABLE;
+
+		} else {
+
+			/* should be vocal? */
+			if (!quiet) {
+				/* TRANSLATORS: all completed 100% */
+				g_print ("%s ", _("OK."));
+
+				/* TRANSLATORS: we disabled all the debugging repos that we enabled before */
+				g_print (_("Disabled %i debugging sources."), added_repos->len);
+				g_print ("\n");
+			}
+		}
+
+		g_ptr_array_foreach (added_repos, (GFunc) g_free, NULL);
+		g_ptr_array_free (added_repos, TRUE);
+	}
+	if (priv->enabled != NULL) {
+		g_ptr_array_foreach (priv->enabled, (GFunc) g_free, NULL);
+		g_ptr_array_free (priv->enabled, TRUE);
+	}
+	if (priv->disabled != NULL) {
+		g_ptr_array_foreach (priv->disabled, (GFunc) g_free, NULL);
+		g_ptr_array_free (priv->disabled, TRUE);
+	}
+	if (priv->client != NULL)
+		g_object_unref (priv->client);
+	if (priv->progress_bar != NULL)
+		g_object_unref (priv->progress_bar);
+	g_free (priv);
+	return retval;
+}
+
commit 8c48d16badf7cac3a591e3118380822704beb55b
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 12:08:57 2009 +0100

    trivial: add sync helpers for PkTask too

diff --git a/lib/packagekit-glib2/Makefile.am b/lib/packagekit-glib2/Makefile.am
index 028c3be..ab2dd09 100644
--- a/lib/packagekit-glib2/Makefile.am
+++ b/lib/packagekit-glib2/Makefile.am
@@ -115,14 +115,16 @@ libpackagekitprivate_a_SOURCES =				\
 	egg-string.c						\
 	egg-string.h						\
 	packagekit-private.h					\
-	pk-task-text.c						\
-	pk-task-text.h						\
 	pk-client-sync.c					\
 	pk-client-sync.h					\
 	pk-console-shared.c					\
 	pk-console-shared.h					\
 	pk-progress-bar.c					\
 	pk-progress-bar.h					\
+	pk-task-sync.c						\
+	pk-task-sync.h						\
+	pk-task-text.c						\
+	pk-task-text.h						\
 	$(NULL)
 
 libpackagekitprivate_a_CFLAGS =					\
diff --git a/lib/packagekit-glib2/packagekit-private.h b/lib/packagekit-glib2/packagekit-private.h
index 55cea2a..0c0c889 100644
--- a/lib/packagekit-glib2/packagekit-private.h
+++ b/lib/packagekit-glib2/packagekit-private.h
@@ -25,6 +25,7 @@
 #define __PACKAGEKIT_PRIVATE_H_INSIDE__
 
 #include <packagekit-glib2/pk-client-sync.h>
+#include <packagekit-glib2/pk-task-sync.h>
 #include <packagekit-glib2/pk-task-text.h>
 #include <packagekit-glib2/pk-console-shared.h>
 #include <packagekit-glib2/pk-progress-bar.h>
diff --git a/lib/packagekit-glib2/pk-task-sync.c b/lib/packagekit-glib2/pk-task-sync.c
new file mode 100644
index 0000000..ac5f092
--- /dev/null
+++ b/lib/packagekit-glib2/pk-task-sync.c
@@ -0,0 +1,294 @@
+/* -*- 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 <stdio.h>
+#include <gio/gio.h>
+#include <glib.h>
+#include <packagekit-glib2/packagekit.h>
+
+#include "egg-debug.h"
+
+#include "pk-task-sync.h"
+
+/* tiny helper to help us do the async operation */
+typedef struct {
+	GError		**error;
+	GMainLoop	*loop;
+	PkResults	*results;
+} PkTaskHelper;
+
+/**
+ * pk_task_generic_finish_sync:
+ **/
+static void
+pk_task_generic_finish_sync (PkTask *task, GAsyncResult *res, PkTaskHelper *helper)
+{
+	PkResults *results;
+	/* get the result */
+	results = pk_task_generic_finish (task, res, helper->error);
+	if (results != NULL) {
+		g_object_unref (results);
+		helper->results = g_object_ref (G_OBJECT (results));
+	}
+	g_main_loop_quit (helper->loop);
+}
+
+/**
+ * pk_task_update_system_sync:
+ * @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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * 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()
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_task_update_system_sync (PkTask *task, GCancellable *cancellable,
+			    PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkTaskHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_TASK (task), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkTaskHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_task_update_system_async (task, cancellable, progress_callback, progress_user_data,
+				     (GAsyncReadyCallback) pk_task_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_task_remove_packages_sync:
+ * @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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * 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.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_task_remove_packages_sync (PkTask *task, gchar **package_ids, gboolean allow_deps, gboolean autoremove, GCancellable *cancellable,
+			      PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkTaskHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_TASK (task), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkTaskHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_task_remove_packages_async (task, package_ids, allow_deps, autoremove, cancellable, progress_callback, progress_user_data,
+				       (GAsyncReadyCallback) pk_task_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_task_install_packages_sync:
+ * @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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Install a package of the newest and most correct version.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_task_install_packages_sync (PkTask *task, gchar **package_ids, GCancellable *cancellable,
+			       PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkTaskHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_TASK (task), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkTaskHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_task_install_packages_async (task, package_ids, cancellable, progress_callback, progress_user_data,
+					(GAsyncReadyCallback) pk_task_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_task_update_packages_sync:
+ * @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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Update specific packages to the newest available versions.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_task_update_packages_sync (PkTask *task, gchar **package_ids, GCancellable *cancellable,
+			      PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkTaskHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_TASK (task), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkTaskHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_task_update_packages_async (task, package_ids, cancellable, progress_callback, progress_user_data,
+				       (GAsyncReadyCallback) pk_task_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_task_install_files_sync:
+ * @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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Install a file locally, and get the deps from the repositories.
+ * This is useful for double clicking on a .rpm or .deb file.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_task_install_files_sync (PkTask *task, gchar **files, GCancellable *cancellable,
+			    PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkTaskHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_TASK (task), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkTaskHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_task_install_files_async (task, files, cancellable, progress_callback, progress_user_data,
+				     (GAsyncReadyCallback) pk_task_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
diff --git a/lib/packagekit-glib2/pk-task-sync.h b/lib/packagekit-glib2/pk-task-sync.h
new file mode 100644
index 0000000..bdb94a0
--- /dev/null
+++ b/lib/packagekit-glib2/pk-task-sync.h
@@ -0,0 +1,65 @@
+/* -*- 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.
+ */
+
+#ifndef __PK_TASK_SYNC_H
+#define __PK_TASK_SYNC_H
+
+#include <glib.h>
+#include <packagekit-glib2/packagekit.h>
+
+PkResults	*pk_task_remove_packages_sync		(PkTask			*task,
+							 gchar			**package_ids,
+							 gboolean		 allow_deps,
+							 gboolean		 autoremove,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_task_install_packages_sync		(PkTask			*task,
+							 gchar			**package_ids,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_task_update_packages_sync		(PkTask			*task,
+							 gchar			**package_ids,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_task_install_files_sync		(PkTask			*task,
+							 gchar			**files,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_task_update_system_sync		(PkTask			*task,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+#endif /* __PK_TASK_SYNC_H */
+
commit 097d80adc0171285517b3542a4f09e10efff06ee
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 11:19:40 2009 +0100

    trivial: add sync versions of all the PkClient methods

diff --git a/lib/packagekit-glib2/pk-client-sync.c b/lib/packagekit-glib2/pk-client-sync.c
index 1f91e4d..9278226 100644
--- a/lib/packagekit-glib2/pk-client-sync.c
+++ b/lib/packagekit-glib2/pk-client-sync.c
@@ -56,21 +56,30 @@ pk_client_generic_finish_sync (PkClient *client, GAsyncResult *res, PkClientHelp
 /**
  * pk_client_resolve_sync:
  * @client: a valid #PkClient instance
- * @error: A #GError or %NULL
+ * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
+ * @packages: an array of package names to resolve, e.g. "gnome-system-tools"
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Resolve a package name into a %package_id. This can return installed and
+ * available packages and allows you find out if a package is installed locally
+ * or is available in a repository.
  *
- * Resolves a package to a Package ID.
  * Warning: this function is synchronous, and may block. Do not use it in GUI
  * applications.
  *
  * Return value: a %PkResults object, or NULL for error
  **/
 PkResults *
-pk_client_resolve_sync (PkClient *client, PkFilterEnum filter, gchar **packages, GCancellable *cancellable,
+pk_client_resolve_sync (PkClient *client, PkBitfield filters, gchar **packages, GCancellable *cancellable,
 			PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
 {
 	PkClientHelper *helper;
 	PkResults *results;
 
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
 	/* create temp object */
@@ -79,8 +88,153 @@ pk_client_resolve_sync (PkClient *client, PkFilterEnum filter, gchar **packages,
 	helper->error = error;
 
 	/* run async method */
-	pk_client_resolve_async (client, filter, packages, cancellable, progress_callback, progress_user_data,
+	pk_client_resolve_async (client, filters, packages, cancellable, progress_callback, progress_user_data,
 				 (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_search_name_sync:
+ * @client: a valid #PkClient instance
+ * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
+ * @search: free text to search for, for instance, "power"
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Search all the locally installed files and remote repositories for a package
+ * that matches a specific name.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_search_name_sync (PkClient *client, PkBitfield filters, const gchar *search, GCancellable *cancellable,
+			    PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_search_name_async (client, filters, search, cancellable, progress_callback, progress_user_data,
+				     (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_search_details_sync:
+ * @client: a valid #PkClient instance
+ * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
+ * @search: free text to search for, for instance, "power"
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Search all detailed summary information to try and find a keyword.
+ * Think of this as pk_client_search_name(), but trying much harder and
+ * taking longer.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_search_details_sync (PkClient *client, PkBitfield filters, const gchar *search, GCancellable *cancellable,
+			       PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_search_details_async (client, filters, search, cancellable, progress_callback, progress_user_data,
+					(GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_search_group_sync:
+ * @client: a valid #PkClient instance
+ * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
+ * @search: a group enum to search for, for instance, "system-tools"
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Return all packages in a specific group.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_search_group_sync (PkClient *client, PkBitfield filters, const gchar *search, GCancellable *cancellable,
+			     PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_search_group_async (client, filters, search, cancellable, progress_callback, progress_user_data,
+				      (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
 	g_main_loop_run (helper->loop);
 
 	results = helper->results;
@@ -95,21 +249,359 @@ pk_client_resolve_sync (PkClient *client, PkFilterEnum filter, gchar **packages,
 /**
  * pk_client_search_file_sync:
  * @client: a valid #PkClient instance
- * @error: A #GError or %NULL
+ * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
+ * @search: file to search for, for instance, "/sbin/service"
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Search for packages that provide a specific file.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_search_file_sync (PkClient *client, PkBitfield filters, const gchar *search, GCancellable *cancellable,
+			    PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_search_file_async (client, filters, search, cancellable, progress_callback, progress_user_data,
+				     (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_get_details_sync:
+ * @client: a valid #PkClient 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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Get details of a package, so more information can be obtained for GUI
+ * or command line tools.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_get_details_sync (PkClient *client, gchar **package_ids, GCancellable *cancellable,
+			    PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_get_details_async (client, package_ids, cancellable, progress_callback, progress_user_data,
+				     (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_get_update_detail_sync:
+ * @client: a valid #PkClient 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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Get details about the specific update, for instance any CVE urls and
+ * severity information.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_get_update_detail_sync (PkClient *client, gchar **package_ids, GCancellable *cancellable,
+				  PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_get_update_detail_async (client, package_ids, cancellable, progress_callback, progress_user_data,
+					   (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_download_packages_sync:
+ * @client: a valid #PkClient instance
+ * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @directory: the location where packages are to be downloaded
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Downloads package files to a specified location.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_download_packages_sync (PkClient *client, gchar **package_ids, const gchar *directory, GCancellable *cancellable,
+				  PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_download_packages_async (client, package_ids, directory, cancellable, progress_callback, progress_user_data,
+					   (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_get_updates_sync:
+ * @client: a valid #PkClient instance
+ * @filters: a %PkBitfield such as %PK_FILTER_ENUM_DEVEL or %PK_FILTER_ENUM_NONE
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Get a list of all the packages that can be updated for all repositories.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_get_updates_sync (PkClient *client, PkBitfield filters, GCancellable *cancellable,
+			    PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_get_updates_async (client, filters, cancellable, progress_callback, progress_user_data,
+				     (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_get_old_transactions_sync:
+ * @client: a valid #PkClient instance
+ * @number: the number of past transactions to return, or 0 for all
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Get the old transaction list, mainly used for the rollback viewer.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_get_old_transactions_sync (PkClient *client, guint number, GCancellable *cancellable,
+				     PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_get_old_transactions_async (client, number, cancellable, progress_callback, progress_user_data,
+					      (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_update_system_sync:
+ * @client: a valid #PkClient instance
+ * @only_trusted: only trusted packages should be installed
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * 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_client_repo_disable()
+ * - pk_client_update_system()
+ * - pk_client_repo_enable()
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_update_system_sync (PkClient *client, gboolean only_trusted, GCancellable *cancellable,
+			      PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_update_system_async (client, only_trusted, cancellable, progress_callback, progress_user_data,
+				       (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_get_depends_sync:
+ * @client: a valid #PkClient instance
+ * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
+ * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @recursive: If we should search recursively for depends
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Get the packages that depend this one, i.e. child->parent.
  *
- * Resolves a filename to multiple Package IDs.
  * Warning: this function is synchronous, and may block. Do not use it in GUI
  * applications.
  *
  * Return value: a %PkResults object, or NULL for error
  **/
 PkResults *
-pk_client_search_file_sync (PkClient *client, PkFilterEnum filter, const gchar *filename, GCancellable *cancellable,
+pk_client_get_depends_sync (PkClient *client, PkBitfield filters, gchar **package_ids, gboolean recursive, GCancellable *cancellable,
 			    PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
 {
 	PkClientHelper *helper;
 	PkResults *results;
 
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
 	/* create temp object */
@@ -118,8 +610,999 @@ pk_client_search_file_sync (PkClient *client, PkFilterEnum filter, const gchar *
 	helper->error = error;
 
 	/* run async method */
-	pk_client_search_file_async (client, filter, filename, cancellable, progress_callback, progress_user_data,
+	pk_client_get_depends_async (client, filters, package_ids, recursive, cancellable, progress_callback, progress_user_data,
 				     (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_get_packages_sync:
+ * @client: a valid #PkClient instance
+ * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Get the list of packages from the backend
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_get_packages_sync (PkClient *client, PkBitfield filters, GCancellable *cancellable,
+			     PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_get_packages_async (client, filters, cancellable, progress_callback, progress_user_data,
+				      (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_get_requires_sync:
+ * @client: a valid #PkClient instance
+ * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
+ * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @recursive: If we should search recursively for requires
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Get the packages that require this one, i.e. parent->child.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_get_requires_sync (PkClient *client, PkBitfield filters, gchar **package_ids, gboolean recursive, GCancellable *cancellable,
+			     PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_get_requires_async (client, filters, package_ids, recursive, cancellable, progress_callback, progress_user_data,
+				      (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_what_provides_sync:
+ * @client: a valid #PkClient instance
+ * @filters: a %PkBitfield such as %PK_FILTER_ENUM_GUI | %PK_FILTER_ENUM_FREE or %PK_FILTER_ENUM_NONE
+ * @provides: a #PkProvidesEnum value such as PK_PROVIDES_ENUM_CODEC
+ * @search: a search term such as "sound/mp3"
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * This should return packages that provide the supplied attributes.
+ * This method is useful for finding out what package(s) provide a modalias
+ * or GStreamer codec string.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_what_provides_sync (PkClient *client, PkBitfield filters, PkProvidesEnum provides, const gchar *search, GCancellable *cancellable,
+			      PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_what_provides_async (client, filters, provides, search, cancellable, progress_callback, progress_user_data,
+				       (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_get_distro_upgrades_sync:
+ * @client: a valid #PkClient 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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * This method should return a list of distribution upgrades that are available.
+ * It should not return updates, only major upgrades.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_get_distro_upgrades_sync (PkClient *client, GCancellable *cancellable,
+				    PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_get_distro_upgrades_async (client, cancellable, progress_callback, progress_user_data,
+					     (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_get_files_sync:
+ * @client: a valid #PkClient 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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Get the file list (i.e. a list of files installed) for the specified package.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_get_files_sync (PkClient *client, gchar **package_ids, GCancellable *cancellable,
+			  PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_get_files_async (client, package_ids, cancellable, progress_callback, progress_user_data,
+				   (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_get_categories_sync:
+ * @client: a valid #PkClient 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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Get a list of all categories supported.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_get_categories_sync (PkClient *client, GCancellable *cancellable,
+				PkProgressCallback progress_callback, gpointer progress_user_data,
+				GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_get_categories_async (client, cancellable, progress_callback, progress_user_data,
+					(GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_remove_packages_sync:
+ * @client: a valid #PkClient 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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * 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.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_remove_packages_sync (PkClient *client, gchar **package_ids, gboolean allow_deps, gboolean autoremove, GCancellable *cancellable,
+				PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_remove_packages_async (client, package_ids, allow_deps, autoremove, cancellable, progress_callback, progress_user_data,
+					 (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_refresh_cache_sync:
+ * @client: a valid #PkClient instance
+ * @force: if we should aggressively drop caches
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Refresh the cache, i.e. download new metadata from a remote URL so that
+ * package lists are up to date.
+ * This action may take a few minutes and should be done when the session and
+ * system are idle.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_refresh_cache_sync (PkClient *client, gboolean force, GCancellable *cancellable,
+			      PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_refresh_cache_async (client, force, cancellable, progress_callback, progress_user_data,
+				       (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_install_packages_sync:
+ * @client: a valid #PkClient instance
+ * @only_trusted: only trusted packages should be installed
+ * @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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Install a package of the newest and most correct version.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_install_packages_sync (PkClient *client, gboolean only_trusted, gchar **package_ids, GCancellable *cancellable,
+				 PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_install_packages_async (client, only_trusted, package_ids, cancellable, progress_callback, progress_user_data,
+					  (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_install_signature_sync:
+ * @client: a valid #PkClient instance
+ * @type: the signature type, e.g. %PK_SIGTYPE_ENUM_GPG
+ * @key_id: a key ID such as "0df23df"
+ * @package_id: a signature_id structure 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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Install a software source signature of the newest and most correct version.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_install_signature_sync (PkClient *client, PkSigTypeEnum type, const gchar *key_id, const gchar *package_id, GCancellable *cancellable,
+				  PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_install_signature_async (client, type, key_id, package_id, cancellable, progress_callback, progress_user_data,
+					   (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_update_packages_sync:
+ * @client: a valid #PkClient instance
+ * @only_trusted: only trusted packages should be installed
+ * @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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Update specific packages to the newest available versions.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_update_packages_sync (PkClient *client, gboolean only_trusted, gchar **package_ids, GCancellable *cancellable,
+				PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_update_packages_async (client, only_trusted, package_ids, cancellable, progress_callback, progress_user_data,
+					 (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_install_files_sync:
+ * @client: a valid #PkClient instance
+ * @only_trusted: only trusted packages should be installed
+ * @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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Install a file locally, and get the deps from the repositories.
+ * This is useful for double clicking on a .rpm or .deb file.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_install_files_sync (PkClient *client, gboolean only_trusted, gchar **files, GCancellable *cancellable,
+			      PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_install_files_async (client, only_trusted, files, cancellable, progress_callback, progress_user_data,
+				       (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_accept_eula_sync:
+ * @client: a valid #PkClient instance
+ * @eula_id: the <literal>eula_id</literal> we are agreeing to
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * We may want to agree to a EULA dialog if one is presented.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_accept_eula_sync (PkClient *client, const gchar *eula_id, GCancellable *cancellable,
+			    PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_accept_eula_async (client, eula_id, cancellable, progress_callback, progress_user_data,
+				     (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_rollback_sync:
+ * @client: a valid #PkClient instance
+ * @transaction_id: the <literal>transaction_id</literal> we want to return to
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * We may want to agree to a EULA dialog if one is presented.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_rollback_sync (PkClient *client, const gchar *transaction_id, GCancellable *cancellable,
+			 PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_accept_eula_async (client, transaction_id, cancellable, progress_callback, progress_user_data,
+				     (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_get_repo_list_sync:
+ * @client: a valid #PkClient instance
+ * @filters: a %PkBitfield such as %PK_FILTER_ENUM_DEVEL or %PK_FILTER_ENUM_NONE
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Get the list of repositories installed on the system.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_get_repo_list_sync (PkClient *client, PkBitfield filters, GCancellable *cancellable,
+			      PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_get_repo_list_async (client, filters, cancellable, progress_callback, progress_user_data,
+				       (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_repo_enable_sync:
+ * @client: a valid #PkClient instance
+ * @repo_id: a repo_id structure such as "livna-devel"
+ * @enabled: if we should enable the repository
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Enable or disable the repository.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_repo_enable_sync (PkClient *client, const gchar *repo_id, gboolean enabled, GCancellable *cancellable,
+			    PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_repo_enable_async (client, repo_id, enabled, cancellable, progress_callback, progress_user_data,
+				     (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_repo_set_data_sync:
+ * @client: a valid #PkClient instance
+ * @repo_id: a repo_id structure such as "livna-devel"
+ * @parameter: the parameter to change
+ * @value: what we should change it to
+ * @cancellable: a #GCancellable or %NULL
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * We may want to set a repository parameter.
+ * NOTE: this is free text, and is left to the backend to define a format.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_repo_set_data_sync (PkClient *client, const gchar *repo_id, const gchar *parameter, const gchar *value, GCancellable *cancellable,
+			      PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_repo_set_data_async (client, repo_id, parameter, value, cancellable, progress_callback, progress_user_data,
+				       (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_simulate_install_files_sync:
+ * @client: a valid #PkClient 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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Simulate an installation of files.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_simulate_install_files_sync (PkClient *client, gchar **files, GCancellable *cancellable,
+					PkProgressCallback progress_callback, gpointer progress_user_data,
+					GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_simulate_install_files_async (client, files, cancellable, progress_callback, progress_user_data,
+						(GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_simulate_install_packages_sync:
+ * @client: a valid #PkClient 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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Simulate an installation of packages.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_simulate_install_packages_sync (PkClient *client, gchar **package_ids, GCancellable *cancellable,
+					  PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_simulate_install_packages_async (client, package_ids, cancellable, progress_callback, progress_user_data,
+						   (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_simulate_remove_packages_sync:
+ * @client: a valid #PkClient 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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Simulate a removal of packages.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_simulate_remove_packages_sync (PkClient *client, gchar **package_ids, GCancellable *cancellable,
+					 PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_simulate_remove_packages_async (client, package_ids, cancellable, progress_callback, progress_user_data,
+						  (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_simulate_update_packages_sync:
+ * @client: a valid #PkClient 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
+ * @error: the #GError to store any failure, or %NULL
+ *
+ * Simulate an update of packages.
+ *
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_simulate_update_packages_sync (PkClient *client, gchar **package_ids, GCancellable *cancellable,
+					 PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (PK_IS_CLIENT (client), NULL);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_simulate_update_packages_async (client, package_ids, cancellable, progress_callback, progress_user_data,
+						  (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+
 	g_main_loop_run (helper->loop);
 
 	results = helper->results;
diff --git a/lib/packagekit-glib2/pk-client-sync.h b/lib/packagekit-glib2/pk-client-sync.h
index f064439..db0b395 100644
--- a/lib/packagekit-glib2/pk-client-sync.h
+++ b/lib/packagekit-glib2/pk-client-sync.h
@@ -26,15 +26,258 @@
 #include <packagekit-glib2/packagekit.h>
 
 PkResults	*pk_client_resolve_sync			(PkClient		*client,
-							 PkFilterEnum		 filter,
+							 PkBitfield		 filters,
 							 gchar			**packages,
 							 GCancellable		*cancellable,
 							 PkProgressCallback	 progress_callback,
 							 gpointer		 progress_user_data,
 							 GError			**error);
+
+PkResults	*pk_client_search_name_sync		(PkClient		*client,
+							 PkBitfield		 filters,
+							 const gchar		*search,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_search_details_sync		(PkClient		*client,
+							 PkBitfield		 filters,
+							 const gchar		*search,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_search_group_sync		(PkClient		*client,
+							 PkBitfield		 filters,
+							 const gchar		*search,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
 PkResults	*pk_client_search_file_sync		(PkClient		*client,
-							 PkFilterEnum		 filter,
-							 const gchar		*filename,
+							 PkBitfield		 filters,
+							 const gchar		*search,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_get_details_sync		(PkClient		*client,
+							 gchar			**package_ids,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_get_update_detail_sync	(PkClient		*client,
+							 gchar			**package_ids,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_download_packages_sync	(PkClient		*client,
+							 gchar			**package_ids,
+							 const gchar		*directory,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_get_updates_sync		(PkClient		*client,
+							 PkBitfield		 filters,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_get_old_transactions_sync	(PkClient		*client,
+							 guint			 number,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_update_system_sync		(PkClient		*client,
+							 gboolean		 only_trusted,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_get_depends_sync		(PkClient		*client,
+							 PkBitfield		 filters,
+							 gchar			**package_ids,
+							 gboolean		 recursive,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_get_packages_sync		(PkClient		*client,
+							 PkBitfield		 filters,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_get_requires_sync		(PkClient		*client,
+							 PkBitfield		 filters,
+							 gchar			**package_ids,
+							 gboolean		 recursive,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_what_provides_sync		(PkClient		*client,
+							 PkBitfield		 filters,
+							 PkProvidesEnum		 provides,
+							 const gchar		*search,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_get_distro_upgrades_sync	(PkClient		*client,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_get_files_sync		(PkClient		*client,
+							 gchar			**package_ids,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_get_categories_sync		(PkClient		*client,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_remove_packages_sync	(PkClient		*client,
+							 gchar			**package_ids,
+							 gboolean		 allow_deps,
+							 gboolean		 autoremove,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_refresh_cache_sync		(PkClient		*client,
+							 gboolean		 force,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_install_packages_sync	(PkClient		*client,
+							 gboolean		 only_trusted,
+							 gchar			**package_ids,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_install_signature_sync	(PkClient		*client,
+							 PkSigTypeEnum		 type,
+							 const gchar		*key_id,
+							 const gchar		*package_id,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_update_packages_sync		(PkClient		*client,
+							 gboolean		 only_trusted,
+							 gchar			**package_ids,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_install_files_sync		(PkClient		*client,
+							 gboolean		 only_trusted,
+							 gchar			**files,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_accept_eula_sync		(PkClient		*client,
+							 const gchar		*eula_id,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_rollback_sync		(PkClient		*client,
+							 const gchar		*transaction_id,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_get_repo_list_sync		(PkClient		*client,
+							 PkBitfield		 filters,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_repo_enable_sync		(PkClient		*client,
+							 const gchar		*repo_id,
+							 gboolean		 enabled,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_repo_set_data_sync		(PkClient		*client,
+							 const gchar		*repo_id,
+							 const gchar		*parameter,
+							 const gchar		*value,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_simulate_install_files_sync	(PkClient		*client,
+							 gchar			**files,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_simulate_install_packages_sync (PkClient		*client,
+							 gchar			**package_ids,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_simulate_remove_packages_sync (PkClient		*client,
+							 gchar			**package_ids,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_simulate_update_packages_sync (PkClient		*client,
+							 gchar			**package_ids,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+PkResults	*pk_client_adopt_sync 			(PkClient		*client,
+							 const gchar		*transaction_id,
 							 GCancellable		*cancellable,
 							 PkProgressCallback	 progress_callback,
 							 gpointer		 progress_user_data,
commit b3ff79073e4fc13685821763249f9452918eea3c
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 10:53:09 2009 +0100

    Add a --enable-glib configure entry, but default this to TRUE

diff --git a/client/Makefile.am b/client/Makefile.am
index 44261d4..d0b3bba 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -48,10 +48,6 @@ INCLUDES =						\
 	-I$(top_srcdir)/lib				\
 	$(NULL)
 
-PK_GLIB_LIBS =						\
-	$(top_builddir)/lib/packagekit-glib/libpackagekit-glib.la	\
-	$(NULL)
-
 bin_PROGRAMS =						\
 	pkcon						\
 	pkmon						\
@@ -66,47 +62,41 @@ PK_GLIB2_LIBS =						\
 	$(top_builddir)/lib/packagekit-glib2/libpackagekitprivate.a	\
 	$(NULL)
 
-noinst_PROGRAMS = pkcon-test pkmon-test pkgenpack-test
-
-libpkconsole_a_CFLAGS =					\
-	$(WARNINGFLAGS_C)				\
-	$(NULL)
-
-pkcon_test_SOURCES =					\
+pkcon_SOURCES =						\
 	pk-console-test.c				\
 	$(NULL)
 
-pkcon_test_LDADD =					\
+pkcon_LDADD =						\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
 	$(SQLITE_LIBS)					\
 	$(PK_GLIB2_LIBS)				\
 	$(NULL)
 
-pkcon_test_CFLAGS =					\
+pkcon_CFLAGS =						\
 	$(WARNINGFLAGS_C)				\
 	$(NULL)
 
-pkmon_test_SOURCES =					\
+pkmon_SOURCES =						\
 	pk-monitor-test.c				\
 	$(NULL)
 
-pkmon_test_LDADD =					\
+pkmon_LDADD =						\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
 	$(SQLITE_LIBS)					\
 	$(PK_GLIB2_LIBS)				\
 	$(NULL)
 
-pkmon_test_CFLAGS =					\
+pkmon_CFLAGS =						\
 	$(WARNINGFLAGS_C)				\
 	$(NULL)
 
-pkgenpack_test_SOURCES =				\
+pkgenpack_SOURCES =				\
 	pk-generate-pack-test.c				\
 	$(NULL)
 
-pkgenpack_test_LDADD = 					\
+pkgenpack_LDADD = 					\
 	$(ARCHIVE_LIBS)					\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
@@ -114,11 +104,15 @@ pkgenpack_test_LDADD = 					\
 	$(PK_GLIB2_LIBS)				\
 	$(NULL)
 
-pkgenpack_test_CFLAGS =					\
+pkgenpack_CFLAGS =					\
 	$(WARNINGFLAGS_C)				\
 	$(NULL)
 
-endif
+else
+
+PK_GLIB_LIBS =						\
+	$(top_builddir)/lib/packagekit-glib/libpackagekit-glib.la	\
+	$(NULL)
 
 pkcon_SOURCES =						\
 	egg-debug.c					\
@@ -177,6 +171,8 @@ pkgenpack_CFLAGS =					\
 	$(WARNINGFLAGS_C)				\
 	$(NULL)
 
+endif
+
 if EGG_BUILD_TESTS
 
 check_PROGRAMS =					\
diff --git a/configure.ac b/configure.ac
index a173274..8e93dbf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -546,6 +546,16 @@ AC_ARG_ENABLE(ruck, AS_HELP_STRING([--enable-ruck],[Build ruck client]),
 AM_CONDITIONAL(PK_BUILD_RUCK, test $build_ruck = "yes")
 
 dnl ---------------------------------------------------------------------------
+dnl - Able to build GLib (legacy) library
+dnl ---------------------------------------------------------------------------
+AC_ARG_ENABLE(glib, AS_HELP_STRING([--enable-glib],[Build glib library (legacy)]),
+	      build_glib=$enableval,build_glib=yes)
+AM_CONDITIONAL(PK_BUILD_GLIB, test $build_glib = "yes")
+if test x$build_glib = xyes; then
+	AC_DEFINE(PK_BUILD_GLIB,1,[Build glib code])
+fi
+
+dnl ---------------------------------------------------------------------------
 dnl - Able to build GLib2 library
 dnl ---------------------------------------------------------------------------
 AC_ARG_ENABLE(glib2, AS_HELP_STRING([--enable-glib2],[Build glib2 library (experimental)]),
@@ -872,6 +882,7 @@ echo "
         pm-utils scripts:          ${build_pm_utils}
         RUCK client:               ${build_ruck}
         QT library:                ${build_qt}
+        GLib:                      ${build_glib}
         GLib2:                     ${build_glib2}
 	Managed bindings:          ${build_managed}
 
diff --git a/contrib/command-not-found/Makefile.am b/contrib/command-not-found/Makefile.am
index 272807e..d07c07c 100644
--- a/contrib/command-not-found/Makefile.am
+++ b/contrib/command-not-found/Makefile.am
@@ -13,31 +13,8 @@ INCLUDES =						\
 	-DEGG_CONSOLE="\"PK_CONSOLE\""			\
 	-I$(top_srcdir)/lib
 
-PK_GLIB_LIBS = $(top_builddir)/lib/packagekit-glib/libpackagekit-glib.la
-
 libexec_PROGRAMS = pk-command-not-found
 
-pk_command_not_found_SOURCES =				\
-	egg-debug.c					\
-	egg-debug.h					\
-	egg-string.c					\
-	egg-string.h					\
-	pk-tools-common.c				\
-	pk-tools-common.h				\
-	pk-command-not-found.c				\
-	$(NULL)
-
-pk_command_not_found_LDADD =				\
-	$(GLIB_LIBS)					\
-	$(DBUS_LIBS)					\
-	$(PK_GLIB_LIBS)					\
-	$(NULL)
-
-pk_command_not_found_CFLAGS =				\
-	$(WARNINGFLAGS_C)				\
-	$(NULL)
-
-# Only build this functionality if we have glib2, and don't yet install it
 if PK_BUILD_GLIB2
 
 PK_GLIB2_LIBS =						\
@@ -45,24 +22,43 @@ PK_GLIB2_LIBS =						\
 	$(top_builddir)/lib/packagekit-glib2/libpackagekitprivate.a	\
 	$(NULL)
 
-noinst_PROGRAMS = pk-command-not-found-test
-
-pk_command_not_found_test_SOURCES =			\
+pk_command_not_found_SOURCES =				\
 	pk-command-not-found-test.c			\
 	$(NULL)
 
-pk_command_not_found_test_LDADD =			\
+pk_command_not_found_LDADD =				\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
 	$(PK_GLIB2_LIBS)				\
 	$(NULL)
 
-pk_command_not_found_test_CFLAGS =			\
-	$(WARNINGFLAGS_C)				\
+else
+
+PK_GLIB_LIBS =						\
+	$(top_builddir)/lib/packagekit-glib/libpackagekit-glib.la	\
+	$(NULL)
+
+pk_command_not_found_SOURCES =				\
+	egg-debug.c					\
+	egg-debug.h					\
+	egg-string.c					\
+	egg-string.h					\
+	pk-tools-common.c				\
+	pk-tools-common.h				\
+	pk-command-not-found.c				\
+	$(NULL)
+
+pk_command_not_found_LDADD =				\
+	$(GLIB_LIBS)					\
+	$(DBUS_LIBS)					\
+	$(PK_GLIB_LIBS)					\
 	$(NULL)
 
 endif
 
+pk_command_not_found_CFLAGS =				\
+	$(WARNINGFLAGS_C)				\
+	$(NULL)
 
 bashprofiledir = ${SYSCONFDIR}/profile.d
 dist_bashprofile_DATA = PackageKit.sh
diff --git a/contrib/debuginfo-install/Makefile.am b/contrib/debuginfo-install/Makefile.am
index f453427..d1a9ac6 100644
--- a/contrib/debuginfo-install/Makefile.am
+++ b/contrib/debuginfo-install/Makefile.am
@@ -28,10 +28,33 @@ INCLUDES =						\
 	-DEGG_CONSOLE="\"PK_CONSOLE\""			\
 	-I$(top_srcdir)/lib
 
-PK_GLIB_LIBS = $(top_builddir)/lib/packagekit-glib/libpackagekit-glib.la
-
 bin_PROGRAMS = pk-debuginfo-install
 
+if PK_BUILD_GLIB2
+
+PK_GLIB2_LIBS =						\
+	$(top_builddir)/lib/packagekit-glib2/libpackagekit-glib2.la	\
+	$(top_builddir)/lib/packagekit-glib2/libpackagekitprivate.a	\
+	$(NULL)
+
+pk_debuginfo_install_SOURCES =				\
+	egg-debug.c					\
+	egg-debug.h					\
+	pk-debuginfo-install-test.c			\
+	$(NULL)
+
+pk_debuginfo_install_LDADD =				\
+	$(GLIB_LIBS)					\
+	$(DBUS_LIBS)					\
+	$(PK_GLIB_LIBS)					\
+	$(NULL)
+
+else
+
+PK_GLIB_LIBS =						\
+	$(top_builddir)/lib/packagekit-glib/libpackagekit-glib.la	\
+	$(NULL)
+
 pk_debuginfo_install_SOURCES =				\
 	egg-debug.c					\
 	egg-debug.h					\
@@ -46,6 +69,8 @@ pk_debuginfo_install_LDADD =				\
 	$(PK_GLIB_LIBS)					\
 	$(NULL)
 
+endif
+
 pk_debuginfo_install_CFLAGS =				\
 	$(WARNINGFLAGS_C)				\
 	$(NULL)
diff --git a/lib/Makefile.am b/lib/Makefile.am
index d509ce9..5e70935 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = packagekit-glib python
+SUBDIRS = python
 
 if PK_BUILD_QT
 SUBDIRS += packagekit-qt
@@ -8,6 +8,10 @@ if PK_BUILD_MANAGED
 SUBDIRS += packagekit-sharp
 endif
 
+if PK_BUILD_GLIB
+SUBDIRS += packagekit-glib
+endif
+
 if PK_BUILD_GLIB2
 SUBDIRS += packagekit-glib2
 endif
commit 826daa3cf74d003788d70e2a68147f8ae7f4abd1
Author: swkothar <swkothar at fedoraproject.org>
Date:   Wed Sep 9 09:19:28 2009 +0000

    Sending translation for Gujarati

diff --git a/po/gu.po b/po/gu.po
index e9f13dc..0cd30b6 100644
--- a/po/gu.po
+++ b/po/gu.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: packagekit.master.gu\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-07 02:36+0000\n"
-"PO-Revision-Date: 2009-09-07 13:42+0530\n"
+"POT-Creation-Date: 2009-09-09 08:33+0000\n"
+"PO-Revision-Date: 2009-09-09 14:48+0530\n"
 "Last-Translator: Sweta Kothari <swkothar at redhat.com>\n"
 "Language-Team: Gujarati\n"
 "MIME-Version: 1.0\n"
@@ -21,106 +21,106 @@ msgstr ""
 "\n"
 
 #. TRANSLATORS: this is an atomic transaction
-#: ../client/pk-console.c:238 ../client/pk-console-test.c:147
+#: ../client/pk-console.c:237 ../client/pk-console-test.c:143
 msgid "Transaction"
 msgstr "પરિવહન"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:240 ../client/pk-console-test.c:149
+#: ../client/pk-console.c:239 ../client/pk-console-test.c:145
 msgid "System time"
 msgstr "સિસ્ટમ સમય"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:147
 msgid "Succeeded"
 msgstr "સફળ થયેલ"
 
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:147
 msgid "True"
 msgstr "True"
 
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:147
 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:244 ../client/pk-console-test.c:153
+#: ../client/pk-console.c:243 ../client/pk-console-test.c:149
 #: ../src/pk-polkit-action-lookup.c:327
 msgid "Role"
 msgstr "ભૂમિકા"
 
 #. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:249 ../client/pk-console-test.c:158
+#: ../client/pk-console.c:248 ../client/pk-console-test.c:154
 msgid "Duration"
 msgstr "ગાળો"
 
-#: ../client/pk-console.c:249 ../client/pk-console-test.c:158
+#: ../client/pk-console.c:248 ../client/pk-console-test.c:154
 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:253 ../client/pk-console-test.c:162
+#: ../client/pk-console.c:252 ../client/pk-console-test.c:158
 #: ../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:255 ../client/pk-console-test.c:164
+#: ../client/pk-console.c:254 ../client/pk-console-test.c:160
 msgid "User ID"
 msgstr "વપરાશકર્તા ID"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:262 ../client/pk-console-test.c:171
+#: ../client/pk-console.c:261 ../client/pk-console-test.c:167
 msgid "Username"
 msgstr "વપરાશકર્તાનામ"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:266 ../client/pk-console-test.c:175
+#: ../client/pk-console.c:265 ../client/pk-console-test.c:171
 msgid "Real name"
 msgstr "સાચુ નામ"
 
-#: ../client/pk-console.c:274 ../client/pk-console-test.c:183
+#: ../client/pk-console.c:273 ../client/pk-console-test.c:179
 msgid "Affected packages:"
 msgstr "અસર થયેલ પેકેજો:"
 
-#: ../client/pk-console.c:276 ../client/pk-console-test.c:185
+#: ../client/pk-console.c:275 ../client/pk-console-test.c:181
 msgid "Affected packages: None"
 msgstr "અસર થયેલ પેકેજો: કંઇ નહિં"
 
 #. TRANSLATORS: When processing, we might have to remove other dependencies
-#: ../client/pk-console.c:337 ../client/pk-task-text.c:220
+#: ../client/pk-console.c:336 ../lib/packagekit-glib2/pk-task-text.c:220
 msgid "The following packages have to be removed:"
 msgstr "નીચેના પેકેજો દૂર કરવામાં આવવા જોઈએ:"
 
 #. TRANSLATORS: When processing, we might have to install other dependencies
-#: ../client/pk-console.c:340 ../client/pk-task-text.c:225
+#: ../client/pk-console.c:339 ../lib/packagekit-glib2/pk-task-text.c:225
 msgid "The following packages have to be installed:"
 msgstr "નીચેનાં પેકેજોને સ્થાપિત કરવુ જ પડશે:"
 
 #. TRANSLATORS: When processing, we might have to update other dependencies
-#: ../client/pk-console.c:343 ../client/pk-task-text.c:230
+#: ../client/pk-console.c:342 ../lib/packagekit-glib2/pk-task-text.c:230
 msgid "The following packages have to be updated:"
 msgstr "નીચેનાં પેકેજોને સુધારવુ જ પડશે:"
 
 #. TRANSLATORS: When processing, we might have to reinstall other dependencies
-#: ../client/pk-console.c:346 ../client/pk-task-text.c:235
+#: ../client/pk-console.c:345 ../lib/packagekit-glib2/pk-task-text.c:235
 msgid "The following packages have to be reinstalled:"
 msgstr "નીચેનાં પેકેજોને પુન:સ્થાપિત કરવુ જ પડશે:"
 
 #. TRANSLATORS: When processing, we might have to downgrade other dependencies
-#: ../client/pk-console.c:349 ../client/pk-task-text.c:240
+#: ../client/pk-console.c:348 ../lib/packagekit-glib2/pk-task-text.c:240
 msgid "The following packages have to be downgraded:"
 msgstr "નીચેનાં પેકેજોને નીચે ઉતારવા જ પડશે:"
 
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:363 ../client/pk-console-test.c:205
+#: ../client/pk-console.c:362 ../client/pk-console-test.c:201
 msgid "Distribution"
 msgstr "વિતરણ"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:365 ../client/pk-console-test.c:207
+#: ../client/pk-console.c:364 ../client/pk-console-test.c:203
 msgid "Type"
 msgstr "પ્રકાર"
 
@@ -128,45 +128,46 @@ msgstr "પ્રકાર"
 #. TRANSLATORS: this is the summary of the group
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:367 ../client/pk-console.c:390
-#: ../client/pk-console-test.c:209 ../client/pk-console-test.c:230
+#: ../client/pk-console.c:366 ../client/pk-console.c:389
+#: ../client/pk-console-test.c:205 ../client/pk-console-test.c:226
 msgid "Summary"
 msgstr "સારાંશ"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:379 ../client/pk-console-test.c:219
+#: ../client/pk-console.c:378 ../client/pk-console-test.c:215
 msgid "Category"
 msgstr "વર્ગ"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:381 ../client/pk-console-test.c:221
+#: ../client/pk-console.c:380 ../client/pk-console-test.c:217
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:384 ../client/pk-console-test.c:224
+#: ../client/pk-console.c:383 ../client/pk-console-test.c:220
 msgid "Parent"
 msgstr "પિતૃ"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:387 ../client/pk-console-test.c:227
+#: ../client/pk-console.c:386 ../client/pk-console-test.c:223
 msgid "Name"
 msgstr "નામ"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:393 ../client/pk-console-test.c:233
+#: ../client/pk-console.c:392 ../client/pk-console-test.c:229
 msgid "Icon"
 msgstr "ચિહ્ન"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:408 ../client/pk-console-test.c:247
+#: ../client/pk-console.c:407 ../client/pk-console-test.c:243
 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:410 ../client/pk-console-test.c:253
-#: ../client/pk-task-text.c:101 ../client/pk-task-text.c:153
+#: ../client/pk-console.c:409 ../client/pk-console-test.c:249
+#: ../lib/packagekit-glib2/pk-task-text.c:101
+#: ../lib/packagekit-glib2/pk-task-text.c:153
 #: ../src/pk-polkit-action-lookup.c:352
 msgid "Package"
 msgid_plural "Packages"
@@ -174,121 +175,121 @@ msgstr[0] "પેકેજ"
 msgstr[1] "પેકેજો"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:413 ../client/pk-console-test.c:256
+#: ../client/pk-console.c:412 ../client/pk-console-test.c:252
 msgid "Updates"
 msgstr "સુધારો"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:417 ../client/pk-console-test.c:260
+#: ../client/pk-console.c:416 ../client/pk-console-test.c:256
 msgid "Obsoletes"
 msgstr "અપ્રચલિત"
 
 #. TRANSLATORS: details about the update, the vendor URLs
-#: ../client/pk-console.c:421 ../client/pk-console-test.c:264
-#: ../client/pk-task-text.c:154
+#: ../client/pk-console.c:420 ../client/pk-console-test.c:260
+#: ../lib/packagekit-glib2/pk-task-text.c:154
 msgid "Vendor"
 msgstr "વિક્રેતા"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:425 ../client/pk-console-test.c:268
+#: ../client/pk-console.c:424 ../client/pk-console-test.c:264
 msgid "Bugzilla"
 msgstr "બગઝીલા"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:429 ../client/pk-console-test.c:272
+#: ../client/pk-console.c:428 ../client/pk-console-test.c:268
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:433 ../client/pk-console-test.c:276
+#: ../client/pk-console.c:432 ../client/pk-console-test.c:272
 msgid "Restart"
 msgstr "પુન:શરૂ કરો"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:437 ../client/pk-console-test.c:280
+#: ../client/pk-console.c:436 ../client/pk-console-test.c:276
 msgid "Update text"
 msgstr "લખાણને સુધારો"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:441 ../client/pk-console-test.c:284
+#: ../client/pk-console.c:440 ../client/pk-console-test.c:280
 msgid "Changes"
 msgstr "બદલાવો"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:445 ../client/pk-console-test.c:288
+#: ../client/pk-console.c:444 ../client/pk-console-test.c:284
 msgid "State"
 msgstr "સ્થિતિ"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:450 ../client/pk-console-test.c:293
+#: ../client/pk-console.c:449 ../client/pk-console-test.c:289
 msgid "Issued"
 msgstr "અદા કરેલ"
 
 #. TRANSLATORS: details about the update, date the update was updated
-#: ../client/pk-console.c:455 ../client/pk-console-test.c:298
+#: ../client/pk-console.c:454 ../client/pk-console-test.c:294
 msgid "Updated"
 msgstr "સુધારેલ"
 
 #. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:475 ../client/pk-console-test.c:316
+#: ../client/pk-console.c:474 ../client/pk-console-test.c:312
 msgid "Enabled"
 msgstr "સક્રિય થયેલ છે"
 
 #. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:478 ../client/pk-console-test.c:319
+#: ../client/pk-console.c:477 ../client/pk-console-test.c:315
 msgid "Disabled"
 msgstr "નિષ્ક્રિય થયેલ"
 
-#: ../client/pk-console.c:555 ../client/pk-console.c:557
+#: ../client/pk-console.c:554 ../client/pk-console.c:556
 msgid "Percentage"
 msgstr "ટકાવારી"
 
-#: ../client/pk-console.c:557
+#: ../client/pk-console.c:556
 msgid "Unknown"
 msgstr "અજ્ઞાત"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:599 ../client/pk-console-test.c:341
+#: ../client/pk-console.c:598 ../client/pk-console-test.c:337
 msgid "System restart required by:"
 msgstr "સિસ્ટમ જરૂરિયાત પ્રમાણે પુન:શરૂ થાય છે:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:602 ../client/pk-console-test.c:344
+#: ../client/pk-console.c:601 ../client/pk-console-test.c:340
 msgid "Session restart required:"
 msgstr "સત્ર પુન:શરૂ કરવુ જરૂરી:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:605 ../client/pk-console-test.c:347
+#: ../client/pk-console.c:604 ../client/pk-console-test.c:343
 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:608 ../client/pk-console-test.c:350
+#: ../client/pk-console.c:607 ../client/pk-console-test.c:346
 msgid "Session restart (security) required:"
 msgstr "સત્ર પુન:શરૂ (સુરક્ષા)કરવુ જરૂરી:"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:611 ../client/pk-console-test.c:353
+#: ../client/pk-console.c:610 ../client/pk-console-test.c:349
 msgid "Application restart required by:"
 msgstr "કાર્યક્રમ એ જરૂરિયાત પ્રમાણે પુન:શરૂ થાય છે:"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:666 ../client/pk-console-test.c:704
+#: ../client/pk-console.c:665 ../client/pk-console-test.c:538
 msgid "Please restart the computer to complete the update."
 msgstr "સુધારો સમાપ્ત કરવા માટે મહેરબાની કરીને કમ્પ્યૂટર પુનઃશરૂ કરો."
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:669 ../client/pk-console-test.c:707
+#: ../client/pk-console.c:668 ../client/pk-console-test.c:541
 msgid "Please logout and login to complete the update."
 msgstr "સુધારો સમાપ્ત કરવા માટે મહેરબાની કરીને બહાર નીકળો અને પછી ફરી પ્રવેશ કરો."
 
 #. TRANSLATORS: a package needs to restart the application
-#: ../client/pk-console.c:672
+#: ../client/pk-console.c:671
 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:675 ../client/pk-console-test.c:710
+#: ../client/pk-console.c:674 ../client/pk-console-test.c:544
 msgid ""
 "Please restart the computer to complete the update as important security "
 "updates have been installed."
@@ -297,7 +298,7 @@ msgstr ""
 "સ્થાપિત કરી દેવામાં આવ્યા છે."
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:678 ../client/pk-console-test.c:713
+#: ../client/pk-console.c:677 ../client/pk-console-test.c:547
 msgid ""
 "Please logout and login to complete the update as important security updates "
 "have been installed."
@@ -306,442 +307,443 @@ msgstr ""
 "કરી દેવામાં આવ્યા છે."
 
 #. TRANSLATORS: The package is already installed on the system
-#: ../client/pk-console.c:810
+#: ../client/pk-console.c:809
 #, 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:818
+#: ../client/pk-console.c:817
 #, 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: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
+#: ../client/pk-console.c:843 ../client/pk-console.c:891
+#: ../client/pk-console.c:915 ../client/pk-console.c:963
+#: ../client/pk-console.c:1059 ../client/pk-console.c:1172
+#: ../client/pk-console.c:1233 ../client/pk-tools-common.c:132
+#: ../client/pk-tools-common.c:151 ../client/pk-tools-common.c:159
 #, c-format
 msgid "Internal error: %s"
 msgstr "આંતરિક ભૂલ: %s"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
 #. ask the user
-#: ../client/pk-console.c:876 ../client/pk-console.c:948
-#: ../client/pk-console.c:1266 ../client/pk-task-text.c:299
+#: ../client/pk-console.c:875 ../client/pk-console.c:947
+#: ../client/pk-console.c:1265 ../lib/packagekit-glib2/pk-task-text.c:299
 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
+#: ../client/pk-console.c:880 ../client/pk-console.c:952
 msgid "The package install was canceled!"
 msgstr "પેકેજ સ્થાપન રદ કરેલ હતુ!"
 
 #. TRANSLATORS: There was an error installing the packages. The detailed error follows
-#: ../client/pk-console.c:900 ../client/pk-console.c:1634
+#: ../client/pk-console.c:899 ../client/pk-console.c:1633
 #, 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:972
+#: ../client/pk-console.c:971
 #, 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:1028
+#: ../client/pk-console.c:1027
 #, 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:1051 ../client/pk-console.c:1089
-#: ../client/pk-console.c:1118
+#: ../client/pk-console.c:1050 ../client/pk-console.c:1088
+#: ../client/pk-console.c:1117
 #, c-format
 msgid "This tool could not remove the packages: %s"
 msgstr "આ સાધન પેકેજો દૂર કરી શક્યું નહિં: %s"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:1104
+#: ../client/pk-console.c:1103
 msgid "Proceed with additional packages?"
 msgstr "વધારાનાં પેકેજો સાથે આગળ જાઓ?"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:1109
+#: ../client/pk-console.c:1108
 msgid "The package removal was canceled!"
 msgstr "પેકેજ નિરાકરણ રદ થઈ હતી!"
 
 #. TRANSLATORS: The package name was not found in any software sources
-#: ../client/pk-console.c:1150
+#: ../client/pk-console.c:1149
 #, 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:1181
+#: ../client/pk-console.c:1180
 #, 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:1213 ../client/pk-console.c:1225
-#: ../client/pk-console.c:1280
+#: ../client/pk-console.c:1212 ../client/pk-console.c:1224
+#: ../client/pk-console.c:1279
 #, 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
+#: ../client/pk-console.c:1270
 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:1304 ../client/pk-console.c:1312
+#: ../client/pk-console.c:1303 ../client/pk-console.c:1311
 #, 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:1334 ../client/pk-console.c:1342
+#: ../client/pk-console.c:1333 ../client/pk-console.c:1341
 #, 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:1364 ../client/pk-console.c:1372
+#: ../client/pk-console.c:1363 ../client/pk-console.c:1371
 #, 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:1394
+#: ../client/pk-console.c:1393
 #, 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:1402
+#: ../client/pk-console.c:1401
 #, 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:1424
+#: ../client/pk-console.c:1423
 #, c-format
 msgid "File already exists: %s"
 msgstr "ફાઇલ પહેલેથી જ અસ્તિત્વ ધરાવે છે: %s"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1429 ../client/pk-console.c:1485
-#: ../client/pk-console.c:1560
+#: ../client/pk-console.c:1428 ../client/pk-console.c:1484
+#: ../client/pk-console.c:1559
 msgid "Getting package list"
 msgstr "પેકેજ યાદી મેળવી રહ્યા છે"
 
 #. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
-#: ../client/pk-console.c:1435 ../client/pk-console.c:1491
-#: ../client/pk-console.c:1566
+#: ../client/pk-console.c:1434 ../client/pk-console.c:1490
+#: ../client/pk-console.c:1565
 #, 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:1446
+#: ../client/pk-console.c:1445
 #, c-format
 msgid "Failed to save to disk"
 msgstr "ડિસ્કમાં સંગ્રહ કરવા માટે નિષ્ફળ"
 
 #. TRANSLATORS: There was an error getting the list. The filename follows
-#: ../client/pk-console.c:1480 ../client/pk-console.c:1555
+#: ../client/pk-console.c:1479 ../client/pk-console.c:1554
 #, c-format
 msgid "File does not exist: %s"
 msgstr "ફાઇલ અસ્તિત્વ ધરાવતી નથી: %s"
 
 #. TRANSLATORS: header to a list of packages newly added
-#: ../client/pk-console.c:1512
+#: ../client/pk-console.c:1511
 msgid "Packages to add"
 msgstr "ઉમેરવા માટે પેકેજો"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1520
+#: ../client/pk-console.c:1519
 msgid "Packages to remove"
 msgstr "દૂક કરવા માટે પેકેજો"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1588
+#: ../client/pk-console.c:1587
 #, c-format
 msgid "No new packages need to be installed"
 msgstr "સ્થાપિત કરવા માટે નવા પેકેજોની જરૂર નથી"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1594
+#: ../client/pk-console.c:1593
 msgid "To install"
 msgstr "સ્થાપન કરવા માટે"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1606
+#: ../client/pk-console.c:1605
 msgid "Searching for package: "
 msgstr "પેકેજ માટે શોધી રહ્યા છે: "
 
 #. TRANSLATORS: package was not found -- this is the end of a string ended in ...
-#: ../client/pk-console.c:1610
+#: ../client/pk-console.c:1609
 msgid "not found."
 msgstr "શોધાયુ નથી."
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1621
+#: ../client/pk-console.c:1620
 #, 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:1627
+#: ../client/pk-console.c:1626
 #: ../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:1663
+#: ../client/pk-console.c:1662
 #, 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:1671
+#: ../client/pk-console.c:1670
 #, 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:1702
+#: ../client/pk-console.c:1701
 msgid "Error:"
 msgstr "ભૂલ:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1716 ../client/pk-console-test.c:370
+#: ../client/pk-console.c:1715 ../client/pk-console-test.c:366
 msgid "Package description"
 msgstr "પેકેજ વર્ણન"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:1732 ../client/pk-console-test.c:388
+#: ../client/pk-console.c:1731 ../client/pk-console-test.c:384
 msgid "Message:"
 msgstr "સંદેશ:"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1760 ../client/pk-console-test.c:407
+#: ../client/pk-console.c:1759 ../client/pk-console-test.c:403
 msgid "Package files"
 msgstr "પેકેજ ફાઈલો"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1768 ../client/pk-console-test.c:402
+#: ../client/pk-console.c:1767 ../client/pk-console-test.c:398
 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:1791
+#: ../client/pk-console.c:1790
 msgid "Repository signature required"
 msgstr "રીપોઝીટરી સહી જરૂરી"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
 #. ask the user
-#: ../client/pk-console.c:1801 ../client/pk-task-text.c:113
+#: ../client/pk-console.c:1800 ../lib/packagekit-glib2/pk-task-text.c:113
 msgid "Do you accept this signature?"
 msgstr "શું તમે આ સહી સ્વીકારશો?"
 
 #. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1805 ../client/pk-task-text.c:117
+#: ../client/pk-console.c:1804 ../lib/packagekit-glib2/pk-task-text.c:117
 msgid "The signature was not accepted."
 msgstr "સહી સ્વીકારાયેલ ન હતી."
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1839
+#: ../client/pk-console.c:1838
 msgid "End user license agreement required"
 msgstr "અંતિમ વપરાશકર્તા લાઈસન્સ મંજૂરીપત્રક જરૂરી"
 
 #. TRANSLATORS: This a prompt asking the user to agree to the license
-#: ../client/pk-console.c:1846
+#: ../client/pk-console.c:1845
 msgid "Do you agree to this license?"
 msgstr "શું તમે આ લાઈસન્સ સાથે મંજૂર છો?"
 
 #. TRANSLATORS: This is where the user declined the license
-#: ../client/pk-console.c:1850
+#: ../client/pk-console.c:1849
 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:1879 ../client/pk-console-test.c:972
+#: ../client/pk-console.c:1878 ../client/pk-console-test.c:816
 msgid "The daemon crashed mid-transaction!"
 msgstr "ડિમન મધ્ય-પરિવહન દરમ્યાન ભાંગી પડ્યું!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1932 ../client/pk-console-test.c:1006
+#: ../client/pk-console.c:1931 ../client/pk-console-test.c:850
 msgid "PackageKit Console Interface"
 msgstr "PackageKit કન્સોલ ઈન્ટરફેસ"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1934 ../client/pk-console-test.c:1008
+#: ../client/pk-console.c:1933 ../client/pk-console-test.c:852
 msgid "Subcommands:"
 msgstr "ઉપઆદેશો:"
 
 #. TRANSLATORS: command line argument, if we should show debugging information
 #. TRANSLATORS: if we should show debugging data
-#: ../client/pk-console.c:2027 ../client/pk-console-test.c:1099
-#: ../client/pk-generate-pack.c:187 ../client/pk-monitor.c:128
-#: ../client/pk-monitor-test.c:282
+#: ../client/pk-console.c:2026 ../client/pk-console-test.c:966
+#: ../client/pk-generate-pack.c:185 ../client/pk-generate-pack-test.c:222
+#: ../client/pk-monitor.c:128 ../client/pk-monitor-test.c:282
 #: ../contrib/command-not-found/pk-command-not-found.c:616
+#: ../contrib/command-not-found/pk-command-not-found-test.c:614
 #: ../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:2030 ../client/pk-console-test.c:1102
+#: ../client/pk-console.c:2029 ../client/pk-console-test.c:969
 #: ../client/pk-monitor.c:130 ../client/pk-monitor-test.c:284
 msgid "Show the program version and exit"
 msgstr "કાર્યક્રમ આવૃત્તિ બતાવો અને બહાર નીકળો"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:2033 ../client/pk-console-test.c:1105
+#: ../client/pk-console.c:2032 ../client/pk-console-test.c:972
 msgid "Set the filter, e.g. installed"
 msgstr "ગાળક સુયોજીત કરો, દા.ત. સ્થાપિત"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:2036 ../client/pk-console-test.c:1108
+#: ../client/pk-console.c:2035 ../client/pk-console-test.c:975
 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:2063
+#: ../client/pk-console.c:2062
 msgid "This tool could not connect to system DBUS."
 msgstr "આ સાધન સિસ્ટમ DBUS સાથે જોડી શક્યા નહિં."
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:2153 ../client/pk-console-test.c:1183
+#: ../client/pk-console.c:2152 ../client/pk-console-test.c:1052
 msgid "The filter specified was invalid"
 msgstr "સ્પષ્ટ થયેલ ફિલ્ટર અયોગ્ય હતુ"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:2172 ../client/pk-console-test.c:1202
+#: ../client/pk-console.c:2171 ../client/pk-console-test.c:1071
 msgid "A search type is required, e.g. name"
 msgstr "શોધ પ્રકારની જરૂરિયાત છે, દા.ત. નામ"
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:2179 ../client/pk-console.c:2188
-#: ../client/pk-console.c:2197 ../client/pk-console.c:2206
-#: ../client/pk-console-test.c:1209 ../client/pk-console-test.c:1221
-#: ../client/pk-console-test.c:1233 ../client/pk-console-test.c:1245
+#: ../client/pk-console.c:2178 ../client/pk-console.c:2187
+#: ../client/pk-console.c:2196 ../client/pk-console.c:2205
+#: ../client/pk-console-test.c:1078 ../client/pk-console-test.c:1090
+#: ../client/pk-console-test.c:1102 ../client/pk-console-test.c:1114
 msgid "A search term is required"
 msgstr "શોધ ટર્મ જરૂરી છે"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:2213 ../client/pk-console-test.c:1255
+#: ../client/pk-console.c:2212 ../client/pk-console-test.c:1124
 msgid "Invalid search type"
 msgstr "અયોગ્ય શોધ પ્રકાર"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:2219
+#: ../client/pk-console.c:2218
 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:2228 ../client/pk-console-test.c:1282
+#: ../client/pk-console.c:2227 ../client/pk-console-test.c:1151
 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:2237 ../client/pk-console-test.c:1293
+#: ../client/pk-console.c:2236 ../client/pk-console-test.c:1162
 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:2245 ../client/pk-console-test.c:1302
+#: ../client/pk-console.c:2244 ../client/pk-console-test.c:1171
 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:2252 ../client/pk-console-test.c:1309
+#: ../client/pk-console.c:2251 ../client/pk-console-test.c:1178
 msgid "Directory not found"
 msgstr "ડિરેક્ટરી મળી નહિં"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2260 ../client/pk-console-test.c:1318
+#: ../client/pk-console.c:2259 ../client/pk-console-test.c:1187
 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:2270 ../client/pk-console-test.c:1329
+#: ../client/pk-console.c:2269 ../client/pk-console-test.c:1198
 msgid "A transaction identifier (tid) is required"
 msgstr "પરિવહન ઓળખનાર (tid) જરૂરી છે"
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:2287 ../client/pk-console-test.c:1350
+#: ../client/pk-console.c:2286 ../client/pk-console-test.c:1219
 msgid "A package name to resolve is required"
 msgstr "સુધારવા માટે પેકેજ નામ જરૂરી છે"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:2296 ../client/pk-console.c:2305
-#: ../client/pk-console-test.c:1361 ../client/pk-console-test.c:1372
+#: ../client/pk-console.c:2295 ../client/pk-console.c:2304
+#: ../client/pk-console-test.c:1230 ../client/pk-console-test.c:1241
 msgid "A repository name is required"
 msgstr "રીપોઝીટરી નામ જરૂરી છે"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:2314 ../client/pk-console-test.c:1383
+#: ../client/pk-console.c:2313 ../client/pk-console-test.c:1252
 msgid "A repo name, parameter and value are required"
 msgstr "રીપો નામ, પરિમાણ અને કિંમતની જરૂર છે"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:2328 ../client/pk-console-test.c:1401
+#: ../client/pk-console.c:2327 ../client/pk-console-test.c:1269
 msgid "An action, e.g. 'update-system' is required"
 msgstr "ક્રિયા, દા.ત. 'update-system જરૂરી છે"
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:2335 ../client/pk-console-test.c:1408
+#: ../client/pk-console.c:2334 ../client/pk-console-test.c:1276
 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:2342 ../client/pk-console-test.c:1415
+#: ../client/pk-console.c:2341 ../client/pk-console-test.c:931
 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:2352 ../client/pk-console.c:2364
-#: ../client/pk-console.c:2373 ../client/pk-console.c:2391
-#: ../client/pk-console.c:2400 ../client/pk-console-test.c:1425
-#: ../client/pk-console-test.c:1440 ../client/pk-console-test.c:1449
-#: ../client/pk-console-test.c:1469 ../client/pk-console-test.c:1478
-#: ../client/pk-generate-pack.c:243
+#: ../client/pk-console.c:2351 ../client/pk-console.c:2363
+#: ../client/pk-console.c:2372 ../client/pk-console.c:2390
+#: ../client/pk-console.c:2399 ../client/pk-console-test.c:1286
+#: ../client/pk-console-test.c:1301 ../client/pk-console-test.c:1310
+#: ../client/pk-console-test.c:1330 ../client/pk-console-test.c:1339
+#: ../client/pk-generate-pack.c:241 ../client/pk-generate-pack-test.c:285
 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:2382 ../client/pk-console-test.c:1458
+#: ../client/pk-console.c:2381 ../client/pk-console-test.c:1319
 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:2409
+#: ../client/pk-console.c:2408
 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:2419 ../client/pk-console.c:2429
+#: ../client/pk-console.c:2418 ../client/pk-console.c:2428
 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:2483 ../client/pk-console-test.c:1538
+#: ../client/pk-console.c:2482 ../client/pk-console-test.c:1399
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "વિકલ્પ '%s' આધારભૂત નથી"
 
 #. TRANSLATORS: User does not have permission to do this
-#: ../client/pk-console.c:2496
+#: ../client/pk-console.c:2495
 msgid "Incorrect privileges for this operation"
 msgstr "આ પ્રક્રિયા કરવા માટે અયોગ્ય વિશેષાધિકારો"
 
@@ -749,34 +751,24 @@ msgstr "આ પ્રક્રિયા કરવા માટે અયોગà«
 #. /* 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
-#: ../client/pk-console.c:2499 ../client/pk-console-test.c:1550
+#: ../client/pk-console.c:2498 ../client/pk-console-test.c:1411
 msgid "Command failed"
 msgstr "આદેશ નિષ્ફળ"
 
-#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../client/pk-console-test.c:523 ../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-console-test.c:532 ../client/pk-tools-common.c:138
-msgid "Please choose the correct package: "
-msgstr "મહેરબાની કરીને યોગ્ય પેકેજ પસંદ કરો: "
-
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:734
+#: ../client/pk-console-test.c:568
 #, c-format
 msgid "This tool could not find the available package: %s"
 msgstr "આ સાધન ઉપલ્બધ પેકેજ ને શોધી શક્યુ નહિં: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:762
+#: ../client/pk-console-test.c:596
 #, c-format
 msgid "This tool could not find the installed package: %s"
 msgstr "આ સાધન સ્થાપિત થયેલ પેકેજને શોધી શક્યુ નહિં: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:790 ../client/pk-console-test.c:818
+#: ../client/pk-console-test.c:624 ../client/pk-console-test.c:652
 #, c-format
 msgid "This tool could not find the package: %s"
 msgstr "આ સાધન પેકેજ ને શોધી શક્યુ નહિં: %s"
@@ -785,135 +777,143 @@ msgstr "આ સાધન પેકેજ ને શોધી શક્યુ ન
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console-test.c:846 ../client/pk-console-test.c:872
-#: ../client/pk-console-test.c:898 ../client/pk-console-test.c:924
-#: ../client/pk-console-test.c:950
+#: ../client/pk-console-test.c:680 ../client/pk-console-test.c:708
+#: ../client/pk-console-test.c:736 ../client/pk-console-test.c:764
+#: ../client/pk-console-test.c:792
 #, c-format
 msgid "This tool could not find all the packages: %s"
 msgstr "આ સાધન બધા પેકેજોને શોધી શક્યુ નહિં: %s"
 
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console-test.c:1000
+msgid "Failed to contact PackageKit"
+msgstr "PackageKit ને સંપર્ક કરવાનું નિષ્ફળ"
+
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1261
+#: ../client/pk-console-test.c:1130
 msgid "A package name to install is required"
 msgstr "સ્થાપિત કરવા માટે પેકેજ નામ જરૂરી છે"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1270
+#: ../client/pk-console-test.c:1139
 msgid "A filename to install is required"
 msgstr "સ્થાપન કરવા માટે થવા ફાઇલનામ જરૂરી છે"
 
 #. TRANSLATORS: This is the state of the transaction
-#: ../client/pk-generate-pack.c:103
+#: ../client/pk-generate-pack.c:101
 msgid "Downloading"
 msgstr "ડાઉનલોડ કરી રહ્યા છીએ"
 
 #. TRANSLATORS: This is when the main packages are being downloaded
-#: ../client/pk-generate-pack.c:123
+#: ../client/pk-generate-pack.c:121
 msgid "Downloading packages"
 msgstr "પેકેજો ડાઉનલોડ કરી રહ્યા છીએ"
 
 #. TRANSLATORS: This is when the dependency packages are being downloaded
-#: ../client/pk-generate-pack.c:128
+#: ../client/pk-generate-pack.c:126
 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:190
+#: ../client/pk-generate-pack.c:188 ../client/pk-generate-pack-test.c:225
 msgid "Set the file name of dependencies to be excluded"
 msgstr "નહિં સમાવવાના આધારભૂતપણાઓના ફાઈલ નામ સુયોજીત કરો"
 
 #. TRANSLATORS: the output location
-#: ../client/pk-generate-pack.c:193
+#: ../client/pk-generate-pack.c:191 ../client/pk-generate-pack-test.c:228
 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:196
+#: ../client/pk-generate-pack.c:194 ../client/pk-generate-pack-test.c:231
 msgid "The package to be put into the service pack"
 msgstr "સેવા પેકમાં મૂકવા માટેનું પેકેજ"
 
 #. TRANSLATORS: put all pending updates in the pack
-#: ../client/pk-generate-pack.c:199
+#: ../client/pk-generate-pack.c:197 ../client/pk-generate-pack-test.c:234
 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:227
+#: ../client/pk-generate-pack.c:225 ../client/pk-generate-pack-test.c:269
 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:235
+#: ../client/pk-generate-pack.c:233 ../client/pk-generate-pack-test.c:277
 msgid "Both options selected."
 msgstr "બંને વિકલ્પો પસંદ થયેલ છે."
 
 #. TRANSLATORS: This is when the user fails to supply the output
-#: ../client/pk-generate-pack.c:251
+#: ../client/pk-generate-pack.c:249 ../client/pk-generate-pack-test.c:293
 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:269 ../client/pk-generate-pack.c:275
+#. 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-test.c:321 ../client/pk-generate-pack-test.c:327
 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:282
+#: ../client/pk-generate-pack.c:280 ../client/pk-generate-pack-test.c:334
 msgid ""
 "Service packs cannot be created as PackageKit was not built with libarchive "
 "support."
 msgstr "PackageKit એ libarchive આધાર સાથે બિલ્ટ ન હતુ તે તરીકે સેવા પેકેજોને બનાવી શકાતા નથી."
 
 #. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
-#: ../client/pk-generate-pack.c:293
+#: ../client/pk-generate-pack.c:291 ../client/pk-generate-pack-test.c:345
 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:309
+#: ../client/pk-generate-pack.c:307 ../client/pk-generate-pack-test.c:361
 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:312
+#: ../client/pk-generate-pack.c:310 ../client/pk-generate-pack-test.c:364
 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:325
+#: ../client/pk-generate-pack.c:323 ../client/pk-generate-pack-test.c:377
 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:335
+#: ../client/pk-generate-pack.c:333 ../client/pk-generate-pack-test.c:389
 msgid "Failed to open package list."
 msgstr "પેકેજ યાદી ખોલવામાં નિષ્ફળ."
 
 #. TRANSLATORS: The package name is being matched up to available packages
-#: ../client/pk-generate-pack.c:346
+#: ../client/pk-generate-pack.c:344 ../client/pk-generate-pack-test.c:398
 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:350
+#: ../client/pk-generate-pack.c:348 ../client/pk-generate-pack-test.c:402
 #, 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:367
+#: ../client/pk-generate-pack.c:365 ../client/pk-generate-pack-test.c:410
 msgid "Creating service pack..."
 msgstr "સેવા પેક બનાવી રહ્યા છીએ..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:374
+#: ../client/pk-generate-pack.c:372 ../client/pk-generate-pack-test.c:425
 #, c-format
 msgid "Service pack created '%s'"
 msgstr "સેવા પેક બનાવાયું '%s'"
 
 #. TRANSLATORS: we failed to make te file
-#: ../client/pk-generate-pack.c:379
+#: ../client/pk-generate-pack.c:377 ../client/pk-generate-pack-test.c:430
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "'%s' બનાવવામાં નિષ્ફળ: %s"
@@ -935,104 +935,30 @@ msgstr "પરિવહન યાદી મેળવવામાં નિષ્
 msgid "Failed to get daemon state"
 msgstr "ડિમન સ્થિતિ મેળવવામાં નિષ્ફળ"
 
-#. ask the user
-#: ../client/pk-task-text.c:64
-msgid "Do you want to allow installing of unsigned software?"
-msgstr "શું તમે હસ્તાક્ષર ન થયેલ સોફ્ટવેરને સ્થાપિત કરવા માટે પરવાનગી આપવા માંગો છો?"
-
-#: ../client/pk-task-text.c:68
-msgid "The unsigned software will not be installed."
-msgstr "હસ્તાક્ષર ન થયેલ સોફ્ટવેર સ્થાપિત થયેલ હશે નહિં."
-
-#: ../client/pk-task-text.c:100
-msgid "Software source signature required"
-msgstr "સોફ્ટવેર સ્ત્રોત સહી જરૂરી"
-
-#: ../client/pk-task-text.c:102
-msgid "Software source name"
-msgstr "સોફ્ટવેર સ્ત્રોત નામ"
-
-#: ../client/pk-task-text.c:103
-msgid "Key URL"
-msgstr "કી URL"
-
-#: ../client/pk-task-text.c:104
-msgid "Key user"
-msgstr "કી વપરાશકર્તા"
-
-#: ../client/pk-task-text.c:105
-msgid "Key ID"
-msgstr "કી ID"
-
-#: ../client/pk-task-text.c:106
-msgid "Key fingerprint"
-msgstr "કી આંગળી-ચિહ્ન"
-
-#: ../client/pk-task-text.c:107
-msgid "Key Timestamp"
-msgstr "કી ટાઇમસ્ટેમ્પ"
-
-#: ../client/pk-task-text.c:151
-msgid "End user licence agreement required"
-msgstr "અંતિમ વપરાશકર્તા લાઈસન્સ મંજૂરીપત્રક જરૂરી"
-
-#: ../client/pk-task-text.c:152
-msgid "EULA ID"
-msgstr "EULA ID"
-
-#: ../client/pk-task-text.c:155
-msgid "Agreement"
-msgstr "મંજૂરીપત્રક"
-
-#. ask the user
-#: ../client/pk-task-text.c:161
-msgid "Do you accept this agreement?"
-msgstr "શું તમે આ મંજૂરીપત્રક સ્વીકારશો?"
-
-#: ../client/pk-task-text.c:165
-msgid "The agreement was not accepted."
-msgstr "મંજૂરીપત્રક સ્વીકારાયેલ ન હતી."
-
-#: ../client/pk-task-text.c:194
-msgid "Media change required"
-msgstr "મીડિયા બદલાવ જરૂરી"
-
-#: ../client/pk-task-text.c:195
-msgid "Media type"
-msgstr "મીડિયા પ્રકાર"
-
-#: ../client/pk-task-text.c:196
-msgid "Media ID"
-msgstr "મીડિયા ID"
-
-#: ../client/pk-task-text.c:197
-msgid "Text"
-msgstr "લખાણ"
-
-#. ask the user
-#: ../client/pk-task-text.c:201
-msgid "Please insert the correct media"
-msgstr "મહેરબાની કરીને યોગ્ય મીડિયાને દાખલ કરો"
-
-#: ../client/pk-task-text.c:205
-msgid "The correct media was not inserted."
-msgstr "યોગ્ય મીડિયા દાખલ થયલે ન હતુ."
-
-#: ../client/pk-task-text.c:303
-msgid "The transaction did not proceed."
-msgstr "પરિવહનની પ્રક્રિયા કરાઇ નહિં."
-
-#: ../client/pk-text.c:50
+#: ../client/pk-tools-common.c:51
+#: ../lib/packagekit-glib2/pk-console-shared.c:53
 #, c-format
 msgid "Please enter a number from 1 to %i: "
 msgstr "મહેરબાની કરીને ૧ થી %i સુધીનો નંબર દાખલ કરો: "
 
 #. TRANSLATORS: The package was not found in any software sources
-#: ../client/pk-tools-common.c:119
+#: ../client/pk-tools-common.c:188
 #, 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:200
+#: ../lib/packagekit-glib2/pk-console-shared.c:153
+msgid "More than one package matches:"
+msgstr "એક પેકેજ કરતાં વધુ જોડણીઓ:"
+
+#. TRANSLATORS: This finds out which package in the list to use
+#: ../client/pk-tools-common.c:207
+#: ../lib/packagekit-glib2/pk-console-shared.c:162
+msgid "Please choose the correct package: "
+msgstr "મહેરબાની કરીને યોગ્ય પેકેજ પસંદ કરો: "
+
 #. TRANSLATORS: when we are getting data from the daemon
 #: ../contrib/browser-plugin/pk-plugin-install.c:466
 msgid "Getting package information..."
@@ -1089,90 +1015,110 @@ msgstr "સ્થાપિત કરી રહ્યા છીએ..."
 
 #. TRANSLATORS: downloading repo data so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:349
+#: ../contrib/command-not-found/pk-command-not-found-test.c:358
 msgid "Downloading details about the software sources."
 msgstr "સોફ્ટવેર સ્ત્રોતો વિશે વિગતો ને ડાઉનલોડ કરી રહ્યા છે."
 
 #. TRANSLATORS: downloading file lists so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:353
+#: ../contrib/command-not-found/pk-command-not-found-test.c:362
 msgid "Downloading filelists (this may take some time to complete)."
 msgstr "ફાઇલ યાદીઓને ડાઉનલોડ કરી રહ્યા છે (આ ને સમાપ્ત થવા માટે થોડો સમય લાગી શકે છે)."
 
 #. TRANSLATORS: waiting for native lock
 #: ../contrib/command-not-found/pk-command-not-found.c:357
+#: ../contrib/command-not-found/pk-command-not-found-test.c:366
 msgid "Waiting for package manager lock."
 msgstr "પેકેજ વ્યવસ્થાપક તાળા માટે રાહ જોઇ રહ્યા છે."
 
 #. TRANSLATORS: loading package cache so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:361
+#: ../contrib/command-not-found/pk-command-not-found-test.c:370
 msgid "Loading list of packages."
 msgstr "પેકેજોની યાદીને લોડ કરી રહ્યા છે."
 
 #. TRANSLATORS: we failed to find the package, this shouldn't happen
 #: ../contrib/command-not-found/pk-command-not-found.c:420
+#: ../contrib/command-not-found/pk-command-not-found-test.c:444
 msgid "Failed to search for file"
 msgstr "ફાઇલ માટે શોધવાનું નિષ્ફળ"
 
 #. TRANSLATORS: we failed to launch the executable, the error follows
 #: ../contrib/command-not-found/pk-command-not-found.c:557
+#: ../contrib/command-not-found/pk-command-not-found-test.c:570
 msgid "Failed to launch:"
 msgstr "શરૂ કરવામાં નિષ્ફળ:"
 
 #. TRANSLATORS: tool that gets called when the command is not found
 #: ../contrib/command-not-found/pk-command-not-found.c:632
+#: ../contrib/command-not-found/pk-command-not-found-test.c:630
 msgid "PackageKit Command Not Found"
 msgstr "PackageKit આદેશ શોધાયો નહિં"
 
 #. TRANSLATORS: the prefix of all the output telling the user why it's not executing
 #: ../contrib/command-not-found/pk-command-not-found.c:658
+#: ../contrib/command-not-found/pk-command-not-found-test.c:658
 msgid "Command not found."
 msgstr "આદેશ શોધાયો નહિં."
 
 #. TRANSLATORS: tell the user what we think the command is
 #: ../contrib/command-not-found/pk-command-not-found.c:665
+#: ../contrib/command-not-found/pk-command-not-found-test.c:665
 msgid "Similar command is:"
 msgstr "સરખા આદેશો છે:"
 
 #. TRANSLATORS: Ask the user if we should run the similar command
 #: ../contrib/command-not-found/pk-command-not-found.c:674
+#: ../contrib/command-not-found/pk-command-not-found-test.c:674
 msgid "Run similar command:"
 msgstr "એજ આદેશને ચલાવો:"
 
 #. TRANSLATORS: show the user a list of commands that they could have meant
 #. TRANSLATORS: show the user a list of commands we could run
+#. TRANSLATORS: show the user a list of commands that they could have meant
+#. TRANSLATORS: show the user a list of commands we could run
 #: ../contrib/command-not-found/pk-command-not-found.c:686
 #: ../contrib/command-not-found/pk-command-not-found.c:695
+#: ../contrib/command-not-found/pk-command-not-found-test.c:686
+#: ../contrib/command-not-found/pk-command-not-found-test.c:695
 msgid "Similar commands are:"
 msgstr "સરખા આદેશો છે:"
 
 #. TRANSLATORS: ask the user to choose a file to run
 #: ../contrib/command-not-found/pk-command-not-found.c:702
+#: ../contrib/command-not-found/pk-command-not-found-test.c:702
 msgid "Please choose a command to run"
 msgstr "મહેરબાની કરીને ચલાવવા માટે આદેશને પસંદ કરો"
 
 #. TRANSLATORS: tell the user what package provides the command
 #: ../contrib/command-not-found/pk-command-not-found.c:721
+#: ../contrib/command-not-found/pk-command-not-found-test.c:721
 msgid "The package providing this file is:"
 msgstr "પેકેજ આ ફાઇલને પૂરી પાડી રહ્યા છે:"
 
 #. TRANSLATORS: as the user if we want to install a package to provide the command
 #: ../contrib/command-not-found/pk-command-not-found.c:726
+#: ../contrib/command-not-found/pk-command-not-found-test.c:726
 #, c-format
 msgid "Install package '%s' to provide command '%s'?"
 msgstr "શું આદેશ '%s' પૂરા પાડવા માટે પેકેજ '%s' ને સ્થાપિત કરો?"
 
 #. TRANSLATORS: Show the user a list of packages that provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:747
+#: ../contrib/command-not-found/pk-command-not-found-test.c:747
 msgid "Packages providing this file are:"
 msgstr "પેકેજો એ આ ફાઇલને પૂરી પાડી રહી છે:"
 
 #. TRANSLATORS: Show the user a list of packages that they can install to provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:756
+#: ../contrib/command-not-found/pk-command-not-found-test.c:756
 msgid "Suitable packages are:"
 msgstr "સુસંગત પેકેજો છે:"
 
 #. get selection
 #. TRANSLATORS: ask the user to choose a file to install
 #: ../contrib/command-not-found/pk-command-not-found.c:764
+#: ../contrib/command-not-found/pk-command-not-found-test.c:764
 msgid "Please choose a package to install"
 msgstr "મહેરબાની કરીને સ્થાપિત કરવા માટે પેકેજને પસંદ કરો"
 
@@ -1458,6 +1404,93 @@ msgstr "PackageKit પેકેજ યાદી"
 msgid "PackageKit Service Pack"
 msgstr "PackageKit સેવા પેક"
 
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:64
+msgid "Do you want to allow installing of unsigned software?"
+msgstr "શું તમે હસ્તાક્ષર ન થયેલ સોફ્ટવેરને સ્થાપિત કરવા માટે પરવાનગી આપવા માંગો છો?"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:68
+msgid "The unsigned software will not be installed."
+msgstr "હસ્તાક્ષર ન થયેલ સોફ્ટવેર સ્થાપિત થયેલ હશે નહિં."
+
+#: ../lib/packagekit-glib2/pk-task-text.c:100
+msgid "Software source signature required"
+msgstr "સોફ્ટવેર સ્ત્રોત સહી જરૂરી"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:102
+msgid "Software source name"
+msgstr "સોફ્ટવેર સ્ત્રોત નામ"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:103
+msgid "Key URL"
+msgstr "કી URL"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:104
+msgid "Key user"
+msgstr "કી વપરાશકર્તા"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:105
+msgid "Key ID"
+msgstr "કી ID"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:106
+msgid "Key fingerprint"
+msgstr "કી આંગળી-ચિહ્ન"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:107
+msgid "Key Timestamp"
+msgstr "કી ટાઇમસ્ટેમ્પ"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:151
+msgid "End user licence agreement required"
+msgstr "અંતિમ વપરાશકર્તા લાઈસન્સ મંજૂરીપત્રક જરૂરી"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:152
+msgid "EULA ID"
+msgstr "EULA ID"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:155
+msgid "Agreement"
+msgstr "મંજૂરીપત્રક"
+
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:161
+msgid "Do you accept this agreement?"
+msgstr "શું તમે આ મંજૂરીપત્રક સ્વીકારશો?"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:165
+msgid "The agreement was not accepted."
+msgstr "મંજૂરીપત્રક સ્વીકારાયેલ ન હતી."
+
+#: ../lib/packagekit-glib2/pk-task-text.c:194
+msgid "Media change required"
+msgstr "મીડિયા બદલાવ જરૂરી"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:195
+msgid "Media type"
+msgstr "મીડિયા પ્રકાર"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:196
+msgid "Media ID"
+msgstr "મીડિયા ID"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:197
+msgid "Text"
+msgstr "લખાણ"
+
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:201
+msgid "Please insert the correct media"
+msgstr "મહેરબાની કરીને યોગ્ય મીડિયાને દાખલ કરો"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:205
+msgid "The correct media was not inserted."
+msgstr "યોગ્ય મીડિયા દાખલ થયલે ન હતુ."
+
+#: ../lib/packagekit-glib2/pk-task-text.c:303
+msgid "The transaction did not proceed."
+msgstr "પરિવહનની પ્રક્રિયા કરાઇ નહિં."
+
 #. SECURITY:
 #. - Normal users do not require admin authentication to accept new
 #. licence agreements.
commit 6f46e98b97926d21bb100feecb834dd9cf06a1f5
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 10:05:57 2009 +0100

    glib2: convert the browser plugin to opionally use glib2

diff --git a/contrib/browser-plugin/Makefile.am b/contrib/browser-plugin/Makefile.am
index 61a7239..e2f8948 100644
--- a/contrib/browser-plugin/Makefile.am
+++ b/contrib/browser-plugin/Makefile.am
@@ -14,7 +14,15 @@ packagekit_plugin_la_CFLAGS =			\
 
 packagekit_plugin_la_LIBADD =			\
 	$(PK_BROWSER_PLUGIN_LIBS)		\
+	$(NULL)
+
+if PK_BUILD_GLIB2
+packagekit_plugin_la_LIBADD +=			\
+	$(top_builddir)/lib/packagekit-glib2/libpackagekit-glib2.la
+else
+packagekit_plugin_la_LIBADD +=			\
 	$(top_builddir)/lib/packagekit-glib/libpackagekit-glib.la
+endif
 
 packagekit_plugin_la_SOURCES =			\
 	pk-plugin.c				\
diff --git a/contrib/browser-plugin/pk-plugin-install.c b/contrib/browser-plugin/pk-plugin-install.c
index cc12f81..6564b3d 100644
--- a/contrib/browser-plugin/pk-plugin-install.c
+++ b/contrib/browser-plugin/pk-plugin-install.c
@@ -33,6 +33,12 @@
 #include <gdk/gdkx.h>
 #include <gtk/gtk.h>
 #include <math.h>
+#ifdef PK_BUILD_GLIB2
+#include <packagekit-glib2/packagekit.h>
+#else
+#include <packagekit-glib/packagekit.h>
+#endif
+
 #include "pk-main.h"
 #include "pk-plugin-install.h"
 
@@ -58,7 +64,11 @@ struct PkPluginInstallPrivate
 	gchar			*display_name;
 	gchar			**package_names;
 	PangoLayout		*pango_layout;
+#ifdef PK_BUILD_GLIB2
+	PkClient		*client;
+#else
 	PkClientPool		*client_pool;
+#endif
 	DBusGProxy		*install_package_proxy;
 	DBusGProxyCall		*install_package_call;
 	gint			timeout;
@@ -228,6 +238,175 @@ out:
 	return data;
 }
 
+#ifdef PK_BUILD_GLIB2
+
+/**
+ * pk_plugin_install_finished_cb:
+ **/
+static void
+pk_plugin_install_finished_cb (GObject *object, GAsyncResult *res, PkPluginInstall *self)
+{
+	PkClient *client = PK_CLIENT (object);
+	GError *error = NULL;
+	PkResults *results = NULL;
+	PkExitEnum exit_enum;
+	GPtrArray *packages = NULL;
+	const PkItemPackage *item;
+	guint i;
+	gchar *filename;
+	gchar **split = NULL;
+
+	/* get the results */
+	results = pk_client_generic_finish (client, res, &error);
+	if (results == NULL) {
+		g_warning ("failed to resolve: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* check status */
+	exit_enum = pk_results_get_exit_code (results);
+	if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
+		g_warning ("failed to resolve success: %s", pk_exit_enum_to_text (exit_enum));
+		goto out;
+	}
+
+	/* get packages */
+	packages = pk_results_get_package_array (results);
+	if (packages == NULL) {
+		g_error ("internal error, no packages!");
+		goto out;
+	}
+
+	/* list, just for shits and giggles */
+	for (i=0; i<packages->len; i++) {
+		item = g_ptr_array_index (packages, i);
+		g_debug ("%s\t%s\t%s", pk_info_enum_to_text (item->info_enum), item->package_id, item->summary);
+	}
+
+	/* no results */
+	if (packages->len == 0)
+		goto out;
+
+	/* no results */
+	if (packages->len > 1)
+		g_warning ("more than one result (%i), just choosing first", packages->len);
+
+	/* choose first package */
+	item = g_ptr_array_index (packages, 0);
+
+	/* if we didn't use displayname, use the summary */
+	if (self->priv->display_name == NULL)
+		self->priv->display_name = g_strdup (item->summary);
+
+	/* parse the data */
+	if (item->info_enum == PK_INFO_ENUM_AVAILABLE) {
+		if (self->priv->status == IN_PROGRESS)
+			pk_plugin_install_set_status (self, AVAILABLE);
+		else if (self->priv->status == INSTALLED)
+			pk_plugin_install_set_status (self, UPGRADABLE);
+		split = pk_package_id_split (item->package_id);
+		pk_plugin_install_set_available_package_name (self, split[0]);
+		pk_plugin_install_set_available_version (self, split[1]);
+		g_strfreev (split);
+#if 0
+		/* if we have data from the repo, override the user:
+		 *  * we don't want the remote site pretending to install another package
+		 *  * it might be localised if the backend supports it */
+		if (item->summary != NULL && item->summary[0] != '\0')
+			self->priv->display_name = g_strdup (item->summary);
+#endif
+
+		pk_plugin_install_clear_layout (self);
+		pk_plugin_install_refresh (self);
+
+	} else if (item->info_enum == PK_INFO_ENUM_INSTALLED) {
+		if (self->priv->status == IN_PROGRESS)
+			pk_plugin_install_set_status (self, INSTALLED);
+		else if (self->priv->status == AVAILABLE)
+			pk_plugin_install_set_status (self, UPGRADABLE);
+		split = pk_package_id_split (item->package_id);
+		pk_plugin_install_set_installed_package_name (self, split[0]);
+		pk_plugin_install_set_installed_version (self, split[1]);
+		g_strfreev (split);
+
+		/* get desktop file information */
+		filename = pk_plugin_install_get_best_desktop_file (self);
+		if (filename != NULL) {
+			self->priv->app_info = G_APP_INFO (g_desktop_app_info_new_from_filename (filename));
+#if 0
+			/* override, as this will have translation */
+			self->priv->display_name = g_strdup (g_app_info_get_name (self->priv->app_info));
+#endif
+		}
+		g_free (filename);
+
+		if (self->priv->app_info != 0)
+			pk_plugin_install_set_status (self, INSTALLED);
+
+		pk_plugin_install_clear_layout (self);
+		pk_plugin_install_refresh (self);
+	}
+out:
+	/* we didn't get any results, or we failed */
+	if (self->priv->status == IN_PROGRESS) {
+		pk_plugin_install_set_status (self, UNAVAILABLE);
+		pk_plugin_install_clear_layout (self);
+		pk_plugin_install_refresh (self);
+	}
+	if (packages != NULL)
+		g_ptr_array_unref (packages);
+	if (results != NULL)
+		g_object_unref (results);
+}
+
+/**
+ * pk_plugin_install_recheck:
+ **/
+static void
+pk_plugin_install_recheck (PkPluginInstall *self)
+{
+//	guint i;
+	const gchar *data;
+//	gchar **package_ids;
+
+	self->priv->status = IN_PROGRESS;
+	pk_plugin_install_set_available_version (self, NULL);
+	pk_plugin_install_set_available_package_name (self, NULL);
+	pk_plugin_install_set_installed_version (self, NULL);
+	pk_plugin_install_set_installed_package_name (self, NULL);
+
+	/* get data, if if does not exist */
+	if (self->priv->package_names == NULL) {
+		data = pk_plugin_get_data (PK_PLUGIN (self), "displayname");
+		self->priv->display_name = g_strdup (data);
+		data = pk_plugin_get_data (PK_PLUGIN (self), "packagenames");
+		self->priv->package_names = g_strsplit (data, " ", -1);
+	}
+
+#if 0
+	for (i=0; self->priv->package_names[i] != NULL; i++) {
+		package_ids = pk_package_ids_from_id (self->priv->package_names[i]);
+
+		/* do async resolve */
+		pk_client_resolve_async (self->priv->client, pk_bitfield_from_enums (PK_FILTER_ENUM_NEWEST, -1), package_ids, NULL,
+					 (PkProgressCallback) pk_plugin_install_progress_cb, self,
+					 (GAsyncReadyCallback) pk_plugin_install_finished_cb, self);
+
+		g_strfreev (package_ids);
+	}
+#endif
+
+	/* do async resolve */
+	pk_client_resolve_async (self->priv->client, pk_bitfield_from_enums (PK_FILTER_ENUM_NEWEST, -1),
+				 self->priv->package_names, NULL, NULL, NULL,
+				 (GAsyncReadyCallback) pk_plugin_install_finished_cb, self);
+}
+
+//	package_ids = pk_package_ids_from_text ("glib2;2.14.0;i386;fedora&powertop");
+
+#else
+
 /**
  * pk_plugin_install_package_cb:
  **/
@@ -363,6 +542,7 @@ pk_plugin_install_recheck (PkPluginInstall *self)
 		pk_plugin_install_refresh (self);
 	}
 }
+#endif
 
 /**
  * pk_plugin_install_append_markup:
@@ -1109,7 +1289,11 @@ pk_plugin_install_finalize (GObject *object)
 	}
 
 	/* remove clients */
+#ifdef PK_BUILD_GLIB2
+	g_object_unref (self->priv->client);
+#else
 	g_object_unref (self->priv->client_pool);
+#endif
 
 	G_OBJECT_CLASS (pk_plugin_install_parent_class)->finalize (object);
 }
@@ -1152,11 +1336,15 @@ pk_plugin_install_init (PkPluginInstall *self)
 	self->priv->install_package_proxy = NULL;
 	self->priv->install_package_call = NULL;
 
+#ifdef PK_BUILD_GLIB2
+	self->priv->client = pk_client_new ();
+#else
 	/* use a client pool to do everything async */
 	self->priv->client_pool = pk_client_pool_new ();
 	pk_client_pool_connect (self->priv->client_pool, "package", G_CALLBACK (pk_plugin_install_package_cb), G_OBJECT (self));
 	pk_client_pool_connect (self->priv->client_pool, "error-code", G_CALLBACK (pk_plugin_install_error_code_cb), G_OBJECT (self));
 	pk_client_pool_connect (self->priv->client_pool, "finished", G_CALLBACK (pk_plugin_install_finished_cb), G_OBJECT (self));
+#endif
 }
 
 /**
diff --git a/contrib/browser-plugin/pk-plugin-install.h b/contrib/browser-plugin/pk-plugin-install.h
index e565c7b..9f7c191 100644
--- a/contrib/browser-plugin/pk-plugin-install.h
+++ b/contrib/browser-plugin/pk-plugin-install.h
@@ -25,7 +25,6 @@
 
 #include <glib-object.h>
 #include <cairo-xlib.h>
-#include <packagekit-glib/packagekit.h>
 
 #include "pk-plugin.h"
 
commit 71c417a37205d1af544903efb3a1191b41be834b
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 10:05:27 2009 +0100

    trivial: enable glib2 in the fedora spec file

diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index 453cf96..7214586 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -244,7 +244,7 @@ user to restart the computer or remove and re-insert the device.
 %setup -q
 
 %build
-%configure --disable-static --enable-yum --enable-smart --with-default-backend=yum --disable-local
+%configure --disable-static --enable-yum --enable-smart --enable-glib2 --with-default-backend=yum --disable-local
 
 make %{?_smp_mflags}
 
@@ -421,10 +421,11 @@ update-mime-database %{_datadir}/mime &> /dev/null || :
 %defattr(-,root,root,-)
 %doc README AUTHORS NEWS COPYING
 %{_libdir}/libpackagekit-glib*.so
-%{_libdir}/pkgconfig/packagekit-glib.pc
+%{_libdir}/pkgconfig/packagekit-glib*.pc
 %dir %{_includedir}/PackageKit
 %dir %{_includedir}/PackageKit/packagekit-glib
-%{_includedir}/PackageKit/packagekit-glib/*.h
+%dir %{_includedir}/PackageKit/packagekit-glib2
+%{_includedir}/PackageKit/packagekit-glib*/*.h
 
 %files qt-devel
 %defattr(-,root,root,-)
commit f8df3a7f980e6904718a07a427f6884b320d22b2
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 10:04:45 2009 +0100

    bugfix: Ensure we ship packagekit-private.h in the tarball

diff --git a/lib/packagekit-glib2/Makefile.am b/lib/packagekit-glib2/Makefile.am
index 0d1a9d4..028c3be 100644
--- a/lib/packagekit-glib2/Makefile.am
+++ b/lib/packagekit-glib2/Makefile.am
@@ -114,6 +114,7 @@ libpackagekitprivate_a_SOURCES =				\
 	egg-debug.h						\
 	egg-string.c						\
 	egg-string.h						\
+	packagekit-private.h					\
 	pk-task-text.c						\
 	pk-task-text.h						\
 	pk-client-sync.c					\
commit 68f6ae367b6937a15525f0cd123ec06d15936b43
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 10:03:08 2009 +0100

    browser-plugin: don't unref plugin twice to fix a crash when firefox is closed

diff --git a/contrib/browser-plugin/pk-main.c b/contrib/browser-plugin/pk-main.c
index 5a18821..a40cd4c 100644
--- a/contrib/browser-plugin/pk-main.c
+++ b/contrib/browser-plugin/pk-main.c
@@ -166,7 +166,6 @@ pk_main_destroy (NPP instance, NPSavedData **save)
 	PkPlugin *plugin = PK_PLUGIN (instance->pdata);
 
 	pk_debug ("pk_main_destroy [%p]", instance);
-	g_object_unref (plugin);
 
 	/* free content instance */
 	g_signal_handlers_disconnect_by_func (plugin, G_CALLBACK (pk_main_refresh_cb), instance);
commit 7334f6bf30494c2e82bb4e0c8206a5f3a80ad65e
Author: kkrothap <kkrothap at fedoraproject.org>
Date:   Wed Sep 9 09:00:03 2009 +0000

    Sending translation for Telugu

diff --git a/po/te.po b/po/te.po
index c9e3f3a..2de53f7 100644
--- a/po/te.po
+++ b/po/te.po
@@ -7,686 +7,798 @@ msgid ""
 msgstr ""
 "Project-Id-Version: packagekit.master.te\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-08-24 11:06+0100\n"
-"PO-Revision-Date: 2009-06-02 17:20+0530\n"
+"POT-Creation-Date: 2009-09-08 14:35+0000\n"
+"PO-Revision-Date: 2009-09-09 14:29+0530\n"
 "Last-Translator: Krishna Babu K <kkrothap at redhat.com>\n"
 "Language-Team: Telugu <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"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n\n"
 "\n"
 "\n"
 "\n"
 
 #. TRANSLATORS: this is an atomic transaction
-#: ../client/pk-console.c:235
+#: ../client/pk-console.c:237 ../client/pk-console-test.c:143
 msgid "Transaction"
 msgstr "వ్యవహారము"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:237
+#: ../client/pk-console.c:239 ../client/pk-console-test.c:145
 msgid "System time"
 msgstr "సిస్టమ్ సమయం"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:239
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:147
 msgid "Succeeded"
 msgstr "సఫలమైంది"
 
-#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:239 ../client/pk-console.c:406
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:147
 msgid "True"
 msgstr "సత్యము"
 
-#: ../client/pk-console.c:239 ../client/pk-console.c:406
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:147
 msgid "False"
 msgstr "అసత్యము"
 
 #. 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:243 ../client/pk-console-test.c:149
+#: ../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:248 ../client/pk-console-test.c:154
 msgid "Duration"
 msgstr "నిడివి"
 
-#: ../client/pk-console.c:246
+#: ../client/pk-console.c:248 ../client/pk-console-test.c:154
 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:252 ../client/pk-console-test.c:158
+#: ../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:254 ../client/pk-console-test.c:160
 msgid "User ID"
 msgstr "వినియోగదారి ID"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:259
+#: ../client/pk-console.c:261 ../client/pk-console-test.c:167
 msgid "Username"
 msgstr "వినియోగదారినామము"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:263
+#: ../client/pk-console.c:265 ../client/pk-console-test.c:171
 msgid "Real name"
 msgstr "వాస్తవ నామము"
 
-#: ../client/pk-console.c:271
+#: ../client/pk-console.c:273 ../client/pk-console-test.c:179
 msgid "Affected packages:"
 msgstr "ప్రభావిత సంకలనాలు:"
 
-#: ../client/pk-console.c:273
+#: ../client/pk-console.c:275 ../client/pk-console-test.c:181
 msgid "Affected packages: None"
 msgstr "ప్రభావిత సంకలనాలు: ఏదీకాదు"
 
+#. TRANSLATORS: When processing, we might have to remove other dependencies
+#: ../client/pk-console.c:336 ../lib/packagekit-glib2/pk-task-text.c:220
+msgid "The following packages have to be removed:"
+msgstr "ఈ క్రింది సంకలనములు తీసివేయబడాలి:"
+
+#. TRANSLATORS: When processing, we might have to install other dependencies
+#: ../client/pk-console.c:339 ../lib/packagekit-glib2/pk-task-text.c:225
+msgid "The following packages have to be installed:"
+msgstr "ఈ క్రింది ప్యాకేజీలు సంస్థాపించబడినవి:"
+
+#. TRANSLATORS: When processing, we might have to update other dependencies
+#: ../client/pk-console.c:342 ../lib/packagekit-glib2/pk-task-text.c:230
+msgid "The following packages have to be updated:"
+msgstr "ఈ క్రింది సంకలనములు నవీకరించవలసివుంది:"
+
+#. TRANSLATORS: When processing, we might have to reinstall other dependencies
+#: ../client/pk-console.c:345 ../lib/packagekit-glib2/pk-task-text.c:235
+msgid "The following packages have to be reinstalled:"
+msgstr "ఈ క్రింది సంకలనములు తిరిగిసంస్థాపించవలసి వుంది:"
+
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../client/pk-console.c:348 ../lib/packagekit-glib2/pk-task-text.c:240
+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:362 ../client/pk-console-test.c:201
 msgid "Distribution"
 msgstr "పంపిణి"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:300
+#: ../client/pk-console.c:364 ../client/pk-console-test.c:203
 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
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:366 ../client/pk-console.c:389
+#: ../client/pk-console-test.c:205 ../client/pk-console-test.c:226
 msgid "Summary"
 msgstr "సంక్షిప్త సమాచారము"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:314
+#: ../client/pk-console.c:378 ../client/pk-console-test.c:215
 msgid "Category"
 msgstr "వర్గము"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:316
+#: ../client/pk-console.c:380 ../client/pk-console-test.c:217
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:319
+#: ../client/pk-console.c:383 ../client/pk-console-test.c:220
 msgid "Parent"
 msgstr "మాత్రుక"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:322
+#: ../client/pk-console.c:386 ../client/pk-console-test.c:223
 msgid "Name"
 msgstr "నామము"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:328
+#: ../client/pk-console.c:392 ../client/pk-console-test.c:229
 msgid "Icon"
 msgstr "ప్రతిమ"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:343
+#: ../client/pk-console.c:407 ../client/pk-console-test.c:243
 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:409 ../client/pk-console-test.c:249
+#: ../lib/packagekit-glib2/pk-task-text.c:101
+#: ../lib/packagekit-glib2/pk-task-text.c:153
+#: ../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:412 ../client/pk-console-test.c:252
 msgid "Updates"
 msgstr "నవీకరణలు"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:352
+#: ../client/pk-console.c:416 ../client/pk-console-test.c:256
 msgid "Obsoletes"
 msgstr "తొలగించినవి"
 
 #. TRANSLATORS: details about the update, the vendor URLs
-#: ../client/pk-console.c:356
+#: ../client/pk-console.c:420 ../client/pk-console-test.c:260
+#: ../lib/packagekit-glib2/pk-task-text.c:154
 msgid "Vendor"
 msgstr "అమ్మకందారు"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:360
+#: ../client/pk-console.c:424 ../client/pk-console-test.c:264
 msgid "Bugzilla"
 msgstr "బగ్‌జిల్లా"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:364
+#: ../client/pk-console.c:428 ../client/pk-console-test.c:268
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:368
+#: ../client/pk-console.c:432 ../client/pk-console-test.c:272
 msgid "Restart"
 msgstr "పునఃప్రారంభము"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:372
+#: ../client/pk-console.c:436 ../client/pk-console-test.c:276
 msgid "Update text"
 msgstr "పాఠము నవీకరించుము"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:376
+#: ../client/pk-console.c:440 ../client/pk-console-test.c:280
 msgid "Changes"
 msgstr "మార్పులు"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:380
+#: ../client/pk-console.c:444 ../client/pk-console-test.c:284
 msgid "State"
 msgstr "స్థితి"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:385
+#: ../client/pk-console.c:449 ../client/pk-console-test.c:289
 msgid "Issued"
 msgstr "విడుదలైన"
 
 #. TRANSLATORS: details about the update, date the update was updated
-#: ../client/pk-console.c:390
+#: ../client/pk-console.c:454 ../client/pk-console-test.c:294
 msgid "Updated"
 msgstr "నవీకరించిన"
 
-#: ../client/pk-console.c:477 ../client/pk-console.c:479
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:474 ../client/pk-console-test.c:312
+msgid "Enabled"
+msgstr "చేతనపరచిన"
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:477 ../client/pk-console-test.c:315
+msgid "Disabled"
+msgstr "అచేతనపరచిన"
+
+#: ../client/pk-console.c:554 ../client/pk-console.c:556
 msgid "Percentage"
 msgstr "శాతము"
 
-#: ../client/pk-console.c:479
+#: ../client/pk-console.c:556
 msgid "Unknown"
 msgstr "తెలియని"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:521
+#: ../client/pk-console.c:598 ../client/pk-console-test.c:337
 msgid "System restart required by:"
 msgstr "సిస్టమ్ పునఃప్రారంభము అవసరమైంది:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:524
+#: ../client/pk-console.c:601 ../client/pk-console-test.c:340
 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:604 ../client/pk-console-test.c:343
 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:607 ../client/pk-console-test.c:346
 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:610 ../client/pk-console-test.c:349
 msgid "Application restart required by:"
 msgstr "అనువర్తనము పునఃప్రారంభము అవసరమైంది:"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:588
+#: ../client/pk-console.c:665 ../client/pk-console-test.c:538
 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:668 ../client/pk-console-test.c:541
 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:671
 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:674 ../client/pk-console-test.c:544
 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:677 ../client/pk-console-test.c:547
 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:809
 #, 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:817
 #, 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:843 ../client/pk-console.c:891
+#: ../client/pk-console.c:915 ../client/pk-console.c:963
+#: ../client/pk-console.c:1059 ../client/pk-console.c:1172
+#: ../client/pk-console.c:1233 ../client/pk-tools-common.c:132
+#: ../client/pk-tools-common.c:151 ../client/pk-tools-common.c:159
 #, c-format
 msgid "Internal error: %s"
 msgstr "అతర్గత దోషము: %s"
 
+#. TRANSLATORS: We are checking if it's okay to remove a list of packages
+#. ask the user
+#: ../client/pk-console.c:875 ../client/pk-console.c:947
+#: ../client/pk-console.c:1265 ../lib/packagekit-glib2/pk-task-text.c:299
+msgid "Proceed with changes?"
+msgstr "మార్పులతో ముందుకుపోవాలా?"
+
+#. TRANSLATORS: There was an error removing the packages. The detailed error follows
+#: ../client/pk-console.c:880 ../client/pk-console.c:952
+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:899 ../client/pk-console.c:1633
 #, 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:971
 #, 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:1027
 #, 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:1050 ../client/pk-console.c:1088
+#: ../client/pk-console.c:1117
 #, 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:1103
+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:1108
 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:1149
 #, 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:1180
 #, 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:1212 ../client/pk-console.c:1224
+#: ../client/pk-console.c:1279
 #, 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:1270
+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:1303 ../client/pk-console.c:1311
 #, 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:1333 ../client/pk-console.c:1341
 #, 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:1363 ../client/pk-console.c:1371
 #, 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:1393
 #, 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:1401
 #, 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:1423
 #, 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:1428 ../client/pk-console.c:1484
+#: ../client/pk-console.c:1559
 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:1434 ../client/pk-console.c:1490
+#: ../client/pk-console.c:1565
 #, 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:1445
 #, 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:1479 ../client/pk-console.c:1554
 #, 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:1511
 msgid "Packages to add"
 msgstr "జతచేయుటకు సంకలనములు"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1278
+#: ../client/pk-console.c:1519
 msgid "Packages to remove"
 msgstr "తీసివేయుటకు సంకలనములు"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1346
+#: ../client/pk-console.c:1587
 #, 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:1593
 msgid "To install"
 msgstr "సంస్థాపించుటకు"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1364
+#: ../client/pk-console.c:1605
 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:1609
 msgid "not found."
 msgstr "కనబడలేదు."
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1379
+#: ../client/pk-console.c:1620
 #, 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:1626
+#: ../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:1662
 #, 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:1670
 #, 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:1701
 msgid "Error:"
 msgstr "దోషము:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1474
+#: ../client/pk-console.c:1715 ../client/pk-console-test.c:366
 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:1731 ../client/pk-console-test.c:384
 msgid "Message:"
 msgstr "సందేశము:"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1518
+#: ../client/pk-console.c:1759 ../client/pk-console-test.c:403
 msgid "Package files"
 msgstr "సంకలనము దస్త్రములు"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1526
+#: ../client/pk-console.c:1767 ../client/pk-console-test.c:398
 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:1790
 msgid "Repository signature required"
 msgstr "రిపోజిటరీ సంతకము అవసరమైంది"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
-#: ../client/pk-console.c:1559
+#. ask the user
+#: ../client/pk-console.c:1800 ../lib/packagekit-glib2/pk-task-text.c:113
 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:1804 ../lib/packagekit-glib2/pk-task-text.c:117
 msgid "The signature was not accepted."
 msgstr "సంతకము ఆమోదించబడలేదు."
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1597
+#: ../client/pk-console.c:1838
 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:1845
 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:1849
 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:1878 ../client/pk-console-test.c:816
 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:1931 ../client/pk-console-test.c:850
 msgid "PackageKit Console Interface"
 msgstr "ప్యాకేజీకిట్ కన్సోల్ ఇంటర్ఫేస్"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1692
+#: ../client/pk-console.c:1933 ../client/pk-console-test.c:852
 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-monitor.c:128
+#: ../client/pk-console.c:2026 ../client/pk-console-test.c:966
+#: ../client/pk-generate-pack.c:185 ../client/pk-generate-pack-test.c:222
+#: ../client/pk-monitor.c:128 ../client/pk-monitor-test.c:282
 #: ../contrib/command-not-found/pk-command-not-found.c:616
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:550
+#: ../contrib/command-not-found/pk-command-not-found-test.c:614
+#: ../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:2029 ../client/pk-console-test.c:969
+#: ../client/pk-monitor.c:130 ../client/pk-monitor-test.c:284
 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:2032 ../client/pk-console-test.c:972
 msgid "Set the filter, e.g. installed"
 msgstr "వడపోత(ఫిల్టర్) అమర్చుము, ఉ.దా. సంస్థాపించిన"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1794
+#: ../client/pk-console.c:2035 ../client/pk-console-test.c:975
 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:2062
 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:2152 ../client/pk-console-test.c:1052
 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:2171 ../client/pk-console-test.c:1071
 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:2178 ../client/pk-console.c:2187
+#: ../client/pk-console.c:2196 ../client/pk-console.c:2205
+#: ../client/pk-console-test.c:1078 ../client/pk-console-test.c:1090
+#: ../client/pk-console-test.c:1102 ../client/pk-console-test.c:1114
 msgid "A search term is required"
 msgstr "ఒక శోధన పదము అవసరమైంది"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1971
+#: ../client/pk-console.c:2212 ../client/pk-console-test.c:1124
 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:2218
 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:2227 ../client/pk-console-test.c:1151
 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:2236 ../client/pk-console-test.c:1162
 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:2244 ../client/pk-console-test.c:1171
 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:2251 ../client/pk-console-test.c:1178
 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:2259 ../client/pk-console-test.c:1187
 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:2269 ../client/pk-console-test.c:1198
 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:2286 ../client/pk-console-test.c:1219
 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:2295 ../client/pk-console.c:2304
+#: ../client/pk-console-test.c:1230 ../client/pk-console-test.c:1241
 msgid "A repository name is required"
 msgstr "ఒక రిపోజిటరీ నామము అవసరమైంది"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:2072
+#: ../client/pk-console.c:2313 ../client/pk-console-test.c:1252
 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:2327 ../client/pk-console-test.c:1269
 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:2334 ../client/pk-console-test.c:1276
 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:2341 ../client/pk-console-test.c:931
 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:2351 ../client/pk-console.c:2363
+#: ../client/pk-console.c:2372 ../client/pk-console.c:2390
+#: ../client/pk-console.c:2399 ../client/pk-console-test.c:1286
+#: ../client/pk-console-test.c:1301 ../client/pk-console-test.c:1310
+#: ../client/pk-console-test.c:1330 ../client/pk-console-test.c:1339
+#: ../client/pk-generate-pack.c:241 ../client/pk-generate-pack-test.c:285
 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:2381 ../client/pk-console-test.c:1319
 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:2408
 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:2418 ../client/pk-console.c:2428
 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:2482 ../client/pk-console-test.c:1399
 #, 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:2495
 msgid "Incorrect privileges for this operation"
 msgstr "ఈ కార్యక్రమము కొరకు సరికాని అనుమతులు"
 
 #. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:2257
+#. /* 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
+#: ../client/pk-console.c:2498 ../client/pk-console-test.c:1411
 msgid "Command failed"
 msgstr "ఆదేశము విఫలమైంది"
 
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console-test.c:568
+#, c-format
+msgid "This tool could not find the available package: %s"
+msgstr "ఈ సాధనము అందుబాటులో వున్న సంకలనములను కనుగొనలేకపోయింది: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console-test.c:596
+#, c-format
+msgid "This tool could not find the installed package: %s"
+msgstr "ఈ సాధనము సంస్థాపిత సంకలనములను కనుగొనలేకపోయింది: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console-test.c:624 ../client/pk-console-test.c:652
+#, c-format
+msgid "This tool could not find the package: %s"
+msgstr "ఈ సాధనము ప్యాకేజీను కనుగొనలేక పోయింది: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
+#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
+#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
+#: ../client/pk-console-test.c:680 ../client/pk-console-test.c:708
+#: ../client/pk-console-test.c:736 ../client/pk-console-test.c:764
+#: ../client/pk-console-test.c:792
+#, c-format
+msgid "This tool could not find all the packages: %s"
+msgstr "ఈ సాధనము అన్ని సంకలనములను కనుగొనలేక పోయింది: %s"
+
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console-test.c:1000
+msgid "Failed to contact PackageKit"
+msgstr "ప్యాకేజీకిట్‌ను సంప్రదించుటకు విఫలమైంది"
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console-test.c:1130
+msgid "A package name to install is required"
+msgstr "సంస్థాపించుటకు వొక ప్యాకేజీ నామము అవసరమైంది"
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console-test.c:1139
+msgid "A filename to install is required"
+msgstr "సంస్థాపించుటకు వొక దస్త్రమునామము అవసరమైంది"
+
 #. TRANSLATORS: This is the state of the transaction
 #: ../client/pk-generate-pack.c:101
 msgid "Downloading"
@@ -703,137 +815,150 @@ 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:188 ../client/pk-generate-pack-test.c:225
 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:191 ../client/pk-generate-pack-test.c:228
+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:194 ../client/pk-generate-pack-test.c:231
 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:197 ../client/pk-generate-pack-test.c:234
 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:225 ../client/pk-generate-pack-test.c:269
 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:233 ../client/pk-generate-pack-test.c:277
 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:249 ../client/pk-generate-pack-test.c:293
 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
+#. 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-test.c:321 ../client/pk-generate-pack-test.c:327
 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:280 ../client/pk-generate-pack-test.c:334
 msgid ""
 "Service packs cannot be created as PackageKit was not built with libarchive "
 "support."
 msgstr "ప్యాకేజ్‌కిట్ అనునది లిబ్ఆర్చివ్ మద్దతుతో నిర్మితం కాలేదు కనుక సర్వీస్ ప్యాక్‌లు సృష్టించబడలేవు."
 
 #. 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:291 ../client/pk-generate-pack-test.c:345
 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:307 ../client/pk-generate-pack-test.c:361
 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:310 ../client/pk-generate-pack-test.c:364
 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:323 ../client/pk-generate-pack-test.c:377
 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:333 ../client/pk-generate-pack-test.c:389
 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:344 ../client/pk-generate-pack-test.c:398
 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:348 ../client/pk-generate-pack-test.c:402
 #, 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:365 ../client/pk-generate-pack-test.c:410
 msgid "Creating service pack..."
 msgstr "సేవా పాక్‌ను సృష్టించుచున్నది..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:372
+#: ../client/pk-generate-pack.c:372 ../client/pk-generate-pack-test.c:425
 #, 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:377 ../client/pk-generate-pack-test.c:430
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "'%s' సృష్టించుటకు విఫలమైంది: %s"
 
 #. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:146
+#: ../client/pk-monitor.c:146 ../client/pk-monitor-test.c:299
 msgid "PackageKit Monitor"
 msgstr "PackageKit పర్యవేక్షకి"
 
 #: ../client/pk-monitor.c:183
 msgid "Cannot show the list of transactions"
-msgstr ""
+msgstr "బదిలీకరణల జాబితాను చూపలేక పోయింది"
+
+#: ../client/pk-monitor-test.c:204
+msgid "Failed to get transaction list"
+msgstr "బదిలీకరణ జాబితాను పొందుటకు విఫలమైంది"
+
+#: ../client/pk-monitor-test.c:235
+msgid "Failed to get daemon state"
+msgstr "డెమోన్ స్థితిని పొందుటకు విఫలమైంది"
+
+#: ../client/pk-tools-common.c:51
+#: ../lib/packagekit-glib2/pk-console-shared.c:53
+#, c-format
+msgid "Please enter a number from 1 to %i: "
+msgstr "దయచేసి సంఖ్యను 1 నుండి %iకు ప్రవేశపెట్టుము: "
 
 #. TRANSLATORS: The package was not found in any software sources
-#: ../client/pk-tools-common.c:118
+#: ../client/pk-tools-common.c:188
 #, 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:200
+#: ../lib/packagekit-glib2/pk-console-shared.c:153
 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:207
+#: ../lib/packagekit-glib2/pk-console-shared.c:162
 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,377 +1015,382 @@ msgstr "సంస్థాపించుచున్నది..."
 
 #. TRANSLATORS: downloading repo data so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:349
+#: ../contrib/command-not-found/pk-command-not-found-test.c:358
 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
+#: ../contrib/command-not-found/pk-command-not-found-test.c:362
 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
+#: ../contrib/command-not-found/pk-command-not-found-test.c:366
 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
+#: ../contrib/command-not-found/pk-command-not-found-test.c:370
 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
+#: ../contrib/command-not-found/pk-command-not-found-test.c:444
 msgid "Failed to search for file"
 msgstr "దస్త్రమును శోధించుటలో విఫలమైంది"
 
 #. TRANSLATORS: we failed to launch the executable, the error follows
 #: ../contrib/command-not-found/pk-command-not-found.c:557
+#: ../contrib/command-not-found/pk-command-not-found-test.c:570
 msgid "Failed to launch:"
 msgstr "ఆరంభించుటకు విఫలమైంది:"
 
 #. TRANSLATORS: tool that gets called when the command is not found
 #: ../contrib/command-not-found/pk-command-not-found.c:632
+#: ../contrib/command-not-found/pk-command-not-found-test.c:630
 msgid "PackageKit Command Not Found"
 msgstr "PackageKit ఆదేశము కనబడలేదు"
 
 #. TRANSLATORS: the prefix of all the output telling the user why it's not executing
 #: ../contrib/command-not-found/pk-command-not-found.c:658
+#: ../contrib/command-not-found/pk-command-not-found-test.c:658
 msgid "Command not found."
 msgstr "ఆదేశము కనబడలేదు"
 
 #. TRANSLATORS: tell the user what we think the command is
 #: ../contrib/command-not-found/pk-command-not-found.c:665
+#: ../contrib/command-not-found/pk-command-not-found-test.c:665
 msgid "Similar command is:"
 msgstr "అటువంటి ఆదేశము:"
 
 #. TRANSLATORS: Ask the user if we should run the similar command
 #: ../contrib/command-not-found/pk-command-not-found.c:674
+#: ../contrib/command-not-found/pk-command-not-found-test.c:674
 msgid "Run similar command:"
 msgstr "అటువంటి ఆదేశమును నడుపుము:"
 
 #. TRANSLATORS: show the user a list of commands that they could have meant
 #. TRANSLATORS: show the user a list of commands we could run
+#. TRANSLATORS: show the user a list of commands that they could have meant
+#. TRANSLATORS: show the user a list of commands we could run
 #: ../contrib/command-not-found/pk-command-not-found.c:686
 #: ../contrib/command-not-found/pk-command-not-found.c:695
+#: ../contrib/command-not-found/pk-command-not-found-test.c:686
+#: ../contrib/command-not-found/pk-command-not-found-test.c:695
 msgid "Similar commands are:"
 msgstr "ఓకేతీరు ఆదేశములు:"
 
 #. TRANSLATORS: ask the user to choose a file to run
 #: ../contrib/command-not-found/pk-command-not-found.c:702
+#: ../contrib/command-not-found/pk-command-not-found-test.c:702
 msgid "Please choose a command to run"
 msgstr "నడుపుటకు దయచేసి ఆదేశమును యెంచుకొనుము"
 
 #. TRANSLATORS: tell the user what package provides the command
 #: ../contrib/command-not-found/pk-command-not-found.c:721
+#: ../contrib/command-not-found/pk-command-not-found-test.c:721
 msgid "The package providing this file is:"
 msgstr "సంకలనము అందించుచున్న ఈ దస్త్రము:"
 
 #. TRANSLATORS: as the user if we want to install a package to provide the command
 #: ../contrib/command-not-found/pk-command-not-found.c:726
+#: ../contrib/command-not-found/pk-command-not-found-test.c:726
 #, c-format
 msgid "Install package '%s' to provide command '%s'?"
 msgstr "సంకలనము '%s'ను ఆదేశము '%s' అందివ్వుటకు సంస్థాపించాలా?"
 
 #. TRANSLATORS: Show the user a list of packages that provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:747
+#: ../contrib/command-not-found/pk-command-not-found-test.c:747
 msgid "Packages providing this file are:"
 msgstr "ఈ దస్త్రమును అందించు సంకలనములు:"
 
 #. TRANSLATORS: Show the user a list of packages that they can install to provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:756
+#: ../contrib/command-not-found/pk-command-not-found-test.c:756
 msgid "Suitable packages are:"
 msgstr "సరితూగు సంకలనములు:"
 
 #. get selection
 #. TRANSLATORS: ask the user to choose a file to install
 #: ../contrib/command-not-found/pk-command-not-found.c:764
+#: ../contrib/command-not-found/pk-command-not-found-test.c:764
 msgid "Please choose a package to install"
 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 "ప్యాకేజీకిట్ కన్సోల్ ఇంటర్ఫేస్"
+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
+#: ../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 "సరే."
 
 #. 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 అచేతనపరచిన డీబగ్‌సమాచార రెపోలను కనుగొన్నది."
 
 #. 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 "విఫలమైంది."
 
 #. 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 "డిబగ్‌సమాచారం సంకలనము %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 "భ్రమింపు రీతిలో సంకలనములను సంస్థాపించుటలేదు"
 
 #. 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 "ప్యాకేజీకిట్ డివైజ్ రీలోడర్"
 
 #. 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 "ఈ స్క్రిప్టు root వినియోగదారి చేత మాత్రమే వుపయోగించబడుతుంది"
 
 #. 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"
@@ -1274,6 +1404,93 @@ msgstr "PackageKit సంకలనము జాబితా"
 msgid "PackageKit Service Pack"
 msgstr "PackageKit సేవా పాక్"
 
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:64
+msgid "Do you want to allow installing of unsigned software?"
+msgstr "సంతకముచేయని సాఫ్టువేరు సంస్థాపనను మీరు అనుమతించాలని అనుకొనుచున్నారా?"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:68
+msgid "The unsigned software will not be installed."
+msgstr "సంతకము చేయని సాఫ్టువేరు సంస్థాపించబడదు."
+
+#: ../lib/packagekit-glib2/pk-task-text.c:100
+msgid "Software source signature required"
+msgstr "సాఫ్టువేరు మూలముయొక్క సంతకము అవసరము"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:102
+msgid "Software source name"
+msgstr "సాఫ్టువేరు మూలపు నామము"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:103
+msgid "Key URL"
+msgstr "à°•à±€ URL"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:104
+msgid "Key user"
+msgstr "కీ వినియోగదారి"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:105
+msgid "Key ID"
+msgstr "à°•à±€ ID"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:106
+msgid "Key fingerprint"
+msgstr "కీ వేలిముద్ర"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:107
+msgid "Key Timestamp"
+msgstr "కీ టైమ్‌స్టాంప్"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:151
+msgid "End user licence agreement required"
+msgstr "అంతిమ వినియోగదారి లైసెన్సు వొప్పందము అవసరమైంది"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:152
+msgid "EULA ID"
+msgstr "EULA ID"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:155
+msgid "Agreement"
+msgstr "ఒప్పందము"
+
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:161
+msgid "Do you accept this agreement?"
+msgstr "మీరు ఈ వొప్పందమును ఆమోదిస్తారా?"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:165
+msgid "The agreement was not accepted."
+msgstr "ఒప్పందము ఆమోదించబడదు."
+
+#: ../lib/packagekit-glib2/pk-task-text.c:194
+msgid "Media change required"
+msgstr "మాధ్యమం మార్పు అవసరమైంది"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:195
+msgid "Media type"
+msgstr "మాధ్యమం రకము"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:196
+msgid "Media ID"
+msgstr "మాధ్యమం ID"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:197
+msgid "Text"
+msgstr "పాఠ్యము"
+
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:201
+msgid "Please insert the correct media"
+msgstr "దయచేసి సరైన మాధ్యమాన్ని చేర్చుము"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:205
+msgid "The correct media was not inserted."
+msgstr "సరైన మాధ్యమం చేర్చబడలేదు."
+
+#: ../lib/packagekit-glib2/pk-task-text.c:303
+msgid "The transaction did not proceed."
+msgstr "బదిలీకరణ ముందుకుసాగలేదు."
+
 #. SECURITY:
 #. - Normal users do not require admin authentication to accept new
 #. licence agreements.
@@ -1289,8 +1506,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 +1532,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"
@@ -1393,7 +1608,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
@@ -1514,43 +1729,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 5254d3b57e181725c53397018a26ec0d893d437a
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 09:27:59 2009 +0100

    Add a check for glib-2.0 >= 2.22.0 for the new glib2 library

diff --git a/configure.ac b/configure.ac
index 342078c..a173274 100644
--- a/configure.ac
+++ b/configure.ac
@@ -552,6 +552,8 @@ AC_ARG_ENABLE(glib2, AS_HELP_STRING([--enable-glib2],[Build glib2 library (exper
 	      build_glib2=$enableval,build_glib2=no)
 AM_CONDITIONAL(PK_BUILD_GLIB2, test $build_glib2 = "yes")
 if test x$build_glib2 = xyes; then
+	# needed for g_cancellable_connect() and g_ptr_array_ref()
+	PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.22.0)
 	AC_DEFINE(PK_BUILD_GLIB2,1,[Build glib2 code])
 fi
 
commit c8a158bf1d0ca02afb3a6693d0020f531240e7aa
Merge: 9b57a8a... 1a04977...
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Sep 9 08:42:14 2009 +0100

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

commit 9b57a8a946f11ee53bfafb1c2ab25432a7bdcc0d
Author: Christoph Wickert <cwickert at fedoraproject.org>
Date:   Wed Sep 9 08:41:23 2009 +0100

    yum: Fix yum-comps-groups.conf to bring back the Xfce packages

diff --git a/backends/yum/yum-comps-groups.conf b/backends/yum/yum-comps-groups.conf
index b7142f3..24e63fd 100644
--- a/backends/yum/yum-comps-groups.conf
+++ b/backends/yum/yum-comps-groups.conf
@@ -2,7 +2,8 @@
 admin-tools=base-system;system-tools,base-system;admin-tools,rpmfusion_free;hardware-support
 desktop-gnome=rpmfusion_free;gnome-desktop,desktops;gnome-desktop
 desktop-kde=desktops;kde-desktop,rpmfusion_free;kde-desktop
-desktop-other=desktops;window-managers,desktops;sugar-desktop,desktops;lxde-desktop,desktops;xfce-desktop
+desktop-xfce=desktops;xfce-desktop
+desktop-other=desktops;window-managers,desktops;sugar-desktop,desktops;lxde-desktop
 education=apps;education,development;electronic-lab
 fonts=base-system;fonts,base-system;legacy-fonts
 games=apps;games,rpmfusion_free;games,rpmfusion_nonfree;games
commit 1a04977b4d34807cbb9a8a430653129a1463fc3d
Author: runab <runab at fedoraproject.org>
Date:   Wed Sep 9 06:34:03 2009 +0000

    Sending translation for Bengali (India)

diff --git a/po/bn_IN.po b/po/bn_IN.po
index 2a47929..1dc2508 100644
--- a/po/bn_IN.po
+++ b/po/bn_IN.po
@@ -1,4 +1,4 @@
-# translation of packagekit.master.bn_IN.po to Bengali INDIA
+# translation of packagekit.master-new.po to Bengali INDIA
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 #
@@ -6,10 +6,10 @@
 # Runa Bhattacharjee <runab at fedoraproject.org>, 2009.
 msgid ""
 msgstr ""
-"Project-Id-Version: packagekit.master.bn_IN\n"
+"Project-Id-Version: packagekit.master-new\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-02 02:37+0000\n"
-"PO-Revision-Date: 2009-09-04 16:05+0530\n"
+"POT-Creation-Date: 2009-09-09 02:41+0000\n"
+"PO-Revision-Date: 2009-09-09 12:03+0530\n"
 "Last-Translator: Runa Bhattacharjee <runab at redhat.com>\n"
 "Language-Team: Bengali INDIA <anubad at lists.ankur.org.in>\n"
 "MIME-Version: 1.0\n"
@@ -19,713 +19,784 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #. TRANSLATORS: this is an atomic transaction
-#: ../client/pk-console.c:235
+#: ../client/pk-console.c:237 ../client/pk-console-test.c:143
 msgid "Transaction"
 msgstr "ট্রানসাকশন"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:237
+#: ../client/pk-console.c:239 ../client/pk-console-test.c:145
 msgid "System time"
 msgstr "সিস্টেমের সময়"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:239
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:147
 msgid "Succeeded"
 msgstr "সফল"
 
-#: ../client/pk-console.c:239
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:147
 msgid "True"
 msgstr "সত্য (true)"
 
-#: ../client/pk-console.c:239
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:147
 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:243 ../client/pk-console-test.c:149
+#: ../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:248 ../client/pk-console-test.c:154
 msgid "Duration"
 msgstr "অবকাল"
 
-#: ../client/pk-console.c:246
+#: ../client/pk-console.c:248 ../client/pk-console-test.c:154
 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:252 ../client/pk-console-test.c:158
+#: ../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:254 ../client/pk-console-test.c:160
 msgid "User ID"
 msgstr "ব্যবহারকারীর ID"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:259
+#: ../client/pk-console.c:261 ../client/pk-console-test.c:167
 msgid "Username"
 msgstr "ব্যবহারকারীর নাম"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:263
+#: ../client/pk-console.c:265 ../client/pk-console-test.c:171
 msgid "Real name"
 msgstr "নাম"
 
-#: ../client/pk-console.c:271
+#: ../client/pk-console.c:273 ../client/pk-console-test.c:179
 msgid "Affected packages:"
 msgstr "প্রভাবিত প্যাকেজ:"
 
-#: ../client/pk-console.c:273
+#: ../client/pk-console.c:275 ../client/pk-console-test.c:181
 msgid "Affected packages: None"
 msgstr "প্রভাবিত প্যাকেজ: একটিও নয়"
 
 #. TRANSLATORS: When processing, we might have to remove other dependencies
-#: ../client/pk-console.c:334
+#: ../client/pk-console.c:336 ../lib/packagekit-glib2/pk-task-text.c:220
 msgid "The following packages have to be removed:"
 msgstr "নিম্নলিখিত প্যাকেজগুলি অপসারণ করা আবশ্যক:"
 
 #. TRANSLATORS: When processing, we might have to install other dependencies
-#: ../client/pk-console.c:337
+#: ../client/pk-console.c:339 ../lib/packagekit-glib2/pk-task-text.c:225
 msgid "The following packages have to be installed:"
 msgstr "নিম্নলিখিত প্যাকেজগুলি ইনস্টল করা আবশ্যক:"
 
 #. TRANSLATORS: When processing, we might have to update other dependencies
-#: ../client/pk-console.c:340
+#: ../client/pk-console.c:342 ../lib/packagekit-glib2/pk-task-text.c:230
 msgid "The following packages have to be updated:"
 msgstr "নিম্নলিখিত প্যাকেজগুলি আপডেট করা আবশ্যক:"
 
 #. TRANSLATORS: When processing, we might have to reinstall other dependencies
-#: ../client/pk-console.c:343
+#: ../client/pk-console.c:345 ../lib/packagekit-glib2/pk-task-text.c:235
 msgid "The following packages have to be reinstalled:"
 msgstr "নিম্নলিখিত প্যাকেজগুলি পুনরায় ইনস্টল করা আবশ্যক:"
 
 #. TRANSLATORS: When processing, we might have to downgrade other dependencies
-#: ../client/pk-console.c:346
+#: ../client/pk-console.c:348 ../lib/packagekit-glib2/pk-task-text.c:240
 msgid "The following packages have to be downgraded:"
 msgstr "নিম্নলিখিত প্যাকেজগুলি ডাউনগ্রেড করা আবশ্যক:"
 
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:360
+#: ../client/pk-console.c:362 ../client/pk-console-test.c:201
 msgid "Distribution"
 msgstr "ডিস্ট্রিবিউশন"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:362
+#: ../client/pk-console.c:364 ../client/pk-console-test.c:203
 msgid "Type"
 msgstr "ধরন"
 
 #. 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
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:366 ../client/pk-console.c:389
+#: ../client/pk-console-test.c:205 ../client/pk-console-test.c:226
 msgid "Summary"
 msgstr "সার-সংক্ষেপ"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:376
+#: ../client/pk-console.c:378 ../client/pk-console-test.c:215
 msgid "Category"
 msgstr "শ্রেণী"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:378
+#: ../client/pk-console.c:380 ../client/pk-console-test.c:217
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:381
+#: ../client/pk-console.c:383 ../client/pk-console-test.c:220
 msgid "Parent"
 msgstr "ঊর্ধ্বতন"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:384
+#: ../client/pk-console.c:386 ../client/pk-console-test.c:223
 msgid "Name"
 msgstr "নাম"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:390
+#: ../client/pk-console.c:392 ../client/pk-console-test.c:229
 msgid "Icon"
 msgstr "আইকন"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:405
+#: ../client/pk-console.c:407 ../client/pk-console-test.c:243
 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:407 ../src/pk-polkit-action-lookup.c:352
+#: ../client/pk-console.c:409 ../client/pk-console-test.c:249
+#: ../lib/packagekit-glib2/pk-task-text.c:101
+#: ../lib/packagekit-glib2/pk-task-text.c:153
+#: ../src/pk-polkit-action-lookup.c:352
 msgid "Package"
 msgid_plural "Packages"
 msgstr[0] "প্যাকেজ"
 msgstr[1] "প্যাকেজ"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:410
+#: ../client/pk-console.c:412 ../client/pk-console-test.c:252
 msgid "Updates"
 msgstr "আপডেট"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:414
+#: ../client/pk-console.c:416 ../client/pk-console-test.c:256
 msgid "Obsoletes"
 msgstr "অবচিত"
 
 #. TRANSLATORS: details about the update, the vendor URLs
-#: ../client/pk-console.c:418
+#: ../client/pk-console.c:420 ../client/pk-console-test.c:260
+#: ../lib/packagekit-glib2/pk-task-text.c:154
 msgid "Vendor"
 msgstr "বিক্রেতা"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:422
+#: ../client/pk-console.c:424 ../client/pk-console-test.c:264
 msgid "Bugzilla"
 msgstr "Bugzilla"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:426
+#: ../client/pk-console.c:428 ../client/pk-console-test.c:268
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:430
+#: ../client/pk-console.c:432 ../client/pk-console-test.c:272
 msgid "Restart"
 msgstr "পুনরারম্ভ"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:434
+#: ../client/pk-console.c:436 ../client/pk-console-test.c:276
 msgid "Update text"
 msgstr "আপডেট সংক্রান্ত টেক্সট"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:438
+#: ../client/pk-console.c:440 ../client/pk-console-test.c:280
 msgid "Changes"
 msgstr "পরিবর্তন"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:442
+#: ../client/pk-console.c:444 ../client/pk-console-test.c:284
 msgid "State"
 msgstr "অবস্থা"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:447
+#: ../client/pk-console.c:449 ../client/pk-console-test.c:289
 msgid "Issued"
 msgstr "প্রকাশনার সময়ক্ষণ"
 
 #. TRANSLATORS: details about the update, date the update was updated
-#: ../client/pk-console.c:452
+#: ../client/pk-console.c:454 ../client/pk-console-test.c:294
 msgid "Updated"
 msgstr "আপডেটের সময়ক্ষণ"
 
 #. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:472
+#: ../client/pk-console.c:474 ../client/pk-console-test.c:312
 msgid "Enabled"
 msgstr "সক্রিয়"
 
 #. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:475
+#: ../client/pk-console.c:477 ../client/pk-console-test.c:315
 msgid "Disabled"
 msgstr "নিষ্ক্রিয়"
 
-#: ../client/pk-console.c:552 ../client/pk-console.c:554
+#: ../client/pk-console.c:554 ../client/pk-console.c:556
 msgid "Percentage"
 msgstr "শতাংশ"
 
-#: ../client/pk-console.c:554
+#: ../client/pk-console.c:556
 msgid "Unknown"
 msgstr "অজানা"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:596
+#: ../client/pk-console.c:598 ../client/pk-console-test.c:337
 msgid "System restart required by:"
 msgstr "চিহ্নিত প্যাকেজের ক্ষেত্রে সিস্টেম পুনরারম্ভ করা আবশ্যক:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:599
+#: ../client/pk-console.c:601 ../client/pk-console-test.c:340
 msgid "Session restart required:"
 msgstr "সেশান পুনরারম্ভ করা আবশ্যক:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:602
+#: ../client/pk-console.c:604 ../client/pk-console-test.c:343
 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:605
+#: ../client/pk-console.c:607 ../client/pk-console-test.c:346
 msgid "Session restart (security) required:"
 msgstr "সেশান পুনরারম্ভ (নিরাপত্তা) করা আবশ্যক:"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:608
+#: ../client/pk-console.c:610 ../client/pk-console-test.c:349
 msgid "Application restart required by:"
 msgstr "চিহ্নিত প্যাকেজের ক্ষেত্রে অ্যাপ্লিকেশন পুনরারম্ভ করা আবশ্যক:"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:663
+#: ../client/pk-console.c:665 ../client/pk-console-test.c:538
 msgid "Please restart the computer to complete the update."
 msgstr "আপডেট সম্পূর্ণ করার জন্য অনুগ্রহ করে কম্পিউটার পুনরায় আরম্ভ করুন।"
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:666
+#: ../client/pk-console.c:668 ../client/pk-console-test.c:541
 msgid "Please logout and login to complete the update."
 msgstr "আপডেট সম্পন্ন করার জন্য অনুগ্রহ করে লগ-আউট করে পুনরায় লগ-ইন করুন।"
 
 #. TRANSLATORS: a package needs to restart the application
-#: ../client/pk-console.c:669
+#: ../client/pk-console.c:671
 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:672
+#: ../client/pk-console.c:674 ../client/pk-console-test.c:544
 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:675
+#: ../client/pk-console.c:677 ../client/pk-console-test.c:547
 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:807
+#: ../client/pk-console.c:809
 #, 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:815
+#: ../client/pk-console.c:817
 #, 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: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
+#: ../client/pk-console.c:843 ../client/pk-console.c:891
+#: ../client/pk-console.c:915 ../client/pk-console.c:963
+#: ../client/pk-console.c:1059 ../client/pk-console.c:1172
+#: ../client/pk-console.c:1233 ../client/pk-tools-common.c:132
+#: ../client/pk-tools-common.c:151 ../client/pk-tools-common.c:159
 #, 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
+#. ask the user
+#: ../client/pk-console.c:875 ../client/pk-console.c:947
+#: ../client/pk-console.c:1265 ../lib/packagekit-glib2/pk-task-text.c:299
 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
+#: ../client/pk-console.c:880 ../client/pk-console.c:952
 msgid "The package install was canceled!"
 msgstr "প্যাকেজ ইনস্টলেশনের কর্ম বাতিল করা হয়েছে!"
 
 #. TRANSLATORS: There was an error installing the packages. The detailed error follows
-#: ../client/pk-console.c:897 ../client/pk-console.c:1631
+#: ../client/pk-console.c:899 ../client/pk-console.c:1633
 #, 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:969
+#: ../client/pk-console.c:971
 #, 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:1025
+#: ../client/pk-console.c:1027
 #, 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:1048 ../client/pk-console.c:1086
-#: ../client/pk-console.c:1115
+#: ../client/pk-console.c:1050 ../client/pk-console.c:1088
+#: ../client/pk-console.c:1117
 #, c-format
 msgid "This tool could not remove the packages: %s"
 msgstr "এই সামগ্রী দ্বারা প্যাকেজ মুছে ফেলা যায়নি: %s"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:1101
+#: ../client/pk-console.c:1103
 msgid "Proceed with additional packages?"
 msgstr "অতিরিক্ত প্যাকেজ অপসারণ করা হবে কি?"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:1106
+#: ../client/pk-console.c:1108
 msgid "The package removal was canceled!"
 msgstr "প্যাকেজ অপসারণের কর্ম বাতিল করা হয়েছে!"
 
 #. TRANSLATORS: The package name was not found in any software sources
-#: ../client/pk-console.c:1147
+#: ../client/pk-console.c:1149
 #, 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:1178
+#: ../client/pk-console.c:1180
 #, 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:1210 ../client/pk-console.c:1222
-#: ../client/pk-console.c:1277
+#: ../client/pk-console.c:1212 ../client/pk-console.c:1224
+#: ../client/pk-console.c:1279
 #, 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
+#: ../client/pk-console.c:1270
 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:1301 ../client/pk-console.c:1309
+#: ../client/pk-console.c:1303 ../client/pk-console.c:1311
 #, 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:1331 ../client/pk-console.c:1339
+#: ../client/pk-console.c:1333 ../client/pk-console.c:1341
 #, 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:1361 ../client/pk-console.c:1369
+#: ../client/pk-console.c:1363 ../client/pk-console.c:1371
 #, 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:1391
+#: ../client/pk-console.c:1393
 #, 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:1399
+#: ../client/pk-console.c:1401
 #, 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:1421
+#: ../client/pk-console.c:1423
 #, c-format
 msgid "File already exists: %s"
 msgstr "উল্লিখিত ফাইল বর্তমানে উপস্থিত রয়েছে: %s"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1426 ../client/pk-console.c:1482
-#: ../client/pk-console.c:1557
+#: ../client/pk-console.c:1428 ../client/pk-console.c:1484
+#: ../client/pk-console.c:1559
 msgid "Getting package list"
 msgstr "প্যাকেজের তালিকা প্রাপ্ত করা হচ্ছে"
 
 #. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
-#: ../client/pk-console.c:1432 ../client/pk-console.c:1488
-#: ../client/pk-console.c:1563
+#: ../client/pk-console.c:1434 ../client/pk-console.c:1490
+#: ../client/pk-console.c:1565
 #, 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:1443
+#: ../client/pk-console.c:1445
 #, c-format
 msgid "Failed to save to disk"
 msgstr "ডিস্কে সংরক্ষণ করতে ব্যর্থ"
 
 #. TRANSLATORS: There was an error getting the list. The filename follows
-#: ../client/pk-console.c:1477 ../client/pk-console.c:1552
+#: ../client/pk-console.c:1479 ../client/pk-console.c:1554
 #, c-format
 msgid "File does not exist: %s"
 msgstr "ফাইল উপস্থিত নেই: %s"
 
 #. TRANSLATORS: header to a list of packages newly added
-#: ../client/pk-console.c:1509
+#: ../client/pk-console.c:1511
 msgid "Packages to add"
 msgstr "যোগ করার উদ্দেশ্যে চিহ্নিত প্যাকেজ"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1517
+#: ../client/pk-console.c:1519
 msgid "Packages to remove"
 msgstr "অপসারণের উদ্দেশ্যে চিহ্নিত প্যাকেজ"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1585
+#: ../client/pk-console.c:1587
 #, c-format
 msgid "No new packages need to be installed"
 msgstr "কোনো নতুন প্যাকেজ ইনস্টল করা যায়নি"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1591
+#: ../client/pk-console.c:1593
 msgid "To install"
 msgstr "ইনস্টলেশনের জন্য চিহ্নিত"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1603
+#: ../client/pk-console.c:1605
 msgid "Searching for package: "
 msgstr "প্যাকেজ অনুসন্ধান করা হচ্ছে: "
 
 #. TRANSLATORS: package was not found -- this is the end of a string ended in ...
-#: ../client/pk-console.c:1607
+#: ../client/pk-console.c:1609
 msgid "not found."
 msgstr "পাওয়া যায়নি।"
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1618
+#: ../client/pk-console.c:1620
 #, 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:1624
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:886
+#: ../client/pk-console.c:1626
+#: ../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:1660
+#: ../client/pk-console.c:1662
 #, 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:1668
+#: ../client/pk-console.c:1670
 #, 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:1699
+#: ../client/pk-console.c:1701
 msgid "Error:"
 msgstr "ত্রুটি:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1713
+#: ../client/pk-console.c:1715 ../client/pk-console-test.c:366
 msgid "Package description"
 msgstr "প্যাকেজের বিবরণ"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:1729
+#: ../client/pk-console.c:1731 ../client/pk-console-test.c:384
 msgid "Message:"
 msgstr "বার্তা:"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1757
+#: ../client/pk-console.c:1759 ../client/pk-console-test.c:403
 msgid "Package files"
 msgstr "প্যাকেজের ফাইল"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1765
+#: ../client/pk-console.c:1767 ../client/pk-console-test.c:398
 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:1788
+#: ../client/pk-console.c:1790
 msgid "Repository signature required"
 msgstr "সংগ্রহস্থলের স্বাক্ষর আবশ্যক"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
-#: ../client/pk-console.c:1798
+#. ask the user
+#: ../client/pk-console.c:1800 ../lib/packagekit-glib2/pk-task-text.c:113
 msgid "Do you accept this signature?"
 msgstr "এই স্বাক্ষর গ্রহণ করা হবে কি?"
 
 #. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1802
+#: ../client/pk-console.c:1804 ../lib/packagekit-glib2/pk-task-text.c:117
 msgid "The signature was not accepted."
 msgstr "স্বাক্ষর গ্রহণ করা হয়নি।"
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1836
+#: ../client/pk-console.c:1838
 msgid "End user license agreement required"
 msgstr "ব্যবহারকারীদের লাইসেন্স সংক্রান্ত চুক্তিপত্র আবশ্যক"
 
 #. TRANSLATORS: This a prompt asking the user to agree to the license
-#: ../client/pk-console.c:1843
+#: ../client/pk-console.c:1845
 msgid "Do you agree to this license?"
 msgstr "লাইসেন্স অনুযায়ী আপনি সম্মত কি?"
 
 #. TRANSLATORS: This is where the user declined the license
-#: ../client/pk-console.c:1847
+#: ../client/pk-console.c:1849
 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:1876
+#: ../client/pk-console.c:1878 ../client/pk-console-test.c:816
 msgid "The daemon crashed mid-transaction!"
 msgstr "সম্প্রচার চলাকালে ডেমন বিপর্যস্ত হয়েছে!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1929
+#: ../client/pk-console.c:1931 ../client/pk-console-test.c:850
 msgid "PackageKit Console Interface"
 msgstr "PackageKit কনসোল ইন্টারফেস"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1931
+#: ../client/pk-console.c:1933 ../client/pk-console-test.c:852
 msgid "Subcommands:"
 msgstr "সাব-কমান্ড:"
 
 #. TRANSLATORS: command line argument, if we should show debugging information
 #. TRANSLATORS: if we should show debugging data
-#: ../client/pk-console.c:2024 ../client/pk-generate-pack.c:185
-#: ../client/pk-monitor.c:128
+#: ../client/pk-console.c:2026 ../client/pk-console-test.c:966
+#: ../client/pk-generate-pack.c:185 ../client/pk-generate-pack-test.c:222
+#: ../client/pk-monitor.c:128 ../client/pk-monitor-test.c:282
 #: ../contrib/command-not-found/pk-command-not-found.c:616
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:550
+#: ../contrib/command-not-found/pk-command-not-found-test.c:614
+#: ../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:2027 ../client/pk-monitor.c:130
+#: ../client/pk-console.c:2029 ../client/pk-console-test.c:969
+#: ../client/pk-monitor.c:130 ../client/pk-monitor-test.c:284
 msgid "Show the program version and exit"
 msgstr "প্রোগ্রামের সংস্করণ প্রদর্শন করে প্রস্থান করা হবে"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:2030
+#: ../client/pk-console.c:2032 ../client/pk-console-test.c:972
 msgid "Set the filter, e.g. installed"
 msgstr "ফিল্টার নির্ধারণ করুন, উদাহরণ, installed"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:2033
+#: ../client/pk-console.c:2035 ../client/pk-console-test.c:975
 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:2060
+#: ../client/pk-console.c:2062
 msgid "This tool could not connect to system DBUS."
 msgstr "এই সামগ্রী দ্বারা সিস্টেম DBUS-র সাথে সংযোগ স্থাপন করতে ব্যর্থ।"
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:2150
+#: ../client/pk-console.c:2152 ../client/pk-console-test.c:1052
 msgid "The filter specified was invalid"
 msgstr "নির্ধারিত ফিল্টার বৈধ নয়"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:2169
+#: ../client/pk-console.c:2171 ../client/pk-console-test.c:1071
 msgid "A search type is required, e.g. name"
 msgstr "অনুসন্ধানের ধরন আবশ্যক, উদাহরণ নাম (name)"
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:2176 ../client/pk-console.c:2185
-#: ../client/pk-console.c:2194 ../client/pk-console.c:2203
+#: ../client/pk-console.c:2178 ../client/pk-console.c:2187
+#: ../client/pk-console.c:2196 ../client/pk-console.c:2205
+#: ../client/pk-console-test.c:1078 ../client/pk-console-test.c:1090
+#: ../client/pk-console-test.c:1102 ../client/pk-console-test.c:1114
 msgid "A search term is required"
 msgstr "অনুসন্ধানের উদ্দেশ্যে কিছু তথ্য লেখা আবশ্যক"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:2210
+#: ../client/pk-console.c:2212 ../client/pk-console-test.c:1124
 msgid "Invalid search type"
 msgstr "অনুসন্ধানের ধরন বৈধ নয়"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:2216
+#: ../client/pk-console.c:2218
 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:2225
+#: ../client/pk-console.c:2227 ../client/pk-console-test.c:1151
 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:2234
+#: ../client/pk-console.c:2236 ../client/pk-console-test.c:1162
 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:2242
+#: ../client/pk-console.c:2244 ../client/pk-console-test.c:1171
 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:2249
+#: ../client/pk-console.c:2251 ../client/pk-console-test.c:1178
 msgid "Directory not found"
 msgstr "ডিরেক্টরি পাওয়া যায়নি"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2257
+#: ../client/pk-console.c:2259 ../client/pk-console-test.c:1187
 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:2267
+#: ../client/pk-console.c:2269 ../client/pk-console-test.c:1198
 msgid "A transaction identifier (tid) is required"
 msgstr "ট্রানসাকশন পরিচয়কারী (tid) উল্লেখ করা আবশ্যক"
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:2284
+#: ../client/pk-console.c:2286 ../client/pk-console-test.c:1219
 msgid "A package name to resolve is required"
 msgstr "মীমাংসা করার উদ্দেশ্যে প্যাকেজের নাম উল্লেখ করা আবশ্যক"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:2293 ../client/pk-console.c:2302
+#: ../client/pk-console.c:2295 ../client/pk-console.c:2304
+#: ../client/pk-console-test.c:1230 ../client/pk-console-test.c:1241
 msgid "A repository name is required"
 msgstr "সংগ্রহস্থলের নাম উল্লেখ আবশ্যক"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:2311
+#: ../client/pk-console.c:2313 ../client/pk-console-test.c:1252
 msgid "A repo name, parameter and value are required"
 msgstr "একটি repo-র নাম, পরামিতি ও মান নির্ধারণ করা আবশ্যক"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:2325
+#: ../client/pk-console.c:2327 ../client/pk-console-test.c:1269
 msgid "An action, e.g. 'update-system' is required"
 msgstr "কর্ম নির্ধারণ করা আবশ্যক, উদাহরণ 'update-system'"
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:2332
+#: ../client/pk-console.c:2334 ../client/pk-console-test.c:1276
 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:2339
+#: ../client/pk-console.c:2341 ../client/pk-console-test.c:931
 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: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
+#: ../client/pk-console.c:2351 ../client/pk-console.c:2363
+#: ../client/pk-console.c:2372 ../client/pk-console.c:2390
+#: ../client/pk-console.c:2399 ../client/pk-console-test.c:1286
+#: ../client/pk-console-test.c:1301 ../client/pk-console-test.c:1310
+#: ../client/pk-console-test.c:1330 ../client/pk-console-test.c:1339
+#: ../client/pk-generate-pack.c:241 ../client/pk-generate-pack-test.c:285
 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:2379
+#: ../client/pk-console.c:2381 ../client/pk-console-test.c:1319
 msgid "A package provide string is required"
 msgstr "প্যাকেজ দ্বারা উপলব্ধ (provides) সামগ্রী সংক্রান্ত তথ্য উল্লেখ করা আবশ্যক"
 
 #. TRANSLATORS: The user didn't specify a filename to create as a list
-#: ../client/pk-console.c:2406
+#: ../client/pk-console.c:2408
 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:2416 ../client/pk-console.c:2426
+#: ../client/pk-console.c:2418 ../client/pk-console.c:2428
 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:2480
+#: ../client/pk-console.c:2482 ../client/pk-console-test.c:1399
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "'%s' বিকল্পটি সমর্থিত নয়"
 
 #. TRANSLATORS: User does not have permission to do this
-#: ../client/pk-console.c:2493
+#: ../client/pk-console.c:2495
 msgid "Incorrect privileges for this operation"
 msgstr "এই কর্মের জন্য প্রয়োজনীয় অনুমতি আপনার জন্য উপলব্ধ নয়"
 
 #. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:2496
+#. /* 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
+#: ../client/pk-console.c:2498 ../client/pk-console-test.c:1411
 msgid "Command failed"
 msgstr "কমান্ড বিফল"
 
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console-test.c:568
+#, c-format
+msgid "This tool could not find the available package: %s"
+msgstr "উপলব্ধ প্যাকেজটি এই সামগ্রী দ্বারা পাওয়া যায়নি: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console-test.c:596
+#, c-format
+msgid "This tool could not find the installed package: %s"
+msgstr "ইনস্টল করা প্যাকেজটি এই সামগ্রী দ্বারা পাওয়া যায়নি: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console-test.c:624 ../client/pk-console-test.c:652
+#, c-format
+msgid "This tool could not find the package: %s"
+msgstr "প্যাকেজটি এই সামগ্রী দ্বারা পাওয়া যায়নি: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
+#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
+#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
+#: ../client/pk-console-test.c:680 ../client/pk-console-test.c:708
+#: ../client/pk-console-test.c:736 ../client/pk-console-test.c:764
+#: ../client/pk-console-test.c:792
+#, c-format
+msgid "This tool could not find all the packages: %s"
+msgstr "উপলব্ধ সকল প্যাকেজগুলি এই সামগ্রী পাওয়া যায়নি: %s"
+
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console-test.c:1000
+msgid "Failed to contact PackageKit"
+msgstr "PackageKit-র সাথে সংযোগ স্থাপন করতে ব্যর্থ"
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console-test.c:1130
+msgid "A package name to install is required"
+msgstr "ইনস্টল করার উদ্দেশ্যে প্যাকেজের নাম উল্লেখ করা আবশ্যক"
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console-test.c:1139
+msgid "A filename to install is required"
+msgstr "ইনস্টলেশনের জন্য ফাইলের নাম উল্লেখ করা আবশ্যক"
+
 #. TRANSLATORS: This is the state of the transaction
 #: ../client/pk-generate-pack.c:101
 msgid "Downloading"
@@ -742,48 +813,51 @@ 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:188 ../client/pk-generate-pack-test.c:225
 msgid "Set the file name of dependencies to be excluded"
 msgstr "উপেক্ষা করার উদ্দেশ্যে নির্ভরতার তালিকা উল্লেখকারী ফাইলের পাথ নির্ধারণ করুন"
 
 #. TRANSLATORS: the output location
-#: ../client/pk-generate-pack.c:191
+#: ../client/pk-generate-pack.c:191 ../client/pk-generate-pack-test.c:228
 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:194 ../client/pk-generate-pack-test.c:231
 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:197 ../client/pk-generate-pack-test.c:234
 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:225 ../client/pk-generate-pack-test.c:269
 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:233 ../client/pk-generate-pack-test.c:277
 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:249 ../client/pk-generate-pack-test.c:293
 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
+#. 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-test.c:321 ../client/pk-generate-pack-test.c:327
 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:280 ../client/pk-generate-pack-test.c:334
 msgid ""
 "Service packs cannot be created as PackageKit was not built with libarchive "
 "support."
@@ -792,60 +866,60 @@ msgstr ""
 "নয়।"
 
 #. 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:291 ../client/pk-generate-pack-test.c:345
 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:307 ../client/pk-generate-pack-test.c:361
 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:310 ../client/pk-generate-pack-test.c:364
 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:323 ../client/pk-generate-pack-test.c:377
 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:333 ../client/pk-generate-pack-test.c:389
 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:344 ../client/pk-generate-pack-test.c:398
 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:348 ../client/pk-generate-pack-test.c:402
 #, 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:365 ../client/pk-generate-pack-test.c:410
 msgid "Creating service pack..."
 msgstr "সার্ভিস প্যাক নির্মাণ করা হচ্ছে..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:372
+#: ../client/pk-generate-pack.c:372 ../client/pk-generate-pack-test.c:425
 #, 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:377 ../client/pk-generate-pack-test.c:430
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "'%s' নির্মাণ করতে ব্যর্থ: %s"
 
 #. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:146
+#: ../client/pk-monitor.c:146 ../client/pk-monitor-test.c:299
 msgid "PackageKit Monitor"
 msgstr "PackageKit Monitor"
 
@@ -853,27 +927,38 @@ msgstr "PackageKit Monitor"
 msgid "Cannot show the list of transactions"
 msgstr "ট্রাসাকশনের তালিকা প্রদর্শন করতে ব্যর্থ"
 
+#: ../client/pk-monitor-test.c:204
+msgid "Failed to get transaction list"
+msgstr "ট্রানসাকশানের তালিকা প্রাপ্ত করতে ব্যর্থ।"
+
+#: ../client/pk-monitor-test.c:235
+msgid "Failed to get daemon state"
+msgstr "ডেমনের অবস্থা প্রাপ্ত করতে ব্যর্থ"
+
+#: ../client/pk-tools-common.c:51
+#: ../lib/packagekit-glib2/pk-console-shared.c:53
+#, c-format
+msgid "Please enter a number from 1 to %i: "
+msgstr "অনুগ্রহ করে ১ থেকে %i-র মধ্যে একটি সংখ্যা লিখুন: "
+
 #. TRANSLATORS: The package was not found in any software sources
-#: ../client/pk-tools-common.c:118
+#: ../client/pk-tools-common.c:188
 #, 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:200
+#: ../lib/packagekit-glib2/pk-console-shared.c:153
 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:207
+#: ../lib/packagekit-glib2/pk-console-shared.c:162
 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..."
@@ -930,73 +1015,90 @@ msgstr "ইনস্টল করা হচ্ছে..."
 
 #. TRANSLATORS: downloading repo data so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:349
+#: ../contrib/command-not-found/pk-command-not-found-test.c:358
 msgid "Downloading details about the software sources."
 msgstr "সফ্টওয়্যারের উৎসস্থল সম্পর্কে বিরবণ ডাউনলোড করা হচ্ছে।"
 
 #. TRANSLATORS: downloading file lists so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:353
+#: ../contrib/command-not-found/pk-command-not-found-test.c:362
 msgid "Downloading filelists (this may take some time to complete)."
 msgstr "ফাইলের তালিকা ডাউনলোড করা হচ্ছে (এই কাজে কিছু সময় ব্যয় হওয়ার সম্ভাবনা রয়েছে)।"
 
 #. TRANSLATORS: waiting for native lock
 #: ../contrib/command-not-found/pk-command-not-found.c:357
+#: ../contrib/command-not-found/pk-command-not-found-test.c:366
 msgid "Waiting for package manager lock."
 msgstr "প্যাকেজ পরিচালনব্যবস্থার লক প্রাপ্ত করার অপেক্ষা চলছে।"
 
 #. TRANSLATORS: loading package cache so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:361
+#: ../contrib/command-not-found/pk-command-not-found-test.c:370
 msgid "Loading list of packages."
 msgstr "প্যাকেজের তালিকা লোড করা হচ্ছ।"
 
 #. TRANSLATORS: we failed to find the package, this shouldn't happen
 #: ../contrib/command-not-found/pk-command-not-found.c:420
+#: ../contrib/command-not-found/pk-command-not-found-test.c:444
 msgid "Failed to search for file"
 msgstr "ফাইল অনুসন্ধান করতে ব্যর্থ"
 
 #. TRANSLATORS: we failed to launch the executable, the error follows
 #: ../contrib/command-not-found/pk-command-not-found.c:557
+#: ../contrib/command-not-found/pk-command-not-found-test.c:570
 msgid "Failed to launch:"
 msgstr "চিহ্নিত সামগ্রী আরম্ভ করতে ব্যর্থ:"
 
 #. TRANSLATORS: tool that gets called when the command is not found
 #: ../contrib/command-not-found/pk-command-not-found.c:632
+#: ../contrib/command-not-found/pk-command-not-found-test.c:630
 msgid "PackageKit Command Not Found"
 msgstr "PackageKit কমান্ড পাওয়া যায়নি"
 
 #. TRANSLATORS: the prefix of all the output telling the user why it's not executing
 #: ../contrib/command-not-found/pk-command-not-found.c:658
+#: ../contrib/command-not-found/pk-command-not-found-test.c:658
 msgid "Command not found."
 msgstr "কমান্ড পাওয়া যায়নি।"
 
 #. TRANSLATORS: tell the user what we think the command is
 #: ../contrib/command-not-found/pk-command-not-found.c:665
+#: ../contrib/command-not-found/pk-command-not-found-test.c:665
 msgid "Similar command is:"
 msgstr "অনুরূপ কমান্ড হল:"
 
 #. TRANSLATORS: Ask the user if we should run the similar command
 #: ../contrib/command-not-found/pk-command-not-found.c:674
+#: ../contrib/command-not-found/pk-command-not-found-test.c:674
 msgid "Run similar command:"
 msgstr "অনুরূপ কমান্ড সঞ্চালন করুন:"
 
 #. TRANSLATORS: show the user a list of commands that they could have meant
 #. TRANSLATORS: show the user a list of commands we could run
+#. TRANSLATORS: show the user a list of commands that they could have meant
+#. TRANSLATORS: show the user a list of commands we could run
 #: ../contrib/command-not-found/pk-command-not-found.c:686
 #: ../contrib/command-not-found/pk-command-not-found.c:695
+#: ../contrib/command-not-found/pk-command-not-found-test.c:686
+#: ../contrib/command-not-found/pk-command-not-found-test.c:695
 msgid "Similar commands are:"
 msgstr "অনুরূপ কমান্ড হল:"
 
 #. TRANSLATORS: ask the user to choose a file to run
 #: ../contrib/command-not-found/pk-command-not-found.c:702
+#: ../contrib/command-not-found/pk-command-not-found-test.c:702
 msgid "Please choose a command to run"
 msgstr "অনুগ্রহ করে সঞ্চালনের জন্য কমান্ড নির্বাচন করুন"
 
 #. TRANSLATORS: tell the user what package provides the command
 #: ../contrib/command-not-found/pk-command-not-found.c:721
+#: ../contrib/command-not-found/pk-command-not-found-test.c:721
 msgid "The package providing this file is:"
 msgstr "এই প্যাকেজ উপলব্ধকারী ফাইল হল:"
 
 #. TRANSLATORS: as the user if we want to install a package to provide the command
 #: ../contrib/command-not-found/pk-command-not-found.c:726
+#: ../contrib/command-not-found/pk-command-not-found-test.c:726
 #, c-format
 msgid "Install package '%s' to provide command '%s'?"
 msgstr ""
@@ -1005,17 +1107,20 @@ msgstr ""
 
 #. TRANSLATORS: Show the user a list of packages that provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:747
+#: ../contrib/command-not-found/pk-command-not-found-test.c:747
 msgid "Packages providing this file are:"
 msgstr "এই ফাইল উপলব্ধকারী প্যাকেজগুলি হল:"
 
 #. TRANSLATORS: Show the user a list of packages that they can install to provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:756
+#: ../contrib/command-not-found/pk-command-not-found-test.c:756
 msgid "Suitable packages are:"
 msgstr "প্রযোজ্য প্যাকেজগুলি হল:"
 
 #. get selection
 #. TRANSLATORS: ask the user to choose a file to install
 #: ../contrib/command-not-found/pk-command-not-found.c:764
+#: ../contrib/command-not-found/pk-command-not-found-test.c:764
 msgid "Please choose a package to install"
 msgstr "অনুগ্রহ করে ইনস্টল করার জন্য একটি প্যাকেজ নির্বাচন করুন"
 
@@ -1031,174 +1136,174 @@ 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
+#: ../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 ইনস্টলার"
 
 #. 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: ইনস্টলেশনের জন্য প্যাকেজের নাম নির্ধারণ করুন।"
 
 #. 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 "বিফল।"
 
 #. 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 "%s debuginfo প্যাকেজ পাওয়া যায়নি: %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-টি উৎসস্থল নিষ্ক্রিয় করা হয়েছে।"
@@ -1301,6 +1406,93 @@ msgstr "PackageKit প্যাকেজের তালিকা"
 msgid "PackageKit Service Pack"
 msgstr "PackageKit সার্ভিস প্যাক"
 
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:64
+msgid "Do you want to allow installing of unsigned software?"
+msgstr "স্বাক্ষরবিহীন সফ্টওয়্যারের ইনস্টলেশন অনুমোদন করা হবে কি?"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:68
+msgid "The unsigned software will not be installed."
+msgstr "স্বাক্ষরবিহীন সফ্টওয়্যার ইনস্টল করা হবে না।"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:100
+msgid "Software source signature required"
+msgstr "সফ্টওয়্যার সংগ্রহস্থলের স্বাক্ষর আবশ্যক"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:102
+msgid "Software source name"
+msgstr "সফ্টওয়্যার উৎসের নাম"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:103
+msgid "Key URL"
+msgstr "কি-র URL"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:104
+msgid "Key user"
+msgstr "কি ব্যবহারকারী"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:105
+msgid "Key ID"
+msgstr "কি-র ID"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:106
+msgid "Key fingerprint"
+msgstr "কি-র ফিংগারপ্রিন্ট"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:107
+msgid "Key Timestamp"
+msgstr "কি-র সময়ের মান"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:151
+msgid "End user licence agreement required"
+msgstr "ব্যবহারকারীদের লাইসেন্স সংক্রান্ত চুক্তিপত্র আবশ্যক"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:152
+msgid "EULA ID"
+msgstr "EULA ID"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:155
+msgid "Agreement"
+msgstr "চুক্তিপত্র"
+
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:161
+msgid "Do you accept this agreement?"
+msgstr "এই চুক্তিপত্রের শর্ত অনুযায়ী কি আপনি সম্মত?"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:165
+msgid "The agreement was not accepted."
+msgstr "চুক্তিপত্রের শর্ত গ্রহণ করা হয়নি।"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:194
+msgid "Media change required"
+msgstr "মিডিয়া পরিবর্তন করা আবশ্যক"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:195
+msgid "Media type"
+msgstr "মিডিয়ার ধরন"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:196
+msgid "Media ID"
+msgstr "মিডিয়ার ID"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:197
+msgid "Text"
+msgstr "টেক্সট"
+
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:201
+msgid "Please insert the correct media"
+msgstr "অনুগ্রহ করে সঠিক মিডিয়া ঢুকিয়ে দিন"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:205
+msgid "The correct media was not inserted."
+msgstr "সঠিক মিডিয়া ঢোকানো হয়নি।"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:303
+msgid "The transaction did not proceed."
+msgstr "ট্রানসাকশানে এগিয়ে যায়নি।"
+
 #. SECURITY:
 #. - Normal users do not require admin authentication to accept new
 #. licence agreements.
@@ -1549,24 +1741,34 @@ 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
commit 73fcc5063721597007b5b5167ef36039edaa4ae4
Author: Daniel Nicoletti <dantti85-pk at yahoo.com.br>
Date:   Tue Sep 8 14:37:34 2009 -0300

    pk-qt: Fix simulateInstallPackage call

diff --git a/lib/packagekit-qt/src/client.cpp b/lib/packagekit-qt/src/client.cpp
index 141afde..d24ab02 100644
--- a/lib/packagekit-qt/src/client.cpp
+++ b/lib/packagekit-qt/src/client.cpp
@@ -422,7 +422,7 @@ Transaction* Client::simulateInstallFile(const QString& file)
 
 Transaction* Client::simulateInstallPackages(const QList<Package*>& packages)
 {
-	RUN_TRANSACTION(SimulateInstallFiles(Util::packageListToPids(packages)))
+	RUN_TRANSACTION(SimulateInstallPackages(Util::packageListToPids(packages)))
 }
 
 Transaction* Client::simulateInstallPackage(Package* package)
commit 01404723f4e2e2d1a2f5c20f6712da69f8cfcab5
Merge: 543073d... b646ef2...
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 8 17:41:57 2009 +0100

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

commit b646ef2ad1b4c6dfdf3c89ab1f3b25451ec63a2e
Author: raven <raven at fedoraproject.org>
Date:   Tue Sep 8 16:17:37 2009 +0000

    Sending translation for Polish

diff --git a/po/pl.po b/po/pl.po
index fd3fe24..62a3c9f 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -5,8 +5,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-07 08:27+0000\n"
-"PO-Revision-Date: 2009-09-07 12:09+0200\n"
+"POT-Creation-Date: 2009-09-08 14:35+0000\n"
+"PO-Revision-Date: 2009-09-08 18:17+0200\n"
 "Last-Translator: Piotr DrÄ…g <piotrdrag at gmail.com>\n"
 "Language-Team: Polish <fedora-trans-pl at redhat.com>\n"
 "MIME-Version: 1.0\n"
@@ -16,106 +16,106 @@ msgstr ""
 "|| n%100>=20) ? 1 : 2);\n"
 
 #. TRANSLATORS: this is an atomic transaction
-#: ../client/pk-console.c:238 ../client/pk-console-test.c:147
+#: ../client/pk-console.c:237 ../client/pk-console-test.c:143
 msgid "Transaction"
 msgstr "Transakcja"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:240 ../client/pk-console-test.c:149
+#: ../client/pk-console.c:239 ../client/pk-console-test.c:145
 msgid "System time"
 msgstr "Czas systemowy"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:147
 msgid "Succeeded"
 msgstr "Powodzenie"
 
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:147
 msgid "True"
 msgstr "Prawda"
 
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:147
 msgid "False"
 msgstr "Fałsz"
 
 #. TRANSLATORS: this is the transactions role, e.g. "update-system"
 #. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:244 ../client/pk-console-test.c:153
+#: ../client/pk-console.c:243 ../client/pk-console-test.c:149
 #: ../src/pk-polkit-action-lookup.c:327
 msgid "Role"
 msgstr "Rola"
 
 #. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:249 ../client/pk-console-test.c:158
+#: ../client/pk-console.c:248 ../client/pk-console-test.c:154
 msgid "Duration"
 msgstr "Czas trwania"
 
-#: ../client/pk-console.c:249 ../client/pk-console-test.c:158
+#: ../client/pk-console.c:248 ../client/pk-console-test.c:154
 msgid "(seconds)"
 msgstr "(sekundy)"
 
 #. 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:253 ../client/pk-console-test.c:162
+#: ../client/pk-console.c:252 ../client/pk-console-test.c:158
 #: ../src/pk-polkit-action-lookup.c:341
 msgid "Command line"
 msgstr "Wiersz poleceń"
 
 #. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:255 ../client/pk-console-test.c:164
+#: ../client/pk-console.c:254 ../client/pk-console-test.c:160
 msgid "User ID"
 msgstr "Identyfikator użytkownika"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:262 ../client/pk-console-test.c:171
+#: ../client/pk-console.c:261 ../client/pk-console-test.c:167
 msgid "Username"
 msgstr "Nazwa użytkownika"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:266 ../client/pk-console-test.c:175
+#: ../client/pk-console.c:265 ../client/pk-console-test.c:171
 msgid "Real name"
 msgstr "ImiÄ™ i nazwisko"
 
-#: ../client/pk-console.c:274 ../client/pk-console-test.c:183
+#: ../client/pk-console.c:273 ../client/pk-console-test.c:179
 msgid "Affected packages:"
 msgstr "Dotyczy pakietów:"
 
-#: ../client/pk-console.c:276 ../client/pk-console-test.c:185
+#: ../client/pk-console.c:275 ../client/pk-console-test.c:181
 msgid "Affected packages: None"
 msgstr "Dotyczy pakietów: żadnych"
 
 #. TRANSLATORS: When processing, we might have to remove other dependencies
-#: ../client/pk-console.c:337 ../client/pk-task-text.c:220
+#: ../client/pk-console.c:336 ../lib/packagekit-glib2/pk-task-text.c:220
 msgid "The following packages have to be removed:"
 msgstr "Następujące pakiety muszą zostać usunięte:"
 
 #. TRANSLATORS: When processing, we might have to install other dependencies
-#: ../client/pk-console.c:340 ../client/pk-task-text.c:225
+#: ../client/pk-console.c:339 ../lib/packagekit-glib2/pk-task-text.c:225
 msgid "The following packages have to be installed:"
 msgstr "Następujące pakiety muszą zostać zainstalowane:"
 
 #. TRANSLATORS: When processing, we might have to update other dependencies
-#: ../client/pk-console.c:343 ../client/pk-task-text.c:230
+#: ../client/pk-console.c:342 ../lib/packagekit-glib2/pk-task-text.c:230
 msgid "The following packages have to be updated:"
 msgstr "Następujące pakiety muszą zostać zaktualizowane:"
 
 #. TRANSLATORS: When processing, we might have to reinstall other dependencies
-#: ../client/pk-console.c:346 ../client/pk-task-text.c:235
+#: ../client/pk-console.c:345 ../lib/packagekit-glib2/pk-task-text.c:235
 msgid "The following packages have to be reinstalled:"
 msgstr "Następujące pakiety muszą zostać ponownie zainstalowane:"
 
 #. TRANSLATORS: When processing, we might have to downgrade other dependencies
-#: ../client/pk-console.c:349 ../client/pk-task-text.c:240
+#: ../client/pk-console.c:348 ../lib/packagekit-glib2/pk-task-text.c:240
 msgid "The following packages have to be downgraded:"
 msgstr "Następujące pakiety muszą zostać zainstalowane w starszych wersjach:"
 
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:363 ../client/pk-console-test.c:205
+#: ../client/pk-console.c:362 ../client/pk-console-test.c:201
 msgid "Distribution"
 msgstr "Dystrybucja"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:365 ../client/pk-console-test.c:207
+#: ../client/pk-console.c:364 ../client/pk-console-test.c:203
 msgid "Type"
 msgstr "Typ"
 
@@ -123,45 +123,46 @@ msgstr "Typ"
 #. TRANSLATORS: this is the summary of the group
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:367 ../client/pk-console.c:390
-#: ../client/pk-console-test.c:209 ../client/pk-console-test.c:230
+#: ../client/pk-console.c:366 ../client/pk-console.c:389
+#: ../client/pk-console-test.c:205 ../client/pk-console-test.c:226
 msgid "Summary"
 msgstr "Podsumowanie"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:379 ../client/pk-console-test.c:219
+#: ../client/pk-console.c:378 ../client/pk-console-test.c:215
 msgid "Category"
 msgstr "Kategoria"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:381 ../client/pk-console-test.c:221
+#: ../client/pk-console.c:380 ../client/pk-console-test.c:217
 msgid "ID"
 msgstr "Identyfikator"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:384 ../client/pk-console-test.c:224
+#: ../client/pk-console.c:383 ../client/pk-console-test.c:220
 msgid "Parent"
 msgstr "Nadrzędna"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:387 ../client/pk-console-test.c:227
+#: ../client/pk-console.c:386 ../client/pk-console-test.c:223
 msgid "Name"
 msgstr "Nazwa"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:393 ../client/pk-console-test.c:233
+#: ../client/pk-console.c:392 ../client/pk-console-test.c:229
 msgid "Icon"
 msgstr "Ikona"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:408 ../client/pk-console-test.c:247
+#: ../client/pk-console.c:407 ../client/pk-console-test.c:243
 msgid "Details about the update:"
 msgstr "Szczegóły aktualizacji:"
 
 #. 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:410 ../client/pk-console-test.c:253
-#: ../client/pk-task-text.c:101 ../client/pk-task-text.c:153
+#: ../client/pk-console.c:409 ../client/pk-console-test.c:249
+#: ../lib/packagekit-glib2/pk-task-text.c:101
+#: ../lib/packagekit-glib2/pk-task-text.c:153
 #: ../src/pk-polkit-action-lookup.c:352
 msgid "Package"
 msgid_plural "Packages"
@@ -170,121 +171,121 @@ msgstr[1] "Pakiety"
 msgstr[2] "Pakietów"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:413 ../client/pk-console-test.c:256
+#: ../client/pk-console.c:412 ../client/pk-console-test.c:252
 msgid "Updates"
 msgstr "Aktualizuje"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:417 ../client/pk-console-test.c:260
+#: ../client/pk-console.c:416 ../client/pk-console-test.c:256
 msgid "Obsoletes"
 msgstr "Zastępuje"
 
 #. TRANSLATORS: details about the update, the vendor URLs
-#: ../client/pk-console.c:421 ../client/pk-console-test.c:264
-#: ../client/pk-task-text.c:154
+#: ../client/pk-console.c:420 ../client/pk-console-test.c:260
+#: ../lib/packagekit-glib2/pk-task-text.c:154
 msgid "Vendor"
 msgstr "Producent"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:425 ../client/pk-console-test.c:268
+#: ../client/pk-console.c:424 ../client/pk-console-test.c:264
 msgid "Bugzilla"
 msgstr "Bugzilla"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:429 ../client/pk-console-test.c:272
+#: ../client/pk-console.c:428 ../client/pk-console-test.c:268
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:433 ../client/pk-console-test.c:276
+#: ../client/pk-console.c:432 ../client/pk-console-test.c:272
 msgid "Restart"
 msgstr "Uruchom ponownie"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:437 ../client/pk-console-test.c:280
+#: ../client/pk-console.c:436 ../client/pk-console-test.c:276
 msgid "Update text"
 msgstr "Tekst aktualizacji"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:441 ../client/pk-console-test.c:284
+#: ../client/pk-console.c:440 ../client/pk-console-test.c:280
 msgid "Changes"
 msgstr "Zmiany"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:445 ../client/pk-console-test.c:288
+#: ../client/pk-console.c:444 ../client/pk-console-test.c:284
 msgid "State"
 msgstr "Stan"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:450 ../client/pk-console-test.c:293
+#: ../client/pk-console.c:449 ../client/pk-console-test.c:289
 msgid "Issued"
 msgstr "Wydano"
 
 #. TRANSLATORS: details about the update, date the update was updated
-#: ../client/pk-console.c:455 ../client/pk-console-test.c:298
+#: ../client/pk-console.c:454 ../client/pk-console-test.c:294
 msgid "Updated"
 msgstr "Zaktualizowano"
 
 #. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:475 ../client/pk-console-test.c:316
+#: ../client/pk-console.c:474 ../client/pk-console-test.c:312
 msgid "Enabled"
 msgstr "WÅ‚Ä…czone"
 
 #. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:478 ../client/pk-console-test.c:319
+#: ../client/pk-console.c:477 ../client/pk-console-test.c:315
 msgid "Disabled"
 msgstr "Wyłączone"
 
-#: ../client/pk-console.c:555 ../client/pk-console.c:557
+#: ../client/pk-console.c:554 ../client/pk-console.c:556
 msgid "Percentage"
 msgstr "Procentowo"
 
-#: ../client/pk-console.c:557
+#: ../client/pk-console.c:556
 msgid "Unknown"
 msgstr "Nieznane"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:599 ../client/pk-console-test.c:341
+#: ../client/pk-console.c:598 ../client/pk-console-test.c:337
 msgid "System restart required by:"
 msgstr "Ponowne uruchomienie systemu jest wymagane przez:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:602 ../client/pk-console-test.c:344
+#: ../client/pk-console.c:601 ../client/pk-console-test.c:340
 msgid "Session restart required:"
 msgstr "Wymagane jest ponowne uruchomienie sesji:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:605 ../client/pk-console-test.c:347
+#: ../client/pk-console.c:604 ../client/pk-console-test.c:343
 msgid "System restart (security) required by:"
 msgstr "Ponowne uruchomienie systemu jest wymagane przez:"
 
 #. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:608 ../client/pk-console-test.c:350
+#: ../client/pk-console.c:607 ../client/pk-console-test.c:346
 msgid "Session restart (security) required:"
 msgstr "Wymagane jest ponowne uruchomienie sesji (z powodu bezpieczeństwa):"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:611 ../client/pk-console-test.c:353
+#: ../client/pk-console.c:610 ../client/pk-console-test.c:349
 msgid "Application restart required by:"
 msgstr "Ponowne uruchomienie programu jest wymagane przez:"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:666 ../client/pk-console-test.c:704
+#: ../client/pk-console.c:665 ../client/pk-console-test.c:538
 msgid "Please restart the computer to complete the update."
 msgstr "Proszę uruchomić ponownie komputer, aby zakończyć aktualizację."
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:669 ../client/pk-console-test.c:707
+#: ../client/pk-console.c:668 ../client/pk-console-test.c:541
 msgid "Please logout and login to complete the update."
 msgstr "Proszę wylogować się i zalogować, aby zakończyć aktualizację."
 
 #. TRANSLATORS: a package needs to restart the application
-#: ../client/pk-console.c:672
+#: ../client/pk-console.c:671
 msgid "Please restart the application as it is being used."
 msgstr "Proszę uruchomić program ponownie, ponieważ jest używany."
 
 #. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:675 ../client/pk-console-test.c:710
+#: ../client/pk-console.c:674 ../client/pk-console-test.c:544
 msgid ""
 "Please restart the computer to complete the update as important security "
 "updates have been installed."
@@ -293,7 +294,7 @@ msgstr ""
 "zainstalowano aktualizacje bezpieczeństwa."
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:678 ../client/pk-console-test.c:713
+#: ../client/pk-console.c:677 ../client/pk-console-test.c:547
 msgid ""
 "Please logout and login to complete the update as important security updates "
 "have been installed."
@@ -302,443 +303,444 @@ msgstr ""
 "zainstalowano aktualizacje bezpieczeństwa."
 
 #. TRANSLATORS: The package is already installed on the system
-#: ../client/pk-console.c:810
+#: ../client/pk-console.c:809
 #, c-format
 msgid "The package %s is already installed"
 msgstr "Pakiet %s jest już zainstalowany"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:818
+#: ../client/pk-console.c:817
 #, c-format
 msgid "The package %s could not be installed: %s"
 msgstr "Nie można zainstalować pakietu %s: %s"
 
 #. TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows
-#: ../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
+#: ../client/pk-console.c:843 ../client/pk-console.c:891
+#: ../client/pk-console.c:915 ../client/pk-console.c:963
+#: ../client/pk-console.c:1059 ../client/pk-console.c:1172
+#: ../client/pk-console.c:1233 ../client/pk-tools-common.c:132
+#: ../client/pk-tools-common.c:151 ../client/pk-tools-common.c:159
 #, c-format
 msgid "Internal error: %s"
 msgstr "Wewnętrzny błąd: %s"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
 #. ask the user
-#: ../client/pk-console.c:876 ../client/pk-console.c:948
-#: ../client/pk-console.c:1266 ../client/pk-task-text.c:299
+#: ../client/pk-console.c:875 ../client/pk-console.c:947
+#: ../client/pk-console.c:1265 ../lib/packagekit-glib2/pk-task-text.c:299
 msgid "Proceed with changes?"
 msgstr "Kontynuować wprowadzanie zmian?"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:881 ../client/pk-console.c:953
+#: ../client/pk-console.c:880 ../client/pk-console.c:952
 msgid "The package install was canceled!"
 msgstr "Anulowano instalacjÄ™ pakietu!"
 
 #. TRANSLATORS: There was an error installing the packages. The detailed error follows
-#: ../client/pk-console.c:900 ../client/pk-console.c:1634
+#: ../client/pk-console.c:899 ../client/pk-console.c:1633
 #, c-format
 msgid "This tool could not install the packages: %s"
 msgstr "Te narzędzie nie może zainstalować pakietów: %s"
 
 #. TRANSLATORS: There was an error installing the files. The detailed error follows
-#: ../client/pk-console.c:972
+#: ../client/pk-console.c:971
 #, c-format
 msgid "This tool could not install the files: %s"
 msgstr "Te narzędzie nie może zainstalować plików: %s"
 
 #. TRANSLATORS: The package name was not found in the installed list. The detailed error follows
-#: ../client/pk-console.c:1028
+#: ../client/pk-console.c:1027
 #, c-format
 msgid "This tool could not remove %s: %s"
 msgstr "Te narzędzie nie może usunąć %s: %s"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:1051 ../client/pk-console.c:1089
-#: ../client/pk-console.c:1118
+#: ../client/pk-console.c:1050 ../client/pk-console.c:1088
+#: ../client/pk-console.c:1117
 #, c-format
 msgid "This tool could not remove the packages: %s"
 msgstr "Te narzędzie nie może usunąć pakietów: %s"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:1104
+#: ../client/pk-console.c:1103
 msgid "Proceed with additional packages?"
 msgstr "Kontynuować usuwanie dodatkowych pakietów?"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:1109
+#: ../client/pk-console.c:1108
 msgid "The package removal was canceled!"
 msgstr "Anulowano usunięcie pakietu!"
 
 #. TRANSLATORS: The package name was not found in any software sources
-#: ../client/pk-console.c:1150
+#: ../client/pk-console.c:1149
 #, c-format
 msgid "This tool could not download the package %s as it could not be found"
 msgstr "Te narzędzie nie może pobrać pakietu %s, ponieważ nie można go znaleźć"
 
 #. TRANSLATORS: Could not download the packages for some reason. The detailed error follows
-#: ../client/pk-console.c:1181
+#: ../client/pk-console.c:1180
 #, c-format
 msgid "This tool could not download the packages: %s"
 msgstr "Te narzędzie nie może pobrać pakietów: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1213 ../client/pk-console.c:1225
-#: ../client/pk-console.c:1280
+#: ../client/pk-console.c:1212 ../client/pk-console.c:1224
+#: ../client/pk-console.c:1279
 #, c-format
 msgid "This tool could not update %s: %s"
 msgstr "Te narzędzie nie może zaktualizować %s: %s"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:1271
+#: ../client/pk-console.c:1270
 msgid "The package update was canceled!"
 msgstr "Anulowano aktualizacjÄ™ pakietu!"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1304 ../client/pk-console.c:1312
+#: ../client/pk-console.c:1303 ../client/pk-console.c:1311
 #, c-format
 msgid "This tool could not get the requirements for %s: %s"
 msgstr "Te narzędzie nie może uzyskać wymagań dla %s: %s"
 
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
-#: ../client/pk-console.c:1334 ../client/pk-console.c:1342
+#: ../client/pk-console.c:1333 ../client/pk-console.c:1341
 #, c-format
 msgid "This tool could not get the dependencies for %s: %s"
 msgstr "Te narzędzie nie może uzyskać zależności dla %s: %s"
 
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
-#: ../client/pk-console.c:1364 ../client/pk-console.c:1372
+#: ../client/pk-console.c:1363 ../client/pk-console.c:1371
 #, c-format
 msgid "This tool could not get package details for %s: %s"
 msgstr "Te narzędzie nie może uzyskać szczegółów pakietu %s: %s"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1394
+#: ../client/pk-console.c:1393
 #, c-format
 msgid "This tool could not find the files for %s: %s"
 msgstr "Te narzędzie nie może znaleźć plików dla %s: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1402
+#: ../client/pk-console.c:1401
 #, c-format
 msgid "This tool could not get the file list for %s: %s"
 msgstr "Te narzędzie nie może uzyskać listy plików dla %s: %s"
 
 #. TRANSLATORS: There was an error getting the list of packages. The filename follows
-#: ../client/pk-console.c:1424
+#: ../client/pk-console.c:1423
 #, c-format
 msgid "File already exists: %s"
 msgstr "Plik już istnieje: %s"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1429 ../client/pk-console.c:1485
-#: ../client/pk-console.c:1560
+#: ../client/pk-console.c:1428 ../client/pk-console.c:1484
+#: ../client/pk-console.c:1559
 msgid "Getting package list"
 msgstr "Pobieranie listy pakietów"
 
 #. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
-#: ../client/pk-console.c:1435 ../client/pk-console.c:1491
-#: ../client/pk-console.c:1566
+#: ../client/pk-console.c:1434 ../client/pk-console.c:1490
+#: ../client/pk-console.c:1565
 #, c-format
 msgid "This tool could not get package list: %s"
 msgstr "Te narzędzie nie może pobrać listy pakietów: %s"
 
 #. TRANSLATORS: There was an error saving the list
-#: ../client/pk-console.c:1446
+#: ../client/pk-console.c:1445
 #, c-format
 msgid "Failed to save to disk"
 msgstr "Zapisanie na dysku nie powiodło się"
 
 #. TRANSLATORS: There was an error getting the list. The filename follows
-#: ../client/pk-console.c:1480 ../client/pk-console.c:1555
+#: ../client/pk-console.c:1479 ../client/pk-console.c:1554
 #, c-format
 msgid "File does not exist: %s"
 msgstr "Plik nie istnieje: %s"
 
 #. TRANSLATORS: header to a list of packages newly added
-#: ../client/pk-console.c:1512
+#: ../client/pk-console.c:1511
 msgid "Packages to add"
 msgstr "Pakiety do dodania"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1520
+#: ../client/pk-console.c:1519
 msgid "Packages to remove"
 msgstr "Pakiety do usunięcia"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1588
+#: ../client/pk-console.c:1587
 #, c-format
 msgid "No new packages need to be installed"
 msgstr "Nie trzeba instalować nowych pakietów"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1594
+#: ../client/pk-console.c:1593
 msgid "To install"
 msgstr "Do zainstalowania"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1606
+#: ../client/pk-console.c:1605
 msgid "Searching for package: "
 msgstr "Wyszukiwanie pakietu: "
 
 #. TRANSLATORS: package was not found -- this is the end of a string ended in ...
-#: ../client/pk-console.c:1610
+#: ../client/pk-console.c:1609
 msgid "not found."
 msgstr "nie znaleziono."
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1621
+#: ../client/pk-console.c:1620
 #, c-format
 msgid "No packages can be found to install"
 msgstr "Nie można znaleźć pakietów do zainstalowania"
 
 #. TRANSLATORS: installing new packages from package list
 #. TRANSLATORS: we are now installing the debuginfo packages we found earlier
-#: ../client/pk-console.c:1627
+#: ../client/pk-console.c:1626
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:885
 #, c-format
 msgid "Installing packages"
 msgstr "Instalowanie pakietów"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1663
+#: ../client/pk-console.c:1662
 #, c-format
 msgid "This tool could not find the update details for %s: %s"
 msgstr "Te narzędzie nie może znaleźć szczegółów aktualizacji dla %s: %s"
 
 #. TRANSLATORS: There was an error getting the details about the update for the package. The detailed error follows
-#: ../client/pk-console.c:1671
+#: ../client/pk-console.c:1670
 #, c-format
 msgid "This tool could not get the update details for %s: %s"
 msgstr "Te narzędzie nie może uzyskać szczegółów aktualizacji dla %s: %s"
 
 #. TRANSLATORS: This was an unhandled error, and we don't have _any_ context
-#: ../client/pk-console.c:1702
+#: ../client/pk-console.c:1701
 msgid "Error:"
 msgstr "BÅ‚Ä…d:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1716 ../client/pk-console-test.c:370
+#: ../client/pk-console.c:1715 ../client/pk-console-test.c:366
 msgid "Package description"
 msgstr "Opis pakietu"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:1732 ../client/pk-console-test.c:388
+#: ../client/pk-console.c:1731 ../client/pk-console-test.c:384
 msgid "Message:"
 msgstr "Komunikat:"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1760 ../client/pk-console-test.c:407
+#: ../client/pk-console.c:1759 ../client/pk-console-test.c:403
 msgid "Package files"
 msgstr "Pliki pakietu"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1768 ../client/pk-console-test.c:402
+#: ../client/pk-console.c:1767 ../client/pk-console-test.c:398
 msgid "No files"
 msgstr "Brak plików"
 
 #. TRANSLATORS: This a request for a GPG key signature from the backend, which the client will prompt for later
-#: ../client/pk-console.c:1791
+#: ../client/pk-console.c:1790
 msgid "Repository signature required"
 msgstr "Wymagany jest podpis repozytorium"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
 #. ask the user
-#: ../client/pk-console.c:1801 ../client/pk-task-text.c:113
+#: ../client/pk-console.c:1800 ../lib/packagekit-glib2/pk-task-text.c:113
 msgid "Do you accept this signature?"
 msgstr "Zaakceptować ten podpis?"
 
 #. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1805 ../client/pk-task-text.c:117
+#: ../client/pk-console.c:1804 ../lib/packagekit-glib2/pk-task-text.c:117
 msgid "The signature was not accepted."
 msgstr "Podpis nie został zaakceptowany."
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1839
+#: ../client/pk-console.c:1838
 msgid "End user license agreement required"
 msgstr "Licencja jest wymagana"
 
 #. TRANSLATORS: This a prompt asking the user to agree to the license
-#: ../client/pk-console.c:1846
+#: ../client/pk-console.c:1845
 msgid "Do you agree to this license?"
 msgstr "Zaakceptować tę licencję?"
 
 #. TRANSLATORS: This is where the user declined the license
-#: ../client/pk-console.c:1850
+#: ../client/pk-console.c:1849
 msgid "The license was refused."
 msgstr "Odrzucono licencjÄ™."
 
 #. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1879 ../client/pk-console-test.c:972
+#: ../client/pk-console.c:1878 ../client/pk-console-test.c:816
 msgid "The daemon crashed mid-transaction!"
 msgstr "Demon zawiesił się w połowie transakcji!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1932 ../client/pk-console-test.c:1006
+#: ../client/pk-console.c:1931 ../client/pk-console-test.c:850
 msgid "PackageKit Console Interface"
 msgstr "Interfejs konsoli PackageKit"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1934 ../client/pk-console-test.c:1008
+#: ../client/pk-console.c:1933 ../client/pk-console-test.c:852
 msgid "Subcommands:"
 msgstr "Podpolecenia:"
 
 #. TRANSLATORS: command line argument, if we should show debugging information
 #. TRANSLATORS: if we should show debugging data
-#: ../client/pk-console.c:2027 ../client/pk-console-test.c:1099
-#: ../client/pk-generate-pack.c:187 ../client/pk-monitor.c:128
-#: ../client/pk-monitor-test.c:282
+#: ../client/pk-console.c:2026 ../client/pk-console-test.c:966
+#: ../client/pk-generate-pack.c:185 ../client/pk-generate-pack-test.c:222
+#: ../client/pk-monitor.c:128 ../client/pk-monitor-test.c:282
 #: ../contrib/command-not-found/pk-command-not-found.c:616
+#: ../contrib/command-not-found/pk-command-not-found-test.c:614
 #: ../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 "Wyświetla dodatkowe informacje o debugowaniu"
 
 #. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:2030 ../client/pk-console-test.c:1102
+#: ../client/pk-console.c:2029 ../client/pk-console-test.c:969
 #: ../client/pk-monitor.c:130 ../client/pk-monitor-test.c:284
 msgid "Show the program version and exit"
 msgstr "Wyświetla wersję programu i wyłącza"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:2033 ../client/pk-console-test.c:1105
+#: ../client/pk-console.c:2032 ../client/pk-console-test.c:972
 msgid "Set the filter, e.g. installed"
 msgstr "Ustawia filtr, np. zainstalowane"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:2036 ../client/pk-console-test.c:1108
+#: ../client/pk-console.c:2035 ../client/pk-console-test.c:975
 msgid "Exit without waiting for actions to complete"
 msgstr "Wyłącza bez oczekiwania na zakończenie działań"
 
 #. TRANSLATORS: This is when we could not connect to the system bus, and is fatal
-#: ../client/pk-console.c:2063
+#: ../client/pk-console.c:2062
 msgid "This tool could not connect to system DBUS."
 msgstr "Te narzędzie nie może połączyć się z systemowym D-Bus."
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:2153 ../client/pk-console-test.c:1183
+#: ../client/pk-console.c:2152 ../client/pk-console-test.c:1052
 msgid "The filter specified was invalid"
 msgstr "Podany filtr jest nieprawidłowy"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:2172 ../client/pk-console-test.c:1202
+#: ../client/pk-console.c:2171 ../client/pk-console-test.c:1071
 msgid "A search type is required, e.g. name"
 msgstr "Wymagany jest typ wyszukiwania, np. nazwa"
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:2179 ../client/pk-console.c:2188
-#: ../client/pk-console.c:2197 ../client/pk-console.c:2206
-#: ../client/pk-console-test.c:1209 ../client/pk-console-test.c:1221
-#: ../client/pk-console-test.c:1233 ../client/pk-console-test.c:1245
+#: ../client/pk-console.c:2178 ../client/pk-console.c:2187
+#: ../client/pk-console.c:2196 ../client/pk-console.c:2205
+#: ../client/pk-console-test.c:1078 ../client/pk-console-test.c:1090
+#: ../client/pk-console-test.c:1102 ../client/pk-console-test.c:1114
 msgid "A search term is required"
 msgstr "Wymagany jest wyszukiwany termin"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:2213 ../client/pk-console-test.c:1255
+#: ../client/pk-console.c:2212 ../client/pk-console-test.c:1124
 msgid "Invalid search type"
 msgstr "Nieprawidłowy typ wyszukiwania"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:2219
+#: ../client/pk-console.c:2218
 msgid "A package name or filename to install is required"
 msgstr "Wymagana jest nazwa pakietu lub pliku do zainstalowania"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2228 ../client/pk-console-test.c:1282
+#: ../client/pk-console.c:2227 ../client/pk-console-test.c:1151
 msgid "A type, key_id and package_id are required"
 msgstr "Wymagany jest typ, key_id i package_id"
 
 #. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:2237 ../client/pk-console-test.c:1293
+#: ../client/pk-console.c:2236 ../client/pk-console-test.c:1162
 msgid "A package name to remove is required"
 msgstr "Wymagana jest nazwa pakietu do usunięcia"
 
 #. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:2245 ../client/pk-console-test.c:1302
+#: ../client/pk-console.c:2244 ../client/pk-console-test.c:1171
 msgid "A destination directory and the package names to download are required"
 msgstr "Wymagany jest katalog docelowy i nazwy pakietów do pobrania"
 
 #. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:2252 ../client/pk-console-test.c:1309
+#: ../client/pk-console.c:2251 ../client/pk-console-test.c:1178
 msgid "Directory not found"
 msgstr "Nie znaleziono katalogu"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2260 ../client/pk-console-test.c:1318
+#: ../client/pk-console.c:2259 ../client/pk-console-test.c:1187
 msgid "A licence identifier (eula-id) is required"
 msgstr "Wymagany jest identyfikator licencji (eula-id)"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2270 ../client/pk-console-test.c:1329
+#: ../client/pk-console.c:2269 ../client/pk-console-test.c:1198
 msgid "A transaction identifier (tid) is required"
 msgstr "Wymagany jest identyfikator transakcji (tid)"
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:2287 ../client/pk-console-test.c:1350
+#: ../client/pk-console.c:2286 ../client/pk-console-test.c:1219
 msgid "A package name to resolve is required"
 msgstr "Wymagana jest nazwa pakietu do rozwiÄ…zania"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:2296 ../client/pk-console.c:2305
-#: ../client/pk-console-test.c:1361 ../client/pk-console-test.c:1372
+#: ../client/pk-console.c:2295 ../client/pk-console.c:2304
+#: ../client/pk-console-test.c:1230 ../client/pk-console-test.c:1241
 msgid "A repository name is required"
 msgstr "Wymagana jest nazwa repozytorium"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:2314 ../client/pk-console-test.c:1383
+#: ../client/pk-console.c:2313 ../client/pk-console-test.c:1252
 msgid "A repo name, parameter and value are required"
 msgstr "Wymagana jest nazwa, parametr i wartość repozytorium"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:2328 ../client/pk-console-test.c:1401
+#: ../client/pk-console.c:2327 ../client/pk-console-test.c:1269
 msgid "An action, e.g. 'update-system' is required"
 msgstr "Wymagane jest działanie, np. \"update-system\""
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:2335 ../client/pk-console-test.c:1408
+#: ../client/pk-console.c:2334 ../client/pk-console-test.c:1276
 msgid "A correct role is required"
 msgstr "Wymagana jest bieżąca rola"
 
 #. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:2342 ../client/pk-console-test.c:1415
+#: ../client/pk-console.c:2341 ../client/pk-console-test.c:931
 msgid "Failed to get the time since this action was last completed"
 msgstr ""
 "Uzyskanie czasu od ostatniego zakończenia tego działania nie powiodło się"
 
 #. 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:2352 ../client/pk-console.c:2364
-#: ../client/pk-console.c:2373 ../client/pk-console.c:2391
-#: ../client/pk-console.c:2400 ../client/pk-console-test.c:1425
-#: ../client/pk-console-test.c:1440 ../client/pk-console-test.c:1449
-#: ../client/pk-console-test.c:1469 ../client/pk-console-test.c:1478
-#: ../client/pk-generate-pack.c:243
+#: ../client/pk-console.c:2351 ../client/pk-console.c:2363
+#: ../client/pk-console.c:2372 ../client/pk-console.c:2390
+#: ../client/pk-console.c:2399 ../client/pk-console-test.c:1286
+#: ../client/pk-console-test.c:1301 ../client/pk-console-test.c:1310
+#: ../client/pk-console-test.c:1330 ../client/pk-console-test.c:1339
+#: ../client/pk-generate-pack.c:241 ../client/pk-generate-pack-test.c:285
 msgid "A package name is required"
 msgstr "Wymagana jest nazwa pakietu"
 
 #. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:2382 ../client/pk-console-test.c:1458
+#: ../client/pk-console.c:2381 ../client/pk-console-test.c:1319
 msgid "A package provide string is required"
 msgstr "Wymagany jest łańcuch dostarczania pakietu"
 
 #. TRANSLATORS: The user didn't specify a filename to create as a list
-#: ../client/pk-console.c:2409
+#: ../client/pk-console.c:2408
 msgid "A list file name to create is required"
 msgstr "Wymagana jest lista nazw plików do utworzenia"
 
 #. TRANSLATORS: The user didn't specify a filename to open as a list
-#: ../client/pk-console.c:2419 ../client/pk-console.c:2429
+#: ../client/pk-console.c:2418 ../client/pk-console.c:2428
 msgid "A list file to open is required"
 msgstr "Wymagana jest lista plików do otwarcia"
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:2483 ../client/pk-console-test.c:1538
+#: ../client/pk-console.c:2482 ../client/pk-console-test.c:1399
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "Opcja \"%s\" nie jest obsługiwana"
 
 #. TRANSLATORS: User does not have permission to do this
-#: ../client/pk-console.c:2496
+#: ../client/pk-console.c:2495
 msgid "Incorrect privileges for this operation"
 msgstr "Niepoprawne uprawnienia dla tego działania"
 
@@ -746,34 +748,24 @@ msgstr "Niepoprawne uprawnienia dla tego działania"
 #. /* 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
-#: ../client/pk-console.c:2499 ../client/pk-console-test.c:1550
+#: ../client/pk-console.c:2498 ../client/pk-console-test.c:1411
 msgid "Command failed"
 msgstr "Polecenie nie powiodło się"
 
-#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../client/pk-console-test.c:523 ../client/pk-tools-common.c:131
-msgid "More than one package matches:"
-msgstr "Pasuje więcej niż jeden pakiet:"
-
-#. TRANSLATORS: This finds out which package in the list to use
-#: ../client/pk-console-test.c:532 ../client/pk-tools-common.c:138
-msgid "Please choose the correct package: "
-msgstr "Proszę wybrać poprawny pakiet: "
-
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:734
+#: ../client/pk-console-test.c:568
 #, c-format
 msgid "This tool could not find the available package: %s"
 msgstr "Te narzędzie nie może znaleźć dostępnego pakietu: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:762
+#: ../client/pk-console-test.c:596
 #, c-format
 msgid "This tool could not find the installed package: %s"
 msgstr "Te narzędzie nie może znaleźć zainstalowanego pakietu: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:790 ../client/pk-console-test.c:818
+#: ../client/pk-console-test.c:624 ../client/pk-console-test.c:652
 #, c-format
 msgid "This tool could not find the package: %s"
 msgstr "Te narzędzie nie może znaleźć pakietu: %s"
@@ -782,45 +774,50 @@ msgstr "Te narzędzie nie może znaleźć pakietu: %s"
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console-test.c:846 ../client/pk-console-test.c:872
-#: ../client/pk-console-test.c:898 ../client/pk-console-test.c:924
-#: ../client/pk-console-test.c:950
+#: ../client/pk-console-test.c:680 ../client/pk-console-test.c:708
+#: ../client/pk-console-test.c:736 ../client/pk-console-test.c:764
+#: ../client/pk-console-test.c:792
 #, c-format
 msgid "This tool could not find all the packages: %s"
 msgstr "Te narzędzie nie może znaleźć wszystkich pakietów: %s"
 
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console-test.c:1000
+msgid "Failed to contact PackageKit"
+msgstr "Skontaktowanie się z PackageKit nie powiodło się"
+
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1261
+#: ../client/pk-console-test.c:1130
 msgid "A package name to install is required"
 msgstr "Wymagana jest nazwa pakietu do zainstalowania"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1270
+#: ../client/pk-console-test.c:1139
 msgid "A filename to install is required"
 msgstr "Wymagana jest nazwa pliku do zainstalowania"
 
 #. TRANSLATORS: This is the state of the transaction
-#: ../client/pk-generate-pack.c:103
+#: ../client/pk-generate-pack.c:101
 msgid "Downloading"
 msgstr "Pobieranie"
 
 #. TRANSLATORS: This is when the main packages are being downloaded
-#: ../client/pk-generate-pack.c:123
+#: ../client/pk-generate-pack.c:121
 msgid "Downloading packages"
 msgstr "Pobieranie pakietów"
 
 #. TRANSLATORS: This is when the dependency packages are being downloaded
-#: ../client/pk-generate-pack.c:128
+#: ../client/pk-generate-pack.c:126
 msgid "Downloading dependencies"
 msgstr "Pobieranie zależności"
 
 #. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll exist on the target
-#: ../client/pk-generate-pack.c:190
+#: ../client/pk-generate-pack.c:188 ../client/pk-generate-pack-test.c:225
 msgid "Set the file name of dependencies to be excluded"
 msgstr "Proszę ustawić nazwy plików zależności do wykluczenia"
 
 #. TRANSLATORS: the output location
-#: ../client/pk-generate-pack.c:193
+#: ../client/pk-generate-pack.c:191 ../client/pk-generate-pack-test.c:228
 msgid ""
 "The output file or directory (the current directory is used if ommitted)"
 msgstr ""
@@ -828,38 +825,41 @@ msgstr ""
 "pominięte)"
 
 #. TRANSLATORS: put a list of packages in the pack
-#: ../client/pk-generate-pack.c:196
+#: ../client/pk-generate-pack.c:194 ../client/pk-generate-pack-test.c:231
 msgid "The package to be put into the service pack"
 msgstr "Pakiet do umieszczenia w pakiecie serwisowym"
 
 #. TRANSLATORS: put all pending updates in the pack
-#: ../client/pk-generate-pack.c:199
+#: ../client/pk-generate-pack.c:197 ../client/pk-generate-pack-test.c:234
 msgid "Put all updates available in the service pack"
 msgstr "Wszystkie dostępne aktualizacje w pakiecie serwisowym"
 
 #. TRANSLATORS: This is when the user fails to supply the correct arguments
-#: ../client/pk-generate-pack.c:227
+#: ../client/pk-generate-pack.c:225 ../client/pk-generate-pack-test.c:269
 msgid "Neither --package or --updates option selected."
 msgstr "Nie wybrano żadnej z opcji --package lub --updates."
 
 #. TRANSLATORS: This is when the user fails to supply just one argument
-#: ../client/pk-generate-pack.c:235
+#: ../client/pk-generate-pack.c:233 ../client/pk-generate-pack-test.c:277
 msgid "Both options selected."
 msgstr "Wybrano obie opcje."
 
 #. TRANSLATORS: This is when the user fails to supply the output
-#: ../client/pk-generate-pack.c:251
+#: ../client/pk-generate-pack.c:249 ../client/pk-generate-pack-test.c:293
 msgid "A output directory or file name is required"
 msgstr "Wymagany jest katalog lub nazwa pliku wyjścia"
 
 #. 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:269 ../client/pk-generate-pack.c:275
+#. 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-test.c:321 ../client/pk-generate-pack-test.c:327
 msgid "The package manager cannot perform this type of operation."
 msgstr "Menedżer pakietów nie może wykonać tego typu działania."
 
 #. TRANSLATORS: This is when the distro didn't include libarchive support into PK
-#: ../client/pk-generate-pack.c:282
+#: ../client/pk-generate-pack.c:280 ../client/pk-generate-pack-test.c:334
 msgid ""
 "Service packs cannot be created as PackageKit was not built with libarchive "
 "support."
@@ -868,54 +868,54 @@ msgstr ""
 "obsługi libarchive."
 
 #. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
-#: ../client/pk-generate-pack.c:293
+#: ../client/pk-generate-pack.c:291 ../client/pk-generate-pack-test.c:345
 msgid "If specifying a file, the service pack name must end with"
 msgstr "Jeśli podano plik, nazwa pakietu serwisowego musi kończyć się"
 
 #. TRANSLATORS: This is when file already exists
-#: ../client/pk-generate-pack.c:309
+#: ../client/pk-generate-pack.c:307 ../client/pk-generate-pack-test.c:361
 msgid "A pack with the same name already exists, do you want to overwrite it?"
 msgstr "Pakiet serwisowy o tej samej nazwie już istnieje, zastąpić go?"
 
 #. TRANSLATORS: This is when the pack was not overwritten
-#: ../client/pk-generate-pack.c:312
+#: ../client/pk-generate-pack.c:310 ../client/pk-generate-pack-test.c:364
 msgid "The pack was not overwritten."
 msgstr "Pakiet nie został zastąpiony."
 
 #. TRANSLATORS: This is when the temporary directory cannot be created, the directory name follows
-#: ../client/pk-generate-pack.c:325
+#: ../client/pk-generate-pack.c:323 ../client/pk-generate-pack-test.c:377
 msgid "Failed to create directory:"
 msgstr "Utworzenie katalogu nie powiodło się:"
 
 #. TRANSLATORS: This is when the list of packages from the remote computer cannot be opened
-#: ../client/pk-generate-pack.c:335
+#: ../client/pk-generate-pack.c:333 ../client/pk-generate-pack-test.c:389
 msgid "Failed to open package list."
 msgstr "Otwarcie listy pakietów nie powiodło się."
 
 #. TRANSLATORS: The package name is being matched up to available packages
-#: ../client/pk-generate-pack.c:346
+#: ../client/pk-generate-pack.c:344 ../client/pk-generate-pack-test.c:398
 msgid "Finding package name."
 msgstr "Wyszukiwanie nazwy pakietu."
 
 #. TRANSLATORS: This is when the package cannot be found in any software source. The detailed error follows
-#: ../client/pk-generate-pack.c:350
+#: ../client/pk-generate-pack.c:348 ../client/pk-generate-pack-test.c:402
 #, c-format
 msgid "Failed to find package '%s': %s"
 msgstr "Nie można znaleźć pakietu \"%s\": %s"
 
 #. TRANSLATORS: This is telling the user we are in the process of making the pack
-#: ../client/pk-generate-pack.c:367
+#: ../client/pk-generate-pack.c:365 ../client/pk-generate-pack-test.c:410
 msgid "Creating service pack..."
 msgstr "Tworzenie pakietu serwisowego..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:374
+#: ../client/pk-generate-pack.c:372 ../client/pk-generate-pack-test.c:425
 #, c-format
 msgid "Service pack created '%s'"
 msgstr "Utworzono pakiet serwisowy \"%s\""
 
 #. TRANSLATORS: we failed to make te file
-#: ../client/pk-generate-pack.c:379
+#: ../client/pk-generate-pack.c:377 ../client/pk-generate-pack-test.c:430
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "Utworzenie \"%s\" nie powiodło się: %s"
@@ -937,104 +937,30 @@ msgstr "Uzyskanie listy transakcji nie powiodło się"
 msgid "Failed to get daemon state"
 msgstr "Uzyskanie stanu demona nie powiodło się"
 
-#. ask the user
-#: ../client/pk-task-text.c:64
-msgid "Do you want to allow installing of unsigned software?"
-msgstr "Pozwolić na instalowanie niepodpisanego oprogramowania?"
-
-#: ../client/pk-task-text.c:68
-msgid "The unsigned software will not be installed."
-msgstr "Niepodpisane oprogramowanie nie zostanie zainstalowane."
-
-#: ../client/pk-task-text.c:100
-msgid "Software source signature required"
-msgstr "Wymagany jest podpis źródła oprogramowania"
-
-#: ../client/pk-task-text.c:102
-msgid "Software source name"
-msgstr "Nazwa źródła oprogramowania"
-
-#: ../client/pk-task-text.c:103
-msgid "Key URL"
-msgstr "Adres URL klucza"
-
-#: ../client/pk-task-text.c:104
-msgid "Key user"
-msgstr "Użytkownika klucza"
-
-#: ../client/pk-task-text.c:105
-msgid "Key ID"
-msgstr "Identyfikator klucza"
-
-#: ../client/pk-task-text.c:106
-msgid "Key fingerprint"
-msgstr "Odcisk klucza"
-
-#: ../client/pk-task-text.c:107
-msgid "Key Timestamp"
-msgstr "Czas klucza"
-
-#: ../client/pk-task-text.c:151
-msgid "End user licence agreement required"
-msgstr "Wymagana jest umowa licencyjna użytkownika końcowego"
-
-#: ../client/pk-task-text.c:152
-msgid "EULA ID"
-msgstr "Identyfikator licencji"
-
-#: ../client/pk-task-text.c:155
-msgid "Agreement"
-msgstr "Umowa"
-
-#. ask the user
-#: ../client/pk-task-text.c:161
-msgid "Do you accept this agreement?"
-msgstr "Zaakceptować tę umowę?"
-
-#: ../client/pk-task-text.c:165
-msgid "The agreement was not accepted."
-msgstr "Umowa nie została zaakceptowana."
-
-#: ../client/pk-task-text.c:194
-msgid "Media change required"
-msgstr "Wymagana jest zmiana nośnika"
-
-#: ../client/pk-task-text.c:195
-msgid "Media type"
-msgstr "Typ nośnika"
-
-#: ../client/pk-task-text.c:196
-msgid "Media ID"
-msgstr "Identyfikator nośnika"
-
-#: ../client/pk-task-text.c:197
-msgid "Text"
-msgstr "Tekst"
-
-#. ask the user
-#: ../client/pk-task-text.c:201
-msgid "Please insert the correct media"
-msgstr "Proszę włożyć poprawny nośnik"
-
-#: ../client/pk-task-text.c:205
-msgid "The correct media was not inserted."
-msgstr "Nie włożono poprawnego nośnika."
-
-#: ../client/pk-task-text.c:303
-msgid "The transaction did not proceed."
-msgstr "Transakcja nie będzie kontynuowana."
-
-#: ../client/pk-text.c:50
+#: ../client/pk-tools-common.c:51
+#: ../lib/packagekit-glib2/pk-console-shared.c:53
 #, c-format
 msgid "Please enter a number from 1 to %i: "
 msgstr "Proszę podać numer od 1 do %i: "
 
 #. TRANSLATORS: The package was not found in any software sources
-#: ../client/pk-tools-common.c:119
+#: ../client/pk-tools-common.c:188
 #, c-format
 msgid "The package could not be found"
 msgstr "Nie można znaleźć pakietu"
 
+#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
+#: ../client/pk-tools-common.c:200
+#: ../lib/packagekit-glib2/pk-console-shared.c:153
+msgid "More than one package matches:"
+msgstr "Pasuje więcej niż jeden pakiet:"
+
+#. TRANSLATORS: This finds out which package in the list to use
+#: ../client/pk-tools-common.c:207
+#: ../lib/packagekit-glib2/pk-console-shared.c:162
+msgid "Please choose the correct package: "
+msgstr "Proszę wybrać poprawny pakiet: "
+
 #. TRANSLATORS: when we are getting data from the daemon
 #: ../contrib/browser-plugin/pk-plugin-install.c:466
 msgid "Getting package information..."
@@ -1091,90 +1017,110 @@ msgstr "Instalowanie..."
 
 #. TRANSLATORS: downloading repo data so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:349
+#: ../contrib/command-not-found/pk-command-not-found-test.c:358
 msgid "Downloading details about the software sources."
 msgstr "Pobieranie szczegółów o źródłach oprogramowania."
 
 #. TRANSLATORS: downloading file lists so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:353
+#: ../contrib/command-not-found/pk-command-not-found-test.c:362
 msgid "Downloading filelists (this may take some time to complete)."
 msgstr "Pobieranie list plików (może to zająć trochę czasu)."
 
 #. TRANSLATORS: waiting for native lock
 #: ../contrib/command-not-found/pk-command-not-found.c:357
+#: ../contrib/command-not-found/pk-command-not-found-test.c:366
 msgid "Waiting for package manager lock."
 msgstr "Oczekiwanie na blokadę menedżera pakietów."
 
 #. TRANSLATORS: loading package cache so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:361
+#: ../contrib/command-not-found/pk-command-not-found-test.c:370
 msgid "Loading list of packages."
 msgstr "Wczytywanie listy pakietów."
 
 #. TRANSLATORS: we failed to find the package, this shouldn't happen
 #: ../contrib/command-not-found/pk-command-not-found.c:420
+#: ../contrib/command-not-found/pk-command-not-found-test.c:444
 msgid "Failed to search for file"
 msgstr "Znalezienie pliku nie powiodło się"
 
 #. TRANSLATORS: we failed to launch the executable, the error follows
 #: ../contrib/command-not-found/pk-command-not-found.c:557
+#: ../contrib/command-not-found/pk-command-not-found-test.c:570
 msgid "Failed to launch:"
 msgstr "Uruchomienie nie powiodło się:"
 
 #. TRANSLATORS: tool that gets called when the command is not found
 #: ../contrib/command-not-found/pk-command-not-found.c:632
+#: ../contrib/command-not-found/pk-command-not-found-test.c:630
 msgid "PackageKit Command Not Found"
 msgstr "Nie znaleziono polecenia PackageKit"
 
 #. TRANSLATORS: the prefix of all the output telling the user why it's not executing
 #: ../contrib/command-not-found/pk-command-not-found.c:658
+#: ../contrib/command-not-found/pk-command-not-found-test.c:658
 msgid "Command not found."
 msgstr "Nie znaleziono polecenia."
 
 #. TRANSLATORS: tell the user what we think the command is
 #: ../contrib/command-not-found/pk-command-not-found.c:665
+#: ../contrib/command-not-found/pk-command-not-found-test.c:665
 msgid "Similar command is:"
 msgstr "Podobne polecenie:"
 
 #. TRANSLATORS: Ask the user if we should run the similar command
 #: ../contrib/command-not-found/pk-command-not-found.c:674
+#: ../contrib/command-not-found/pk-command-not-found-test.c:674
 msgid "Run similar command:"
 msgstr "Wykonaj podobne polecenie:"
 
 #. TRANSLATORS: show the user a list of commands that they could have meant
 #. TRANSLATORS: show the user a list of commands we could run
+#. TRANSLATORS: show the user a list of commands that they could have meant
+#. TRANSLATORS: show the user a list of commands we could run
 #: ../contrib/command-not-found/pk-command-not-found.c:686
 #: ../contrib/command-not-found/pk-command-not-found.c:695
+#: ../contrib/command-not-found/pk-command-not-found-test.c:686
+#: ../contrib/command-not-found/pk-command-not-found-test.c:695
 msgid "Similar commands are:"
 msgstr "Podobne polecenia:"
 
 #. TRANSLATORS: ask the user to choose a file to run
 #: ../contrib/command-not-found/pk-command-not-found.c:702
+#: ../contrib/command-not-found/pk-command-not-found-test.c:702
 msgid "Please choose a command to run"
 msgstr "Proszę wybrać polecenie do wykonania"
 
 #. TRANSLATORS: tell the user what package provides the command
 #: ../contrib/command-not-found/pk-command-not-found.c:721
+#: ../contrib/command-not-found/pk-command-not-found-test.c:721
 msgid "The package providing this file is:"
 msgstr "Pakiet dostarczajÄ…cy ten plik:"
 
 #. TRANSLATORS: as the user if we want to install a package to provide the command
 #: ../contrib/command-not-found/pk-command-not-found.c:726
+#: ../contrib/command-not-found/pk-command-not-found-test.c:726
 #, c-format
 msgid "Install package '%s' to provide command '%s'?"
 msgstr "Zainstalować pakiet \"%s\", aby dostarczyć polecenie \"%s\"?"
 
 #. TRANSLATORS: Show the user a list of packages that provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:747
+#: ../contrib/command-not-found/pk-command-not-found-test.c:747
 msgid "Packages providing this file are:"
 msgstr "Pakiety dostarczajÄ…ce ten plik:"
 
 #. TRANSLATORS: Show the user a list of packages that they can install to provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:756
+#: ../contrib/command-not-found/pk-command-not-found-test.c:756
 msgid "Suitable packages are:"
 msgstr "Odpowiednie pakiety:"
 
 #. get selection
 #. TRANSLATORS: ask the user to choose a file to install
 #: ../contrib/command-not-found/pk-command-not-found.c:764
+#: ../contrib/command-not-found/pk-command-not-found-test.c:764
 msgid "Please choose a package to install"
 msgstr "Proszę wybrać pakiet do zainstalowania"
 
@@ -1461,6 +1407,93 @@ msgstr "Lista pakietów PackageKit"
 msgid "PackageKit Service Pack"
 msgstr "Pakiet serwisowy PackageKit"
 
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:64
+msgid "Do you want to allow installing of unsigned software?"
+msgstr "Pozwolić na instalowanie niepodpisanego oprogramowania?"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:68
+msgid "The unsigned software will not be installed."
+msgstr "Niepodpisane oprogramowanie nie zostanie zainstalowane."
+
+#: ../lib/packagekit-glib2/pk-task-text.c:100
+msgid "Software source signature required"
+msgstr "Wymagany jest podpis źródła oprogramowania"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:102
+msgid "Software source name"
+msgstr "Nazwa źródła oprogramowania"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:103
+msgid "Key URL"
+msgstr "Adres URL klucza"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:104
+msgid "Key user"
+msgstr "Użytkownika klucza"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:105
+msgid "Key ID"
+msgstr "Identyfikator klucza"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:106
+msgid "Key fingerprint"
+msgstr "Odcisk klucza"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:107
+msgid "Key Timestamp"
+msgstr "Czas klucza"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:151
+msgid "End user licence agreement required"
+msgstr "Wymagana jest umowa licencyjna użytkownika końcowego"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:152
+msgid "EULA ID"
+msgstr "Identyfikator licencji"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:155
+msgid "Agreement"
+msgstr "Umowa"
+
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:161
+msgid "Do you accept this agreement?"
+msgstr "Zaakceptować tę umowę?"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:165
+msgid "The agreement was not accepted."
+msgstr "Umowa nie została zaakceptowana."
+
+#: ../lib/packagekit-glib2/pk-task-text.c:194
+msgid "Media change required"
+msgstr "Wymagana jest zmiana nośnika"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:195
+msgid "Media type"
+msgstr "Typ nośnika"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:196
+msgid "Media ID"
+msgstr "Identyfikator nośnika"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:197
+msgid "Text"
+msgstr "Tekst"
+
+#. ask the user
+#: ../lib/packagekit-glib2/pk-task-text.c:201
+msgid "Please insert the correct media"
+msgstr "Proszę włożyć poprawny nośnik"
+
+#: ../lib/packagekit-glib2/pk-task-text.c:205
+msgid "The correct media was not inserted."
+msgstr "Nie włożono poprawnego nośnika."
+
+#: ../lib/packagekit-glib2/pk-task-text.c:303
+msgid "The transaction did not proceed."
+msgstr "Transakcja nie będzie kontynuowana."
+
 #. SECURITY:
 #. - Normal users do not require admin authentication to accept new
 #. licence agreements.
commit 543073d713ee9d84e10a6c2f043b5940a3d44cd0
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 8 16:04:19 2009 +0100

    glib2: port the PkDesktop class from glib1

diff --git a/client/Makefile.am b/client/Makefile.am
index fb8b30c..44261d4 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -79,6 +79,7 @@ pkcon_test_SOURCES =					\
 pkcon_test_LDADD =					\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
+	$(SQLITE_LIBS)					\
 	$(PK_GLIB2_LIBS)				\
 	$(NULL)
 
@@ -93,6 +94,7 @@ pkmon_test_SOURCES =					\
 pkmon_test_LDADD =					\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
+	$(SQLITE_LIBS)					\
 	$(PK_GLIB2_LIBS)				\
 	$(NULL)
 
@@ -108,6 +110,7 @@ pkgenpack_test_LDADD = 					\
 	$(ARCHIVE_LIBS)					\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
+	$(SQLITE_LIBS)					\
 	$(PK_GLIB2_LIBS)				\
 	$(NULL)
 
diff --git a/lib/packagekit-glib2/Makefile.am b/lib/packagekit-glib2/Makefile.am
index f02ae9f..0d1a9d4 100644
--- a/lib/packagekit-glib2/Makefile.am
+++ b/lib/packagekit-glib2/Makefile.am
@@ -35,13 +35,16 @@ libpackagekit_glib2_include_HEADERS =				\
 	pk-client.h						\
 	pk-common.h						\
 	pk-control.h						\
+	pk-desktop.h						\
+	pk-enum.h						\
+	pk-item.h						\
 	pk-package.h						\
 	pk-package-id.h						\
 	pk-package-ids.h					\
 	pk-package-sack.h					\
 	pk-progress.h						\
-	pk-service-pack.h					\
 	pk-results.h						\
+	pk-service-pack.h					\
 	pk-task.h						\
 	$(NULL)
 
@@ -59,6 +62,8 @@ libpackagekit_glib2_la_SOURCES =				\
 	pk-common.h						\
 	pk-control.c						\
 	pk-control.h						\
+	pk-desktop.c						\
+	pk-desktop.h						\
 	pk-enum.c						\
 	pk-enum.h						\
 	pk-marshal.c						\
@@ -89,6 +94,7 @@ libpackagekit_glib2_la_LIBADD =					\
 	$(GIO_LIBS)						\
 	$(DBUS_LIBS)						\
 	$(ARCHIVE_LIBS)						\
+	$(SQLITE_LIBS)						\
 	$(NULL)
 
 libpackagekit_glib2_la_LDFLAGS =				\
diff --git a/lib/packagekit-glib2/packagekit.h b/lib/packagekit-glib2/packagekit.h
index e3572fd..8ce5d71 100644
--- a/lib/packagekit-glib2/packagekit.h
+++ b/lib/packagekit-glib2/packagekit.h
@@ -27,6 +27,7 @@
 #include <packagekit-glib2/pk-client.h>
 #include <packagekit-glib2/pk-common.h>
 #include <packagekit-glib2/pk-control.h>
+#include <packagekit-glib2/pk-desktop.h>
 #include <packagekit-glib2/pk-enum.h>
 #include <packagekit-glib2/pk-item.h>
 #include <packagekit-glib2/pk-package-id.h>
diff --git a/lib/packagekit-glib2/pk-desktop.c b/lib/packagekit-glib2/pk-desktop.c
new file mode 100644
index 0000000..efc14a8
--- /dev/null
+++ b/lib/packagekit-glib2/pk-desktop.c
@@ -0,0 +1,406 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 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.
+ */
+
+/**
+ * SECTION:pk-desktop
+ * @short_description: Client singleton access to desktop metadata about a package
+ *
+ * Desktop metadata such as icon name and localised summary may be stored here
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <sqlite3.h>
+#include <packagekit-glib2/pk-desktop.h>
+
+#include "egg-debug.h"
+#include "egg-string.h"
+
+static void     pk_desktop_finalize	(GObject        *object);
+
+#define PK_DESKTOP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PK_TYPE_DESKTOP, PkDesktopPrivate))
+
+/* Database format is:
+ *   CREATE TABLE cache ( filename TEXT, package TEXT, show INTEGER, md5 TEXT );
+ */
+
+/**
+ * PkDesktopPrivate:
+ *
+ * Private #PkDesktop data
+ **/
+struct _PkDesktopPrivate
+{
+	sqlite3			*db;
+};
+
+G_DEFINE_TYPE (PkDesktop, pk_desktop, G_TYPE_OBJECT)
+static gpointer pk_desktop_object = NULL;
+
+/**
+ * pk_desktop_sqlite_filename_cb:
+ **/
+static gint
+pk_desktop_sqlite_filename_cb (void *data, gint argc, gchar **argv, gchar **col_name)
+{
+	GPtrArray *array = (GPtrArray *) data;
+	gint i;
+
+	/* add the filename data to the array */
+	for (i=0; i<argc; i++) {
+		if (g_strcmp0 (col_name[i], "filename") == 0 && argv[i] != NULL)
+			g_ptr_array_add (array, g_strdup (argv[i]));
+	}
+
+	return 0;
+}
+
+/**
+ * pk_desktop_sqlite_package_cb:
+ **/
+static gint
+pk_desktop_sqlite_package_cb (void *data, gint argc, gchar **argv, gchar **col_name)
+{
+	gchar **package = (gchar **) data;
+	gint i;
+
+	/* add the filename data to the array */
+	for (i=0; i<argc; i++) {
+		if (g_strcmp0 (col_name[i], "package") == 0 && argv[i] != NULL)
+			*package = g_strdup (argv[i]);
+	}
+
+	return 0;
+}
+
+/**
+ * pk_desktop_get_files_for_package:
+ * @desktop: a valid #PkDesktop instance
+ * @package: the package name, e.g. "gnome-power-manager"
+ * @error: a %GError to put the error code and message in, or %NULL
+ *
+ * Return all desktop files owned by a package, regardless if they are shown
+ * in the main menu or not.
+ *
+ * Return value: array of results
+ **/
+GPtrArray *
+pk_desktop_get_files_for_package (PkDesktop *desktop, const gchar *package, GError **error)
+{
+	gchar *statement;
+	gchar *error_msg = NULL;
+	gint rc;
+	GPtrArray *array = NULL;
+
+	g_return_val_if_fail (PK_IS_DESKTOP (desktop), NULL);
+	g_return_val_if_fail (package != NULL, NULL);
+
+	/* no database */
+	if (desktop->priv->db == NULL) {
+		if (error != NULL)
+			*error = g_error_new (1, 0, "database is not open");
+		goto out;
+	}
+
+	/* get packages */
+	array = g_ptr_array_new ();
+	statement = g_strdup_printf ("SELECT filename FROM cache WHERE package = '%s'", package);
+	rc = sqlite3_exec (desktop->priv->db, statement, pk_desktop_sqlite_filename_cb, array, &error_msg);
+	g_free (statement);
+	if (rc != SQLITE_OK) {
+		egg_warning ("SQL error: %s\n", error_msg);
+		sqlite3_free (error_msg);
+	}
+out:
+	return array;
+}
+
+/**
+ * pk_desktop_get_shown_for_package:
+ * @desktop: a valid #PkDesktop instance
+ * @package: the package name, e.g. "gnome-power-manager"
+ * @error: a %GError to put the error code and message in, or %NULL
+ *
+ * Return all desktop files owned by a package that would be shown in a menu,
+ * i.e are an application
+ *
+ * Return value: array of results
+ **/
+GPtrArray *
+pk_desktop_get_shown_for_package (PkDesktop *desktop, const gchar *package, GError **error)
+{
+	gchar *statement;
+	gchar *error_msg = NULL;
+	gint rc;
+	GPtrArray *array = NULL;
+
+	g_return_val_if_fail (PK_IS_DESKTOP (desktop), NULL);
+	g_return_val_if_fail (package != NULL, NULL);
+
+	/* no database */
+	if (desktop->priv->db == NULL) {
+		if (error != NULL)
+			*error = g_error_new (1, 0, "database is not open");
+		goto out;
+	}
+
+	/* get packages */
+	array = g_ptr_array_new ();
+	statement = g_strdup_printf ("SELECT filename FROM cache WHERE package = '%s' AND show = 1", package);
+	rc = sqlite3_exec (desktop->priv->db, statement, pk_desktop_sqlite_filename_cb, array, &error_msg);
+	g_free (statement);
+	if (rc != SQLITE_OK) {
+		egg_warning ("SQL error: %s\n", error_msg);
+		sqlite3_free (error_msg);
+	}
+out:
+	return array;
+}
+
+/**
+ * pk_desktop_get_package_for_file:
+ * @desktop: a valid #PkDesktop instance
+ * @filename: a fully qualified filename
+ * @error: a %GError to put the error code and message in, or %NULL
+ *
+ * Returns the package name that owns the desktop file. Fast.
+ *
+ * Return value: package name, or %NULL
+ **/
+gchar *
+pk_desktop_get_package_for_file (PkDesktop *desktop, const gchar *filename, GError **error)
+{
+	gchar *statement;
+	gchar *error_msg = NULL;
+	gint rc;
+	gchar *package = NULL;
+
+	g_return_val_if_fail (PK_IS_DESKTOP (desktop), NULL);
+	g_return_val_if_fail (filename != NULL, NULL);
+
+	/* no database */
+	if (desktop->priv->db == NULL) {
+		if (error != NULL)
+			*error = g_error_new (1, 0, "database is not open");
+		goto out;
+	}
+
+	/* get packages */
+	statement = g_strdup_printf ("SELECT package FROM cache WHERE filename = '%s' LIMIT 1", filename);
+	rc = sqlite3_exec (desktop->priv->db, statement, pk_desktop_sqlite_package_cb, &package, &error_msg);
+	g_free (statement);
+	if (rc != SQLITE_OK) {
+		egg_warning ("SQL error: %s\n", error_msg);
+		sqlite3_free (error_msg);
+	}
+
+	/* no result */
+	if (package == NULL) {
+		if (error != NULL)
+			*error = g_error_new (1, 0, "could not find package for %s", filename);
+		goto out;
+	}
+out:
+	return package;
+}
+
+/**
+ * pk_desktop_open_database:
+ * @desktop: a valid #PkDesktop instance
+ *
+ * Return value: %TRUE if opened correctly
+ **/
+gboolean
+pk_desktop_open_database (PkDesktop *desktop, GError **error)
+{
+	gboolean ret;
+	gint rc;
+
+	g_return_val_if_fail (PK_IS_DESKTOP (desktop), FALSE);
+
+	/* already opened */
+	if (desktop->priv->db != NULL)
+		return TRUE;
+
+	/* if the database file was not installed (or was nuked) recreate it */
+	ret = g_file_test (PK_DESKTOP_DEFAULT_DATABASE, G_FILE_TEST_EXISTS);
+	if (!ret) {
+		if (error != NULL)
+			*error = g_error_new (1, 0, "database %s is not present", PK_DESKTOP_DEFAULT_DATABASE);
+		return FALSE;
+	}
+
+	egg_debug ("trying to open database '%s'", PK_DESKTOP_DEFAULT_DATABASE);
+	rc = sqlite3_open (PK_DESKTOP_DEFAULT_DATABASE, &desktop->priv->db);
+	if (rc != 0) {
+		egg_warning ("Can't open database: %s\n", sqlite3_errmsg (desktop->priv->db));
+		if (error != NULL)
+			*error = g_error_new (1, 0, "can't open database: %s", sqlite3_errmsg (desktop->priv->db));
+		sqlite3_close (desktop->priv->db);
+		desktop->priv->db = NULL;
+		return FALSE;
+	}
+
+	/* we don't need to keep syncing */
+	sqlite3_exec (desktop->priv->db, "PRAGMA synchronous=OFF", NULL, NULL, NULL);
+
+	return TRUE;
+}
+
+/**
+ * pk_desktop_class_init:
+ **/
+static void
+pk_desktop_class_init (PkDesktopClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	object_class->finalize = pk_desktop_finalize;
+	g_type_class_add_private (klass, sizeof (PkDesktopPrivate));
+}
+
+/**
+ * pk_desktop_init:
+ **/
+static void
+pk_desktop_init (PkDesktop *desktop)
+{
+	desktop->priv = PK_DESKTOP_GET_PRIVATE (desktop);
+}
+
+/**
+ * pk_desktop_finalize:
+ **/
+static void
+pk_desktop_finalize (GObject *object)
+{
+	PkDesktop *desktop;
+	g_return_if_fail (object != NULL);
+	g_return_if_fail (PK_IS_DESKTOP (object));
+	desktop = PK_DESKTOP (object);
+	g_return_if_fail (desktop->priv != NULL);
+
+	sqlite3_close (desktop->priv->db);
+
+	G_OBJECT_CLASS (pk_desktop_parent_class)->finalize (object);
+}
+
+/**
+ * pk_desktop_new:
+ **/
+PkDesktop *
+pk_desktop_new (void)
+{
+	if (pk_desktop_object != NULL) {
+		g_object_ref (pk_desktop_object);
+	} else {
+		pk_desktop_object = g_object_new (PK_TYPE_DESKTOP, NULL);
+		g_object_add_weak_pointer (pk_desktop_object, &pk_desktop_object);
+	}
+	return PK_DESKTOP (pk_desktop_object);
+}
+
+/***************************************************************************
+ ***                          MAKE CHECK TESTS                           ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+pk_desktop_test (gpointer user_data)
+{
+	EggTest *test = (EggTest *) user_data;
+	PkDesktop *desktop;
+	gboolean ret;
+	gchar *package;
+	GPtrArray *array;
+	GError *error = NULL;
+
+	if (!egg_test_start (test, "PkDesktop"))
+		return;
+
+	/************************************************************/
+	egg_test_title (test, "get desktop");
+	desktop = pk_desktop_new ();
+	egg_test_assert (test, desktop != NULL);
+
+	/************************************************************/
+	egg_test_title (test, "get package when not valid");
+	package = pk_desktop_get_package_for_file (desktop, "/usr/share/applications/gpk-update-viewer.desktop", NULL);
+	egg_test_assert (test, package == NULL);
+
+	/* file does not exist */
+	ret = g_file_test (PK_DESKTOP_DEFAULT_DATABASE, G_FILE_TEST_EXISTS);
+	if (!ret) {
+		egg_warning ("skipping checks as database does not exist");
+		goto out;
+	}
+
+	/************************************************************/
+	egg_test_title (test, "open database");
+	ret = pk_desktop_open_database (desktop, &error);
+	if (ret)
+		egg_test_success (test, "%ims", egg_test_elapsed (test));
+	else
+		egg_test_failed (test, "failed to open: %s", error->message);
+
+	/************************************************************/
+	egg_test_title (test, "get package");
+	package = pk_desktop_get_package_for_file (desktop, "/usr/share/applications/gpk-update-viewer.desktop", NULL);
+
+	/* dummy, not yum */
+	if (g_strcmp0 (package, "vips-doc") == 0) {
+		egg_test_success (test, "created db with dummy, skipping remaining tests");
+		goto out;
+	}
+
+	if (g_strcmp0 (package, "gnome-packagekit") == 0)
+		egg_test_success (test, NULL);
+	else
+		egg_test_failed (test, "package was: %s", package);
+	g_free (package);
+
+	/************************************************************/
+	egg_test_title (test, "get files");
+	array = pk_desktop_get_files_for_package (desktop, "gnome-packagekit", NULL);
+	if (array->len >= 5)
+		egg_test_success (test, NULL);
+	else
+		egg_test_failed (test, "length=%i", array->len);
+	g_ptr_array_foreach (array, (GFunc) g_free, NULL);
+	g_ptr_array_free (array, TRUE);
+
+	/************************************************************/
+	egg_test_title (test, "get shown files");
+	array = pk_desktop_get_shown_for_package (desktop, "f-spot", NULL);
+	if (array->len == 1)
+		egg_test_success (test, NULL);
+	else
+		egg_test_failed (test, "length=%i", array->len);
+	g_ptr_array_foreach (array, (GFunc) g_free, NULL);
+	g_ptr_array_free (array, TRUE);
+out:
+	g_object_unref (desktop);
+
+	egg_test_end (test);
+}
+#endif
+
diff --git a/lib/packagekit-glib2/pk-desktop.h b/lib/packagekit-glib2/pk-desktop.h
new file mode 100644
index 0000000..2892b31
--- /dev/null
+++ b/lib/packagekit-glib2/pk-desktop.h
@@ -0,0 +1,92 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 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_DESKTOP_H
+#define __PK_DESKTOP_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define PK_TYPE_DESKTOP		(pk_desktop_get_type ())
+#define PK_DESKTOP(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), PK_TYPE_DESKTOP, PkDesktop))
+#define PK_DESKTOP_CLASS(k)	(G_TYPE_CHECK_CLASS_CAST((k), PK_TYPE_DESKTOP, PkDesktopClass))
+#define PK_IS_DESKTOP(o)	(G_TYPE_CHECK_INSTANCE_TYPE ((o), PK_TYPE_DESKTOP))
+#define PK_IS_DESKTOP_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), PK_TYPE_DESKTOP))
+#define PK_DESKTOP_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_DESKTOP, PkDesktopClass))
+
+/**
+ * PK_DESKTOP_DEFAULT_DATABASE:
+ *
+ * The default location for the database
+ */
+#define PK_DESKTOP_DEFAULT_DATABASE		LOCALSTATEDIR "/lib/PackageKit/desktop-files.db"
+
+/**
+ * PK_DESKTOP_DEFAULT_APPLICATION_DIR:
+ *
+ * The default location for the desktop files
+ */
+#ifndef __FreeBSD__
+#define PK_DESKTOP_DEFAULT_APPLICATION_DIR	"/usr/share/applications"
+#else
+#define PK_DESKTOP_DEFAULT_APPLICATION_DIR	"/usr/local/share/applications"
+#endif
+
+typedef struct _PkDesktopPrivate	PkDesktopPrivate;
+typedef struct _PkDesktop		PkDesktop;
+typedef struct _PkDesktopClass		PkDesktopClass;
+
+struct _PkDesktop
+{
+	GObject			 parent;
+	PkDesktopPrivate	*priv;
+};
+
+struct _PkDesktopClass
+{
+	GObjectClass	parent_class;
+};
+
+GType		 pk_desktop_get_type			(void);
+PkDesktop	*pk_desktop_new				(void);
+void		 pk_desktop_test			(gpointer	 user_data);
+
+gboolean	 pk_desktop_open_database		(PkDesktop	*desktop,
+							 GError		**error);
+GPtrArray	*pk_desktop_get_files_for_package	(PkDesktop	*desktop,
+							 const gchar	*package,
+							 GError		**error);
+GPtrArray	*pk_desktop_get_shown_for_package	(PkDesktop	*desktop,
+							 const gchar	*package,
+							 GError		**error);
+gchar		*pk_desktop_get_package_for_file	(PkDesktop	*desktop,
+							 const gchar	*filename,
+							 GError		**error);
+
+G_END_DECLS
+
+#endif /* __PK_DESKTOP_H */
+
diff --git a/lib/packagekit-glib2/pk-self-test.c b/lib/packagekit-glib2/pk-self-test.c
index f75f7b0..6d452dc 100644
--- a/lib/packagekit-glib2/pk-self-test.c
+++ b/lib/packagekit-glib2/pk-self-test.c
@@ -29,6 +29,7 @@
 #include "pk-client.h"
 #include "pk-common.h"
 #include "pk-control.h"
+#include "pk-desktop.h"
 #include "pk-enum.h"
 #include "pk-package.h"
 #include "pk-package-id.h"
@@ -53,6 +54,7 @@ main (int argc, char **argv)
 	egg_string_test (test);
 	pk_common_test (test);
 	pk_enum_test (test);
+	pk_desktop_test (test);
 	pk_bitfield_test (test);
 	pk_package_id_test (test);
 	pk_package_ids_test (test);
commit 687ca91d491f67d955faa49c973f3615bb83155d
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 8 16:06:58 2009 +0100

    Convert all the daemon to use the glib2 code, not the glib1 code

diff --git a/src/pk-backend.c b/src/pk-backend.c
index 075770b..cc9b3d3 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -891,7 +891,8 @@ pk_backend_package (PkBackend *backend, PkInfoEnum info, const gchar *package_id
 	}
 
 	/* is it the same? */
-	ret = (obj->info_enum == backend->priv->last_package->info_enum &&
+	ret = (backend->priv->last_package != NULL &&
+	       obj->info_enum == backend->priv->last_package->info_enum &&
 	       g_strcmp0 (obj->package_id, backend->priv->last_package->package_id) == 0);
 	if (ret) {
 		egg_debug ("skipping duplicate %s", package_id);
@@ -903,7 +904,8 @@ pk_backend_package (PkBackend *backend, PkInfoEnum info, const gchar *package_id
 	pk_backend_package_emulate_finished_for_package (backend, obj);
 
 	/* update the 'last' package */
-	pk_item_package_unref (backend->priv->last_package);
+	if (backend->priv->last_package != NULL)
+		pk_item_package_unref (backend->priv->last_package);
 	backend->priv->last_package = pk_item_package_ref (obj);
 
 	/* have we already set an error? */
@@ -995,7 +997,7 @@ pk_backend_update_detail (PkBackend *backend, const gchar *package_id,
 	ret = TRUE;
 
 out:
-	pk_update_detail_obj_free (detail);
+	pk_item_update_detail_unref (detail);
 	g_free (update_text_safe);
 	if (issued != NULL)
 		g_date_free (issued);
@@ -1186,7 +1188,7 @@ pk_backend_details (PkBackend *backend, const gchar *package_id,
 	ret = TRUE;
 
 out:
-	pk_details_obj_free (details);
+	pk_item_details_unref (details);
 	g_free (description_safe);
 	return ret;
 }
@@ -2079,7 +2081,8 @@ pk_backend_reset (PkBackend *backend)
 		backend->priv->signal_error_timeout = 0;
 	}
 
-	pk_item_package_unref (backend->priv->last_package);
+	if (backend->priv->last_package != NULL)
+		pk_item_package_unref (backend->priv->last_package);
 	backend->priv->set_error = FALSE;
 	backend->priv->set_signature = FALSE;
 	backend->priv->set_eula = FALSE;
@@ -2219,9 +2222,9 @@ pk_backend_test_func_immediate_false (PkBackend *backend)
  * pk_backend_test_package_cb:
  **/
 static void
-pk_backend_test_package_cb (PkBackend *backend, const PkItemPackage *obj, EggTest *test)
+pk_backend_test_package_cb (PkBackend *backend, PkItemPackage *obj, EggTest *test)
 {
-	egg_debug ("package:%s", obj->id->name);
+	egg_debug ("package:%s", obj->package_id);
 	number_packages++;
 }
 
diff --git a/src/pk-cache.c b/src/pk-cache.c
index 1594ab8..5c24fe5 100644
--- a/src/pk-cache.c
+++ b/src/pk-cache.c
@@ -81,8 +81,7 @@ pk_cache_set_updates (PkCache *cache, GPtrArray *list)
 	pk_cache_invalidate (cache);
 
 	egg_debug ("reffing updates cache");
-	cache->priv->updates_cache = g_object_ref (list);
-	g_object_add_weak_pointer (G_OBJECT (cache->priv->updates_cache), (gpointer) &cache->priv->updates_cache);
+	cache->priv->updates_cache = g_ptr_array_ref (list);
 	return TRUE;
 }
 
@@ -96,7 +95,7 @@ pk_cache_invalidate (PkCache *cache)
 
 	egg_debug ("unreffing updates cache");
 	if (cache->priv->updates_cache != NULL) {
-		g_object_unref (cache->priv->updates_cache);
+		g_ptr_array_unref (cache->priv->updates_cache);
 		cache->priv->updates_cache = NULL;
 	}
 	return TRUE;
@@ -113,7 +112,7 @@ pk_cache_finalize (GObject *object)
 	cache = PK_CACHE (object);
 
 	if (cache->priv->updates_cache != NULL)
-		g_object_unref (cache->priv->updates_cache);
+		g_ptr_array_unref (cache->priv->updates_cache);
 
 	G_OBJECT_CLASS (pk_cache_parent_class)->finalize (object);
 }
diff --git a/src/pk-transaction-extra.c b/src/pk-transaction-extra.c
index 6739c40..3675d15 100644
--- a/src/pk-transaction-extra.c
+++ b/src/pk-transaction-extra.c
@@ -47,7 +47,7 @@ struct PkTransactionExtraPrivate
 	sqlite3			*db;
 	PkBackend		*backend;
 	GMainLoop		*loop;
-	PkObjList		*running_exec_list;
+	GPtrArray		*running_exec_list;
 	GPtrArray		*list;
 	PkLsof			*lsof;
 	guint			 finished_id;
@@ -81,9 +81,9 @@ pk_transaction_extra_finished_cb (PkBackend *backend, PkExitEnum exit_enum, PkTr
  * pk_transaction_extra_package_cb:
  **/
 static void
-pk_transaction_extra_package_cb (PkBackend *backend, const PkItemPackage *obj, PkTransactionExtra *extra)
+pk_transaction_extra_package_cb (PkBackend *backend, PkItemPackage *item, PkTransactionExtra *extra)
 {
-	pk_obj_list_add (PK_OBJ_LIST(extra->priv->list), obj);
+	g_ptr_array_add (extra->priv->list, pk_item_package_ref (item));
 }
 
 /**
@@ -126,7 +126,8 @@ pk_transaction_extra_get_installed_package_for_file (PkTransactionExtra *extra,
 	PkStore *store;
 
 	/* use PK to find the correct package */
-	pk_obj_list_clear (PK_OBJ_LIST(extra->priv->list));
+	if (extra->priv->list->len > 0)
+		g_ptr_array_remove_range (extra->priv->list, 0, extra->priv->list->len);
 	pk_backend_reset (extra->priv->backend);
 	store = pk_backend_get_store (extra->priv->backend);
 	pk_store_set_uint (store, "filters", pk_bitfield_value (PK_FILTER_ENUM_INSTALLED));
@@ -138,7 +139,7 @@ pk_transaction_extra_get_installed_package_for_file (PkTransactionExtra *extra,
 
 	/* check that we only matched one package */
 	if (extra->priv->list->len != 1) {
-		egg_warning ("not correct size, %i", size);
+		egg_warning ("not correct size, %i", extra->priv->list->len);
 		goto out;
 	}
 
@@ -153,22 +154,6 @@ out:
 }
 
 /**
- * pk_transaction_extra_string_list_new:
- **/
-static PkObjList *
-pk_transaction_extra_string_list_new ()
-{
-	PkObjList *list;
-	list = pk_obj_list_new ();
-	pk_obj_list_set_compare (list, (PkObjListCompareFunc) g_strcmp0);
-	pk_obj_list_set_copy (list, (PkObjListCopyFunc) g_strdup);
-	pk_obj_list_set_free (list, (PkObjListFreeFunc) g_free);
-	pk_obj_list_set_to_string (list, (PkObjListToStringFunc) g_strdup);
-	pk_obj_list_set_from_string (list, (PkObjListFromStringFunc) g_strdup);
-	return list;
-}
-
-/**
  * pk_transaction_extra_get_filename_md5:
  **/
 static gchar *
@@ -280,6 +265,7 @@ pk_transaction_extra_sqlite_add_filename (PkTransactionExtra *extra, const gchar
 	gchar *package = NULL;
 	gint rc = -1;
 	const PkItemPackage *obj;
+	gchar **parts = NULL;
 
 	/* if we've got it, use old data */
 	if (md5_opt != NULL)
@@ -295,8 +281,10 @@ pk_transaction_extra_sqlite_add_filename (PkTransactionExtra *extra, const gchar
 	}
 
 	/* add */
-	rc = pk_transaction_extra_sqlite_add_filename_details (extra, filename, obj->id->name, md5);
+	parts = pk_package_id_split (obj->package_id);
+	rc = pk_transaction_extra_sqlite_add_filename_details (extra, filename, parts[0], md5);
 out:
+	g_strfreev (parts);
 	g_free (md5);
 	g_free (package);
 	return rc;
@@ -438,12 +426,38 @@ out:
 }
 
 /**
+ * pk_transaction_extra_package_list_to_string:
+ **/
+static gchar *
+pk_transaction_extra_package_list_to_string (GPtrArray *array)
+{
+	guint i;
+	const PkItemPackage *item;
+	GString *string;
+
+	string = g_string_new ("");
+	for (i=0; i<array->len; i++) {
+		item = g_ptr_array_index (array, i);
+		g_string_append_printf (string, "%s\t%s\t%s\n",
+					pk_info_enum_to_text (item->info_enum),
+					item->package_id, item->summary);
+	}
+
+	/* remove trailing newline */
+	if (string->len != 0)
+		g_string_set_size (string, string->len-1);
+	return g_string_free (string, FALSE);
+}
+
+/**
  * pk_transaction_extra_update_package_list:
  **/
 gboolean
 pk_transaction_extra_update_package_list (PkTransactionExtra *extra)
 {
 	gboolean ret;
+	gchar *data = NULL;
+	GError *error = NULL;
 
 	g_return_val_if_fail (PK_IS_POST_TRANS (extra), FALSE);
 
@@ -455,7 +469,8 @@ pk_transaction_extra_update_package_list (PkTransactionExtra *extra)
 	egg_debug ("updating package lists");
 
 	/* clear old list */
-	pk_obj_list_clear (PK_OBJ_LIST(extra->priv->list));
+	if (extra->priv->list->len > 0)
+		g_ptr_array_remove_range (extra->priv->list, 0, extra->priv->list->len);
 
 	/* update UI */
 	pk_transaction_extra_set_status_changed (extra, PK_STATUS_ENUM_GENERATE_PACKAGE_LIST);
@@ -473,14 +488,18 @@ pk_transaction_extra_update_package_list (PkTransactionExtra *extra)
 	pk_transaction_extra_set_progress_changed (extra, 90);
 
 	/* convert to a file */
-	ret = pk_obj_list_to_file (PK_OBJ_LIST(extra->priv->list), PK_SYSTEM_PACKAGE_LIST_FILENAME);
-	if (!ret)
-		egg_warning ("failed to save to file");
+	data = pk_transaction_extra_package_list_to_string (extra->priv->list);
+	ret = g_file_set_contents (PK_SYSTEM_PACKAGE_LIST_FILENAME, data, -1, &error);
+	if (!ret) {
+		egg_warning ("failed to save to file: %s", error->message);
+		g_error_free (error);
+	}
 
 	/* update UI */
 	pk_transaction_extra_set_progress_changed (extra, 100);
 	pk_transaction_extra_set_status_changed (extra, PK_STATUS_ENUM_FINISHED);
 
+	g_free (data);
 	return ret;
 }
 
@@ -513,10 +532,12 @@ static void
 pk_transaction_extra_update_files_check_running_cb (PkBackend *backend, const gchar *package_id,
 					     const gchar *filelist, PkTransactionExtra *extra)
 {
-	guint i;
+	guint i, j;
 	guint len;
 	gboolean ret;
 	gchar **files;
+	const gchar *tmp;
+	GPtrArray *array;
 
 	files = g_strsplit (filelist, ";", 0);
 
@@ -529,7 +550,15 @@ pk_transaction_extra_update_files_check_running_cb (PkBackend *backend, const gc
 			continue;
 
 		/* running? */
-		ret = pk_obj_list_exists (PK_OBJ_LIST(extra->priv->running_exec_list), files[i]);
+		ret = FALSE;
+		array = extra->priv->running_exec_list;
+		for (j=0; j<array->len; j++) {
+			tmp = g_ptr_array_index (array, j);
+			if (g_strcmp0 (tmp, files[i]) == 0) {
+				ret = TRUE;
+				break;
+			}
+		}
 		if (!ret)
 			continue;
 
@@ -588,7 +617,8 @@ pk_transaction_extra_update_process_list (PkTransactionExtra *extra)
 	uid = getuid ();
 	dir = g_dir_open ("/proc", 0, NULL);
 	name = g_dir_read_name (dir);
-	pk_obj_list_clear (PK_OBJ_LIST(extra->priv->running_exec_list));
+	if (extra->priv->running_exec_list->len > 0)
+		g_ptr_array_remove_range (extra->priv->running_exec_list, 0, extra->priv->running_exec_list->len);
 	while (name != NULL) {
 		contents = NULL;
 		exec = NULL;
@@ -630,7 +660,7 @@ pk_transaction_extra_update_process_list (PkTransactionExtra *extra)
 		if (offset != NULL)
 			*(offset) = '\0';
 		egg_debug ("uid=%i, pid=%i, exec=%s", uid, pid, exec);
-		pk_obj_list_add (PK_OBJ_LIST(extra->priv->running_exec_list), exec);
+		g_ptr_array_add (extra->priv->running_exec_list, g_strdup (exec));
 out:
 		g_free (exec);
 		g_free (uid_file);
@@ -853,7 +883,6 @@ pk_transaction_extra_check_library_restart (PkTransactionExtra *extra)
 	gchar *filename;
 	gchar *cmdline;
 	gchar *cmdline_full;
-	gchar *package_id;
 	GPtrArray *files_session;
 	GPtrArray *files_system;
 	const PkItemPackage *obj;
@@ -916,10 +945,7 @@ pk_transaction_extra_check_library_restart (PkTransactionExtra *extra)
 			egg_warning ("failed to find package for %s", filename);
 			continue;
 		}
-
-		package_id = pk_package_id_to_string (obj->id);
-		pk_transaction_extra_set_require_restart (extra, PK_RESTART_ENUM_SECURITY_SESSION, package_id);
-		g_free (package_id);
+		pk_transaction_extra_set_require_restart (extra, PK_RESTART_ENUM_SECURITY_SESSION, obj->package_id);
 	}
 
 	/* process all system restarts */
@@ -931,10 +957,7 @@ pk_transaction_extra_check_library_restart (PkTransactionExtra *extra)
 			egg_warning ("failed to find package for %s", filename);
 			continue;
 		}
-
-		package_id = pk_package_id_to_string (obj->id);
-		pk_transaction_extra_set_require_restart (extra, PK_RESTART_ENUM_SECURITY_SYSTEM, package_id);
-		g_free (package_id);
+		pk_transaction_extra_set_require_restart (extra, PK_RESTART_ENUM_SECURITY_SYSTEM, obj->package_id);
 	}
 
 out:
@@ -1065,8 +1088,8 @@ pk_transaction_extra_finalize (GObject *object)
 
 	g_object_unref (extra->priv->backend);
 	g_object_unref (extra->priv->lsof);
-	g_object_unref (extra->priv->list);
-	g_object_unref (extra->priv->running_exec_list);
+	g_ptr_array_unref (extra->priv->list);
+	g_ptr_array_unref (extra->priv->running_exec_list);
 
 	G_OBJECT_CLASS (pk_transaction_extra_parent_class)->finalize (object);
 }
@@ -1113,9 +1136,9 @@ pk_transaction_extra_init (PkTransactionExtra *extra)
 	gint rc;
 
 	extra->priv = PK_POST_TRANS_GET_PRIVATE (extra);
-	extra->priv->running_exec_list = pk_transaction_extra_string_list_new ();
+	extra->priv->running_exec_list = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
 	extra->priv->loop = g_main_loop_new (NULL, FALSE);
-	extra->priv->list = g_ptr_array_new_with_free_funcxxx ();
+	extra->priv->list = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_item_package_unref);
 	extra->priv->backend = pk_backend_new ();
 	extra->priv->lsof = pk_lsof_new ();
 	extra->priv->db = NULL;
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index 55526ef..56bd2da 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -473,16 +473,13 @@ static void
 pk_transaction_details_cb (PkBackend *backend, PkItemDetails *obj, PkTransaction *transaction)
 {
 	const gchar *group_text;
-	gchar *package_id;
 
 	g_return_if_fail (PK_IS_TRANSACTION (transaction));
 	g_return_if_fail (transaction->priv->tid != NULL);
 
 	group_text = pk_group_enum_to_text (obj->group_enum);
-	package_id = pk_package_id_to_string (obj->id);
-	g_signal_emit (transaction, signals [PK_TRANSACTION_DETAILS], 0, package_id,
+	g_signal_emit (transaction, signals [PK_TRANSACTION_DETAILS], 0, obj->package_id,
 		       obj->license, group_text, obj->description, obj->url, obj->size);
-	g_free (package_id);
 }
 
 /**
@@ -567,6 +564,30 @@ pk_transaction_distro_upgrade_cb (PkBackend *backend, PkDistroUpgradeEnum type,
 }
 
 /**
+ * pk_transaction_package_list_to_string:
+ **/
+static gchar *
+pk_transaction_package_list_to_string (GPtrArray *array)
+{
+	guint i;
+	const PkItemPackage *item;
+	GString *string;
+
+	string = g_string_new ("");
+	for (i=0; i<array->len; i++) {
+		item = g_ptr_array_index (array, i);
+		g_string_append_printf (string, "%s\t%s\t%s\n",
+					pk_info_enum_to_text (item->info_enum),
+					item->package_id, item->summary);
+	}
+
+	/* remove trailing newline */
+	if (string->len != 0)
+		g_string_set_size (string, string->len-1);
+	return g_string_free (string, FALSE);
+}
+
+/**
  * pk_transaction_finished_cb:
  **/
 static void
@@ -576,11 +597,12 @@ pk_transaction_finished_cb (PkBackend *backend, PkExitEnum exit_enum, PkTransact
 	guint time_ms;
 	gchar *packages;
 	gchar **package_ids;
-	guint i, length;
+	guint i;
 	GPtrArray *list;
 	GPtrArray *package_list;
 	const PkItemPackage *obj;
 	gchar *package_id;
+	gchar **split;
 
 	g_return_if_fail (PK_IS_TRANSACTION (transaction));
 	g_return_if_fail (transaction->priv->tid != NULL);
@@ -619,18 +641,20 @@ pk_transaction_finished_cb (PkBackend *backend, PkExitEnum exit_enum, PkTransact
 			package_list = transaction->priv->package_list;
 			for (i=0; i<package_list->len; i++) {
 				obj = g_ptr_array_index (package_list, i);
-				if (obj->info == PK_INFO_ENUM_UPDATING) {
+				if (obj->info_enum == PK_INFO_ENUM_UPDATING) {
 					/* we convert the package_id data to be 'installed' as this means
 					 * we can use the local package database for GetFiles rather than
 					 * downloading new remote metadata */
-					package_id = pk_package_id_build (obj->id->name, obj->id->version, obj->id->arch, "installed");
+					split = pk_package_id_split (obj->package_id);
+					package_id = pk_package_id_build (split[0], split[1], split[2], "installed");
+					g_strfreev (split);
 					g_ptr_array_add (list, package_id);
 				}
 			}
 
 			/* process file lists on these packages */
 			if (list->len > 0) {
-				package_ids = pk_package_ids_from_array (list);
+				package_ids = pk_ptr_array_to_strv (list);
 				pk_transaction_extra_check_running_process (transaction->priv->transaction_extra, package_ids);
 				g_strfreev (package_ids);
 			}
@@ -652,17 +676,20 @@ pk_transaction_finished_cb (PkBackend *backend, PkExitEnum exit_enum, PkTransact
 			package_list = transaction->priv->package_list;
 			for (i=0; i<package_list->len; i++) {
 				obj = g_ptr_array_index (package_list, i);
-				if (obj->info == PK_INFO_ENUM_INSTALLING || obj->info == PK_INFO_ENUM_UPDATING) {
+				if (obj->info_enum == PK_INFO_ENUM_INSTALLING ||
+				    obj->info_enum == PK_INFO_ENUM_UPDATING) {
 					/* we convert the package_id data to be 'installed' */
-					package_id = pk_package_id_build (obj->id->name, obj->id->version, obj->id->arch, "installed");
+					split = pk_package_id_split (obj->package_id);
+					package_id = pk_package_id_build (split[0], split[1], split[2], "installed");
+					g_strfreev (split);
 					g_ptr_array_add (list, package_id);
 				}
 			}
 
-			egg_debug ("processing %i packags for desktop files", PK_OBJ_LIST(list)->len);
+			egg_debug ("processing %i packags for desktop files", list->len);
 			/* process file lists on these packages */
 			if (list->len > 0) {
-				package_ids = pk_package_ids_from_array (list);
+				package_ids = pk_ptr_array_to_strv (list);
 				pk_transaction_extra_check_desktop_files (transaction->priv->transaction_extra, package_ids);
 				g_strfreev (package_ids);
 			}
@@ -736,7 +763,8 @@ pk_transaction_finished_cb (PkBackend *backend, PkExitEnum exit_enum, PkTransact
 	    transaction->priv->role == PK_ROLE_ENUM_UPDATE_PACKAGES ||
 	    transaction->priv->role == PK_ROLE_ENUM_INSTALL_PACKAGES ||
 	    transaction->priv->role == PK_ROLE_ENUM_REMOVE_PACKAGES) {
-		packages = pk_obj_list_to_string (PK_OBJ_LIST(transaction->priv->package_list));
+		GPtrArray *array;
+		packages = pk_transaction_package_list_to_string (transaction->priv->package_list);
 
 		/* save to database */
 		if (!egg_strzero (packages))
@@ -744,17 +772,15 @@ pk_transaction_finished_cb (PkBackend *backend, PkExitEnum exit_enum, PkTransact
 		g_free (packages);
 
 		/* report to syslog */
-		length = PK_OBJ_LIST(transaction->priv->package_list)->len;
-		for (i=0; i<length; i++) {
-			obj = g_ptr_array_index (transaction->priv->package_list, i);
-			if (obj->info == PK_INFO_ENUM_REMOVING ||
-			    obj->info == PK_INFO_ENUM_INSTALLING ||
-			    obj->info == PK_INFO_ENUM_UPDATING) {
-				packages = pk_package_id_to_string (obj->id);
+		array = transaction->priv->package_list;
+		for (i=0; i<array->len; i++) {
+			obj = g_ptr_array_index (array, i);
+			if (obj->info_enum == PK_INFO_ENUM_REMOVING ||
+			    obj->info_enum == PK_INFO_ENUM_INSTALLING ||
+			    obj->info_enum == PK_INFO_ENUM_UPDATING) {
 				pk_syslog_add (transaction->priv->syslog, PK_SYSLOG_TYPE_INFO, "in %s for %s package %s was %s for uid %i",
 					       transaction->priv->tid, pk_role_enum_to_text (transaction->priv->role),
-					       packages, pk_info_enum_to_text (obj->info), transaction->priv->uid);
-				g_free (packages);
+					       obj->package_id, pk_info_enum_to_text (obj->info_enum), transaction->priv->uid);
 			}
 		}
 	}
@@ -821,7 +847,7 @@ pk_transaction_message_cb (PkBackend *backend, PkMessageEnum message, const gcha
  * pk_transaction_package_cb:
  **/
 static void
-pk_transaction_package_cb (PkBackend *backend, const PkItemPackage *obj, PkTransaction *transaction)
+pk_transaction_package_cb (PkBackend *backend, PkItemPackage *obj, PkTransaction *transaction)
 {
 	const gchar *info_text;
 	const gchar *role_text;
@@ -842,7 +868,7 @@ pk_transaction_package_cb (PkBackend *backend, const PkItemPackage *obj, PkTrans
 	if (transaction->priv->role == PK_ROLE_ENUM_UPDATE_SYSTEM ||
 	    transaction->priv->role == PK_ROLE_ENUM_INSTALL_PACKAGES ||
 	    transaction->priv->role == PK_ROLE_ENUM_UPDATE_PACKAGES) {
-		if (obj->info == PK_INFO_ENUM_INSTALLED) {
+		if (obj->info_enum == PK_INFO_ENUM_INSTALLED) {
 			pk_backend_message (transaction->priv->backend, PK_MESSAGE_ENUM_BACKEND_ERROR,
 					    "%s emitted 'installed' rather than 'installing' "
 					    "- you need to do the package *before* you do the action", role_text);
@@ -852,7 +878,7 @@ pk_transaction_package_cb (PkBackend *backend, const PkItemPackage *obj, PkTrans
 
 	/* check we are respecting the filters */
 	if (pk_bitfield_contain (transaction->priv->cached_filters, PK_FILTER_ENUM_NOT_INSTALLED)) {
-		if (obj->info == PK_INFO_ENUM_INSTALLED) {
+		if (obj->info_enum == PK_INFO_ENUM_INSTALLED) {
 			pk_backend_message (transaction->priv->backend, PK_MESSAGE_ENUM_BACKEND_ERROR,
 					    "%s emitted package that was installed when "
 					    "the ~installed filter is in place", role_text);
@@ -860,7 +886,7 @@ pk_transaction_package_cb (PkBackend *backend, const PkItemPackage *obj, PkTrans
 		}
 	}
 	if (pk_bitfield_contain (transaction->priv->cached_filters, PK_FILTER_ENUM_INSTALLED)) {
-		if (obj->info == PK_INFO_ENUM_AVAILABLE) {
+		if (obj->info_enum == PK_INFO_ENUM_AVAILABLE) {
 			pk_backend_message (transaction->priv->backend, PK_MESSAGE_ENUM_BACKEND_ERROR,
 					    "%s emitted package that was ~installed when "
 					    "the installed filter is in place", role_text);
@@ -869,15 +895,15 @@ pk_transaction_package_cb (PkBackend *backend, const PkItemPackage *obj, PkTrans
 	}
 
 	/* add to package cache even if we already got a result */
-	if (obj->info != PK_INFO_ENUM_FINISHED)
-		pk_obj_list_add (PK_OBJ_LIST(transaction->priv->package_list), obj);
+	if (obj->info_enum != PK_INFO_ENUM_FINISHED)
+		g_ptr_array_add (transaction->priv->package_list, pk_item_package_ref (obj));
 
 	/* emit */
 	g_free (transaction->priv->last_package_id);
-	transaction->priv->last_package_id = pk_package_id_to_string (obj->id);
-	info_text = pk_info_enum_to_text (obj->info);
+	transaction->priv->last_package_id = g_strdup (obj->package_id);
+	info_text = pk_info_enum_to_text (obj->info_enum);
 	g_signal_emit (transaction, signals [PK_TRANSACTION_PACKAGE], 0, info_text,
-		       transaction->priv->last_package_id, obj->summary);
+		       obj->package_id, obj->summary);
 }
 
 /**
@@ -1065,27 +1091,24 @@ pk_transaction_update_detail_cb (PkBackend *backend, const PkItemUpdateDetail *d
 {
 	const gchar *restart_text;
 	const gchar *state_text;
-	gchar *package_id;
 	gchar *issued;
 	gchar *updated;
 
 	g_return_if_fail (PK_IS_TRANSACTION (transaction));
 	g_return_if_fail (transaction->priv->tid != NULL);
 
-	restart_text = pk_restart_enum_to_text (detail->restart);
-	package_id = pk_package_id_to_string (detail->id);
-	state_text = pk_update_state_enum_to_text (detail->state);
+	restart_text = pk_restart_enum_to_text (detail->restart_enum);
+	state_text = pk_update_state_enum_to_text (detail->state_enum);
 	issued = pk_iso8601_from_date (detail->issued);
 	updated = pk_iso8601_from_date (detail->updated);
 
 	g_signal_emit (transaction, signals [PK_TRANSACTION_UPDATE_DETAIL], 0,
-		       package_id, detail->updates, detail->obsoletes, detail->vendor_url,
+		       detail->package_id, detail->updates, detail->obsoletes, detail->vendor_url,
 		       detail->bugzilla_url, detail->cve_url, restart_text, detail->update_text,
 		       detail->changelog, state_text, issued, updated);
 
 	g_free (issued);
 	g_free (updated);
-	g_free (package_id);
 }
 
 /**
@@ -1101,12 +1124,9 @@ pk_transaction_pre_transaction_checks (PkTransaction *transaction, gchar **packa
 	const PkItemPackage *obj;
 	guint i;
 	guint j;
-	guint length;
+	guint length = 0;
 	gboolean ret = FALSE;
-	gchar *package_id;
 	gchar **package_ids_security = NULL;
-	GPtrArray *list = NULL;
-	const gchar *package_id_tmp;
 
 	/* only do this for update actions */
 	if (transaction->priv->role != PK_ROLE_ENUM_UPDATE_SYSTEM &&
@@ -1131,31 +1151,37 @@ pk_transaction_pre_transaction_checks (PkTransaction *transaction, gchar **packa
 	}
 
 	/* find security update packages */
-	list = g_ptr_array_new ();
 	for (i=0; i<updates->len; i++) {
 		obj = g_ptr_array_index (updates, i);
-		if (obj->info == PK_INFO_ENUM_SECURITY) {
-			package_id = pk_package_id_to_string (obj->id);
-			egg_debug ("security update: %s", package_id);
-			g_ptr_array_add (list, package_id);
+		if (obj->info_enum == PK_INFO_ENUM_SECURITY) {
+			egg_debug ("security update: %s", obj->package_id);
+			length++;
 		}
 	}
 
 	/* nothing to scan for */
-	if (list->len == 0) {
+	if (length == 0) {
 		egg_debug ("no security updates");
 		goto out;
 	}
 
+	/* create list of security packages */
+	package_ids_security = g_new (gchar *, length+1);
+	for (i=0; i<updates->len; i++) {
+		obj = g_ptr_array_index (updates, i);
+		if (obj->info_enum == PK_INFO_ENUM_SECURITY)
+			package_ids_security[i] = g_strdup (obj->package_id);
+	}
+
+
 	/* is a security update we are installing */
 	if (transaction->priv->role == PK_ROLE_ENUM_INSTALL_PACKAGES) {
 		ret = FALSE;
 
 		/* do any of the packages we are updating match */
-		for (i=0; i < list->len; i++) {
-			package_id_tmp = g_ptr_array_index (list, i);
+		for (i=0; package_ids_security[i] != NULL; i++) {
 			for (j=0; package_ids[j] != NULL; j++) {
-				if (g_strcmp0 (package_id_tmp, package_ids[j]) == 0) {
+				if (g_strcmp0 (package_ids_security[i], package_ids[j]) == 0) {
 					ret = TRUE;
 					break;
 				}
@@ -1170,14 +1196,9 @@ pk_transaction_pre_transaction_checks (PkTransaction *transaction, gchar **packa
 	}
 
 	/* find files in security updates */
-	package_ids_security = pk_package_ids_from_array (list);
 	ret = pk_transaction_extra_check_library_restart_pre (transaction->priv->transaction_extra, package_ids_security);
 out:
 	g_strfreev (package_ids_security);
-	if (list != NULL) {
-		g_ptr_array_foreach (list, (GFunc) g_free, NULL);
-		g_ptr_array_free (list, TRUE);
-	}
 	return ret;
 }
 
@@ -3000,7 +3021,6 @@ pk_transaction_get_updates (PkTransaction *transaction, const gchar *filter, DBu
 	gboolean ret;
 	GError *error;
 	GPtrArray *updates_cache;
-	gchar *package_id;
 
 	g_return_if_fail (PK_IS_TRANSACTION (transaction));
 	g_return_if_fail (transaction->priv->tid != NULL);
@@ -3048,11 +3068,9 @@ pk_transaction_get_updates (PkTransaction *transaction, const gchar *filter, DBu
 		/* emulate the backend */
 		for (i=0; i<updates_cache->len; i++) {
 			obj = g_ptr_array_index (updates_cache, i);
-			info_text = pk_info_enum_to_text (obj->info);
-			package_id = pk_package_id_to_string (obj->id);
+			info_text = pk_info_enum_to_text (obj->info_enum);
 			g_signal_emit (transaction, signals [PK_TRANSACTION_PACKAGE], 0,
-				       info_text, package_id, obj->summary);
-			g_free (package_id);
+				       info_text, obj->package_id, obj->summary);
 		}
 
 		/* set finished */
@@ -3215,8 +3233,7 @@ pk_transaction_install_files (PkTransaction *transaction, gboolean only_trusted,
 		/* valid */
 		if (g_str_has_suffix (full_paths[i], ".servicepack")) {
 			service_pack = pk_service_pack_new ();
-			pk_service_pack_set_filename (service_pack, full_paths[i]);
-			ret = pk_service_pack_check_valid (service_pack, &error_local);
+			ret = pk_service_pack_check_valid (service_pack, full_paths[i], &error_local);
 			g_object_unref (service_pack);
 			if (!ret) {
 				error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_PACK_INVALID, "%s", error_local->message);
@@ -4205,8 +4222,7 @@ pk_transaction_simulate_install_files (PkTransaction *transaction, gchar **full_
 		/* valid */
 		if (g_str_has_suffix (full_paths[i], ".servicepack")) {
 			service_pack = pk_service_pack_new ();
-			pk_service_pack_set_filename (service_pack, full_paths[i]);
-			ret = pk_service_pack_check_valid (service_pack, &error_local);
+			ret = pk_service_pack_check_valid (service_pack, full_paths[i], &error_local);
 			g_object_unref (service_pack);
 			if (!ret) {
 				error = g_error_new (PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_PACK_INVALID, "%s", error_local->message);
@@ -4960,7 +4976,7 @@ pk_transaction_init (PkTransaction *transaction)
 	transaction->priv->conf = pk_conf_new ();
 	transaction->priv->notify = pk_notify_new ();
 	transaction->priv->inhibit = pk_inhibit_new ();
-	transaction->priv->package_list = g_ptr_array_new_with_free_funcxxx ();
+	transaction->priv->package_list = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_item_package_unref);
 	transaction->priv->transaction_list = pk_transaction_list_new ();
 	transaction->priv->syslog = pk_syslog_new ();
 	transaction->priv->dbus = pk_dbus_new ();
@@ -5053,13 +5069,13 @@ pk_transaction_finalize (GObject *object)
 	g_free (transaction->priv->sender);
 	g_free (transaction->priv->cmdline);
 
+	g_ptr_array_unref (transaction->priv->package_list);
 	g_object_unref (transaction->priv->conf);
 	g_object_unref (transaction->priv->dbus);
 	g_object_unref (transaction->priv->cache);
 	g_object_unref (transaction->priv->inhibit);
 	g_object_unref (transaction->priv->backend);
 	g_object_unref (transaction->priv->monitor);
-	g_object_unref (transaction->priv->package_list);
 	g_object_unref (transaction->priv->transaction_list);
 	g_object_unref (transaction->priv->transaction_db);
 	g_object_unref (transaction->priv->notify);
commit 036f4ded7a5d31daeb79225fe7e802a06569a476
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 8 16:04:19 2009 +0100

    glib2: port the PkDesktop class from glib1

diff --git a/client/Makefile.am b/client/Makefile.am
index fb8b30c..44261d4 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -79,6 +79,7 @@ pkcon_test_SOURCES =					\
 pkcon_test_LDADD =					\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
+	$(SQLITE_LIBS)					\
 	$(PK_GLIB2_LIBS)				\
 	$(NULL)
 
@@ -93,6 +94,7 @@ pkmon_test_SOURCES =					\
 pkmon_test_LDADD =					\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
+	$(SQLITE_LIBS)					\
 	$(PK_GLIB2_LIBS)				\
 	$(NULL)
 
@@ -108,6 +110,7 @@ pkgenpack_test_LDADD = 					\
 	$(ARCHIVE_LIBS)					\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
+	$(SQLITE_LIBS)					\
 	$(PK_GLIB2_LIBS)				\
 	$(NULL)
 
diff --git a/lib/packagekit-glib2/Makefile.am b/lib/packagekit-glib2/Makefile.am
index f02ae9f..0d1a9d4 100644
--- a/lib/packagekit-glib2/Makefile.am
+++ b/lib/packagekit-glib2/Makefile.am
@@ -35,13 +35,16 @@ libpackagekit_glib2_include_HEADERS =				\
 	pk-client.h						\
 	pk-common.h						\
 	pk-control.h						\
+	pk-desktop.h						\
+	pk-enum.h						\
+	pk-item.h						\
 	pk-package.h						\
 	pk-package-id.h						\
 	pk-package-ids.h					\
 	pk-package-sack.h					\
 	pk-progress.h						\
-	pk-service-pack.h					\
 	pk-results.h						\
+	pk-service-pack.h					\
 	pk-task.h						\
 	$(NULL)
 
@@ -59,6 +62,8 @@ libpackagekit_glib2_la_SOURCES =				\
 	pk-common.h						\
 	pk-control.c						\
 	pk-control.h						\
+	pk-desktop.c						\
+	pk-desktop.h						\
 	pk-enum.c						\
 	pk-enum.h						\
 	pk-marshal.c						\
@@ -89,6 +94,7 @@ libpackagekit_glib2_la_LIBADD =					\
 	$(GIO_LIBS)						\
 	$(DBUS_LIBS)						\
 	$(ARCHIVE_LIBS)						\
+	$(SQLITE_LIBS)						\
 	$(NULL)
 
 libpackagekit_glib2_la_LDFLAGS =				\
diff --git a/lib/packagekit-glib2/packagekit.h b/lib/packagekit-glib2/packagekit.h
index e3572fd..8ce5d71 100644
--- a/lib/packagekit-glib2/packagekit.h
+++ b/lib/packagekit-glib2/packagekit.h
@@ -27,6 +27,7 @@
 #include <packagekit-glib2/pk-client.h>
 #include <packagekit-glib2/pk-common.h>
 #include <packagekit-glib2/pk-control.h>
+#include <packagekit-glib2/pk-desktop.h>
 #include <packagekit-glib2/pk-enum.h>
 #include <packagekit-glib2/pk-item.h>
 #include <packagekit-glib2/pk-package-id.h>
diff --git a/lib/packagekit-glib2/pk-desktop.c b/lib/packagekit-glib2/pk-desktop.c
new file mode 100644
index 0000000..efc14a8
--- /dev/null
+++ b/lib/packagekit-glib2/pk-desktop.c
@@ -0,0 +1,406 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 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.
+ */
+
+/**
+ * SECTION:pk-desktop
+ * @short_description: Client singleton access to desktop metadata about a package
+ *
+ * Desktop metadata such as icon name and localised summary may be stored here
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <sqlite3.h>
+#include <packagekit-glib2/pk-desktop.h>
+
+#include "egg-debug.h"
+#include "egg-string.h"
+
+static void     pk_desktop_finalize	(GObject        *object);
+
+#define PK_DESKTOP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PK_TYPE_DESKTOP, PkDesktopPrivate))
+
+/* Database format is:
+ *   CREATE TABLE cache ( filename TEXT, package TEXT, show INTEGER, md5 TEXT );
+ */
+
+/**
+ * PkDesktopPrivate:
+ *
+ * Private #PkDesktop data
+ **/
+struct _PkDesktopPrivate
+{
+	sqlite3			*db;
+};
+
+G_DEFINE_TYPE (PkDesktop, pk_desktop, G_TYPE_OBJECT)
+static gpointer pk_desktop_object = NULL;
+
+/**
+ * pk_desktop_sqlite_filename_cb:
+ **/
+static gint
+pk_desktop_sqlite_filename_cb (void *data, gint argc, gchar **argv, gchar **col_name)
+{
+	GPtrArray *array = (GPtrArray *) data;
+	gint i;
+
+	/* add the filename data to the array */
+	for (i=0; i<argc; i++) {
+		if (g_strcmp0 (col_name[i], "filename") == 0 && argv[i] != NULL)
+			g_ptr_array_add (array, g_strdup (argv[i]));
+	}
+
+	return 0;
+}
+
+/**
+ * pk_desktop_sqlite_package_cb:
+ **/
+static gint
+pk_desktop_sqlite_package_cb (void *data, gint argc, gchar **argv, gchar **col_name)
+{
+	gchar **package = (gchar **) data;
+	gint i;
+
+	/* add the filename data to the array */
+	for (i=0; i<argc; i++) {
+		if (g_strcmp0 (col_name[i], "package") == 0 && argv[i] != NULL)
+			*package = g_strdup (argv[i]);
+	}
+
+	return 0;
+}
+
+/**
+ * pk_desktop_get_files_for_package:
+ * @desktop: a valid #PkDesktop instance
+ * @package: the package name, e.g. "gnome-power-manager"
+ * @error: a %GError to put the error code and message in, or %NULL
+ *
+ * Return all desktop files owned by a package, regardless if they are shown
+ * in the main menu or not.
+ *
+ * Return value: array of results
+ **/
+GPtrArray *
+pk_desktop_get_files_for_package (PkDesktop *desktop, const gchar *package, GError **error)
+{
+	gchar *statement;
+	gchar *error_msg = NULL;
+	gint rc;
+	GPtrArray *array = NULL;
+
+	g_return_val_if_fail (PK_IS_DESKTOP (desktop), NULL);
+	g_return_val_if_fail (package != NULL, NULL);
+
+	/* no database */
+	if (desktop->priv->db == NULL) {
+		if (error != NULL)
+			*error = g_error_new (1, 0, "database is not open");
+		goto out;
+	}
+
+	/* get packages */
+	array = g_ptr_array_new ();
+	statement = g_strdup_printf ("SELECT filename FROM cache WHERE package = '%s'", package);
+	rc = sqlite3_exec (desktop->priv->db, statement, pk_desktop_sqlite_filename_cb, array, &error_msg);
+	g_free (statement);
+	if (rc != SQLITE_OK) {
+		egg_warning ("SQL error: %s\n", error_msg);
+		sqlite3_free (error_msg);
+	}
+out:
+	return array;
+}
+
+/**
+ * pk_desktop_get_shown_for_package:
+ * @desktop: a valid #PkDesktop instance
+ * @package: the package name, e.g. "gnome-power-manager"
+ * @error: a %GError to put the error code and message in, or %NULL
+ *
+ * Return all desktop files owned by a package that would be shown in a menu,
+ * i.e are an application
+ *
+ * Return value: array of results
+ **/
+GPtrArray *
+pk_desktop_get_shown_for_package (PkDesktop *desktop, const gchar *package, GError **error)
+{
+	gchar *statement;
+	gchar *error_msg = NULL;
+	gint rc;
+	GPtrArray *array = NULL;
+
+	g_return_val_if_fail (PK_IS_DESKTOP (desktop), NULL);
+	g_return_val_if_fail (package != NULL, NULL);
+
+	/* no database */
+	if (desktop->priv->db == NULL) {
+		if (error != NULL)
+			*error = g_error_new (1, 0, "database is not open");
+		goto out;
+	}
+
+	/* get packages */
+	array = g_ptr_array_new ();
+	statement = g_strdup_printf ("SELECT filename FROM cache WHERE package = '%s' AND show = 1", package);
+	rc = sqlite3_exec (desktop->priv->db, statement, pk_desktop_sqlite_filename_cb, array, &error_msg);
+	g_free (statement);
+	if (rc != SQLITE_OK) {
+		egg_warning ("SQL error: %s\n", error_msg);
+		sqlite3_free (error_msg);
+	}
+out:
+	return array;
+}
+
+/**
+ * pk_desktop_get_package_for_file:
+ * @desktop: a valid #PkDesktop instance
+ * @filename: a fully qualified filename
+ * @error: a %GError to put the error code and message in, or %NULL
+ *
+ * Returns the package name that owns the desktop file. Fast.
+ *
+ * Return value: package name, or %NULL
+ **/
+gchar *
+pk_desktop_get_package_for_file (PkDesktop *desktop, const gchar *filename, GError **error)
+{
+	gchar *statement;
+	gchar *error_msg = NULL;
+	gint rc;
+	gchar *package = NULL;
+
+	g_return_val_if_fail (PK_IS_DESKTOP (desktop), NULL);
+	g_return_val_if_fail (filename != NULL, NULL);
+
+	/* no database */
+	if (desktop->priv->db == NULL) {
+		if (error != NULL)
+			*error = g_error_new (1, 0, "database is not open");
+		goto out;
+	}
+
+	/* get packages */
+	statement = g_strdup_printf ("SELECT package FROM cache WHERE filename = '%s' LIMIT 1", filename);
+	rc = sqlite3_exec (desktop->priv->db, statement, pk_desktop_sqlite_package_cb, &package, &error_msg);
+	g_free (statement);
+	if (rc != SQLITE_OK) {
+		egg_warning ("SQL error: %s\n", error_msg);
+		sqlite3_free (error_msg);
+	}
+
+	/* no result */
+	if (package == NULL) {
+		if (error != NULL)
+			*error = g_error_new (1, 0, "could not find package for %s", filename);
+		goto out;
+	}
+out:
+	return package;
+}
+
+/**
+ * pk_desktop_open_database:
+ * @desktop: a valid #PkDesktop instance
+ *
+ * Return value: %TRUE if opened correctly
+ **/
+gboolean
+pk_desktop_open_database (PkDesktop *desktop, GError **error)
+{
+	gboolean ret;
+	gint rc;
+
+	g_return_val_if_fail (PK_IS_DESKTOP (desktop), FALSE);
+
+	/* already opened */
+	if (desktop->priv->db != NULL)
+		return TRUE;
+
+	/* if the database file was not installed (or was nuked) recreate it */
+	ret = g_file_test (PK_DESKTOP_DEFAULT_DATABASE, G_FILE_TEST_EXISTS);
+	if (!ret) {
+		if (error != NULL)
+			*error = g_error_new (1, 0, "database %s is not present", PK_DESKTOP_DEFAULT_DATABASE);
+		return FALSE;
+	}
+
+	egg_debug ("trying to open database '%s'", PK_DESKTOP_DEFAULT_DATABASE);
+	rc = sqlite3_open (PK_DESKTOP_DEFAULT_DATABASE, &desktop->priv->db);
+	if (rc != 0) {
+		egg_warning ("Can't open database: %s\n", sqlite3_errmsg (desktop->priv->db));
+		if (error != NULL)
+			*error = g_error_new (1, 0, "can't open database: %s", sqlite3_errmsg (desktop->priv->db));
+		sqlite3_close (desktop->priv->db);
+		desktop->priv->db = NULL;
+		return FALSE;
+	}
+
+	/* we don't need to keep syncing */
+	sqlite3_exec (desktop->priv->db, "PRAGMA synchronous=OFF", NULL, NULL, NULL);
+
+	return TRUE;
+}
+
+/**
+ * pk_desktop_class_init:
+ **/
+static void
+pk_desktop_class_init (PkDesktopClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	object_class->finalize = pk_desktop_finalize;
+	g_type_class_add_private (klass, sizeof (PkDesktopPrivate));
+}
+
+/**
+ * pk_desktop_init:
+ **/
+static void
+pk_desktop_init (PkDesktop *desktop)
+{
+	desktop->priv = PK_DESKTOP_GET_PRIVATE (desktop);
+}
+
+/**
+ * pk_desktop_finalize:
+ **/
+static void
+pk_desktop_finalize (GObject *object)
+{
+	PkDesktop *desktop;
+	g_return_if_fail (object != NULL);
+	g_return_if_fail (PK_IS_DESKTOP (object));
+	desktop = PK_DESKTOP (object);
+	g_return_if_fail (desktop->priv != NULL);
+
+	sqlite3_close (desktop->priv->db);
+
+	G_OBJECT_CLASS (pk_desktop_parent_class)->finalize (object);
+}
+
+/**
+ * pk_desktop_new:
+ **/
+PkDesktop *
+pk_desktop_new (void)
+{
+	if (pk_desktop_object != NULL) {
+		g_object_ref (pk_desktop_object);
+	} else {
+		pk_desktop_object = g_object_new (PK_TYPE_DESKTOP, NULL);
+		g_object_add_weak_pointer (pk_desktop_object, &pk_desktop_object);
+	}
+	return PK_DESKTOP (pk_desktop_object);
+}
+
+/***************************************************************************
+ ***                          MAKE CHECK TESTS                           ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+pk_desktop_test (gpointer user_data)
+{
+	EggTest *test = (EggTest *) user_data;
+	PkDesktop *desktop;
+	gboolean ret;
+	gchar *package;
+	GPtrArray *array;
+	GError *error = NULL;
+
+	if (!egg_test_start (test, "PkDesktop"))
+		return;
+
+	/************************************************************/
+	egg_test_title (test, "get desktop");
+	desktop = pk_desktop_new ();
+	egg_test_assert (test, desktop != NULL);
+
+	/************************************************************/
+	egg_test_title (test, "get package when not valid");
+	package = pk_desktop_get_package_for_file (desktop, "/usr/share/applications/gpk-update-viewer.desktop", NULL);
+	egg_test_assert (test, package == NULL);
+
+	/* file does not exist */
+	ret = g_file_test (PK_DESKTOP_DEFAULT_DATABASE, G_FILE_TEST_EXISTS);
+	if (!ret) {
+		egg_warning ("skipping checks as database does not exist");
+		goto out;
+	}
+
+	/************************************************************/
+	egg_test_title (test, "open database");
+	ret = pk_desktop_open_database (desktop, &error);
+	if (ret)
+		egg_test_success (test, "%ims", egg_test_elapsed (test));
+	else
+		egg_test_failed (test, "failed to open: %s", error->message);
+
+	/************************************************************/
+	egg_test_title (test, "get package");
+	package = pk_desktop_get_package_for_file (desktop, "/usr/share/applications/gpk-update-viewer.desktop", NULL);
+
+	/* dummy, not yum */
+	if (g_strcmp0 (package, "vips-doc") == 0) {
+		egg_test_success (test, "created db with dummy, skipping remaining tests");
+		goto out;
+	}
+
+	if (g_strcmp0 (package, "gnome-packagekit") == 0)
+		egg_test_success (test, NULL);
+	else
+		egg_test_failed (test, "package was: %s", package);
+	g_free (package);
+
+	/************************************************************/
+	egg_test_title (test, "get files");
+	array = pk_desktop_get_files_for_package (desktop, "gnome-packagekit", NULL);
+	if (array->len >= 5)
+		egg_test_success (test, NULL);
+	else
+		egg_test_failed (test, "length=%i", array->len);
+	g_ptr_array_foreach (array, (GFunc) g_free, NULL);
+	g_ptr_array_free (array, TRUE);
+
+	/************************************************************/
+	egg_test_title (test, "get shown files");
+	array = pk_desktop_get_shown_for_package (desktop, "f-spot", NULL);
+	if (array->len == 1)
+		egg_test_success (test, NULL);
+	else
+		egg_test_failed (test, "length=%i", array->len);
+	g_ptr_array_foreach (array, (GFunc) g_free, NULL);
+	g_ptr_array_free (array, TRUE);
+out:
+	g_object_unref (desktop);
+
+	egg_test_end (test);
+}
+#endif
+
diff --git a/lib/packagekit-glib2/pk-desktop.h b/lib/packagekit-glib2/pk-desktop.h
new file mode 100644
index 0000000..2892b31
--- /dev/null
+++ b/lib/packagekit-glib2/pk-desktop.h
@@ -0,0 +1,92 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 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_DESKTOP_H
+#define __PK_DESKTOP_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define PK_TYPE_DESKTOP		(pk_desktop_get_type ())
+#define PK_DESKTOP(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), PK_TYPE_DESKTOP, PkDesktop))
+#define PK_DESKTOP_CLASS(k)	(G_TYPE_CHECK_CLASS_CAST((k), PK_TYPE_DESKTOP, PkDesktopClass))
+#define PK_IS_DESKTOP(o)	(G_TYPE_CHECK_INSTANCE_TYPE ((o), PK_TYPE_DESKTOP))
+#define PK_IS_DESKTOP_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), PK_TYPE_DESKTOP))
+#define PK_DESKTOP_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_DESKTOP, PkDesktopClass))
+
+/**
+ * PK_DESKTOP_DEFAULT_DATABASE:
+ *
+ * The default location for the database
+ */
+#define PK_DESKTOP_DEFAULT_DATABASE		LOCALSTATEDIR "/lib/PackageKit/desktop-files.db"
+
+/**
+ * PK_DESKTOP_DEFAULT_APPLICATION_DIR:
+ *
+ * The default location for the desktop files
+ */
+#ifndef __FreeBSD__
+#define PK_DESKTOP_DEFAULT_APPLICATION_DIR	"/usr/share/applications"
+#else
+#define PK_DESKTOP_DEFAULT_APPLICATION_DIR	"/usr/local/share/applications"
+#endif
+
+typedef struct _PkDesktopPrivate	PkDesktopPrivate;
+typedef struct _PkDesktop		PkDesktop;
+typedef struct _PkDesktopClass		PkDesktopClass;
+
+struct _PkDesktop
+{
+	GObject			 parent;
+	PkDesktopPrivate	*priv;
+};
+
+struct _PkDesktopClass
+{
+	GObjectClass	parent_class;
+};
+
+GType		 pk_desktop_get_type			(void);
+PkDesktop	*pk_desktop_new				(void);
+void		 pk_desktop_test			(gpointer	 user_data);
+
+gboolean	 pk_desktop_open_database		(PkDesktop	*desktop,
+							 GError		**error);
+GPtrArray	*pk_desktop_get_files_for_package	(PkDesktop	*desktop,
+							 const gchar	*package,
+							 GError		**error);
+GPtrArray	*pk_desktop_get_shown_for_package	(PkDesktop	*desktop,
+							 const gchar	*package,
+							 GError		**error);
+gchar		*pk_desktop_get_package_for_file	(PkDesktop	*desktop,
+							 const gchar	*filename,
+							 GError		**error);
+
+G_END_DECLS
+
+#endif /* __PK_DESKTOP_H */
+
diff --git a/lib/packagekit-glib2/pk-self-test.c b/lib/packagekit-glib2/pk-self-test.c
index f75f7b0..6d452dc 100644
--- a/lib/packagekit-glib2/pk-self-test.c
+++ b/lib/packagekit-glib2/pk-self-test.c
@@ -29,6 +29,7 @@
 #include "pk-client.h"
 #include "pk-common.h"
 #include "pk-control.h"
+#include "pk-desktop.h"
 #include "pk-enum.h"
 #include "pk-package.h"
 #include "pk-package-id.h"
@@ -53,6 +54,7 @@ main (int argc, char **argv)
 	egg_string_test (test);
 	pk_common_test (test);
 	pk_enum_test (test);
+	pk_desktop_test (test);
 	pk_bitfield_test (test);
 	pk_package_id_test (test);
 	pk_package_ids_test (test);
commit d6b75401bc7755fde1fd14a459aa57e97727aa8e
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 8 14:28:53 2009 +0100

    trivial: More work to make the daemon compile with glib2

diff --git a/src/pk-backend.c b/src/pk-backend.c
index bd4c93d..075770b 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -101,7 +101,7 @@ struct _PkBackendPrivate
 	guint			 download_files;
 	PkNetwork		*network;
 	PkStore			*store;
-	PkPackageObj		*last_package;
+	PkItemPackage		*last_package;
 	PkRoleEnum		 role; /* this never changes for the lifetime of a transaction */
 	PkStatusEnum		 status; /* this changes */
 	PkExitEnum		 exit;
@@ -789,37 +789,35 @@ pk_backend_get_status (PkBackend *backend)
 static gboolean
 pk_backend_package_emulate_finished (PkBackend *backend)
 {
-	PkInfoEnum info;
-	gchar *package_id;
 	gboolean ret = FALSE;
+	const PkItemPackage *item;
 
 	/* simultaneous handles this on it's own */
 	if (backend->priv->simultaneous)
-		return FALSE;
+		goto out;
 
 	/* first package in transaction */
-	if (backend->priv->last_package == NULL)
-		return FALSE;
+	item = backend->priv->last_package;
+	if (item == NULL)
+		goto out;
 
 	/* already finished */
-	if (backend->priv->last_package->info == PK_INFO_ENUM_FINISHED)
-		return FALSE;
+	if (item->info_enum == PK_INFO_ENUM_FINISHED)
+		goto out;
 
 	/* only makes sense for some values */
-	info = backend->priv->last_package->info;
-	if (info == PK_INFO_ENUM_DOWNLOADING ||
-	    info == PK_INFO_ENUM_UPDATING ||
-	    info == PK_INFO_ENUM_INSTALLING ||
-	    info == PK_INFO_ENUM_REMOVING ||
-	    info == PK_INFO_ENUM_CLEANUP ||
-	    info == PK_INFO_ENUM_OBSOLETING ||
-	    info == PK_INFO_ENUM_REINSTALLING ||
-	    info == PK_INFO_ENUM_DOWNGRADING) {
-		package_id = pk_package_id_to_string (backend->priv->last_package->id);
-		pk_backend_package (backend, PK_INFO_ENUM_FINISHED, package_id, backend->priv->last_package->summary);
-		g_free (package_id);
+	if (item->info_enum == PK_INFO_ENUM_DOWNLOADING ||
+	    item->info_enum == PK_INFO_ENUM_UPDATING ||
+	    item->info_enum == PK_INFO_ENUM_INSTALLING ||
+	    item->info_enum == PK_INFO_ENUM_REMOVING ||
+	    item->info_enum == PK_INFO_ENUM_CLEANUP ||
+	    item->info_enum == PK_INFO_ENUM_OBSOLETING ||
+	    item->info_enum == PK_INFO_ENUM_REINSTALLING ||
+	    item->info_enum == PK_INFO_ENUM_DOWNGRADING) {
+		pk_backend_package (backend, PK_INFO_ENUM_FINISHED, item->package_id, item->summary);
 		ret = TRUE;
 	}
+out:
 	return ret;
 }
 
@@ -827,7 +825,7 @@ pk_backend_package_emulate_finished (PkBackend *backend)
  * pk_backend_package_emulate_finished_for_package:
  **/
 static gboolean
-pk_backend_package_emulate_finished_for_package (PkBackend *backend, const PkPackageObj *obj)
+pk_backend_package_emulate_finished_for_package (PkBackend *backend, const PkItemPackage *obj)
 {
 	/* simultaneous handles this on it's own */
 	if (backend->priv->simultaneous)
@@ -838,11 +836,11 @@ pk_backend_package_emulate_finished_for_package (PkBackend *backend, const PkPac
 		return FALSE;
 
 	/* sending finished already */
-	if (obj->info == PK_INFO_ENUM_FINISHED)
+	if (obj->info_enum == PK_INFO_ENUM_FINISHED)
 		return FALSE;
 
 	/* same package, just info change */
-	if (pk_package_id_equal (backend->priv->last_package->id, obj->id))
+	if (g_strcmp0 (backend->priv->last_package->package_id, obj->package_id))
 		return FALSE;
 
 	/* emit the old package as finished */
@@ -856,7 +854,7 @@ gboolean
 pk_backend_package (PkBackend *backend, PkInfoEnum info, const gchar *package_id, const gchar *summary)
 {
 	gchar *summary_safe = NULL;
-	PkPackageObj *obj = NULL;
+	PkItemPackage *obj = NULL;
 	gboolean ret;
 
 	g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE);
@@ -885,13 +883,16 @@ pk_backend_package (PkBackend *backend, PkInfoEnum info, const gchar *package_id
 	}
 
 	/* create a new package object AFTER we emulate the info value */
-	obj = pk_package_obj_new (info, package_id, summary_safe);
+	obj = pk_item_package_new (info, package_id, summary_safe);
 	if (obj == NULL) {
 		egg_warning ("Failed to create object summary: '%s'", summary_safe);
 		ret = FALSE;
 		goto out;
 	}
-	ret = pk_package_obj_equal (obj, backend->priv->last_package);
+
+	/* is it the same? */
+	ret = (obj->info_enum == backend->priv->last_package->info_enum &&
+	       g_strcmp0 (obj->package_id, backend->priv->last_package->package_id) == 0);
 	if (ret) {
 		egg_debug ("skipping duplicate %s", package_id);
 		ret = FALSE;
@@ -902,8 +903,8 @@ pk_backend_package (PkBackend *backend, PkInfoEnum info, const gchar *package_id
 	pk_backend_package_emulate_finished_for_package (backend, obj);
 
 	/* update the 'last' package */
-	pk_package_obj_free (backend->priv->last_package);
-	backend->priv->last_package = pk_package_obj_copy (obj);
+	pk_item_package_unref (backend->priv->last_package);
+	backend->priv->last_package = pk_item_package_ref (obj);
 
 	/* have we already set an error? */
 	if (backend->priv->set_error) {
@@ -938,7 +939,8 @@ pk_backend_package (PkBackend *backend, PkInfoEnum info, const gchar *package_id
 	/* success */
 	ret = TRUE;
 out:
-	pk_package_obj_free (obj);
+	if (obj != NULL)
+		pk_item_package_unref (obj);
 	g_free (summary_safe);
 	return ret;
 }
@@ -956,7 +958,7 @@ pk_backend_update_detail (PkBackend *backend, const gchar *package_id,
 			  const gchar *updated_text)
 {
 	gchar *update_text_safe = NULL;
-	PkUpdateDetailObj *detail = NULL;
+	PkItemUpdateDetail *detail = NULL;
 	GDate *issued = NULL;
 	GDate *updated = NULL;
 	gboolean ret = FALSE;
@@ -978,8 +980,8 @@ pk_backend_update_detail (PkBackend *backend, const gchar *package_id,
 	/* replace unsafe chars */
 	update_text_safe = pk_strsafe (update_text);
 
-	/* form PkUpdateDetailObj struct */
-	detail = pk_update_detail_obj_new_from_data (package_id, updates, obsoletes, vendor_url,
+	/* form PkItemUpdateDetail struct */
+	detail = pk_item_update_detail_new (package_id, updates, obsoletes, vendor_url,
 						     bugzilla_url, cve_url, restart,
 						     update_text_safe, changelog,
 						     state, issued, updated);
@@ -1156,7 +1158,7 @@ pk_backend_details (PkBackend *backend, const gchar *package_id,
 		    const gchar *description, const gchar *url, gulong size)
 {
 	gchar *description_safe = NULL;
-	PkDetailsObj *details = NULL;
+	PkItemDetails *details = NULL;
 	gboolean ret = FALSE;
 
 	g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE);
@@ -1172,8 +1174,8 @@ pk_backend_details (PkBackend *backend, const gchar *package_id,
 	/* replace unsafe chars */
 	description_safe = pk_strsafe (description);
 
-	/* form PkDetailsObj struct */
-	details = pk_details_obj_new_from_data (package_id, license, group, description_safe, url, size);
+	/* form PkItemDetails struct */
+	details = pk_item_details_new (package_id, license, group, description_safe, url, size);
 	if (details == NULL) {
 		egg_warning ("Failed to parse details object");
 		goto out;
@@ -2077,7 +2079,7 @@ pk_backend_reset (PkBackend *backend)
 		backend->priv->signal_error_timeout = 0;
 	}
 
-	pk_package_obj_free (backend->priv->last_package);
+	pk_item_package_unref (backend->priv->last_package);
 	backend->priv->set_error = FALSE;
 	backend->priv->set_signature = FALSE;
 	backend->priv->set_eula = FALSE;
@@ -2217,7 +2219,7 @@ pk_backend_test_func_immediate_false (PkBackend *backend)
  * pk_backend_test_package_cb:
  **/
 static void
-pk_backend_test_package_cb (PkBackend *backend, const PkPackageObj *obj, EggTest *test)
+pk_backend_test_package_cb (PkBackend *backend, const PkItemPackage *obj, EggTest *test)
 {
 	egg_debug ("package:%s", obj->id->name);
 	number_packages++;
diff --git a/src/pk-transaction-extra.c b/src/pk-transaction-extra.c
index 7016ca3..6739c40 100644
--- a/src/pk-transaction-extra.c
+++ b/src/pk-transaction-extra.c
@@ -81,7 +81,7 @@ pk_transaction_extra_finished_cb (PkBackend *backend, PkExitEnum exit_enum, PkTr
  * pk_transaction_extra_package_cb:
  **/
 static void
-pk_transaction_extra_package_cb (PkBackend *backend, const PkPackageObj *obj, PkTransactionExtra *extra)
+pk_transaction_extra_package_cb (PkBackend *backend, const PkItemPackage *obj, PkTransactionExtra *extra)
 {
 	pk_obj_list_add (PK_OBJ_LIST(extra->priv->list), obj);
 }
@@ -119,10 +119,10 @@ pk_transaction_extra_set_progress_changed (PkTransactionExtra *extra, guint perc
 /**
  * pk_transaction_extra_get_installed_package_for_file:
  **/
-static const PkPackageObj *
+static const PkItemPackage *
 pk_transaction_extra_get_installed_package_for_file (PkTransactionExtra *extra, const gchar *filename)
 {
-	const PkPackageObj *obj = NULL;
+	const PkItemPackage *obj = NULL;
 	PkStore *store;
 
 	/* use PK to find the correct package */
@@ -279,7 +279,7 @@ pk_transaction_extra_sqlite_add_filename (PkTransactionExtra *extra, const gchar
 	gchar *md5 = NULL;
 	gchar *package = NULL;
 	gint rc = -1;
-	const PkPackageObj *obj;
+	const PkItemPackage *obj;
 
 	/* if we've got it, use old data */
 	if (md5_opt != NULL)
@@ -856,7 +856,7 @@ pk_transaction_extra_check_library_restart (PkTransactionExtra *extra)
 	gchar *package_id;
 	GPtrArray *files_session;
 	GPtrArray *files_system;
-	const PkPackageObj *obj;
+	const PkItemPackage *obj;
 	GPtrArray *pids;
 
 	g_return_val_if_fail (PK_IS_POST_TRANS (extra), FALSE);
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index 0b28ee4..55526ef 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -470,7 +470,7 @@ pk_transaction_caller_active_changed_cb (EggDbusMonitor *egg_dbus_monitor, gbool
  * pk_transaction_details_cb:
  **/
 static void
-pk_transaction_details_cb (PkBackend *backend, PkDetailsObj *obj, PkTransaction *transaction)
+pk_transaction_details_cb (PkBackend *backend, PkItemDetails *obj, PkTransaction *transaction)
 {
 	const gchar *group_text;
 	gchar *package_id;
@@ -478,7 +478,7 @@ pk_transaction_details_cb (PkBackend *backend, PkDetailsObj *obj, PkTransaction
 	g_return_if_fail (PK_IS_TRANSACTION (transaction));
 	g_return_if_fail (transaction->priv->tid != NULL);
 
-	group_text = pk_group_enum_to_text (obj->group);
+	group_text = pk_group_enum_to_text (obj->group_enum);
 	package_id = pk_package_id_to_string (obj->id);
 	g_signal_emit (transaction, signals [PK_TRANSACTION_DETAILS], 0, package_id,
 		       obj->license, group_text, obj->description, obj->url, obj->size);
@@ -579,7 +579,7 @@ pk_transaction_finished_cb (PkBackend *backend, PkExitEnum exit_enum, PkTransact
 	guint i, length;
 	GPtrArray *list;
 	GPtrArray *package_list;
-	const PkPackageObj *obj;
+	const PkItemPackage *obj;
 	gchar *package_id;
 
 	g_return_if_fail (PK_IS_TRANSACTION (transaction));
@@ -821,7 +821,7 @@ pk_transaction_message_cb (PkBackend *backend, PkMessageEnum message, const gcha
  * pk_transaction_package_cb:
  **/
 static void
-pk_transaction_package_cb (PkBackend *backend, const PkPackageObj *obj, PkTransaction *transaction)
+pk_transaction_package_cb (PkBackend *backend, const PkItemPackage *obj, PkTransaction *transaction)
 {
 	const gchar *info_text;
 	const gchar *role_text;
@@ -1061,7 +1061,7 @@ pk_transaction_transaction_cb (PkTransactionDb *tdb, const gchar *old_tid, const
  * pk_transaction_update_detail_cb:
  **/
 static void
-pk_transaction_update_detail_cb (PkBackend *backend, const PkUpdateDetailObj *detail, PkTransaction *transaction)
+pk_transaction_update_detail_cb (PkBackend *backend, const PkItemUpdateDetail *detail, PkTransaction *transaction)
 {
 	const gchar *restart_text;
 	const gchar *state_text;
@@ -1098,7 +1098,7 @@ static gboolean
 pk_transaction_pre_transaction_checks (PkTransaction *transaction, gchar **package_ids)
 {
 	GPtrArray *updates;
-	const PkPackageObj *obj;
+	const PkItemPackage *obj;
 	guint i;
 	guint j;
 	guint length;
@@ -3039,7 +3039,7 @@ pk_transaction_get_updates (PkTransaction *transaction, const gchar *filter, DBu
 	/* try and reuse cache */
 	updates_cache = pk_cache_get_updates (transaction->priv->cache);
 	if (updates_cache != NULL) {
-		const PkPackageObj *obj;
+		const PkItemPackage *obj;
 		const gchar *info_text;
 		guint i;
 
commit c879297cce35172401b164e29f61d8dd3b7e7bb2
Merge: 7c260de... 9f11304...
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 8 14:15:28 2009 +0100

    Merge branch 'master' into daemon-glib2

commit 9f11304bc5bc16233d72df6f742b2c6ccbb747b6
Merge: 0c12ffd... 5dae094...
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 8 14:14:19 2009 +0100

    Merge branch 'master' into item-new

commit 0c12ffd6c62405df68180583773f766ab1c59092
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 8 14:13:14 2009 +0100

    trivial: Make PkItem structures independant of PkResults so the daemon can use them

diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index 020f5ba..3754827 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -443,6 +443,7 @@ pk_client_copy_downloaded_file (PkClientState *state, const gchar *package_id, c
 	gchar **files;
 	GFile *source;
 	GFile *destination;
+	PkItemFiles *item;
 
 	/* generate the destination location */
 	basename = g_path_get_basename (source_file);
@@ -458,9 +459,11 @@ pk_client_copy_downloaded_file (PkClientState *state, const gchar *package_id, c
 
 	/* Add the result (as a GStrv) to the results set */
 	files = g_strsplit (path, ",", -1);
-	pk_results_add_files (state->results, package_id, files);
+	item = pk_item_files_new (package_id, files);
+	pk_results_add_files (state->results, item);
 
 	/* free everything we've used */
+	pk_item_files_unref (item);
 	g_object_unref (source);
 	g_object_unref (destination);
 	g_strfreev (files);
@@ -488,7 +491,6 @@ pk_client_copy_downloaded (PkClientState *state)
 	array = pk_results_get_files_array (state->results);
 	if (array == NULL)
 		egg_error ("internal error");
-
 	/* get the number of files to copy */
 	for (i=0; i < array->len; i++) {
 		item = g_ptr_array_index (array, i);
@@ -516,7 +518,7 @@ pk_client_finished_cb (DBusGProxy *proxy, const gchar *exit_text, guint runtime,
 {
 	GError *error = NULL;
 	PkExitEnum exit_enum;
-	const PkItemErrorCode *error_item;
+	PkItemErrorCode *error_item = NULL;
 
 	egg_debug ("exit_text=%s", exit_text);
 
@@ -537,17 +539,20 @@ pk_client_finished_cb (DBusGProxy *proxy, const gchar *exit_text, guint runtime,
 			error = g_error_new (PK_CLIENT_ERROR, PK_CLIENT_ERROR_FAILED, "Failed: %s", exit_text);
 		}
 		pk_client_state_finish (state, error);
-		return;
+		goto out;
 	}
 
 	/* do we have to copy results? */
 	if (state->role == PK_ROLE_ENUM_DOWNLOAD_PACKAGES) {
 		pk_client_copy_downloaded (state);
-		return;
+		goto out;
 	}
 
 	/* we're done */
 	pk_client_state_finish (state, error);
+out:
+	if (error_item != NULL)
+		pk_item_error_code_unref (error_item);
 }
 
 /**
@@ -584,12 +589,16 @@ static void
 pk_client_package_cb (DBusGProxy *proxy, const gchar *info_text, const gchar *package_id, const gchar *summary, PkClientState *state)
 {
 	PkInfoEnum info_enum;
+	PkItemPackage *item;
 	g_return_if_fail (PK_IS_CLIENT (state->client));
 
 	/* add to results */
 	info_enum = pk_info_enum_from_text (info_text);
-	if (info_enum != PK_INFO_ENUM_FINISHED)
-		pk_results_add_package (state->results, info_enum, package_id, summary);
+	if (info_enum != PK_INFO_ENUM_FINISHED) {
+		item = pk_item_package_new (info_enum, package_id, summary);
+		pk_results_add_package (state->results, item);
+		pk_item_package_unref (item);
+	}
 
 	/* save progress */
 	g_object_set (state->progress,
@@ -701,8 +710,13 @@ pk_client_details_cb (DBusGProxy *proxy, const gchar *package_id, const gchar *l
 		      guint64 size, PkClientState *state)
 {
 	PkGroupEnum group_enum;
+	PkItemDetails *item;
 	group_enum = pk_group_enum_from_text (group_text);
-	pk_results_add_details (state->results, package_id, license, group_enum, description, url, size);
+
+	/* add to results */
+	item = pk_item_details_new (package_id, license, group_enum, description, url, size);
+	pk_results_add_details (state->results, item);
+	pk_item_details_unref (item);
 }
 
 /**
@@ -719,15 +733,19 @@ pk_client_update_detail_cb (DBusGProxy  *proxy, const gchar *package_id, const g
 	GDate *updated;
 	PkUpdateStateEnum state_enum;
 	PkRestartEnum restart_enum;
+	PkItemUpdateDetail *item;
 
 	restart_enum = pk_restart_enum_from_text (restart_text);
 	state_enum = pk_update_state_enum_from_text (state_text);
 	issued = pk_iso8601_to_date (issued_text);
 	updated = pk_iso8601_to_date (updated_text);
 
-	pk_results_add_update_detail (state->results, package_id, updates, obsoletes, vendor_url,
-				      bugzilla_url, cve_url, restart_enum, update_text, changelog,
-				      state_enum, issued, updated);
+	/* add to results */
+	item = pk_item_update_detail_new (package_id, updates, obsoletes, vendor_url,
+					  bugzilla_url, cve_url, restart_enum, update_text, changelog,
+					  state_enum, issued, updated);
+	pk_results_add_update_detail (state->results, item);
+	pk_item_update_detail_unref (item);
 
 	if (issued != NULL)
 		g_date_free (issued);
@@ -744,8 +762,13 @@ pk_client_transaction_cb (DBusGProxy *proxy, const gchar *old_tid, const gchar *
 			  const gchar *data, guint uid, const gchar *cmdline, PkClientState *state)
 {
 	PkRoleEnum role_enum;
+	PkItemTransaction *item;
 	role_enum = pk_role_enum_from_text (role_text);
-	pk_results_add_transaction (state->results, old_tid, timespec, succeeded, role_enum, duration, data, uid, cmdline);
+
+	/* add to results */
+	item = pk_item_transaction_new (old_tid, timespec, succeeded, role_enum, duration, data, uid, cmdline);
+	pk_results_add_transaction (state->results, item);
+	pk_item_transaction_unref (item);
 }
 
 /**
@@ -756,8 +779,13 @@ pk_client_distro_upgrade_cb (DBusGProxy *proxy, const gchar *type_text, const gc
 			     const gchar *summary, PkClientState *state)
 {
 	PkUpdateStateEnum type_enum;
+	PkItemDistroUpgrade *item;
 	type_enum = pk_update_state_enum_from_text (type_text);
-	pk_results_add_distro_upgrade (state->results, type_enum, name, summary);
+
+	/* add to results */
+	item = pk_item_distro_upgrade_new (type_enum, name, summary);
+	pk_results_add_distro_upgrade (state->results, item);
+	pk_item_distro_upgrade_unref (item);
 }
 
 /**
@@ -767,8 +795,13 @@ static void
 pk_client_require_restart_cb (DBusGProxy  *proxy, const gchar *restart_text, const gchar *package_id, PkClientState *state)
 {
 	PkRestartEnum restart_enum;
+	PkItemRequireRestart *item;
 	restart_enum = pk_restart_enum_from_text (restart_text);
-	pk_results_add_require_restart (state->results, restart_enum, package_id);
+
+	/* add to results */
+	item = pk_item_require_restart_new (restart_enum, package_id);
+	pk_results_add_require_restart (state->results, item);
+	pk_item_require_restart_unref (item);
 }
 
 /**
@@ -778,7 +811,12 @@ static void
 pk_client_category_cb (DBusGProxy  *proxy, const gchar *parent_id, const gchar *cat_id,
 		       const gchar *name, const gchar *summary, const gchar *icon, PkClientState *state)
 {
-	pk_results_add_category (state->results, parent_id, cat_id, name, summary, icon);
+	PkItemCategory *item;
+
+	/* add to results */
+	item = pk_item_category_new (parent_id, cat_id, name, summary, icon);
+	pk_results_add_category (state->results, item);
+	pk_item_category_unref (item);
 }
 
 /**
@@ -788,8 +826,13 @@ static void
 pk_client_files_cb (DBusGProxy *proxy, const gchar *package_id, const gchar *filelist, PkClientState *state)
 {
 	gchar **files;
+	PkItemFiles *item;
 	files = g_strsplit (filelist, ";", -1);
-	pk_results_add_files (state->results, package_id, files);
+
+	/* add to results */
+	item = pk_item_files_new (package_id, files);
+	pk_results_add_files (state->results, item);
+	pk_item_files_unref (item);
 	g_strfreev (files);
 }
 
@@ -803,9 +846,14 @@ pk_client_repo_signature_required_cb (DBusGProxy *proxy, const gchar *package_id
 				      const gchar *type_text, PkClientState *state)
 {
 	PkSigTypeEnum type_enum;
+	PkItemRepoSignatureRequired *item;
 	type_enum = pk_sig_type_enum_from_text (type_text);
-	pk_results_add_repo_signature_required (state->results, package_id, repository_name, key_url, key_userid,
-						key_id, key_fingerprint, key_timestamp, type_enum);
+
+	/* add to results */
+	item = pk_item_repo_signature_required_new (package_id, repository_name, key_url, key_userid,
+						    key_id, key_fingerprint, key_timestamp, type_enum);
+	pk_results_add_repo_signature_required (state->results, item);
+	pk_item_repo_signature_required_unref (item);
 }
 
 /**
@@ -815,7 +863,12 @@ static void
 pk_client_eula_required_cb (DBusGProxy *proxy, const gchar *eula_id, const gchar *package_id,
 			    const gchar *vendor_name, const gchar *license_agreement, PkClientState *state)
 {
-	pk_results_add_eula_required (state->results, eula_id, package_id, vendor_name, license_agreement);
+	PkItemEulaRequired *item;
+
+	/* add to results */
+	item = pk_item_eula_required_new (eula_id, package_id, vendor_name, license_agreement);
+	pk_results_add_eula_required (state->results, item);
+	pk_item_eula_required_unref (item);
 }
 
 /**
@@ -826,8 +879,13 @@ pk_client_media_change_required_cb (DBusGProxy *proxy, const gchar *media_type_t
 				    const gchar *media_id, const gchar *media_text, PkClientState *state)
 {
 	PkMediaTypeEnum media_type_enum;
+	PkItemMediaChangeRequired *item;
 	media_type_enum = pk_media_type_enum_from_text (media_type_text);
-	pk_results_add_media_change_required (state->results, media_type_enum, media_id, media_text);
+
+	/* add to results */
+	item = pk_item_media_change_required_new (media_type_enum, media_id, media_text);
+	pk_results_add_media_change_required (state->results, item);
+	pk_item_media_change_required_unref (item);
 }
 
 /**
@@ -837,7 +895,12 @@ static void
 pk_client_repo_detail_cb (DBusGProxy *proxy, const gchar *repo_id,
 			  const gchar *description, gboolean enabled, PkClientState *state)
 {
-	pk_results_add_repo_detail (state->results, repo_id, description, enabled);
+	PkItemRepoDetail *item;
+
+	/* add to results */
+	item = pk_item_repo_detail_new (repo_id, description, enabled);
+	pk_results_add_repo_detail (state->results, item);
+	pk_item_repo_detail_unref (item);
 }
 
 /**
@@ -847,8 +910,13 @@ static void
 pk_client_error_code_cb (DBusGProxy *proxy, const gchar *code_text, const gchar *details, PkClientState *state)
 {
 	PkErrorCodeEnum code_enum;
+	PkItemErrorCode *item;
 	code_enum = pk_error_enum_from_text (code_text);
-	pk_results_add_error_code (state->results, code_enum, details);
+
+	/* add to results */
+	item = pk_item_error_code_new (code_enum, details);
+	pk_results_add_error_code (state->results, item);
+	pk_item_error_code_unref (item);
 }
 
 /**
@@ -858,8 +926,13 @@ static void
 pk_client_message_cb (DBusGProxy  *proxy, const gchar *message_text, const gchar *details, PkClientState *state)
 {
 	PkMessageEnum message_enum;
+	PkItemMessage *item;
 	message_enum = pk_message_enum_from_text (message_text);
-	pk_results_add_message (state->results, message_enum, details);
+
+	/* add to results */
+	item = pk_item_message_new (message_enum, details);
+	pk_results_add_message (state->results, item);
+	pk_item_message_unref (item);
 }
 
 /**
@@ -3461,7 +3534,7 @@ pk_client_test_search_name_cb (GObject *object, GAsyncResult *res, EggTest *test
 	GError *error = NULL;
 	PkResults *results = NULL;
 	PkExitEnum exit_enum;
-	const PkItemErrorCode *error_item;
+	PkItemErrorCode *error_item = NULL;
 
 	/* get the results */
 	results = pk_client_generic_finish (client, res, &error);
@@ -3482,6 +3555,8 @@ pk_client_test_search_name_cb (GObject *object, GAsyncResult *res, EggTest *test
 	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);
 out:
+	if (error_item != NULL)
+		pk_item_error_code_unref (error_item);
 	if (results != NULL)
 		g_object_unref (results);
 	egg_test_loop_quit (test);
diff --git a/lib/packagekit-glib2/pk-item.c b/lib/packagekit-glib2/pk-item.c
index c3acde2..8320b54 100644
--- a/lib/packagekit-glib2/pk-item.c
+++ b/lib/packagekit-glib2/pk-item.c
@@ -33,7 +33,6 @@
 
 #include "egg-debug.h"
 
-
 /**
  * pk_item_package_ref:
  * @item: the #PkItemPackage
@@ -158,13 +157,8 @@ PkItemFiles *
 pk_item_files_ref (PkItemFiles *item)
 {
 	g_return_val_if_fail (item != NULL, NULL);
-
-	/* post decrement */
-	if (item->refcount-- != 0)
-		return item;
-
-	g_strfreev (item->files);
-	return NULL;
+	item->refcount++;
+	return item;
 }
 
 /**
@@ -606,6 +600,366 @@ pk_item_message_unref (PkItemMessage *item)
 	return NULL;
 }
 
+
+/**
+ * pk_item_package_new:
+ * @results: a valid #PkResults instance
+ *
+ * Adds a package to the results set.
+ *
+ * Return value: %TRUE if the value was set
+ **/
+PkItemPackage *
+pk_item_package_new (PkInfoEnum info_enum, const gchar *package_id, const gchar *summary)
+{
+	PkItemPackage *item;
+
+	g_return_val_if_fail (info_enum != PK_INFO_ENUM_UNKNOWN, FALSE);
+	g_return_val_if_fail (package_id != NULL, FALSE);
+
+	/* copy and add to array */
+	item = g_new0 (PkItemPackage, 1);
+	item->info_enum = info_enum;
+	item->package_id = g_strdup (package_id);
+	item->summary = g_strdup (summary);
+	return item;
+}
+
+/**
+ * pk_item_details_new:
+ * @results: a valid #PkResults instance
+ *
+ * Adds some package details to the results set.
+ *
+ * Return value: %TRUE if the value was set
+ **/
+PkItemDetails *
+pk_item_details_new (const gchar *package_id, const gchar *license,
+		     PkGroupEnum group_enum, const gchar *description, const gchar *url, guint64 size)
+{
+	PkItemDetails *item;
+
+	g_return_val_if_fail (package_id != NULL, FALSE);
+
+	/* copy and add to array */
+	item = g_new0 (PkItemDetails, 1);
+	item->package_id = g_strdup (package_id);
+	item->license = g_strdup (license);
+	item->group_enum = group_enum;
+	item->description = g_strdup (description);
+	item->url = g_strdup (url);
+	item->size = size;
+	return item;
+}
+
+/**
+ * pk_item_update_detail_new:
+ * @results: a valid #PkResults instance
+ *
+ * Adds some update details to the results set.
+ *
+ * Return value: %TRUE if the value was set
+ **/
+PkItemUpdateDetail *
+pk_item_update_detail_new (const gchar *package_id, const gchar *updates,
+			   const gchar *obsoletes, const gchar *vendor_url, const gchar *bugzilla_url,
+			   const gchar *cve_url, PkRestartEnum restart_enum, const gchar *update_text,
+			   const gchar *changelog, PkUpdateStateEnum state_enum, GDate *issued, GDate *updated)
+{
+	PkItemUpdateDetail *item;
+
+	g_return_val_if_fail (package_id != NULL, FALSE);
+
+	/* copy and add to array */
+	item = g_new0 (PkItemUpdateDetail, 1);
+	item->package_id = g_strdup (package_id);
+	item->updates = g_strdup (updates);
+	item->obsoletes = g_strdup (obsoletes);
+	item->vendor_url = g_strdup (vendor_url);
+	item->bugzilla_url = g_strdup (bugzilla_url);
+	item->cve_url = g_strdup (cve_url);
+	item->restart_enum = restart_enum;
+	item->update_text = g_strdup (update_text);
+	item->changelog = g_strdup (changelog);
+	item->state_enum = state_enum;
+	if (issued != NULL)
+		item->issued = g_date_new_dmy (issued->day, issued->month, issued->year);
+	if (updated != NULL)
+		item->updated = g_date_new_dmy (updated->day, updated->month, updated->year);
+	return item;
+}
+
+/**
+ * pk_item_category_new:
+ * @results: a valid #PkResults instance
+ *
+ * Adds a category item to the results set.
+ *
+ * Return value: %TRUE if the value was set
+ **/
+PkItemCategory *
+pk_item_category_new (const gchar *parent_id, const gchar *cat_id, const gchar *name,
+		      const gchar *summary, const gchar *icon)
+{
+	PkItemCategory *item;
+
+	g_return_val_if_fail (name != NULL, FALSE);
+
+	/* copy and add to array */
+	item = g_new0 (PkItemCategory, 1);
+	item->parent_id = g_strdup (parent_id);
+	item->cat_id = g_strdup (cat_id);
+	item->name = g_strdup (name);
+	item->summary = g_strdup (summary);
+	item->icon = g_strdup (icon);
+	return item;
+}
+
+/**
+ * pk_item_distro_upgrade_new:
+ * @results: a valid #PkResults instance
+ *
+ * Adds a distribution upgrade item to the results set.
+ *
+ * Return value: %TRUE if the value was set
+ **/
+PkItemDistroUpgrade *
+pk_item_distro_upgrade_new (PkUpdateStateEnum state_enum, const gchar *name, const gchar *summary)
+{
+	PkItemDistroUpgrade *item;
+
+	g_return_val_if_fail (state_enum != PK_UPDATE_STATE_ENUM_UNKNOWN, FALSE);
+	g_return_val_if_fail (name != NULL, FALSE);
+
+	/* copy and add to array */
+	item = g_new0 (PkItemDistroUpgrade, 1);
+	item->state = state_enum;
+	item->name = g_strdup (name);
+	item->summary = g_strdup (summary);
+	return item;
+}
+
+/**
+ * pk_item_require_restart_new:
+ * @results: a valid #PkResults instance
+ *
+ * Adds a require restart item to the results set.
+ *
+ * Return value: %TRUE if the value was set
+ **/
+PkItemRequireRestart *
+pk_item_require_restart_new (PkRestartEnum restart_enum, const gchar *package_id)
+{
+	PkItemRequireRestart *item;
+
+	g_return_val_if_fail (restart_enum != PK_RESTART_ENUM_UNKNOWN, FALSE);
+	g_return_val_if_fail (package_id != NULL, FALSE);
+
+	/* copy and add to array */
+	item = g_new0 (PkItemRequireRestart, 1);
+	item->restart = restart_enum;
+	item->package_id = g_strdup (package_id);
+	return item;
+}
+
+/**
+ * pk_item_transaction_new:
+ * @results: a valid #PkResults instance
+ *
+ * Adds a transaction item to the results set.
+ *
+ * Return value: %TRUE if the value was set
+ **/
+PkItemTransaction *
+pk_item_transaction_new (const gchar *tid, const gchar *timespec,
+			 gboolean succeeded, PkRoleEnum role_enum,
+			 guint duration, const gchar *data,
+			 guint uid, const gchar *cmdline)
+{
+	PkItemTransaction *item;
+
+	g_return_val_if_fail (role_enum != PK_ROLE_ENUM_UNKNOWN, FALSE);
+	g_return_val_if_fail (tid != NULL, FALSE);
+
+	/* copy and add to array */
+	item = g_new0 (PkItemTransaction, 1);
+	item->tid = g_strdup (tid);
+	item->timespec = g_strdup (timespec);
+	item->succeeded = succeeded;
+	item->role = role_enum;
+	item->duration = duration;
+	item->data = g_strdup (data);
+	item->uid = uid;
+	item->cmdline = g_strdup (cmdline);
+	return item;
+}
+
+/**
+ * pk_item_files_new:
+ * @results: a valid #PkResults instance
+ *
+ * Adds some files details to the results set.
+ *
+ * Return value: %TRUE if the value was set
+ **/
+PkItemFiles *
+pk_item_files_new (const gchar *package_id, gchar **files)
+{
+	PkItemFiles *item;
+
+	g_return_val_if_fail (package_id != NULL, FALSE);
+	g_return_val_if_fail (files != NULL, FALSE);
+
+	/* copy and add to array */
+	item = g_new0 (PkItemFiles, 1);
+	item->package_id = g_strdup (package_id);
+	item->files = g_strdupv (files);
+	return item;
+}
+
+/**
+ * pk_item_repo_signature_required_new:
+ * @results: a valid #PkResults instance
+ *
+ * Adds some repository signature details to the results set.
+ *
+ * Return value: %TRUE if the value was set
+ **/
+PkItemRepoSignatureRequired *
+pk_item_repo_signature_required_new (const gchar *package_id, const gchar *repository_name,
+				     const gchar *key_url, const gchar *key_userid, const gchar *key_id,
+				     const gchar *key_fingerprint, const gchar *key_timestamp,
+				     PkSigTypeEnum type_enum)
+{
+	PkItemRepoSignatureRequired *item;
+
+	g_return_val_if_fail (package_id != NULL, FALSE);
+
+	/* copy and add to array */
+	item = g_new0 (PkItemRepoSignatureRequired, 1);
+	item->package_id = g_strdup (package_id);
+	item->repository_name = g_strdup (repository_name);
+	item->key_url = g_strdup (key_url);
+	item->key_userid = g_strdup (key_userid);
+	item->key_id = g_strdup (key_id);
+	item->key_fingerprint = g_strdup (key_fingerprint);
+	item->key_timestamp = g_strdup (key_timestamp);
+	item->type = type_enum;
+	return item;
+}
+
+/**
+ * pk_item_eula_required_new:
+ * @results: a valid #PkResults instance
+ *
+ * Adds some EULA details to the results set.
+ *
+ * Return value: %TRUE if the value was set
+ **/
+PkItemEulaRequired *
+pk_item_eula_required_new (const gchar *eula_id, const gchar *package_id,
+			   const gchar *vendor_name, const gchar *license_agreement)
+{
+	PkItemEulaRequired *item;
+
+	g_return_val_if_fail (eula_id != NULL, FALSE);
+
+	/* copy and add to array */
+	item = g_new0 (PkItemEulaRequired, 1);
+	item->eula_id = g_strdup (eula_id);
+	item->package_id = g_strdup (package_id);
+	item->vendor_name = g_strdup (vendor_name);
+	item->license_agreement = g_strdup (license_agreement);
+	return item;
+}
+
+/**
+ * pk_item_media_change_required_new:
+ * @results: a valid #PkResults instance
+ *
+ * Adds some media change details to the results set.
+ *
+ * Return value: %TRUE if the value was set
+ **/
+PkItemMediaChangeRequired *
+pk_item_media_change_required_new (PkMediaTypeEnum media_type_enum, const gchar *media_id, const gchar *media_text)
+{
+	PkItemMediaChangeRequired *item;
+
+	g_return_val_if_fail (media_id != NULL, FALSE);
+
+	/* copy and add to array */
+	item = g_new0 (PkItemMediaChangeRequired, 1);
+	item->media_type = media_type_enum;
+	item->media_id = g_strdup (media_id);
+	item->media_text = g_strdup (media_text);
+	return item;
+}
+
+/**
+ * pk_item_repo_detail_new:
+ * @results: a valid #PkResults instance
+ *
+ * Adds some repository details to the results set.
+ *
+ * Return value: %TRUE if the value was set
+ **/
+PkItemRepoDetail *
+pk_item_repo_detail_new (const gchar *repo_id, const gchar *description, gboolean enabled)
+{
+	PkItemRepoDetail *item;
+
+	g_return_val_if_fail (repo_id != NULL, FALSE);
+
+	/* copy and add to array */
+	item = g_new0 (PkItemRepoDetail, 1);
+	item->repo_id = g_strdup (repo_id);
+	item->description = g_strdup (description);
+	item->enabled = enabled;
+	return item;
+}
+
+/**
+ * pk_item_error_code_new:
+ * @results: a valid #PkResults instance
+ *
+ * Adds some error details to the results set.
+ *
+ * Return value: %TRUE if the value was set
+ **/
+PkItemErrorCode *
+pk_item_error_code_new (PkErrorCodeEnum code_enum, const gchar *details)
+{
+	PkItemErrorCode *item;
+
+	/* copy and add to array */
+	item = g_new0 (PkItemErrorCode, 1);
+	item->code = code_enum;
+	item->details = g_strdup (details);
+	return item;
+}
+
+/**
+ * pk_item_message_new:
+ * @results: a valid #PkResults instance
+ *
+ * Adds some message details to the results set.
+ *
+ * Return value: %TRUE if the value was set
+ **/
+PkItemMessage *
+pk_item_message_new (PkMessageEnum message_enum, const gchar *details)
+{
+	PkItemMessage *item;
+
+	/* copy and add to array */
+	item = g_new0 (PkItemMessage, 1);
+	item->message = message_enum;
+	item->details = g_strdup (details);
+	return item;
+}
+
+
 /***************************************************************************
  ***                          MAKE CHECK TESTS                           ***
  ***************************************************************************/
@@ -616,10 +970,38 @@ void
 pk_item_test (gpointer user_data)
 {
 	EggTest *test = (EggTest *) user_data;
+	PkItemPackage *item;
 
-	if (!egg_test_start (test, "PkResults"))
+	if (!egg_test_start (test, "PkItem"))
 		return;
 
+	item = pk_item_package_new (PK_INFO_ENUM_AVAILABLE, "gnome-power-manager;0.1.2;i386;fedora", "Power manager for GNOME");
+
+	/************************************************************/
+	egg_test_title (test, "check refcount");
+	egg_test_assert (test, (item->refcount == 0));
+
+	/************************************************************/
+	egg_test_title (test, "check set");
+	egg_test_assert (test, (item->info_enum == PK_INFO_ENUM_AVAILABLE &&
+				g_strcmp0 ("gnome-power-manager;0.1.2;i386;fedora", item->package_id) == 0 &&
+				g_strcmp0 ("Power manager for GNOME", item->summary) == 0));
+
+	/************************************************************/
+	egg_test_title (test, "check refcount up");
+	item = pk_item_package_ref (item);
+	egg_test_assert (test, (item->refcount == 1));
+
+	/************************************************************/
+	egg_test_title (test, "check refcount down");
+	item = pk_item_package_unref (item);
+	egg_test_assert (test, (item->refcount == 0));
+
+	/************************************************************/
+	egg_test_title (test, "check NULL");
+	item = pk_item_package_unref (item);
+	egg_test_assert (test, (item == NULL));
+
 	egg_test_end (test);
 }
 #endif
diff --git a/lib/packagekit-glib2/pk-item.h b/lib/packagekit-glib2/pk-item.h
index e7d9df2..a0eb9e5 100644
--- a/lib/packagekit-glib2/pk-item.h
+++ b/lib/packagekit-glib2/pk-item.h
@@ -237,6 +237,8 @@ typedef struct
 } PkItemMessage;
 
 void			 pk_item_test				(gpointer		 user_data);
+
+/* refcount */
 PkItemPackage		*pk_item_package_ref			(PkItemPackage		*item);
 PkItemPackage		*pk_item_package_unref			(PkItemPackage		*item);
 PkItemDetails		*pk_item_details_ref			(PkItemDetails		*item);
@@ -266,6 +268,71 @@ PkItemErrorCode		*pk_item_error_code_unref		(PkItemErrorCode	*item);
 PkItemMessage		*pk_item_message_ref			(PkItemMessage		*item);
 PkItemMessage		*pk_item_message_unref			(PkItemMessage		*item);
 
+/* create */
+PkItemPackage		*pk_item_package_new			(PkInfoEnum		 info_enum,
+								 const gchar		*package_id,
+								 const gchar		*summary);
+PkItemDetails		*pk_item_details_new			(const gchar		*package_id,
+								 const gchar		*license,
+								 PkGroupEnum		 group_enum,
+								 const gchar		*description,
+								 const gchar		*url,
+								 guint64		 size);
+PkItemUpdateDetail	*pk_item_update_detail_new		(const gchar		*package_id,
+								 const gchar		*updates,
+								 const gchar		*obsoletes,
+								 const gchar		*vendor_url,
+								 const gchar		*bugzilla_url,
+								 const gchar		*cve_url,
+								 PkRestartEnum		 restart_enum,
+								 const gchar		*update_text,
+								 const gchar		*changelog,
+								 PkUpdateStateEnum	 state_enum,
+								 GDate			*issued,
+								 GDate			*updated);
+PkItemCategory		*pk_item_category_new			(const gchar		*parent_id,
+								 const gchar		*cat_id,
+								 const gchar		*name,
+								 const gchar		*summary,
+								 const gchar		*icon);
+PkItemDistroUpgrade	*pk_item_distro_upgrade_new		(PkUpdateStateEnum	 state_enum,
+								 const gchar		*name,
+								 const gchar		*summary);
+PkItemRequireRestart	*pk_item_require_restart_new		(PkRestartEnum		 restart_enum,
+								 const gchar		*package_id);
+PkItemTransaction	*pk_item_transaction_new		(const gchar		*tid,
+								 const gchar		*timespec,
+								 gboolean		 succeeded,
+								 PkRoleEnum		 role_enum,
+								 guint			 duration,
+								 const gchar		*data,
+								 guint			 uid,
+								 const gchar		*cmdline);
+PkItemFiles		*pk_item_files_new			(const gchar		*package_id,
+								 gchar			**files);
+PkItemRepoSignatureRequired *pk_item_repo_signature_required_new (const gchar		*package_id,
+								 const gchar		*repository_name,
+								 const gchar		*key_url,
+								 const gchar		*key_userid,
+								 const gchar		*key_id,
+								 const gchar		*key_fingerprint,
+								 const gchar		*key_timestamp,
+								 PkSigTypeEnum		 type_enum);
+PkItemEulaRequired	*pk_item_eula_required_new		(const gchar		*eula_id,
+								 const gchar		*package_id,
+								 const gchar		*vendor_name,
+								 const gchar		*license_agreement);
+PkItemMediaChangeRequired *pk_item_media_change_required_new	(PkMediaTypeEnum	 media_type_enum,
+								 const gchar		*media_id,
+								 const gchar		*media_text);
+PkItemRepoDetail	*pk_item_repo_detail_new		(const gchar		*repo_id,
+								 const gchar		*description,
+								 gboolean		 enabled);
+PkItemErrorCode		*pk_item_error_code_new			(PkErrorCodeEnum	 code_enum,
+								 const gchar		*details);
+PkItemMessage		*pk_item_message_new			(PkMessageEnum		 message_enum,
+								 const gchar		*details);
+
 G_END_DECLS
 
 #endif /* __PK_ITEM_H */
diff --git a/lib/packagekit-glib2/pk-results.c b/lib/packagekit-glib2/pk-results.c
index 7a41e3f..9b97f03 100644
--- a/lib/packagekit-glib2/pk-results.c
+++ b/lib/packagekit-glib2/pk-results.c
@@ -132,26 +132,20 @@ pk_results_set_exit_code (PkResults *results, PkExitEnum exit_enum)
 /**
  * pk_results_add_package:
  * @results: a valid #PkResults instance
+ * @item: the object to add to the array
  *
  * Adds a package to the results set.
  *
  * Return value: %TRUE if the value was set
  **/
 gboolean
-pk_results_add_package (PkResults *results, PkInfoEnum info_enum, const gchar *package_id, const gchar *summary)
+pk_results_add_package (PkResults *results, PkItemPackage *item)
 {
-	PkItemPackage *item;
-
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
-	g_return_val_if_fail (info_enum != PK_INFO_ENUM_UNKNOWN, FALSE);
-	g_return_val_if_fail (package_id != NULL, FALSE);
+	g_return_val_if_fail (item != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkItemPackage, 1);
-	item->info_enum = info_enum;
-	item->package_id = g_strdup (package_id);
-	item->summary = g_strdup (summary);
-	g_ptr_array_add (results->priv->package_array, item);
+	g_ptr_array_add (results->priv->package_array, pk_item_package_ref (item));
 
 	return TRUE;
 }
@@ -159,29 +153,20 @@ pk_results_add_package (PkResults *results, PkInfoEnum info_enum, const gchar *p
 /**
  * pk_results_add_details:
  * @results: a valid #PkResults instance
+ * @item: the object to add to the array
  *
  * Adds some package details to the results set.
  *
  * Return value: %TRUE if the value was set
  **/
 gboolean
-pk_results_add_details (PkResults *results, const gchar	*package_id, const gchar *license,
-			PkGroupEnum group_enum, const gchar *description, const gchar *url, guint64 size)
+pk_results_add_details (PkResults *results, PkItemDetails *item)
 {
-	PkItemDetails *item;
-
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
-	g_return_val_if_fail (package_id != NULL, FALSE);
+	g_return_val_if_fail (item != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkItemDetails, 1);
-	item->package_id = g_strdup (package_id);
-	item->license = g_strdup (license);
-	item->group_enum = group_enum;
-	item->description = g_strdup (description);
-	item->url = g_strdup (url);
-	item->size = size;
-	g_ptr_array_add (results->priv->details_array, item);
+	g_ptr_array_add (results->priv->details_array, pk_item_details_ref (item));
 
 	return TRUE;
 }
@@ -189,39 +174,20 @@ pk_results_add_details (PkResults *results, const gchar	*package_id, const gchar
 /**
  * pk_results_add_update_detail:
  * @results: a valid #PkResults instance
+ * @item: the object to add to the array
  *
  * Adds some update details to the results set.
  *
  * Return value: %TRUE if the value was set
  **/
 gboolean
-pk_results_add_update_detail (PkResults *results, const gchar *package_id, const gchar *updates,
-			      const gchar *obsoletes, const gchar *vendor_url, const gchar *bugzilla_url,
-			      const gchar *cve_url, PkRestartEnum restart_enum, const gchar *update_text,
-			      const gchar *changelog, PkUpdateStateEnum state_enum, GDate *issued, GDate *updated)
+pk_results_add_update_detail (PkResults *results, PkItemUpdateDetail *item)
 {
-	PkItemUpdateDetail *item;
-
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
-	g_return_val_if_fail (package_id != NULL, FALSE);
+	g_return_val_if_fail (item != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkItemUpdateDetail, 1);
-	item->package_id = g_strdup (package_id);
-	item->updates = g_strdup (updates);
-	item->obsoletes = g_strdup (obsoletes);
-	item->vendor_url = g_strdup (vendor_url);
-	item->bugzilla_url = g_strdup (bugzilla_url);
-	item->cve_url = g_strdup (cve_url);
-	item->restart_enum = restart_enum;
-	item->update_text = g_strdup (update_text);
-	item->changelog = g_strdup (changelog);
-	item->state_enum = state_enum;
-	if (issued != NULL)
-		item->issued = g_date_new_dmy (issued->day, issued->month, issued->year);
-	if (updated != NULL)
-		item->updated = g_date_new_dmy (updated->day, updated->month, updated->year);
-	g_ptr_array_add (results->priv->update_detail_array, item);
+	g_ptr_array_add (results->priv->update_detail_array, pk_item_update_detail_ref (item));
 
 	return TRUE;
 }
@@ -229,28 +195,20 @@ pk_results_add_update_detail (PkResults *results, const gchar *package_id, const
 /**
  * pk_results_add_category:
  * @results: a valid #PkResults instance
+ * @item: the object to add to the array
  *
  * Adds a category item to the results set.
  *
  * Return value: %TRUE if the value was set
  **/
 gboolean
-pk_results_add_category (PkResults *results, const gchar *parent_id, const gchar *cat_id, const gchar *name,
-			 const gchar *summary, const gchar *icon)
+pk_results_add_category (PkResults *results, PkItemCategory *item)
 {
-	PkItemCategory *item;
-
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
-	g_return_val_if_fail (name != NULL, FALSE);
+	g_return_val_if_fail (item != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkItemCategory, 1);
-	item->parent_id = g_strdup (parent_id);
-	item->cat_id = g_strdup (cat_id);
-	item->name = g_strdup (name);
-	item->summary = g_strdup (summary);
-	item->icon = g_strdup (icon);
-	g_ptr_array_add (results->priv->category_array, item);
+	g_ptr_array_add (results->priv->category_array, pk_item_category_ref (item));
 
 	return TRUE;
 }
@@ -258,26 +216,20 @@ pk_results_add_category (PkResults *results, const gchar *parent_id, const gchar
 /**
  * pk_results_add_distro_upgrade:
  * @results: a valid #PkResults instance
+ * @item: the object to add to the array
  *
  * Adds a distribution upgrade item to the results set.
  *
  * Return value: %TRUE if the value was set
  **/
 gboolean
-pk_results_add_distro_upgrade (PkResults *results, PkUpdateStateEnum state_enum, const gchar *name, const gchar *summary)
+pk_results_add_distro_upgrade (PkResults *results, PkItemDistroUpgrade *item)
 {
-	PkItemDistroUpgrade *item;
-
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
-	g_return_val_if_fail (state_enum != PK_UPDATE_STATE_ENUM_UNKNOWN, FALSE);
-	g_return_val_if_fail (name != NULL, FALSE);
+	g_return_val_if_fail (item != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkItemDistroUpgrade, 1);
-	item->state = state_enum;
-	item->name = g_strdup (name);
-	item->summary = g_strdup (summary);
-	g_ptr_array_add (results->priv->distro_upgrade_array, item);
+	g_ptr_array_add (results->priv->distro_upgrade_array, pk_item_distro_upgrade_ref (item));
 
 	return TRUE;
 }
@@ -285,25 +237,20 @@ pk_results_add_distro_upgrade (PkResults *results, PkUpdateStateEnum state_enum,
 /**
  * pk_results_add_require_restart:
  * @results: a valid #PkResults instance
+ * @item: the object to add to the array
  *
  * Adds a require restart item to the results set.
  *
  * Return value: %TRUE if the value was set
  **/
 gboolean
-pk_results_add_require_restart (PkResults *results, PkRestartEnum restart_enum, const gchar *package_id)
+pk_results_add_require_restart (PkResults *results, PkItemRequireRestart *item)
 {
-	PkItemRequireRestart *item;
-
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
-	g_return_val_if_fail (restart_enum != PK_RESTART_ENUM_UNKNOWN, FALSE);
-	g_return_val_if_fail (package_id != NULL, FALSE);
+	g_return_val_if_fail (item != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkItemRequireRestart, 1);
-	item->restart = restart_enum;
-	item->package_id = g_strdup (package_id);
-	g_ptr_array_add (results->priv->require_restart_array, item);
+	g_ptr_array_add (results->priv->require_restart_array, pk_item_require_restart_ref (item));
 
 	return TRUE;
 }
@@ -311,34 +258,20 @@ pk_results_add_require_restart (PkResults *results, PkRestartEnum restart_enum,
 /**
  * pk_results_add_transaction:
  * @results: a valid #PkResults instance
+ * @item: the object to add to the array
  *
  * Adds a transaction item to the results set.
  *
  * Return value: %TRUE if the value was set
  **/
 gboolean
-pk_results_add_transaction (PkResults *results, const gchar *tid, const gchar *timespec,
-			    gboolean succeeded, PkRoleEnum role_enum,
-			    guint duration, const gchar *data,
-			    guint uid, const gchar *cmdline)
+pk_results_add_transaction (PkResults *results, PkItemTransaction *item)
 {
-	PkItemTransaction *item;
-
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
-	g_return_val_if_fail (role_enum != PK_ROLE_ENUM_UNKNOWN, FALSE);
-	g_return_val_if_fail (tid != NULL, FALSE);
+	g_return_val_if_fail (item != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkItemTransaction, 1);
-	item->tid = g_strdup (tid);
-	item->timespec = g_strdup (timespec);
-	item->succeeded = succeeded;
-	item->role = role_enum;
-	item->duration = duration;
-	item->data = g_strdup (data);
-	item->uid = uid;
-	item->cmdline = g_strdup (cmdline);
-	g_ptr_array_add (results->priv->transaction_array, item);
+	g_ptr_array_add (results->priv->transaction_array, pk_item_transaction_ref (item));
 
 	return TRUE;
 }
@@ -346,25 +279,20 @@ pk_results_add_transaction (PkResults *results, const gchar *tid, const gchar *t
 /**
  * pk_results_add_files:
  * @results: a valid #PkResults instance
+ * @item: the object to add to the array
  *
  * Adds some files details to the results set.
  *
  * Return value: %TRUE if the value was set
  **/
 gboolean
-pk_results_add_files (PkResults *results, const gchar *package_id, gchar **files)
+pk_results_add_files (PkResults *results, PkItemFiles *item)
 {
-	PkItemFiles *item;
-
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
-	g_return_val_if_fail (package_id != NULL, FALSE);
-	g_return_val_if_fail (files != NULL, FALSE);
+	g_return_val_if_fail (item != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkItemFiles, 1);
-	item->package_id = g_strdup (package_id);
-	item->files = g_strdupv (files);
-	g_ptr_array_add (results->priv->files_array, item);
+	g_ptr_array_add (results->priv->files_array, pk_item_files_ref (item));
 
 	return TRUE;
 }
@@ -372,33 +300,20 @@ pk_results_add_files (PkResults *results, const gchar *package_id, gchar **files
 /**
  * pk_results_add_repo_signature_required:
  * @results: a valid #PkResults instance
+ * @item: the object to add to the array
  *
  * Adds some repository signature details to the results set.
  *
  * Return value: %TRUE if the value was set
  **/
 gboolean
-pk_results_add_repo_signature_required (PkResults *results, const gchar *package_id, const gchar *repository_name,
-					const gchar *key_url, const gchar *key_userid, const gchar *key_id,
-					const gchar *key_fingerprint, const gchar *key_timestamp,
-					PkSigTypeEnum type_enum)
+pk_results_add_repo_signature_required (PkResults *results, PkItemRepoSignatureRequired *item)
 {
-	PkItemRepoSignatureRequired *item;
-
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
-	g_return_val_if_fail (package_id != NULL, FALSE);
+	g_return_val_if_fail (item != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkItemRepoSignatureRequired, 1);
-	item->package_id = g_strdup (package_id);
-	item->repository_name = g_strdup (repository_name);
-	item->key_url = g_strdup (key_url);
-	item->key_userid = g_strdup (key_userid);
-	item->key_id = g_strdup (key_id);
-	item->key_fingerprint = g_strdup (key_fingerprint);
-	item->key_timestamp = g_strdup (key_timestamp);
-	item->type = type_enum;
-	g_ptr_array_add (results->priv->repo_signature_required_array, item);
+	g_ptr_array_add (results->priv->repo_signature_required_array, pk_item_repo_signature_required_ref (item));
 
 	return TRUE;
 }
@@ -406,27 +321,20 @@ pk_results_add_repo_signature_required (PkResults *results, const gchar *package
 /**
  * pk_results_add_eula_required:
  * @results: a valid #PkResults instance
+ * @item: the object to add to the array
  *
  * Adds some EULA details to the results set.
  *
  * Return value: %TRUE if the value was set
  **/
 gboolean
-pk_results_add_eula_required (PkResults *results, const gchar *eula_id, const gchar *package_id,
-			      const gchar *vendor_name, const gchar *license_agreement)
+pk_results_add_eula_required (PkResults *results, PkItemEulaRequired *item)
 {
-	PkItemEulaRequired *item;
-
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
-	g_return_val_if_fail (eula_id != NULL, FALSE);
+	g_return_val_if_fail (item != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkItemEulaRequired, 1);
-	item->eula_id = g_strdup (eula_id);
-	item->package_id = g_strdup (package_id);
-	item->vendor_name = g_strdup (vendor_name);
-	item->license_agreement = g_strdup (license_agreement);
-	g_ptr_array_add (results->priv->eula_required_array, item);
+	g_ptr_array_add (results->priv->eula_required_array, pk_item_eula_required_ref (item));
 
 	return TRUE;
 }
@@ -434,26 +342,20 @@ pk_results_add_eula_required (PkResults *results, const gchar *eula_id, const gc
 /**
  * pk_results_add_media_change_required:
  * @results: a valid #PkResults instance
+ * @item: the object to add to the array
  *
  * Adds some media change details to the results set.
  *
  * Return value: %TRUE if the value was set
  **/
 gboolean
-pk_results_add_media_change_required (PkResults *results, PkMediaTypeEnum media_type_enum,
-				      const gchar *media_id, const gchar *media_text)
+pk_results_add_media_change_required (PkResults *results, PkItemMediaChangeRequired *item)
 {
-	PkItemMediaChangeRequired *item;
-
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
-	g_return_val_if_fail (media_id != NULL, FALSE);
+	g_return_val_if_fail (item != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkItemMediaChangeRequired, 1);
-	item->media_type = media_type_enum;
-	item->media_id = g_strdup (media_id);
-	item->media_text = g_strdup (media_text);
-	g_ptr_array_add (results->priv->media_change_required_array, item);
+	g_ptr_array_add (results->priv->media_change_required_array, pk_item_media_change_required_ref (item));
 
 	return TRUE;
 }
@@ -461,26 +363,20 @@ pk_results_add_media_change_required (PkResults *results, PkMediaTypeEnum media_
 /**
  * pk_results_add_repo_detail:
  * @results: a valid #PkResults instance
+ * @item: the object to add to the array
  *
  * Adds some repository details to the results set.
  *
  * Return value: %TRUE if the value was set
  **/
 gboolean
-pk_results_add_repo_detail (PkResults *results, const gchar *repo_id,
-			    const gchar *description, gboolean enabled)
+pk_results_add_repo_detail (PkResults *results, PkItemRepoDetail *item)
 {
-	PkItemRepoDetail *item;
-
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
-	g_return_val_if_fail (repo_id != NULL, FALSE);
+	g_return_val_if_fail (item != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkItemRepoDetail, 1);
-	item->repo_id = g_strdup (repo_id);
-	item->description = g_strdup (description);
-	item->enabled = enabled;
-	g_ptr_array_add (results->priv->repo_detail_array, item);
+	g_ptr_array_add (results->priv->repo_detail_array, pk_item_repo_detail_ref (item));
 
 	return TRUE;
 }
@@ -488,23 +384,20 @@ pk_results_add_repo_detail (PkResults *results, const gchar *repo_id,
 /**
  * pk_results_add_error_code:
  * @results: a valid #PkResults instance
+ * @item: the object to add to the array
  *
  * Adds some error details to the results set.
  *
  * Return value: %TRUE if the value was set
  **/
 gboolean
-pk_results_add_error_code (PkResults *results, PkErrorCodeEnum code_enum, const gchar *details)
+pk_results_add_error_code (PkResults *results, PkItemErrorCode *item)
 {
-	PkItemErrorCode *item;
-
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
+	g_return_val_if_fail (item != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkItemErrorCode, 1);
-	item->code = code_enum;
-	item->details = g_strdup (details);
-	g_ptr_array_add (results->priv->error_code_array, item);
+	g_ptr_array_add (results->priv->error_code_array, pk_item_error_code_ref (item));
 
 	return TRUE;
 }
@@ -512,23 +405,20 @@ pk_results_add_error_code (PkResults *results, PkErrorCodeEnum code_enum, const
 /**
  * pk_results_add_message:
  * @results: a valid #PkResults instance
+ * @item: the object to add to the array
  *
  * Adds some message details to the results set.
  *
  * Return value: %TRUE if the value was set
  **/
 gboolean
-pk_results_add_message (PkResults *results, PkMessageEnum message_enum, const gchar *details)
+pk_results_add_message (PkResults *results, PkItemMessage *item)
 {
-	PkItemMessage *item;
-
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
+	g_return_val_if_fail (item != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkItemMessage, 1);
-	item->message = message_enum;
-	item->details = g_strdup (details);
-	g_ptr_array_add (results->priv->message_array, item);
+	g_ptr_array_add (results->priv->message_array, pk_item_message_ref (item));
 
 	return TRUE;
 }
@@ -831,19 +721,21 @@ pk_results_get_error_code_array (PkResults *results)
  *
  * Gets the last error code from the transaction.
  *
- * Return value: A #PkItemErrorCode, or %NULL
+ * Return value: A #PkItemErrorCode, or %NULL, free with pk_item_error_code_unref()
  **/
-const PkItemErrorCode *
+PkItemErrorCode *
 pk_results_get_error_code (PkResults *results)
 {
 	GPtrArray *array;
+	PkItemErrorCode *item;
 
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 
 	array = results->priv->error_code_array;
 	if (array->len == 0)
 		return NULL;
-	return g_ptr_array_index (array, 0);
+	item = g_ptr_array_index (array, 0);
+	return pk_item_error_code_ref (item);
 }
 
 /**
@@ -995,7 +887,9 @@ pk_results_test (gpointer user_data)
 
 	/************************************************************/
 	egg_test_title (test, "add package");
-	ret = pk_results_add_package (results, PK_INFO_ENUM_AVAILABLE, "gnome-power-manager;0.1.2;i386;fedora", "Power manager for GNOME");
+	item = pk_item_package_new (PK_INFO_ENUM_AVAILABLE, "gnome-power-manager;0.1.2;i386;fedora", "Power manager for GNOME");
+	ret = pk_results_add_package (results, item);
+	pk_item_package_unref (item);
 	egg_test_assert (test, ret);
 
 	/************************************************************/
diff --git a/lib/packagekit-glib2/pk-results.h b/lib/packagekit-glib2/pk-results.h
index f469d5e..f9179a7 100644
--- a/lib/packagekit-glib2/pk-results.h
+++ b/lib/packagekit-glib2/pk-results.h
@@ -79,87 +79,38 @@ gboolean	 pk_results_set_exit_code		(PkResults		*results,
 
 /* add */
 gboolean	 pk_results_add_package			(PkResults		*results,
-							 PkInfoEnum		 info_enum,
-							 const gchar		*package_id,
-							 const gchar		*summary);
+							 PkItemPackage		*item);
 gboolean	 pk_results_add_details			(PkResults		*results,
-							 const gchar		*package_id,
-							 const gchar		*license,
-							 PkGroupEnum		 group_enum,
-							 const gchar		*description,
-							 const gchar		*url,
-							 guint64		 size);
+							 PkItemDetails		*item);
 gboolean	 pk_results_add_update_detail		(PkResults		*results,
-							 const gchar		*package_id,
-							 const gchar		*updates,
-							 const gchar		*obsoletes,
-							 const gchar		*vendor_url,
-							 const gchar		*bugzilla_url,
-							 const gchar		*cve_url,
-							 PkRestartEnum		 restart_enum,
-							 const gchar		*update_text,
-							 const gchar		*changelog,
-							 PkUpdateStateEnum	 state_enum,
-							 GDate			*issued,
-							 GDate			*updated);
+							 PkItemUpdateDetail	*item);
 gboolean	 pk_results_add_category		(PkResults		*results,
-							 const gchar		*parent_id,
-							 const gchar		*cat_id,
-							 const gchar		*name,
-							 const gchar		*summary,
-							 const gchar		*icon);
+							 PkItemCategory		*item);
 gboolean	 pk_results_add_distro_upgrade		(PkResults		*results,
-							 PkUpdateStateEnum	 state_enum,
-							 const gchar		*name,
-							 const gchar		*summary);
+							 PkItemDistroUpgrade	*item);
 gboolean	 pk_results_add_require_restart		(PkResults		*results,
-							 PkRestartEnum		 restart_enum,
-							 const gchar		*package_id);
+							 PkItemRequireRestart	*item);
 gboolean	 pk_results_add_transaction		(PkResults		*results,
-							 const gchar		*tid,
-							 const gchar		*timespec,
-							 gboolean		 succeeded,
-							 PkRoleEnum		 role_enum,
-							 guint			 duration,
-							 const gchar		*data,
-							 guint			 uid,
-							 const gchar		*cmdline);
+							 PkItemTransaction	*item);
 gboolean	 pk_results_add_files 			(PkResults		*results,
-							 const gchar		*package_id,
-							 gchar			**files);
+							 PkItemFiles		*item);
 gboolean	 pk_results_add_repo_signature_required	(PkResults		*results,
-							 const gchar		*package_id,
-							 const gchar		*repository_name,
-							 const gchar		*key_url,
-							 const gchar		*key_userid,
-							 const gchar		*key_id,
-							 const gchar		*key_fingerprint,
-							 const gchar		*key_timestamp,
-							 PkSigTypeEnum		 type_enum);
+							 PkItemRepoSignatureRequired	*item);
 gboolean	 pk_results_add_eula_required		(PkResults		*results,
-							 const gchar		*eula_id,
-							 const gchar		*package_id,
-							 const gchar		*vendor_name,
-							 const gchar		*license_agreement);
+							 PkItemEulaRequired	*item);
 gboolean	 pk_results_add_media_change_required	(PkResults		*results,
-							 PkMediaTypeEnum	 media_type_enum,
-							 const gchar		*media_id,
-							 const gchar		*media_text);
+							 PkItemMediaChangeRequired	*item);
 gboolean	 pk_results_add_repo_detail 		(PkResults		*results,
-							 const gchar		*repo_id,
-							 const gchar		*description,
-							 gboolean		 enabled);
+							 PkItemRepoDetail	*item);
 gboolean	 pk_results_add_error_code 		(PkResults		*results,
-							 PkErrorCodeEnum	 code_enum,
-							 const gchar		*details);
+							 PkItemErrorCode	*item);
 gboolean	 pk_results_add_message 		(PkResults		*results,
-							 PkMessageEnum		 message_enum,
-							 const gchar		*details);
+							 PkItemMessage		*item);
 
 /* get single data */
 PkExitEnum	 pk_results_get_exit_code		(PkResults		*results);
 PkPackageSack	*pk_results_get_package_sack		(PkResults		*results);
-const PkItemErrorCode *pk_results_get_error_code	(PkResults		*results);
+PkItemErrorCode *pk_results_get_error_code		(PkResults		*results);
 PkRestartEnum	 pk_results_get_require_restart_worst	(PkResults		*results);
 
 /* get array objects */
diff --git a/lib/packagekit-glib2/pk-self-test.c b/lib/packagekit-glib2/pk-self-test.c
index b4a723c..f75f7b0 100644
--- a/lib/packagekit-glib2/pk-self-test.c
+++ b/lib/packagekit-glib2/pk-self-test.c
@@ -57,8 +57,8 @@ main (int argc, char **argv)
 	pk_package_id_test (test);
 	pk_package_ids_test (test);
 	pk_progress_test (test);
-	pk_results_test (test);
 	pk_item_test (test);
+	pk_results_test (test);
 	pk_package_test (test);
 	pk_control_test (test);
 	pk_client_test (test);
commit 5dae094ef7d9731f270cd6748e445a871ff69d1d
Author: sandeeps <sandeeps at fedoraproject.org>
Date:   Tue Sep 8 12:45:45 2009 +0000

    Sending translation for Marathi

diff --git a/po/mr.po b/po/mr.po
index c3b7e4f..e7f605e 100644
--- a/po/mr.po
+++ b/po/mr.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: packagekit.master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-07 02:36+0000\n"
-"PO-Revision-Date: 2009-09-07 13:10+0530\n"
+"POT-Creation-Date: 2009-09-08 08:28+0000\n"
+"PO-Revision-Date: 2009-09-08 18:13+0530\n"
 "Last-Translator: Sandeep Shedmake <sshedmak at redhat.com>\n"
 "Language-Team: Marathi <fedora-trans-mr at redhat.com>\n"
 "MIME-Version: 1.0\n"
@@ -19,106 +19,106 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n!=1);\n"
 
 #. TRANSLATORS: this is an atomic transaction
-#: ../client/pk-console.c:238 ../client/pk-console-test.c:147
+#: ../client/pk-console.c:237 ../client/pk-console-test.c:146
 msgid "Transaction"
 msgstr "व्यवहार"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:240 ../client/pk-console-test.c:149
+#: ../client/pk-console.c:239 ../client/pk-console-test.c:148
 msgid "System time"
 msgstr "प्रणाली वेळ"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:150
 msgid "Succeeded"
 msgstr "यशस्वी"
 
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:150
 msgid "True"
 msgstr "True"
 
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:150
 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:244 ../client/pk-console-test.c:153
+#: ../client/pk-console.c:243 ../client/pk-console-test.c:152
 #: ../src/pk-polkit-action-lookup.c:327
 msgid "Role"
 msgstr "Role"
 
 #. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:249 ../client/pk-console-test.c:158
+#: ../client/pk-console.c:248 ../client/pk-console-test.c:157
 msgid "Duration"
 msgstr "कालावधी"
 
-#: ../client/pk-console.c:249 ../client/pk-console-test.c:158
+#: ../client/pk-console.c:248 ../client/pk-console-test.c:157
 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:253 ../client/pk-console-test.c:162
+#: ../client/pk-console.c:252 ../client/pk-console-test.c:161
 #: ../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:255 ../client/pk-console-test.c:164
+#: ../client/pk-console.c:254 ../client/pk-console-test.c:163
 msgid "User ID"
 msgstr "वापरकर्ता ID"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:262 ../client/pk-console-test.c:171
+#: ../client/pk-console.c:261 ../client/pk-console-test.c:170
 msgid "Username"
 msgstr "वापरकर्ता नाव"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:266 ../client/pk-console-test.c:175
+#: ../client/pk-console.c:265 ../client/pk-console-test.c:174
 msgid "Real name"
 msgstr "वास्तविक नाव"
 
-#: ../client/pk-console.c:274 ../client/pk-console-test.c:183
+#: ../client/pk-console.c:273 ../client/pk-console-test.c:182
 msgid "Affected packages:"
 msgstr "प्रभावीत संकुल:"
 
-#: ../client/pk-console.c:276 ../client/pk-console-test.c:185
+#: ../client/pk-console.c:275 ../client/pk-console-test.c:184
 msgid "Affected packages: None"
 msgstr "प्रभावीत संकुल: काहिच नाही"
 
 #. TRANSLATORS: When processing, we might have to remove other dependencies
-#: ../client/pk-console.c:337 ../client/pk-task-text.c:220
+#: ../client/pk-console.c:336 ../client/pk-task-text.c:220
 msgid "The following packages have to be removed:"
 msgstr "खालिल संकुल काढून टाकणे आवश्यक आहे:"
 
 #. TRANSLATORS: When processing, we might have to install other dependencies
-#: ../client/pk-console.c:340 ../client/pk-task-text.c:225
+#: ../client/pk-console.c:339 ../client/pk-task-text.c:225
 msgid "The following packages have to be installed:"
 msgstr "खालील संकुल प्रतिष्ठापीत करणे आवश्यक आहे:"
 
 #. TRANSLATORS: When processing, we might have to update other dependencies
-#: ../client/pk-console.c:343 ../client/pk-task-text.c:230
+#: ../client/pk-console.c:342 ../client/pk-task-text.c:230
 msgid "The following packages have to be updated:"
 msgstr "खालील संकुल सुधारीत करणे आवश्यक आहे:"
 
 #. TRANSLATORS: When processing, we might have to reinstall other dependencies
-#: ../client/pk-console.c:346 ../client/pk-task-text.c:235
+#: ../client/pk-console.c:345 ../client/pk-task-text.c:235
 msgid "The following packages have to be reinstalled:"
 msgstr "खालील संकुलांचे पुनःप्रतिष्ठापन आवश्यक आहे:"
 
 #. TRANSLATORS: When processing, we might have to downgrade other dependencies
-#: ../client/pk-console.c:349 ../client/pk-task-text.c:240
+#: ../client/pk-console.c:348 ../client/pk-task-text.c:240
 msgid "The following packages have to be downgraded:"
 msgstr "खालील संकुलांची एक आवृत्ती कमी करणे आवश्यक आहे:"
 
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:363 ../client/pk-console-test.c:205
+#: ../client/pk-console.c:362 ../client/pk-console-test.c:204
 msgid "Distribution"
 msgstr "वितरण"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:365 ../client/pk-console-test.c:207
+#: ../client/pk-console.c:364 ../client/pk-console-test.c:206
 msgid "Type"
 msgstr "प्रकार"
 
@@ -126,44 +126,44 @@ msgstr "प्रकार"
 #. TRANSLATORS: this is the summary of the group
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:367 ../client/pk-console.c:390
-#: ../client/pk-console-test.c:209 ../client/pk-console-test.c:230
+#: ../client/pk-console.c:366 ../client/pk-console.c:389
+#: ../client/pk-console-test.c:208 ../client/pk-console-test.c:229
 msgid "Summary"
 msgstr "सारांश"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:379 ../client/pk-console-test.c:219
+#: ../client/pk-console.c:378 ../client/pk-console-test.c:218
 msgid "Category"
 msgstr "प्रवर्ग"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:381 ../client/pk-console-test.c:221
+#: ../client/pk-console.c:380 ../client/pk-console-test.c:220
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:384 ../client/pk-console-test.c:224
+#: ../client/pk-console.c:383 ../client/pk-console-test.c:223
 msgid "Parent"
 msgstr "मुख्य"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:387 ../client/pk-console-test.c:227
+#: ../client/pk-console.c:386 ../client/pk-console-test.c:226
 msgid "Name"
 msgstr "नाव"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:393 ../client/pk-console-test.c:233
+#: ../client/pk-console.c:392 ../client/pk-console-test.c:232
 msgid "Icon"
 msgstr "चिन्ह"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:408 ../client/pk-console-test.c:247
+#: ../client/pk-console.c:407 ../client/pk-console-test.c:246
 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:410 ../client/pk-console-test.c:253
+#: ../client/pk-console.c:409 ../client/pk-console-test.c:252
 #: ../client/pk-task-text.c:101 ../client/pk-task-text.c:153
 #: ../src/pk-polkit-action-lookup.c:352
 msgid "Package"
@@ -172,121 +172,121 @@ msgstr[0] "संकुल"
 msgstr[1] "संकुले"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:413 ../client/pk-console-test.c:256
+#: ../client/pk-console.c:412 ../client/pk-console-test.c:255
 msgid "Updates"
 msgstr "अद्ययावत"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:417 ../client/pk-console-test.c:260
+#: ../client/pk-console.c:416 ../client/pk-console-test.c:259
 msgid "Obsoletes"
 msgstr "जुणे"
 
 #. TRANSLATORS: details about the update, the vendor URLs
-#: ../client/pk-console.c:421 ../client/pk-console-test.c:264
+#: ../client/pk-console.c:420 ../client/pk-console-test.c:263
 #: ../client/pk-task-text.c:154
 msgid "Vendor"
 msgstr "विक्रेता"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:425 ../client/pk-console-test.c:268
+#: ../client/pk-console.c:424 ../client/pk-console-test.c:267
 msgid "Bugzilla"
 msgstr "बगजीला"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:429 ../client/pk-console-test.c:272
+#: ../client/pk-console.c:428 ../client/pk-console-test.c:271
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:433 ../client/pk-console-test.c:276
+#: ../client/pk-console.c:432 ../client/pk-console-test.c:275
 msgid "Restart"
 msgstr "पुन्हा सुरू करा"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:437 ../client/pk-console-test.c:280
+#: ../client/pk-console.c:436 ../client/pk-console-test.c:279
 msgid "Update text"
 msgstr "अद्ययावत पाठ्य"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:441 ../client/pk-console-test.c:284
+#: ../client/pk-console.c:440 ../client/pk-console-test.c:283
 msgid "Changes"
 msgstr "बदल"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:445 ../client/pk-console-test.c:288
+#: ../client/pk-console.c:444 ../client/pk-console-test.c:287
 msgid "State"
 msgstr "स्तर"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:450 ../client/pk-console-test.c:293
+#: ../client/pk-console.c:449 ../client/pk-console-test.c:292
 msgid "Issued"
 msgstr "वितरण दिनांक"
 
 #. TRANSLATORS: details about the update, date the update was updated
-#: ../client/pk-console.c:455 ../client/pk-console-test.c:298
+#: ../client/pk-console.c:454 ../client/pk-console-test.c:297
 msgid "Updated"
 msgstr "अद्ययावतीत"
 
 #. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:475 ../client/pk-console-test.c:316
+#: ../client/pk-console.c:474 ../client/pk-console-test.c:315
 msgid "Enabled"
 msgstr "कार्यक्षम केले"
 
 #. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:478 ../client/pk-console-test.c:319
+#: ../client/pk-console.c:477 ../client/pk-console-test.c:318
 msgid "Disabled"
 msgstr "अकार्यक्षम केले"
 
-#: ../client/pk-console.c:555 ../client/pk-console.c:557
+#: ../client/pk-console.c:554 ../client/pk-console.c:556
 msgid "Percentage"
 msgstr "टक्केवारी"
 
-#: ../client/pk-console.c:557
+#: ../client/pk-console.c:556
 msgid "Unknown"
 msgstr "अपरिचीत"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:599 ../client/pk-console-test.c:341
+#: ../client/pk-console.c:598 ../client/pk-console-test.c:340
 msgid "System restart required by:"
 msgstr "प्रणाली पुन्हा चालू करणे आवश्यक:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:602 ../client/pk-console-test.c:344
+#: ../client/pk-console.c:601 ../client/pk-console-test.c:343
 msgid "Session restart required:"
 msgstr "सत्र पुन्हा चालू करणे आवश्यक:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:605 ../client/pk-console-test.c:347
+#: ../client/pk-console.c:604 ../client/pk-console-test.c:346
 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:608 ../client/pk-console-test.c:350
+#: ../client/pk-console.c:607 ../client/pk-console-test.c:349
 msgid "Session restart (security) required:"
 msgstr "सत्र पुनः चालू करणे (सुरक्षा) आवश्यक:"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:611 ../client/pk-console-test.c:353
+#: ../client/pk-console.c:610 ../client/pk-console-test.c:352
 msgid "Application restart required by:"
 msgstr "अनुप्रयोग पुन्हा चालू करणे आवश्यक:"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:666 ../client/pk-console-test.c:704
+#: ../client/pk-console.c:665 ../client/pk-console-test.c:541
 msgid "Please restart the computer to complete the update."
 msgstr "अद्ययावत पूर्ण करण्याकरीता कृपया संगणक पुन्हा चालू करा."
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:669 ../client/pk-console-test.c:707
+#: ../client/pk-console.c:668 ../client/pk-console-test.c:544
 msgid "Please logout and login to complete the update."
 msgstr "कृपया वापरकर्ता बदला व अद्ययावत पूर्ण करण्याकरीता प्रवेश करा."
 
 #. TRANSLATORS: a package needs to restart the application
-#: ../client/pk-console.c:672
+#: ../client/pk-console.c:671
 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:675 ../client/pk-console-test.c:710
+#: ../client/pk-console.c:674 ../client/pk-console-test.c:547
 msgid ""
 "Please restart the computer to complete the update as important security "
 "updates have been installed."
@@ -295,7 +295,7 @@ msgstr ""
 "पुनःचालू करा."
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:678 ../client/pk-console-test.c:713
+#: ../client/pk-console.c:677 ../client/pk-console-test.c:550
 msgid ""
 "Please logout and login to complete the update as important security updates "
 "have been installed."
@@ -304,292 +304,292 @@ msgstr ""
 "पुनः प्रवेश करा."
 
 #. TRANSLATORS: The package is already installed on the system
-#: ../client/pk-console.c:810
+#: ../client/pk-console.c:809
 #, 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:818
+#: ../client/pk-console.c:817
 #, 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: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
+#: ../client/pk-console.c:843 ../client/pk-console.c:891
+#: ../client/pk-console.c:915 ../client/pk-console.c:963
+#: ../client/pk-console.c:1059 ../client/pk-console.c:1172
+#: ../client/pk-console.c:1233 ../client/pk-tools-common.c:132
+#: ../client/pk-tools-common.c:151 ../client/pk-tools-common.c:159
 #, c-format
 msgid "Internal error: %s"
 msgstr "आंतरीक त्रुटी: %s"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
 #. ask the user
-#: ../client/pk-console.c:876 ../client/pk-console.c:948
-#: ../client/pk-console.c:1266 ../client/pk-task-text.c:299
+#: ../client/pk-console.c:875 ../client/pk-console.c:947
+#: ../client/pk-console.c:1265 ../client/pk-task-text.c:299
 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
+#: ../client/pk-console.c:880 ../client/pk-console.c:952
 msgid "The package install was canceled!"
 msgstr "संकुल प्रतिष्ठापन रद्द केले गेले!"
 
 #. TRANSLATORS: There was an error installing the packages. The detailed error follows
-#: ../client/pk-console.c:900 ../client/pk-console.c:1634
+#: ../client/pk-console.c:899 ../client/pk-console.c:1633
 #, 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:972
+#: ../client/pk-console.c:971
 #, 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:1028
+#: ../client/pk-console.c:1027
 #, 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:1051 ../client/pk-console.c:1089
-#: ../client/pk-console.c:1118
+#: ../client/pk-console.c:1050 ../client/pk-console.c:1088
+#: ../client/pk-console.c:1117
 #, c-format
 msgid "This tool could not remove the packages: %s"
 msgstr "या साधन द्वारे संकुल काढून टाकणे अशक्य: %s"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:1104
+#: ../client/pk-console.c:1103
 msgid "Proceed with additional packages?"
 msgstr "अगाऊ संकुल काढून टाकणे चालू ठेवायचे?"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:1109
+#: ../client/pk-console.c:1108
 msgid "The package removal was canceled!"
 msgstr "संकुल काढून टाकणे रद्द केले गेले!"
 
 #. TRANSLATORS: The package name was not found in any software sources
-#: ../client/pk-console.c:1150
+#: ../client/pk-console.c:1149
 #, 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:1181
+#: ../client/pk-console.c:1180
 #, 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:1213 ../client/pk-console.c:1225
-#: ../client/pk-console.c:1280
+#: ../client/pk-console.c:1212 ../client/pk-console.c:1224
+#: ../client/pk-console.c:1279
 #, 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
+#: ../client/pk-console.c:1270
 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:1304 ../client/pk-console.c:1312
+#: ../client/pk-console.c:1303 ../client/pk-console.c:1311
 #, 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:1334 ../client/pk-console.c:1342
+#: ../client/pk-console.c:1333 ../client/pk-console.c:1341
 #, 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:1364 ../client/pk-console.c:1372
+#: ../client/pk-console.c:1363 ../client/pk-console.c:1371
 #, 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:1394
+#: ../client/pk-console.c:1393
 #, 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:1402
+#: ../client/pk-console.c:1401
 #, 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:1424
+#: ../client/pk-console.c:1423
 #, c-format
 msgid "File already exists: %s"
 msgstr "फाइल आधिपासूनच अस्तित्वात आहे: %s"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1429 ../client/pk-console.c:1485
-#: ../client/pk-console.c:1560
+#: ../client/pk-console.c:1428 ../client/pk-console.c:1484
+#: ../client/pk-console.c:1559
 msgid "Getting package list"
 msgstr "संकुल यादी प्राप्त करत आहे"
 
 #. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
-#: ../client/pk-console.c:1435 ../client/pk-console.c:1491
-#: ../client/pk-console.c:1566
+#: ../client/pk-console.c:1434 ../client/pk-console.c:1490
+#: ../client/pk-console.c:1565
 #, 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:1446
+#: ../client/pk-console.c:1445
 #, c-format
 msgid "Failed to save to disk"
 msgstr "डिस्क वर साठविण्यास अपयशी"
 
 #. TRANSLATORS: There was an error getting the list. The filename follows
-#: ../client/pk-console.c:1480 ../client/pk-console.c:1555
+#: ../client/pk-console.c:1479 ../client/pk-console.c:1554
 #, c-format
 msgid "File does not exist: %s"
 msgstr "फाइल अस्तित्वात नाही: %s"
 
 #. TRANSLATORS: header to a list of packages newly added
-#: ../client/pk-console.c:1512
+#: ../client/pk-console.c:1511
 msgid "Packages to add"
 msgstr "समावेष करण्याजोगी संकुल"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1520
+#: ../client/pk-console.c:1519
 msgid "Packages to remove"
 msgstr "काढून टाकण्याजोगी संकुल"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1588
+#: ../client/pk-console.c:1587
 #, c-format
 msgid "No new packages need to be installed"
 msgstr "कुठलेही नवीन संकुल प्रतिष्ठापीत करण्याची आवश्यकता नाही"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1594
+#: ../client/pk-console.c:1593
 msgid "To install"
 msgstr "प्रतिष्ठापन करा"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1606
+#: ../client/pk-console.c:1605
 msgid "Searching for package: "
 msgstr "संकुल करीता शोधत आहे: "
 
 #. TRANSLATORS: package was not found -- this is the end of a string ended in ...
-#: ../client/pk-console.c:1610
+#: ../client/pk-console.c:1609
 msgid "not found."
 msgstr "आढळले नाही."
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1621
+#: ../client/pk-console.c:1620
 #, 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:1627
+#: ../client/pk-console.c:1626
 #: ../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:1663
+#: ../client/pk-console.c:1662
 #, 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:1671
+#: ../client/pk-console.c:1670
 #, 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:1702
+#: ../client/pk-console.c:1701
 msgid "Error:"
 msgstr "त्रुटी:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1716 ../client/pk-console-test.c:370
+#: ../client/pk-console.c:1715 ../client/pk-console-test.c:369
 msgid "Package description"
 msgstr "संकुल वर्णन"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:1732 ../client/pk-console-test.c:388
+#: ../client/pk-console.c:1731 ../client/pk-console-test.c:387
 msgid "Message:"
 msgstr "संदेश:"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1760 ../client/pk-console-test.c:407
+#: ../client/pk-console.c:1759 ../client/pk-console-test.c:406
 msgid "Package files"
 msgstr "संकुल फाइल"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1768 ../client/pk-console-test.c:402
+#: ../client/pk-console.c:1767 ../client/pk-console-test.c:401
 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:1791
+#: ../client/pk-console.c:1790
 msgid "Repository signature required"
 msgstr "रेपॉजटरी स्वाक्षरी आवश्यक आहे"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
 #. ask the user
-#: ../client/pk-console.c:1801 ../client/pk-task-text.c:113
+#: ../client/pk-console.c:1800 ../client/pk-task-text.c:113
 msgid "Do you accept this signature?"
 msgstr "तुम्ही ही स्वाक्षरी स्वीकारता?"
 
 #. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1805 ../client/pk-task-text.c:117
+#: ../client/pk-console.c:1804 ../client/pk-task-text.c:117
 msgid "The signature was not accepted."
 msgstr "स्वाक्षरी स्वीकारली गेली नाही."
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1839
+#: ../client/pk-console.c:1838
 msgid "End user license agreement required"
 msgstr "वापरकर्ता परवाना करार आवश्यक आहे"
 
 #. TRANSLATORS: This a prompt asking the user to agree to the license
-#: ../client/pk-console.c:1846
+#: ../client/pk-console.c:1845
 msgid "Do you agree to this license?"
 msgstr "तुम्ही हा परवाना स्वीकारण्याची खात्री देता?"
 
 #. TRANSLATORS: This is where the user declined the license
-#: ../client/pk-console.c:1850
+#: ../client/pk-console.c:1849
 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:1879 ../client/pk-console-test.c:972
+#: ../client/pk-console.c:1878 ../client/pk-console-test.c:819
 msgid "The daemon crashed mid-transaction!"
 msgstr "डिमन व्यवहारच्या मधोमध क्रॅश झाले!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1932 ../client/pk-console-test.c:1006
+#: ../client/pk-console.c:1931 ../client/pk-console-test.c:853
 msgid "PackageKit Console Interface"
 msgstr "PackageKit कन्सोल संवाद"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1934 ../client/pk-console-test.c:1008
+#: ../client/pk-console.c:1933 ../client/pk-console-test.c:855
 msgid "Subcommands:"
 msgstr "उपआदेश:"
 
 #. TRANSLATORS: command line argument, if we should show debugging information
 #. TRANSLATORS: if we should show debugging data
-#: ../client/pk-console.c:2027 ../client/pk-console-test.c:1099
-#: ../client/pk-generate-pack.c:187 ../client/pk-monitor.c:128
-#: ../client/pk-monitor-test.c:282
+#: ../client/pk-console.c:2026 ../client/pk-console-test.c:969
+#: ../client/pk-generate-pack.c:185 ../client/pk-generate-pack-test.c:225
+#: ../client/pk-monitor.c:128 ../client/pk-monitor-test.c:282
 #: ../contrib/command-not-found/pk-command-not-found.c:616
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:549
 #: ../contrib/device-rebind/pk-device-rebind.c:293 ../src/pk-main.c:211
@@ -597,149 +597,149 @@ msgid "Show extra debugging information"
 msgstr "अगाऊ डिबगींग माहिती दाखवा"
 
 #. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:2030 ../client/pk-console-test.c:1102
+#: ../client/pk-console.c:2029 ../client/pk-console-test.c:972
 #: ../client/pk-monitor.c:130 ../client/pk-monitor-test.c:284
 msgid "Show the program version and exit"
 msgstr "कार्यक्रम आवृत्ती दाखवा व बाहेर पडा"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:2033 ../client/pk-console-test.c:1105
+#: ../client/pk-console.c:2032 ../client/pk-console-test.c:975
 msgid "Set the filter, e.g. installed"
 msgstr "चाळणी निश्चित करा, उ.दा. प्रतिष्ठापीत"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:2036 ../client/pk-console-test.c:1108
+#: ../client/pk-console.c:2035 ../client/pk-console-test.c:978
 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:2063
+#: ../client/pk-console.c:2062
 msgid "This tool could not connect to system DBUS."
 msgstr "हे साधन प्रणाली DBUS शी जुळवणी स्थापीत करण्यास अशक्य."
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:2153 ../client/pk-console-test.c:1183
+#: ../client/pk-console.c:2152 ../client/pk-console-test.c:1055
 msgid "The filter specified was invalid"
 msgstr "निश्चित चाळणी अवैध नुरूप आढळली"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:2172 ../client/pk-console-test.c:1202
+#: ../client/pk-console.c:2171 ../client/pk-console-test.c:1074
 msgid "A search type is required, e.g. name"
 msgstr "शोध प्रकार आवश्यक, उ.दा. नाव"
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:2179 ../client/pk-console.c:2188
-#: ../client/pk-console.c:2197 ../client/pk-console.c:2206
-#: ../client/pk-console-test.c:1209 ../client/pk-console-test.c:1221
-#: ../client/pk-console-test.c:1233 ../client/pk-console-test.c:1245
+#: ../client/pk-console.c:2178 ../client/pk-console.c:2187
+#: ../client/pk-console.c:2196 ../client/pk-console.c:2205
+#: ../client/pk-console-test.c:1081 ../client/pk-console-test.c:1093
+#: ../client/pk-console-test.c:1105 ../client/pk-console-test.c:1117
 msgid "A search term is required"
 msgstr "शोध संज्ञा आवश्यक"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:2213 ../client/pk-console-test.c:1255
+#: ../client/pk-console.c:2212 ../client/pk-console-test.c:1127
 msgid "Invalid search type"
 msgstr "अवैध शोध प्रकार"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:2219
+#: ../client/pk-console.c:2218
 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:2228 ../client/pk-console-test.c:1282
+#: ../client/pk-console.c:2227 ../client/pk-console-test.c:1154
 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:2237 ../client/pk-console-test.c:1293
+#: ../client/pk-console.c:2236 ../client/pk-console-test.c:1165
 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:2245 ../client/pk-console-test.c:1302
+#: ../client/pk-console.c:2244 ../client/pk-console-test.c:1174
 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:2252 ../client/pk-console-test.c:1309
+#: ../client/pk-console.c:2251 ../client/pk-console-test.c:1181
 msgid "Directory not found"
 msgstr "डिरेक्ट्री आढळली नाही"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2260 ../client/pk-console-test.c:1318
+#: ../client/pk-console.c:2259 ../client/pk-console-test.c:1190
 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:2270 ../client/pk-console-test.c:1329
+#: ../client/pk-console.c:2269 ../client/pk-console-test.c:1201
 msgid "A transaction identifier (tid) is required"
 msgstr "transaction identifier (tid) आवश्यक आहे"
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:2287 ../client/pk-console-test.c:1350
+#: ../client/pk-console.c:2286 ../client/pk-console-test.c:1222
 msgid "A package name to resolve is required"
 msgstr "निर्धारण करीता संकुल नाव आवश्यक आहे"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:2296 ../client/pk-console.c:2305
-#: ../client/pk-console-test.c:1361 ../client/pk-console-test.c:1372
+#: ../client/pk-console.c:2295 ../client/pk-console.c:2304
+#: ../client/pk-console-test.c:1233 ../client/pk-console-test.c:1244
 msgid "A repository name is required"
 msgstr "रेपॉजिटरी नाव आवश्यक आहे"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:2314 ../client/pk-console-test.c:1383
+#: ../client/pk-console.c:2313 ../client/pk-console-test.c:1255
 msgid "A repo name, parameter and value are required"
 msgstr "रेपो नाव, बाब व मूल्य आवश्यक आहे"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:2328 ../client/pk-console-test.c:1401
+#: ../client/pk-console.c:2327 ../client/pk-console-test.c:1272
 msgid "An action, e.g. 'update-system' is required"
 msgstr "कृती, उ.दा. 'update-system' आवश्यक आहे"
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:2335 ../client/pk-console-test.c:1408
+#: ../client/pk-console.c:2334 ../client/pk-console-test.c:1279
 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:2342 ../client/pk-console-test.c:1415
+#: ../client/pk-console.c:2341 ../client/pk-console-test.c:934
 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:2352 ../client/pk-console.c:2364
-#: ../client/pk-console.c:2373 ../client/pk-console.c:2391
-#: ../client/pk-console.c:2400 ../client/pk-console-test.c:1425
-#: ../client/pk-console-test.c:1440 ../client/pk-console-test.c:1449
-#: ../client/pk-console-test.c:1469 ../client/pk-console-test.c:1478
-#: ../client/pk-generate-pack.c:243
+#: ../client/pk-console.c:2351 ../client/pk-console.c:2363
+#: ../client/pk-console.c:2372 ../client/pk-console.c:2390
+#: ../client/pk-console.c:2399 ../client/pk-console-test.c:1289
+#: ../client/pk-console-test.c:1304 ../client/pk-console-test.c:1313
+#: ../client/pk-console-test.c:1333 ../client/pk-console-test.c:1342
+#: ../client/pk-generate-pack.c:241 ../client/pk-generate-pack-test.c:288
 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:2382 ../client/pk-console-test.c:1458
+#: ../client/pk-console.c:2381 ../client/pk-console-test.c:1322
 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:2409
+#: ../client/pk-console.c:2408
 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:2419 ../client/pk-console.c:2429
+#: ../client/pk-console.c:2418 ../client/pk-console.c:2428
 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:2483 ../client/pk-console-test.c:1538
+#: ../client/pk-console.c:2482 ../client/pk-console-test.c:1402
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "पर्याय '%s' समर्थीत नाही"
 
 #. TRANSLATORS: User does not have permission to do this
-#: ../client/pk-console.c:2496
+#: ../client/pk-console.c:2495
 msgid "Incorrect privileges for this operation"
 msgstr "या क्रिया करीता अयोग्य परवानगी"
 
@@ -747,34 +747,39 @@ msgstr "या क्रिया करीता अयोग्य परवà¤
 #. /* 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
-#: ../client/pk-console.c:2499 ../client/pk-console-test.c:1550
+#: ../client/pk-console.c:2498 ../client/pk-console-test.c:1414
 msgid "Command failed"
 msgstr "आदेश अपयशी"
 
+#: ../client/pk-console-shared.c:53 ../client/pk-tools-common.c:51
+#, c-format
+msgid "Please enter a number from 1 to %i: "
+msgstr "कृपया 1 ते %i क्रमांक निवडा: "
+
 #. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../client/pk-console-test.c:523 ../client/pk-tools-common.c:131
+#: ../client/pk-console-shared.c:153 ../client/pk-tools-common.c:200
 msgid "More than one package matches:"
 msgstr "एकापेक्षा जास्त संकुल जुळवणी:"
 
 #. TRANSLATORS: This finds out which package in the list to use
-#: ../client/pk-console-test.c:532 ../client/pk-tools-common.c:138
+#: ../client/pk-console-shared.c:162 ../client/pk-tools-common.c:207
 msgid "Please choose the correct package: "
 msgstr "कृपया योग्य संकुल निवडा: "
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:734
+#: ../client/pk-console-test.c:571
 #, c-format
 msgid "This tool could not find the available package: %s"
 msgstr "हे साधन उपलब्ध संकुल प्रतिष्ठापीत करू शकले नाही: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:762
+#: ../client/pk-console-test.c:599
 #, c-format
 msgid "This tool could not find the installed package: %s"
 msgstr "हे साधन प्रतिष्ठापीत संकुल शोधू शकले नाही: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:790 ../client/pk-console-test.c:818
+#: ../client/pk-console-test.c:627 ../client/pk-console-test.c:655
 #, c-format
 msgid "This tool could not find the package: %s"
 msgstr "हे साधन संकुल शोधू शकले नाही: %s"
@@ -783,135 +788,143 @@ msgstr "हे साधन संकुल शोधू शकले नाहà
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console-test.c:846 ../client/pk-console-test.c:872
-#: ../client/pk-console-test.c:898 ../client/pk-console-test.c:924
-#: ../client/pk-console-test.c:950
+#: ../client/pk-console-test.c:683 ../client/pk-console-test.c:711
+#: ../client/pk-console-test.c:739 ../client/pk-console-test.c:767
+#: ../client/pk-console-test.c:795
 #, c-format
 msgid "This tool could not find all the packages: %s"
 msgstr "हे साधन सर्व संकुल शोधू शकले नाही: %s"
 
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console-test.c:1003
+msgid "Failed to contact PackageKit"
+msgstr "PackageKit सह संपर्क साधण्यास अपयशी"
+
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1261
+#: ../client/pk-console-test.c:1133
 msgid "A package name to install is required"
 msgstr "प्रतिष्ठापनकरीता संकुलचे नाव आवश्यक आहे"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1270
+#: ../client/pk-console-test.c:1142
 msgid "A filename to install is required"
 msgstr "प्रतिष्ठपन करीता फाइलचेनाव आवश्यक आहे"
 
 #. TRANSLATORS: This is the state of the transaction
-#: ../client/pk-generate-pack.c:103
+#: ../client/pk-generate-pack.c:101
 msgid "Downloading"
 msgstr "डाऊनलोड करत आहे"
 
 #. TRANSLATORS: This is when the main packages are being downloaded
-#: ../client/pk-generate-pack.c:123
+#: ../client/pk-generate-pack.c:121
 msgid "Downloading packages"
 msgstr "संकुल डाऊनलोड करत आहे"
 
 #. TRANSLATORS: This is when the dependency packages are being downloaded
-#: ../client/pk-generate-pack.c:128
+#: ../client/pk-generate-pack.c:126
 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:190
+#: ../client/pk-generate-pack.c:188 ../client/pk-generate-pack-test.c:228
 msgid "Set the file name of dependencies to be excluded"
 msgstr "वगळण्याजोगी अवलंबनचे फाइल नाव निश्चित करा"
 
 #. TRANSLATORS: the output location
-#: ../client/pk-generate-pack.c:193
+#: ../client/pk-generate-pack.c:191 ../client/pk-generate-pack-test.c:231
 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:196
+#: ../client/pk-generate-pack.c:194 ../client/pk-generate-pack-test.c:234
 msgid "The package to be put into the service pack"
 msgstr "सेवा पॅक अंतर्गत समाविष्ट करण्याजोगी संकुल"
 
 #. TRANSLATORS: put all pending updates in the pack
-#: ../client/pk-generate-pack.c:199
+#: ../client/pk-generate-pack.c:197 ../client/pk-generate-pack-test.c:237
 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:227
+#: ../client/pk-generate-pack.c:225 ../client/pk-generate-pack-test.c:272
 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:235
+#: ../client/pk-generate-pack.c:233 ../client/pk-generate-pack-test.c:280
 msgid "Both options selected."
 msgstr "दोन्ही पर्याय निवडले."
 
 #. TRANSLATORS: This is when the user fails to supply the output
-#: ../client/pk-generate-pack.c:251
+#: ../client/pk-generate-pack.c:249 ../client/pk-generate-pack-test.c:296
 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:269 ../client/pk-generate-pack.c:275
+#. 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-test.c:324 ../client/pk-generate-pack-test.c:330
 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:282
+#: ../client/pk-generate-pack.c:280 ../client/pk-generate-pack-test.c:337
 msgid ""
 "Service packs cannot be created as PackageKit was not built with libarchive "
 "support."
 msgstr "PackageKit ला libarchive समर्थन सह बिल्ट न केल्यामुळे Service पैक बनवणे शक्य नाही."
 
 #. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
-#: ../client/pk-generate-pack.c:293
+#: ../client/pk-generate-pack.c:291 ../client/pk-generate-pack-test.c:348
 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:309
+#: ../client/pk-generate-pack.c:307 ../client/pk-generate-pack-test.c:364
 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:312
+#: ../client/pk-generate-pack.c:310 ../client/pk-generate-pack-test.c:367
 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:325
+#: ../client/pk-generate-pack.c:323 ../client/pk-generate-pack-test.c:380
 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:335
+#: ../client/pk-generate-pack.c:333 ../client/pk-generate-pack-test.c:392
 msgid "Failed to open package list."
 msgstr "संकुल यादी उघडण्यास अपयशी."
 
 #. TRANSLATORS: The package name is being matched up to available packages
-#: ../client/pk-generate-pack.c:346
+#: ../client/pk-generate-pack.c:344 ../client/pk-generate-pack-test.c:401
 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:350
+#: ../client/pk-generate-pack.c:348 ../client/pk-generate-pack-test.c:405
 #, 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:367
+#: ../client/pk-generate-pack.c:365 ../client/pk-generate-pack-test.c:413
 msgid "Creating service pack..."
 msgstr "सेवा पॅक बनवत आहे..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:374
+#: ../client/pk-generate-pack.c:372 ../client/pk-generate-pack-test.c:428
 #, c-format
 msgid "Service pack created '%s'"
 msgstr "सेवा पॅक '%s' बनविले"
 
 #. TRANSLATORS: we failed to make te file
-#: ../client/pk-generate-pack.c:379
+#: ../client/pk-generate-pack.c:377 ../client/pk-generate-pack-test.c:433
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "'%s' बनविण्यास अपयशी: %s"
@@ -1020,13 +1033,8 @@ msgstr "योग्य मिडीया अंतर्भूत केले
 msgid "The transaction did not proceed."
 msgstr "व्यवहार पुढे कार्यान्वीत झाले नाही."
 
-#: ../client/pk-text.c:50
-#, c-format
-msgid "Please enter a number from 1 to %i: "
-msgstr "कृपया 1 ते %i क्रमांक निवडा: "
-
 #. TRANSLATORS: The package was not found in any software sources
-#: ../client/pk-tools-common.c:119
+#: ../client/pk-tools-common.c:188
 #, c-format
 msgid "The package could not be found"
 msgstr "संकुल आढळले नाही"
commit 7c260de47da4cffd02034829bbd1e41a12075d55
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 8 13:12:54 2009 +0100

    trivial: start converting the daemon to use the glib2 types

diff --git a/src/Makefile.am b/src/Makefile.am
index 48895f7..91a8436 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -3,8 +3,8 @@ AUTOMAKE_OPTIONS = 1.7
 
 NULL =
 
-PK_GLIB_LIBS =						\
-	$(top_builddir)/lib/packagekit-glib/libpackagekit-glib.la	\
+PK_GLIB2_LIBS =						\
+	$(top_builddir)/lib/packagekit-glib2/libpackagekit-glib2.la	\
 	$(NULL)
 
 INCLUDES =						\
@@ -129,7 +129,7 @@ packagekitd_LDADD =					\
 	$(CONNMAN_LIBS)					\
 	$(DBUS_LIBS)					\
 	$(SQLITE_LIBS)					\
-	$(PK_GLIB_LIBS)					\
+	$(PK_GLIB2_LIBS)				\
 	$(PYTHON_LIBS)					\
 	$(POLKIT_LIBS)					\
 	$(GIO_LIBS)					\
@@ -198,7 +198,7 @@ libpackagekit_action_lookup_la_LDFLAGS =			\
 
 libpackagekit_action_lookup_la_LIBADD =				\
 	$(GLIB_LIBS)						\
-	$(PK_GLIB_LIBS)						\
+	$(PK_GLIB2_LIBS)					\
 	$(NULL)
 endif
 
@@ -221,7 +221,7 @@ pk_self_test_LDADD =					\
 	$(SQLITE_LIBS)					\
 	$(LIBNM_LIBS)					\
 	$(CONNMAN_LIBS)					\
-	$(PK_GLIB_LIBS)					\
+	$(PK_GLIB2_LIBS)				\
 	$(POLKIT_LIBS)					\
 	$(GIO_LIBS)					\
 	$(ARCHIVE_LIBS)					\
diff --git a/src/pk-backend-internal.h b/src/pk-backend-internal.h
index 3fb8ac6..d5316b0 100644
--- a/src/pk-backend-internal.h
+++ b/src/pk-backend-internal.h
@@ -23,7 +23,7 @@
 #define __PK_BACKEND_INTERNAL_H
 
 #include <glib-object.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 #include "pk-store.h"
 #include "pk-backend.h"
diff --git a/src/pk-backend-spawn.c b/src/pk-backend-spawn.c
index 8d463c2..6de0d12 100644
--- a/src/pk-backend-spawn.c
+++ b/src/pk-backend-spawn.c
@@ -38,7 +38,7 @@
 #include <glib/gi18n.h>
 #include <glib/gprintf.h>
 #include <gmodule.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 #include "egg-debug.h"
 #include "egg-string.h"
diff --git a/src/pk-backend.c b/src/pk-backend.c
index 5d53098..bd4c93d 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -31,7 +31,7 @@
 #include <glib.h>
 #include <gmodule.h>
 #include <glib/gprintf.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 #include "egg-debug.h"
 #include "egg-string.h"
@@ -857,7 +857,6 @@ pk_backend_package (PkBackend *backend, PkInfoEnum info, const gchar *package_id
 {
 	gchar *summary_safe = NULL;
 	PkPackageObj *obj = NULL;
-	PkPackageId *id = NULL;
 	gboolean ret;
 
 	g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE);
@@ -874,14 +873,6 @@ pk_backend_package (PkBackend *backend, PkInfoEnum info, const gchar *package_id
 	/* replace unsafe chars */
 	summary_safe = pk_strsafe (summary);
 
-	/* check against the old one */
-	id = pk_package_id_new_from_string (package_id);
-	if (id == NULL) {
-		egg_warning ("Failed to parse package_id: '%s'", package_id);
-		ret = FALSE;
-		goto out;
-	}
-
 	/* fix up available and installed when doing simulate roles */
 	if (backend->priv->role == PK_ROLE_ENUM_SIMULATE_INSTALL_FILES ||
 	    backend->priv->role == PK_ROLE_ENUM_SIMULATE_INSTALL_PACKAGES ||
@@ -894,7 +885,7 @@ pk_backend_package (PkBackend *backend, PkInfoEnum info, const gchar *package_id
 	}
 
 	/* create a new package object AFTER we emulate the info value */
-	obj = pk_package_obj_new (info, id, summary_safe);
+	obj = pk_package_obj_new (info, package_id, summary_safe);
 	if (obj == NULL) {
 		egg_warning ("Failed to create object summary: '%s'", summary_safe);
 		ret = FALSE;
@@ -947,7 +938,6 @@ pk_backend_package (PkBackend *backend, PkInfoEnum info, const gchar *package_id
 	/* success */
 	ret = TRUE;
 out:
-	pk_package_id_free (id);
 	pk_package_obj_free (obj);
 	g_free (summary_safe);
 	return ret;
@@ -967,7 +957,6 @@ pk_backend_update_detail (PkBackend *backend, const gchar *package_id,
 {
 	gchar *update_text_safe = NULL;
 	PkUpdateDetailObj *detail = NULL;
-	PkPackageId *id = NULL;
 	GDate *issued = NULL;
 	GDate *updated = NULL;
 	gboolean ret = FALSE;
@@ -989,15 +978,8 @@ pk_backend_update_detail (PkBackend *backend, const gchar *package_id,
 	/* replace unsafe chars */
 	update_text_safe = pk_strsafe (update_text);
 
-	/* form PkPackageId struct */
-	id = pk_package_id_new_from_string (package_id);
-	if (id == NULL) {
-		egg_warning ("Failed to parse package_id: '%s'", package_id);
-		goto out;
-	}
-
 	/* form PkUpdateDetailObj struct */
-	detail = pk_update_detail_obj_new_from_data (id, updates, obsoletes, vendor_url,
+	detail = pk_update_detail_obj_new_from_data (package_id, updates, obsoletes, vendor_url,
 						     bugzilla_url, cve_url, restart,
 						     update_text_safe, changelog,
 						     state, issued, updated);
@@ -1011,7 +993,6 @@ pk_backend_update_detail (PkBackend *backend, const gchar *package_id,
 	ret = TRUE;
 
 out:
-	pk_package_id_free (id);
 	pk_update_detail_obj_free (detail);
 	g_free (update_text_safe);
 	if (issued != NULL)
@@ -1176,7 +1157,6 @@ pk_backend_details (PkBackend *backend, const gchar *package_id,
 {
 	gchar *description_safe = NULL;
 	PkDetailsObj *details = NULL;
-	PkPackageId *id = NULL;
 	gboolean ret = FALSE;
 
 	g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE);
@@ -1192,15 +1172,8 @@ pk_backend_details (PkBackend *backend, const gchar *package_id,
 	/* replace unsafe chars */
 	description_safe = pk_strsafe (description);
 
-	/* form PkPackageId struct */
-	id = pk_package_id_new_from_string (package_id);
-	if (id == NULL) {
-		egg_warning ("Failed to parse package_id: '%s'", package_id);
-		goto out;
-	}
-
 	/* form PkDetailsObj struct */
-	details = pk_details_obj_new_from_data (id, license, group, description_safe, url, size);
+	details = pk_details_obj_new_from_data (package_id, license, group, description_safe, url, size);
 	if (details == NULL) {
 		egg_warning ("Failed to parse details object");
 		goto out;
@@ -1211,7 +1184,6 @@ pk_backend_details (PkBackend *backend, const gchar *package_id,
 	ret = TRUE;
 
 out:
-	pk_package_id_free (id);
 	pk_details_obj_free (details);
 	g_free (description_safe);
 	return ret;
diff --git a/src/pk-backend.h b/src/pk-backend.h
index 10bd3eb..4811088 100644
--- a/src/pk-backend.h
+++ b/src/pk-backend.h
@@ -24,7 +24,7 @@
 
 #include <glib.h>
 #include <gmodule.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 #include "egg-debug.h"
 #include "egg-string.h"
diff --git a/src/pk-cache.c b/src/pk-cache.c
index 1c7aadb..1594ab8 100644
--- a/src/pk-cache.c
+++ b/src/pk-cache.c
@@ -27,7 +27,7 @@
 
 #include <glib/gi18n.h>
 #include <glib.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 #include "egg-debug.h"
 #include "pk-cache.h"
@@ -39,7 +39,7 @@ struct PkCachePrivate
 {
 	PkConf			*conf;
 	gboolean		 use_update_cache;
-	PkPackageList		*updates_cache;
+	GPtrArray		*updates_cache;
 };
 
 G_DEFINE_TYPE (PkCache, pk_cache, G_TYPE_OBJECT)
@@ -48,7 +48,7 @@ static gpointer pk_cache_object = NULL;
 /**
  * pk_cache_get_updates:
  **/
-PkPackageList *
+GPtrArray *
 pk_cache_get_updates (PkCache *cache)
 {
 	g_return_val_if_fail (PK_IS_CACHE (cache), NULL);
@@ -66,7 +66,7 @@ pk_cache_get_updates (PkCache *cache)
  * pk_cache_set_updates:
  **/
 gboolean
-pk_cache_set_updates (PkCache *cache, PkPackageList *list)
+pk_cache_set_updates (PkCache *cache, GPtrArray *list)
 {
 	g_return_val_if_fail (PK_IS_CACHE (cache), FALSE);
 	g_return_val_if_fail (list != NULL, FALSE);
diff --git a/src/pk-cache.h b/src/pk-cache.h
index 7154665..6678841 100644
--- a/src/pk-cache.h
+++ b/src/pk-cache.h
@@ -23,7 +23,7 @@
 #define __PK_CACHE_H
 
 #include <glib-object.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 G_BEGIN_DECLS
 
@@ -50,9 +50,9 @@ typedef struct
 GType		 pk_cache_get_type		(void);
 PkCache		*pk_cache_new			(void);
 
-PkPackageList	*pk_cache_get_updates		(PkCache	*cache);
+GPtrArray	*pk_cache_get_updates		(PkCache	*cache);
 gboolean	 pk_cache_set_updates		(PkCache	*cache,
-						 PkPackageList	*list);
+						 GPtrArray	*list);
 gboolean	 pk_cache_invalidate		(PkCache	*cache);
 
 G_END_DECLS
diff --git a/src/pk-conf.c b/src/pk-conf.c
index ffab018..6cc2fc8 100644
--- a/src/pk-conf.c
+++ b/src/pk-conf.c
@@ -31,7 +31,7 @@
 
 #include <glib/gi18n.h>
 #include <glib.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 #include "egg-debug.h"
 #include "pk-conf.h"
diff --git a/src/pk-engine.c b/src/pk-engine.c
index c308b9e..1aad259 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -37,7 +37,7 @@
 #include <glib/gstdio.h>
 #include <dbus/dbus-glib.h>
 #include <dbus/dbus-glib-lowlevel.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 #ifdef USE_SECURITY_POLKIT
 #include <polkit/polkit.h>
 #endif
diff --git a/src/pk-file-monitor.c b/src/pk-file-monitor.c
index 748f5be..7e5737e 100644
--- a/src/pk-file-monitor.c
+++ b/src/pk-file-monitor.c
@@ -36,7 +36,7 @@
 
 #include <glib/gi18n.h>
 #include <gio/gio.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 #include "egg-debug.h"
 #include "pk-conf.h"
diff --git a/src/pk-network-stack.h b/src/pk-network-stack.h
index fa5d161..362c556 100644
--- a/src/pk-network-stack.h
+++ b/src/pk-network-stack.h
@@ -22,7 +22,7 @@
 
 #include <glib-object.h>
 #include <dbus/dbus-glib.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 G_BEGIN_DECLS
 
diff --git a/src/pk-network.h b/src/pk-network.h
index 2ec6a07..60f71e6 100644
--- a/src/pk-network.h
+++ b/src/pk-network.h
@@ -30,7 +30,7 @@
 #define __PK_NETWORK_H
 
 #include <glib-object.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 G_BEGIN_DECLS
 
diff --git a/src/pk-polkit-action-lookup.c b/src/pk-polkit-action-lookup.c
index 24dd656..c1d3776 100644
--- a/src/pk-polkit-action-lookup.c
+++ b/src/pk-polkit-action-lookup.c
@@ -23,7 +23,7 @@
 #include "config.h"
 
 #include <polkitbackend/polkitbackend.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 #include <glib/gi18n-lib.h>
 
 #define PK_TYPE_ACTION_LOOKUP		(pk_action_lookup_get_type())
@@ -256,7 +256,7 @@ out:
 static gchar *
 pk_action_lookup_package_ids_to_string (gchar **package_ids)
 {
-	PkPackageId *id;
+	gchar **split;
 	GPtrArray *array = NULL;
 	gchar **names = NULL;
 	gchar *names_str = NULL;
@@ -278,15 +278,15 @@ pk_action_lookup_package_ids_to_string (gchar **package_ids)
 	/* create array of name-version */
 	array = g_ptr_array_new ();
 	for (i=0; package_ids[i] != NULL; i++) {
-		id = pk_package_id_new_from_string (package_ids[i]);
+		split = pk_package_id_split (package_ids[i]);
 		if (len == 1)
-			names_str = g_strdup_printf ("%s-%s (%s)", id->name, id->version, id->data);
+			names_str = g_strdup_printf ("%s-%s (%s)", split[0], split[1], split[3]);
 		else if (len <= 3)
-			names_str = g_strdup_printf ("%s-%s", id->name, id->version);
+			names_str = g_strdup_printf ("%s-%s", split[0], split[1]);
 		else
-			names_str = g_strdup (id->name);
+			names_str = g_strdup (split[0]);
 		g_ptr_array_add (array, names_str);
-		pk_package_id_free (id);
+		g_strfree (split);
 	}
 
 	/* create string */
diff --git a/src/pk-spawn.c b/src/pk-spawn.c
index a2472a8..a088395 100644
--- a/src/pk-spawn.c
+++ b/src/pk-spawn.c
@@ -41,7 +41,7 @@
 #include <glib/gi18n.h>
 #include <dbus/dbus-glib.h>
 #include <dbus/dbus-glib-lowlevel.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 #include "egg-debug.h"
 #include "egg-string.h"
diff --git a/src/pk-syslog.h b/src/pk-syslog.h
index 45a67f9..b2612d8 100644
--- a/src/pk-syslog.h
+++ b/src/pk-syslog.h
@@ -23,7 +23,7 @@
 #define __PK_SYSLOG_H
 
 #include <glib-object.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 G_BEGIN_DECLS
 
diff --git a/src/pk-transaction-db.c b/src/pk-transaction-db.c
index 8d98d67..a33ae8d 100644
--- a/src/pk-transaction-db.c
+++ b/src/pk-transaction-db.c
@@ -35,7 +35,7 @@
 
 #include <glib/gi18n.h>
 #include <sqlite3.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 #include "egg-debug.h"
 #include "egg-string.h"
diff --git a/src/pk-transaction-db.h b/src/pk-transaction-db.h
index 5f47cc7..dc44243 100644
--- a/src/pk-transaction-db.h
+++ b/src/pk-transaction-db.h
@@ -23,7 +23,7 @@
 #define __PK_TRANSACTION_DB_H
 
 #include <glib-object.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 G_BEGIN_DECLS
 
diff --git a/src/pk-transaction-extra.c b/src/pk-transaction-extra.c
index 30fb179..7016ca3 100644
--- a/src/pk-transaction-extra.c
+++ b/src/pk-transaction-extra.c
@@ -28,7 +28,7 @@
 #include <stdlib.h>
 #include <glib.h>
 #include <glib/gi18n.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 #include <gio/gdesktopappinfo.h>
 #include <sqlite3.h>
 
@@ -48,7 +48,7 @@ struct PkTransactionExtraPrivate
 	PkBackend		*backend;
 	GMainLoop		*loop;
 	PkObjList		*running_exec_list;
-	PkPackageList		*list;
+	GPtrArray		*list;
 	PkLsof			*lsof;
 	guint			 finished_id;
 	guint			 package_id;
@@ -122,7 +122,6 @@ pk_transaction_extra_set_progress_changed (PkTransactionExtra *extra, guint perc
 static const PkPackageObj *
 pk_transaction_extra_get_installed_package_for_file (PkTransactionExtra *extra, const gchar *filename)
 {
-	guint size;
 	const PkPackageObj *obj = NULL;
 	PkStore *store;
 
@@ -138,14 +137,13 @@ pk_transaction_extra_get_installed_package_for_file (PkTransactionExtra *extra,
 	g_main_loop_run (extra->priv->loop);
 
 	/* check that we only matched one package */
-	size = pk_package_list_get_size (extra->priv->list);
-	if (size != 1) {
+	if (extra->priv->list->len != 1) {
 		egg_warning ("not correct size, %i", size);
 		goto out;
 	}
 
 	/* get the obj */
-	obj = pk_package_list_get_obj (extra->priv->list, 0);
+	obj = g_ptr_array_index (extra->priv->list, 0);
 	if (obj == NULL) {
 		egg_warning ("cannot get obj");
 		goto out;
@@ -519,9 +517,7 @@ pk_transaction_extra_update_files_check_running_cb (PkBackend *backend, const gc
 	guint len;
 	gboolean ret;
 	gchar **files;
-	PkPackageId *id;
 
-	id = pk_package_id_new_from_string (package_id);
 	files = g_strsplit (filelist, ";", 0);
 
 	/* check each file */
@@ -541,11 +537,10 @@ pk_transaction_extra_update_files_check_running_cb (PkBackend *backend, const gc
 		 * suggest an application restart instead */
 
 		/* send signal about session restart */
-		egg_debug ("package %s updated, and %s is running", id->name, files[i]);
+		egg_debug ("package %s updated, and %s is running", package_id, files[i]);
 		pk_backend_require_restart (extra->priv->backend, PK_RESTART_ENUM_SESSION, package_id);
 	}
 	g_strfreev (files);
-	pk_package_id_free (id);
 }
 
 #ifdef USE_SECURITY_POLKIT
@@ -696,12 +691,10 @@ pk_transaction_extra_update_files_check_desktop_cb (PkBackend *backend, const gc
 	gboolean ret;
 	gchar **files;
 	gchar **package;
-	PkPackageId *id;
 	gchar *md5;
 
-	id = pk_package_id_new_from_string (package_id);
 	files = g_strsplit (filelist, ";", 0);
-	package = g_strsplit (package_id, ";", 0);
+	package = pk_package_id_split (package_id);
 
 	/* check each file */
 	len = g_strv_length (files);
@@ -723,7 +716,6 @@ pk_transaction_extra_update_files_check_desktop_cb (PkBackend *backend, const gc
 	}
 	g_strfreev (files);
 	g_strfreev (package);
-	pk_package_id_free (id);
 }
 
 /**
@@ -1123,7 +1115,7 @@ pk_transaction_extra_init (PkTransactionExtra *extra)
 	extra->priv = PK_POST_TRANS_GET_PRIVATE (extra);
 	extra->priv->running_exec_list = pk_transaction_extra_string_list_new ();
 	extra->priv->loop = g_main_loop_new (NULL, FALSE);
-	extra->priv->list = pk_package_list_new ();
+	extra->priv->list = g_ptr_array_new_with_free_funcxxx ();
 	extra->priv->backend = pk_backend_new ();
 	extra->priv->lsof = pk_lsof_new ();
 	extra->priv->db = NULL;
diff --git a/src/pk-transaction-list.c b/src/pk-transaction-list.c
index 66b2bc1..a51da7b 100644
--- a/src/pk-transaction-list.c
+++ b/src/pk-transaction-list.c
@@ -37,7 +37,7 @@
 #include <glib/gi18n.h>
 #include <dbus/dbus-glib.h>
 #include <dbus/dbus-glib-lowlevel.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 #include "egg-debug.h"
 #include "egg-string.h"
diff --git a/src/pk-transaction-list.h b/src/pk-transaction-list.h
index 83221f0..ffb25a9 100644
--- a/src/pk-transaction-list.h
+++ b/src/pk-transaction-list.h
@@ -23,7 +23,7 @@
 #define __PK_TRANSACTION_LIST_H
 
 #include <glib-object.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 #include "pk-transaction.h"
 
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index 572d1ee..0b28ee4 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -41,7 +41,7 @@
 #include <dbus/dbus-glib.h>
 #include <dbus/dbus-glib-lowlevel.h>
 #include <gio/gio.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 #ifdef USE_SECURITY_POLKIT
 #include <polkit/polkit.h>
 #endif
@@ -117,7 +117,7 @@ struct PkTransactionPrivate
 	gchar			*sender;
 	gchar			*cmdline;
 	GPtrArray		*require_restart_list;
-	PkPackageList		*package_list;
+	GPtrArray		*package_list;
 	PkTransactionList	*transaction_list;
 	PkTransactionDb		*transaction_db;
 
@@ -290,7 +290,6 @@ pk_transaction_set_role (PkTransaction *transaction, PkRoleEnum role)
 static gchar *
 pk_transaction_get_text (PkTransaction *transaction)
 {
-	PkPackageId *id;
 	gchar *text = NULL;
 	const gchar *data;
 
@@ -299,25 +298,10 @@ pk_transaction_get_text (PkTransaction *transaction)
 
 	if (transaction->priv->cached_package_id != NULL) {
 		data = transaction->priv->cached_package_id;
-		/* is a package id? */
-		if (pk_package_id_check (data)) {
-			id = pk_package_id_new_from_string (data);
-			text = g_strdup (id->name);
-			pk_package_id_free (id);
-		} else {
-			text = g_strdup (data);
-		}
+		text = pk_package_id_to_printable (data);
 	} else if (transaction->priv->cached_package_ids != NULL) {
 		data = transaction->priv->cached_package_ids[0];
-		/* is a package id? */
-		if (pk_package_id_check (data)) {
-			/* FIXME: join all with ';' */
-			id = pk_package_id_new_from_string (data);
-			text = g_strdup (id->name);
-			pk_package_id_free (id);
-		} else {
-			text = g_strdup (data);
-		}
+		text = pk_package_id_to_printable (data);
 	} else if (transaction->priv->cached_search != NULL) {
 		text = g_strdup (transaction->priv->cached_search);
 	}
@@ -594,6 +578,7 @@ pk_transaction_finished_cb (PkBackend *backend, PkExitEnum exit_enum, PkTransact
 	gchar **package_ids;
 	guint i, length;
 	GPtrArray *list;
+	GPtrArray *package_list;
 	const PkPackageObj *obj;
 	gchar *package_id;
 
@@ -631,9 +616,9 @@ pk_transaction_finished_cb (PkBackend *backend, PkExitEnum exit_enum, PkTransact
 
 			/* filter on UPDATING */
 			list = g_ptr_array_new ();
-			length = pk_package_list_get_size (transaction->priv->package_list);
-			for (i=0; i<length; i++) {
-				obj = pk_package_list_get_obj (transaction->priv->package_list, i);
+			package_list = transaction->priv->package_list;
+			for (i=0; i<package_list->len; i++) {
+				obj = g_ptr_array_index (package_list, i);
 				if (obj->info == PK_INFO_ENUM_UPDATING) {
 					/* we convert the package_id data to be 'installed' as this means
 					 * we can use the local package database for GetFiles rather than
@@ -664,9 +649,9 @@ pk_transaction_finished_cb (PkBackend *backend, PkExitEnum exit_enum, PkTransact
 
 			/* filter on INSTALLING | UPDATING */
 			list = g_ptr_array_new ();
-			length = pk_package_list_get_size (transaction->priv->package_list);
-			for (i=0; i<length; i++) {
-				obj = pk_package_list_get_obj (transaction->priv->package_list, i);
+			package_list = transaction->priv->package_list;
+			for (i=0; i<package_list->len; i++) {
+				obj = g_ptr_array_index (package_list, i);
 				if (obj->info == PK_INFO_ENUM_INSTALLING || obj->info == PK_INFO_ENUM_UPDATING) {
 					/* we convert the package_id data to be 'installed' */
 					package_id = pk_package_id_build (obj->id->name, obj->id->version, obj->id->arch, "installed");
@@ -761,7 +746,7 @@ pk_transaction_finished_cb (PkBackend *backend, PkExitEnum exit_enum, PkTransact
 		/* report to syslog */
 		length = PK_OBJ_LIST(transaction->priv->package_list)->len;
 		for (i=0; i<length; i++) {
-			obj = pk_package_list_get_obj (transaction->priv->package_list, i);
+			obj = g_ptr_array_index (transaction->priv->package_list, i);
 			if (obj->info == PK_INFO_ENUM_REMOVING ||
 			    obj->info == PK_INFO_ENUM_INSTALLING ||
 			    obj->info == PK_INFO_ENUM_UPDATING) {
@@ -1112,7 +1097,7 @@ pk_transaction_update_detail_cb (PkBackend *backend, const PkUpdateDetailObj *de
 static gboolean
 pk_transaction_pre_transaction_checks (PkTransaction *transaction, gchar **package_ids)
 {
-	PkPackageList *updates;
+	GPtrArray *updates;
 	const PkPackageObj *obj;
 	guint i;
 	guint j;
@@ -1147,9 +1132,8 @@ pk_transaction_pre_transaction_checks (PkTransaction *transaction, gchar **packa
 
 	/* find security update packages */
 	list = g_ptr_array_new ();
-	length = pk_package_list_get_size (updates);
-	for (i=0; i<length; i++) {
-		obj = pk_package_list_get_obj (updates, i);
+	for (i=0; i<updates->len; i++) {
+		obj = g_ptr_array_index (updates, i);
 		if (obj->info == PK_INFO_ENUM_SECURITY) {
 			package_id = pk_package_id_to_string (obj->id);
 			egg_debug ("security update: %s", package_id);
@@ -3015,7 +2999,7 @@ pk_transaction_get_updates (PkTransaction *transaction, const gchar *filter, DBu
 {
 	gboolean ret;
 	GError *error;
-	PkPackageList *updates_cache;
+	GPtrArray *updates_cache;
 	gchar *package_id;
 
 	g_return_if_fail (PK_IS_TRANSACTION (transaction));
@@ -3058,14 +3042,12 @@ pk_transaction_get_updates (PkTransaction *transaction, const gchar *filter, DBu
 		const PkPackageObj *obj;
 		const gchar *info_text;
 		guint i;
-		guint length;
 
-		length = pk_package_list_get_size (updates_cache);
-		egg_debug ("we have cached data (%i) we should use!", length);
+		egg_debug ("we have cached data (%i) we should use!", updates_cache->len);
 
 		/* emulate the backend */
-		for (i=0; i<length; i++) {
-			obj = pk_package_list_get_obj (updates_cache, i);
+		for (i=0; i<updates_cache->len; i++) {
+			obj = g_ptr_array_index (updates_cache, i);
 			info_text = pk_info_enum_to_text (obj->info);
 			package_id = pk_package_id_to_string (obj->id);
 			g_signal_emit (transaction, signals [PK_TRANSACTION_PACKAGE], 0,
@@ -4978,7 +4960,7 @@ pk_transaction_init (PkTransaction *transaction)
 	transaction->priv->conf = pk_conf_new ();
 	transaction->priv->notify = pk_notify_new ();
 	transaction->priv->inhibit = pk_inhibit_new ();
-	transaction->priv->package_list = pk_package_list_new ();
+	transaction->priv->package_list = g_ptr_array_new_with_free_funcxxx ();
 	transaction->priv->transaction_list = pk_transaction_list_new ();
 	transaction->priv->syslog = pk_syslog_new ();
 	transaction->priv->dbus = pk_dbus_new ();
diff --git a/src/pk-transaction.h b/src/pk-transaction.h
index 044910d..a0aa8f2 100644
--- a/src/pk-transaction.h
+++ b/src/pk-transaction.h
@@ -24,7 +24,7 @@
 
 #include <glib-object.h>
 #include <dbus/dbus-glib.h>
-#include <packagekit-glib/packagekit.h>
+#include <packagekit-glib2/packagekit.h>
 
 G_BEGIN_DECLS
 
commit 998f22eef7607e2cf06a39579e71194f83fd1fc9
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 8 12:49:54 2009 +0100

    trivial: fix make check

diff --git a/client/Makefile.am b/client/Makefile.am
index 3fbb68d..fb8b30c 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -186,8 +186,6 @@ pk_self_test_SOURCES =					\
 	egg-string.h					\
 	egg-test.c					\
 	egg-test.h					\
-	pk-task-text.c					\
-	pk-task-text.h					\
 	pk-self-test.c					\
 	$(NULL)
 
diff --git a/client/pk-self-test.c b/client/pk-self-test.c
index 9c5032a..eba7cc5 100644
--- a/client/pk-self-test.c
+++ b/client/pk-self-test.c
@@ -27,8 +27,6 @@
 #include "egg-test.h"
 #include "egg-debug.h"
 
-#include "pk-task-text.h"
-
 /* prototypes */
 void pk_genpack_test (EggTest *test);
 
@@ -43,7 +41,6 @@ main (int argc, char **argv)
 
 	/* tests go here */
 	//pk_genpack_test (test);
-	pk_task_text_test (test);
 	
 	return (egg_test_finish (test));
 }
commit 929178f10cfdb73290129f4a923eccb0e1e9d422
Merge: c0aa5bb... 8bdf42a...
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 8 12:38:46 2009 +0100

    Merge branch 'master' into lib-private

commit c0aa5bbeb1785bf4e74c1eee449e7016256be710
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 8 12:37:34 2009 +0100

    glib2: Make the PkItem structures refcountable

diff --git a/lib/packagekit-glib2/pk-item.c b/lib/packagekit-glib2/pk-item.c
index 06ee7d0..c3acde2 100644
--- a/lib/packagekit-glib2/pk-item.c
+++ b/lib/packagekit-glib2/pk-item.c
@@ -33,42 +33,301 @@
 
 #include "egg-debug.h"
 
+
+/**
+ * pk_item_package_ref:
+ * @item: the #PkItemPackage
+ *
+ * Increases the reference count by one.
+ *
+ * Return value: the @item
+ **/
+PkItemPackage *
+pk_item_package_ref (PkItemPackage *item)
+{
+	g_return_val_if_fail (item != NULL, NULL);
+	item->refcount++;
+	return item;
+}
+
+/**
+ * pk_item_details_ref:
+ * @item: the #PkItemDetails
+ *
+ * Increases the reference count by one.
+ *
+ * Return value: the @item
+ **/
+PkItemDetails *
+pk_item_details_ref (PkItemDetails *item)
+{
+	g_return_val_if_fail (item != NULL, NULL);
+	item->refcount++;
+	return item;
+}
+
+/**
+ * pk_item_update_detail_ref:
+ * @item: the #PkItemUpdateDetail
+ *
+ * Increases the reference count by one.
+ *
+ * Return value: the @item
+ **/
+PkItemUpdateDetail *
+pk_item_update_detail_ref (PkItemUpdateDetail *item)
+{
+	g_return_val_if_fail (item != NULL, NULL);
+	item->refcount++;
+	return item;
+}
+
+/**
+ * pk_item_category_ref:
+ * @item: the #PkItemCategory
+ *
+ * Increases the reference count by one.
+ *
+ * Return value: the @item
+ **/
+PkItemCategory *
+pk_item_category_ref (PkItemCategory *item)
+{
+	g_return_val_if_fail (item != NULL, NULL);
+	item->refcount++;
+	return item;
+}
+
+/**
+ * pk_item_distro_upgrade_ref:
+ * @item: the #PkItemDistroUpgrade
+ *
+ * Increases the reference count by one.
+ *
+ * Return value: the @item
+ **/
+PkItemDistroUpgrade *
+pk_item_distro_upgrade_ref (PkItemDistroUpgrade *item)
+{
+	g_return_val_if_fail (item != NULL, NULL);
+	item->refcount++;
+	return item;
+}
+
+/**
+ * pk_item_require_restart_ref:
+ * @item: the #PkItemRequireRestart
+ *
+ * Increases the reference count by one.
+ *
+ * Return value: the @item
+ **/
+PkItemRequireRestart *
+pk_item_require_restart_ref (PkItemRequireRestart *item)
+{
+	g_return_val_if_fail (item != NULL, NULL);
+	item->refcount++;
+	return item;
+}
+
+/**
+ * pk_item_transaction_ref:
+ * @item: the #PkItemTransaction
+ *
+ * Increases the reference count by one.
+ *
+ * Return value: the @item
+ **/
+PkItemTransaction *
+pk_item_transaction_ref (PkItemTransaction *item)
+{
+	g_return_val_if_fail (item != NULL, NULL);
+	item->refcount++;
+	return item;
+}
+
+/**
+ * pk_item_files_ref:
+ * @item: the #PkItemFiles
+ *
+ * Increases the reference count by one.
+ *
+ * Return value: the @item
+ **/
+PkItemFiles *
+pk_item_files_ref (PkItemFiles *item)
+{
+	g_return_val_if_fail (item != NULL, NULL);
+
+	/* post decrement */
+	if (item->refcount-- != 0)
+		return item;
+
+	g_strfreev (item->files);
+	return NULL;
+}
+
+/**
+ * pk_item_repo_signature_required_ref:
+ * @item: the #PkItemRepoSignatureRequired
+ *
+ * Increases the reference count by one.
+ *
+ * Return value: the @item
+ **/
+PkItemRepoSignatureRequired *
+pk_item_repo_signature_required_ref (PkItemRepoSignatureRequired *item)
+{
+	g_return_val_if_fail (item != NULL, NULL);
+	item->refcount++;
+	return item;
+}
+
+/**
+ * pk_item_eula_required_ref:
+ * @item: the #PkItemEulaRequired
+ *
+ * Increases the reference count by one.
+ *
+ * Return value: the @item
+ **/
+PkItemEulaRequired *
+pk_item_eula_required_ref (PkItemEulaRequired *item)
+{
+	g_return_val_if_fail (item != NULL, NULL);
+	item->refcount++;
+	return item;
+}
+
+/**
+ * pk_item_media_change_required_ref:
+ * @item: the #PkItemMediaChangeRequired
+ *
+ * Increases the reference count by one.
+ *
+ * Return value: the @item
+ **/
+PkItemMediaChangeRequired *
+pk_item_media_change_required_ref (PkItemMediaChangeRequired *item)
+{
+	g_return_val_if_fail (item != NULL, NULL);
+	item->refcount++;
+	return item;
+}
+
+/**
+ * pk_item_repo_detail_ref:
+ * @item: the #PkItemRepoDetail
+ *
+ * Increases the reference count by one.
+ *
+ * Return value: the @item
+ **/
+PkItemRepoDetail *
+pk_item_repo_detail_ref (PkItemRepoDetail *item)
+{
+	g_return_val_if_fail (item != NULL, NULL);
+	item->refcount++;
+	return item;
+}
+
+/**
+ * pk_item_error_code_ref:
+ * @item: the #PkItemErrorCode
+ *
+ * Increases the reference count by one.
+ *
+ * Return value: the @item
+ **/
+PkItemErrorCode *
+pk_item_error_code_ref (PkItemErrorCode *item)
+{
+	g_return_val_if_fail (item != NULL, NULL);
+	item->refcount++;
+	return item;
+}
+
+/**
+ * pk_item_message_ref:
+ * @item: the #PkItemMessage
+ *
+ * Increases the reference count by one.
+ *
+ * Return value: the @item
+ **/
+PkItemMessage *
+pk_item_message_ref (PkItemMessage *item)
+{
+	g_return_val_if_fail (item != NULL, NULL);
+	item->refcount++;
+	return item;
+}
+
 /**
  * pk_item_package_unref:
+ * @item: the #PkItemPackage
+ *
+ * Decreases the reference count by one.
+ *
+ * Return value: the @item, or %NULL if the object is no longer valid
  **/
-void
+PkItemPackage *
 pk_item_package_unref (PkItemPackage *item)
 {
-	if (item == NULL)
-		return;
+	g_return_val_if_fail (item != NULL, NULL);
+
+	/* post decrement */
+	if (item->refcount-- != 0)
+		return item;
+
 	g_free (item->package_id);
 	g_free (item->summary);
 	g_free (item);
+	return NULL;
 }
 
 /**
  * pk_item_details_unref:
+ * @item: the #PkItemDetails
+ *
+ * Decreases the reference count by one.
+ *
+ * Return value: the @item, or %NULL if the object is no longer valid
  **/
-void
+PkItemDetails *
 pk_item_details_unref (PkItemDetails *item)
 {
-	if (item == NULL)
-		return;
+	g_return_val_if_fail (item != NULL, NULL);
+
+	/* post decrement */
+	if (item->refcount-- != 0)
+		return item;
+
 	g_free (item->package_id);
 	g_free (item->license);
 	g_free (item->description);
 	g_free (item->url);
 	g_free (item);
+	return NULL;
 }
 
 /**
  * pk_item_update_detail_unref:
+ * @item: the #PkItemUpdateDetail
+ *
+ * Decreases the reference count by one.
+ *
+ * Return value: the @item, or %NULL if the object is no longer valid
  **/
-void
+PkItemUpdateDetail *
 pk_item_update_detail_unref (PkItemUpdateDetail *item)
 {
-	if (item == NULL)
-		return;
+	g_return_val_if_fail (item != NULL, NULL);
+
+	/* post decrement */
+	if (item->refcount-- != 0)
+		return item;
+
 	g_free (item->package_id);
 	g_free (item->updates);
 	g_free (item->obsoletes);
@@ -82,85 +341,145 @@ pk_item_update_detail_unref (PkItemUpdateDetail *item)
 	if (item->updated != NULL)
 		g_date_free (item->updated);
 	g_free (item);
+	return NULL;
 }
 
 /**
  * pk_item_category_unref:
+ * @item: the #PkItemCategory
+ *
+ * Decreases the reference count by one.
+ *
+ * Return value: the @item, or %NULL if the object is no longer valid
  **/
-void
+PkItemCategory *
 pk_item_category_unref (PkItemCategory *item)
 {
-	if (item == NULL)
-		return;
+	g_return_val_if_fail (item != NULL, NULL);
+
+	/* post decrement */
+	if (item->refcount-- != 0)
+		return item;
+
 	g_free (item->parent_id);
 	g_free (item->cat_id);
 	g_free (item->name);
 	g_free (item->summary);
 	g_free (item->icon);
 	g_free (item);
+	return NULL;
 }
 
 /**
  * pk_item_distro_upgrade_unref:
+ * @item: the #PkItemDistroUpgrade
+ *
+ * Decreases the reference count by one.
+ *
+ * Return value: the @item, or %NULL if the object is no longer valid
  **/
-void
+PkItemDistroUpgrade *
 pk_item_distro_upgrade_unref (PkItemDistroUpgrade *item)
 {
-	if (item == NULL)
-		return;
+	g_return_val_if_fail (item != NULL, NULL);
+
+	/* post decrement */
+	if (item->refcount-- != 0)
+		return item;
+
 	g_free (item->name);
 	g_free (item->summary);
 	g_free (item);
+	return NULL;
 }
 
 /**
  * pk_item_require_restart_unref:
+ * @item: the #PkItemRequireRestart
+ *
+ * Decreases the reference count by one.
+ *
+ * Return value: the @item, or %NULL if the object is no longer valid
  **/
-void
+PkItemRequireRestart *
 pk_item_require_restart_unref (PkItemRequireRestart *item)
 {
-	if (item == NULL)
-		return;
+	g_return_val_if_fail (item != NULL, NULL);
+
+	/* post decrement */
+	if (item->refcount-- != 0)
+		return item;
+
 	g_free (item->package_id);
 	g_free (item);
+	return NULL;
 }
 
 /**
  * pk_item_transaction_unref:
+ * @item: the #PkItemTransaction
+ *
+ * Decreases the reference count by one.
+ *
+ * Return value: the @item, or %NULL if the object is no longer valid
  **/
-void
+PkItemTransaction *
 pk_item_transaction_unref (PkItemTransaction *item)
 {
-	if (item == NULL)
-		return;
+	g_return_val_if_fail (item != NULL, NULL);
+
+	/* post decrement */
+	if (item->refcount-- != 0)
+		return item;
+
 	g_free (item->tid);
 	g_free (item->timespec);
 	g_free (item->data);
 	g_free (item->cmdline);
 	g_free (item);
+	return NULL;
 }
 
 /**
  * pk_item_files_unref:
+ * @item: the #PkItemFiles
+ *
+ * Decreases the reference count by one.
+ *
+ * Return value: the @item, or %NULL if the object is no longer valid
  **/
-void
+PkItemFiles *
 pk_item_files_unref (PkItemFiles *item)
 {
-	if (item == NULL)
-		return;
+	g_return_val_if_fail (item != NULL, NULL);
+
+	/* post decrement */
+	if (item->refcount-- != 0)
+		return item;
+
 	g_free (item->package_id);
 	g_strfreev (item->files);
 	g_free (item);
+	return NULL;
 }
 
 /**
  * pk_item_repo_signature_required_unref:
+ * @item: the #PkItemRepoSignatureRequired
+ *
+ * Decreases the reference count by one.
+ *
+ * Return value: the @item, or %NULL if the object is no longer valid
  **/
-void
+PkItemRepoSignatureRequired *
 pk_item_repo_signature_required_unref (PkItemRepoSignatureRequired *item)
 {
-	if (item == NULL)
-		return;
+	g_return_val_if_fail (item != NULL, NULL);
+
+	/* post decrement */
+	if (item->refcount-- != 0)
+		return item;
+
 	g_free (item->package_id);
 	g_free (item->repository_name);
 	g_free (item->key_url);
@@ -169,71 +488,122 @@ pk_item_repo_signature_required_unref (PkItemRepoSignatureRequired *item)
 	g_free (item->key_fingerprint);
 	g_free (item->key_timestamp);
 	g_free (item);
+	return NULL;
 }
 
 /**
  * pk_item_eula_required_unref:
+ * @item: the #PkItemEulaRequired
+ *
+ * Decreases the reference count by one.
+ *
+ * Return value: the @item, or %NULL if the object is no longer valid
  **/
-void
+PkItemEulaRequired *
 pk_item_eula_required_unref (PkItemEulaRequired *item)
 {
-	if (item == NULL)
-		return;
+	g_return_val_if_fail (item != NULL, NULL);
+
+	/* post decrement */
+	if (item->refcount-- != 0)
+		return item;
+
 	g_free (item->eula_id);
 	g_free (item->package_id);
 	g_free (item->vendor_name);
 	g_free (item->license_agreement);
 	g_free (item);
+	return NULL;
 }
 
 /**
  * pk_item_media_change_required_unref:
+ * @item: the #PkItemMediaChangeRequired
+ *
+ * Decreases the reference count by one.
+ *
+ * Return value: the @item, or %NULL if the object is no longer valid
  **/
-void
+PkItemMediaChangeRequired *
 pk_item_media_change_required_unref (PkItemMediaChangeRequired *item)
 {
-	if (item == NULL)
-		return;
+	g_return_val_if_fail (item != NULL, NULL);
+
+	/* post decrement */
+	if (item->refcount-- != 0)
+		return item;
+
 	g_free (item->media_id);
 	g_free (item->media_text);
 	g_free (item);
+	return NULL;
 }
 
 /**
  * pk_item_repo_detail_unref:
+ * @item: the #PkItemRepoDetail
+ *
+ * Decreases the reference count by one.
+ *
+ * Return value: the @item, or %NULL if the object is no longer valid
  **/
-void
+PkItemRepoDetail *
 pk_item_repo_detail_unref (PkItemRepoDetail *item)
 {
-	if (item == NULL)
-		return;
+	g_return_val_if_fail (item != NULL, NULL);
+
+	/* post decrement */
+	if (item->refcount-- != 0)
+		return item;
+
 	g_free (item->repo_id);
 	g_free (item->description);
 	g_free (item);
+	return NULL;
 }
 
 /**
  * pk_item_error_code_unref:
+ * @item: the #PkItemErrorCode
+ *
+ * Decreases the reference count by one.
+ *
+ * Return value: the @item, or %NULL if the object is no longer valid
  **/
-void
+PkItemErrorCode *
 pk_item_error_code_unref (PkItemErrorCode *item)
 {
-	if (item == NULL)
-		return;
+	g_return_val_if_fail (item != NULL, NULL);
+
+	/* post decrement */
+	if (item->refcount-- != 0)
+		return item;
+
 	g_free (item->details);
 	g_free (item);
+	return NULL;
 }
 
 /**
  * pk_item_message_unref:
+ * @item: the #PkItemMessage
+ *
+ * Decreases the reference count by one.
+ *
+ * Return value: the @item, or %NULL if the object is no longer valid
  **/
-void
+PkItemMessage *
 pk_item_message_unref (PkItemMessage *item)
 {
-	if (item == NULL)
-		return;
+	g_return_val_if_fail (item != NULL, NULL);
+
+	/* post decrement */
+	if (item->refcount-- != 0)
+		return item;
+
 	g_free (item->details);
 	g_free (item);
+	return NULL;
 }
 
 /***************************************************************************
@@ -246,29 +616,10 @@ void
 pk_item_test (gpointer user_data)
 {
 	EggTest *test = (EggTest *) user_data;
-#if 0
-	gboolean ret;
-	PkResults *results;
-	PkExitEnum exit_enum;
-	GPtrArray *packages;
-	const PkItemPackage *item;
 
 	if (!egg_test_start (test, "PkResults"))
 		return;
 
-	/************************************************************/
-	egg_test_title (test, "get results");
-	results = pk_results_new ();
-	egg_test_assert (test, results != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "get exit code of unset results");
-	exit_enum = pk_results_get_exit_code (results);
-	egg_test_assert (test, (exit_enum == PK_EXIT_ENUM_UNKNOWN));
-
-	g_object_unref (results);
-#endif
-
 	egg_test_end (test);
 }
 #endif
diff --git a/lib/packagekit-glib2/pk-item.h b/lib/packagekit-glib2/pk-item.h
index 48030aa..e7d9df2 100644
--- a/lib/packagekit-glib2/pk-item.h
+++ b/lib/packagekit-glib2/pk-item.h
@@ -43,6 +43,7 @@ G_BEGIN_DECLS
  **/
 typedef struct
 {
+	guint				 refcount;
 	PkRestartEnum			 restart;
 	gchar				*package_id;
 } PkItemRequireRestart;
@@ -54,6 +55,7 @@ typedef struct
  **/
 typedef struct
 {
+	guint				 refcount;
 	gchar				*tid;
 	gchar				*timespec;
 	gboolean			 succeeded;
@@ -70,6 +72,7 @@ typedef struct
  * Object to represent details about the update.
  **/
 typedef struct {
+	guint				 refcount;
 	gchar				*package_id;
 	gchar				*license;
 	PkGroupEnum			 group_enum;
@@ -84,6 +87,7 @@ typedef struct {
  * Object to represent details about the update.
  **/
 typedef struct {
+	guint				 refcount;
 	gchar				*package_id;
 	gchar				*updates;
 	gchar				*obsoletes;
@@ -104,6 +108,7 @@ typedef struct {
  * Object to represent details about a package.
  **/
 typedef struct {
+	guint				 refcount;
 	PkInfoEnum			 info_enum;
 	gchar				*package_id;
 	gchar				*summary;
@@ -116,6 +121,7 @@ typedef struct {
  **/
 typedef struct
 {
+	guint				 refcount;
 	PkUpdateStateEnum		 state;
 	gchar				*name;
 	gchar				*summary;
@@ -128,6 +134,7 @@ typedef struct
  **/
 typedef struct
 {
+	guint				 refcount;
 	gchar				*parent_id;
 	gchar				*cat_id;
 	gchar				*name;
@@ -142,6 +149,7 @@ typedef struct
  **/
 typedef struct
 {
+	guint				 refcount;
 	gchar				*package_id;
 	gchar				**files;
 } PkItemFiles;
@@ -153,6 +161,7 @@ typedef struct
  **/
 typedef struct
 {
+	guint				 refcount;
 	gchar				*package_id;
 	gchar				*repository_name;
 	gchar				*key_url;
@@ -170,6 +179,7 @@ typedef struct
  **/
 typedef struct
 {
+	guint				 refcount;
 	gchar				*eula_id;
 	gchar				*package_id;
 	gchar				*vendor_name;
@@ -183,6 +193,7 @@ typedef struct
  **/
 typedef struct
 {
+	guint				 refcount;
 	PkMediaTypeEnum			 media_type;
 	gchar				*media_id;
 	gchar				*media_text;
@@ -195,6 +206,7 @@ typedef struct
  **/
 typedef struct
 {
+	guint				 refcount;
 	gchar				*repo_id;
 	gchar				*description;
 	gboolean			 enabled;
@@ -207,6 +219,7 @@ typedef struct
  **/
 typedef struct
 {
+	guint				 refcount;
 	PkErrorCodeEnum			 code;
 	gchar				*details;
 } PkItemErrorCode;
@@ -218,26 +231,40 @@ typedef struct
  **/
 typedef struct
 {
+	guint				 refcount;
 	PkMessageEnum			 message;
 	gchar				*details;
 } PkItemMessage;
 
-//GPtrArray	*pk_results_get_message_array		(PkResults		*results);
-void		 pk_item_test				(gpointer		 user_data);
-void		 pk_item_package_unref		(PkItemPackage	*item);
-void		 pk_item_details_unref		(PkItemDetails	*item);
-void		 pk_item_update_detail_unref		(PkItemUpdateDetail	*item);
-void		 pk_item_category_unref		(PkItemCategory	*item);
-void		 pk_item_distro_upgrade_unref		(PkItemDistroUpgrade	*item);
-void		 pk_item_require_restart_unref		(PkItemRequireRestart	*item);
-void		 pk_item_transaction_unref		(PkItemTransaction	*item);
-void		 pk_item_files_unref		(PkItemFiles	*item);
-void		 pk_item_repo_signature_required_unref		(PkItemRepoSignatureRequired	*item);
-void		 pk_item_eula_required_unref		(PkItemEulaRequired	*item);
-void		 pk_item_media_change_required_unref		(PkItemMediaChangeRequired	*item);
-void		 pk_item_repo_detail_unref		(PkItemRepoDetail	*item);
-void		 pk_item_error_code_unref		(PkItemErrorCode	*item);
-void		 pk_item_message_unref		(PkItemMessage	*item);
+void			 pk_item_test				(gpointer		 user_data);
+PkItemPackage		*pk_item_package_ref			(PkItemPackage		*item);
+PkItemPackage		*pk_item_package_unref			(PkItemPackage		*item);
+PkItemDetails		*pk_item_details_ref			(PkItemDetails		*item);
+PkItemDetails		*pk_item_details_unref			(PkItemDetails		*item);
+PkItemUpdateDetail	*pk_item_update_detail_ref		(PkItemUpdateDetail	*item);
+PkItemUpdateDetail	*pk_item_update_detail_unref		(PkItemUpdateDetail	*item);
+PkItemCategory		*pk_item_category_ref			(PkItemCategory		*item);
+PkItemCategory		*pk_item_category_unref			(PkItemCategory		*item);
+PkItemDistroUpgrade	*pk_item_distro_upgrade_ref		(PkItemDistroUpgrade	*item);
+PkItemDistroUpgrade	*pk_item_distro_upgrade_unref		(PkItemDistroUpgrade	*item);
+PkItemRequireRestart	*pk_item_require_restart_ref		(PkItemRequireRestart	*item);
+PkItemRequireRestart	*pk_item_require_restart_unref		(PkItemRequireRestart	*item);
+PkItemTransaction	*pk_item_transaction_ref		(PkItemTransaction	*item);
+PkItemTransaction	*pk_item_transaction_unref		(PkItemTransaction	*item);
+PkItemFiles		*pk_item_files_ref			(PkItemFiles		*item);
+PkItemFiles		*pk_item_files_unref			(PkItemFiles		*item);
+PkItemRepoSignatureRequired	*pk_item_repo_signature_required_ref	(PkItemRepoSignatureRequired	*item);
+PkItemRepoSignatureRequired	*pk_item_repo_signature_required_unref	(PkItemRepoSignatureRequired	*item);
+PkItemEulaRequired	*pk_item_eula_required_ref		(PkItemEulaRequired	*item);
+PkItemEulaRequired	*pk_item_eula_required_unref		(PkItemEulaRequired	*item);
+PkItemMediaChangeRequired	*pk_item_media_change_required_ref	(PkItemMediaChangeRequired	*item);
+PkItemMediaChangeRequired	*pk_item_media_change_required_unref	(PkItemMediaChangeRequired	*item);
+PkItemRepoDetail	*pk_item_repo_detail_ref		(PkItemRepoDetail	*item);
+PkItemRepoDetail	*pk_item_repo_detail_unref		(PkItemRepoDetail	*item);
+PkItemErrorCode		*pk_item_error_code_ref			(PkItemErrorCode	*item);
+PkItemErrorCode		*pk_item_error_code_unref		(PkItemErrorCode	*item);
+PkItemMessage		*pk_item_message_ref			(PkItemMessage		*item);
+PkItemMessage		*pk_item_message_unref			(PkItemMessage		*item);
 
 G_END_DECLS
 
diff --git a/lib/packagekit-glib2/pk-results.c b/lib/packagekit-glib2/pk-results.c
index 7fefc15..7a41e3f 100644
--- a/lib/packagekit-glib2/pk-results.c
+++ b/lib/packagekit-glib2/pk-results.c
@@ -962,7 +962,7 @@ pk_results_test (gpointer user_data)
 	PkResults *results;
 	PkExitEnum exit_enum;
 	GPtrArray *packages;
-	const PkItemPackage *item;
+	PkItemPackage *item;
 
 	if (!egg_test_start (test, "PkResults"))
 		return;
@@ -1009,9 +1009,16 @@ pk_results_test (gpointer user_data)
 	egg_test_assert (test, (item->info_enum == PK_INFO_ENUM_AVAILABLE &&
 				g_strcmp0 ("gnome-power-manager;0.1.2;i386;fedora", item->package_id) == 0 &&
 				g_strcmp0 ("Power manager for GNOME", item->summary) == 0));
-
+	pk_item_package_ref (item);
 	g_ptr_array_unref (packages);
 
+	/************************************************************/
+	egg_test_title (test, "check ref");
+	egg_test_assert (test, (item->info_enum == PK_INFO_ENUM_AVAILABLE &&
+				g_strcmp0 ("gnome-power-manager;0.1.2;i386;fedora", item->package_id) == 0 &&
+				g_strcmp0 ("Power manager for GNOME", item->summary) == 0));
+	pk_item_package_unref (item);
+
 	g_object_unref (results);
 	egg_test_end (test);
 }
diff --git a/lib/packagekit-glib2/pk-self-test.c b/lib/packagekit-glib2/pk-self-test.c
index 2656aa9..b4a723c 100644
--- a/lib/packagekit-glib2/pk-self-test.c
+++ b/lib/packagekit-glib2/pk-self-test.c
@@ -58,6 +58,7 @@ main (int argc, char **argv)
 	pk_package_ids_test (test);
 	pk_progress_test (test);
 	pk_results_test (test);
+	pk_item_test (test);
 	pk_package_test (test);
 	pk_control_test (test);
 	pk_client_test (test);
commit b1c1921071e6b31e3eac8c0eca9d82d0a0f87059
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 8 12:18:30 2009 +0100

    trivial: split out the PkItem functionality from PkResults

diff --git a/client/pk-console-test.c b/client/pk-console-test.c
index 3c6adda..a0def35 100644
--- a/client/pk-console-test.c
+++ b/client/pk-console-test.c
@@ -86,7 +86,7 @@ pk_strpad (const gchar *data, guint length)
  * pk_console_package_cb:
  **/
 static void
-pk_console_package_cb (const PkResultItemPackage *obj, gpointer data)
+pk_console_package_cb (const PkItemPackage *obj, gpointer data)
 {
 	gchar *package = NULL;
 	gchar *package_pad = NULL;
@@ -129,7 +129,7 @@ out:
  * pk_console_transaction_cb:
  **/
 static void
-pk_console_transaction_cb (const PkResultItemTransaction *obj, gpointer user_data)
+pk_console_transaction_cb (const PkItemTransaction *obj, gpointer user_data)
 {
 	struct passwd *pw;
 	const gchar *role_text;
@@ -195,7 +195,7 @@ pk_console_transaction_cb (const PkResultItemTransaction *obj, gpointer user_dat
  * pk_console_distro_upgrade_cb:
  **/
 static void
-pk_console_distro_upgrade_cb (const PkResultItemDistroUpgrade *obj, gpointer user_data)
+pk_console_distro_upgrade_cb (const PkItemDistroUpgrade *obj, gpointer user_data)
 {
 	/* TRANSLATORS: this is the distro, e.g. Fedora 10 */
 	g_print ("%s: %s\n", _("Distribution"), obj->name);
@@ -209,7 +209,7 @@ pk_console_distro_upgrade_cb (const PkResultItemDistroUpgrade *obj, gpointer use
  * pk_console_category_cb:
  **/
 static void
-pk_console_category_cb (const PkResultItemCategory *obj, gpointer user_data)
+pk_console_category_cb (const PkItemCategory *obj, gpointer user_data)
 {
 	/* TRANSLATORS: this is the group category name */
 	g_print ("%s: %s\n", _("Category"), obj->name);
@@ -233,7 +233,7 @@ pk_console_category_cb (const PkResultItemCategory *obj, gpointer user_data)
  * pk_console_update_detail_cb:
  **/
 static void
-pk_console_update_detail_cb (const PkResultItemUpdateDetail *detail, gpointer data)
+pk_console_update_detail_cb (const PkItemUpdateDetail *detail, gpointer data)
 {
 	gchar *issued;
 	gchar *updated;
@@ -302,7 +302,7 @@ pk_console_update_detail_cb (const PkResultItemUpdateDetail *detail, gpointer da
  * pk_console_repo_detail_cb:
  **/
 static void
-pk_console_repo_detail_cb (const PkResultItemRepoDetail *obj, gpointer data)
+pk_console_repo_detail_cb (const PkItemRepoDetail *obj, gpointer data)
 {
 	gchar *enabled_pad;
 	gchar *repo_pad;
@@ -325,7 +325,7 @@ pk_console_repo_detail_cb (const PkResultItemRepoDetail *obj, gpointer data)
  * pk_console_require_restart_cb:
  **/
 static void
-pk_console_require_restart_cb (const PkResultItemRequireRestart *obj, gpointer data)
+pk_console_require_restart_cb (const PkItemRequireRestart *obj, gpointer data)
 {
 	gchar *package = NULL;
 
@@ -355,7 +355,7 @@ pk_console_require_restart_cb (const PkResultItemRequireRestart *obj, gpointer d
  * pk_console_details_cb:
  **/
 static void
-pk_console_details_cb (const PkResultItemDetails *obj, gpointer data)
+pk_console_details_cb (const PkItemDetails *obj, gpointer data)
 {
 	gchar *package = NULL;
 
@@ -378,7 +378,7 @@ pk_console_details_cb (const PkResultItemDetails *obj, gpointer data)
  * pk_console_message_cb:
  **/
 static void
-pk_console_message_cb (const PkResultItemMessage *obj, gpointer data)
+pk_console_message_cb (const PkItemMessage *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);
@@ -388,7 +388,7 @@ pk_console_message_cb (const PkResultItemMessage *obj, gpointer data)
  * pk_console_files_cb:
  **/
 static void
-pk_console_files_cb (PkResultItemFiles *obj, gpointer data)
+pk_console_files_cb (PkItemFiles *obj, gpointer data)
 {
 	guint i;
 
@@ -441,7 +441,7 @@ pk_console_progress_cb (PkProgress *progress, PkProgressType type, gpointer data
 static void
 pk_console_finished_cb (GObject *object, GAsyncResult *res, gpointer data)
 {
-	const PkResultItemErrorCode *error_item;
+	const PkItemErrorCode *error_item;
 	PkResults *results;
 	GError *error = NULL;
 	GPtrArray *array;
diff --git a/contrib/command-not-found/pk-command-not-found-test.c b/contrib/command-not-found/pk-command-not-found-test.c
index 16ec291..9997d1e 100644
--- a/contrib/command-not-found/pk-command-not-found-test.c
+++ b/contrib/command-not-found/pk-command-not-found-test.c
@@ -389,7 +389,7 @@ pk_cnf_search_file (PkClient *client_, PkBitfield filter, const gchar *filename,
 	PkResults *results;
 	GPtrArray *array = NULL;
 	guint i;
-	const PkResultItemPackage *item;
+	const PkItemPackage *item;
 
 	/* get the list of possibles */
 	results = pk_client_search_file_sync (client_, filter, filename, cancellable,
diff --git a/lib/packagekit-glib2/Makefile.am b/lib/packagekit-glib2/Makefile.am
index c47b4a7..f02ae9f 100644
--- a/lib/packagekit-glib2/Makefile.am
+++ b/lib/packagekit-glib2/Makefile.am
@@ -77,6 +77,8 @@ libpackagekit_glib2_la_SOURCES =				\
 	pk-service-pack.h					\
 	pk-results.c						\
 	pk-results.h						\
+	pk-item.c						\
+	pk-item.h						\
 	pk-task.c						\
 	pk-task.h						\
 	pk-version.h						\
diff --git a/lib/packagekit-glib2/packagekit.h b/lib/packagekit-glib2/packagekit.h
index 93007db..e3572fd 100644
--- a/lib/packagekit-glib2/packagekit.h
+++ b/lib/packagekit-glib2/packagekit.h
@@ -28,6 +28,7 @@
 #include <packagekit-glib2/pk-common.h>
 #include <packagekit-glib2/pk-control.h>
 #include <packagekit-glib2/pk-enum.h>
+#include <packagekit-glib2/pk-item.h>
 #include <packagekit-glib2/pk-package-id.h>
 #include <packagekit-glib2/pk-package-ids.h>
 #include <packagekit-glib2/pk-package-sack.h>
diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index 521ae77..020f5ba 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -361,7 +361,7 @@ pk_client_state_finish (PkClientState *state, GError *error)
 static void
 pk_client_copy_finished_remove_old_files (PkClientState *state)
 {
-	const PkResultItemFiles *item;
+	const PkItemFiles *item;
 	GPtrArray *array = NULL;
 	guint i;
 
@@ -481,7 +481,7 @@ pk_client_copy_downloaded (PkClientState *state)
 	guint i;
 	guint j;
 	guint len;
-	const PkResultItemFiles *item;
+	const PkItemFiles *item;
 	GPtrArray *array = NULL;
 
 	/* get data */
@@ -516,7 +516,7 @@ pk_client_finished_cb (DBusGProxy *proxy, const gchar *exit_text, guint runtime,
 {
 	GError *error = NULL;
 	PkExitEnum exit_enum;
-	const PkResultItemErrorCode *error_item;
+	const PkItemErrorCode *error_item;
 
 	egg_debug ("exit_text=%s", exit_text);
 
@@ -3332,7 +3332,7 @@ pk_client_test_resolve_cb (GObject *object, GAsyncResult *res, EggTest *test)
 	PkResults *results = NULL;
 	PkExitEnum exit_enum;
 	GPtrArray *packages;
-	const PkResultItemPackage *item;
+	const PkItemPackage *item;
 	guint i;
 
 	/* get the results */
@@ -3377,7 +3377,7 @@ pk_client_test_get_details_cb (GObject *object, GAsyncResult *res, EggTest *test
 	PkResults *results = NULL;
 	PkExitEnum exit_enum;
 	GPtrArray *details;
-	const PkResultItemDetails *item;
+	const PkItemDetails *item;
 	guint i;
 
 	/* get the results */
@@ -3461,7 +3461,7 @@ pk_client_test_search_name_cb (GObject *object, GAsyncResult *res, EggTest *test
 	GError *error = NULL;
 	PkResults *results = NULL;
 	PkExitEnum exit_enum;
-	const PkResultItemErrorCode *error_item;
+	const PkItemErrorCode *error_item;
 
 	/* get the results */
 	results = pk_client_generic_finish (client, res, &error);
@@ -3522,7 +3522,7 @@ pk_client_test_download_cb (GObject *object, GAsyncResult *res, EggTest *test)
 	GError *error = NULL;
 	PkResults *results = NULL;
 	PkExitEnum exit_enum;
-	const PkResultItemFiles *item;
+	const PkItemFiles *item;
 	GPtrArray *array = NULL;
 	guint len;
 
diff --git a/lib/packagekit-glib2/pk-console-shared.c b/lib/packagekit-glib2/pk-console-shared.c
index b2359f2..62b2432 100644
--- a/lib/packagekit-glib2/pk-console-shared.c
+++ b/lib/packagekit-glib2/pk-console-shared.c
@@ -114,7 +114,7 @@ pk_console_resolve_package (PkClient *client, PkBitfield filter, const gchar *pa
 	GPtrArray *array = NULL;
 	guint i;
 	gchar *printable;
-	const PkResultItemPackage *item;
+	const PkItemPackage *item;
 
 	/* have we passed a complete package_id? */
 	valid = pk_package_id_check (package);
diff --git a/lib/packagekit-glib2/pk-item.c b/lib/packagekit-glib2/pk-item.c
new file mode 100644
index 0000000..06ee7d0
--- /dev/null
+++ b/lib/packagekit-glib2/pk-item.c
@@ -0,0 +1,275 @@
+/* -*- 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.
+ */
+
+/**
+ * SECTION:pk-item
+ * @short_description: TODO
+ */
+
+#include "config.h"
+
+#include <glib.h>
+
+#include <packagekit-glib2/pk-item.h>
+#include <packagekit-glib2/pk-enum.h>
+
+#include "egg-debug.h"
+
+/**
+ * pk_item_package_unref:
+ **/
+void
+pk_item_package_unref (PkItemPackage *item)
+{
+	if (item == NULL)
+		return;
+	g_free (item->package_id);
+	g_free (item->summary);
+	g_free (item);
+}
+
+/**
+ * pk_item_details_unref:
+ **/
+void
+pk_item_details_unref (PkItemDetails *item)
+{
+	if (item == NULL)
+		return;
+	g_free (item->package_id);
+	g_free (item->license);
+	g_free (item->description);
+	g_free (item->url);
+	g_free (item);
+}
+
+/**
+ * pk_item_update_detail_unref:
+ **/
+void
+pk_item_update_detail_unref (PkItemUpdateDetail *item)
+{
+	if (item == NULL)
+		return;
+	g_free (item->package_id);
+	g_free (item->updates);
+	g_free (item->obsoletes);
+	g_free (item->vendor_url);
+	g_free (item->bugzilla_url);
+	g_free (item->cve_url);
+	g_free (item->update_text);
+	g_free (item->changelog);
+	if (item->issued != NULL)
+		g_date_free (item->issued);
+	if (item->updated != NULL)
+		g_date_free (item->updated);
+	g_free (item);
+}
+
+/**
+ * pk_item_category_unref:
+ **/
+void
+pk_item_category_unref (PkItemCategory *item)
+{
+	if (item == NULL)
+		return;
+	g_free (item->parent_id);
+	g_free (item->cat_id);
+	g_free (item->name);
+	g_free (item->summary);
+	g_free (item->icon);
+	g_free (item);
+}
+
+/**
+ * pk_item_distro_upgrade_unref:
+ **/
+void
+pk_item_distro_upgrade_unref (PkItemDistroUpgrade *item)
+{
+	if (item == NULL)
+		return;
+	g_free (item->name);
+	g_free (item->summary);
+	g_free (item);
+}
+
+/**
+ * pk_item_require_restart_unref:
+ **/
+void
+pk_item_require_restart_unref (PkItemRequireRestart *item)
+{
+	if (item == NULL)
+		return;
+	g_free (item->package_id);
+	g_free (item);
+}
+
+/**
+ * pk_item_transaction_unref:
+ **/
+void
+pk_item_transaction_unref (PkItemTransaction *item)
+{
+	if (item == NULL)
+		return;
+	g_free (item->tid);
+	g_free (item->timespec);
+	g_free (item->data);
+	g_free (item->cmdline);
+	g_free (item);
+}
+
+/**
+ * pk_item_files_unref:
+ **/
+void
+pk_item_files_unref (PkItemFiles *item)
+{
+	if (item == NULL)
+		return;
+	g_free (item->package_id);
+	g_strfreev (item->files);
+	g_free (item);
+}
+
+/**
+ * pk_item_repo_signature_required_unref:
+ **/
+void
+pk_item_repo_signature_required_unref (PkItemRepoSignatureRequired *item)
+{
+	if (item == NULL)
+		return;
+	g_free (item->package_id);
+	g_free (item->repository_name);
+	g_free (item->key_url);
+	g_free (item->key_userid);
+	g_free (item->key_id);
+	g_free (item->key_fingerprint);
+	g_free (item->key_timestamp);
+	g_free (item);
+}
+
+/**
+ * pk_item_eula_required_unref:
+ **/
+void
+pk_item_eula_required_unref (PkItemEulaRequired *item)
+{
+	if (item == NULL)
+		return;
+	g_free (item->eula_id);
+	g_free (item->package_id);
+	g_free (item->vendor_name);
+	g_free (item->license_agreement);
+	g_free (item);
+}
+
+/**
+ * pk_item_media_change_required_unref:
+ **/
+void
+pk_item_media_change_required_unref (PkItemMediaChangeRequired *item)
+{
+	if (item == NULL)
+		return;
+	g_free (item->media_id);
+	g_free (item->media_text);
+	g_free (item);
+}
+
+/**
+ * pk_item_repo_detail_unref:
+ **/
+void
+pk_item_repo_detail_unref (PkItemRepoDetail *item)
+{
+	if (item == NULL)
+		return;
+	g_free (item->repo_id);
+	g_free (item->description);
+	g_free (item);
+}
+
+/**
+ * pk_item_error_code_unref:
+ **/
+void
+pk_item_error_code_unref (PkItemErrorCode *item)
+{
+	if (item == NULL)
+		return;
+	g_free (item->details);
+	g_free (item);
+}
+
+/**
+ * pk_item_message_unref:
+ **/
+void
+pk_item_message_unref (PkItemMessage *item)
+{
+	if (item == NULL)
+		return;
+	g_free (item->details);
+	g_free (item);
+}
+
+/***************************************************************************
+ ***                          MAKE CHECK TESTS                           ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+pk_item_test (gpointer user_data)
+{
+	EggTest *test = (EggTest *) user_data;
+#if 0
+	gboolean ret;
+	PkResults *results;
+	PkExitEnum exit_enum;
+	GPtrArray *packages;
+	const PkItemPackage *item;
+
+	if (!egg_test_start (test, "PkResults"))
+		return;
+
+	/************************************************************/
+	egg_test_title (test, "get results");
+	results = pk_results_new ();
+	egg_test_assert (test, results != NULL);
+
+	/************************************************************/
+	egg_test_title (test, "get exit code of unset results");
+	exit_enum = pk_results_get_exit_code (results);
+	egg_test_assert (test, (exit_enum == PK_EXIT_ENUM_UNKNOWN));
+
+	g_object_unref (results);
+#endif
+
+	egg_test_end (test);
+}
+#endif
+
diff --git a/lib/packagekit-glib2/pk-item.h b/lib/packagekit-glib2/pk-item.h
new file mode 100644
index 0000000..48030aa
--- /dev/null
+++ b/lib/packagekit-glib2/pk-item.h
@@ -0,0 +1,245 @@
+/* -*- 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.
+ */
+
+#if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
+#error "Only <packagekit.h> can be included directly."
+#endif
+
+/**
+ * SECTION:pk-item
+ * @short_description: Abstract items
+ */
+
+#ifndef __PK_ITEM_H
+#define __PK_ITEM_H
+
+#include <glib.h>
+#include <packagekit-glib2/pk-enum.h>
+
+G_BEGIN_DECLS
+
+/**
+ * PkItemRequireRestart:
+ *
+ * Object to represent details about the require_restart.
+ **/
+typedef struct
+{
+	PkRestartEnum			 restart;
+	gchar				*package_id;
+} PkItemRequireRestart;
+
+/**
+ * PkItemTransaction:
+ *
+ * Object to represent details about the transaction.
+ **/
+typedef struct
+{
+	gchar				*tid;
+	gchar				*timespec;
+	gboolean			 succeeded;
+	PkRoleEnum			 role;
+	guint				 duration;
+	gchar				*data;
+	guint				 uid;
+	gchar				*cmdline;
+} PkItemTransaction;
+
+/**
+ * PkItemDetails:
+ *
+ * Object to represent details about the update.
+ **/
+typedef struct {
+	gchar				*package_id;
+	gchar				*license;
+	PkGroupEnum			 group_enum;
+	gchar				*description;
+	gchar				*url;
+	guint64				 size;
+} PkItemDetails;
+
+/**
+ * PkItemUpdateDetail:
+ *
+ * Object to represent details about the update.
+ **/
+typedef struct {
+	gchar				*package_id;
+	gchar				*updates;
+	gchar				*obsoletes;
+	gchar				*vendor_url;
+	gchar				*bugzilla_url;
+	gchar				*cve_url;
+	PkRestartEnum			 restart_enum;
+	gchar				*update_text;
+	gchar				*changelog;
+	PkUpdateStateEnum		 state_enum;
+	GDate				*issued;
+	GDate				*updated;
+} PkItemUpdateDetail;
+
+/**
+ * PkItemPackage:
+ *
+ * Object to represent details about a package.
+ **/
+typedef struct {
+	PkInfoEnum			 info_enum;
+	gchar				*package_id;
+	gchar				*summary;
+} PkItemPackage;
+
+/**
+ * PkItemDistroUpgrade:
+ *
+ * Object to represent details about the distribution update.
+ **/
+typedef struct
+{
+	PkUpdateStateEnum		 state;
+	gchar				*name;
+	gchar				*summary;
+} PkItemDistroUpgrade;
+
+/**
+ * PkItemCategory:
+ *
+ * Object to represent details about the category.
+ **/
+typedef struct
+{
+	gchar				*parent_id;
+	gchar				*cat_id;
+	gchar				*name;
+	gchar				*summary;
+	gchar				*icon;
+} PkItemCategory;
+
+/**
+ * PkItemFiles:
+ *
+ * Object to represent details about the files.
+ **/
+typedef struct
+{
+	gchar				*package_id;
+	gchar				**files;
+} PkItemFiles;
+
+/**
+ * PkItemRepoSignatureRequired:
+ *
+ * Object to represent details about the repository signature request.
+ **/
+typedef struct
+{
+	gchar				*package_id;
+	gchar				*repository_name;
+	gchar				*key_url;
+	gchar				*key_userid;
+	gchar				*key_id;
+	gchar				*key_fingerprint;
+	gchar				*key_timestamp;
+	PkSigTypeEnum			 type;
+} PkItemRepoSignatureRequired;
+
+/**
+ * PkItemEulaRequired:
+ *
+ * Object to represent details about the EULA request.
+ **/
+typedef struct
+{
+	gchar				*eula_id;
+	gchar				*package_id;
+	gchar				*vendor_name;
+	gchar				*license_agreement;
+} PkItemEulaRequired;
+
+/**
+ * PkItemMediaChangeRequired:
+ *
+ * Object to represent details about the media change request.
+ **/
+typedef struct
+{
+	PkMediaTypeEnum			 media_type;
+	gchar				*media_id;
+	gchar				*media_text;
+} PkItemMediaChangeRequired;
+
+/**
+ * PkItemRepoDetail:
+ *
+ * Object to represent details about the remote repository.
+ **/
+typedef struct
+{
+	gchar				*repo_id;
+	gchar				*description;
+	gboolean			 enabled;
+} PkItemRepoDetail;
+
+/**
+ * PkItemErrorCode:
+ *
+ * Object to represent details about the error code.
+ **/
+typedef struct
+{
+	PkErrorCodeEnum			 code;
+	gchar				*details;
+} PkItemErrorCode;
+
+/**
+ * PkItemMessage:
+ *
+ * Object to represent details about the message.
+ **/
+typedef struct
+{
+	PkMessageEnum			 message;
+	gchar				*details;
+} PkItemMessage;
+
+//GPtrArray	*pk_results_get_message_array		(PkResults		*results);
+void		 pk_item_test				(gpointer		 user_data);
+void		 pk_item_package_unref		(PkItemPackage	*item);
+void		 pk_item_details_unref		(PkItemDetails	*item);
+void		 pk_item_update_detail_unref		(PkItemUpdateDetail	*item);
+void		 pk_item_category_unref		(PkItemCategory	*item);
+void		 pk_item_distro_upgrade_unref		(PkItemDistroUpgrade	*item);
+void		 pk_item_require_restart_unref		(PkItemRequireRestart	*item);
+void		 pk_item_transaction_unref		(PkItemTransaction	*item);
+void		 pk_item_files_unref		(PkItemFiles	*item);
+void		 pk_item_repo_signature_required_unref		(PkItemRepoSignatureRequired	*item);
+void		 pk_item_eula_required_unref		(PkItemEulaRequired	*item);
+void		 pk_item_media_change_required_unref		(PkItemMediaChangeRequired	*item);
+void		 pk_item_repo_detail_unref		(PkItemRepoDetail	*item);
+void		 pk_item_error_code_unref		(PkItemErrorCode	*item);
+void		 pk_item_message_unref		(PkItemMessage	*item);
+
+G_END_DECLS
+
+#endif /* __PK_ITEM_H */
+
diff --git a/lib/packagekit-glib2/pk-package-sack.c b/lib/packagekit-glib2/pk-package-sack.c
index e5a9f99..e054c0b 100644
--- a/lib/packagekit-glib2/pk-package-sack.c
+++ b/lib/packagekit-glib2/pk-package-sack.c
@@ -439,7 +439,7 @@ pk_package_sack_merge_resolve_cb (GObject *source_object, GAsyncResult *res, PkP
 	GError *error = NULL;
 	PkResults *results;
 	GPtrArray *packages = NULL;
-	const PkResultItemPackage *item;
+	const PkItemPackage *item;
 	guint i;
 	PkPackage *package;
 
@@ -576,7 +576,7 @@ pk_package_sack_merge_details_cb (GObject *source_object, GAsyncResult *res, PkP
 	GError *error = NULL;
 	PkResults *results;
 	GPtrArray *details = NULL;
-	const PkResultItemDetails *item;
+	const PkItemDetails *item;
 	guint i;
 	PkPackage *package;
 
@@ -689,7 +689,7 @@ pk_package_sack_merge_update_detail_cb (GObject *source_object, GAsyncResult *re
 	GError *error = NULL;
 	PkResults *results;
 	GPtrArray *update_details = NULL;
-	const PkResultItemUpdateDetail *item;
+	const PkItemUpdateDetail *item;
 	guint i;
 	PkPackage *package;
 
diff --git a/lib/packagekit-glib2/pk-results.c b/lib/packagekit-glib2/pk-results.c
index de1a946..7fefc15 100644
--- a/lib/packagekit-glib2/pk-results.c
+++ b/lib/packagekit-glib2/pk-results.c
@@ -29,6 +29,7 @@
 #include <glib-object.h>
 
 #include <packagekit-glib2/pk-results.h>
+#include <packagekit-glib2/pk-item.h>
 #include <packagekit-glib2/pk-enum.h>
 
 #include "egg-debug.h"
@@ -109,209 +110,6 @@ pk_results_set_property (GObject *object, guint prop_id, const GValue *value, GP
 }
 
 /**
- * pk_result_item_package_free:
- **/
-static void
-pk_result_item_package_free (PkResultItemPackage *item)
-{
-	if (item == NULL)
-		return;
-	g_free (item->package_id);
-	g_free (item->summary);
-	g_free (item);
-}
-
-/**
- * pk_result_item_details_free:
- **/
-static void
-pk_result_item_details_free (PkResultItemDetails *item)
-{
-	if (item == NULL)
-		return;
-	g_free (item->package_id);
-	g_free (item->license);
-	g_free (item->description);
-	g_free (item->url);
-	g_free (item);
-}
-
-/**
- * pk_result_item_update_detail_free:
- **/
-static void
-pk_result_item_update_detail_free (PkResultItemUpdateDetail *item)
-{
-	if (item == NULL)
-		return;
-	g_free (item->package_id);
-	g_free (item->updates);
-	g_free (item->obsoletes);
-	g_free (item->vendor_url);
-	g_free (item->bugzilla_url);
-	g_free (item->cve_url);
-	g_free (item->update_text);
-	g_free (item->changelog);
-	if (item->issued != NULL)
-		g_date_free (item->issued);
-	if (item->updated != NULL)
-		g_date_free (item->updated);
-	g_free (item);
-}
-
-/**
- * pk_result_item_category_free:
- **/
-static void
-pk_result_item_category_free (PkResultItemCategory *item)
-{
-	if (item == NULL)
-		return;
-	g_free (item->parent_id);
-	g_free (item->cat_id);
-	g_free (item->name);
-	g_free (item->summary);
-	g_free (item->icon);
-	g_free (item);
-}
-
-/**
- * pk_result_item_distro_upgrade_free:
- **/
-static void
-pk_result_item_distro_upgrade_free (PkResultItemDistroUpgrade *item)
-{
-	if (item == NULL)
-		return;
-	g_free (item->name);
-	g_free (item->summary);
-	g_free (item);
-}
-
-/**
- * pk_result_item_require_restart_free:
- **/
-static void
-pk_result_item_require_restart_free (PkResultItemRequireRestart *item)
-{
-	if (item == NULL)
-		return;
-	g_free (item->package_id);
-	g_free (item);
-}
-
-/**
- * pk_result_item_transaction_free:
- **/
-static void
-pk_result_item_transaction_free (PkResultItemTransaction *item)
-{
-	if (item == NULL)
-		return;
-	g_free (item->tid);
-	g_free (item->timespec);
-	g_free (item->data);
-	g_free (item->cmdline);
-	g_free (item);
-}
-
-/**
- * pk_result_item_files_free:
- **/
-static void
-pk_result_item_files_free (PkResultItemFiles *item)
-{
-	if (item == NULL)
-		return;
-	g_free (item->package_id);
-	g_strfreev (item->files);
-	g_free (item);
-}
-
-/**
- * pk_result_item_repo_signature_required_free:
- **/
-static void
-pk_result_item_repo_signature_required_free (PkResultItemRepoSignatureRequired *item)
-{
-	if (item == NULL)
-		return;
-	g_free (item->package_id);
-	g_free (item->repository_name);
-	g_free (item->key_url);
-	g_free (item->key_userid);
-	g_free (item->key_id);
-	g_free (item->key_fingerprint);
-	g_free (item->key_timestamp);
-	g_free (item);
-}
-
-/**
- * pk_result_item_eula_required_free:
- **/
-static void
-pk_result_item_eula_required_free (PkResultItemEulaRequired *item)
-{
-	if (item == NULL)
-		return;
-	g_free (item->eula_id);
-	g_free (item->package_id);
-	g_free (item->vendor_name);
-	g_free (item->license_agreement);
-	g_free (item);
-}
-
-/**
- * pk_result_item_media_change_required_free:
- **/
-static void
-pk_result_item_media_change_required_free (PkResultItemMediaChangeRequired *item)
-{
-	if (item == NULL)
-		return;
-	g_free (item->media_id);
-	g_free (item->media_text);
-	g_free (item);
-}
-
-/**
- * pk_result_item_repo_detail_free:
- **/
-static void
-pk_result_item_repo_detail_free (PkResultItemRepoDetail *item)
-{
-	if (item == NULL)
-		return;
-	g_free (item->repo_id);
-	g_free (item->description);
-	g_free (item);
-}
-
-/**
- * pk_result_item_error_code_free:
- **/
-static void
-pk_result_item_error_code_free (PkResultItemErrorCode *item)
-{
-	if (item == NULL)
-		return;
-	g_free (item->details);
-	g_free (item);
-}
-
-/**
- * pk_result_item_message_free:
- **/
-static void
-pk_result_item_message_free (PkResultItemMessage *item)
-{
-	if (item == NULL)
-		return;
-	g_free (item->details);
-	g_free (item);
-}
-
-/**
  * pk_results_set_exit_code:
  * @results: a valid #PkResults instance
  * @exit_enum: the exit code
@@ -342,14 +140,14 @@ pk_results_set_exit_code (PkResults *results, PkExitEnum exit_enum)
 gboolean
 pk_results_add_package (PkResults *results, PkInfoEnum info_enum, const gchar *package_id, const gchar *summary)
 {
-	PkResultItemPackage *item;
+	PkItemPackage *item;
 
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	g_return_val_if_fail (info_enum != PK_INFO_ENUM_UNKNOWN, FALSE);
 	g_return_val_if_fail (package_id != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkResultItemPackage, 1);
+	item = g_new0 (PkItemPackage, 1);
 	item->info_enum = info_enum;
 	item->package_id = g_strdup (package_id);
 	item->summary = g_strdup (summary);
@@ -370,13 +168,13 @@ gboolean
 pk_results_add_details (PkResults *results, const gchar	*package_id, const gchar *license,
 			PkGroupEnum group_enum, const gchar *description, const gchar *url, guint64 size)
 {
-	PkResultItemDetails *item;
+	PkItemDetails *item;
 
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	g_return_val_if_fail (package_id != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkResultItemDetails, 1);
+	item = g_new0 (PkItemDetails, 1);
 	item->package_id = g_strdup (package_id);
 	item->license = g_strdup (license);
 	item->group_enum = group_enum;
@@ -402,13 +200,13 @@ pk_results_add_update_detail (PkResults *results, const gchar *package_id, const
 			      const gchar *cve_url, PkRestartEnum restart_enum, const gchar *update_text,
 			      const gchar *changelog, PkUpdateStateEnum state_enum, GDate *issued, GDate *updated)
 {
-	PkResultItemUpdateDetail *item;
+	PkItemUpdateDetail *item;
 
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	g_return_val_if_fail (package_id != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkResultItemUpdateDetail, 1);
+	item = g_new0 (PkItemUpdateDetail, 1);
 	item->package_id = g_strdup (package_id);
 	item->updates = g_strdup (updates);
 	item->obsoletes = g_strdup (obsoletes);
@@ -440,13 +238,13 @@ gboolean
 pk_results_add_category (PkResults *results, const gchar *parent_id, const gchar *cat_id, const gchar *name,
 			 const gchar *summary, const gchar *icon)
 {
-	PkResultItemCategory *item;
+	PkItemCategory *item;
 
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	g_return_val_if_fail (name != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkResultItemCategory, 1);
+	item = g_new0 (PkItemCategory, 1);
 	item->parent_id = g_strdup (parent_id);
 	item->cat_id = g_strdup (cat_id);
 	item->name = g_strdup (name);
@@ -468,14 +266,14 @@ pk_results_add_category (PkResults *results, const gchar *parent_id, const gchar
 gboolean
 pk_results_add_distro_upgrade (PkResults *results, PkUpdateStateEnum state_enum, const gchar *name, const gchar *summary)
 {
-	PkResultItemDistroUpgrade *item;
+	PkItemDistroUpgrade *item;
 
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	g_return_val_if_fail (state_enum != PK_UPDATE_STATE_ENUM_UNKNOWN, FALSE);
 	g_return_val_if_fail (name != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkResultItemDistroUpgrade, 1);
+	item = g_new0 (PkItemDistroUpgrade, 1);
 	item->state = state_enum;
 	item->name = g_strdup (name);
 	item->summary = g_strdup (summary);
@@ -495,14 +293,14 @@ pk_results_add_distro_upgrade (PkResults *results, PkUpdateStateEnum state_enum,
 gboolean
 pk_results_add_require_restart (PkResults *results, PkRestartEnum restart_enum, const gchar *package_id)
 {
-	PkResultItemRequireRestart *item;
+	PkItemRequireRestart *item;
 
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	g_return_val_if_fail (restart_enum != PK_RESTART_ENUM_UNKNOWN, FALSE);
 	g_return_val_if_fail (package_id != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkResultItemRequireRestart, 1);
+	item = g_new0 (PkItemRequireRestart, 1);
 	item->restart = restart_enum;
 	item->package_id = g_strdup (package_id);
 	g_ptr_array_add (results->priv->require_restart_array, item);
@@ -524,14 +322,14 @@ pk_results_add_transaction (PkResults *results, const gchar *tid, const gchar *t
 			    guint duration, const gchar *data,
 			    guint uid, const gchar *cmdline)
 {
-	PkResultItemTransaction *item;
+	PkItemTransaction *item;
 
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	g_return_val_if_fail (role_enum != PK_ROLE_ENUM_UNKNOWN, FALSE);
 	g_return_val_if_fail (tid != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkResultItemTransaction, 1);
+	item = g_new0 (PkItemTransaction, 1);
 	item->tid = g_strdup (tid);
 	item->timespec = g_strdup (timespec);
 	item->succeeded = succeeded;
@@ -556,14 +354,14 @@ pk_results_add_transaction (PkResults *results, const gchar *tid, const gchar *t
 gboolean
 pk_results_add_files (PkResults *results, const gchar *package_id, gchar **files)
 {
-	PkResultItemFiles *item;
+	PkItemFiles *item;
 
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	g_return_val_if_fail (package_id != NULL, FALSE);
 	g_return_val_if_fail (files != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkResultItemFiles, 1);
+	item = g_new0 (PkItemFiles, 1);
 	item->package_id = g_strdup (package_id);
 	item->files = g_strdupv (files);
 	g_ptr_array_add (results->priv->files_array, item);
@@ -585,13 +383,13 @@ pk_results_add_repo_signature_required (PkResults *results, const gchar *package
 					const gchar *key_fingerprint, const gchar *key_timestamp,
 					PkSigTypeEnum type_enum)
 {
-	PkResultItemRepoSignatureRequired *item;
+	PkItemRepoSignatureRequired *item;
 
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	g_return_val_if_fail (package_id != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkResultItemRepoSignatureRequired, 1);
+	item = g_new0 (PkItemRepoSignatureRequired, 1);
 	item->package_id = g_strdup (package_id);
 	item->repository_name = g_strdup (repository_name);
 	item->key_url = g_strdup (key_url);
@@ -617,13 +415,13 @@ gboolean
 pk_results_add_eula_required (PkResults *results, const gchar *eula_id, const gchar *package_id,
 			      const gchar *vendor_name, const gchar *license_agreement)
 {
-	PkResultItemEulaRequired *item;
+	PkItemEulaRequired *item;
 
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	g_return_val_if_fail (eula_id != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkResultItemEulaRequired, 1);
+	item = g_new0 (PkItemEulaRequired, 1);
 	item->eula_id = g_strdup (eula_id);
 	item->package_id = g_strdup (package_id);
 	item->vendor_name = g_strdup (vendor_name);
@@ -645,13 +443,13 @@ gboolean
 pk_results_add_media_change_required (PkResults *results, PkMediaTypeEnum media_type_enum,
 				      const gchar *media_id, const gchar *media_text)
 {
-	PkResultItemMediaChangeRequired *item;
+	PkItemMediaChangeRequired *item;
 
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	g_return_val_if_fail (media_id != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkResultItemMediaChangeRequired, 1);
+	item = g_new0 (PkItemMediaChangeRequired, 1);
 	item->media_type = media_type_enum;
 	item->media_id = g_strdup (media_id);
 	item->media_text = g_strdup (media_text);
@@ -672,13 +470,13 @@ gboolean
 pk_results_add_repo_detail (PkResults *results, const gchar *repo_id,
 			    const gchar *description, gboolean enabled)
 {
-	PkResultItemRepoDetail *item;
+	PkItemRepoDetail *item;
 
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 	g_return_val_if_fail (repo_id != NULL, FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkResultItemRepoDetail, 1);
+	item = g_new0 (PkItemRepoDetail, 1);
 	item->repo_id = g_strdup (repo_id);
 	item->description = g_strdup (description);
 	item->enabled = enabled;
@@ -698,12 +496,12 @@ pk_results_add_repo_detail (PkResults *results, const gchar *repo_id,
 gboolean
 pk_results_add_error_code (PkResults *results, PkErrorCodeEnum code_enum, const gchar *details)
 {
-	PkResultItemErrorCode *item;
+	PkItemErrorCode *item;
 
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkResultItemErrorCode, 1);
+	item = g_new0 (PkItemErrorCode, 1);
 	item->code = code_enum;
 	item->details = g_strdup (details);
 	g_ptr_array_add (results->priv->error_code_array, item);
@@ -722,12 +520,12 @@ pk_results_add_error_code (PkResults *results, PkErrorCodeEnum code_enum, const
 gboolean
 pk_results_add_message (PkResults *results, PkMessageEnum message_enum, const gchar *details)
 {
-	PkResultItemMessage *item;
+	PkItemMessage *item;
 
 	g_return_val_if_fail (PK_IS_RESULTS (results), FALSE);
 
 	/* copy and add to array */
-	item = g_new0 (PkResultItemMessage, 1);
+	item = g_new0 (PkItemMessage, 1);
 	item->message = message_enum;
 	item->details = g_strdup (details);
 	g_ptr_array_add (results->priv->message_array, item);
@@ -756,7 +554,7 @@ pk_results_get_exit_code (PkResults *results)
  *
  * Gets the packages from the transaction.
  *
- * Return value: A #GPtrArray array of #PkResultItemDetails's, free with g_ptr_array_unref().
+ * Return value: A #GPtrArray array of #PkItemDetails's, free with g_ptr_array_unref().
  **/
 GPtrArray *
 pk_results_get_package_array (PkResults *results)
@@ -780,7 +578,7 @@ pk_results_get_package_sack (PkResults *results)
 	PkPackageSack *sack;
 	GPtrArray *array;
 	guint i;
-	const PkResultItemPackage *item;
+	const PkItemPackage *item;
 	gboolean ret;
 
 	g_return_val_if_fail (PK_IS_RESULTS (results), NULL);
@@ -819,7 +617,7 @@ pk_results_get_package_sack (PkResults *results)
  *
  * Gets the package details from the transaction.
  *
- * Return value: A #GPtrArray array of #PkResultItemPackage's, free with g_ptr_array_unref().
+ * Return value: A #GPtrArray array of #PkItemPackage's, free with g_ptr_array_unref().
  **/
 GPtrArray *
 pk_results_get_details_array (PkResults *results)
@@ -834,7 +632,7 @@ pk_results_get_details_array (PkResults *results)
  *
  * Gets the update details from the transaction.
  *
- * Return value: A #GPtrArray array of #PkResultItemUpdateDetail's, free with g_ptr_array_unref().
+ * Return value: A #GPtrArray array of #PkItemUpdateDetail's, free with g_ptr_array_unref().
  **/
 GPtrArray *
 pk_results_get_update_detail_array (PkResults *results)
@@ -849,7 +647,7 @@ pk_results_get_update_detail_array (PkResults *results)
  *
  * Gets the categories from the transaction.
  *
- * Return value: A #GPtrArray array of #PkResultItemCategory's, free with g_ptr_array_unref().
+ * Return value: A #GPtrArray array of #PkItemCategory's, free with g_ptr_array_unref().
  **/
 GPtrArray *
 pk_results_get_category_array (PkResults *results)
@@ -864,7 +662,7 @@ pk_results_get_category_array (PkResults *results)
  *
  * Gets the distribution upgrades from the transaction.
  *
- * Return value: A #GPtrArray array of #PkResultItemDistroUpgrade's, free with g_ptr_array_unref().
+ * Return value: A #GPtrArray array of #PkItemDistroUpgrade's, free with g_ptr_array_unref().
  **/
 GPtrArray *
 pk_results_get_distro_upgrade_array (PkResults *results)
@@ -879,7 +677,7 @@ pk_results_get_distro_upgrade_array (PkResults *results)
  *
  * Gets the require restarts from the transaction.
  *
- * Return value: A #GPtrArray array of #PkResultItemRequireRestart's, free with g_ptr_array_unref().
+ * Return value: A #GPtrArray array of #PkItemRequireRestart's, free with g_ptr_array_unref().
  **/
 GPtrArray *
 pk_results_get_require_restart_array (PkResults *results)
@@ -908,7 +706,7 @@ pk_results_get_require_restart_worst (PkResults *results)
 	GPtrArray *array;
 	PkRestartEnum worst = 0;
 	guint i;
-	const PkResultItemRequireRestart *item;
+	const PkItemRequireRestart *item;
 
 	g_return_val_if_fail (PK_IS_RESULTS (results), 0);
 
@@ -928,7 +726,7 @@ pk_results_get_require_restart_worst (PkResults *results)
  *
  * Gets the transactions from the transaction.
  *
- * Return value: A #GPtrArray array of #PkResultItemTransaction's, free with g_ptr_array_unref().
+ * Return value: A #GPtrArray array of #PkItemTransaction's, free with g_ptr_array_unref().
  **/
 GPtrArray *
 pk_results_get_transaction_array (PkResults *results)
@@ -943,7 +741,7 @@ pk_results_get_transaction_array (PkResults *results)
  *
  * Gets the files from the transaction.
  *
- * Return value: A #GPtrArray array of #PkResultItemFiles's, free with g_ptr_array_unref().
+ * Return value: A #GPtrArray array of #PkItemFiles's, free with g_ptr_array_unref().
  **/
 GPtrArray *
 pk_results_get_files_array (PkResults *results)
@@ -958,7 +756,7 @@ pk_results_get_files_array (PkResults *results)
  *
  * Gets the repository signatures required from the transaction.
  *
- * Return value: A #GPtrArray array of #PkResultItemRepoSignatureRequired's, free with g_ptr_array_unref().
+ * Return value: A #GPtrArray array of #PkItemRepoSignatureRequired's, free with g_ptr_array_unref().
  **/
 GPtrArray *
 pk_results_get_repo_signature_required_array (PkResults *results)
@@ -973,7 +771,7 @@ pk_results_get_repo_signature_required_array (PkResults *results)
  *
  * Gets the eulas required from the transaction.
  *
- * Return value: A #GPtrArray array of #PkResultItemEulaRequired's, free with g_ptr_array_unref().
+ * Return value: A #GPtrArray array of #PkItemEulaRequired's, free with g_ptr_array_unref().
  **/
 GPtrArray *
 pk_results_get_eula_required_array (PkResults *results)
@@ -988,7 +786,7 @@ pk_results_get_eula_required_array (PkResults *results)
  *
  * Gets the media changes required from the transaction.
  *
- * Return value: A #GPtrArray array of #PkResultItemMediaChangeRequired's, free with g_ptr_array_unref().
+ * Return value: A #GPtrArray array of #PkItemMediaChangeRequired's, free with g_ptr_array_unref().
  **/
 GPtrArray *
 pk_results_get_media_change_required_array (PkResults *results)
@@ -1003,7 +801,7 @@ pk_results_get_media_change_required_array (PkResults *results)
  *
  * Gets the repository details from the transaction.
  *
- * Return value: A #GPtrArray array of #PkResultItemRepoDetail's, free with g_ptr_array_unref().
+ * Return value: A #GPtrArray array of #PkItemRepoDetail's, free with g_ptr_array_unref().
  **/
 GPtrArray *
 pk_results_get_repo_detail_array (PkResults *results)
@@ -1018,7 +816,7 @@ pk_results_get_repo_detail_array (PkResults *results)
  *
  * Gets the error codes from the transaction.
  *
- * Return value: A #GPtrArray array of #PkResultItemErrorCode's, free with g_ptr_array_unref().
+ * Return value: A #GPtrArray array of #PkItemErrorCode's, free with g_ptr_array_unref().
  **/
 GPtrArray *
 pk_results_get_error_code_array (PkResults *results)
@@ -1033,9 +831,9 @@ pk_results_get_error_code_array (PkResults *results)
  *
  * Gets the last error code from the transaction.
  *
- * Return value: A #PkResultItemErrorCode, or %NULL
+ * Return value: A #PkItemErrorCode, or %NULL
  **/
-const PkResultItemErrorCode *
+const PkItemErrorCode *
 pk_results_get_error_code (PkResults *results)
 {
 	GPtrArray *array;
@@ -1054,7 +852,7 @@ pk_results_get_error_code (PkResults *results)
  *
  * Gets the messages from the transaction.
  *
- * Return value: A #GPtrArray array of #PkResultItemMessage's, free with g_ptr_array_unref().
+ * Return value: A #GPtrArray array of #PkItemMessage's, free with g_ptr_array_unref().
  **/
 GPtrArray *
 pk_results_get_message_array (PkResults *results)
@@ -1094,20 +892,20 @@ pk_results_init (PkResults *results)
 {
 	results->priv = PK_RESULTS_GET_PRIVATE (results);
 	results->priv->exit_enum = PK_EXIT_ENUM_UNKNOWN;
-	results->priv->package_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_result_item_package_free);
-	results->priv->details_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_result_item_details_free);
-	results->priv->update_detail_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_result_item_update_detail_free);
-	results->priv->category_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_result_item_category_free);
-	results->priv->distro_upgrade_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_result_item_distro_upgrade_free);
-	results->priv->require_restart_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_result_item_require_restart_free);
-	results->priv->transaction_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_result_item_transaction_free);
-	results->priv->files_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_result_item_files_free);
-	results->priv->repo_signature_required_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_result_item_repo_signature_required_free);
-	results->priv->eula_required_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_result_item_eula_required_free);
-	results->priv->media_change_required_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_result_item_media_change_required_free);
-	results->priv->repo_detail_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_result_item_repo_detail_free);
-	results->priv->error_code_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_result_item_error_code_free);
-	results->priv->message_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_result_item_message_free);
+	results->priv->package_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_item_package_unref);
+	results->priv->details_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_item_details_unref);
+	results->priv->update_detail_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_item_update_detail_unref);
+	results->priv->category_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_item_category_unref);
+	results->priv->distro_upgrade_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_item_distro_upgrade_unref);
+	results->priv->require_restart_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_item_require_restart_unref);
+	results->priv->transaction_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_item_transaction_unref);
+	results->priv->files_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_item_files_unref);
+	results->priv->repo_signature_required_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_item_repo_signature_required_unref);
+	results->priv->eula_required_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_item_eula_required_unref);
+	results->priv->media_change_required_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_item_media_change_required_unref);
+	results->priv->repo_detail_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_item_repo_detail_unref);
+	results->priv->error_code_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_item_error_code_unref);
+	results->priv->message_array = g_ptr_array_new_with_free_func ((GDestroyNotify) pk_item_message_unref);
 }
 
 /**
@@ -1164,7 +962,7 @@ pk_results_test (gpointer user_data)
 	PkResults *results;
 	PkExitEnum exit_enum;
 	GPtrArray *packages;
-	const PkResultItemPackage *item;
+	const PkItemPackage *item;
 
 	if (!egg_test_start (test, "PkResults"))
 		return;
diff --git a/lib/packagekit-glib2/pk-results.h b/lib/packagekit-glib2/pk-results.h
index 62ef683..f469d5e 100644
--- a/lib/packagekit-glib2/pk-results.h
+++ b/lib/packagekit-glib2/pk-results.h
@@ -34,6 +34,7 @@
 #include <glib-object.h>
 #include <packagekit-glib2/pk-enum.h>
 #include <packagekit-glib2/pk-package-sack.h>
+#include <packagekit-glib2/pk-item.h>
 
 G_BEGIN_DECLS
 
@@ -67,192 +68,6 @@ struct _PkResultsClass
 	void (*_pk_reserved5) (void);
 };
 
-/**
- * PkResultItemRequireRestart:
- *
- * Object to represent details about the require_restart.
- **/
-typedef struct
-{
-	PkRestartEnum			 restart;
-	gchar				*package_id;
-} PkResultItemRequireRestart;
-
-/**
- * PkResultItemTransaction:
- *
- * Object to represent details about the transaction.
- **/
-typedef struct
-{
-	gchar				*tid;
-	gchar				*timespec;
-	gboolean			 succeeded;
-	PkRoleEnum			 role;
-	guint				 duration;
-	gchar				*data;
-	guint				 uid;
-	gchar				*cmdline;
-} PkResultItemTransaction;
-
-/**
- * PkResultItemDetails:
- *
- * Object to represent details about the update.
- **/
-typedef struct {
-	gchar		*package_id;
-	gchar		*license;
-	PkGroupEnum	 group_enum;
-	gchar		*description;
-	gchar		*url;
-	guint64		 size;
-} PkResultItemDetails;
-
-/**
- * PkResultItemUpdateDetail:
- *
- * Object to represent details about the update.
- **/
-typedef struct {
-	gchar		*package_id;
-	gchar		*updates;
-	gchar		*obsoletes;
-	gchar		*vendor_url;
-	gchar		*bugzilla_url;
-	gchar		*cve_url;
-	PkRestartEnum	 restart_enum;
-	gchar		*update_text;
-	gchar		*changelog;
-	PkUpdateStateEnum state_enum;
-	GDate		*issued;
-	GDate		*updated;
-} PkResultItemUpdateDetail;
-
-/**
- * PkResultItemPackage:
- *
- * Object to represent details about a package.
- **/
-typedef struct {
-	PkInfoEnum	 info_enum;
-	gchar		*package_id;
-	gchar		*summary;
-} PkResultItemPackage;
-
-/**
- * PkResultItemDistroUpgrade:
- *
- * Object to represent details about the distribution update.
- **/
-typedef struct
-{
-	PkUpdateStateEnum		 state;
-	gchar				*name;
-	gchar				*summary;
-} PkResultItemDistroUpgrade;
-
-/**
- * PkResultItemCategory:
- *
- * Object to represent details about the category.
- **/
-typedef struct
-{
-	gchar				*parent_id;
-	gchar				*cat_id;
-	gchar				*name;
-	gchar				*summary;
-	gchar				*icon;
-} PkResultItemCategory;
-
-/**
- * PkResultItemFiles:
- *
- * Object to represent details about the files.
- **/
-typedef struct
-{
-	gchar				*package_id;
-	gchar				**files;
-} PkResultItemFiles;
-
-/**
- * PkResultItemRepoSignatureRequired:
- *
- * Object to represent details about the repository signature request.
- **/
-typedef struct
-{
-	gchar				*package_id;
-	gchar				*repository_name;
-	gchar				*key_url;
-	gchar				*key_userid;
-	gchar				*key_id;
-	gchar				*key_fingerprint;
-	gchar				*key_timestamp;
-	PkSigTypeEnum			 type;
-} PkResultItemRepoSignatureRequired;
-
-/**
- * PkResultItemEulaRequired:
- *
- * Object to represent details about the EULA request.
- **/
-typedef struct
-{
-	gchar				*eula_id;
-	gchar				*package_id;
-	gchar				*vendor_name;
-	gchar				*license_agreement;
-} PkResultItemEulaRequired;
-
-/**
- * PkResultItemMediaChangeRequired:
- *
- * Object to represent details about the media change request.
- **/
-typedef struct
-{
-	PkMediaTypeEnum			 media_type;
-	gchar				*media_id;
-	gchar				*media_text;
-} PkResultItemMediaChangeRequired;
-
-/**
- * PkResultItemRepoDetail:
- *
- * Object to represent details about the remote repository.
- **/
-typedef struct
-{
-	gchar				*repo_id;
-	gchar				*description;
-	gboolean			 enabled;
-} PkResultItemRepoDetail;
-
-/**
- * PkResultItemErrorCode:
- *
- * Object to represent details about the error code.
- **/
-typedef struct
-{
-	PkErrorCodeEnum			 code;
-	gchar				*details;
-} PkResultItemErrorCode;
-
-/**
- * PkResultItemMessage:
- *
- * Object to represent details about the message.
- **/
-typedef struct
-{
-	PkMessageEnum			 message;
-	gchar				*details;
-} PkResultItemMessage;
-
 GQuark		 pk_results_error_quark			(void);
 GType		 pk_results_get_type		  	(void);
 PkResults	*pk_results_new				(void);
@@ -344,7 +159,7 @@ gboolean	 pk_results_add_message 		(PkResults		*results,
 /* 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);
+const PkItemErrorCode *pk_results_get_error_code	(PkResults		*results);
 PkRestartEnum	 pk_results_get_require_restart_worst	(PkResults		*results);
 
 /* get array objects */
diff --git a/lib/packagekit-glib2/pk-service-pack.c b/lib/packagekit-glib2/pk-service-pack.c
index 76ec568..a793259 100644
--- a/lib/packagekit-glib2/pk-service-pack.c
+++ b/lib/packagekit-glib2/pk-service-pack.c
@@ -657,7 +657,7 @@ pk_service_pack_get_files_from_array (const GPtrArray *array)
 {
 	gchar **files = NULL;
 	guint i;
-	const PkResultItemFiles *item;
+	const PkItemFiles *item;
 
 	/* internal error */
 	if (array == NULL) {
@@ -763,7 +763,7 @@ pk_service_pack_get_depends_ready_cb (GObject *source_object, GAsyncResult *res,
 	GPtrArray *array = NULL;
 	guint i;
 	guint j = 0;
-	const PkResultItemPackage *package;
+	const PkItemPackage *package;
 	gchar **package_ids = NULL;
 	gchar **package_ids_to_download = NULL;
 
@@ -871,7 +871,7 @@ pk_service_pack_get_updates_ready_cb (GObject *source_object, GAsyncResult *res,
 	PkExitEnum exit_enum;
 	GPtrArray *array = NULL;
 	guint i;
-	const PkResultItemPackage *package;
+	const PkItemPackage *package;
 
 	/* get the results */
 	results = pk_client_generic_finish (client, res, &error);
diff --git a/lib/packagekit-glib2/pk-task-text.c b/lib/packagekit-glib2/pk-task-text.c
index e2985ba..b571488 100644
--- a/lib/packagekit-glib2/pk-task-text.c
+++ b/lib/packagekit-glib2/pk-task-text.c
@@ -80,7 +80,7 @@ dkp_task_text_key_question (PkTask *task, guint request, PkResults *results)
 	gboolean ret;
 	GPtrArray *array;
 	gchar *package = NULL;
-	PkResultItemRepoSignatureRequired *item;
+	PkItemRepoSignatureRequired *item;
 	PkTaskTextPrivate *priv = PK_TASK_TEXT(task)->priv;
 
 	/* set some user data, for no reason */
@@ -131,7 +131,7 @@ dkp_task_text_eula_question (PkTask *task, guint request, PkResults *results)
 	gboolean ret;
 	gchar *package = NULL;
 	GPtrArray *array;
-	PkResultItemEulaRequired *item;
+	PkItemEulaRequired *item;
 	PkTaskTextPrivate *priv = PK_TASK_TEXT(task)->priv;
 
 	/* set some user data, for no reason */
@@ -178,7 +178,7 @@ dkp_task_text_media_change_question (PkTask *task, guint request, PkResults *res
 	guint i;
 	gboolean ret;
 	GPtrArray *array;
-	PkResultItemMediaChangeRequired *item;
+	PkItemMediaChangeRequired *item;
 	PkTaskTextPrivate *priv = PK_TASK_TEXT(task)->priv;
 
 	/* set some user data, for no reason */
@@ -376,7 +376,7 @@ pk_task_text_test_install_packages_cb (GObject *object, GAsyncResult *res, EggTe
 	PkResults *results;
 	PkExitEnum exit_enum;
 	GPtrArray *packages;
-	const PkResultItemPackage *item;
+	const PkItemPackage *item;
 	guint i;
 
 	/* get the results */
diff --git a/lib/packagekit-glib2/pk-task-wrapper.c b/lib/packagekit-glib2/pk-task-wrapper.c
index 438ecc7..c2203f8 100644
--- a/lib/packagekit-glib2/pk-task-wrapper.c
+++ b/lib/packagekit-glib2/pk-task-wrapper.c
@@ -70,7 +70,7 @@ dkp_task_wrapper_key_question (PkTask *task, guint request, PkResults *results)
 {
 	guint i;
 	GPtrArray *array;
-	PkResultItemRepoSignatureRequired *item;
+	PkItemRepoSignatureRequired *item;
 	PkTaskWrapperPrivate *priv = PK_TASK_WRAPPER(task)->priv;
 
 	/* set some user data, for no reason */
@@ -104,7 +104,7 @@ dkp_task_wrapper_eula_question (PkTask *task, guint request, PkResults *results)
 {
 	guint i;
 	GPtrArray *array;
-	PkResultItemEulaRequired *item;
+	PkItemEulaRequired *item;
 	PkTaskWrapperPrivate *priv = PK_TASK_WRAPPER(task)->priv;
 
 	/* set some user data, for no reason */
@@ -135,7 +135,7 @@ dkp_task_wrapper_media_change_question (PkTask *task, guint request, PkResults *
 {
 	guint i;
 	GPtrArray *array;
-	PkResultItemMediaChangeRequired *item;
+	PkItemMediaChangeRequired *item;
 	PkTaskWrapperPrivate *priv = PK_TASK_WRAPPER(task)->priv;
 
 	/* set some user data, for no reason */
@@ -271,7 +271,7 @@ pk_task_wrapper_test_install_packages_cb (GObject *object, GAsyncResult *res, Eg
 	PkResults *results;
 	PkExitEnum exit_enum;
 	GPtrArray *packages;
-	const PkResultItemPackage *item;
+	const PkItemPackage *item;
 	guint i;
 
 	/* get the results */
diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c
index 9430048..36b47d2 100644
--- a/lib/packagekit-glib2/pk-task.c
+++ b/lib/packagekit-glib2/pk-task.c
@@ -355,7 +355,7 @@ pk_task_install_signatures (PkTaskState *state)
 {
 	GError *error = NULL;
 	GPtrArray *array;
-	const PkResultItemRepoSignatureRequired *item;
+	const PkItemRepoSignatureRequired *item;
 
 	/* get results */
 	array = pk_results_get_repo_signature_required_array (state->results);
@@ -442,7 +442,7 @@ pk_task_accept_eulas (PkTaskState *state)
 {
 	GError *error = NULL;
 	GPtrArray *array;
-	const PkResultItemEulaRequired *item;
+	const PkItemEulaRequired *item;
 
 	/* get results */
 	array = pk_results_get_eula_required_array (state->results);
commit 497572286108943f0ceb20d1f9389666feb0f569
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 8 11:55:15 2009 +0100

    trivial: add one more self test in PkResults

diff --git a/lib/packagekit-glib2/pk-results.c b/lib/packagekit-glib2/pk-results.c
index 35a29df..de1a946 100644
--- a/lib/packagekit-glib2/pk-results.c
+++ b/lib/packagekit-glib2/pk-results.c
@@ -1164,6 +1164,7 @@ pk_results_test (gpointer user_data)
 	PkResults *results;
 	PkExitEnum exit_enum;
 	GPtrArray *packages;
+	const PkResultItemPackage *item;
 
 	if (!egg_test_start (test, "PkResults"))
 		return;
@@ -1203,6 +1204,14 @@ pk_results_test (gpointer user_data)
 	egg_test_title (test, "get package list of set results");
 	packages = pk_results_get_package_array (results);
 	egg_test_assert (test, (packages->len == 1));
+
+	/************************************************************/
+	egg_test_title (test, "check data");
+	item = g_ptr_array_index (packages, 0);
+	egg_test_assert (test, (item->info_enum == PK_INFO_ENUM_AVAILABLE &&
+				g_strcmp0 ("gnome-power-manager;0.1.2;i386;fedora", item->package_id) == 0 &&
+				g_strcmp0 ("Power manager for GNOME", item->summary) == 0));
+
 	g_ptr_array_unref (packages);
 
 	g_object_unref (results);
commit 4d778751f74858534ee61874da3390425a94aded
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 8 11:54:47 2009 +0100

    trivial: fix make check in glib2

diff --git a/lib/packagekit-glib2/Makefile.am b/lib/packagekit-glib2/Makefile.am
index c8fa7dc..c47b4a7 100644
--- a/lib/packagekit-glib2/Makefile.am
+++ b/lib/packagekit-glib2/Makefile.am
@@ -132,6 +132,10 @@ pk_self_test_SOURCES =						\
 	pk-task-wrapper.h					\
 	pk-task-text.c						\
 	pk-task-text.h						\
+	pk-console-shared.c					\
+	pk-console-shared.h					\
+	pk-client-sync.c					\
+	pk-client-sync.h					\
 	pk-self-test.c						\
 	$(NULL)
 
commit e1bdf800ff35dc75718ddcbbc9102eda89aee963
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 8 11:54:26 2009 +0100

    trivial: add PK_BUILD_GLIB2 to config.h

diff --git a/configure.ac b/configure.ac
index 79e6d83..342078c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -551,6 +551,9 @@ dnl ---------------------------------------------------------------------------
 AC_ARG_ENABLE(glib2, AS_HELP_STRING([--enable-glib2],[Build glib2 library (experimental)]),
 	      build_glib2=$enableval,build_glib2=no)
 AM_CONDITIONAL(PK_BUILD_GLIB2, test $build_glib2 = "yes")
+if test x$build_glib2 = xyes; then
+	AC_DEFINE(PK_BUILD_GLIB2,1,[Build glib2 code])
+fi
 
 # backends
 AC_ARG_ENABLE(alpm, AS_HELP_STRING([--enable-alpm],[use the ALPM backend]),enable_alpm=$enableval,enable_alpm=no)
commit 8bdf42af17184ff0817c0d11ecaa6c733591bdec
Author: warrink <warrink at fedoraproject.org>
Date:   Tue Sep 8 08:44:34 2009 +0000

    Sending translation for Dutch

diff --git a/po/nl.po b/po/nl.po
index 7d327a6..74fc733 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -5,8 +5,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: packagekit.master.nl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-07 08:27+0000\n"
-"PO-Revision-Date: 2009-09-07 14:54+0200\n"
+"POT-Creation-Date: 2009-09-08 08:28+0000\n"
+"PO-Revision-Date: 2009-09-08 10:44+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"
@@ -17,106 +17,106 @@ msgstr ""
 "X-Generator: KBabel 1.11.4\n"
 
 #. TRANSLATORS: this is an atomic transaction
-#: ../client/pk-console.c:238 ../client/pk-console-test.c:147
+#: ../client/pk-console.c:237 ../client/pk-console-test.c:146
 msgid "Transaction"
 msgstr "Transactie"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:240 ../client/pk-console-test.c:149
+#: ../client/pk-console.c:239 ../client/pk-console-test.c:148
 msgid "System time"
 msgstr "Systeemtijd"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:150
 msgid "Succeeded"
 msgstr "Geslaagd"
 
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:150
 msgid "True"
 msgstr "Waar"
 
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:150
 msgid "False"
 msgstr "Niet waar"
 
 #. TRANSLATORS: this is the transactions role, e.g. "update-system"
 #. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:244 ../client/pk-console-test.c:153
+#: ../client/pk-console.c:243 ../client/pk-console-test.c:152
 #: ../src/pk-polkit-action-lookup.c:327
 msgid "Role"
 msgstr "Rol"
 
 #. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:249 ../client/pk-console-test.c:158
+#: ../client/pk-console.c:248 ../client/pk-console-test.c:157
 msgid "Duration"
 msgstr "Duur"
 
-#: ../client/pk-console.c:249 ../client/pk-console-test.c:158
+#: ../client/pk-console.c:248 ../client/pk-console-test.c:157
 msgid "(seconds)"
 msgstr "(seconden)"
 
 #. 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:253 ../client/pk-console-test.c:162
+#: ../client/pk-console.c:252 ../client/pk-console-test.c:161
 #: ../src/pk-polkit-action-lookup.c:341
 msgid "Command line"
 msgstr "Commando regel"
 
 #. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:255 ../client/pk-console-test.c:164
+#: ../client/pk-console.c:254 ../client/pk-console-test.c:163
 msgid "User ID"
 msgstr "Gebruiker ID"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:262 ../client/pk-console-test.c:171
+#: ../client/pk-console.c:261 ../client/pk-console-test.c:170
 msgid "Username"
 msgstr "Gebruikernaam"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:266 ../client/pk-console-test.c:175
+#: ../client/pk-console.c:265 ../client/pk-console-test.c:174
 msgid "Real name"
 msgstr "Werkelijke naam"
 
-#: ../client/pk-console.c:274 ../client/pk-console-test.c:183
+#: ../client/pk-console.c:273 ../client/pk-console-test.c:182
 msgid "Affected packages:"
 msgstr "Betreffende pakketten"
 
-#: ../client/pk-console.c:276 ../client/pk-console-test.c:185
+#: ../client/pk-console.c:275 ../client/pk-console-test.c:184
 msgid "Affected packages: None"
 msgstr "Betreffende pakketten: Geen"
 
 #. TRANSLATORS: When processing, we might have to remove other dependencies
-#: ../client/pk-console.c:337 ../client/pk-task-text.c:220
+#: ../client/pk-console.c:336 ../client/pk-task-text.c:220
 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:340 ../client/pk-task-text.c:225
+#: ../client/pk-console.c:339 ../client/pk-task-text.c:225
 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:343 ../client/pk-task-text.c:230
+#: ../client/pk-console.c:342 ../client/pk-task-text.c:230
 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:346 ../client/pk-task-text.c:235
+#: ../client/pk-console.c:345 ../client/pk-task-text.c:235
 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:349 ../client/pk-task-text.c:240
+#: ../client/pk-console.c:348 ../client/pk-task-text.c:240
 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:363 ../client/pk-console-test.c:205
+#: ../client/pk-console.c:362 ../client/pk-console-test.c:204
 msgid "Distribution"
 msgstr "Distributie"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:365 ../client/pk-console-test.c:207
+#: ../client/pk-console.c:364 ../client/pk-console-test.c:206
 msgid "Type"
 msgstr "Type"
 
@@ -124,44 +124,44 @@ msgstr "Type"
 #. TRANSLATORS: this is the summary of the group
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:367 ../client/pk-console.c:390
-#: ../client/pk-console-test.c:209 ../client/pk-console-test.c:230
+#: ../client/pk-console.c:366 ../client/pk-console.c:389
+#: ../client/pk-console-test.c:208 ../client/pk-console-test.c:229
 msgid "Summary"
 msgstr "Samenvatting"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:379 ../client/pk-console-test.c:219
+#: ../client/pk-console.c:378 ../client/pk-console-test.c:218
 msgid "Category"
 msgstr "Categorie"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:381 ../client/pk-console-test.c:221
+#: ../client/pk-console.c:380 ../client/pk-console-test.c:220
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:384 ../client/pk-console-test.c:224
+#: ../client/pk-console.c:383 ../client/pk-console-test.c:223
 msgid "Parent"
 msgstr "Ouder"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:387 ../client/pk-console-test.c:227
+#: ../client/pk-console.c:386 ../client/pk-console-test.c:226
 msgid "Name"
 msgstr "Naam"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:393 ../client/pk-console-test.c:233
+#: ../client/pk-console.c:392 ../client/pk-console-test.c:232
 msgid "Icon"
 msgstr "Icoon"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:408 ../client/pk-console-test.c:247
+#: ../client/pk-console.c:407 ../client/pk-console-test.c:246
 msgid "Details about the 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:410 ../client/pk-console-test.c:253
+#: ../client/pk-console.c:409 ../client/pk-console-test.c:252
 #: ../client/pk-task-text.c:101 ../client/pk-task-text.c:153
 #: ../src/pk-polkit-action-lookup.c:352
 msgid "Package"
@@ -170,121 +170,121 @@ msgstr[0] "Pakket"
 msgstr[1] "Pakketten"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:413 ../client/pk-console-test.c:256
+#: ../client/pk-console.c:412 ../client/pk-console-test.c:255
 msgid "Updates"
 msgstr "Vernieuwingen"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:417 ../client/pk-console-test.c:260
+#: ../client/pk-console.c:416 ../client/pk-console-test.c:259
 msgid "Obsoletes"
 msgstr "Verouderde pakketten"
 
 #. TRANSLATORS: details about the update, the vendor URLs
-#: ../client/pk-console.c:421 ../client/pk-console-test.c:264
+#: ../client/pk-console.c:420 ../client/pk-console-test.c:263
 #: ../client/pk-task-text.c:154
 msgid "Vendor"
 msgstr "Verkoper"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:425 ../client/pk-console-test.c:268
+#: ../client/pk-console.c:424 ../client/pk-console-test.c:267
 msgid "Bugzilla"
 msgstr "Bugzilla"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:429 ../client/pk-console-test.c:272
+#: ../client/pk-console.c:428 ../client/pk-console-test.c:271
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:433 ../client/pk-console-test.c:276
+#: ../client/pk-console.c:432 ../client/pk-console-test.c:275
 msgid "Restart"
 msgstr "Herstarten"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:437 ../client/pk-console-test.c:280
+#: ../client/pk-console.c:436 ../client/pk-console-test.c:279
 msgid "Update text"
 msgstr "Vernieuw tekst"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:441 ../client/pk-console-test.c:284
+#: ../client/pk-console.c:440 ../client/pk-console-test.c:283
 msgid "Changes"
 msgstr "Veranderingen"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:445 ../client/pk-console-test.c:288
+#: ../client/pk-console.c:444 ../client/pk-console-test.c:287
 msgid "State"
 msgstr "Status"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:450 ../client/pk-console-test.c:293
+#: ../client/pk-console.c:449 ../client/pk-console-test.c:292
 msgid "Issued"
 msgstr "Uitgegeven"
 
 #. TRANSLATORS: details about the update, date the update was updated
-#: ../client/pk-console.c:455 ../client/pk-console-test.c:298
+#: ../client/pk-console.c:454 ../client/pk-console-test.c:297
 msgid "Updated"
 msgstr "Vernieuwd"
 
 #. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:475 ../client/pk-console-test.c:316
+#: ../client/pk-console.c:474 ../client/pk-console-test.c:315
 msgid "Enabled"
 msgstr "Aangezit"
 
 #. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:478 ../client/pk-console-test.c:319
+#: ../client/pk-console.c:477 ../client/pk-console-test.c:318
 msgid "Disabled"
 msgstr "Uitgezet"
 
-#: ../client/pk-console.c:555 ../client/pk-console.c:557
+#: ../client/pk-console.c:554 ../client/pk-console.c:556
 msgid "Percentage"
 msgstr "Percentage"
 
-#: ../client/pk-console.c:557
+#: ../client/pk-console.c:556
 msgid "Unknown"
 msgstr "Onbekend"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:599 ../client/pk-console-test.c:341
+#: ../client/pk-console.c:598 ../client/pk-console-test.c:340
 msgid "System restart required by:"
 msgstr "Herstart systeem vereist door:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:602 ../client/pk-console-test.c:344
+#: ../client/pk-console.c:601 ../client/pk-console-test.c:343
 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:605 ../client/pk-console-test.c:347
+#: ../client/pk-console.c:604 ../client/pk-console-test.c:346
 msgid "System restart (security) required by:"
 msgstr "Herstart systeem (beveiliging) vereist door:"
 
 #. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:608 ../client/pk-console-test.c:350
+#: ../client/pk-console.c:607 ../client/pk-console-test.c:349
 msgid "Session restart (security) required:"
 msgstr "Herstart sessie (beveiliging) vereist door:"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:611 ../client/pk-console-test.c:353
+#: ../client/pk-console.c:610 ../client/pk-console-test.c:352
 msgid "Application restart required by:"
 msgstr "Herstart vereist door toepassing:"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:666 ../client/pk-console-test.c:704
+#: ../client/pk-console.c:665 ../client/pk-console-test.c:541
 msgid "Please restart the computer to complete the update."
 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:669 ../client/pk-console-test.c:707
+#: ../client/pk-console.c:668 ../client/pk-console-test.c:544
 msgid "Please logout and login to complete the update."
 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:672
+#: ../client/pk-console.c:671
 msgid "Please restart the application as it is being used."
 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:675 ../client/pk-console-test.c:710
+#: ../client/pk-console.c:674 ../client/pk-console-test.c:547
 msgid ""
 "Please restart the computer to complete the update as important security "
 "updates have been installed."
@@ -293,83 +293,83 @@ msgstr ""
 "beveiligings vernieuwingen geïnstaleerd zijn."
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:678 ../client/pk-console-test.c:713
+#: ../client/pk-console.c:677 ../client/pk-console-test.c:550
 msgid ""
 "Please logout and login to complete the update as important security updates "
 "have been installed."
 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:810
+#: ../client/pk-console.c:809
 #, 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:818
+#: ../client/pk-console.c:817
 #, 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: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
+#: ../client/pk-console.c:843 ../client/pk-console.c:891
+#: ../client/pk-console.c:915 ../client/pk-console.c:963
+#: ../client/pk-console.c:1059 ../client/pk-console.c:1172
+#: ../client/pk-console.c:1233 ../client/pk-tools-common.c:132
+#: ../client/pk-tools-common.c:151 ../client/pk-tools-common.c:159
 #, c-format
 msgid "Internal error: %s"
 msgstr "Interne fout: %s"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
 #. ask the user
-#: ../client/pk-console.c:876 ../client/pk-console.c:948
-#: ../client/pk-console.c:1266 ../client/pk-task-text.c:299
+#: ../client/pk-console.c:875 ../client/pk-console.c:947
+#: ../client/pk-console.c:1265 ../client/pk-task-text.c:299
 msgid "Proceed with changes?"
 msgstr "Doorgaan met veranderingen?"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:881 ../client/pk-console.c:953
+#: ../client/pk-console.c:880 ../client/pk-console.c:952
 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:900 ../client/pk-console.c:1634
+#: ../client/pk-console.c:899 ../client/pk-console.c:1633
 #, c-format
 msgid "This tool could not install the packages: %s"
 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:972
+#: ../client/pk-console.c:971
 #, 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:1028
+#: ../client/pk-console.c:1027
 #, 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:1051 ../client/pk-console.c:1089
-#: ../client/pk-console.c:1118
+#: ../client/pk-console.c:1050 ../client/pk-console.c:1088
+#: ../client/pk-console.c:1117
 #, c-format
 msgid "This tool could not remove the packages: %s"
 msgstr "Dit programma kon het pakket %s niet verwijderen."
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:1104
+#: ../client/pk-console.c:1103
 msgid "Proceed with additional packages?"
 msgstr "Doorgaan met additionele pakketten?"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:1109
+#: ../client/pk-console.c:1108
 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:1150
+#: ../client/pk-console.c:1149
 #, c-format
 msgid "This tool could not download the package %s as it could not be found"
 msgstr ""
@@ -377,217 +377,217 @@ msgstr ""
 "kon worden."
 
 #. TRANSLATORS: Could not download the packages for some reason. The detailed error follows
-#: ../client/pk-console.c:1181
+#: ../client/pk-console.c:1180
 #, 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:1213 ../client/pk-console.c:1225
-#: ../client/pk-console.c:1280
+#: ../client/pk-console.c:1212 ../client/pk-console.c:1224
+#: ../client/pk-console.c:1279
 #, 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:1271
+#: ../client/pk-console.c:1270
 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:1304 ../client/pk-console.c:1312
+#: ../client/pk-console.c:1303 ../client/pk-console.c:1311
 #, 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:1334 ../client/pk-console.c:1342
+#: ../client/pk-console.c:1333 ../client/pk-console.c:1341
 #, 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:1364 ../client/pk-console.c:1372
+#: ../client/pk-console.c:1363 ../client/pk-console.c:1371
 #, 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:1394
+#: ../client/pk-console.c:1393
 #, 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:1402
+#: ../client/pk-console.c:1401
 #, 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:1424
+#: ../client/pk-console.c:1423
 #, c-format
 msgid "File already exists: %s"
 msgstr "Bestand bestaat reeds: %s"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1429 ../client/pk-console.c:1485
-#: ../client/pk-console.c:1560
+#: ../client/pk-console.c:1428 ../client/pk-console.c:1484
+#: ../client/pk-console.c:1559
 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:1435 ../client/pk-console.c:1491
-#: ../client/pk-console.c:1566
+#: ../client/pk-console.c:1434 ../client/pk-console.c:1490
+#: ../client/pk-console.c:1565
 #, 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:1446
+#: ../client/pk-console.c:1445
 #, 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:1480 ../client/pk-console.c:1555
+#: ../client/pk-console.c:1479 ../client/pk-console.c:1554
 #, 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:1512
+#: ../client/pk-console.c:1511
 msgid "Packages to add"
 msgstr "Toe te voegen pakketten"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1520
+#: ../client/pk-console.c:1519
 msgid "Packages to remove"
 msgstr "Te verwijderen pakketten"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1588
+#: ../client/pk-console.c:1587
 #, 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:1594
+#: ../client/pk-console.c:1593
 msgid "To install"
 msgstr "Te installeren"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1606
+#: ../client/pk-console.c:1605
 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:1610
+#: ../client/pk-console.c:1609
 msgid "not found."
 msgstr "niet gevonden."
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1621
+#: ../client/pk-console.c:1620
 #, 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:1627
+#: ../client/pk-console.c:1626
 #: ../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:1663
+#: ../client/pk-console.c:1662
 #, 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:1671
+#: ../client/pk-console.c:1670
 #, 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:1702
+#: ../client/pk-console.c:1701
 msgid "Error:"
 msgstr "Fout:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1716 ../client/pk-console-test.c:370
+#: ../client/pk-console.c:1715 ../client/pk-console-test.c:369
 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:1732 ../client/pk-console-test.c:388
+#: ../client/pk-console.c:1731 ../client/pk-console-test.c:387
 msgid "Message:"
 msgstr "Bericht:"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1760 ../client/pk-console-test.c:407
+#: ../client/pk-console.c:1759 ../client/pk-console-test.c:406
 msgid "Package files"
 msgstr "Pakketbestanden"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1768 ../client/pk-console-test.c:402
+#: ../client/pk-console.c:1767 ../client/pk-console-test.c:401
 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:1791
+#: ../client/pk-console.c:1790
 msgid "Repository signature required"
 msgstr "Repository signatuur vereist"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
 #. ask the user
-#: ../client/pk-console.c:1801 ../client/pk-task-text.c:113
+#: ../client/pk-console.c:1800 ../client/pk-task-text.c:113
 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:1805 ../client/pk-task-text.c:117
+#: ../client/pk-console.c:1804 ../client/pk-task-text.c:117
 msgid "The signature was not accepted."
 msgstr "De signatuur werd niet geaccepteerd"
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1839
+#: ../client/pk-console.c:1838
 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:1846
+#: ../client/pk-console.c:1845
 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:1850
+#: ../client/pk-console.c:1849
 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:1879 ../client/pk-console-test.c:972
+#: ../client/pk-console.c:1878 ../client/pk-console-test.c:819
 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:1932 ../client/pk-console-test.c:1006
+#: ../client/pk-console.c:1931 ../client/pk-console-test.c:853
 msgid "PackageKit Console Interface"
 msgstr "PackageKit console-interface"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1934 ../client/pk-console-test.c:1008
+#: ../client/pk-console.c:1933 ../client/pk-console-test.c:855
 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:2027 ../client/pk-console-test.c:1099
-#: ../client/pk-generate-pack.c:187 ../client/pk-monitor.c:128
-#: ../client/pk-monitor-test.c:282
+#: ../client/pk-console.c:2026 ../client/pk-console-test.c:969
+#: ../client/pk-generate-pack.c:185 ../client/pk-generate-pack-test.c:225
+#: ../client/pk-monitor.c:128 ../client/pk-monitor-test.c:282
 #: ../contrib/command-not-found/pk-command-not-found.c:616
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:549
 #: ../contrib/device-rebind/pk-device-rebind.c:293 ../src/pk-main.c:211
@@ -595,150 +595,150 @@ msgid "Show extra debugging information"
 msgstr "Extra debuginformatie tonen"
 
 #. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:2030 ../client/pk-console-test.c:1102
+#: ../client/pk-console.c:2029 ../client/pk-console-test.c:972
 #: ../client/pk-monitor.c:130 ../client/pk-monitor-test.c:284
 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:2033 ../client/pk-console-test.c:1105
+#: ../client/pk-console.c:2032 ../client/pk-console-test.c:975
 msgid "Set the filter, e.g. installed"
 msgstr "Filter instellen, bijvoorbeeld geïnstalleerd"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:2036 ../client/pk-console-test.c:1108
+#: ../client/pk-console.c:2035 ../client/pk-console-test.c:978
 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:2063
+#: ../client/pk-console.c:2062
 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:2153 ../client/pk-console-test.c:1183
+#: ../client/pk-console.c:2152 ../client/pk-console-test.c:1055
 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:2172 ../client/pk-console-test.c:1202
+#: ../client/pk-console.c:2171 ../client/pk-console-test.c:1074
 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:2179 ../client/pk-console.c:2188
-#: ../client/pk-console.c:2197 ../client/pk-console.c:2206
-#: ../client/pk-console-test.c:1209 ../client/pk-console-test.c:1221
-#: ../client/pk-console-test.c:1233 ../client/pk-console-test.c:1245
+#: ../client/pk-console.c:2178 ../client/pk-console.c:2187
+#: ../client/pk-console.c:2196 ../client/pk-console.c:2205
+#: ../client/pk-console-test.c:1081 ../client/pk-console-test.c:1093
+#: ../client/pk-console-test.c:1105 ../client/pk-console-test.c:1117
 msgid "A search term is required"
 msgstr "Een zoekterm is vereist"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:2213 ../client/pk-console-test.c:1255
+#: ../client/pk-console.c:2212 ../client/pk-console-test.c:1127
 msgid "Invalid search type"
 msgstr "Ongeldig zoektype"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:2219
+#: ../client/pk-console.c:2218
 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:2228 ../client/pk-console-test.c:1282
+#: ../client/pk-console.c:2227 ../client/pk-console-test.c:1154
 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:2237 ../client/pk-console-test.c:1293
+#: ../client/pk-console.c:2236 ../client/pk-console-test.c:1165
 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:2245 ../client/pk-console-test.c:1302
+#: ../client/pk-console.c:2244 ../client/pk-console-test.c:1174
 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"
 
 #. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:2252 ../client/pk-console-test.c:1309
+#: ../client/pk-console.c:2251 ../client/pk-console-test.c:1181
 msgid "Directory not found"
 msgstr "Map niet gevonden"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2260 ../client/pk-console-test.c:1318
+#: ../client/pk-console.c:2259 ../client/pk-console-test.c:1190
 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:2270 ../client/pk-console-test.c:1329
+#: ../client/pk-console.c:2269 ../client/pk-console-test.c:1201
 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:2287 ../client/pk-console-test.c:1350
+#: ../client/pk-console.c:2286 ../client/pk-console-test.c:1222
 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:2296 ../client/pk-console.c:2305
-#: ../client/pk-console-test.c:1361 ../client/pk-console-test.c:1372
+#: ../client/pk-console.c:2295 ../client/pk-console.c:2304
+#: ../client/pk-console-test.c:1233 ../client/pk-console-test.c:1244
 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:2314 ../client/pk-console-test.c:1383
+#: ../client/pk-console.c:2313 ../client/pk-console-test.c:1255
 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:2328 ../client/pk-console-test.c:1401
+#: ../client/pk-console.c:2327 ../client/pk-console-test.c:1272
 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:2335 ../client/pk-console-test.c:1408
+#: ../client/pk-console.c:2334 ../client/pk-console-test.c:1279
 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:2342 ../client/pk-console-test.c:1415
+#: ../client/pk-console.c:2341 ../client/pk-console-test.c:934
 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:2352 ../client/pk-console.c:2364
-#: ../client/pk-console.c:2373 ../client/pk-console.c:2391
-#: ../client/pk-console.c:2400 ../client/pk-console-test.c:1425
-#: ../client/pk-console-test.c:1440 ../client/pk-console-test.c:1449
-#: ../client/pk-console-test.c:1469 ../client/pk-console-test.c:1478
-#: ../client/pk-generate-pack.c:243
+#: ../client/pk-console.c:2351 ../client/pk-console.c:2363
+#: ../client/pk-console.c:2372 ../client/pk-console.c:2390
+#: ../client/pk-console.c:2399 ../client/pk-console-test.c:1289
+#: ../client/pk-console-test.c:1304 ../client/pk-console-test.c:1313
+#: ../client/pk-console-test.c:1333 ../client/pk-console-test.c:1342
+#: ../client/pk-generate-pack.c:241 ../client/pk-generate-pack-test.c:288
 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:2382 ../client/pk-console-test.c:1458
+#: ../client/pk-console.c:2381 ../client/pk-console-test.c:1322
 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:2409
+#: ../client/pk-console.c:2408
 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:2419 ../client/pk-console.c:2429
+#: ../client/pk-console.c:2418 ../client/pk-console.c:2428
 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:2483 ../client/pk-console-test.c:1538
+#: ../client/pk-console.c:2482 ../client/pk-console-test.c:1402
 #, 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:2496
+#: ../client/pk-console.c:2495
 msgid "Incorrect privileges for this operation"
 msgstr "Onjuiste privileges voor deze operatie"
 
@@ -746,34 +746,39 @@ msgstr "Onjuiste privileges voor deze operatie"
 #. /* 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
-#: ../client/pk-console.c:2499 ../client/pk-console-test.c:1550
+#: ../client/pk-console.c:2498 ../client/pk-console-test.c:1414
 msgid "Command failed"
 msgstr "Opdracht mislukt"
 
+#: ../client/pk-console-shared.c:53 ../client/pk-tools-common.c:51
+#, c-format
+msgid "Please enter a number from 1 to %i: "
+msgstr "Voer een nummer in van 1 tot %i: "
+
 #. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../client/pk-console-test.c:523 ../client/pk-tools-common.c:131
+#: ../client/pk-console-shared.c:153 ../client/pk-tools-common.c:200
 msgid "More than one package matches:"
 msgstr "Er zijn meerdere pakketten die overeenkomen:"
 
 #. TRANSLATORS: This finds out which package in the list to use
-#: ../client/pk-console-test.c:532 ../client/pk-tools-common.c:138
+#: ../client/pk-console-shared.c:162 ../client/pk-tools-common.c:207
 msgid "Please choose the correct package: "
 msgstr "Kies alstublieft het juiste pakket: "
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:734
+#: ../client/pk-console-test.c:571
 #, c-format
 msgid "This tool could not find the available package: %s"
 msgstr "Dit programma kon het beschikbare pakket %s niet vinden."
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:762
+#: ../client/pk-console-test.c:599
 #, c-format
 msgid "This tool could not find the installed package: %s"
 msgstr "Dit programma kon het geïinstallerde pakket %s niet vinden."
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:790 ../client/pk-console-test.c:818
+#: ../client/pk-console-test.c:627 ../client/pk-console-test.c:655
 #, c-format
 msgid "This tool could not find the package: %s"
 msgstr "Dit programma kon het pakket %s niet vinden."
@@ -782,46 +787,51 @@ msgstr "Dit programma kon het pakket %s niet vinden."
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console-test.c:846 ../client/pk-console-test.c:872
-#: ../client/pk-console-test.c:898 ../client/pk-console-test.c:924
-#: ../client/pk-console-test.c:950
+#: ../client/pk-console-test.c:683 ../client/pk-console-test.c:711
+#: ../client/pk-console-test.c:739 ../client/pk-console-test.c:767
+#: ../client/pk-console-test.c:795
 #, c-format
 msgid "This tool could not find all the packages: %s"
 msgstr "Dit programma kon niet alle pakketten vinden: %s"
 
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console-test.c:1003
+msgid "Failed to contact PackageKit"
+msgstr "Contact met PackageKit krijgen mislukte."
+
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1261
+#: ../client/pk-console-test.c:1133
 msgid "A package name to install is required"
 msgstr "Een pakketnaam om te installeren is vereist"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1270
+#: ../client/pk-console-test.c:1142
 msgid "A filename to install is required"
 msgstr "Een bestandsnaam om te installeren is vereist"
 
 #. TRANSLATORS: This is the state of the transaction
-#: ../client/pk-generate-pack.c:103
+#: ../client/pk-generate-pack.c:101
 msgid "Downloading"
 msgstr "Aan het downloaden"
 
 #. TRANSLATORS: This is when the main packages are being downloaded
-#: ../client/pk-generate-pack.c:123
+#: ../client/pk-generate-pack.c:121
 msgid "Downloading packages"
 msgstr "Pakketten aan het downloaden"
 
 #. TRANSLATORS: This is when the dependency packages are being downloaded
-#: ../client/pk-generate-pack.c:128
+#: ../client/pk-generate-pack.c:126
 msgid "Downloading dependencies"
 msgstr "Afhankelijkheden aan het downloaden"
 
 #. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll exist on the target
-#: ../client/pk-generate-pack.c:190
+#: ../client/pk-generate-pack.c:188 ../client/pk-generate-pack-test.c:228
 msgid "Set the file name of dependencies to be excluded"
 msgstr ""
 "Zet de bestandsnamen van afhankelijkheden die moeten worden uitgesloten"
 
 #. TRANSLATORS: the output location
-#: ../client/pk-generate-pack.c:193
+#: ../client/pk-generate-pack.c:191 ../client/pk-generate-pack-test.c:231
 msgid ""
 "The output file or directory (the current directory is used if ommitted)"
 msgstr ""
@@ -829,38 +839,41 @@ msgstr ""
 "opgegeven)"
 
 #. TRANSLATORS: put a list of packages in the pack
-#: ../client/pk-generate-pack.c:196
+#: ../client/pk-generate-pack.c:194 ../client/pk-generate-pack-test.c:234
 msgid "The package to be put into the service pack"
 msgstr "Het pakket dat in het servicepack zal worden opgenomen"
 
 #. TRANSLATORS: put all pending updates in the pack
-#: ../client/pk-generate-pack.c:199
+#: ../client/pk-generate-pack.c:197 ../client/pk-generate-pack-test.c:237
 msgid "Put all updates available in the service pack"
 msgstr "Doe alle beschikbare updates in het servicepack"
 
 #. TRANSLATORS: This is when the user fails to supply the correct arguments
-#: ../client/pk-generate-pack.c:227
+#: ../client/pk-generate-pack.c:225 ../client/pk-generate-pack-test.c:272
 msgid "Neither --package or --updates option selected."
 msgstr "Noch --package noch --updates als optie geselecteerd."
 
 #. TRANSLATORS: This is when the user fails to supply just one argument
-#: ../client/pk-generate-pack.c:235
+#: ../client/pk-generate-pack.c:233 ../client/pk-generate-pack-test.c:280
 msgid "Both options selected."
 msgstr "Beide opties geselecteerd."
 
 #. TRANSLATORS: This is when the user fails to supply the output
-#: ../client/pk-generate-pack.c:251
+#: ../client/pk-generate-pack.c:249 ../client/pk-generate-pack-test.c:296
 msgid "A output directory or file name is required"
 msgstr "Een doelmap of bestandsnaam is vereist"
 
 #. 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:269 ../client/pk-generate-pack.c:275
+#. 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-test.c:324 ../client/pk-generate-pack-test.c:330
 msgid "The package manager cannot perform this type of operation."
 msgstr "De package manager kan dit type operatie niet uitvoeren."
 
 #. TRANSLATORS: This is when the distro didn't include libarchive support into PK
-#: ../client/pk-generate-pack.c:282
+#: ../client/pk-generate-pack.c:280 ../client/pk-generate-pack-test.c:337
 msgid ""
 "Service packs cannot be created as PackageKit was not built with libarchive "
 "support."
@@ -869,55 +882,55 @@ msgstr ""
 "ondersteuning is gebouwd."
 
 #. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
-#: ../client/pk-generate-pack.c:293
+#: ../client/pk-generate-pack.c:291 ../client/pk-generate-pack-test.c:348
 msgid "If specifying a file, the service pack name must end with"
 msgstr ""
 "Bij het specificeren van een bestand moet de servicepacknaam eindigen met"
 
 #. TRANSLATORS: This is when file already exists
-#: ../client/pk-generate-pack.c:309
+#: ../client/pk-generate-pack.c:307 ../client/pk-generate-pack-test.c:364
 msgid "A pack with the same name already exists, do you want to overwrite it?"
 msgstr "Een pack met dezelfde naam bestaat reeds, wilt u deze overschrijven?"
 
 #. TRANSLATORS: This is when the pack was not overwritten
-#: ../client/pk-generate-pack.c:312
+#: ../client/pk-generate-pack.c:310 ../client/pk-generate-pack-test.c:367
 msgid "The pack was not overwritten."
 msgstr "Het pack werd niet overschreven."
 
 #. TRANSLATORS: This is when the temporary directory cannot be created, the directory name follows
-#: ../client/pk-generate-pack.c:325
+#: ../client/pk-generate-pack.c:323 ../client/pk-generate-pack-test.c:380
 msgid "Failed to create directory:"
 msgstr "Aanmaken map mislukt:"
 
 #. TRANSLATORS: This is when the list of packages from the remote computer cannot be opened
-#: ../client/pk-generate-pack.c:335
+#: ../client/pk-generate-pack.c:333 ../client/pk-generate-pack-test.c:392
 msgid "Failed to open package list."
 msgstr "Pakketlijst openen is niet gelukt."
 
 #. TRANSLATORS: The package name is being matched up to available packages
-#: ../client/pk-generate-pack.c:346
+#: ../client/pk-generate-pack.c:344 ../client/pk-generate-pack-test.c:401
 msgid "Finding package name."
 msgstr "Pakketnaam wordt opgezocht."
 
 #. TRANSLATORS: This is when the package cannot be found in any software source. The detailed error follows
-#: ../client/pk-generate-pack.c:350
+#: ../client/pk-generate-pack.c:348 ../client/pk-generate-pack-test.c:405
 #, c-format
 msgid "Failed to find package '%s': %s"
 msgstr "Pakket '%s' niet gevonden: %s"
 
 #. TRANSLATORS: This is telling the user we are in the process of making the pack
-#: ../client/pk-generate-pack.c:367
+#: ../client/pk-generate-pack.c:365 ../client/pk-generate-pack-test.c:413
 msgid "Creating service pack..."
 msgstr "Servicepack wordt aangemaakt...."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:374
+#: ../client/pk-generate-pack.c:372 ../client/pk-generate-pack-test.c:428
 #, c-format
 msgid "Service pack created '%s'"
 msgstr "Servicepack aangemaakt '%s'"
 
 #. TRANSLATORS: we failed to make te file
-#: ../client/pk-generate-pack.c:379
+#: ../client/pk-generate-pack.c:377 ../client/pk-generate-pack-test.c:433
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "'%s' aanmaken niet gelukt: %s"
@@ -1026,13 +1039,8 @@ msgstr "De juiste media was niet ingebracht."
 msgid "The transaction did not proceed."
 msgstr "De transactie ging niet verder."
 
-#: ../client/pk-text.c:50
-#, c-format
-msgid "Please enter a number from 1 to %i: "
-msgstr "Voer een nummer in van 1 tot %i: "
-
 #. TRANSLATORS: The package was not found in any software sources
-#: ../client/pk-tools-common.c:119
+#: ../client/pk-tools-common.c:188
 #, c-format
 msgid "The package could not be found"
 msgstr "Het pakket kon niet worden gevonden"
commit d9b672222ecdd50fbe10b4461bb7995670cc2090
Author: Richard Hughes <richard at hughsie.com>
Date:   Tue Sep 8 09:36:16 2009 +0100

    glib2: move all the common code into libpackagekit-glib2 and build a private library for bits we don't want to export

diff --git a/client/Makefile.am b/client/Makefile.am
index 94a3ef0..3fbb68d 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -63,26 +63,11 @@ if PK_BUILD_GLIB2
 
 PK_GLIB2_LIBS =						\
 	$(top_builddir)/lib/packagekit-glib2/libpackagekit-glib2.la	\
+	$(top_builddir)/lib/packagekit-glib2/libpackagekitprivate.a	\
 	$(NULL)
 
 noinst_PROGRAMS = pkcon-test pkmon-test pkgenpack-test
 
-noinst_LIBRARIES = libpkconsole.a
-libpkconsole_a_SOURCES =				\
-	egg-debug.c					\
-	egg-debug.h					\
-	egg-string.c					\
-	egg-string.h					\
-	pk-task-text.c					\
-	pk-task-text.h					\
-	pk-console-shared.c				\
-	pk-console-shared.h				\
-	pk-client-sync.c				\
-	pk-client-sync.h				\
-	pk-progress-bar.c				\
-	pk-progress-bar.h				\
-	$(NULL)
-
 libpkconsole_a_CFLAGS =					\
 	$(WARNINGFLAGS_C)				\
 	$(NULL)
@@ -92,7 +77,6 @@ pkcon_test_SOURCES =					\
 	$(NULL)
 
 pkcon_test_LDADD =					\
-	libpkconsole.a					\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
 	$(PK_GLIB2_LIBS)				\
@@ -107,7 +91,6 @@ pkmon_test_SOURCES =					\
 	$(NULL)
 
 pkmon_test_LDADD =					\
-	libpkconsole.a					\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
 	$(PK_GLIB2_LIBS)				\
@@ -122,7 +105,6 @@ pkgenpack_test_SOURCES =				\
 	$(NULL)
 
 pkgenpack_test_LDADD = 					\
-	libpkconsole.a					\
 	$(ARCHIVE_LIBS)					\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
diff --git a/client/pk-client-sync.c b/client/pk-client-sync.c
deleted file mode 100644
index 1f91e4d..0000000
--- a/client/pk-client-sync.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/* -*- 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 <stdio.h>
-#include <gio/gio.h>
-#include <glib.h>
-#include <packagekit-glib2/packagekit.h>
-
-#include "egg-debug.h"
-
-#include "pk-client-sync.h"
-
-/* tiny helper to help us do the async operation */
-typedef struct {
-	GError		**error;
-	GMainLoop	*loop;
-	PkResults	*results;
-} PkClientHelper;
-
-/**
- * pk_client_generic_finish_sync:
- **/
-static void
-pk_client_generic_finish_sync (PkClient *client, GAsyncResult *res, PkClientHelper *helper)
-{
-	PkResults *results;
-	/* get the result */
-	results = pk_client_generic_finish (client, res, helper->error);
-	if (results != NULL) {
-		g_object_unref (results);
-		helper->results = g_object_ref (G_OBJECT (results));
-	}
-	g_main_loop_quit (helper->loop);
-}
-
-/**
- * pk_client_resolve_sync:
- * @client: a valid #PkClient instance
- * @error: A #GError or %NULL
- *
- * Resolves a package to a Package ID.
- * Warning: this function is synchronous, and may block. Do not use it in GUI
- * applications.
- *
- * Return value: a %PkResults object, or NULL for error
- **/
-PkResults *
-pk_client_resolve_sync (PkClient *client, PkFilterEnum filter, gchar **packages, GCancellable *cancellable,
-			PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
-{
-	PkClientHelper *helper;
-	PkResults *results;
-
-	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-	/* create temp object */
-	helper = g_new0 (PkClientHelper, 1);
-	helper->loop = g_main_loop_new (NULL, FALSE);
-	helper->error = error;
-
-	/* run async method */
-	pk_client_resolve_async (client, filter, packages, cancellable, progress_callback, progress_user_data,
-				 (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
-	g_main_loop_run (helper->loop);
-
-	results = helper->results;
-
-	/* free temp object */
-	g_main_loop_unref (helper->loop);
-	g_free (helper);
-
-	return results;
-}
-
-/**
- * pk_client_search_file_sync:
- * @client: a valid #PkClient instance
- * @error: A #GError or %NULL
- *
- * Resolves a filename to multiple Package IDs.
- * Warning: this function is synchronous, and may block. Do not use it in GUI
- * applications.
- *
- * Return value: a %PkResults object, or NULL for error
- **/
-PkResults *
-pk_client_search_file_sync (PkClient *client, PkFilterEnum filter, const gchar *filename, GCancellable *cancellable,
-			    PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
-{
-	PkClientHelper *helper;
-	PkResults *results;
-
-	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-	/* create temp object */
-	helper = g_new0 (PkClientHelper, 1);
-	helper->loop = g_main_loop_new (NULL, FALSE);
-	helper->error = error;
-
-	/* run async method */
-	pk_client_search_file_async (client, filter, filename, cancellable, progress_callback, progress_user_data,
-				     (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
-	g_main_loop_run (helper->loop);
-
-	results = helper->results;
-
-	/* free temp object */
-	g_main_loop_unref (helper->loop);
-	g_free (helper);
-
-	return results;
-}
-
diff --git a/client/pk-client-sync.h b/client/pk-client-sync.h
deleted file mode 100644
index f064439..0000000
--- a/client/pk-client-sync.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- 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.
- */
-
-#ifndef __PK_CLIENT_SYNC_H
-#define __PK_CLIENT_SYNC_H
-
-#include <glib.h>
-#include <packagekit-glib2/packagekit.h>
-
-PkResults	*pk_client_resolve_sync			(PkClient		*client,
-							 PkFilterEnum		 filter,
-							 gchar			**packages,
-							 GCancellable		*cancellable,
-							 PkProgressCallback	 progress_callback,
-							 gpointer		 progress_user_data,
-							 GError			**error);
-PkResults	*pk_client_search_file_sync		(PkClient		*client,
-							 PkFilterEnum		 filter,
-							 const gchar		*filename,
-							 GCancellable		*cancellable,
-							 PkProgressCallback	 progress_callback,
-							 gpointer		 progress_user_data,
-							 GError			**error);
-
-#endif /* __PK_CLIENT_SYNC_H */
-
-
-
diff --git a/client/pk-console-shared.c b/client/pk-console-shared.c
deleted file mode 100644
index b2359f2..0000000
--- a/client/pk-console-shared.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/* -*- 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 <stdio.h>
-#include <gio/gio.h>
-#include <glib/gi18n.h>
-#include <packagekit-glib2/packagekit.h>
-
-#include "egg-debug.h"
-
-#include "pk-client-sync.h"
-#include "pk-console-shared.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';
-	gboolean ret = FALSE;
-
-	/* 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) fgetc (stdin);
-
-		/* positive */
-		if (answer == 'y' || answer == 'Y') {
-			ret = TRUE;
-			break;
-		}
-		/* negative */
-		if (answer == 'n' || answer == 'N')
-			break;
-
-		/* default choice */
-		if (answer == '\n' && defaultyes) {
-			ret = TRUE;
-			break;
-		}
-		if (answer == '\n' && !defaultyes)
-			break;
-	} while (TRUE);
-
-	/* remove the trailing \n */
-	answer = (gchar) fgetc (stdin);
-	if (answer != '\n')
-		ungetc (answer, stdin);
-
-	return ret;
-}
-
-/**
- * pk_console_resolve_package:
- **/
-gchar *
-pk_console_resolve_package (PkClient *client, PkBitfield filter, const gchar *package, GError **error)
-{
-	gchar *package_id = NULL;
-	gboolean valid;
-	gchar **tmp;
-	PkResults *results;
-	GPtrArray *array = NULL;
-	guint i;
-	gchar *printable;
-	const PkResultItemPackage *item;
-
-	/* have we passed a complete package_id? */
-	valid = pk_package_id_check (package);
-	if (valid)
-		return g_strdup (package);
-
-	/* split */
-	tmp = g_strsplit (package, ",", -1);
-
-	/* get the list of possibles */
-	results = pk_client_resolve_sync (client, filter, tmp, NULL, NULL, NULL, error);
-	if (results == NULL)
-		goto out;
-
-	/* get the packages returned */
-	array = pk_results_get_package_array (results);
-	if (array == NULL) {
-		*error = g_error_new (1, 0, "did not get package struct for %s", package);
-		goto out;
-	}
-
-	/* nothing found */
-	if (array->len == 0) {
-		*error = g_error_new (1, 0, "could not find %s", package);
-		goto out;
-	}
-
-	/* just one thing found */
-	if (array->len == 1) {
-		item = g_ptr_array_index (array, 0);
-		package_id = g_strdup (item->package_id);
-		goto out;
-	}
-
-	/* TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages  */
-	g_print ("%s\n", _("More than one package matches:"));
-	for (i=0; i<array->len; i++) {
-		item = g_ptr_array_index (array, i);
-		printable = pk_package_id_to_printable (item->package_id);
-		g_print ("%i. %s\n", i+1, printable);
-		g_free (printable);
-	}
-
-	/* TRANSLATORS: This finds out which package in the list to use */
-	i = pk_console_get_number (_("Please choose the correct package: "), array->len);
-	item = g_ptr_array_index (array, i-1);
-	package_id = g_strdup (item->package_id);
-out:
-	if (results != NULL)
-		g_object_unref (results);
-	if (array != NULL)
-		g_ptr_array_unref (array);
-	g_strfreev (tmp);
-	return package_id;
-}
-
-/**
- * pk_console_resolve_packages:
- **/
-gchar **
-pk_console_resolve_packages (PkClient *client, PkBitfield filter, gchar **packages, GError **error)
-{
-	gchar **package_ids;
-	guint i;
-	guint len;
-
-	/* get length */
-	len = g_strv_length (packages);
-	egg_debug ("resolving %i packages", len);
-
-	/* create output array*/
-	package_ids = g_new0 (gchar *, len+1);
-
-	/* resolve each package */
-	for (i=0; i<len; i++) {
-		package_ids[i] = pk_console_resolve_package (client, filter, packages[i], error);
-		if (package_ids[i] == NULL) {
-			/* destroy state */
-			g_strfreev (package_ids);
-			package_ids = NULL;
-			break;
-		}
-	}
-	return package_ids;
-}
-
diff --git a/client/pk-console-shared.h b/client/pk-console-shared.h
deleted file mode 100644
index 1da5336..0000000
--- a/client/pk-console-shared.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*- 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_CONSOLE_SHARED_H
-#define __PK_CONSOLE_SHARED_H
-
-#include <glib.h>
-#include <packagekit-glib2/packagekit.h>
-
-guint		 pk_console_get_number			(const gchar	*question,
-							 guint		 maxnum);
-gboolean	 pk_console_get_prompt			(const gchar	*question,
-							 gboolean	 defaultyes);
-gchar		*pk_console_resolve_package		(PkClient	*client,
-							 PkBitfield	 filter,
-							 const gchar	*package,
-							 GError		**error);
-gchar		**pk_console_resolve_packages		(PkClient	*client,
-							 PkBitfield	 filter,
-							 gchar		**packages,
-							 GError		**error);
-
-#endif /* __PK_CONSOLE_SHARED_H */
-
-
-
diff --git a/client/pk-console-test.c b/client/pk-console-test.c
index 39fb965..3c6adda 100644
--- a/client/pk-console-test.c
+++ b/client/pk-console-test.c
@@ -28,16 +28,13 @@
 #include <stdio.h>
 #include <glib/gi18n.h>
 #include <packagekit-glib2/packagekit.h>
+#include <packagekit-glib2/packagekit-private.h>
 #include <sys/types.h>
 #include <pwd.h>
 #include <locale.h>
 
 #include "egg-debug.h"
 
-#include "pk-console-shared.h"
-#include "pk-task-text.h"
-#include "pk-progress-bar.h"
-
 #define PK_EXIT_CODE_SYNTAX_INVALID	3
 #define PK_EXIT_CODE_FILE_NOT_FOUND	4
 
diff --git a/client/pk-generate-pack-test.c b/client/pk-generate-pack-test.c
index 2d61d0f..9a6e33b 100644
--- a/client/pk-generate-pack-test.c
+++ b/client/pk-generate-pack-test.c
@@ -30,12 +30,9 @@
 #include <glib/gi18n.h>
 #include <glib/gstdio.h>
 #include <packagekit-glib2/packagekit.h>
+#include <packagekit-glib2/packagekit-private.h>
 
 #include "egg-debug.h"
-#include "egg-string.h"
-
-#include "pk-console-shared.h"
-#include "pk-progress-bar.h"
 
 static PkProgressBar *progressbar = NULL;
 static GCancellable *cancellable = NULL;
@@ -283,7 +280,7 @@ main (int argc, char *argv[])
 	}
 
 	/* no argument given to --package */
-	if (package != NULL && egg_strzero (package)) {
+	if (package != NULL && package[0] == '\0') {
 		/* TRANSLATORS: This is when the user fails to supply the package name */
 		g_print ("%s\n", _("A package name is required"));
 		retval = 1;
@@ -291,7 +288,7 @@ main (int argc, char *argv[])
 	}
 
 	/* no argument given to --output */
-	if (directory != NULL && egg_strzero (directory)) {
+	if (directory != NULL && directory[0] == '\0') {
 		/* TRANSLATORS: This is when the user fails to supply the output */
 		g_print ("%s\n", _("A output directory or file name is required"));
 		retval = 1;
diff --git a/client/pk-progress-bar.c b/client/pk-progress-bar.c
deleted file mode 120000
index cee68ed..0000000
--- a/client/pk-progress-bar.c
+++ /dev/null
@@ -1 +0,0 @@
-../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
deleted file mode 120000
index 2c18deb..0000000
--- a/client/pk-progress-bar.h
+++ /dev/null
@@ -1 +0,0 @@
-../contrib/debuginfo-install/pk-progress-bar.h
\ No newline at end of file
diff --git a/client/pk-task-text.c b/client/pk-task-text.c
deleted file mode 100644
index e2985ba..0000000
--- a/client/pk-task-text.c
+++ /dev/null
@@ -1,463 +0,0 @@
-/* -*- 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-console-shared.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, PkResults *results)
-{
-	gboolean ret;
-	PkTaskTextPrivate *priv = PK_TASK_TEXT(task)->priv;
-
-	/* set some user data, for no reason */
-	priv->user_data = NULL;
-
-	/* clear new line */
-	g_print ("\n");
-
-	/* 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, 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;
-
-	/* clear new line */
-	g_print ("\n");
-
-	/* 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, 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;
-
-	/* clear new line */
-	g_print ("\n");
-
-	/* 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, 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;
-
-	/* clear new line */
-	g_print ("\n");
-
-	/* 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_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, 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;
-
-	/* clear new line */
-	g_print ("\n");
-
-	/* 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
-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;
-	task_class->simulate_question = dkp_task_text_simulate_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;
-	PkResults *results;
-	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);
-		goto out;
-	}
-
-	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 != 3)
-		egg_test_failed (test, "invalid number of packages: %i", packages->len);
-
-	g_ptr_array_unref (packages);
-
-	egg_debug ("results exit enum = %s", pk_exit_enum_to_text (exit_enum));
-out:
-	if (results != NULL)
-		g_object_unref (results);
-	egg_test_loop_quit (test);
-}
-
-static void
-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
deleted file mode 100644
index 3ec72c2..0000000
--- a/client/pk-task-text.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- 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 */
-
diff --git a/contrib/command-not-found/Makefile.am b/contrib/command-not-found/Makefile.am
index 3711387..272807e 100644
--- a/contrib/command-not-found/Makefile.am
+++ b/contrib/command-not-found/Makefile.am
@@ -42,6 +42,7 @@ if PK_BUILD_GLIB2
 
 PK_GLIB2_LIBS =						\
 	$(top_builddir)/lib/packagekit-glib2/libpackagekit-glib2.la	\
+	$(top_builddir)/lib/packagekit-glib2/libpackagekitprivate.a	\
 	$(NULL)
 
 noinst_PROGRAMS = pk-command-not-found-test
@@ -51,7 +52,6 @@ pk_command_not_found_test_SOURCES =			\
 	$(NULL)
 
 pk_command_not_found_test_LDADD =			\
-	../../client/libpkconsole.a			\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
 	$(PK_GLIB2_LIBS)				\
diff --git a/contrib/command-not-found/pk-command-not-found-test.c b/contrib/command-not-found/pk-command-not-found-test.c
index 21d4900..16ec291 100644
--- a/contrib/command-not-found/pk-command-not-found-test.c
+++ b/contrib/command-not-found/pk-command-not-found-test.c
@@ -29,13 +29,11 @@
 #include <glib/gi18n.h>
 #include <dbus/dbus-glib.h>
 #include <packagekit-glib2/packagekit.h>
+#include <packagekit-glib2/packagekit-private.h>
 
 #include "egg-debug.h"
 #include "egg-string.h"
 
-#include "../../client/pk-client-sync.h"
-#include "../../client/pk-console-shared.h"
-
 #define PK_MAX_PATH_LEN 1023
 
 typedef enum {
diff --git a/contrib/debuginfo-install/pk-progress-bar.c b/contrib/debuginfo-install/pk-progress-bar.c
deleted file mode 100644
index af3bf1c..328b7f0
--- a/contrib/debuginfo-install/pk-progress-bar.c
+++ /dev/null
@@ -1,357 +0,0 @@
-/* -*- 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 <glib.h>
-#include <string.h>
-
-#include "pk-progress-bar.h"
-
-#include "egg-debug.h"
-
-#define PK_PROGRESS_BAR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PK_TYPE_PROGRESS_BAR, PkProgressBarPrivate))
-
-typedef struct {
-	guint			 position;
-	gboolean		 move_forward;
-} PkProgressBarPulseState;
-
-struct PkProgressBarPrivate
-{
-	guint			 size;
-	gint			 percentage;
-	guint			 padding;
-	guint			 timer_id;
-	PkProgressBarPulseState	 pulse_state;
-};
-
-#define PK_PROGRESS_BAR_PERCENTAGE_INVALID	101
-#define PK_PROGRESS_BAR_PULSE_TIMEOUT		40 /* ms */
-
-G_DEFINE_TYPE (PkProgressBar, pk_progress_bar, G_TYPE_OBJECT)
-
-/**
- * pk_progress_bar_set_padding:
- **/
-gboolean
-pk_progress_bar_set_padding (PkProgressBar *self, guint padding)
-{
-	g_return_val_if_fail (PK_IS_PROGRESS_BAR (self), FALSE);
-	g_return_val_if_fail (padding < 100, FALSE);
-	self->priv->padding = padding;
-	return TRUE;
-}
-
-/**
- * pk_progress_bar_set_size:
- **/
-gboolean
-pk_progress_bar_set_size (PkProgressBar *self, guint size)
-{
-	g_return_val_if_fail (PK_IS_PROGRESS_BAR (self), FALSE);
-	g_return_val_if_fail (size < 100, FALSE);
-	self->priv->size = size;
-	return TRUE;
-}
-
-/**
- * pk_progress_bar_draw:
- **/
-static gboolean
-pk_progress_bar_draw (PkProgressBar *self, gint percentage)
-{
-	guint section;
-	guint i;
-
-	/* no value yet */
-	if (percentage == G_MININT)
-		return FALSE;
-
-	/* restore cursor */
-	g_print ("%c8", 0x1B);
-
-	section = (guint) ((gfloat) self->priv->size / (gfloat) 100.0 * (gfloat) percentage);
-	g_print ("[");
-	for (i=0; i<section; i++)
-		g_print ("=");
-	for (i=0; i<self->priv->size - section; i++)
-		g_print (" ");
-	g_print ("] ");
-	if (self->priv->percentage >= 0 && self->priv->percentage != PK_PROGRESS_BAR_PERCENTAGE_INVALID)
-		g_print ("(%i%%)  ", self->priv->percentage);
-	else
-		g_print ("        ");
-	return TRUE;
-}
-
-/**
- * pk_progress_bar_pulse_bar:
- **/
-static gboolean
-pk_progress_bar_pulse_bar (PkProgressBar *self)
-{
-	gint i;
-
-	/* restore cursor */
-	g_print ("%c8", 0x1B);
-
-	if (self->priv->pulse_state.move_forward) {
-		if (self->priv->pulse_state.position == self->priv->size - 1)
-			self->priv->pulse_state.move_forward = FALSE;
-		else
-			self->priv->pulse_state.position++;
-	} else if (!self->priv->pulse_state.move_forward) {
-		if (self->priv->pulse_state.position == 1)
-			self->priv->pulse_state.move_forward = TRUE;
-		else
-			self->priv->pulse_state.position--;
-	}
-
-	g_print ("[");
-	for (i=0; i<(gint)self->priv->pulse_state.position-1; i++)
-		g_print (" ");
-	g_print ("==");
-	for (i=0; i<(gint) (self->priv->size - self->priv->pulse_state.position - 1); i++)
-		g_print (" ");
-	g_print ("] ");
-	if (self->priv->percentage >= 0 && self->priv->percentage != PK_PROGRESS_BAR_PERCENTAGE_INVALID)
-		g_print ("(%i%%)  ", self->priv->percentage);
-	else
-		g_print ("        ");
-
-	return TRUE;
-}
-
-/**
- * pk_progress_bar_draw_pulse_bar:
- **/
-static void
-pk_progress_bar_draw_pulse_bar (PkProgressBar *self)
-{
-	/* have we already got zero percent? */
-	if (self->priv->timer_id != 0)
-		return;
-	if (TRUE) {
-		self->priv->pulse_state.position = 1;
-		self->priv->pulse_state.move_forward = TRUE;
-		self->priv->timer_id = g_timeout_add (PK_PROGRESS_BAR_PULSE_TIMEOUT, (GSourceFunc) pk_progress_bar_pulse_bar, self);
-	}
-}
-
-/**
- * pk_progress_bar_set_percentage:
- **/
-gboolean
-pk_progress_bar_set_percentage (PkProgressBar *self, gint percentage)
-{
-	g_return_val_if_fail (PK_IS_PROGRESS_BAR (self), FALSE);
-	g_return_val_if_fail (percentage <= PK_PROGRESS_BAR_PERCENTAGE_INVALID, FALSE);
-
-	/* check for old percentage */
-	if (percentage == self->priv->percentage) {
-		egg_debug ("skipping as the same");
-		goto out;
-	}
-
-	/* save */
-	self->priv->percentage = percentage;
-
-	/* either pulse or display */
-	if (percentage < 0 || percentage > 100) {
-		pk_progress_bar_draw (self, 0);
-		pk_progress_bar_draw_pulse_bar (self);
-	} else {
-		if (self->priv->timer_id != 0) {
-			g_source_remove (self->priv->timer_id);
-			self->priv->timer_id = 0;
-		}
-		pk_progress_bar_draw (self, percentage);
-	}
-out:
-	return TRUE;
-}
-
-/**
- * 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_progress_bar_start:
- **/
-gboolean
-pk_progress_bar_start (PkProgressBar *self, const gchar *text)
-{
-	gchar *text_pad;
-
-	g_return_val_if_fail (PK_IS_PROGRESS_BAR (self), FALSE);
-
-	/* finish old value */
-	if (self->priv->percentage != G_MININT) {
-		pk_progress_bar_draw (self, 100);
-		g_print ("\n");
-	}
-
-	/* make these all the same length */
-	text_pad = pk_strpad (text, self->priv->padding);
-	g_print ("%s", text_pad);
-
-	/* save cursor in new position */
-	g_print ("%c7", 0x1B);
-
-	/* reset */
-	if (self->priv->percentage == G_MININT)
-		self->priv->percentage = 0;
-	pk_progress_bar_draw (self, 0);
-
-	g_free (text_pad);
-	return TRUE;
-}
-
-/**
- * pk_progress_bar_end:
- **/
-gboolean
-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");
-
-	return TRUE;
-}
-
-/**
- * pk_progress_bar_finalize:
- **/
-static void
-pk_progress_bar_finalize (GObject *object)
-{
-	PkProgressBar *self;
-	g_return_if_fail (PK_IS_PROGRESS_BAR (object));
-	self = PK_PROGRESS_BAR (object);
-
-	if (self->priv->timer_id != 0)
-		g_source_remove (self->priv->timer_id);
-
-	G_OBJECT_CLASS (pk_progress_bar_parent_class)->finalize (object);
-}
-
-/**
- * pk_progress_bar_class_init:
- **/
-static void
-pk_progress_bar_class_init (PkProgressBarClass *klass)
-{
-	GObjectClass *object_class = G_OBJECT_CLASS (klass);
-	object_class->finalize = pk_progress_bar_finalize;
-	g_type_class_add_private (klass, sizeof (PkProgressBarPrivate));
-}
-
-/**
- * pk_progress_bar_init:
- **/
-static void
-pk_progress_bar_init (PkProgressBar *self)
-{
-	self->priv = PK_PROGRESS_BAR_GET_PRIVATE (self);
-
-	self->priv->size = 10;
-	self->priv->percentage = G_MININT;
-	self->priv->padding = 0;
-	self->priv->timer_id = 0;
-}
-
-/**
- * pk_progress_bar_new:
- * Return value: A new progress_bar class instance.
- **/
-PkProgressBar *
-pk_progress_bar_new (void)
-{
-	PkProgressBar *self;
-	self = g_object_new (PK_TYPE_PROGRESS_BAR, NULL);
-	return PK_PROGRESS_BAR (self);
-}
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-egg_test_progress_bar (EggTest *test)
-{
-	PkProgressBar *self;
-
-	if (!egg_test_start (test, "PkProgressBar"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get an instance");
-	self = pk_progress_bar_new ();
-	if (self != NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-
-	g_object_unref (self);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/contrib/debuginfo-install/pk-progress-bar.c b/contrib/debuginfo-install/pk-progress-bar.c
new file mode 120000
index af3bf1c..328b7f0
--- /dev/null
+++ b/contrib/debuginfo-install/pk-progress-bar.c
@@ -0,0 +1 @@
+../../lib/packagekit-glib2/pk-progress-bar.c
\ No newline at end of file
diff --git a/contrib/debuginfo-install/pk-progress-bar.h b/contrib/debuginfo-install/pk-progress-bar.h
deleted file mode 100644
index 6ea14b0..154855a
--- a/contrib/debuginfo-install/pk-progress-bar.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- 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.
- */
-
-#ifndef __PK_PROGRESS_BAR_H
-#define __PK_PROGRESS_BAR_H
-
-#include <glib-object.h>
-#include <packagekit-glib/packagekit.h>
-
-G_BEGIN_DECLS
-
-#define PK_TYPE_PROGRESS_BAR		(pk_progress_bar_get_type ())
-#define PK_PROGRESS_BAR(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), PK_TYPE_PROGRESS_BAR, PkProgressBar))
-#define PK_PROGRESS_BAR_CLASS(k)	(G_TYPE_CHECK_CLASS_CAST((k), PK_TYPE_PROGRESS_BAR, PkProgressBarClass))
-#define PK_IS_PROGRESS_BAR(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), PK_TYPE_PROGRESS_BAR))
-#define PK_IS_PROGRESS_BAR_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), PK_TYPE_PROGRESS_BAR))
-#define PK_PROGRESS_BAR_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_PROGRESS_BAR, PkProgressBarClass))
-
-typedef struct PkProgressBarPrivate PkProgressBarPrivate;
-
-typedef struct
-{
-	GObject			 parent;
-	PkProgressBarPrivate	*priv;
-} PkProgressBar;
-
-typedef struct
-{
-	GObjectClass		 parent_class;
-} PkProgressBarClass;
-
-GType		 pk_progress_bar_get_type		(void);
-PkProgressBar	*pk_progress_bar_new			(void);
-gboolean	 pk_progress_bar_set_size		(PkProgressBar	*progress_bar,
-							 guint		 size);
-gboolean	 pk_progress_bar_set_padding		(PkProgressBar	*progress_bar,
-							 guint		 padding);
-gboolean	 pk_progress_bar_set_percentage		(PkProgressBar	*progress_bar,
-							 gint		 percentage);
-gboolean	 pk_progress_bar_start			(PkProgressBar	*progress_bar,
-							 const gchar	*text);
-gboolean	 pk_progress_bar_end			(PkProgressBar	*progress_bar);
-
-G_END_DECLS
-
-#endif /* __PK_PROGRESS_BAR_H */
diff --git a/contrib/debuginfo-install/pk-progress-bar.h b/contrib/debuginfo-install/pk-progress-bar.h
new file mode 120000
index 6ea14b0..154855a
--- /dev/null
+++ b/contrib/debuginfo-install/pk-progress-bar.h
@@ -0,0 +1 @@
+../../lib/packagekit-glib2/pk-progress-bar.h
\ No newline at end of file
diff --git a/lib/packagekit-glib2/.gitignore b/lib/packagekit-glib2/.gitignore
index a013a7d..329ec3c 100644
--- a/lib/packagekit-glib2/.gitignore
+++ b/lib/packagekit-glib2/.gitignore
@@ -1,5 +1,6 @@
 .deps
 .libs
+*.a
 *.o
 *.la
 *.lo
diff --git a/lib/packagekit-glib2/Makefile.am b/lib/packagekit-glib2/Makefile.am
index b6d4536..c8fa7dc 100644
--- a/lib/packagekit-glib2/Makefile.am
+++ b/lib/packagekit-glib2/Makefile.am
@@ -100,6 +100,26 @@ libpackagekit_glib2_la_CFLAGS =					\
 	$(WARNINGFLAGS_C)					\
 	$(NULL)
 
+noinst_LIBRARIES = libpackagekitprivate.a
+libpackagekitprivate_a_SOURCES =				\
+	egg-debug.c						\
+	egg-debug.h						\
+	egg-string.c						\
+	egg-string.h						\
+	pk-task-text.c						\
+	pk-task-text.h						\
+	pk-client-sync.c					\
+	pk-client-sync.h					\
+	pk-console-shared.c					\
+	pk-console-shared.h					\
+	pk-progress-bar.c					\
+	pk-progress-bar.h					\
+	$(NULL)
+
+libpackagekitprivate_a_CFLAGS =					\
+	$(WARNINGFLAGS_C)					\
+	$(NULL)
+
 if EGG_BUILD_TESTS
 check_PROGRAMS =						\
 	pk-self-test
@@ -110,6 +130,8 @@ pk_self_test_SOURCES =						\
 	egg-test.c						\
 	pk-task-wrapper.c					\
 	pk-task-wrapper.h					\
+	pk-task-text.c						\
+	pk-task-text.h						\
 	pk-self-test.c						\
 	$(NULL)
 
diff --git a/lib/packagekit-glib2/packagekit-private.h b/lib/packagekit-glib2/packagekit-private.h
new file mode 100644
index 0000000..55cea2a
--- /dev/null
+++ b/lib/packagekit-glib2/packagekit-private.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 __PACKAGEKIT_PRIVATE_H__
+#define __PACKAGEKIT_PRIVATE_H__
+
+#define __PACKAGEKIT_PRIVATE_H_INSIDE__
+
+#include <packagekit-glib2/pk-client-sync.h>
+#include <packagekit-glib2/pk-task-text.h>
+#include <packagekit-glib2/pk-console-shared.h>
+#include <packagekit-glib2/pk-progress-bar.h>
+
+#undef __PACKAGEKIT_PRIVATE_H_INSIDE__
+
+#endif /* __PACKAGEKIT_PRIVATE_H__ */
+
diff --git a/lib/packagekit-glib2/pk-client-sync.c b/lib/packagekit-glib2/pk-client-sync.c
new file mode 100644
index 0000000..1f91e4d
--- /dev/null
+++ b/lib/packagekit-glib2/pk-client-sync.c
@@ -0,0 +1,133 @@
+/* -*- 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 <stdio.h>
+#include <gio/gio.h>
+#include <glib.h>
+#include <packagekit-glib2/packagekit.h>
+
+#include "egg-debug.h"
+
+#include "pk-client-sync.h"
+
+/* tiny helper to help us do the async operation */
+typedef struct {
+	GError		**error;
+	GMainLoop	*loop;
+	PkResults	*results;
+} PkClientHelper;
+
+/**
+ * pk_client_generic_finish_sync:
+ **/
+static void
+pk_client_generic_finish_sync (PkClient *client, GAsyncResult *res, PkClientHelper *helper)
+{
+	PkResults *results;
+	/* get the result */
+	results = pk_client_generic_finish (client, res, helper->error);
+	if (results != NULL) {
+		g_object_unref (results);
+		helper->results = g_object_ref (G_OBJECT (results));
+	}
+	g_main_loop_quit (helper->loop);
+}
+
+/**
+ * pk_client_resolve_sync:
+ * @client: a valid #PkClient instance
+ * @error: A #GError or %NULL
+ *
+ * Resolves a package to a Package ID.
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_resolve_sync (PkClient *client, PkFilterEnum filter, gchar **packages, GCancellable *cancellable,
+			PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_resolve_async (client, filter, packages, cancellable, progress_callback, progress_user_data,
+				 (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_search_file_sync:
+ * @client: a valid #PkClient instance
+ * @error: A #GError or %NULL
+ *
+ * Resolves a filename to multiple Package IDs.
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_search_file_sync (PkClient *client, PkFilterEnum filter, const gchar *filename, GCancellable *cancellable,
+			    PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_search_file_async (client, filter, filename, cancellable, progress_callback, progress_user_data,
+				     (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
diff --git a/lib/packagekit-glib2/pk-client-sync.h b/lib/packagekit-glib2/pk-client-sync.h
new file mode 100644
index 0000000..f064439
--- /dev/null
+++ b/lib/packagekit-glib2/pk-client-sync.h
@@ -0,0 +1,46 @@
+/* -*- 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.
+ */
+
+#ifndef __PK_CLIENT_SYNC_H
+#define __PK_CLIENT_SYNC_H
+
+#include <glib.h>
+#include <packagekit-glib2/packagekit.h>
+
+PkResults	*pk_client_resolve_sync			(PkClient		*client,
+							 PkFilterEnum		 filter,
+							 gchar			**packages,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+PkResults	*pk_client_search_file_sync		(PkClient		*client,
+							 PkFilterEnum		 filter,
+							 const gchar		*filename,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+#endif /* __PK_CLIENT_SYNC_H */
+
+
+
diff --git a/lib/packagekit-glib2/pk-console-shared.c b/lib/packagekit-glib2/pk-console-shared.c
new file mode 100644
index 0000000..b2359f2
--- /dev/null
+++ b/lib/packagekit-glib2/pk-console-shared.c
@@ -0,0 +1,203 @@
+/* -*- 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 <stdio.h>
+#include <gio/gio.h>
+#include <glib/gi18n.h>
+#include <packagekit-glib2/packagekit.h>
+
+#include "egg-debug.h"
+
+#include "pk-client-sync.h"
+#include "pk-console-shared.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';
+	gboolean ret = FALSE;
+
+	/* 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) fgetc (stdin);
+
+		/* positive */
+		if (answer == 'y' || answer == 'Y') {
+			ret = TRUE;
+			break;
+		}
+		/* negative */
+		if (answer == 'n' || answer == 'N')
+			break;
+
+		/* default choice */
+		if (answer == '\n' && defaultyes) {
+			ret = TRUE;
+			break;
+		}
+		if (answer == '\n' && !defaultyes)
+			break;
+	} while (TRUE);
+
+	/* remove the trailing \n */
+	answer = (gchar) fgetc (stdin);
+	if (answer != '\n')
+		ungetc (answer, stdin);
+
+	return ret;
+}
+
+/**
+ * pk_console_resolve_package:
+ **/
+gchar *
+pk_console_resolve_package (PkClient *client, PkBitfield filter, const gchar *package, GError **error)
+{
+	gchar *package_id = NULL;
+	gboolean valid;
+	gchar **tmp;
+	PkResults *results;
+	GPtrArray *array = NULL;
+	guint i;
+	gchar *printable;
+	const PkResultItemPackage *item;
+
+	/* have we passed a complete package_id? */
+	valid = pk_package_id_check (package);
+	if (valid)
+		return g_strdup (package);
+
+	/* split */
+	tmp = g_strsplit (package, ",", -1);
+
+	/* get the list of possibles */
+	results = pk_client_resolve_sync (client, filter, tmp, NULL, NULL, NULL, error);
+	if (results == NULL)
+		goto out;
+
+	/* get the packages returned */
+	array = pk_results_get_package_array (results);
+	if (array == NULL) {
+		*error = g_error_new (1, 0, "did not get package struct for %s", package);
+		goto out;
+	}
+
+	/* nothing found */
+	if (array->len == 0) {
+		*error = g_error_new (1, 0, "could not find %s", package);
+		goto out;
+	}
+
+	/* just one thing found */
+	if (array->len == 1) {
+		item = g_ptr_array_index (array, 0);
+		package_id = g_strdup (item->package_id);
+		goto out;
+	}
+
+	/* TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages  */
+	g_print ("%s\n", _("More than one package matches:"));
+	for (i=0; i<array->len; i++) {
+		item = g_ptr_array_index (array, i);
+		printable = pk_package_id_to_printable (item->package_id);
+		g_print ("%i. %s\n", i+1, printable);
+		g_free (printable);
+	}
+
+	/* TRANSLATORS: This finds out which package in the list to use */
+	i = pk_console_get_number (_("Please choose the correct package: "), array->len);
+	item = g_ptr_array_index (array, i-1);
+	package_id = g_strdup (item->package_id);
+out:
+	if (results != NULL)
+		g_object_unref (results);
+	if (array != NULL)
+		g_ptr_array_unref (array);
+	g_strfreev (tmp);
+	return package_id;
+}
+
+/**
+ * pk_console_resolve_packages:
+ **/
+gchar **
+pk_console_resolve_packages (PkClient *client, PkBitfield filter, gchar **packages, GError **error)
+{
+	gchar **package_ids;
+	guint i;
+	guint len;
+
+	/* get length */
+	len = g_strv_length (packages);
+	egg_debug ("resolving %i packages", len);
+
+	/* create output array*/
+	package_ids = g_new0 (gchar *, len+1);
+
+	/* resolve each package */
+	for (i=0; i<len; i++) {
+		package_ids[i] = pk_console_resolve_package (client, filter, packages[i], error);
+		if (package_ids[i] == NULL) {
+			/* destroy state */
+			g_strfreev (package_ids);
+			package_ids = NULL;
+			break;
+		}
+	}
+	return package_ids;
+}
+
diff --git a/lib/packagekit-glib2/pk-console-shared.h b/lib/packagekit-glib2/pk-console-shared.h
new file mode 100644
index 0000000..1da5336
--- /dev/null
+++ b/lib/packagekit-glib2/pk-console-shared.h
@@ -0,0 +1,44 @@
+/* -*- 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_CONSOLE_SHARED_H
+#define __PK_CONSOLE_SHARED_H
+
+#include <glib.h>
+#include <packagekit-glib2/packagekit.h>
+
+guint		 pk_console_get_number			(const gchar	*question,
+							 guint		 maxnum);
+gboolean	 pk_console_get_prompt			(const gchar	*question,
+							 gboolean	 defaultyes);
+gchar		*pk_console_resolve_package		(PkClient	*client,
+							 PkBitfield	 filter,
+							 const gchar	*package,
+							 GError		**error);
+gchar		**pk_console_resolve_packages		(PkClient	*client,
+							 PkBitfield	 filter,
+							 gchar		**packages,
+							 GError		**error);
+
+#endif /* __PK_CONSOLE_SHARED_H */
+
+
+
diff --git a/lib/packagekit-glib2/pk-progress-bar.c b/lib/packagekit-glib2/pk-progress-bar.c
new file mode 100644
index 0000000..af3bf1c
--- /dev/null
+++ b/lib/packagekit-glib2/pk-progress-bar.c
@@ -0,0 +1,357 @@
+/* -*- 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 <glib.h>
+#include <string.h>
+
+#include "pk-progress-bar.h"
+
+#include "egg-debug.h"
+
+#define PK_PROGRESS_BAR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PK_TYPE_PROGRESS_BAR, PkProgressBarPrivate))
+
+typedef struct {
+	guint			 position;
+	gboolean		 move_forward;
+} PkProgressBarPulseState;
+
+struct PkProgressBarPrivate
+{
+	guint			 size;
+	gint			 percentage;
+	guint			 padding;
+	guint			 timer_id;
+	PkProgressBarPulseState	 pulse_state;
+};
+
+#define PK_PROGRESS_BAR_PERCENTAGE_INVALID	101
+#define PK_PROGRESS_BAR_PULSE_TIMEOUT		40 /* ms */
+
+G_DEFINE_TYPE (PkProgressBar, pk_progress_bar, G_TYPE_OBJECT)
+
+/**
+ * pk_progress_bar_set_padding:
+ **/
+gboolean
+pk_progress_bar_set_padding (PkProgressBar *self, guint padding)
+{
+	g_return_val_if_fail (PK_IS_PROGRESS_BAR (self), FALSE);
+	g_return_val_if_fail (padding < 100, FALSE);
+	self->priv->padding = padding;
+	return TRUE;
+}
+
+/**
+ * pk_progress_bar_set_size:
+ **/
+gboolean
+pk_progress_bar_set_size (PkProgressBar *self, guint size)
+{
+	g_return_val_if_fail (PK_IS_PROGRESS_BAR (self), FALSE);
+	g_return_val_if_fail (size < 100, FALSE);
+	self->priv->size = size;
+	return TRUE;
+}
+
+/**
+ * pk_progress_bar_draw:
+ **/
+static gboolean
+pk_progress_bar_draw (PkProgressBar *self, gint percentage)
+{
+	guint section;
+	guint i;
+
+	/* no value yet */
+	if (percentage == G_MININT)
+		return FALSE;
+
+	/* restore cursor */
+	g_print ("%c8", 0x1B);
+
+	section = (guint) ((gfloat) self->priv->size / (gfloat) 100.0 * (gfloat) percentage);
+	g_print ("[");
+	for (i=0; i<section; i++)
+		g_print ("=");
+	for (i=0; i<self->priv->size - section; i++)
+		g_print (" ");
+	g_print ("] ");
+	if (self->priv->percentage >= 0 && self->priv->percentage != PK_PROGRESS_BAR_PERCENTAGE_INVALID)
+		g_print ("(%i%%)  ", self->priv->percentage);
+	else
+		g_print ("        ");
+	return TRUE;
+}
+
+/**
+ * pk_progress_bar_pulse_bar:
+ **/
+static gboolean
+pk_progress_bar_pulse_bar (PkProgressBar *self)
+{
+	gint i;
+
+	/* restore cursor */
+	g_print ("%c8", 0x1B);
+
+	if (self->priv->pulse_state.move_forward) {
+		if (self->priv->pulse_state.position == self->priv->size - 1)
+			self->priv->pulse_state.move_forward = FALSE;
+		else
+			self->priv->pulse_state.position++;
+	} else if (!self->priv->pulse_state.move_forward) {
+		if (self->priv->pulse_state.position == 1)
+			self->priv->pulse_state.move_forward = TRUE;
+		else
+			self->priv->pulse_state.position--;
+	}
+
+	g_print ("[");
+	for (i=0; i<(gint)self->priv->pulse_state.position-1; i++)
+		g_print (" ");
+	g_print ("==");
+	for (i=0; i<(gint) (self->priv->size - self->priv->pulse_state.position - 1); i++)
+		g_print (" ");
+	g_print ("] ");
+	if (self->priv->percentage >= 0 && self->priv->percentage != PK_PROGRESS_BAR_PERCENTAGE_INVALID)
+		g_print ("(%i%%)  ", self->priv->percentage);
+	else
+		g_print ("        ");
+
+	return TRUE;
+}
+
+/**
+ * pk_progress_bar_draw_pulse_bar:
+ **/
+static void
+pk_progress_bar_draw_pulse_bar (PkProgressBar *self)
+{
+	/* have we already got zero percent? */
+	if (self->priv->timer_id != 0)
+		return;
+	if (TRUE) {
+		self->priv->pulse_state.position = 1;
+		self->priv->pulse_state.move_forward = TRUE;
+		self->priv->timer_id = g_timeout_add (PK_PROGRESS_BAR_PULSE_TIMEOUT, (GSourceFunc) pk_progress_bar_pulse_bar, self);
+	}
+}
+
+/**
+ * pk_progress_bar_set_percentage:
+ **/
+gboolean
+pk_progress_bar_set_percentage (PkProgressBar *self, gint percentage)
+{
+	g_return_val_if_fail (PK_IS_PROGRESS_BAR (self), FALSE);
+	g_return_val_if_fail (percentage <= PK_PROGRESS_BAR_PERCENTAGE_INVALID, FALSE);
+
+	/* check for old percentage */
+	if (percentage == self->priv->percentage) {
+		egg_debug ("skipping as the same");
+		goto out;
+	}
+
+	/* save */
+	self->priv->percentage = percentage;
+
+	/* either pulse or display */
+	if (percentage < 0 || percentage > 100) {
+		pk_progress_bar_draw (self, 0);
+		pk_progress_bar_draw_pulse_bar (self);
+	} else {
+		if (self->priv->timer_id != 0) {
+			g_source_remove (self->priv->timer_id);
+			self->priv->timer_id = 0;
+		}
+		pk_progress_bar_draw (self, percentage);
+	}
+out:
+	return TRUE;
+}
+
+/**
+ * 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_progress_bar_start:
+ **/
+gboolean
+pk_progress_bar_start (PkProgressBar *self, const gchar *text)
+{
+	gchar *text_pad;
+
+	g_return_val_if_fail (PK_IS_PROGRESS_BAR (self), FALSE);
+
+	/* finish old value */
+	if (self->priv->percentage != G_MININT) {
+		pk_progress_bar_draw (self, 100);
+		g_print ("\n");
+	}
+
+	/* make these all the same length */
+	text_pad = pk_strpad (text, self->priv->padding);
+	g_print ("%s", text_pad);
+
+	/* save cursor in new position */
+	g_print ("%c7", 0x1B);
+
+	/* reset */
+	if (self->priv->percentage == G_MININT)
+		self->priv->percentage = 0;
+	pk_progress_bar_draw (self, 0);
+
+	g_free (text_pad);
+	return TRUE;
+}
+
+/**
+ * pk_progress_bar_end:
+ **/
+gboolean
+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");
+
+	return TRUE;
+}
+
+/**
+ * pk_progress_bar_finalize:
+ **/
+static void
+pk_progress_bar_finalize (GObject *object)
+{
+	PkProgressBar *self;
+	g_return_if_fail (PK_IS_PROGRESS_BAR (object));
+	self = PK_PROGRESS_BAR (object);
+
+	if (self->priv->timer_id != 0)
+		g_source_remove (self->priv->timer_id);
+
+	G_OBJECT_CLASS (pk_progress_bar_parent_class)->finalize (object);
+}
+
+/**
+ * pk_progress_bar_class_init:
+ **/
+static void
+pk_progress_bar_class_init (PkProgressBarClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	object_class->finalize = pk_progress_bar_finalize;
+	g_type_class_add_private (klass, sizeof (PkProgressBarPrivate));
+}
+
+/**
+ * pk_progress_bar_init:
+ **/
+static void
+pk_progress_bar_init (PkProgressBar *self)
+{
+	self->priv = PK_PROGRESS_BAR_GET_PRIVATE (self);
+
+	self->priv->size = 10;
+	self->priv->percentage = G_MININT;
+	self->priv->padding = 0;
+	self->priv->timer_id = 0;
+}
+
+/**
+ * pk_progress_bar_new:
+ * Return value: A new progress_bar class instance.
+ **/
+PkProgressBar *
+pk_progress_bar_new (void)
+{
+	PkProgressBar *self;
+	self = g_object_new (PK_TYPE_PROGRESS_BAR, NULL);
+	return PK_PROGRESS_BAR (self);
+}
+
+/***************************************************************************
+ ***                          MAKE CHECK TESTS                           ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+egg_test_progress_bar (EggTest *test)
+{
+	PkProgressBar *self;
+
+	if (!egg_test_start (test, "PkProgressBar"))
+		return;
+
+	/************************************************************/
+	egg_test_title (test, "get an instance");
+	self = pk_progress_bar_new ();
+	if (self != NULL)
+		egg_test_success (test, NULL);
+	else
+		egg_test_failed (test, NULL);
+
+	g_object_unref (self);
+
+	egg_test_end (test);
+}
+#endif
+
diff --git a/lib/packagekit-glib2/pk-progress-bar.h b/lib/packagekit-glib2/pk-progress-bar.h
new file mode 100644
index 0000000..6ea14b0
--- /dev/null
+++ b/lib/packagekit-glib2/pk-progress-bar.h
@@ -0,0 +1,64 @@
+/* -*- 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.
+ */
+
+#ifndef __PK_PROGRESS_BAR_H
+#define __PK_PROGRESS_BAR_H
+
+#include <glib-object.h>
+#include <packagekit-glib/packagekit.h>
+
+G_BEGIN_DECLS
+
+#define PK_TYPE_PROGRESS_BAR		(pk_progress_bar_get_type ())
+#define PK_PROGRESS_BAR(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), PK_TYPE_PROGRESS_BAR, PkProgressBar))
+#define PK_PROGRESS_BAR_CLASS(k)	(G_TYPE_CHECK_CLASS_CAST((k), PK_TYPE_PROGRESS_BAR, PkProgressBarClass))
+#define PK_IS_PROGRESS_BAR(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), PK_TYPE_PROGRESS_BAR))
+#define PK_IS_PROGRESS_BAR_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), PK_TYPE_PROGRESS_BAR))
+#define PK_PROGRESS_BAR_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_PROGRESS_BAR, PkProgressBarClass))
+
+typedef struct PkProgressBarPrivate PkProgressBarPrivate;
+
+typedef struct
+{
+	GObject			 parent;
+	PkProgressBarPrivate	*priv;
+} PkProgressBar;
+
+typedef struct
+{
+	GObjectClass		 parent_class;
+} PkProgressBarClass;
+
+GType		 pk_progress_bar_get_type		(void);
+PkProgressBar	*pk_progress_bar_new			(void);
+gboolean	 pk_progress_bar_set_size		(PkProgressBar	*progress_bar,
+							 guint		 size);
+gboolean	 pk_progress_bar_set_padding		(PkProgressBar	*progress_bar,
+							 guint		 padding);
+gboolean	 pk_progress_bar_set_percentage		(PkProgressBar	*progress_bar,
+							 gint		 percentage);
+gboolean	 pk_progress_bar_start			(PkProgressBar	*progress_bar,
+							 const gchar	*text);
+gboolean	 pk_progress_bar_end			(PkProgressBar	*progress_bar);
+
+G_END_DECLS
+
+#endif /* __PK_PROGRESS_BAR_H */
diff --git a/lib/packagekit-glib2/pk-self-test.c b/lib/packagekit-glib2/pk-self-test.c
index 4d0b231..2656aa9 100644
--- a/lib/packagekit-glib2/pk-self-test.c
+++ b/lib/packagekit-glib2/pk-self-test.c
@@ -36,6 +36,7 @@
 #include "pk-package-sack.h"
 #include "pk-results.h"
 #include "pk-task.h"
+#include "pk-task-text.h"
 #include "pk-task-wrapper.h"
 #include "pk-version.h"
 
@@ -63,6 +64,7 @@ main (int argc, char **argv)
 	pk_package_sack_test (test);
 	pk_task_test (test);
 	pk_task_wrapper_test (test);
+	pk_task_text_test (test);
 
 	return (egg_test_finish (test));
 }
diff --git a/lib/packagekit-glib2/pk-task-text.c b/lib/packagekit-glib2/pk-task-text.c
new file mode 100644
index 0000000..e2985ba
--- /dev/null
+++ b/lib/packagekit-glib2/pk-task-text.c
@@ -0,0 +1,463 @@
+/* -*- 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-console-shared.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, PkResults *results)
+{
+	gboolean ret;
+	PkTaskTextPrivate *priv = PK_TASK_TEXT(task)->priv;
+
+	/* set some user data, for no reason */
+	priv->user_data = NULL;
+
+	/* clear new line */
+	g_print ("\n");
+
+	/* 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, 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;
+
+	/* clear new line */
+	g_print ("\n");
+
+	/* 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, 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;
+
+	/* clear new line */
+	g_print ("\n");
+
+	/* 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, 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;
+
+	/* clear new line */
+	g_print ("\n");
+
+	/* 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_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, 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;
+
+	/* clear new line */
+	g_print ("\n");
+
+	/* 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
+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;
+	task_class->simulate_question = dkp_task_text_simulate_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;
+	PkResults *results;
+	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);
+		goto out;
+	}
+
+	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 != 3)
+		egg_test_failed (test, "invalid number of packages: %i", packages->len);
+
+	g_ptr_array_unref (packages);
+
+	egg_debug ("results exit enum = %s", pk_exit_enum_to_text (exit_enum));
+out:
+	if (results != NULL)
+		g_object_unref (results);
+	egg_test_loop_quit (test);
+}
+
+static void
+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/lib/packagekit-glib2/pk-task-text.h b/lib/packagekit-glib2/pk-task-text.h
new file mode 100644
index 0000000..3ec72c2
--- /dev/null
+++ b/lib/packagekit-glib2/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 */
+
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 9cd6a74..62a3c58 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -2,21 +2,22 @@
 # List of source files containing translatable strings.
 # Please keep this file sorted alphabetically.
 client/pk-console.c
-client/pk-console-shared.c
 client/pk-console-test.c
 client/pk-generate-pack.c
 client/pk-generate-pack-test.c
 client/pk-monitor.c
 client/pk-monitor-test.c
-client/pk-task-text.c
 client/pk-tools-common.c
 contrib/browser-plugin/pk-plugin-install.c
 contrib/command-not-found/pk-command-not-found.c
+contrib/command-not-found/pk-command-not-found-test.c
 contrib/debuginfo-install/pk-debuginfo-install.c
 contrib/device-rebind/pk-device-rebind.c
 data/packagekit-catalog.xml.in
 data/packagekit-package-list.xml.in
 data/packagekit-servicepack.xml.in
+lib/packagekit-glib2/pk-console-shared.c
+lib/packagekit-glib2/pk-task-text.c
 policy/org.freedesktop.packagekit.policy.in
 src/pk-main.c
 src/pk-polkit-action-lookup.c
commit cf4ffdc679162848bbe50a36a958e9daca8ea9f1
Author: hunter688 <hunter688 at fedoraproject.org>
Date:   Tue Sep 8 08:30:18 2009 +0000

    Sending translation for Czech

diff --git a/po/cs.po b/po/cs.po
index 438256f..4b11769 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -9,7 +9,7 @@ msgstr ""
 "Project-Id-Version: packagekit.master.cs\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-09-04 08:25+0000\n"
-"PO-Revision-Date: 2009-09-04 15:38+0100\n"
+"PO-Revision-Date: 2009-09-07 16:56+0100\n"
 "Last-Translator: Dušan Hokův <dusan at mirc.cz>\n"
 "Language-Team: Czech <fedora-cs-list at redhat.com>\n"
 "MIME-Version: 1.0\n"
@@ -34,17 +34,17 @@ msgstr "Systémový čas"
 #: ../client/pk-console.c:242
 #: ../client/pk-console-test.c:150
 msgid "Succeeded"
-msgstr ""
+msgstr "Úspěšné"
 
 #: ../client/pk-console.c:242
 #: ../client/pk-console-test.c:150
 msgid "True"
-msgstr ""
+msgstr "Pravda"
 
 #: ../client/pk-console.c:242
 #: ../client/pk-console-test.c:150
 msgid "False"
-msgstr ""
+msgstr "Nepravda"
 
 #. TRANSLATORS: this is the transactions role, e.g. "update-system"
 #. TRANSLATORS: the trasaction role, e.g. update-system
@@ -52,13 +52,13 @@ msgstr ""
 #: ../client/pk-console-test.c:152
 #: ../src/pk-polkit-action-lookup.c:327
 msgid "Role"
-msgstr ""
+msgstr "Role"
 
 #. TRANSLATORS: this is The duration of the transaction
 #: ../client/pk-console.c:249
 #: ../client/pk-console-test.c:157
 msgid "Duration"
-msgstr ""
+msgstr "Doba trvání"
 
 #: ../client/pk-console.c:249
 #: ../client/pk-console-test.c:157
@@ -99,7 +99,7 @@ msgstr "Ovlivněné balíky:"
 #: ../client/pk-console.c:276
 #: ../client/pk-console-test.c:184
 msgid "Affected packages: None"
-msgstr ""
+msgstr "Ovlivněné balíčky: Žádné"
 
 #. TRANSLATORS: When processing, we might have to remove other dependencies
 #: ../client/pk-console.c:337
@@ -170,7 +170,7 @@ msgstr "ID"
 #: ../client/pk-console.c:384
 #: ../client/pk-console-test.c:223
 msgid "Parent"
-msgstr ""
+msgstr "Nadřazený"
 
 #. TRANSLATORS: this is the name of the parent group
 #: ../client/pk-console.c:387
@@ -249,7 +249,7 @@ msgstr "Text aktualizace"
 #: ../client/pk-console.c:441
 #: ../client/pk-console-test.c:283
 msgid "Changes"
-msgstr ""
+msgstr "Změny"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
 #: ../client/pk-console.c:445
@@ -273,18 +273,18 @@ msgstr "Aktualizován"
 #: ../client/pk-console.c:475
 #: ../client/pk-console-test.c:315
 msgid "Enabled"
-msgstr ""
+msgstr "Povoleno"
 
 #. TRANSLATORS: if the repo is disabled
 #: ../client/pk-console.c:478
 #: ../client/pk-console-test.c:318
 msgid "Disabled"
-msgstr ""
+msgstr "Zakázáno"
 
 #: ../client/pk-console.c:555
 #: ../client/pk-console.c:557
 msgid "Percentage"
-msgstr ""
+msgstr "Procentuální"
 
 #: ../client/pk-console.c:557
 msgid "Unknown"
@@ -299,23 +299,20 @@ msgstr "Restart systému požaduje:"
 #. TRANSLATORS: a package requires the session to be restarted
 #: ../client/pk-console.c:602
 #: ../client/pk-console-test.c:343
-#, fuzzy
 msgid "Session restart required:"
-msgstr "Je požadován restart systému"
+msgstr "Je požadován restart sezení:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
 #: ../client/pk-console.c:605
 #: ../client/pk-console-test.c:346
-#, fuzzy
 msgid "System restart (security) required by:"
-msgstr "Je požadován restart systému"
+msgstr "Restart (bezpečnostní) systému požaduje:"
 
 #. TRANSLATORS: a package requires the session to be restarted due to a security update
 #: ../client/pk-console.c:608
 #: ../client/pk-console-test.c:349
-#, fuzzy
 msgid "Session restart (security) required:"
-msgstr "Je požadován restart systému"
+msgstr "Je požadován restart (bezpečnostní) sezení:"
 
 #. TRANSLATORS: a package requires the application to be restarted
 #: ../client/pk-console.c:611
@@ -389,7 +386,7 @@ msgstr "Interní chyba: %s"
 #: ../client/pk-console.c:1266
 #: ../client/pk-task-text.c:284
 msgid "Proceed with changes?"
-msgstr ""
+msgstr "Pokračovat se změnami?"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
 #: ../client/pk-console.c:881
@@ -561,12 +558,12 @@ msgstr "Balík '%s' nemůže být nainstalován: %s"
 #. TRANSLATORS: follows a list of packages to install
 #: ../client/pk-console.c:1594
 msgid "To install"
-msgstr ""
+msgstr "K instalaci"
 
 #. TRANSLATORS: searching takes some time....
 #: ../client/pk-console.c:1606
 msgid "Searching for package: "
-msgstr ""
+msgstr "Hledání balíčku:"
 
 #. TRANSLATORS: package was not found -- this is the end of a string ended in ...
 #: ../client/pk-console.c:1610
@@ -723,7 +720,7 @@ msgstr "Tento nástroj se nemůže připojit k systému DBUS"
 #: ../client/pk-console.c:2153
 #: ../client/pk-console-test.c:1279
 msgid "The filter specified was invalid"
-msgstr ""
+msgstr "Určený filtr byl neplatný"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
 #: ../client/pk-console.c:2172
@@ -807,9 +804,8 @@ msgstr "Následující balíky musí být odstraněny"
 #: ../client/pk-console.c:2305
 #: ../client/pk-console-test.c:1448
 #: ../client/pk-console-test.c:1459
-#, fuzzy
 msgid "A repository name is required"
-msgstr "Vyžaduje podpis repozitáře"
+msgstr "Je třeba určit název repozitáře"
 
 #. TRANSLATORS: The user didn't provide any data
 #: ../client/pk-console.c:2314
@@ -828,9 +824,8 @@ msgstr "Je nutné zadat akci, např. 'update-system'"
 #. TRANSLATORS: The user specified an invalid action
 #: ../client/pk-console.c:2335
 #: ../client/pk-console-test.c:1495
-#, fuzzy
 msgid "A correct role is required"
-msgstr "Je požadováno odhlášení a přihlášení"
+msgstr "Je požadována správná role"
 
 #. TRANSLATORS: we keep a database updated with the time that an action was last executed
 #: ../client/pk-console.c:2342
@@ -851,9 +846,8 @@ msgstr ""
 #: ../client/pk-console-test.c:1556
 #: ../client/pk-console-test.c:1565
 #: ../client/pk-generate-pack.c:243
-#, fuzzy
 msgid "A package name is required"
-msgstr "Je požadováno odhlášení a přihlášení"
+msgstr "Je požadován název balíčku"
 
 #. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
 #: ../client/pk-console.c:2382
@@ -883,9 +877,8 @@ msgstr "Volba '%s' není podporována "
 
 #. TRANSLATORS: User does not have permission to do this
 #: ../client/pk-console.c:2496
-#, fuzzy
 msgid "Incorrect privileges for this operation"
-msgstr "Nemáte nezbytné oprávnění pro tuto operaci"
+msgstr "Nesprávná oprávnění pro tuto operaci"
 
 #. TRANSLATORS: Generic failure of what they asked to do
 #. /* TRANSLATORS: User does not have permission to do this */
@@ -944,9 +937,8 @@ msgstr "Obě volby vybrány."
 
 #. TRANSLATORS: This is when the user fails to supply the output
 #: ../client/pk-generate-pack.c:251
-#, fuzzy
 msgid "A output directory or file name is required"
-msgstr "Je požadováno odhlášení a přihlášení"
+msgstr "Je požadován výstupní adresář nebo název souboru"
 
 #. 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
@@ -1020,17 +1012,16 @@ msgstr "PackageKit Monitor"
 
 #: ../client/pk-monitor.c:183
 msgid "Cannot show the list of transactions"
-msgstr ""
+msgstr "Nelze zobrazit seznam transakcí"
 
 #. ask the user
 #: ../client/pk-task-text.c:61
 msgid "Do you want to allow installing of unsigned software?"
-msgstr ""
+msgstr "Chcete povolit instalování nepodepsaného softwaru?"
 
 #: ../client/pk-task-text.c:65
-#, fuzzy
 msgid "The unsigned software will not be installed."
-msgstr "Balík '%s' nemůže být nainstalován: %s"
+msgstr "Nepodepsaný software nebude nainstalován."
 
 #: ../client/pk-task-text.c:94
 #, fuzzy
@@ -1044,27 +1035,25 @@ msgstr "Změnit parametry zdrojů softwaru"
 
 #: ../client/pk-task-text.c:97
 msgid "Key URL"
-msgstr ""
+msgstr "URL klíče"
 
 #: ../client/pk-task-text.c:98
 msgid "Key user"
-msgstr ""
+msgstr "Uživatel klíče"
 
 #: ../client/pk-task-text.c:99
-#, fuzzy
 msgid "Key ID"
-msgstr "Uživatelské ID"
+msgstr "ID klíče"
 
 #: ../client/pk-task-text.c:100
 msgid "Key fingerprint"
-msgstr ""
+msgstr "Fingerprint klíče"
 
 #: ../client/pk-task-text.c:101
 msgid "Key Timestamp"
-msgstr ""
+msgstr "Časová značka klíče"
 
 #: ../client/pk-task-text.c:142
-#, fuzzy
 msgid "End user licence agreement required"
 msgstr "Vyžaduje souhlas s licencí koncového uživatele"
 
@@ -1086,9 +1075,8 @@ msgid "The agreement was not accepted."
 msgstr "Ujednání nebylo přijato."
 
 #: ../client/pk-task-text.c:182
-#, fuzzy
 msgid "Media change required"
-msgstr "Nemohu zjistit, které balíky jsou vyžadovány"
+msgstr "Je vyžadována změna média"
 
 #: ../client/pk-task-text.c:183
 msgid "Media type"
@@ -1104,18 +1092,16 @@ msgstr "Text"
 
 #. ask the user
 #: ../client/pk-task-text.c:189
-#, fuzzy
 msgid "Please insert the correct media"
-msgstr "Prosím vyberte správný balík: "
+msgstr "Prosím vlžte správné médium"
 
 #: ../client/pk-task-text.c:193
-#, fuzzy
 msgid "The correct media was not inserted."
-msgstr "Podpis nebyl přijat."
+msgstr "Nebylo vloženo správné médium."
 
 #: ../client/pk-task-text.c:288
 msgid "The transaction did not proceed."
-msgstr ""
+msgstr "Transakce nemohla pokračovat."
 
 #: ../client/pk-text.c:50
 #, c-format
@@ -1195,18 +1181,17 @@ msgstr "Instaluji..."
 #. 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 "Stahuji detaily o zdrojích software."
 
 #. 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 "Stahuji seznamy souborů (dokončení může chvíli trvat)."
 
 #. TRANSLATORS: waiting for native lock
 #: ../contrib/command-not-found/pk-command-not-found.c:357
-#, fuzzy
 msgid "Waiting for package manager lock."
-msgstr "Hledám jméno balíku."
+msgstr "Čekám na zámek správce balíčků."
 
 #. TRANSLATORS: loading package cache so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:361
@@ -1233,9 +1218,8 @@ msgstr "PackageKit Monitor"
 
 #. TRANSLATORS: the prefix of all the output telling the user why it's not executing
 #: ../contrib/command-not-found/pk-command-not-found.c:658
-#, fuzzy
 msgid "Command not found."
-msgstr "Adresář nenalezen"
+msgstr "Příkaz nenalezen."
 
 #. TRANSLATORS: tell the user what we think the command is
 #: ../contrib/command-not-found/pk-command-not-found.c:665
@@ -1262,7 +1246,7 @@ msgstr "Prosím vyberte příkaz ke spuštění"
 #. TRANSLATORS: tell the user what package provides the command
 #: ../contrib/command-not-found/pk-command-not-found.c:721
 msgid "The package providing this file is:"
-msgstr ""
+msgstr "Balík poskytující tento soubor je:"
 
 #. TRANSLATORS: as the user if we want to install a package to provide the command
 #: ../contrib/command-not-found/pk-command-not-found.c:726
@@ -1273,19 +1257,18 @@ msgstr ""
 #. TRANSLATORS: Show the user a list of packages that provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:747
 msgid "Packages providing this file are:"
-msgstr ""
+msgstr "Balíky poskytující tento soubor jsou:"
 
 #. TRANSLATORS: Show the user a list of packages that they can install to provide this command
 #: ../contrib/command-not-found/pk-command-not-found.c:756
 msgid "Suitable packages are:"
-msgstr ""
+msgstr "Možné balíky jsou:"
 
 #. get selection
 #. TRANSLATORS: ask the user to choose a file to install
 #: ../contrib/command-not-found/pk-command-not-found.c:764
-#, fuzzy
 msgid "Please choose a package to install"
-msgstr "Nemohu najít balík, který se má instalovat"
+msgstr "Prosím vyberte balíček k instalaci"
 
 #. TRANSLATORS: we are starting to install the packages
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:187
@@ -1327,9 +1310,9 @@ msgstr "Vyberte balík nebo soubor, která se bude instalovat"
 
 #. TRANSLATORS: we are getting the list of repositories
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:622
-#, fuzzy, c-format
+#, c-format
 msgid "Getting sources list"
-msgstr "Zjišťuji informace o balících..."
+msgstr "Získávám seznam zdrojů"
 
 #. TRANSLATORS: all completed 100%
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:640
@@ -1347,7 +1330,7 @@ msgstr "OK."
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:643
 #, c-format
 msgid "Found %i enabled and %i disabled sources."
-msgstr ""
+msgstr "Nalezeno %i povolených a %i zakázaných zdrojů."
 
 #. TRANSLATORS: we're finding repositories that match out pattern
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:650
@@ -1432,9 +1415,9 @@ msgstr "Nalezeno %i extra balíčků."
 
 #. TRANSLATORS: tell the user we found some more packages
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:851
-#, fuzzy, c-format
+#, c-format
 msgid "No extra packages required."
-msgstr "Nemohu zjistit, které balíky jsou vyžadovány"
+msgstr "Nejsou potřeba žádné extra balíčky."
 
 #. TRANSLATORS: tell the user we found some packages (and deps), and then list them
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:860
@@ -1517,7 +1500,7 @@ msgstr "Adresář nenalezen"
 #. 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 "Určena nesprávná cesta zařízení"
 
 #. command line argument, simulate what would be done, but don't actually do it
 #: ../contrib/device-rebind/pk-device-rebind.c:296
@@ -1549,7 +1532,7 @@ msgstr "Tento skript může být použit pouze uživatelem root"
 #. TRANSLATORS: we're going to verify the path first
 #: ../contrib/device-rebind/pk-device-rebind.c:341
 msgid "Verifying device path"
-msgstr ""
+msgstr "Ověřuji cestu zařízení"
 
 #. TRANSLATORS: user did not specify a device sysfs path that exists
 #: ../contrib/device-rebind/pk-device-rebind.c:346
@@ -1689,7 +1672,7 @@ msgstr "Nainstalovat místní nedůvěryhodný soubor"
 #.
 #: ../policy/org.freedesktop.packagekit.policy.in.h:50
 msgid "Refresh system sources"
-msgstr ""
+msgstr "Obnovit systémové zdroje"
 
 #. SECURITY:
 #. - Normal users require admin authentication to rebind a driver
@@ -1852,9 +1835,8 @@ msgstr "Škodlivý software může poškodit váš počítač nebo způsobit jin
 
 #. TRANSLATORS: too many packages to list each one
 #: ../src/pk-polkit-action-lookup.c:274
-#, fuzzy
 msgid "Many packages"
-msgstr "Aktualizovat balík"
+msgstr "Mnoho balíčků"
 
 #. TRANSLATORS: if the transaction is forced to install only trusted packages
 #: ../src/pk-polkit-action-lookup.c:334
commit ac344052bb0cbdfe7898815a2b88a5223784afdd
Author: shanky <shanky at fedoraproject.org>
Date:   Tue Sep 8 07:25:23 2009 +0000

    Sending translation for Kannada

diff --git a/po/kn.po b/po/kn.po
index 7acc3e6..fd40bc1 100644
--- a/po/kn.po
+++ b/po/kn.po
@@ -1,14 +1,14 @@
-# translation of packagekit.master.PackageKit.po to Kannada
+# translation of packagekit.master.kn.po to Kannada
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 #
 # Shankar Prasad <svenkate at redhat.com>, 2009.
 msgid ""
 msgstr ""
-"Project-Id-Version: packagekit.master.PackageKit\n"
+"Project-Id-Version: packagekit.master.kn\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-07 19:02+0000\n"
-"PO-Revision-Date: 2009-09-08 00:46+0530\n"
+"POT-Creation-Date: 2009-09-08 04:30+0000\n"
+"PO-Revision-Date: 2009-09-08 12:53+0530\n"
 "Last-Translator: Shankar Prasad <svenkate at redhat.com>\n"
 "Language-Team: Kannada <en at li.org>\n"
 "MIME-Version: 1.0\n"
@@ -290,8 +290,8 @@ msgid ""
 "Please restart the computer to complete the update as important security "
 "updates have been installed."
 msgstr ""
-"ಪ್ರಮುಖವಾದ ಸುರಕ್ಷತಾ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಅನುಸ್ಥಾಪಿಸಲಾಗಿರುವುದರಿಂದ ಅಪ್‌ಡೇಟ್ ಅನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ದಯವಿಟ್ಟು "
-"ಗಣಕವನ್ನು ಮರಳಿ ಆರಂಭಿಸಿ."
+"ಪ್ರಮುಖವಾದ ಸುರಕ್ಷತಾ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಅನುಸ್ಥಾಪಿಸಲಾಗಿರುವುದರಿಂದ ಅಪ್‌ಡೇಟ್ ಅನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು "
+"ದಯವಿಟ್ಟು ಗಣಕವನ್ನು ಮರಳಿ ಆರಂಭಿಸಿ."
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
 #: ../client/pk-console.c:677 ../client/pk-console-test.c:550
@@ -617,25 +617,25 @@ msgid "This tool could not connect to system DBUS."
 msgstr "ವ್ಯವಸ್ಥೆಯ DBUS ನೊಂದಿಗೆ ಸಂಪರ್ಕಸಾಧಿಸಲುಈ ಉಪಕರಣದಿಂದ ಸಾಧ್ಯವಾಗಿಲ್ಲ."
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:2152 ../client/pk-console-test.c:1053
+#: ../client/pk-console.c:2152 ../client/pk-console-test.c:1055
 msgid "The filter specified was invalid"
 msgstr "ಸೂಚಿಸಲಾದ ಫಿಲ್ಟರ್ ಅಮಾನ್ಯವಾಗಿದೆ"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:2171 ../client/pk-console-test.c:1072
+#: ../client/pk-console.c:2171 ../client/pk-console-test.c:1074
 msgid "A search type is required, e.g. name"
 msgstr "ಒಂದು ಹುಡುಕು ಬಗೆಯ ಅಗತ್ಯವಿದೆ, ಉದಾ. ಹೆಸರು"
 
 #. TRANSLATORS: the user needs to provide a search term
 #: ../client/pk-console.c:2178 ../client/pk-console.c:2187
 #: ../client/pk-console.c:2196 ../client/pk-console.c:2205
-#: ../client/pk-console-test.c:1079 ../client/pk-console-test.c:1091
-#: ../client/pk-console-test.c:1103 ../client/pk-console-test.c:1115
+#: ../client/pk-console-test.c:1081 ../client/pk-console-test.c:1093
+#: ../client/pk-console-test.c:1105 ../client/pk-console-test.c:1117
 msgid "A search term is required"
 msgstr "ಒಂದು ಹುಡುಕು ಪದದ ಅಗತ್ಯವಿದೆ"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:2212 ../client/pk-console-test.c:1125
+#: ../client/pk-console.c:2212 ../client/pk-console-test.c:1127
 msgid "Invalid search type"
 msgstr "ಅಮಾನ್ಯವಾದ ಹುಡುಕು ಬಗೆ"
 
@@ -645,58 +645,58 @@ 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:2227 ../client/pk-console-test.c:1152
+#: ../client/pk-console.c:2227 ../client/pk-console-test.c:1154
 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:2236 ../client/pk-console-test.c:1163
+#: ../client/pk-console.c:2236 ../client/pk-console-test.c:1165
 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:2244 ../client/pk-console-test.c:1172
+#: ../client/pk-console.c:2244 ../client/pk-console-test.c:1174
 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:2251 ../client/pk-console-test.c:1179
+#: ../client/pk-console.c:2251 ../client/pk-console-test.c:1181
 msgid "Directory not found"
 msgstr "ಕೋಶವು ಕಂಡುಬಂದಿಲ್ಲ"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2259 ../client/pk-console-test.c:1188
+#: ../client/pk-console.c:2259 ../client/pk-console-test.c:1190
 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:2269 ../client/pk-console-test.c:1199
+#: ../client/pk-console.c:2269 ../client/pk-console-test.c:1201
 msgid "A transaction identifier (tid) is required"
 msgstr "ವ್ಯವಹಾರ ಪತ್ತೆಗಾರನ (tid) ಅಗತ್ಯವಿದೆ"
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:2286 ../client/pk-console-test.c:1220
+#: ../client/pk-console.c:2286 ../client/pk-console-test.c:1222
 msgid "A package name to resolve is required"
 msgstr "ಪರಿಹರಿಸಬೇಕಿರುವ ಪ್ಯಾಕೇಜಿನ ಹೆಸರಿನ ಅಗತ್ಯವಿದೆ"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
 #: ../client/pk-console.c:2295 ../client/pk-console.c:2304
-#: ../client/pk-console-test.c:1231 ../client/pk-console-test.c:1242
+#: ../client/pk-console-test.c:1233 ../client/pk-console-test.c:1244
 msgid "A repository name is required"
 msgstr "ಒಂದು ರೆಪೋಸಿಟರಿ ಹೆಸರಿನ ಅಗತ್ಯವಿದೆ"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:2313 ../client/pk-console-test.c:1253
+#: ../client/pk-console.c:2313 ../client/pk-console-test.c:1255
 msgid "A repo name, parameter and value are required"
 msgstr "ಒಂದು ರೆಪೊ ಹೆಸರು, ನಿಯತಾಂಕ ಹಾಗು ಮೌಲ್ಯದ ಅಗತ್ಯವಿದೆ"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:2327 ../client/pk-console-test.c:1270
+#: ../client/pk-console.c:2327 ../client/pk-console-test.c:1272
 msgid "An action, e.g. 'update-system' is required"
 msgstr "ಒಂದು ಕ್ರಿಯೆಯ, ಉದಾ. 'update-system' ಅಗತ್ಯವಿದೆ"
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:2334 ../client/pk-console-test.c:1277
+#: ../client/pk-console.c:2334 ../client/pk-console-test.c:1279
 msgid "A correct role is required"
 msgstr "ಸೂಕ್ತವಾದ ಪಾತ್ರದ ಅಗತ್ಯವಿದೆ"
 
@@ -709,15 +709,15 @@ msgstr "ಈ ಕಾರ್ಯವನ್ನು ಕೊನೆಯ ಬಾರಿಗೆ à²
 #. TRANSLATORS: This is when the user fails to supply the package name
 #: ../client/pk-console.c:2351 ../client/pk-console.c:2363
 #: ../client/pk-console.c:2372 ../client/pk-console.c:2390
-#: ../client/pk-console.c:2399 ../client/pk-console-test.c:1287
-#: ../client/pk-console-test.c:1302 ../client/pk-console-test.c:1311
-#: ../client/pk-console-test.c:1331 ../client/pk-console-test.c:1340
+#: ../client/pk-console.c:2399 ../client/pk-console-test.c:1289
+#: ../client/pk-console-test.c:1304 ../client/pk-console-test.c:1313
+#: ../client/pk-console-test.c:1333 ../client/pk-console-test.c:1342
 #: ../client/pk-generate-pack.c:241 ../client/pk-generate-pack-test.c:288
 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:2381 ../client/pk-console-test.c:1320
+#: ../client/pk-console.c:2381 ../client/pk-console-test.c:1322
 msgid "A package provide string is required"
 msgstr "ಪ್ಯಾಕೇಜನ್ನು ಒದಗಿಸುವ ವಾಕ್ಯದ ಅಗತ್ಯವಿದೆ"
 
@@ -732,7 +732,7 @@ 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:2482 ../client/pk-console-test.c:1400
+#: ../client/pk-console.c:2482 ../client/pk-console-test.c:1402
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "ಆಯ್ಕೆ '%s' ಯು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"
@@ -746,22 +746,22 @@ msgstr "ಈ ಕಾರ್ಯಕ್ಕಾಗಿನ ಸರಿಯಲ್ಲದ ಸವ
 #. /* 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
-#: ../client/pk-console.c:2498 ../client/pk-console-test.c:1412
+#: ../client/pk-console.c:2498 ../client/pk-console-test.c:1414
 msgid "Command failed"
 msgstr "ಆಜ್ಞೆಯು ವಿಫಲಗೊಂಡಿದೆ"
 
-#: ../client/pk-console-shared.c:52 ../client/pk-tools-common.c:51
+#: ../client/pk-console-shared.c:53 ../client/pk-tools-common.c:51
 #, c-format
 msgid "Please enter a number from 1 to %i: "
 msgstr "1 ರಿಂದ %i ಒಳಗಿನ ಒಂದು ಅಂಕೆಯನ್ನು ನಮೂದಿಸಿ: "
 
 #. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../client/pk-console-shared.c:213 ../client/pk-tools-common.c:200
+#: ../client/pk-console-shared.c:153 ../client/pk-tools-common.c:200
 msgid "More than one package matches:"
 msgstr "ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ಪ್ಯಾಕೇಜುಗಳು ತಾಳೆಯಾಗುತ್ತವೆ:"
 
 #. TRANSLATORS: This finds out which package in the list to use
-#: ../client/pk-console-shared.c:222 ../client/pk-tools-common.c:207
+#: ../client/pk-console-shared.c:162 ../client/pk-tools-common.c:207
 msgid "Please choose the correct package: "
 msgstr "ದಯವಿಟ್ಟು ಸರಿಯಾದ ಪ್ಯಾಕೇಜನ್ನು ಆಯ್ಕೆ ಮಾಡಿ: "
 
@@ -794,13 +794,18 @@ msgstr "ಈ ಉಪಕರಣದಿಂದ ಪ್ಯಾಕೇಜನ್ನು ಪತ
 msgid "This tool could not find all the packages: %s"
 msgstr "ಈ ಉಪಕರಣದಿಂದ ಎಲ್ಲಾ ಪ್ಯಾಕೇಜುಗಳನ್ನು ಪತ್ತೆ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: %s"
 
+#. TRANSLATORS: we failed to contact the daemon
+#: ../client/pk-console-test.c:1003
+msgid "Failed to contact PackageKit"
+msgstr "PackageKit ಅನ್ನು ಸಂಪರ್ಕಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ"
+
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1131
+#: ../client/pk-console-test.c:1133
 msgid "A package name to install is required"
 msgstr "ಅನುಸ್ಥಾಪಿಸಲು ಒಂದು ಪ್ಯಾಕೇಜಿನ ಹೆಸರಿನ ಅಗತ್ಯವಿದೆ"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1140
+#: ../client/pk-console-test.c:1142
 msgid "A filename to install is required"
 msgstr "ಅನುಸ್ಥಾಪಿಸಲು ಒಂದು ಕಡತದ ಹೆಸರಿನ ಅಗತ್ಯವಿದೆ"
 
@@ -868,7 +873,9 @@ msgstr "ಪ್ಯಾಕೇಜ್ ವ್ಯವಸ್ಥಾಪಕ ಈ ಬಗೆಯ
 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-test.c:348
@@ -1190,7 +1197,9 @@ msgstr "ಪ್ಯಾಕೇಜ್ %s ಅನ್ನು ಹುಡುಕಲು ವಿ
 #. command line argument, simulate what would be done, but don't actually do it
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:552
 msgid "Don't actually install any packages, only simulate what would be installed"
-msgstr "ಪ್ಯಾಕೇಜುಗಳನ್ನು ನಿಜವಾಗಿಯೂ ಅನುಸ್ಥಾಪಿಸಬೇಡ, ಏನನ್ನು ಅನುಸ್ಥಾಪಿಸಲಾಗುತ್ತದೆ ಎನ್ನುವುದನ್ನು ತೋರಿಸು"
+msgstr ""
+"ಪ್ಯಾಕೇಜುಗಳನ್ನು ನಿಜವಾಗಿಯೂ ಅನುಸ್ಥಾಪಿಸಬೇಡ, ಏನನ್ನು ಅನುಸ್ಥಾಪಿಸಲಾಗುತ್ತದೆ ಎನ್ನುವುದನ್ನು "
+"ತೋರಿಸು"
 
 #. command line argument, do we skip packages that depend on the ones specified
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:555
@@ -1710,7 +1719,9 @@ 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."
@@ -1718,7 +1729,9 @@ 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
commit 760d82df2869762e7274913fb816d84c778d428a
Author: mvdz <mvdz at fedoraproject.org>
Date:   Tue Sep 8 04:30:32 2009 +0000

    Sending translation for Ukrainian

diff --git a/po/uk.po b/po/uk.po
index f5749f5..7b6a45b 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -7,153 +7,165 @@ msgid ""
 msgstr ""
 "Project-Id-Version: packagekit.master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-08-25 14:38+0000\n"
-"PO-Revision-Date: 2009-08-26 18:00+0300\n"
+"POT-Creation-Date: 2009-09-05 08:29+0000\n"
+"PO-Revision-Date: 2009-09-05 16:46+0300\n"
 "Last-Translator: Yuri Chornoivan <yurchor at ukr.net>\n"
 "Language-Team: Ukrainian <translation at linux.org.ua>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms:  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms:  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 "X-Generator: Lokalize 0.3\n"
 
 #. TRANSLATORS: this is an atomic transaction
-#: ../client/pk-console.c:235
+#: ../client/pk-console.c:238 ../client/pk-console-test.c:147
 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 ../client/pk-console-test.c:149
 msgid "System time"
 msgstr "Системний час"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:239
+#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
 msgid "Succeeded"
 msgstr "Успішне"
 
-#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:239 ../client/pk-console.c:465
+#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
 msgid "True"
 msgstr "Так"
 
-#: ../client/pk-console.c:239 ../client/pk-console.c:465
+#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
 msgid "False"
 msgstr "Ні"
 
 #. 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 ../client/pk-console-test.c:153
+#: ../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 ../client/pk-console-test.c:158
 msgid "Duration"
 msgstr "Тривалість"
 
-#: ../client/pk-console.c:246
+#: ../client/pk-console.c:249 ../client/pk-console-test.c:158
 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 ../client/pk-console-test.c:162
+#: ../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 ../client/pk-console-test.c:164
 msgid "User ID"
 msgstr "ІД користувача"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:259
+#: ../client/pk-console.c:262 ../client/pk-console-test.c:171
 msgid "Username"
 msgstr "Користувач"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:263
+#: ../client/pk-console.c:266 ../client/pk-console-test.c:175
 msgid "Real name"
 msgstr "Справжнє ім’я"
 
-#: ../client/pk-console.c:271
+#: ../client/pk-console.c:274 ../client/pk-console-test.c:183
 msgid "Affected packages:"
 msgstr "Задіяні пакунки:"
 
-#: ../client/pk-console.c:273
+#: ../client/pk-console.c:276 ../client/pk-console-test.c:185
 msgid "Affected packages: None"
 msgstr "Задіяні пакунки: Немає"
 
 #. TRANSLATORS: When processing, we might have to remove other dependencies
-#: ../client/pk-console.c:334
+#: ../client/pk-console.c:337 ../client/pk-task-text.c:220
 msgid "The following packages have to be removed:"
 msgstr "Наведені нижче пакунки буде вилучено:"
 
 #. TRANSLATORS: When processing, we might have to install other dependencies
-#: ../client/pk-console.c:337
+#: ../client/pk-console.c:340 ../client/pk-task-text.c:225
 msgid "The following packages have to be installed:"
 msgstr "Слід встановити такі пакунки:"
 
 #. TRANSLATORS: When processing, we might have to update other dependencies
-#: ../client/pk-console.c:340
+#: ../client/pk-console.c:343 ../client/pk-task-text.c:230
 msgid "The following packages have to be updated:"
 msgstr "Слід оновити такі пакунки:"
 
 #. TRANSLATORS: When processing, we might have to reinstall other dependencies
-#: ../client/pk-console.c:343
+#: ../client/pk-console.c:346 ../client/pk-task-text.c:235
 msgid "The following packages have to be reinstalled:"
 msgstr "Слід перевстановити такі пакунки:"
 
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../client/pk-console.c:349 ../client/pk-task-text.c:240
+msgid "The following packages have to be downgraded:"
+msgstr "Слід встановити старіші версії таких пакунків:"
+
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:357
+#: ../client/pk-console.c:363 ../client/pk-console-test.c:205
 msgid "Distribution"
 msgstr "Дистрибутив"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:359
+#: ../client/pk-console.c:365 ../client/pk-console-test.c:207
 msgid "Type"
 msgstr "Тип"
 
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:361 ../client/pk-console.c:384
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:367 ../client/pk-console.c:390
+#: ../client/pk-console-test.c:209 ../client/pk-console-test.c:230
 msgid "Summary"
 msgstr "Резюме"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:373
+#: ../client/pk-console.c:379 ../client/pk-console-test.c:219
 msgid "Category"
 msgstr "Категорія"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:375
+#: ../client/pk-console.c:381 ../client/pk-console-test.c:221
 msgid "ID"
 msgstr "ІД"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:378
+#: ../client/pk-console.c:384 ../client/pk-console-test.c:224
 msgid "Parent"
 msgstr "Батьківська"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:381
+#: ../client/pk-console.c:387 ../client/pk-console-test.c:227
 msgid "Name"
 msgstr "Назва"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:387
+#: ../client/pk-console.c:393 ../client/pk-console-test.c:233
 msgid "Icon"
 msgstr "Значок"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:402
+#: ../client/pk-console.c:408 ../client/pk-console-test.c:247
 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:404 ../src/pk-polkit-action-lookup.c:352
+#: ../client/pk-console.c:410 ../client/pk-console-test.c:253
+#: ../client/pk-task-text.c:101 ../client/pk-task-text.c:153
+#: ../src/pk-polkit-action-lookup.c:352
 msgid "Package"
 msgid_plural "Packages"
 msgstr[0] "Пакунок"
@@ -161,649 +173,756 @@ msgstr[1] "Пакунки"
 msgstr[2] "Пакунки"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:407
+#: ../client/pk-console.c:413 ../client/pk-console-test.c:256
 msgid "Updates"
 msgstr "Оновлює"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:411
+#: ../client/pk-console.c:417 ../client/pk-console-test.c:260
 msgid "Obsoletes"
 msgstr "Робить застарілим"
 
 #. TRANSLATORS: details about the update, the vendor URLs
-#: ../client/pk-console.c:415
+#: ../client/pk-console.c:421 ../client/pk-console-test.c:264
+#: ../client/pk-task-text.c:154
 msgid "Vendor"
 msgstr "Постачальник"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:419
+#: ../client/pk-console.c:425 ../client/pk-console-test.c:268
 msgid "Bugzilla"
 msgstr "Bugzilla"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:423
+#: ../client/pk-console.c:429 ../client/pk-console-test.c:272
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:427
+#: ../client/pk-console.c:433 ../client/pk-console-test.c:276
 msgid "Restart"
 msgstr "Перезапуск"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:431
+#: ../client/pk-console.c:437 ../client/pk-console-test.c:280
 msgid "Update text"
 msgstr "Текст оновлення"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:435
+#: ../client/pk-console.c:441 ../client/pk-console-test.c:284
 msgid "Changes"
 msgstr "Зміни"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:439
+#: ../client/pk-console.c:445 ../client/pk-console-test.c:288
 msgid "State"
 msgstr "Стан"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:444
+#: ../client/pk-console.c:450 ../client/pk-console-test.c:293
 msgid "Issued"
 msgstr "Випущено"
 
 #. TRANSLATORS: details about the update, date the update was updated
-#: ../client/pk-console.c:449
+#: ../client/pk-console.c:455 ../client/pk-console-test.c:298
 msgid "Updated"
 msgstr "Оновлено"
 
-#: ../client/pk-console.c:536 ../client/pk-console.c:538
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:475 ../client/pk-console-test.c:316
+msgid "Enabled"
+msgstr "Увімкнено"
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:478 ../client/pk-console-test.c:319
+msgid "Disabled"
+msgstr "Вимкнено"
+
+#: ../client/pk-console.c:555 ../client/pk-console.c:557
 msgid "Percentage"
 msgstr "Відсотки"
 
-#: ../client/pk-console.c:538
+#: ../client/pk-console.c:557
 msgid "Unknown"
 msgstr "Невідомо"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:580
+#: ../client/pk-console.c:599 ../client/pk-console-test.c:341
 msgid "System restart required by:"
 msgstr "Перезавантаження системи потрібне для:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:583
+#: ../client/pk-console.c:602 ../client/pk-console-test.c:344
 msgid "Session restart required:"
 msgstr "Перезапуск сеансу потрібен:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:586
+#: ../client/pk-console.c:605 ../client/pk-console-test.c:347
 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:589
+#: ../client/pk-console.c:608 ../client/pk-console-test.c:350
 msgid "Session restart (security) required:"
 msgstr "Потрібен перезапуск сеансу (безпека):"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:592
+#: ../client/pk-console.c:611 ../client/pk-console-test.c:353
 msgid "Application restart required by:"
 msgstr "Потрібен перезапуск програми для:"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:647
+#: ../client/pk-console.c:666 ../client/pk-console-test.c:704
 msgid "Please restart the computer to complete the update."
 msgstr "Щоб завершити оновлення, перезавантажте систему."
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:650
+#: ../client/pk-console.c:669 ../client/pk-console-test.c:707
 msgid "Please logout and login to complete the update."
 msgstr "Щоб завершити оновлення, вийдіть з облікового запису і увійдіть знову."
 
 #. TRANSLATORS: a package needs to restart the application
-#: ../client/pk-console.c:653
+#: ../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:656
+#: ../client/pk-console.c:675 ../client/pk-console-test.c:710
 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:659
+#: ../client/pk-console.c:678 ../client/pk-console-test.c:713
 msgid ""
 "Please logout and login to complete the update as important security updates "
 "have been installed."
 msgstr ""
-"Щоб завершити встановлення важливих оновлень "
-"безпеки вийдіть з облікового запису і увійдіть до нього знову."
+"Щоб завершити встановлення важливих оновлень безпеки вийдіть з облікового "
+"запису і увійдіть до нього знову."
 
 #. TRANSLATORS: The package is already installed on the system
-#: ../client/pk-console.c:791, c-format
+#: ../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:799, c-format
+#: ../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:825 ../client/pk-console.c:873
-#: ../client/pk-console.c:897 ../client/pk-console.c:945
-#: ../client/pk-console.c:1041 ../client/pk-console.c:1154
-#: ../client/pk-console.c:1215 ../client/pk-tools-common.c:62
-#: ../client/pk-tools-common.c:81 ../client/pk-tools-common.c:89, c-format
+#: ../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:857 ../client/pk-console.c:929
-#: ../client/pk-console.c:1247
+#. ask the user
+#: ../client/pk-console.c:876 ../client/pk-console.c:948
+#: ../client/pk-console.c:1266 ../client/pk-task-text.c:299
 msgid "Proceed with changes?"
 msgstr "Внести зміни:"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:862 ../client/pk-console.c:934
+#: ../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:881 ../client/pk-console.c:1615, c-format
+#: ../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:953, c-format
+#: ../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:1009, c-format
+#: ../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:1032 ../client/pk-console.c:1070
-#: ../client/pk-console.c:1099, c-format
+#: ../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: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:1085
+#: ../client/pk-console.c:1104
 msgid "Proceed with additional packages?"
 msgstr "Вилучити додаткові пакунки?"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:1090
+#: ../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:1131, c-format
+#: ../client/pk-console.c:1150
+#, c-format
 msgid "This tool could not download the package %s as it could not be found"
-msgstr "Програмі не вдалося звантажити пакунок %s, оскільки відповідний пакунок не було знайдено"
+msgstr ""
+"Програмі не вдалося звантажити пакунок %s, оскільки відповідний пакунок не "
+"було знайдено"
 
 #. TRANSLATORS: Could not download the packages for some reason. The detailed error follows
-#: ../client/pk-console.c:1162, c-format
+#: ../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:1194 ../client/pk-console.c:1206
-#: ../client/pk-console.c:1261, c-format
+#: ../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:1252
+#: ../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:1285 ../client/pk-console.c:1293, c-format
+#: ../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:1315 ../client/pk-console.c:1323, c-format
+#: ../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:1345 ../client/pk-console.c:1353, c-format
+#: ../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:1375, c-format
+#: ../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:1383, c-format
+#: ../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:1405, c-format
+#: ../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:1410 ../client/pk-console.c:1466
-#: ../client/pk-console.c:1541
+#: ../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:1416 ../client/pk-console.c:1472
-#: ../client/pk-console.c:1547, c-format
+#: ../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:1427, c-format
+#: ../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:1461 ../client/pk-console.c:1536, c-format
+#: ../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:1493
+#: ../client/pk-console.c:1512
 msgid "Packages to add"
 msgstr "Пакунки, які буде додано"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1501
+#: ../client/pk-console.c:1520
 msgid "Packages to remove"
 msgstr "Пакунки, які буде вилучено"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1569, c-format
+#: ../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:1575
+#: ../client/pk-console.c:1594
 msgid "To install"
 msgstr "Пакунки, які буде встановлено"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1587
+#: ../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:1591
+#: ../client/pk-console.c:1610
 msgid "not found."
 msgstr "не знайдено."
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1602, c-format
+#: ../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:1608
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:886, c-format
+#: ../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:1644, c-format
+#: ../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:1652, c-format
+#: ../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:1683
+#: ../client/pk-console.c:1702
 msgid "Error:"
 msgstr "Помилка:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1697
+#: ../client/pk-console.c:1716 ../client/pk-console-test.c:370
 msgid "Package description"
 msgstr "Опис пакунка"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:1713
+#: ../client/pk-console.c:1732 ../client/pk-console-test.c:388
 msgid "Message:"
 msgstr "Повідомлення:"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1741
+#: ../client/pk-console.c:1760 ../client/pk-console-test.c:407
 msgid "Package files"
 msgstr "Файли пакунка"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1749
+#: ../client/pk-console.c:1768 ../client/pk-console-test.c:402
 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:1772
+#: ../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:1782
+#. ask the user
+#: ../client/pk-console.c:1801 ../client/pk-task-text.c:113
 msgid "Do you accept this signature?"
 msgstr "Чи підтверджуєте ви цей підпис?"
 
 #. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1786
+#: ../client/pk-console.c:1805 ../client/pk-task-text.c:117
 msgid "The signature was not accepted."
 msgstr "Підпис не було підтверджено."
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1820
+#: ../client/pk-console.c:1839
 msgid "End user license agreement required"
-msgstr "Потрібне підтвердження ліцензійної угоди з кінцевим користувачем (EULA)"
+msgstr ""
+"Потрібне підтвердження ліцензійної угоди з кінцевим користувачем (EULA)"
 
 #. TRANSLATORS: This a prompt asking the user to agree to the license
-#: ../client/pk-console.c:1827
+#: ../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:1831
+#: ../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:1860
+#: ../client/pk-console.c:1879 ../client/pk-console-test.c:972
 msgid "The daemon crashed mid-transaction!"
 msgstr "Аварійне завершення фонової служби під час операції!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1913
+#: ../client/pk-console.c:1932 ../client/pk-console-test.c:1006
 msgid "PackageKit Console Interface"
 msgstr "Консольний інтерфейс PackageKit"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1915
+#: ../client/pk-console.c:1934 ../client/pk-console-test.c:1008
 msgid "Subcommands:"
 msgstr "Підкоманди:"
 
 #. TRANSLATORS: command line argument, if we should show debugging information
 #. TRANSLATORS: if we should show debugging data
-#: ../client/pk-console.c:2008 ../client/pk-generate-pack.c:185
-#: ../client/pk-monitor.c:128
+#: ../client/pk-console.c:2027 ../client/pk-console-test.c:1099
+#: ../client/pk-generate-pack.c:187 ../client/pk-monitor.c:128
+#: ../client/pk-monitor-test.c:282
 #: ../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:2011 ../client/pk-monitor.c:130
+#: ../client/pk-console.c:2030 ../client/pk-console-test.c:1102
+#: ../client/pk-monitor.c:130 ../client/pk-monitor-test.c:284
 msgid "Show the program version and exit"
 msgstr "Показати версію програми і завершити роботу"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:2014
+#: ../client/pk-console.c:2033 ../client/pk-console-test.c:1105
 msgid "Set the filter, e.g. installed"
 msgstr "Встановити фільтр, наприклад, встановлені"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:2017
+#: ../client/pk-console.c:2036 ../client/pk-console-test.c:1108
 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:2044
+#: ../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:2134
+#: ../client/pk-console.c:2153 ../client/pk-console-test.c:1183
 msgid "The filter specified was invalid"
 msgstr "Вказано некоректний фільтр"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:2153
+#: ../client/pk-console.c:2172 ../client/pk-console-test.c:1202
 msgid "A search type is required, e.g. name"
 msgstr "Тип пошуку, якщо такий потрібен, наприклад, назва"
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:2160 ../client/pk-console.c:2169
-#: ../client/pk-console.c:2178 ../client/pk-console.c:2187
+#: ../client/pk-console.c:2179 ../client/pk-console.c:2188
+#: ../client/pk-console.c:2197 ../client/pk-console.c:2206
+#: ../client/pk-console-test.c:1209 ../client/pk-console-test.c:1221
+#: ../client/pk-console-test.c:1233 ../client/pk-console-test.c:1245
 msgid "A search term is required"
 msgstr "Потрібен ключ пошуку"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:2194
+#: ../client/pk-console.c:2213 ../client/pk-console-test.c:1255
 msgid "Invalid search type"
 msgstr "Некоректний тип пошуку"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:2200
+#: ../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:2209
+#: ../client/pk-console.c:2228 ../client/pk-console-test.c:1282
 msgid "A type, key_id and package_id are required"
 msgstr "Слід вказати тип, ідентифікатор ключа і ідентифікатор пакунка"
 
 #. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:2218
+#: ../client/pk-console.c:2237 ../client/pk-console-test.c:1293
 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:2226
+#: ../client/pk-console.c:2245 ../client/pk-console-test.c:1302
 msgid "A destination directory and the package names to download are required"
-msgstr "Слід вказати каталог призначення і назви пакунків, які потрібно звантажити"
+msgstr ""
+"Слід вказати каталог призначення і назви пакунків, які потрібно звантажити"
 
 #. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:2233
+#: ../client/pk-console.c:2252 ../client/pk-console-test.c:1309
 msgid "Directory not found"
 msgstr "Каталог не знайдено"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2241
+#: ../client/pk-console.c:2260 ../client/pk-console-test.c:1318
 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:2251
+#: ../client/pk-console.c:2270 ../client/pk-console-test.c:1329
 msgid "A transaction identifier (tid) is required"
 msgstr "Слід вказати ідентифікатор операції (tid)"
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:2268
+#: ../client/pk-console.c:2287 ../client/pk-console-test.c:1350
 msgid "A package name to resolve is required"
 msgstr "Слід вказати назву пакунка для розв’язання конфлікту"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:2277 ../client/pk-console.c:2286
+#: ../client/pk-console.c:2296 ../client/pk-console.c:2305
+#: ../client/pk-console-test.c:1361 ../client/pk-console-test.c:1372
 msgid "A repository name is required"
 msgstr "Слід вказати назву сховища"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:2295
+#: ../client/pk-console.c:2314 ../client/pk-console-test.c:1383
 msgid "A repo name, parameter and value are required"
 msgstr "Слід вказати назву сховища, параметр і значення"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:2309
+#: ../client/pk-console.c:2328 ../client/pk-console-test.c:1401
 msgid "An action, e.g. 'update-system' is required"
 msgstr "Слід вказати дію, наприклад «update-system»"
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:2316
+#: ../client/pk-console.c:2335 ../client/pk-console-test.c:1408
 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:2323
+#: ../client/pk-console.c:2342 ../client/pk-console-test.c:1415
 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:2333 ../client/pk-console.c:2345
-#: ../client/pk-console.c:2354 ../client/pk-console.c:2372
-#: ../client/pk-console.c:2381 ../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-console-test.c:1425
+#: ../client/pk-console-test.c:1440 ../client/pk-console-test.c:1449
+#: ../client/pk-console-test.c:1469 ../client/pk-console-test.c:1478
+#: ../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:2363
+#: ../client/pk-console.c:2382 ../client/pk-console-test.c:1458
 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:2390
+#: ../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:2400 ../client/pk-console.c:2410
+#: ../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:2464, c-format
+#: ../client/pk-console.c:2483 ../client/pk-console-test.c:1538
+#, c-format
 msgid "Option '%s' is not supported"
 msgstr "Підтримки параметра «%s» не передбачено"
 
 #. TRANSLATORS: User does not have permission to do this
-#: ../client/pk-console.c:2477
+#: ../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:2480
+#. /* 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
+#: ../client/pk-console.c:2499 ../client/pk-console-test.c:1550
 msgid "Command failed"
 msgstr "Спроба виконання команди зазнала невдачі"
 
+#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
+#: ../client/pk-console-test.c:523 ../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-console-test.c:532 ../client/pk-tools-common.c:138
+msgid "Please choose the correct package: "
+msgstr "Будь ласка, оберіть належний пакунок:"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console-test.c:734, c-format
+msgid "This tool could not find the available package: %s"
+msgstr "Програмі не вдалося знайти доступний пакунок: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console-test.c:762, c-format
+msgid "This tool could not find the installed package: %s"
+msgstr "Програмі не вдалося знайти встановлений пакунок: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console-test.c:790 ../client/pk-console-test.c:818, c-format
+msgid "This tool could not find the package: %s"
+msgstr "Програмі не вдалося знайти пакунок: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
+#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
+#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
+#: ../client/pk-console-test.c:846 ../client/pk-console-test.c:872
+#: ../client/pk-console-test.c:898 ../client/pk-console-test.c:924
+#: ../client/pk-console-test.c:950, c-format
+msgid "This tool could not find all the packages: %s"
+msgstr "Програмі не вдалося знайти всі пакунки: %s"
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console-test.c:1261
+msgid "A package name to install is required"
+msgstr "Слід вказати назву пакунка, який слід встановити"
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console-test.c:1270
+msgid "A filename to install is required"
+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)"
-msgstr "Файл або каталог виведення даних (якщо пропустити, буде використано поточний каталог)"
+#: ../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, c-format
+#: ../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, c-format
+#: ../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, c-format
+#: ../client/pk-generate-pack.c:379
+#, c-format
 msgid "Failed to create '%s': %s"
 msgstr "Не вдалося створити «%s»: %s"
 
 #. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:146
+#: ../client/pk-monitor.c:146 ../client/pk-monitor-test.c:299
 msgid "PackageKit Monitor"
 msgstr "Монітор PackageKit"
 
@@ -811,32 +930,121 @@ msgstr "Монітор PackageKit"
 msgid "Cannot show the list of transactions"
 msgstr "Показ списку операції неможливий"
 
-#. TRANSLATORS: The package was not found in any software sources
-#: ../client/pk-tools-common.c:118, c-format
-msgid "The package could not be found"
-msgstr "Не вдалося знайти пакунок"
+#: ../client/pk-monitor-test.c:204
+msgid "Failed to get transaction list"
+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
-msgid "More than one package matches:"
-msgstr "З ключем пошуку збігається декілька пакунків:"
+#: ../client/pk-monitor-test.c:235
+msgid "Failed to get daemon state"
+msgstr "Спроба визначення стану фонової служби завершилася невдало"
 
-#. TRANSLATORS: This finds out which package in the list to use
-#: ../client/pk-tools-common.c:137
-msgid "Please choose the correct package: "
-msgstr "Будь ласка, оберіть належний пакунок:"
+#. ask the user
+#: ../client/pk-task-text.c:64
+msgid "Do you want to allow installing of unsigned software?"
+msgstr "Бажаєте дозволити встановлення непідписаного програмного забезпечення?"
+
+#: ../client/pk-task-text.c:68
+msgid "The unsigned software will not be installed."
+msgstr "Непідписане програмне забезпечення встановлено не буде."
+
+#: ../client/pk-task-text.c:100
+msgid "Software source signature required"
+msgstr "Потрібен підпис джерела програмного забезпечення"
+
+#: ../client/pk-task-text.c:102
+msgid "Software source name"
+msgstr "Назва джерела програмного забезпечення"
+
+#: ../client/pk-task-text.c:103
+msgid "Key URL"
+msgstr "Адреса URL ключа"
+
+#: ../client/pk-task-text.c:104
+msgid "Key user"
+msgstr "Користувач ключа"
+
+#: ../client/pk-task-text.c:105
+msgid "Key ID"
+msgstr "Ідентифікатор ключа"
+
+#: ../client/pk-task-text.c:106
+msgid "Key fingerprint"
+msgstr "Відбиток ключа"
+
+#: ../client/pk-task-text.c:107
+msgid "Key Timestamp"
+msgstr "Часова позначка ключа"
+
+#: ../client/pk-task-text.c:151
+msgid "End user licence agreement required"
+msgstr ""
+"Потрібне підтвердження ліцензійної угоди з кінцевим користувачем (EULA)"
 
-#: ../client/pk-tools-common.c:162, c-format
+#: ../client/pk-task-text.c:152
+msgid "EULA ID"
+msgstr "Ідентифікатор EULA"
+
+#: ../client/pk-task-text.c:155
+msgid "Agreement"
+msgstr "Угода"
+
+#. ask the user
+#: ../client/pk-task-text.c:161
+msgid "Do you accept this agreement?"
+msgstr "Чи згодвні ви дотримуватися цієї угоди?"
+
+#: ../client/pk-task-text.c:165
+msgid "The agreement was not accepted."
+msgstr "Угоду не було підтверджено."
+
+#: ../client/pk-task-text.c:194
+msgid "Media change required"
+msgstr "Потрібна зміна носія"
+
+#: ../client/pk-task-text.c:195
+msgid "Media type"
+msgstr "Тип носія"
+
+#: ../client/pk-task-text.c:196
+msgid "Media ID"
+msgstr "Ідентифікатор носія"
+
+#: ../client/pk-task-text.c:197
+msgid "Text"
+msgstr "Текст"
+
+#. ask the user
+#: ../client/pk-task-text.c:201
+msgid "Please insert the correct media"
+msgstr "Будь ласка, вставте відповідний носій"
+
+#: ../client/pk-task-text.c:205
+msgid "The correct media was not inserted."
+msgstr "Не було вставлено відповідного носія."
+
+#: ../client/pk-task-text.c:303
+msgid "The transaction did not proceed."
+msgstr "Операцію не було продовжено."
+
+#: ../client/pk-text.c:50
+#, c-format
 msgid "Please enter a number from 1 to %i: "
 msgstr "Будь ласка, введіть число від 1 до %i: "
 
+#. TRANSLATORS: The package was not found in any software sources
+#: ../client/pk-tools-common.c:119
+#, c-format
+msgid "The package could not be found"
+msgstr "Не вдалося знайти пакунок"
+
 #. TRANSLATORS: when we are getting data from the daemon
 #: ../contrib/browser-plugin/pk-plugin-install.c:466
 msgid "Getting package information..."
 msgstr "Отримання даних щодо пакунка..."
 
 #. TRANSLATORS: run an applicaiton
-#: ../contrib/browser-plugin/pk-plugin-install.c:472, c-format
+#: ../contrib/browser-plugin/pk-plugin-install.c:472
+#, c-format
 msgid "Run %s"
 msgstr "Виконати %s"
 
@@ -846,7 +1054,8 @@ msgid "Installed version"
 msgstr "Встановлена версія"
 
 #. TRANSLATORS: run the application now
-#: ../contrib/browser-plugin/pk-plugin-install.c:486, c-format
+#: ../contrib/browser-plugin/pk-plugin-install.c:486
+#, c-format
 msgid "Run version %s now"
 msgstr "Виконати версію %s"
 
@@ -856,12 +1065,14 @@ msgid "Run now"
 msgstr "Виконати зараз"
 
 #. TRANSLATORS: update to a new version of the package
-#: ../contrib/browser-plugin/pk-plugin-install.c:498, c-format
+#: ../contrib/browser-plugin/pk-plugin-install.c:498
+#, c-format
 msgid "Update to version %s"
 msgstr "Оновити до версії %s"
 
 #. TRANSLATORS: To install a package
-#: ../contrib/browser-plugin/pk-plugin-install.c:504, c-format
+#: ../contrib/browser-plugin/pk-plugin-install.c:504
+#, c-format
 msgid "Install %s now"
 msgstr "Встановити %s"
 
@@ -888,7 +1099,8 @@ 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
@@ -948,7 +1160,8 @@ msgid "The package providing this file is:"
 msgstr "Пакунком, що містити цей файл є:"
 
 #. TRANSLATORS: as the user if we want to install a package to provide the command
-#: ../contrib/command-not-found/pk-command-not-found.c:726, c-format
+#: ../contrib/command-not-found/pk-command-not-found.c:726
+#, c-format
 msgid "Install package '%s' to provide command '%s'?"
 msgstr "Встановити пакунок «%s», щоб забезпечити виконання команди «%s»?"
 
@@ -974,167 +1187,181 @@ msgid "Starting install"
 msgstr "Розпочинаємо встановлення"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:397, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:397
+#, c-format
 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"
 
 #. TRANSLATORS: the use needs to specify a list of package names on the command line
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:589, c-format
+#: ../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, c-format
+#: ../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, c-format
+#: ../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, c-format
+#: ../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, c-format
+#: ../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, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:683
+#, c-format
 msgid "Found %i disabled debuginfo repos."
 msgstr "Знайдено %i вимкнених сховища даних для усування вад."
 
 #. TRANSLATORS: we're now enabling all the debug sources we found
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:691, c-format
+#: ../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 "НЕВДАЛО."
 
 #. TRANSLATORS: tell the user how many we enabled
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:719, c-format
+#: ../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, c-format
+#: ../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, c-format
+#: ../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, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:760
+#, c-format
 msgid "Failed to find the debuginfo package %s: %s"
 msgstr "Не вдалося знайти пакунок з даними для усування вад %s: %s"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:789, c-format
+#: ../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 джерел для усування вад."
@@ -1252,18 +1479,23 @@ 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
 msgid "Authentication is required to change software source parameters"
-msgstr "Для зміни параметрів джерел програмного забезпечення слід пройти автентифікацію"
+msgstr ""
+"Для зміни параметрів джерел програмного забезпечення слід пройти "
+"автентифікацію"
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:11
 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"
@@ -1279,7 +1511,8 @@ msgstr "Для оновлення списку джерел системи слÑ
 
 #: ../policy/org.freedesktop.packagekit.policy.in.h:15
 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"
@@ -1293,7 +1526,9 @@ 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"
@@ -1410,7 +1645,8 @@ msgstr "Оновлення пакунків"
 #. TRANSLATORS: failed due to DBus security
 #: ../src/pk-main.c:87
 msgid "Startup failed due to security policies on this machine."
-msgstr "Спроба запуску зазнала невдачі через обмеження безпеки на цьому комп’ютері."
+msgstr ""
+"Спроба запуску зазнала невдачі через обмеження безпеки на цьому комп’ютері."
 
 #. TRANSLATORS: only two ways this can fail...
 #: ../src/pk-main.c:89
@@ -1420,14 +1656,16 @@ msgstr "Таке може трапитися з двох причин:"
 #. TRANSLATORS: only allowed to be owned by root
 #: ../src/pk-main.c:91
 msgid "The correct user is not launching the executable (usually root)"
-msgstr "Виконуваний файл було запущено не тим користувачем (його мав запустити root)"
+msgstr ""
+"Виконуваний файл було запущено не тим користувачем (його мав запустити root)"
 
 #. TRANSLATORS: or we are installed in a prefix
 #: ../src/pk-main.c:93
 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
@@ -1476,7 +1714,9 @@ msgstr "Помилка під час спроби запуску:"
 
 #: ../src/pk-polkit-action-lookup.c:147
 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
@@ -1485,7 +1725,8 @@ 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."
@@ -1493,16 +1734,20 @@ 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
@@ -1514,4 +1759,3 @@ msgstr "Багато пакунків"
 msgid "Only trusted"
 msgstr "Лише надійні"
 
-
commit 83be11792e7cf1e11b7366d576cd6b65d6e4d3af
Author: aalam <aalam at fedoraproject.org>
Date:   Tue Sep 8 02:07:00 2009 +0000

    Sending translation for Punjabi

diff --git a/po/pa.po b/po/pa.po
index 4606114..ff0a6d0 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -8,10 +8,10 @@ msgid ""
 msgstr ""
 "Project-Id-Version: packagekit.master\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-07 14:32+0000\n"
-"PO-Revision-Date: 2009-09-07 22:39+0530\n"
-"Last-Translator: \n"
-"Language-Team: Punjabi/Panjabi <kde-i18n-doc at kde.org>\n"
+"POT-Creation-Date: 2009-09-07 19:33+0000\n"
+"PO-Revision-Date: 2009-09-08 07:34+0530\n"
+"Last-Translator: A S Alam <aalam at users.sf.net>\n"
+"Language-Team: Punjabi/Panjabi <punjabi-users at lists.sf.net>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -19,106 +19,106 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #. TRANSLATORS: this is an atomic transaction
-#: ../client/pk-console.c:238 ../client/pk-console-test.c:147
+#: ../client/pk-console.c:237 ../client/pk-console-test.c:146
 msgid "Transaction"
 msgstr "ਟਰਾਂਸੈਕਸ਼ਨ"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:240 ../client/pk-console-test.c:149
+#: ../client/pk-console.c:239 ../client/pk-console-test.c:148
 msgid "System time"
 msgstr "ਸਿਸਟਮ ਸਮਾਂ"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:150
 msgid "Succeeded"
 msgstr "ਸਫ਼ਲ"
 
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:150
 msgid "True"
 msgstr "ਸਹੀਂ"
 
-#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:150
 msgid "False"
 msgstr "ਗਲਤ"
 
 #. TRANSLATORS: this is the transactions role, e.g. "update-system"
 #. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:244 ../client/pk-console-test.c:153
+#: ../client/pk-console.c:243 ../client/pk-console-test.c:152
 #: ../src/pk-polkit-action-lookup.c:327
 msgid "Role"
 msgstr "ਰੋਲ"
 
 #. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:249 ../client/pk-console-test.c:158
+#: ../client/pk-console.c:248 ../client/pk-console-test.c:157
 msgid "Duration"
 msgstr "ਅੰਤਰਾਲ"
 
-#: ../client/pk-console.c:249 ../client/pk-console-test.c:158
+#: ../client/pk-console.c:248 ../client/pk-console-test.c:157
 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:253 ../client/pk-console-test.c:162
+#: ../client/pk-console.c:252 ../client/pk-console-test.c:161
 #: ../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:255 ../client/pk-console-test.c:164
+#: ../client/pk-console.c:254 ../client/pk-console-test.c:163
 msgid "User ID"
 msgstr "ਯੂਜ਼ਰ ID"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:262 ../client/pk-console-test.c:171
+#: ../client/pk-console.c:261 ../client/pk-console-test.c:170
 msgid "Username"
 msgstr "ਯੂਜ਼ਰ ਨਾਂ"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:266 ../client/pk-console-test.c:175
+#: ../client/pk-console.c:265 ../client/pk-console-test.c:174
 msgid "Real name"
 msgstr "ਅਸਲੀ ਨਾਂ"
 
-#: ../client/pk-console.c:274 ../client/pk-console-test.c:183
+#: ../client/pk-console.c:273 ../client/pk-console-test.c:182
 msgid "Affected packages:"
 msgstr "ਪ੍ਰਭਾਵਿਤ ਪੈਕੇਜ:"
 
-#: ../client/pk-console.c:276 ../client/pk-console-test.c:185
+#: ../client/pk-console.c:275 ../client/pk-console-test.c:184
 msgid "Affected packages: None"
 msgstr "ਪ੍ਰਭਾਵਿਤ ਪੈਕੇਜ: ਕੋਈ ਨਹੀਂ"
 
 #. TRANSLATORS: When processing, we might have to remove other dependencies
-#: ../client/pk-console.c:337 ../client/pk-task-text.c:220
+#: ../client/pk-console.c:336 ../client/pk-task-text.c:220
 msgid "The following packages have to be removed:"
 msgstr "ਅੱਗੇ ਦਿੱਤੇ ਪੈਕੇਜਾਂ ਨੂੰ ਹਟਾਇਆ ਜਾਵੇਗਾ:"
 
 #. TRANSLATORS: When processing, we might have to install other dependencies
-#: ../client/pk-console.c:340 ../client/pk-task-text.c:225
+#: ../client/pk-console.c:339 ../client/pk-task-text.c:225
 msgid "The following packages have to be installed:"
 msgstr "ਅੱਗੇ ਦਿੱਤੇ ਪੈਕੇਜਾਂ ਨੂੰ ਇੰਸਟਾਲ ਕੀਤਾ ਜਾਵੇਗਾ:"
 
 #. TRANSLATORS: When processing, we might have to update other dependencies
-#: ../client/pk-console.c:343 ../client/pk-task-text.c:230
+#: ../client/pk-console.c:342 ../client/pk-task-text.c:230
 msgid "The following packages have to be updated:"
 msgstr "ਅੱਗੇ ਦਿੱਤੇ ਪੈਕੇਜਾਂ ਨੂੰ ਅੱਪਡੇਟ ਕੀਤਾ ਜਾਵੇਗਾ:"
 
 #. TRANSLATORS: When processing, we might have to reinstall other dependencies
-#: ../client/pk-console.c:346 ../client/pk-task-text.c:235
+#: ../client/pk-console.c:345 ../client/pk-task-text.c:235
 msgid "The following packages have to be reinstalled:"
 msgstr "ਅੱਗੇ ਦਿੱਤੇ ਪੈਕੇਜਾਂ ਨੂੰ ਮੁੜ-ਇੰਸਟਾਲ ਜਾਵੇਗਾ:"
 
 #. TRANSLATORS: When processing, we might have to downgrade other dependencies
-#: ../client/pk-console.c:349 ../client/pk-task-text.c:240
+#: ../client/pk-console.c:348 ../client/pk-task-text.c:240
 msgid "The following packages have to be downgraded:"
 msgstr "ਅੱਗੇ ਦਿੱਤੇ ਪੈਕੇਜਾਂ ਨੂੰ ਡਾਊਨਗਰੇਡ ਕੀਤਾ ਜਾਵੇਗਾ:"
 
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:363 ../client/pk-console-test.c:205
+#: ../client/pk-console.c:362 ../client/pk-console-test.c:204
 msgid "Distribution"
 msgstr "ਡਿਸਟਰੀਬਿਊਸ਼ਨ"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:365 ../client/pk-console-test.c:207
+#: ../client/pk-console.c:364 ../client/pk-console-test.c:206
 msgid "Type"
 msgstr "ਟਾਈਪ"
 
@@ -126,44 +126,44 @@ msgstr "ਟਾਈਪ"
 #. TRANSLATORS: this is the summary of the group
 #. TRANSLATORS: this is any summary text describing the upgrade
 #. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:367 ../client/pk-console.c:390
-#: ../client/pk-console-test.c:209 ../client/pk-console-test.c:230
+#: ../client/pk-console.c:366 ../client/pk-console.c:389
+#: ../client/pk-console-test.c:208 ../client/pk-console-test.c:229
 msgid "Summary"
 msgstr "ਸੰਖੇਪ"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:379 ../client/pk-console-test.c:219
+#: ../client/pk-console.c:378 ../client/pk-console-test.c:218
 msgid "Category"
 msgstr "ਕੈਟਾਗਰੀ"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:381 ../client/pk-console-test.c:221
+#: ../client/pk-console.c:380 ../client/pk-console-test.c:220
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:384 ../client/pk-console-test.c:224
+#: ../client/pk-console.c:383 ../client/pk-console-test.c:223
 msgid "Parent"
 msgstr "ਮੋਢੀ"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:387 ../client/pk-console-test.c:227
+#: ../client/pk-console.c:386 ../client/pk-console-test.c:226
 msgid "Name"
 msgstr "ਨਾਂ"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:393 ../client/pk-console-test.c:233
+#: ../client/pk-console.c:392 ../client/pk-console-test.c:232
 msgid "Icon"
 msgstr "ਆਈਕਾਨ"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:408 ../client/pk-console-test.c:247
+#: ../client/pk-console.c:407 ../client/pk-console-test.c:246
 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:410 ../client/pk-console-test.c:253
+#: ../client/pk-console.c:409 ../client/pk-console-test.c:252
 #: ../client/pk-task-text.c:101 ../client/pk-task-text.c:153
 #: ../src/pk-polkit-action-lookup.c:352
 msgid "Package"
@@ -172,424 +172,421 @@ msgstr[0] "ਪੈਕੇਜ"
 msgstr[1] "ਪੈਕੇਜ"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:413 ../client/pk-console-test.c:256
+#: ../client/pk-console.c:412 ../client/pk-console-test.c:255
 msgid "Updates"
 msgstr "ਅੱਪਡੇਟ"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:417 ../client/pk-console-test.c:260
+#: ../client/pk-console.c:416 ../client/pk-console-test.c:259
 msgid "Obsoletes"
 msgstr "ਬਰਤਰਫ਼"
 
 #. TRANSLATORS: details about the update, the vendor URLs
-#: ../client/pk-console.c:421 ../client/pk-console-test.c:264
+#: ../client/pk-console.c:420 ../client/pk-console-test.c:263
 #: ../client/pk-task-text.c:154
 msgid "Vendor"
 msgstr "ਵੇਂਡਰ"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:425 ../client/pk-console-test.c:268
+#: ../client/pk-console.c:424 ../client/pk-console-test.c:267
 msgid "Bugzilla"
 msgstr "ਬੱਗਜ਼ੀਲਾ"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:429 ../client/pk-console-test.c:272
+#: ../client/pk-console.c:428 ../client/pk-console-test.c:271
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:433 ../client/pk-console-test.c:276
+#: ../client/pk-console.c:432 ../client/pk-console-test.c:275
 msgid "Restart"
 msgstr "ਮੁੜ-ਚਾਲੂ"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:437 ../client/pk-console-test.c:280
+#: ../client/pk-console.c:436 ../client/pk-console-test.c:279
 msgid "Update text"
 msgstr "ਅੱਪਡੇਟ ਟੈਕਸਟ"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:441 ../client/pk-console-test.c:284
+#: ../client/pk-console.c:440 ../client/pk-console-test.c:283
 msgid "Changes"
 msgstr "ਬਦਲਾਅ"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:445 ../client/pk-console-test.c:288
+#: ../client/pk-console.c:444 ../client/pk-console-test.c:287
 msgid "State"
 msgstr "ਹਾਲਤ"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:450 ../client/pk-console-test.c:293
+#: ../client/pk-console.c:449 ../client/pk-console-test.c:292
 msgid "Issued"
 msgstr "ਜਾਰੀ ਕੀਤਾ"
 
 #. TRANSLATORS: details about the update, date the update was updated
-#: ../client/pk-console.c:455 ../client/pk-console-test.c:298
+#: ../client/pk-console.c:454 ../client/pk-console-test.c:297
 msgid "Updated"
 msgstr "ਅੱਪਡੇਟ ਕੀਤੇ"
 
 #. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:475 ../client/pk-console-test.c:316
+#: ../client/pk-console.c:474 ../client/pk-console-test.c:315
 msgid "Enabled"
 msgstr "ਯੋਗ"
 
 #. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:478 ../client/pk-console-test.c:319
+#: ../client/pk-console.c:477 ../client/pk-console-test.c:318
 msgid "Disabled"
 msgstr "ਅਯੋਗ"
 
-#: ../client/pk-console.c:555 ../client/pk-console.c:557
+#: ../client/pk-console.c:554 ../client/pk-console.c:556
 msgid "Percentage"
 msgstr "ਫੀਸਦੀ"
 
-#: ../client/pk-console.c:557
+#: ../client/pk-console.c:556
 msgid "Unknown"
 msgstr "ਅਣਜਾਣ"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:599 ../client/pk-console-test.c:341
+#: ../client/pk-console.c:598 ../client/pk-console-test.c:340
 msgid "System restart required by:"
 msgstr "ਸਿਸਟਮ ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:602 ../client/pk-console-test.c:344
+#: ../client/pk-console.c:601 ../client/pk-console-test.c:343
 msgid "Session restart required:"
 msgstr "ਸਿਸਟਮ ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:605 ../client/pk-console-test.c:347
+#: ../client/pk-console.c:604 ../client/pk-console-test.c:346
 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:608 ../client/pk-console-test.c:350
+#: ../client/pk-console.c:607 ../client/pk-console-test.c:349
 msgid "Session restart (security) required:"
 msgstr "ਸਿਸਟਮ ਮੁੜ-ਚਾਲੂ (ਸੁਰੱਖਿਆ) ਕਰਨ ਦੀ ਲੋੜ:"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:611 ../client/pk-console-test.c:353
+#: ../client/pk-console.c:610 ../client/pk-console-test.c:352
 msgid "Application restart required by:"
 msgstr "ਐਪਲੀਕੇਸ਼ਨ ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ:"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:666 ../client/pk-console-test.c:704
+#: ../client/pk-console.c:665 ../client/pk-console-test.c:541
 msgid "Please restart the computer to complete the update."
 msgstr "ਅੱਪਡੇਟ ਨੂੰ ਪੂਰਾ ਕਰਨ ਵਾਸਤੇ ਕੰਪਿਊਟਰ ਮੁੜ-ਚਾਲੂ ਕਰੋ ਜੀ।"
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:669 ../client/pk-console-test.c:707
+#: ../client/pk-console.c:668 ../client/pk-console-test.c:544
 msgid "Please logout and login to complete the update."
 msgstr "ਅੱਪਡੇਟ ਨੂੰ ਪੂਰਾ ਕਰਨ ਵਾਸਤੇ ਲਾਗਆਉਟ ਕਰਕੇ ਲਾਗਇਨ ਕਰੋ ਜੀ।"
 
 #. TRANSLATORS: a package needs to restart the application
-#: ../client/pk-console.c:672
+#: ../client/pk-console.c:671
 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:675 ../client/pk-console-test.c:710
+#: ../client/pk-console.c:674 ../client/pk-console-test.c:547
 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:678 ../client/pk-console-test.c:713
+#: ../client/pk-console.c:677 ../client/pk-console-test.c:550
 msgid ""
 "Please logout and login to complete the update as important security updates "
 "have been installed."
 msgstr ""
-"ਅੱਪਡੇਟ ਨੂੰ ਪੂਰਾ ਕਰਨ ਵਾਸਤੇ ਲਾਗਆਉਟ ਕਰਕੇ ਲਾਗਇਨ ਕਰੋ ਜੀ ਕਿਉਂਕਿ ਸੁਰੱਖਿਆ ਅੱਪਡੇਟ ਇੰਸਟਾਲ "
-"ਕੀਤੇ ਹਨ।"
+"ਅੱਪਡੇਟ ਨੂੰ ਪੂਰਾ ਕਰਨ ਵਾਸਤੇ ਲਾਗਆਉਟ ਕਰਕੇ ਲਾਗਇਨ ਕਰੋ ਜੀ ਕਿਉਂਕਿ ਸੁਰੱਖਿਆ ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕੀਤੇ ਹਨ।"
 
 #. TRANSLATORS: The package is already installed on the system
-#: ../client/pk-console.c:810
+#: ../client/pk-console.c:809
 #, 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:818
+#: ../client/pk-console.c:817
 #, 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: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
+#: ../client/pk-console.c:843 ../client/pk-console.c:891
+#: ../client/pk-console.c:915 ../client/pk-console.c:963
+#: ../client/pk-console.c:1059 ../client/pk-console.c:1172
+#: ../client/pk-console.c:1233 ../client/pk-tools-common.c:132
+#: ../client/pk-tools-common.c:151 ../client/pk-tools-common.c:159
 #, c-format
 msgid "Internal error: %s"
 msgstr "ਅੰਦਰੂਨੀ ਗਲਤੀ: %s"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
 #. ask the user
-#: ../client/pk-console.c:876 ../client/pk-console.c:948
-#: ../client/pk-console.c:1266 ../client/pk-task-text.c:299
+#: ../client/pk-console.c:875 ../client/pk-console.c:947
+#: ../client/pk-console.c:1265 ../client/pk-task-text.c:299
 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
+#: ../client/pk-console.c:880 ../client/pk-console.c:952
 msgid "The package install was canceled!"
 msgstr "ਪੈਕੇਜ ਇੰਸਟਾਲ ਨੂੰ ਰੱਦ ਕੀਤਾ ਗਿਆ!"
 
 #. TRANSLATORS: There was an error installing the packages. The detailed error follows
-#: ../client/pk-console.c:900 ../client/pk-console.c:1634
+#: ../client/pk-console.c:899 ../client/pk-console.c:1633
 #, 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:972
+#: ../client/pk-console.c:971
 #, 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:1028
+#: ../client/pk-console.c:1027
 #, 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:1051 ../client/pk-console.c:1089
-#: ../client/pk-console.c:1118
+#: ../client/pk-console.c:1050 ../client/pk-console.c:1088
+#: ../client/pk-console.c:1117
 #, c-format
 msgid "This tool could not remove the packages: %s"
 msgstr "ਇਹ ਟੂਲ ਪੈਕੇਜ ਹਟਾ ਨਹੀਂ ਸਕਿਆ: %s"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:1104
+#: ../client/pk-console.c:1103
 msgid "Proceed with additional packages?"
 msgstr "ਹੋਰ ਪੈਕੇਜ ਨਾਲ ਜਾਰੀ ਕਰੋ?"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:1109
+#: ../client/pk-console.c:1108
 msgid "The package removal was canceled!"
 msgstr "ਪੈਕੇਜ ਹਟਾਉਣ ਨੂੰ ਰੱਦ ਕੀਤਾ ਗਿਆ!"
 
 #. TRANSLATORS: The package name was not found in any software sources
-#: ../client/pk-console.c:1150
+#: ../client/pk-console.c:1149
 #, 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:1181
+#: ../client/pk-console.c:1180
 #, 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:1213 ../client/pk-console.c:1225
-#: ../client/pk-console.c:1280
+#: ../client/pk-console.c:1212 ../client/pk-console.c:1224
+#: ../client/pk-console.c:1279
 #, 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
+#: ../client/pk-console.c:1270
 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:1304 ../client/pk-console.c:1312
+#: ../client/pk-console.c:1303 ../client/pk-console.c:1311
 #, 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:1334 ../client/pk-console.c:1342
+#: ../client/pk-console.c:1333 ../client/pk-console.c:1341
 #, 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:1364 ../client/pk-console.c:1372
+#: ../client/pk-console.c:1363 ../client/pk-console.c:1371
 #, 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:1394
+#: ../client/pk-console.c:1393
 #, 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:1402
+#: ../client/pk-console.c:1401
 #, 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:1424
+#: ../client/pk-console.c:1423
 #, c-format
 msgid "File already exists: %s"
 msgstr "ਫਾਇਲ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ: %s"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1429 ../client/pk-console.c:1485
-#: ../client/pk-console.c:1560
+#: ../client/pk-console.c:1428 ../client/pk-console.c:1484
+#: ../client/pk-console.c:1559
 msgid "Getting package list"
 msgstr "ਪੈਕੇਜ ਲਿਸਟ ਲਈ ਜਾ ਰਹੀ ਹੈ"
 
 #. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
-#: ../client/pk-console.c:1435 ../client/pk-console.c:1491
-#: ../client/pk-console.c:1566
+#: ../client/pk-console.c:1434 ../client/pk-console.c:1490
+#: ../client/pk-console.c:1565
 #, 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:1446
+#: ../client/pk-console.c:1445
 #, c-format
 msgid "Failed to save to disk"
 msgstr "ਡਿਸਕ ਉੱਤੇ ਸੰਭਾਲਣ ਲਈ ਫੇਲ੍ਹ ਹੈ"
 
 #. TRANSLATORS: There was an error getting the list. The filename follows
-#: ../client/pk-console.c:1480 ../client/pk-console.c:1555
+#: ../client/pk-console.c:1479 ../client/pk-console.c:1554
 #, c-format
 msgid "File does not exist: %s"
 msgstr "ਫਾਇਲ ਮੌਜੂਦ ਨਹੀਂ: %s"
 
 #. TRANSLATORS: header to a list of packages newly added
-#: ../client/pk-console.c:1512
+#: ../client/pk-console.c:1511
 msgid "Packages to add"
 msgstr "ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਪੈਕੇਜ"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1520
+#: ../client/pk-console.c:1519
 msgid "Packages to remove"
 msgstr "ਹਟਾਉਣ ਲਈ ਪੈਕੇਜ"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1588
+#: ../client/pk-console.c:1587
 #, c-format
 msgid "No new packages need to be installed"
 msgstr "ਕੋਈ ਨਵਾਂ ਪੈਕੇਜ ਇੰਸਟਾਲ ਕਰਨ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1594
+#: ../client/pk-console.c:1593
 msgid "To install"
 msgstr "ਇੰਸਟਾਲ ਲਈ"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1606
+#: ../client/pk-console.c:1605
 msgid "Searching for package: "
 msgstr "ਪੈਕੇਜ ਲਈ ਖੋਜ ਜਾਰੀ:"
 
 #. TRANSLATORS: package was not found -- this is the end of a string ended in ...
-#: ../client/pk-console.c:1610
+#: ../client/pk-console.c:1609
 msgid "not found."
 msgstr "ਨਹੀਂ ਲੱਭਿਆ।"
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1621
+#: ../client/pk-console.c:1620
 #, 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:1627
+#: ../client/pk-console.c:1626
 #: ../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:1663
+#: ../client/pk-console.c:1662
 #, 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:1671
+#: ../client/pk-console.c:1670
 #, 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:1702
+#: ../client/pk-console.c:1701
 msgid "Error:"
 msgstr "ਗਲਤੀ:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1716 ../client/pk-console-test.c:370
+#: ../client/pk-console.c:1715 ../client/pk-console-test.c:369
 msgid "Package description"
 msgstr "ਪੈਕੇਜ ਵੇਰਵਾ"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:1732 ../client/pk-console-test.c:388
+#: ../client/pk-console.c:1731 ../client/pk-console-test.c:387
 msgid "Message:"
 msgstr "ਸੁਨੇਹਾ:"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1760 ../client/pk-console-test.c:407
+#: ../client/pk-console.c:1759 ../client/pk-console-test.c:406
 msgid "Package files"
 msgstr "ਪੈਕੇਜ ਫਾਇਲਾਂ"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1768 ../client/pk-console-test.c:402
+#: ../client/pk-console.c:1767 ../client/pk-console-test.c:401
 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:1791
+#: ../client/pk-console.c:1790
 msgid "Repository signature required"
 msgstr "ਰਿਪੋਜ਼ਟਰੀ ਦਸਤਖਤ ਲੋੜੀਦੇ"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
 #. ask the user
-#: ../client/pk-console.c:1801 ../client/pk-task-text.c:113
+#: ../client/pk-console.c:1800 ../client/pk-task-text.c:113
 msgid "Do you accept this signature?"
 msgstr "ਕੀ ਤੁਸੀਂ ਇਹ ਦਸਤਖਤ ਮਨਜ਼ੂਰ ਕਰਦੇ ਹੋ?"
 
 #. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1805 ../client/pk-task-text.c:117
+#: ../client/pk-console.c:1804 ../client/pk-task-text.c:117
 msgid "The signature was not accepted."
 msgstr "ਦਸਤਖਤ ਮਨਜ਼ੂਰ ਨਹੀਂ ਸਨ।"
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1839
+#: ../client/pk-console.c:1838
 msgid "End user license agreement required"
 msgstr "ਅੰਤਮ ਯੂਜ਼ਰ ਲਾਈਸੈਂਸ ਇਕਰਾਰਨਾਮਾ ਲੋੜੀਦਾ"
 
 #. TRANSLATORS: This a prompt asking the user to agree to the license
-#: ../client/pk-console.c:1846
+#: ../client/pk-console.c:1845
 msgid "Do you agree to this license?"
 msgstr "ਕੀ ਤੁਸੀਂ ਇਸ ਲਾਈਸੈਂਸ ਨਾਲ ਸਹਿਮਤ ਹੋ?"
 
 #. TRANSLATORS: This is where the user declined the license
-#: ../client/pk-console.c:1850
+#: ../client/pk-console.c:1849
 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:1879 ../client/pk-console-test.c:982
+#: ../client/pk-console.c:1878 ../client/pk-console-test.c:819
 msgid "The daemon crashed mid-transaction!"
 msgstr "ਡੈਮਨ ਅਧੂਰੀ ਟਰਾਂਸੈਕਸ਼ਨ ਕਰੈਸ਼ ਹੋ ਗਈ!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1932 ../client/pk-console-test.c:1016
+#: ../client/pk-console.c:1931 ../client/pk-console-test.c:853
 msgid "PackageKit Console Interface"
 msgstr "ਪੈਕੇਜਕਿੱਟ ਕਨਸੋਲ ਇੰਟਰਫੇਸ"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1934 ../client/pk-console-test.c:1018
+#: ../client/pk-console.c:1933 ../client/pk-console-test.c:855
 msgid "Subcommands:"
 msgstr "ਸਬ-ਕਮਾਂਡ:"
 
 #. TRANSLATORS: command line argument, if we should show debugging information
 #. TRANSLATORS: if we should show debugging data
-#: ../client/pk-console.c:2027 ../client/pk-console-test.c:1109
-#: ../client/pk-generate-pack.c:187 ../client/pk-monitor.c:128
-#: ../client/pk-monitor-test.c:282
+#: ../client/pk-console.c:2026 ../client/pk-console-test.c:969
+#: ../client/pk-generate-pack.c:185 ../client/pk-generate-pack-test.c:225
+#: ../client/pk-monitor.c:128 ../client/pk-monitor-test.c:282
 #: ../contrib/command-not-found/pk-command-not-found.c:616
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:549
 #: ../contrib/device-rebind/pk-device-rebind.c:293 ../src/pk-main.c:211
@@ -597,149 +594,149 @@ msgid "Show extra debugging information"
 msgstr "ਹੋਰ ਡੀਬੱਗ ਜਾਣਕਾਰੀ ਵੇਖੋ"
 
 #. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:2030 ../client/pk-console-test.c:1112
+#: ../client/pk-console.c:2029 ../client/pk-console-test.c:972
 #: ../client/pk-monitor.c:130 ../client/pk-monitor-test.c:284
 msgid "Show the program version and exit"
 msgstr "ਪਰੋਗਰਾਮ ਵਰਜਨ ਵੇਖੋ ਅਤੇ ਬੰਦ ਕਰੋ"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:2033 ../client/pk-console-test.c:1115
+#: ../client/pk-console.c:2032 ../client/pk-console-test.c:975
 msgid "Set the filter, e.g. installed"
 msgstr "ਫਿਲਟਰ ਸੈੱਟ ਕਰੋ, ਜਿਵੇਂ ਕਿ ਇੰਸਟਾਲ"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:2036 ../client/pk-console-test.c:1118
+#: ../client/pk-console.c:2035 ../client/pk-console-test.c:978
 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:2063
+#: ../client/pk-console.c:2062
 msgid "This tool could not connect to system DBUS."
 msgstr "ਇਹ ਟੂਲ ਸਿਸਟਮ DBUS ਨਾਲ ਕੁਨੈਕਟ ਨਹੀਂ ਹੋ ਸਕਿਆ।"
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:2153 ../client/pk-console-test.c:1193
+#: ../client/pk-console.c:2152 ../client/pk-console-test.c:1053
 msgid "The filter specified was invalid"
 msgstr "ਦਿੱਤਾ ਫਿਲਟਰ ਅਢੁੱਕਵਾਂ ਹੈ।"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:2172 ../client/pk-console-test.c:1212
+#: ../client/pk-console.c:2171 ../client/pk-console-test.c:1072
 msgid "A search type is required, e.g. name"
 msgstr "ਖੋਜ ਕਿਸਮ ਚਾਹੀਦੀ ਹੈ, ਜਿਵੇਂ ਨਾਂ"
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:2179 ../client/pk-console.c:2188
-#: ../client/pk-console.c:2197 ../client/pk-console.c:2206
-#: ../client/pk-console-test.c:1219 ../client/pk-console-test.c:1231
-#: ../client/pk-console-test.c:1243 ../client/pk-console-test.c:1255
+#: ../client/pk-console.c:2178 ../client/pk-console.c:2187
+#: ../client/pk-console.c:2196 ../client/pk-console.c:2205
+#: ../client/pk-console-test.c:1079 ../client/pk-console-test.c:1091
+#: ../client/pk-console-test.c:1103 ../client/pk-console-test.c:1115
 msgid "A search term is required"
 msgstr "ਖੋਜ ਸ਼ਬਦ ਦੀ ਲੋੜ ਹੈ"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:2213 ../client/pk-console-test.c:1265
+#: ../client/pk-console.c:2212 ../client/pk-console-test.c:1125
 msgid "Invalid search type"
 msgstr "ਗਲਤ ਖੋਜ ਟਾਈਪ"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:2219
+#: ../client/pk-console.c:2218
 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:2228 ../client/pk-console-test.c:1292
+#: ../client/pk-console.c:2227 ../client/pk-console-test.c:1152
 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:2237 ../client/pk-console-test.c:1303
+#: ../client/pk-console.c:2236 ../client/pk-console-test.c:1163
 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:2245 ../client/pk-console-test.c:1312
+#: ../client/pk-console.c:2244 ../client/pk-console-test.c:1172
 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:2252 ../client/pk-console-test.c:1319
+#: ../client/pk-console.c:2251 ../client/pk-console-test.c:1179
 msgid "Directory not found"
 msgstr "ਡਾਇਰੈਕਟਰੀ ਨਹੀਂ ਲੱਭੀ"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2260 ../client/pk-console-test.c:1328
+#: ../client/pk-console.c:2259 ../client/pk-console-test.c:1188
 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:2270 ../client/pk-console-test.c:1339
+#: ../client/pk-console.c:2269 ../client/pk-console-test.c:1199
 msgid "A transaction identifier (tid) is required"
 msgstr "ਟਰਾਂਸੈਕਸ਼ਨ ਪਛਾਣ (tid) ਲੋੜੀਦਾ ਹੈ"
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:2287 ../client/pk-console-test.c:1360
+#: ../client/pk-console.c:2286 ../client/pk-console-test.c:1220
 msgid "A package name to resolve is required"
 msgstr "ਹੱਲ ਕਰਨ ਲਈ ਪੈਕੇਜ ਨਾਂ ਲਾਜ਼ਮੀ ਹੈ"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:2296 ../client/pk-console.c:2305
-#: ../client/pk-console-test.c:1371 ../client/pk-console-test.c:1382
+#: ../client/pk-console.c:2295 ../client/pk-console.c:2304
+#: ../client/pk-console-test.c:1231 ../client/pk-console-test.c:1242
 msgid "A repository name is required"
 msgstr "ਰਿਪੋਜ਼ਟਰੀ ਨਾਂ ਲੋੜੀਦਾ ਹੈ"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:2314 ../client/pk-console-test.c:1393
+#: ../client/pk-console.c:2313 ../client/pk-console-test.c:1253
 msgid "A repo name, parameter and value are required"
 msgstr "ਰੈਪੋ ਨਾਂ, ਪੈਰਾਮੀਟਰ ਅਤੇ ਮੁੱਲ ਲੋੜੀਦਾ ਹੈ"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:2328 ../client/pk-console-test.c:1411
+#: ../client/pk-console.c:2327 ../client/pk-console-test.c:1270
 msgid "An action, e.g. 'update-system' is required"
 msgstr "ਕਾਰਵਾਈ, ਜਿਵੇਂ 'ਅੱਪਡੇਟ-ਸਿਸਟਮ' ਲੋੜੀਦਾ ਹੈ"
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:2335 ../client/pk-console-test.c:1418
+#: ../client/pk-console.c:2334 ../client/pk-console-test.c:1277
 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:2342 ../client/pk-console-test.c:1425
+#: ../client/pk-console.c:2341 ../client/pk-console-test.c:934
 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:2352 ../client/pk-console.c:2364
-#: ../client/pk-console.c:2373 ../client/pk-console.c:2391
-#: ../client/pk-console.c:2400 ../client/pk-console-test.c:1435
-#: ../client/pk-console-test.c:1450 ../client/pk-console-test.c:1459
-#: ../client/pk-console-test.c:1479 ../client/pk-console-test.c:1488
-#: ../client/pk-generate-pack.c:243
+#: ../client/pk-console.c:2351 ../client/pk-console.c:2363
+#: ../client/pk-console.c:2372 ../client/pk-console.c:2390
+#: ../client/pk-console.c:2399 ../client/pk-console-test.c:1287
+#: ../client/pk-console-test.c:1302 ../client/pk-console-test.c:1311
+#: ../client/pk-console-test.c:1331 ../client/pk-console-test.c:1340
+#: ../client/pk-generate-pack.c:241 ../client/pk-generate-pack-test.c:288
 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:2382 ../client/pk-console-test.c:1468
+#: ../client/pk-console.c:2381 ../client/pk-console-test.c:1320
 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:2409
+#: ../client/pk-console.c:2408
 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:2419 ../client/pk-console.c:2429
+#: ../client/pk-console.c:2418 ../client/pk-console.c:2428
 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:2483 ../client/pk-console-test.c:1548
+#: ../client/pk-console.c:2482 ../client/pk-console-test.c:1400
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "ਚੋਣ '%s' ਸਹਾਇਕ ਨਹੀਂ ਹੈ"
 
 #. TRANSLATORS: User does not have permission to do this
-#: ../client/pk-console.c:2496
+#: ../client/pk-console.c:2495
 msgid "Incorrect privileges for this operation"
 msgstr "ਇਸ ਕਾਰਵਾਈ ਲਈ ਗਲਤ ਅਧਿਕਾਰ"
 
@@ -747,32 +744,40 @@ msgstr "ਇਸ ਕਾਰਵਾਈ ਲਈ ਗਲਤ ਅਧਿਕਾਰ"
 #. /* 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
-#: ../client/pk-console.c:2499 ../client/pk-console-test.c:1560
+#: ../client/pk-console.c:2498 ../client/pk-console-test.c:1412
 msgid "Command failed"
 msgstr "ਕਮਾਂਡ ਫੇਲ੍ਹ ਹੈ"
 
+#: ../client/pk-console-shared.c:52 ../client/pk-tools-common.c:51
+#, c-format
+msgid "Please enter a number from 1 to %i: "
+msgstr "੧ ਤੋਂ %i ਤੱਕ ਨੰਬਰ ਦਿਓ ਜੀ:"
+
 #. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../client/pk-console-test.c:523 ../client/pk-tools-common.c:131
+#: ../client/pk-console-shared.c:213 ../client/pk-tools-common.c:200
 msgid "More than one package matches:"
 msgstr "ਇੱਕ ਤੋਂ ਵੱਧ ਰਲਦੇ ਪੈਕੇਜ ਲੱਭੇ:"
 
 #. TRANSLATORS: This finds out which package in the list to use
-#: ../client/pk-console-test.c:532 ../client/pk-tools-common.c:138
+#: ../client/pk-console-shared.c:222 ../client/pk-tools-common.c:207
 msgid "Please choose the correct package: "
 msgstr "ਠੀਕ ਪੈਕੇਜ ਚੁਣੋ ਜੀ:"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:734, c-format
+#: ../client/pk-console-test.c:571
+#, c-format
 msgid "This tool could not find the available package: %s"
 msgstr "ਇਹ ਟੂਲ ਉਪਲੱਬਧ ਪੈਕੇਜ ਨਹੀਂ ਲੱਭ ਸਕਿਆ: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:762, c-format
+#: ../client/pk-console-test.c:599
+#, c-format
 msgid "This tool could not find the installed package: %s"
 msgstr "ਇਹ ਟੂਲ ਇੰਸਟਾਲ ਕੀਤੇ ਪੈਕੇਜ ਨਹੀਂ ਲੱਭ ਸਕਿਆ: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:790 ../client/pk-console-test.c:818, c-format
+#: ../client/pk-console-test.c:627 ../client/pk-console-test.c:655
+#, c-format
 msgid "This tool could not find the package: %s"
 msgstr "ਇਹ ਟੂਲ ਪੈਕੇਜ ਨਹੀਂ ਲੱਭ ਸਕਿਆ: %s"
 
@@ -780,80 +785,84 @@ msgstr "ਇਹ ਟੂਲ ਪੈਕੇਜ ਨਹੀਂ ਲੱਭ ਸਕਿਆ: %s
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console-test.c:846 ../client/pk-console-test.c:874
-#: ../client/pk-console-test.c:902 ../client/pk-console-test.c:930
-#: ../client/pk-console-test.c:958, c-format
+#: ../client/pk-console-test.c:683 ../client/pk-console-test.c:711
+#: ../client/pk-console-test.c:739 ../client/pk-console-test.c:767
+#: ../client/pk-console-test.c:795
+#, c-format
 msgid "This tool could not find all the packages: %s"
 msgstr "ਇਹ ਟੂਲ ਸਭ ਪੈਕੇਜ ਨਹੀਂ ਲੱਭ ਸਕਿਆ: %s"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1271
+#: ../client/pk-console-test.c:1131
 msgid "A package name to install is required"
 msgstr "ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਪੈਕੇਜ ਨਾਂ ਲਾਜ਼ਮੀ ਹੈ"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1280
+#: ../client/pk-console-test.c:1140
 msgid "A filename to install is required"
 msgstr "ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਇੱਕ ਫਾਇਲ ਨਾਂ ਦੀ ਲੋੜ ਹੈ"
 
 #. TRANSLATORS: This is the state of the transaction
-#: ../client/pk-generate-pack.c:103
+#: ../client/pk-generate-pack.c:101
 msgid "Downloading"
 msgstr "ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
 
 #. TRANSLATORS: This is when the main packages are being downloaded
-#: ../client/pk-generate-pack.c:123
+#: ../client/pk-generate-pack.c:121
 msgid "Downloading packages"
 msgstr "ਪੈਕੇਜ ਡਾਊਨਲੋਡ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ"
 
 #. TRANSLATORS: This is when the dependency packages are being downloaded
-#: ../client/pk-generate-pack.c:128
+#: ../client/pk-generate-pack.c:126
 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:190
+#: ../client/pk-generate-pack.c:188 ../client/pk-generate-pack-test.c:228
 msgid "Set the file name of dependencies to be excluded"
 msgstr "ਨਿਰਭਰਤਾ ਲਈ ਫਾਇਲ ਨਾਂ ਦਿਓ, ਜਿਸ ਨੂੰ ਵੱਖ ਰੱਖਿਆ ਜਾਵੇ"
 
 #. TRANSLATORS: the output location
-#: ../client/pk-generate-pack.c:193
+#: ../client/pk-generate-pack.c:191 ../client/pk-generate-pack-test.c:231
 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:196
+#: ../client/pk-generate-pack.c:194 ../client/pk-generate-pack-test.c:234
 msgid "The package to be put into the service pack"
 msgstr "ਸਰਵਿਸ ਪੈਕ ਵਿੱਚ ਰੱਖਣ ਵਾਸਤੇ ਪੈਕੇਜ"
 
 #. TRANSLATORS: put all pending updates in the pack
-#: ../client/pk-generate-pack.c:199
+#: ../client/pk-generate-pack.c:197 ../client/pk-generate-pack-test.c:237
 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:227
+#: ../client/pk-generate-pack.c:225 ../client/pk-generate-pack-test.c:272
 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:235
+#: ../client/pk-generate-pack.c:233 ../client/pk-generate-pack-test.c:280
 msgid "Both options selected."
 msgstr "ਦੋਵੇਂ ਚੋਣਾਂ ਕੀਤੀਆਂ।"
 
 #. TRANSLATORS: This is when the user fails to supply the output
-#: ../client/pk-generate-pack.c:251
+#: ../client/pk-generate-pack.c:249 ../client/pk-generate-pack-test.c:296
 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:269 ../client/pk-generate-pack.c:275
+#. 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-test.c:324 ../client/pk-generate-pack-test.c:330
 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:282
+#: ../client/pk-generate-pack.c:280 ../client/pk-generate-pack-test.c:337
 msgid ""
 "Service packs cannot be created as PackageKit was not built with libarchive "
 "support."
@@ -862,54 +871,54 @@ msgstr ""
 "ਗਿਆ ਹੈ।"
 
 #. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
-#: ../client/pk-generate-pack.c:293
+#: ../client/pk-generate-pack.c:291 ../client/pk-generate-pack-test.c:348
 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:309
+#: ../client/pk-generate-pack.c:307 ../client/pk-generate-pack-test.c:364
 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:312
+#: ../client/pk-generate-pack.c:310 ../client/pk-generate-pack-test.c:367
 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:325
+#: ../client/pk-generate-pack.c:323 ../client/pk-generate-pack-test.c:380
 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:335
+#: ../client/pk-generate-pack.c:333 ../client/pk-generate-pack-test.c:392
 msgid "Failed to open package list."
 msgstr "ਪੈਕੇਜ ਲਿਸਟ ਖੋਲ੍ਹਣ ਲਈ ਫੇਲ੍ਹ ਹੈ।"
 
 #. TRANSLATORS: The package name is being matched up to available packages
-#: ../client/pk-generate-pack.c:346
+#: ../client/pk-generate-pack.c:344 ../client/pk-generate-pack-test.c:401
 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:350
+#: ../client/pk-generate-pack.c:348 ../client/pk-generate-pack-test.c:405
 #, 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:367
+#: ../client/pk-generate-pack.c:365 ../client/pk-generate-pack-test.c:413
 msgid "Creating service pack..."
 msgstr "ਸਰਵਿਸ ਪੈਕ ਬਣਾਇਆ ਜਾ ਰਿਹਾ ਹੈ..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:374
+#: ../client/pk-generate-pack.c:372 ../client/pk-generate-pack-test.c:428
 #, c-format
 msgid "Service pack created '%s'"
 msgstr "ਸਰਵਿਸ ਪੈਕ ਬਣਾਇਆ '%s'"
 
 #. TRANSLATORS: we failed to make te file
-#: ../client/pk-generate-pack.c:379
+#: ../client/pk-generate-pack.c:377 ../client/pk-generate-pack-test.c:433
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "'%s' ਬਣਾਉਣ ਲਈ ਫੇਲ੍ਹ: %s"
@@ -921,11 +930,11 @@ msgstr "ਪੈਕੇਜਕਿੱਟ ਮਾਨੀਟਰ"
 
 #: ../client/pk-monitor.c:183
 msgid "Cannot show the list of transactions"
-msgstr "ਸੰਚਾਰ ਦੀ ਸੂਚੀ ਵੇਖਾ ਨਹੀਂ ਸਕਦਾ"
+msgstr "ਟਰਾਂਸੈਕਸ਼ਨ ਦੀ ਲਿਸਟ ਨਹੀਂ ਵੇਖਾਈ ਜਾ ਸਕਦੀ"
 
 #: ../client/pk-monitor-test.c:204
 msgid "Failed to get transaction list"
-msgstr "ਸੰਚਾਰ ਲਿਸਟ ਖੋਲ੍ਹਣ ਲਈ ਫੇਲ੍ਹ ਹੈ।"
+msgstr "ਟਰਾਂਸੈਕਸ਼ਨ ਲਿਸਟ ਖੋਲ੍ਹਣ ਲਈ ਫੇਲ੍ਹ ਹੈ।"
 
 #: ../client/pk-monitor-test.c:235
 msgid "Failed to get daemon state"
@@ -991,40 +1000,35 @@ msgstr "ਇਕਰਾਰਨਾਮਾ ਮਨਜ਼ੂਰ ਨਹੀਂ ਕੀਤਾ
 
 #: ../client/pk-task-text.c:194
 msgid "Media change required"
-msgstr "ਮੀਡੀਆ ਤਬਦੀਲੀ ਲੋੜੀਂਦੀ ਹੈ"
+msgstr "ਮੀਡਿਆ ਤਬਦੀਲੀ ਲੋੜੀਂਦੀ ਹੈ"
 
 #: ../client/pk-task-text.c:195
 msgid "Media type"
-msgstr "ਮੀਡੀਆ ਕਿਸਮ"
+msgstr "ਮੀਡਿਆ ਕਿਸਮ"
 
 #: ../client/pk-task-text.c:196
 msgid "Media ID"
-msgstr "ਮੀਡੀਆ ID"
+msgstr "ਮੀਡਿਆ ID"
 
 #: ../client/pk-task-text.c:197
 msgid "Text"
-msgstr "ਪਾਠ"
+msgstr "ਟੈਕਸਟ"
 
 #. ask the user
 #: ../client/pk-task-text.c:201
 msgid "Please insert the correct media"
-msgstr "ਠੀਕ ਮੀਡੀਆ ਚੁਣੋ ਜੀ"
+msgstr "ਠੀਕ ਮੀਡਿਆ ਚੁਣੋ ਜੀ"
 
 #: ../client/pk-task-text.c:205
 msgid "The correct media was not inserted."
-msgstr "ਸਹੀ ਮੀਡੀਆ ਨਹੀਂ ਪਾਇਆ।"
+msgstr "ਠੀਕ ਮੀਡਿਆ ਨਹੀਂ ਪਾਇਆ।"
 
 #: ../client/pk-task-text.c:303
 msgid "The transaction did not proceed."
-msgstr "ਸੰਚਾਰ ਅੱਗੇ ਨਹੀਂ ਵਧਿਆ।"
-
-#: ../client/pk-text.c:50
-#, c-format
-msgid "Please enter a number from 1 to %i: "
-msgstr "੧ ਤੋਂ %i ਤੱਕ ਨੰਬਰ ਦਿਓ ਜੀ:"
+msgstr "ਟਰਾਂਸੈਕਸ਼ਨ ਅੱਗੇ ਨਹੀਂ ਵਧਿਆ।"
 
 #. TRANSLATORS: The package was not found in any software sources
-#: ../client/pk-tools-common.c:119
+#: ../client/pk-tools-common.c:188
 #, c-format
 msgid "The package could not be found"
 msgstr "ਪੈਕੇਜ ਨਹੀਂ ਲੱਭਿਆ ਜਾ ਸਕਿਆ"
@@ -1091,7 +1095,7 @@ 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
@@ -1101,7 +1105,7 @@ msgstr "ਪੈਕੇਜ ਮੈਨੇਜਰ ਲਾਕ ਦੀ ਉਡੀਕ ਕਰ
 #. TRANSLATORS: loading package cache so we can search
 #: ../contrib/command-not-found/pk-command-not-found.c:361
 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
@@ -1175,10 +1179,11 @@ msgstr "ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਪੈਕੇਜ ਚੁਣੋ ਜੀ"
 #. TRANSLATORS: we are starting to install the packages
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:187
 msgid "Starting install"
-msgstr "ਇੰਸਟਾਲ ਸ਼ੁਰੂ ਹੋ ਰਿਹਾ ਹੈ"
+msgstr "ਇੰਸਟਾਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
 
 #. TRANSLATORS: we couldn't find the package name, non-fatal
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:397, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:397
+#, c-format
 msgid "Failed to find the package %s, or already installed: %s"
 msgstr "ਪੈਕੇਜ %s ਲੱਭਣ ਵਿੱਚ ਫੇਲ, ਜਾਂ ਪਹਿਲਾਂ ਹੀ ਇੰਸਟਾਲ ਹੈ: %s"
 
@@ -1190,12 +1195,12 @@ msgstr "ਅਸਲ ਵਿੱਚ ਕੋਈ ਪੈਕੇਜ ਇੰਸਟਾਲ ਨà
 #. command line argument, do we skip packages that depend on the ones specified
 #: ../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: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:576
@@ -1203,12 +1208,14 @@ msgid "PackageKit Debuginfo Installer"
 msgstr "ਪੈਕੇਜਕਿੱਟ Debuginfo ਇੰਸਟਾਲਰ"
 
 #. TRANSLATORS: the use needs to specify a list of package names on the command line
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:588, c-format
+#: ../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:622, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:622
+#, c-format
 msgid "Getting sources list"
 msgstr "ਸਰੋਤ ਲਿਸਟ ਲਈ ਜਾ ਰਹੀ ਹੈ"
 
@@ -1255,7 +1262,7 @@ msgstr "ਡੀਬੱਗਿੰਗ ਸਰੋਤ ਯੋਗ ਕਰ ਰਿਹਾ ਹà
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:895
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:939
 msgid "FAILED."
-msgstr "ਫੇਲ ਹੋਇਆ।"
+msgstr "ਫੇਲ੍ਹ ਹੋਇਆ।"
 
 #. TRANSLATORS: tell the user how many we enabled
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:718
@@ -1264,27 +1271,32 @@ 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:725, c-format
+#: ../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:737, c-format
+#: ../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:760, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:760
+#, c-format
 msgid "Failed to find the debuginfo package %s: %s"
 msgstr "ਡੀਬੱਗ ਪੈਕੇਜ %s ਖੋਜਣ ਲਈ ਫੇਲ੍ਹ ਹੈ: %s"
 
 #. TRANSLATORS: no debuginfo packages could be found to be installed
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:788, c-format
+#: ../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:802, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:802
+#, c-format
 msgid "Found %i packages:"
 msgstr "%i ਪੈਕੇਜ ਲੱਭਿਆ:"
 
@@ -1295,7 +1307,8 @@ msgid "Finding packages that depend on these packages"
 msgstr "ਪੈਕੇਜ ਲੱਭ ਰਿਹਾ ਜੋ ਇਹਨਾਂ ਪੈਕੇਜਾਂ ਤੇ ਨਿਰਭਰ ਕਰਦੇ ਹਨ"
 
 #. TRANSLATORS: could not install, detailed error follows
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:831, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:831
+#, c-format
 msgid "Could not find dependant packages: %s"
 msgstr "ਨਿਰਭਰ ਪੈਕੇਜ ਖੋਜ ਨਹੀਂ ਸਕਿਆ: %s"
 
@@ -1306,22 +1319,26 @@ msgid "Found %i extra packages."
 msgstr "%i ਵਾਧੂ ਪੈਕੇਜ ਲੱਭੇ ਹਨ।"
 
 #. TRANSLATORS: tell the user we found some more packages
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:851, c-format
+#: ../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:860, c-format
+#: ../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:873, c-format
+#: ../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:898, c-format
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:898
+#, c-format
 msgid "Could not install packages: %s"
 msgstr "ਪੈਕੇਜ ਇੰਸਟਾਲ ਨਹੀਂ ਕਰ ਸਕਿਆ: %s"
 
@@ -1407,7 +1424,7 @@ 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
@@ -1422,12 +1439,12 @@ 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
 msgid "Failed to rebind device"
-msgstr "ਜੰਤਕ ਰੀਬਾਈਂਡ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ"
+msgstr "ਜੰਤਰ ਰੀਬਾਈਂਡ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ"
 
 #: ../data/packagekit-catalog.xml.in.h:1
 msgid "PackageKit Catalog"
@@ -1558,7 +1575,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
commit 5bc5d8cf1c7c52a154ac6c4680fb4b32541db47e
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 23:05:07 2009 +0100

    glib2: create a test pk-command-not-found binary that uses glib2

diff --git a/contrib/command-not-found/.gitignore b/contrib/command-not-found/.gitignore
index 86b517c..9888bf7 100644
--- a/contrib/command-not-found/.gitignore
+++ b/contrib/command-not-found/.gitignore
@@ -2,5 +2,6 @@
 .libs
 *.o
 pk-command-not-found
+pk-command-not-found-test
 PackageKit.sh
 
diff --git a/contrib/command-not-found/Makefile.am b/contrib/command-not-found/Makefile.am
index b3c8843..3711387 100644
--- a/contrib/command-not-found/Makefile.am
+++ b/contrib/command-not-found/Makefile.am
@@ -37,6 +37,33 @@ pk_command_not_found_CFLAGS =				\
 	$(WARNINGFLAGS_C)				\
 	$(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 = pk-command-not-found-test
+
+pk_command_not_found_test_SOURCES =			\
+	pk-command-not-found-test.c			\
+	$(NULL)
+
+pk_command_not_found_test_LDADD =			\
+	../../client/libpkconsole.a			\
+	$(GLIB_LIBS)					\
+	$(DBUS_LIBS)					\
+	$(PK_GLIB2_LIBS)				\
+	$(NULL)
+
+pk_command_not_found_test_CFLAGS =			\
+	$(WARNINGFLAGS_C)				\
+	$(NULL)
+
+endif
+
+
 bashprofiledir = ${SYSCONFDIR}/profile.d
 dist_bashprofile_DATA = PackageKit.sh
 
diff --git a/contrib/command-not-found/pk-command-not-found-test.c b/contrib/command-not-found/pk-command-not-found-test.c
new file mode 100644
index 0000000..21d4900
--- /dev/null
+++ b/contrib/command-not-found/pk-command-not-found-test.c
@@ -0,0 +1,800 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 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.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <locale.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <signal.h>
+#include <glib/gi18n.h>
+#include <dbus/dbus-glib.h>
+#include <packagekit-glib2/packagekit.h>
+
+#include "egg-debug.h"
+#include "egg-string.h"
+
+#include "../../client/pk-client-sync.h"
+#include "../../client/pk-console-shared.h"
+
+#define PK_MAX_PATH_LEN 1023
+
+typedef enum {
+	PK_CNF_POLICY_RUN,
+	PK_CNF_POLICY_INSTALL,
+	PK_CNF_POLICY_ASK,
+	PK_CNF_POLICY_WARN,
+	PK_CNF_POLICY_UNKNOWN
+} PkCnfPolicy;
+
+typedef struct {
+	PkCnfPolicy	 single_match;
+	PkCnfPolicy	 multiple_match;
+	PkCnfPolicy	 single_install;
+	PkCnfPolicy	 multiple_install;
+	gboolean	 software_source_search;
+	gchar		**locations;
+} PkCnfPolicyConfig;
+
+static PkClient *client = NULL;
+static GCancellable *cancellable = NULL;
+
+/**
+ * pk_cnf_find_alternatives_swizzle:
+ *
+ * Swizzle ordering, e.g. amke -> make
+ **/
+static void
+pk_cnf_find_alternatives_swizzle (const gchar *cmd, guint len, GPtrArray *array)
+{
+	guint i;
+	gchar *possible;
+	gchar swap;
+
+	/*  */
+	for (i=0; i<len-1; i++) {
+		possible = g_strdup (cmd);
+		swap = possible[i];
+		possible[i] = possible[i+1];
+		possible[i+1] = swap;
+		g_ptr_array_add (array, possible);
+	}
+}
+
+/**
+ * pk_cnf_find_alternatives_replace:
+ *
+ * Replace some easily confused chars, e.g. gnome-power-managir to gnome-power-manager
+ **/
+static void
+pk_cnf_find_alternatives_replace (const gchar *cmd, guint len, GPtrArray *array)
+{
+	guint i;
+	gchar *possible;
+	gchar temp;
+
+	/* replace some easily confused chars */
+	for (i=0; i<len; i++) {
+		temp = cmd[i];
+		if (temp == 'i') {
+			possible = g_strdup (cmd);
+			possible[i] = 'e';
+			g_ptr_array_add (array, possible);
+		}
+		if (temp == 'e') {
+			possible = g_strdup (cmd);
+			possible[i] = 'i';
+			g_ptr_array_add (array, possible);
+		}
+		if (temp == 'i') {
+			possible = g_strdup (cmd);
+			possible[i] = 'o';
+			g_ptr_array_add (array, possible);
+		}
+		if (temp == 'c') {
+			possible = g_strdup (cmd);
+			possible[i] = 's';
+			g_ptr_array_add (array, possible);
+		}
+		if (temp == 's') {
+			possible = g_strdup (cmd);
+			possible[i] = 'c';
+			g_ptr_array_add (array, possible);
+		}
+		if (temp == 's') {
+			possible = g_strdup (cmd);
+			possible[i] = 'z';
+			g_ptr_array_add (array, possible);
+		}
+		if (temp == 'z') {
+			possible = g_strdup (cmd);
+			possible[i] = 's';
+			g_ptr_array_add (array, possible);
+		}
+		if (temp == 'k') {
+			possible = g_strdup (cmd);
+			possible[i] = 'c';
+			g_ptr_array_add (array, possible);
+		}
+		if (temp == 'c') {
+			possible = g_strdup (cmd);
+			possible[i] = 'k';
+			g_ptr_array_add (array, possible);
+		}
+	}
+}
+
+/**
+ * pk_cnf_find_alternatives_truncate:
+ *
+ * Truncate first and last char, so lshall -> lshal
+ **/
+static void
+pk_cnf_find_alternatives_truncate (const gchar *cmd, guint len, GPtrArray *array)
+{
+	guint i;
+	gchar *possible;
+
+	/* truncate last char */
+	possible = g_strdup (cmd);
+	possible[len-1] = '\0';
+	g_ptr_array_add (array, possible);
+
+	/* truncate first char */
+	possible = g_strdup (cmd);
+	for (i=0; i<len-1; i++)
+		possible[i] = possible[i+1];
+	possible[len-1] = '\0';
+	g_ptr_array_add (array, possible);
+}
+
+/**
+ * pk_cnf_find_alternatives_remove_double:
+ *
+ * Remove double chars, e.g. gnome-power-manaager -> gnome-power-manager
+ **/
+static void
+pk_cnf_find_alternatives_remove_double (const gchar *cmd, guint len, GPtrArray *array)
+{
+	guint i, j;
+	gchar *possible;
+
+	for (i=1; i<len; i++) {
+		if (cmd[i-1] == cmd[i]) {
+			possible = g_strdup (cmd);
+			for (j=i; j<len; j++)
+				possible[j] = possible[j+1];
+			possible[len-1] = '\0';
+			g_ptr_array_add (array, possible);
+		}
+	}
+}
+
+/**
+ * pk_cnf_find_alternatives_locale:
+ *
+ * Fix British spellings, e.g. colourdiff -> colordiff
+ **/
+static void
+pk_cnf_find_alternatives_locale (const gchar *cmd, guint len, GPtrArray *array)
+{
+	guint i, j;
+	gchar *possible;
+
+	for (i=1; i<len; i++) {
+		if (cmd[i-1] == 'o' && cmd[i] == 'u') {
+			possible = g_strdup (cmd);
+			for (j=i; j<len; j++)
+				possible[j] = possible[j+1];
+			possible[len-1] = '\0';
+			g_ptr_array_add (array, possible);
+		}
+	}
+}
+
+/**
+ * pk_cnf_find_alternatives_case:
+ *
+ * Remove double chars, e.g. Lshal -> lshal
+ **/
+static void
+pk_cnf_find_alternatives_case (const gchar *cmd, guint len, GPtrArray *array)
+{
+	guint i;
+	gchar *possible;
+	gchar temp;
+
+	for (i=0; i<len; i++) {
+		temp = g_ascii_tolower (cmd[i]);
+		if (temp != cmd[i]) {
+			possible = g_strdup (cmd);
+			possible[i] = temp;
+			g_ptr_array_add (array, possible);
+		}
+		temp = g_ascii_toupper (cmd[i]);
+		if (temp != cmd[i]) {
+			possible = g_strdup (cmd);
+			possible[i] = temp;
+			g_ptr_array_add (array, possible);
+		}
+	}
+
+	/* all lower */
+	possible = g_strdup (cmd);
+	for (i=0; i<len; i++)
+		possible[i] = g_ascii_tolower (cmd[i]);
+	if (strcmp (possible, cmd) != 0)
+		g_ptr_array_add (array, possible);
+	else
+		g_free (possible);
+
+	/* all upper */
+	possible = g_strdup (cmd);
+	for (i=0; i<len; i++)
+		possible[i] = g_ascii_toupper (cmd[i]);
+	if (strcmp (possible, cmd) != 0)
+		g_ptr_array_add (array, possible);
+	else
+		g_free (possible);
+}
+
+/**
+ * pk_cnf_find_alternatives:
+ *
+ * Generate a list of commands it might be
+ **/
+static GPtrArray *
+pk_cnf_find_alternatives (const gchar *cmd, guint len)
+{
+	GPtrArray *array;
+	GPtrArray *possible;
+	GPtrArray *unique;
+	const gchar *cmdt;
+	const gchar *cmdt2;
+	guint i, j;
+	gchar buffer_bin[PK_MAX_PATH_LEN+1];
+	gchar buffer_sbin[PK_MAX_PATH_LEN+1];
+	gboolean ret;
+
+	array = g_ptr_array_new ();
+	possible = g_ptr_array_new ();
+	unique = g_ptr_array_new ();
+	pk_cnf_find_alternatives_swizzle (cmd, len, possible);
+	pk_cnf_find_alternatives_replace (cmd, len, possible);
+	if (len > 3)
+		pk_cnf_find_alternatives_truncate (cmd, len, possible);
+	pk_cnf_find_alternatives_remove_double (cmd, len, possible);
+	pk_cnf_find_alternatives_case (cmd, len, possible);
+	pk_cnf_find_alternatives_locale (cmd, len, possible);
+
+	/* remove duplicates using a helper array */
+	for (i=0; i<possible->len; i++) {
+		cmdt = g_ptr_array_index (possible, i);
+		ret = TRUE;
+		for (j=0; j<unique->len; j++) {
+			cmdt2 = g_ptr_array_index (unique, j);
+			if (strcmp (cmdt, cmdt2) == 0) {
+				ret = FALSE;
+				break;
+			}
+		}
+		/* only add if not duplicate */
+		if (ret)
+			g_ptr_array_add (unique, (gpointer) cmdt);
+	}
+
+	/* ITS4: ignore, source is constant size */
+	strncpy (buffer_bin, "/usr/bin/", PK_MAX_PATH_LEN);
+
+	/* ITS4: ignore, source is constant size */
+	strncpy (buffer_sbin, "/usr/sbin/", PK_MAX_PATH_LEN);
+
+	/* remove any that exist (fast path) */
+	for (i=0; i<unique->len; i++) {
+		cmdt = g_ptr_array_index (unique, i);
+
+		/* ITS4: ignore, size is checked */
+		strncpy (&buffer_bin[9], cmdt, PK_MAX_PATH_LEN-9);
+
+		/* ITS4: ignore, size is checked */
+		strncpy (&buffer_sbin[10], cmdt, PK_MAX_PATH_LEN-10);
+
+		/* does file exist in bindir (common case) */
+		ret = g_file_test (buffer_bin, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_EXECUTABLE);
+		if (ret) {
+			g_ptr_array_add (array, g_strdup (cmdt));
+			continue;
+		}
+
+		/* does file exist in sbindir */
+		ret = g_file_test (buffer_sbin, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_EXECUTABLE);
+		if (ret)
+			g_ptr_array_add (array, g_strdup (cmdt));
+	}
+
+	g_ptr_array_foreach (possible, (GFunc) g_free, NULL);
+	g_ptr_array_free (possible, TRUE);
+	g_ptr_array_free (unique, TRUE);
+	return array;
+}
+
+/**
+ * pk_cnf_progress_cb:
+ **/
+static void
+pk_cnf_progress_cb (PkProgress *progress, PkProgressType type, gpointer data)
+{
+	PkStatusEnum status;
+	const gchar *text = NULL;
+
+	/* status */
+	if (type != PK_PROGRESS_TYPE_STATUS)
+		return;
+
+	g_object_get (progress,
+		      "status", &status,
+		      NULL);
+
+	switch (status) {
+	case PK_STATUS_ENUM_DOWNLOAD_REPOSITORY:
+		/* TRANSLATORS: downloading repo data so we can search */
+		text = _("Downloading details about the software sources.");
+		break;
+	case PK_STATUS_ENUM_DOWNLOAD_FILELIST:
+		/* TRANSLATORS: downloading file lists so we can search */
+		text = _("Downloading filelists (this may take some time to complete).");
+		break;
+	case PK_STATUS_ENUM_WAITING_FOR_LOCK:
+		/* TRANSLATORS: waiting for native lock */
+		text = _("Waiting for package manager lock.");
+		break;
+	case PK_STATUS_ENUM_LOADING_CACHE:
+		/* TRANSLATORS: loading package cache so we can search */
+		text = _("Loading list of packages.");
+		break;
+	default:
+		/* no need to print */
+		text = NULL;
+	}
+
+	/* print to screen, still one line */
+	if (text != NULL)
+		g_print ("\n * %s.. ", text);
+}
+
+/**
+ * pk_cnf_search_file:
+ **/
+static gchar **
+pk_cnf_search_file (PkClient *client_, PkBitfield filter, const gchar *filename, GError **error)
+{
+	gchar **package_ids = NULL;
+	PkResults *results;
+	GPtrArray *array = NULL;
+	guint i;
+	const PkResultItemPackage *item;
+
+	/* get the list of possibles */
+	results = pk_client_search_file_sync (client_, filter, filename, cancellable,
+					      (PkProgressCallback) pk_cnf_progress_cb, NULL, error);
+	if (results == NULL)
+		goto out;
+
+	/* get the packages returned */
+	array = pk_results_get_package_array (results);
+	if (array == NULL) {
+		*error = g_error_new (1, 0, "did not get package struct for %s", filename);
+		goto out;
+	}
+
+	/* copy results into struct */
+	package_ids = g_new0 (gchar *, array->len+1);
+	for (i=0; i<array->len; i++) {
+		item = g_ptr_array_index (array, i);
+		package_ids[i] = g_strdup (item->package_id);
+	}
+out:
+	if (results != NULL)
+		g_object_unref (results);
+	if (array != NULL)
+		g_ptr_array_unref (array);
+	return package_ids;
+}
+
+/**
+ * pk_cnf_find_available:
+ *
+ * Find software we could install
+ **/
+static gboolean
+pk_cnf_find_available (GPtrArray *array, const gchar *prefix, const gchar *cmd)
+{
+	GError *error = NULL;
+	PkBitfield filters;
+	gboolean ret = FALSE;
+	guint i;
+	gchar **package_ids = NULL;
+	gchar *path = NULL;
+	gchar **parts;
+
+	/* do search */
+	path = g_build_filename (prefix, cmd, NULL);
+	egg_debug ("searching for %s", path);
+	filters = pk_bitfield_from_enums (PK_FILTER_ENUM_NOT_INSTALLED, PK_FILTER_ENUM_NEWEST, -1);
+	package_ids = pk_cnf_search_file (client, filters, path, &error);
+	if (package_ids == NULL) {
+		/* TRANSLATORS: we failed to find the package, this shouldn't happen */
+		egg_warning ("%s: %s", _("Failed to search for file"), error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* nothing found */
+	ret = (g_strv_length (package_ids) != 0);
+	if (!ret)
+		goto out;
+
+	/* add all package names */
+	for (i=0; package_ids[i] != NULL; i++) {
+		parts = pk_package_id_split (package_ids[i]);
+		g_ptr_array_add (array, g_strdup (parts[0]));
+		egg_debug ("name=%s", parts[0]);
+		g_strfreev (parts);
+	}
+out:
+	g_strfreev (package_ids);
+	g_free (path);
+	return ret;
+}
+
+/**
+ * pk_cnf_get_policy_from_string:
+ **/
+static PkCnfPolicy
+pk_cnf_get_policy_from_string (const gchar *policy_text)
+{
+	if (policy_text == NULL)
+		return PK_CNF_POLICY_UNKNOWN;
+	if (strcmp (policy_text, "run") == 0)
+		return PK_CNF_POLICY_RUN;
+	if (strcmp (policy_text, "ask") == 0)
+		return PK_CNF_POLICY_ASK;
+	if (strcmp (policy_text, "warn") == 0)
+		return PK_CNF_POLICY_WARN;
+	return PK_CNF_POLICY_UNKNOWN;
+}
+
+/**
+ * pk_cnf_get_policy_from_file:
+ **/
+static PkCnfPolicy
+pk_cnf_get_policy_from_file (GKeyFile *file, const gchar *key)
+{
+	PkCnfPolicy policy;
+	gchar *policy_text;
+	GError *error = NULL;
+
+	/* get from file */
+	policy_text = g_key_file_get_string (file, "CommandNotFound", key, &error);
+	if (policy_text == NULL) {
+		egg_warning ("failed to get key %s: %s", key, error->message);
+		g_error_free (error);
+	}
+
+	/* convert to enum */
+	policy = pk_cnf_get_policy_from_string (policy_text);
+	g_free (policy_text);
+	return policy;
+}
+
+/**
+ * pk_cnf_get_config:
+ **/
+static PkCnfPolicyConfig *
+pk_cnf_get_config (void)
+{
+	GKeyFile *file;
+	gchar *path;
+	gboolean ret;
+	GError *error = NULL;
+	PkCnfPolicyConfig *config;
+
+	/* create */
+	config = g_new0 (PkCnfPolicyConfig, 1);
+
+	/* set defaults if the conf file is not found */
+	config->single_match = PK_CNF_POLICY_UNKNOWN;
+	config->multiple_match = PK_CNF_POLICY_UNKNOWN;
+	config->single_install = PK_CNF_POLICY_UNKNOWN;
+	config->multiple_install = PK_CNF_POLICY_UNKNOWN;
+	config->software_source_search = FALSE;
+	config->locations = NULL;
+
+	/* load file */
+	file = g_key_file_new ();
+	path = g_build_filename (SYSCONFDIR, "PackageKit", "CommandNotFound.conf", NULL);
+	ret = g_key_file_load_from_file (file, path, G_KEY_FILE_NONE, &error);
+	if (!ret) {
+		egg_warning ("failed to open policy: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* get data */
+	config->single_match = pk_cnf_get_policy_from_file (file, "SingleMatch");
+	config->multiple_match = pk_cnf_get_policy_from_file (file, "MultipleMatch");
+	config->single_install = pk_cnf_get_policy_from_file (file, "SingleInstall");
+	config->multiple_install = pk_cnf_get_policy_from_file (file, "MultipleInstall");
+	config->software_source_search = g_key_file_get_boolean (file, "CommandNotFound", "SoftwareSourceSearch", NULL);
+	config->locations = g_key_file_get_string_list (file, "CommandNotFound", "SearchLocations", NULL, NULL);
+
+	/* fallback */
+	if (config->locations == NULL) {
+		egg_warning ("not found SearchLocations, using fallback");
+		config->locations = g_strsplit ("/usr/bin;/usr/sbin", ";", -1);
+	}
+out:
+	g_free (path);
+	g_key_file_free (file);
+	return config;
+}
+
+/**
+ * pk_cnf_spawn_command:
+ **/
+static gboolean
+pk_cnf_spawn_command (const gchar *exec)
+{
+	gboolean ret;
+	GError *error = NULL;
+	ret = g_spawn_command_line_sync (exec, NULL, NULL, NULL, &error);
+	if (!ret) {
+		/* TRANSLATORS: we failed to launch the executable, the error follows */
+		g_print ("%s '%s': %s", _("Failed to launch:"), exec, error->message);
+		g_error_free (error);
+	}
+	return ret;
+}
+
+/**
+ * pk_cnf_sigint_handler:
+ **/
+static void
+pk_cnf_sigint_handler (int sig)
+{
+	egg_debug ("Handling SIGINT");
+
+	/* restore default ASAP, as the cancel might hang */
+	signal (SIGINT, SIG_DFL);
+
+	/* hopefully, cancel client */
+	g_cancellable_cancel (cancellable);
+
+	/* kill ourselves */
+	egg_debug ("Retrying SIGINT");
+	kill (getpid (), SIGINT);
+}
+
+/**
+ * main:
+ **/
+int
+main (int argc, char *argv[])
+{
+	gboolean ret;
+	gboolean verbose = FALSE;
+	GOptionContext *context;
+	GPtrArray *array = NULL;
+	GPtrArray *available = NULL;
+	PkCnfPolicyConfig *config = NULL;
+	guint i;
+	guint len;
+	gchar *text;
+	const gchar *possible;
+
+	const GOptionEntry options[] = {
+		{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
+		  _("Show extra debugging information"), 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);
+	dbus_g_thread_init ();
+	g_type_init ();
+
+	context = g_option_context_new (NULL);
+	/* TRANSLATORS: tool that gets called when the command is not found */
+	g_option_context_set_summary (context, _("PackageKit Command Not Found"));
+	g_option_context_add_main_entries (context, options, NULL);
+	g_option_context_parse (context, &argc, &argv, NULL);
+	g_option_context_free (context);
+
+	egg_debug_init (verbose);
+
+	/* no input */
+	if (argv[1] == NULL)
+		goto out;
+
+	/* do stuff on ctrl-c */
+	signal (SIGINT, pk_cnf_sigint_handler);
+
+	/* get policy config */
+	config = pk_cnf_get_config ();
+	client = pk_client_new ();
+	cancellable = g_cancellable_new ();
+
+	/* get length */
+	len = egg_strlen (argv[1], 1024);
+	if (len < 1)
+		goto out;
+
+	/* generate swizzles */
+	array = pk_cnf_find_alternatives (argv[1], len);
+
+	/* TRANSLATORS: the prefix of all the output telling the user why it's not executing */
+	g_print ("%s ", _("Command not found."));
+
+	/* one exact possibility */
+	if (array->len == 1) {
+		possible = g_ptr_array_index (array, 0);
+		if (config->single_match == PK_CNF_POLICY_WARN) {
+			/* TRANSLATORS: tell the user what we think the command is */
+			g_print ("%s '%s'\n", _("Similar command is:"), possible);
+
+		/* run */
+		} else if (config->single_match == PK_CNF_POLICY_RUN) {
+			pk_cnf_spawn_command (possible);
+
+		/* ask */
+		} else if (config->single_match == PK_CNF_POLICY_ASK) {
+			/* TRANSLATORS: Ask the user if we should run the similar command */
+			text = g_strdup_printf ("%s %s", _("Run similar command:"), possible);
+			ret = pk_console_get_prompt (text, TRUE);
+			if (ret)
+				pk_cnf_spawn_command (possible);
+			g_free (text);
+		}
+		goto out;
+
+	/* multiple choice */
+	} else if (array->len > 1) {
+		if (config->multiple_match == PK_CNF_POLICY_WARN) {
+			/* TRANSLATORS: show the user a list of commands that they could have meant */
+			g_print ("%s:\n", _("Similar commands are:"));
+			for (i=0; i<array->len; i++) {
+				possible = g_ptr_array_index (array, i);
+				g_print ("'%s'\n", possible);
+			}
+
+		/* ask */
+		} else if (config->multiple_match == PK_CNF_POLICY_ASK) {
+			/* TRANSLATORS: show the user a list of commands we could run */
+			g_print ("%s:\n", _("Similar commands are:"));
+			for (i=0; i<array->len; i++) {
+				possible = g_ptr_array_index (array, i);
+				g_print ("%i\t'%s'\n", i+1, possible);
+			}
+
+			/* TRANSLATORS: ask the user to choose a file to run */
+			i = pk_console_get_number (_("Please choose a command to run"), array->len);
+
+			/* run command */
+			possible = g_ptr_array_index (array, i);
+			pk_cnf_spawn_command (possible);
+		}
+		goto out;
+
+	/* only search using PackageKit if configured to do so */
+	} else if (config->software_source_search) {
+		available = g_ptr_array_new ();
+		pk_cnf_find_available (available, "/usr/bin", argv[1]);
+		pk_cnf_find_available (available, "/usr/sbin", argv[1]);
+		pk_cnf_find_available (available, "/bin", argv[1]);
+		pk_cnf_find_available (available, "/sbin", argv[1]);
+		if (available->len == 1) {
+			possible = g_ptr_array_index (available, 0);
+			if (config->single_install == PK_CNF_POLICY_WARN) {
+				/* TRANSLATORS: tell the user what package provides the command */
+				g_print ("%s '%s'\n", _("The package providing this file is:"), possible);
+
+			/* ask */
+			} else if (config->single_install == PK_CNF_POLICY_ASK) {
+				/* TRANSLATORS: as the user if we want to install a package to provide the command */
+				text = g_strdup_printf (_("Install package '%s' to provide command '%s'?"), possible, argv[1]);
+				ret = pk_console_get_prompt (text, FALSE);
+				g_free (text);
+				if (ret) {
+					text = g_strdup_printf ("pkcon install %s", possible);
+					ret = pk_cnf_spawn_command (text);
+					if (ret)
+						pk_cnf_spawn_command (argv[1]);
+					g_free (text);
+				}
+
+			/* install */
+			} else if (config->single_install == PK_CNF_POLICY_INSTALL) {
+				text = g_strdup_printf ("pkcon install %s", possible);
+				pk_cnf_spawn_command (text);
+				g_free (text);
+			}
+			goto out;
+		} else if (available->len > 1) {
+			if (config->multiple_install == PK_CNF_POLICY_WARN) {
+				/* TRANSLATORS: Show the user a list of packages that provide this command */
+				g_print ("%s\n", _("Packages providing this file are:"));
+				for (i=0; i<available->len; i++) {
+					possible = g_ptr_array_index (available, i);
+					g_print ("'%s'\n", possible);
+				}
+
+			/* ask */
+			} else if (config->multiple_install == PK_CNF_POLICY_ASK) {
+				/* TRANSLATORS: Show the user a list of packages that they can install to provide this command */
+				g_print ("%s:\n", _("Suitable packages are:"));
+				for (i=0; i<available->len; i++) {
+					possible = g_ptr_array_index (available, i);
+					g_print ("%i\t'%s'\n", i+1, possible);
+				}
+
+				/* get selection */
+				/* TRANSLATORS: ask the user to choose a file to install */
+				i = pk_console_get_number (_("Please choose a package to install"), available->len);
+
+				/* run command */
+				possible = g_ptr_array_index (available, i);
+				text = g_strdup_printf ("pkcon install %s", possible);
+				ret = pk_cnf_spawn_command (text);
+				if (ret)
+					pk_cnf_spawn_command (argv[1]);
+				g_free (text);
+			}
+			goto out;
+		}
+	}
+
+	g_print ("\n");
+
+out:
+	g_object_unref (client);
+	g_object_unref (cancellable);
+	if (config != NULL) {
+		g_strfreev (config->locations);
+		g_free (config);
+	}
+	if (array != NULL) {
+		g_ptr_array_foreach (array, (GFunc) g_free, NULL);
+		g_ptr_array_free (array, TRUE);
+	}
+	if (available != NULL) {
+		g_ptr_array_foreach (available, (GFunc) g_free, NULL);
+		g_ptr_array_free (available, TRUE);
+	}
+
+	return 0;
+}
+
commit 5c203629a1d0a2dae02dc680210cc17b2e64266b
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 23:04:04 2009 +0100

    glib2: split out pk-client-sync.[c|h] from the shared console code

diff --git a/client/Makefile.am b/client/Makefile.am
index d6feab0..94a3ef0 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -77,10 +77,16 @@ libpkconsole_a_SOURCES =				\
 	pk-task-text.h					\
 	pk-console-shared.c				\
 	pk-console-shared.h				\
+	pk-client-sync.c				\
+	pk-client-sync.h				\
 	pk-progress-bar.c				\
 	pk-progress-bar.h				\
 	$(NULL)
 
+libpkconsole_a_CFLAGS =					\
+	$(WARNINGFLAGS_C)				\
+	$(NULL)
+
 pkcon_test_SOURCES =					\
 	pk-console-test.c				\
 	$(NULL)
diff --git a/client/pk-client-sync.c b/client/pk-client-sync.c
new file mode 100644
index 0000000..1f91e4d
--- /dev/null
+++ b/client/pk-client-sync.c
@@ -0,0 +1,133 @@
+/* -*- 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 <stdio.h>
+#include <gio/gio.h>
+#include <glib.h>
+#include <packagekit-glib2/packagekit.h>
+
+#include "egg-debug.h"
+
+#include "pk-client-sync.h"
+
+/* tiny helper to help us do the async operation */
+typedef struct {
+	GError		**error;
+	GMainLoop	*loop;
+	PkResults	*results;
+} PkClientHelper;
+
+/**
+ * pk_client_generic_finish_sync:
+ **/
+static void
+pk_client_generic_finish_sync (PkClient *client, GAsyncResult *res, PkClientHelper *helper)
+{
+	PkResults *results;
+	/* get the result */
+	results = pk_client_generic_finish (client, res, helper->error);
+	if (results != NULL) {
+		g_object_unref (results);
+		helper->results = g_object_ref (G_OBJECT (results));
+	}
+	g_main_loop_quit (helper->loop);
+}
+
+/**
+ * pk_client_resolve_sync:
+ * @client: a valid #PkClient instance
+ * @error: A #GError or %NULL
+ *
+ * Resolves a package to a Package ID.
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_resolve_sync (PkClient *client, PkFilterEnum filter, gchar **packages, GCancellable *cancellable,
+			PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_resolve_async (client, filter, packages, cancellable, progress_callback, progress_user_data,
+				 (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_client_search_file_sync:
+ * @client: a valid #PkClient instance
+ * @error: A #GError or %NULL
+ *
+ * Resolves a filename to multiple Package IDs.
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+PkResults *
+pk_client_search_file_sync (PkClient *client, PkFilterEnum filter, const gchar *filename, GCancellable *cancellable,
+			    PkProgressCallback progress_callback, gpointer progress_user_data, GError **error)
+{
+	PkClientHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkClientHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_search_file_async (client, filter, filename, cancellable, progress_callback, progress_user_data,
+				     (GAsyncReadyCallback) pk_client_generic_finish_sync, helper);
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
diff --git a/client/pk-client-sync.h b/client/pk-client-sync.h
new file mode 100644
index 0000000..f064439
--- /dev/null
+++ b/client/pk-client-sync.h
@@ -0,0 +1,46 @@
+/* -*- 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.
+ */
+
+#ifndef __PK_CLIENT_SYNC_H
+#define __PK_CLIENT_SYNC_H
+
+#include <glib.h>
+#include <packagekit-glib2/packagekit.h>
+
+PkResults	*pk_client_resolve_sync			(PkClient		*client,
+							 PkFilterEnum		 filter,
+							 gchar			**packages,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+PkResults	*pk_client_search_file_sync		(PkClient		*client,
+							 PkFilterEnum		 filter,
+							 const gchar		*filename,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GError			**error);
+
+#endif /* __PK_CLIENT_SYNC_H */
+
+
+
diff --git a/client/pk-console-shared.c b/client/pk-console-shared.c
index 3733854..b2359f2 100644
--- a/client/pk-console-shared.c
+++ b/client/pk-console-shared.c
@@ -28,6 +28,7 @@
 
 #include "egg-debug.h"
 
+#include "pk-client-sync.h"
 #include "pk-console-shared.h"
 
 /**
@@ -100,67 +101,6 @@ pk_console_get_prompt (const gchar *question, gboolean defaultyes)
 	return ret;
 }
 
-/* tiny helper to help us do the async operation */
-typedef struct {
-	GError		**error;
-	GMainLoop	*loop;
-	PkResults	*results;
-} PkConsoleSyncHelper;
-
-/**
- * pk_console_sync_resolve_cb:
- **/
-static void
-pk_console_sync_resolve_cb (PkClient *client, GAsyncResult *res, PkConsoleSyncHelper *helper)
-{
-	PkResults *results;
-	/* get the result */
-	results = pk_client_generic_finish (client, res, helper->error);
-	if (results != NULL) {
-		g_object_unref (results);
-		helper->results = g_object_ref (G_OBJECT (results));
-	}
-	g_main_loop_quit (helper->loop);
-}
-
-/**
- * pk_console_sync_resolve:
- * @console: a valid #PkClient instance
- * @error: A #GError or %NULL
- *
- * Resolves a package to a Package ID.
- * Warning: this function is synchronous, and may block. Do not use it in GUI
- * applications.
- *
- * Return value: a %PkResults object, or NULL for error
- **/
-static PkResults *
-pk_console_sync_resolve (PkClient *client, PkFilterEnum filter, gchar **packages, GError **error)
-{
-	PkConsoleSyncHelper *helper;
-	PkResults *results;
-
-	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-	/* create temp object */
-	helper = g_new0 (PkConsoleSyncHelper, 1);
-	helper->loop = g_main_loop_new (NULL, FALSE);
-	helper->error = error;
-
-	/* run async method */
-	pk_client_resolve_async (client, filter, packages, NULL, NULL, NULL,
-				 (GAsyncReadyCallback) pk_console_sync_resolve_cb, helper);
-	g_main_loop_run (helper->loop);
-
-	results = helper->results;
-
-	/* free temp object */
-	g_main_loop_unref (helper->loop);
-	g_free (helper);
-
-	return results;
-}
-
 /**
  * pk_console_resolve_package:
  **/
@@ -185,7 +125,7 @@ pk_console_resolve_package (PkClient *client, PkBitfield filter, const gchar *pa
 	tmp = g_strsplit (package, ",", -1);
 
 	/* get the list of possibles */
-	results = pk_console_sync_resolve (client, filter, tmp, error);
+	results = pk_client_resolve_sync (client, filter, tmp, NULL, NULL, NULL, error);
 	if (results == NULL)
 		goto out;
 
diff --git a/client/pk-console-test.c b/client/pk-console-test.c
index 186581d..39fb965 100644
--- a/client/pk-console-test.c
+++ b/client/pk-console-test.c
@@ -999,7 +999,9 @@ main (int argc, char *argv[])
 	control = pk_control_new ();
 	ret = pk_control_get_properties_sync (control, &error);
 	if (!ret) {
-		g_print ("Failed to startup: %s\n", error->message);
+		/* TRANSLATORS: we failed to contact the daemon */
+		g_print ("%s: %s\n", _("Failed to contact PackageKit"), error->message);
+		g_error_free (error);
 		goto out_last;
 	}
 
commit 897beb8e5409d6c92f669a45dc37b18980a9c485
Author: shanky <shanky at fedoraproject.org>
Date:   Mon Sep 7 19:18:54 2009 +0000

    Sending translation for Kannada

diff --git a/po/kn.po b/po/kn.po
index 081ac30..7acc3e6 100644
--- a/po/kn.po
+++ b/po/kn.po
@@ -1,283 +1,291 @@
-# translation of packagekit.master.kn.po to Kannada
+# translation of packagekit.master.PackageKit.po to Kannada
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 #
 # Shankar Prasad <svenkate at redhat.com>, 2009.
 msgid ""
 msgstr ""
-"Project-Id-Version: packagekit.master.kn\n"
+"Project-Id-Version: packagekit.master.PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-01 02:36+0000\n"
-"PO-Revision-Date: 2009-09-07 17:40+0530\n"
+"POT-Creation-Date: 2009-09-07 19:02+0000\n"
+"PO-Revision-Date: 2009-09-08 00:46+0530\n"
 "Last-Translator: Shankar Prasad <svenkate at redhat.com>\n"
 "Language-Team: Kannada <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"
+"X-Generator: KBabel 1.11.4\n"
 
 #. TRANSLATORS: this is an atomic transaction
-#: ../client/pk-console.c:235
+#: ../client/pk-console.c:237 ../client/pk-console-test.c:146
 msgid "Transaction"
 msgstr "ವ್ಯವಹಾರ"
 
 #. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:237
+#: ../client/pk-console.c:239 ../client/pk-console-test.c:148
 msgid "System time"
 msgstr "ಗಣಕದ ಸಮಯ"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:239
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:150
 msgid "Succeeded"
 msgstr "ಯಶಸ್ವಿಯಾಗಿದೆ"
 
-#: ../client/pk-console.c:239
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:150
 msgid "True"
 msgstr "ಸತ್ಯ"
 
-#: ../client/pk-console.c:239
+#: ../client/pk-console.c:241 ../client/pk-console-test.c:150
 msgid "False"
 msgstr "ಅಸತ್ಯ"
 
 #. 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:243 ../client/pk-console-test.c:152
+#: ../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:248 ../client/pk-console-test.c:157
 msgid "Duration"
 msgstr "ಕಾಲಾವಧಿ"
 
-#: ../client/pk-console.c:246
+#: ../client/pk-console.c:248 ../client/pk-console-test.c:157
 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:252 ../client/pk-console-test.c:161
+#: ../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:254 ../client/pk-console-test.c:163
 msgid "User ID"
 msgstr "ಬಳಕೆದಾರ ID"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:259
+#: ../client/pk-console.c:261 ../client/pk-console-test.c:170
 msgid "Username"
 msgstr "ಬಳಕೆದಾರ ಹೆಸರು"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:263
+#: ../client/pk-console.c:265 ../client/pk-console-test.c:174
 msgid "Real name"
 msgstr "ನಿಜವಾದ ಹೆಸರು"
 
-#: ../client/pk-console.c:271
+#: ../client/pk-console.c:273 ../client/pk-console-test.c:182
 msgid "Affected packages:"
 msgstr "ಪರಿಣಾಮ ಬೀರಲ್ಪಡುವ ಪ್ಯಾಕೇಜಿಗಳು:"
 
-#: ../client/pk-console.c:273
+#: ../client/pk-console.c:275 ../client/pk-console-test.c:184
 msgid "Affected packages: None"
 msgstr "ಪರಿಣಾಮ ಬೀರಲ್ಪಡುವ ಪ್ಯಾಕೇಜಿಗಳು: ಯಾವುದೂ ಇಲ್ಲ"
 
 #. TRANSLATORS: When processing, we might have to remove other dependencies
-#: ../client/pk-console.c:334
+#: ../client/pk-console.c:336 ../client/pk-task-text.c:220
 msgid "The following packages have to be removed:"
 msgstr "ಈ ಕೆಳಗಿನ ಪ್ಯಾಕೇಜುಗಳನ್ನು ತೆಗೆದು ಹಾಕಬೇಕು:"
 
 #. TRANSLATORS: When processing, we might have to install other dependencies
-#: ../client/pk-console.c:337
+#: ../client/pk-console.c:339 ../client/pk-task-text.c:225
 msgid "The following packages have to be installed:"
 msgstr "ಈ ಕೆಳಗಿನ ಪ್ಯಾಕೇಜುಗಳನ್ನು ಅನುಸ್ಥಾಪಿಸಬೇಕು:"
 
 #. TRANSLATORS: When processing, we might have to update other dependencies
-#: ../client/pk-console.c:340
+#: ../client/pk-console.c:342 ../client/pk-task-text.c:230
 msgid "The following packages have to be updated:"
 msgstr "ಈ ಕೆಳಗಿನ ಪ್ಯಾಕೇಜುಗಳನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಬೇಕು:"
 
 #. TRANSLATORS: When processing, we might have to reinstall other dependencies
-#: ../client/pk-console.c:343
+#: ../client/pk-console.c:345 ../client/pk-task-text.c:235
 msgid "The following packages have to be reinstalled:"
 msgstr "ಈ ಕೆಳಗಿನ ಪ್ಯಾಕೇಜುಗಳನ್ನು ಮರಳಿ ಅನುಸ್ಥಾಪಿಸಬೇಕು:"
 
 #. TRANSLATORS: When processing, we might have to downgrade other dependencies
-#: ../client/pk-console.c:346
+#: ../client/pk-console.c:348 ../client/pk-task-text.c:240
 msgid "The following packages have to be downgraded:"
 msgstr "ಈ ಕೆಳಗಿನ ಪ್ಯಾಕೇಜುಗಳ ಆವೃತ್ತಿಯನ್ನು ಕೆಳಕ್ಕೆ ಇಳಿಸಲಾಗುತ್ತದೆ:"
 
 #. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:360
+#: ../client/pk-console.c:362 ../client/pk-console-test.c:204
 msgid "Distribution"
 msgstr "ವಿತರಣೆ"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:362
+#: ../client/pk-console.c:364 ../client/pk-console-test.c:206
 msgid "Type"
 msgstr "ಬಗೆ"
 
 #. 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
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:366 ../client/pk-console.c:389
+#: ../client/pk-console-test.c:208 ../client/pk-console-test.c:229
 msgid "Summary"
 msgstr "ಸಾರಾಂಶ"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:376
+#: ../client/pk-console.c:378 ../client/pk-console-test.c:218
 msgid "Category"
-msgstr "ಪಂಗಡ"
+msgstr "ವರ್ಗ"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:378
+#: ../client/pk-console.c:380 ../client/pk-console-test.c:220
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:381
+#: ../client/pk-console.c:383 ../client/pk-console-test.c:223
 msgid "Parent"
 msgstr "ಮೂಲ"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:384
+#: ../client/pk-console.c:386 ../client/pk-console-test.c:226
 msgid "Name"
 msgstr "ಹೆಸರು"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:390
+#: ../client/pk-console.c:392 ../client/pk-console-test.c:232
 msgid "Icon"
 msgstr "ಚಿಹ್ನೆ"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:405
+#: ../client/pk-console.c:407 ../client/pk-console-test.c:246
 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:407 ../src/pk-polkit-action-lookup.c:352
+#: ../client/pk-console.c:409 ../client/pk-console-test.c:252
+#: ../client/pk-task-text.c:101 ../client/pk-task-text.c:153
+#: ../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:410
+#: ../client/pk-console.c:412 ../client/pk-console-test.c:255
 msgid "Updates"
 msgstr "ಅಪ್‍ಡೇಟ್‍ಗಳು"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:414
+#: ../client/pk-console.c:416 ../client/pk-console-test.c:259
 msgid "Obsoletes"
 msgstr "ಪ್ರಚಲಿತವಿಲ್ಲದವು"
 
 #. TRANSLATORS: details about the update, the vendor URLs
-#: ../client/pk-console.c:418
+#: ../client/pk-console.c:420 ../client/pk-console-test.c:263
+#: ../client/pk-task-text.c:154
 msgid "Vendor"
 msgstr "ಒದಗಿಸಿದವರು"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:422
+#: ../client/pk-console.c:424 ../client/pk-console-test.c:267
 msgid "Bugzilla"
 msgstr "ಬಗ್‌ಝಿಲ್ಲಾ"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:426
+#: ../client/pk-console.c:428 ../client/pk-console-test.c:271
 msgid "CVE"
 msgstr "CVE"
 
 #. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:430
+#: ../client/pk-console.c:432 ../client/pk-console-test.c:275
 msgid "Restart"
-msgstr "ಮರಳಿ ಆರಂಭಿಸು"
+msgstr "ಪುನರಾರಂಭಿಸು"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:434
+#: ../client/pk-console.c:436 ../client/pk-console-test.c:279
 msgid "Update text"
 msgstr "ಪಠ್ಯವನ್ನು ಅಪ್‌ಡೇಟ್‌ ಮಾಡಿ"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:438
+#: ../client/pk-console.c:440 ../client/pk-console-test.c:283
 msgid "Changes"
 msgstr "ಬದಲಾವಣೆಗಳು"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:442
+#: ../client/pk-console.c:444 ../client/pk-console-test.c:287
 msgid "State"
 msgstr "ಸ್ಥಿತಿ"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:447
+#: ../client/pk-console.c:449 ../client/pk-console-test.c:292
 msgid "Issued"
 msgstr "ಒದಗಿಸಲಾದವರು"
 
 #. TRANSLATORS: details about the update, date the update was updated
-#: ../client/pk-console.c:452
+#: ../client/pk-console.c:454 ../client/pk-console-test.c:297
 msgid "Updated"
 msgstr "ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲಾಗಿದ್ದು"
 
 #. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:472
+#: ../client/pk-console.c:474 ../client/pk-console-test.c:315
 msgid "Enabled"
-msgstr "ಶಕ್ತಗೊಂಡ"
+msgstr "ಸಕ್ರಿಯಗೊಂಡ"
 
 #. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:475
+#: ../client/pk-console.c:477 ../client/pk-console-test.c:318
 msgid "Disabled"
 msgstr "ಅಶಕ್ತಗೊಂಡ"
 
-#: ../client/pk-console.c:552 ../client/pk-console.c:554
+#: ../client/pk-console.c:554 ../client/pk-console.c:556
 msgid "Percentage"
 msgstr "ಪ್ರತಿಶತ"
 
-#: ../client/pk-console.c:554
+#: ../client/pk-console.c:556
 msgid "Unknown"
 msgstr "ಗೊತ್ತಿರದ"
 
 #. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:596
+#: ../client/pk-console.c:598 ../client/pk-console-test.c:340
 msgid "System restart required by:"
 msgstr "ಇದಕ್ಕಾಗಿ ಗಣಕವನ್ನು ಮರಳಿ ಆರಂಭಿಸುವ ಅಗತ್ಯವಿದೆ:"
 
 #. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:599
+#: ../client/pk-console.c:601 ../client/pk-console-test.c:343
 msgid "Session restart required:"
 msgstr "ಇದಕ್ಕಾಗಿ ಅಧಿವೇಶವನವನ್ನು ಮರಳಿ ಆರಂಭಿಸುವ ಅಗತ್ಯವಿದೆ:"
 
 #. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:602
+#: ../client/pk-console.c:604 ../client/pk-console-test.c:346
 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:605
+#: ../client/pk-console.c:607 ../client/pk-console-test.c:349
 msgid "Session restart (security) required:"
 msgstr "ಇದಕ್ಕಾಗಿ ಅಧಿವೇಶವನವನ್ನು ಮರಳಿ ಆರಂಭಿಸುವ(ಸುರಕ್ಷತೆ) ಅಗತ್ಯವಿದೆ:"
 
 #. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:608
+#: ../client/pk-console.c:610 ../client/pk-console-test.c:352
 msgid "Application restart required by:"
 msgstr "ಇದಕ್ಕಾಗಿ ಅನ್ವಯವನ್ನು ಮರಳಿ ಆರಂಭಿಸುವ ಅಗತ್ಯವಿದೆ:"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:663
+#: ../client/pk-console.c:665 ../client/pk-console-test.c:541
 msgid "Please restart the computer to complete the update."
 msgstr "ಅಪ್‌ಡೇಟ್ ಅನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ದಯವಿಟ್ಟು ಗಣಕವನ್ನು ಮರಳಿ ಆರಂಭಿಸಿ."
 
 #. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:666
+#: ../client/pk-console.c:668 ../client/pk-console-test.c:544
 msgid "Please logout and login to complete the update."
 msgstr "ಅಪ್‌ಡೇಟ್ ಅನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ದಯವಿಟ್ಟು ನಿರ್ಗಮಿಸಿ ನಂತರ ಮರಳಿ ಪ್ರವೇಶಿಸಿ."
 
 #. TRANSLATORS: a package needs to restart the application
-#: ../client/pk-console.c:669
+#: ../client/pk-console.c:671
 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:672
+#: ../client/pk-console.c:674 ../client/pk-console-test.c:547
 msgid ""
 "Please restart the computer to complete the update as important security "
 "updates have been installed."
@@ -286,7 +294,7 @@ msgstr ""
 "ಗಣಕವನ್ನು ಮರಳಿ ಆರಂಭಿಸಿ."
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:675
+#: ../client/pk-console.c:677 ../client/pk-console-test.c:550
 msgid ""
 "Please logout and login to complete the update as important security updates "
 "have been installed."
@@ -295,440 +303,507 @@ msgstr ""
 "ದಯವಿಟ್ಟು ನಿರ್ಗಮಿಸಿ ನಂತರ ಮರಳಿ ಪ್ರವೇಶಿಸಿ."
 
 #. TRANSLATORS: The package is already installed on the system
-#: ../client/pk-console.c:807
+#: ../client/pk-console.c:809
 #, 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:815
+#: ../client/pk-console.c:817
 #, 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: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
+#: ../client/pk-console.c:843 ../client/pk-console.c:891
+#: ../client/pk-console.c:915 ../client/pk-console.c:963
+#: ../client/pk-console.c:1059 ../client/pk-console.c:1172
+#: ../client/pk-console.c:1233 ../client/pk-tools-common.c:132
+#: ../client/pk-tools-common.c:151 ../client/pk-tools-common.c:159
 #, 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
+#. ask the user
+#: ../client/pk-console.c:875 ../client/pk-console.c:947
+#: ../client/pk-console.c:1265 ../client/pk-task-text.c:299
 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
+#: ../client/pk-console.c:880 ../client/pk-console.c:952
 msgid "The package install was canceled!"
 msgstr "ಪ್ಯಾಕೇಜನ್ನು ಅನುಸ್ಥಾಪನೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ!"
 
 #. TRANSLATORS: There was an error installing the packages. The detailed error follows
-#: ../client/pk-console.c:897 ../client/pk-console.c:1631
+#: ../client/pk-console.c:899 ../client/pk-console.c:1633
 #, 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:969
+#: ../client/pk-console.c:971
 #, 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:1025
+#: ../client/pk-console.c:1027
 #, 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:1048 ../client/pk-console.c:1086
-#: ../client/pk-console.c:1115
+#: ../client/pk-console.c:1050 ../client/pk-console.c:1088
+#: ../client/pk-console.c:1117
 #, c-format
 msgid "This tool could not remove the packages: %s"
 msgstr "ಪ್ಯಾಕೇಜುಗಳನ್ನು ತೆಗೆದು ಹಾಕಲು ಈ ಉಪಕರಣದಿಂದ ಸಾಧ್ಯವಾಗಿಲ್ಲ: %s"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:1101
+#: ../client/pk-console.c:1103
 msgid "Proceed with additional packages?"
 msgstr "ಹೆಚ್ಚುವರಿ ಪ್ಯಾಕೇಜುಗಳೊಂದಿಗೆ ಮುಂದುವರೆಯಬೇಕೆ?"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:1106
+#: ../client/pk-console.c:1108
 msgid "The package removal was canceled!"
 msgstr "ಪ್ಯಾಕೇಜನ್ನು ತೆಗೆದುಹಾಕುವಿಕೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ!"
 
 #. TRANSLATORS: The package name was not found in any software sources
-#: ../client/pk-console.c:1147
+#: ../client/pk-console.c:1149
 #, 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:1178
+#: ../client/pk-console.c:1180
 #, 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:1210 ../client/pk-console.c:1222
-#: ../client/pk-console.c:1277
+#: ../client/pk-console.c:1212 ../client/pk-console.c:1224
+#: ../client/pk-console.c:1279
 #, 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
+#: ../client/pk-console.c:1270
 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:1301 ../client/pk-console.c:1309
+#: ../client/pk-console.c:1303 ../client/pk-console.c:1311
 #, 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:1331 ../client/pk-console.c:1339
+#: ../client/pk-console.c:1333 ../client/pk-console.c:1341
 #, 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:1361 ../client/pk-console.c:1369
+#: ../client/pk-console.c:1363 ../client/pk-console.c:1371
 #, 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:1391
+#: ../client/pk-console.c:1393
 #, 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:1399
+#: ../client/pk-console.c:1401
 #, 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:1421
+#: ../client/pk-console.c:1423
 #, c-format
 msgid "File already exists: %s"
 msgstr "ಕಡತವು ಈಗಾಗಲೆ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ: %s"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1426 ../client/pk-console.c:1482
-#: ../client/pk-console.c:1557
+#: ../client/pk-console.c:1428 ../client/pk-console.c:1484
+#: ../client/pk-console.c:1559
 msgid "Getting package list"
 msgstr "ಪ್ಯಾಕೇಜಿನ ಪಟ್ಟಿಯನ್ನು ಪಡೆಯಲಾಗುತ್ತಿದೆ"
 
 #. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
-#: ../client/pk-console.c:1432 ../client/pk-console.c:1488
-#: ../client/pk-console.c:1563
+#: ../client/pk-console.c:1434 ../client/pk-console.c:1490
+#: ../client/pk-console.c:1565
 #, 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:1443
+#: ../client/pk-console.c:1445
 #, c-format
 msgid "Failed to save to disk"
 msgstr "ಡಿಸ್ಕಿಗೆ ಉಳಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ"
 
 #. TRANSLATORS: There was an error getting the list. The filename follows
-#: ../client/pk-console.c:1477 ../client/pk-console.c:1552
+#: ../client/pk-console.c:1479 ../client/pk-console.c:1554
 #, c-format
 msgid "File does not exist: %s"
 msgstr "ಕಡತವು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ: %s"
 
 #. TRANSLATORS: header to a list of packages newly added
-#: ../client/pk-console.c:1509
+#: ../client/pk-console.c:1511
 msgid "Packages to add"
 msgstr "ಸೇರಿಸಬೇಕಿರುವ ಪ್ಯಾಕೇಜುಗಳು"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1517
+#: ../client/pk-console.c:1519
 msgid "Packages to remove"
 msgstr "ತೆಗೆದು ಹಾಕಬೇಕಿರುವ ಪ್ಯಾಕೇಜುಗಳು"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1585
+#: ../client/pk-console.c:1587
 #, c-format
 msgid "No new packages need to be installed"
 msgstr "ಯಾವುದೆ ಹೊಸ ಪ್ಯಾಕೇಜುಗಳನ್ನು ಅನುಸ್ಥಾಪಿಸಲಾಗುವುದಿಲ್ಲ"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1591
+#: ../client/pk-console.c:1593
 msgid "To install"
 msgstr "ಅನುಸ್ಥಾಪಿಸಲು"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1603
+#: ../client/pk-console.c:1605
 msgid "Searching for package: "
 msgstr "ಪ್ಯಾಕೇಜಿಗಾಗಿ ಹುಡುಕಲಾಗುತ್ತಿದೆ: "
 
 #. TRANSLATORS: package was not found -- this is the end of a string ended in ...
-#: ../client/pk-console.c:1607
+#: ../client/pk-console.c:1609
 msgid "not found."
 msgstr "ಕಂಡುಬಂದಿಲ್ಲ."
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1618
+#: ../client/pk-console.c:1620
 #, 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:1624
-#: ../contrib/debuginfo-install/pk-debuginfo-install.c:886
+#: ../client/pk-console.c:1626
+#: ../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:1660
+#: ../client/pk-console.c:1662
 #, 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:1668
+#: ../client/pk-console.c:1670
 #, 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:1699
+#: ../client/pk-console.c:1701
 msgid "Error:"
 msgstr "ದೋಷ:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1713
+#: ../client/pk-console.c:1715 ../client/pk-console-test.c:369
 msgid "Package description"
 msgstr "ಪ್ಯಾಕೇಜ್ ವಿವರಣೆ"
 
 #. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:1729
+#: ../client/pk-console.c:1731 ../client/pk-console-test.c:387
 msgid "Message:"
 msgstr "ಸಂದೇಶ:"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1757
+#: ../client/pk-console.c:1759 ../client/pk-console-test.c:406
 msgid "Package files"
 msgstr "ಪ್ಯಾಕೇಜ್ ಕಡತಗಳು"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1765
+#: ../client/pk-console.c:1767 ../client/pk-console-test.c:401
 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:1788
+#: ../client/pk-console.c:1790
 msgid "Repository signature required"
 msgstr "ರೆಪೋಸಿಟರಿ ಸಹಿಯ ಅಗತ್ಯವಿದೆ"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
-#: ../client/pk-console.c:1798
+#. ask the user
+#: ../client/pk-console.c:1800 ../client/pk-task-text.c:113
 msgid "Do you accept this signature?"
 msgstr "ಸಹಿಯನ್ನು ನೀವು ಒಪ್ಪಿಕೊಳ್ಳುತ್ತೀರೆ?"
 
 #. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1802
+#: ../client/pk-console.c:1804 ../client/pk-task-text.c:117
 msgid "The signature was not accepted."
 msgstr "ಸಹಿಯನ್ನು ಒಪ್ಪಿಕೊಳ್ಳಲಾಗಿಲ್ಲ."
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1836
+#: ../client/pk-console.c:1838
 msgid "End user license agreement required"
 msgstr "ಎಂಡ್ ಯೂಸರ್ ಪರವಾನಗಿ ಒಪ್ಪಂದದ ಅಗತ್ಯವಿದೆ"
 
 #. TRANSLATORS: This a prompt asking the user to agree to the license
-#: ../client/pk-console.c:1843
+#: ../client/pk-console.c:1845
 msgid "Do you agree to this license?"
 msgstr "ನೀವು ಈ ಪರವಾನಗಿಯನ್ನು ಒಪ್ಪುತ್ತೀರೆ?"
 
 #. TRANSLATORS: This is where the user declined the license
-#: ../client/pk-console.c:1847
+#: ../client/pk-console.c:1849
 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:1876
+#: ../client/pk-console.c:1878 ../client/pk-console-test.c:819
 msgid "The daemon crashed mid-transaction!"
 msgstr "ವ್ಯವಹಾರದ ಮಧ್ಯದಲ್ಲಿ ಡೀಮನ್ ಕುಸಿದು ಹೋಗಿದೆ!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1929
+#: ../client/pk-console.c:1931 ../client/pk-console-test.c:853
 msgid "PackageKit Console Interface"
 msgstr "PackageKit ಕನ್ಸೋಲ್ ಸಂಪರ್ಕಸಾಧನ"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1931
+#: ../client/pk-console.c:1933 ../client/pk-console-test.c:855
 msgid "Subcommands:"
 msgstr "ಉಪಆಜ್ಞೆಗಳು:"
 
 #. TRANSLATORS: command line argument, if we should show debugging information
 #. TRANSLATORS: if we should show debugging data
-#: ../client/pk-console.c:2024 ../client/pk-generate-pack.c:185
-#: ../client/pk-monitor.c:128
+#: ../client/pk-console.c:2026 ../client/pk-console-test.c:969
+#: ../client/pk-generate-pack.c:185 ../client/pk-generate-pack-test.c:225
+#: ../client/pk-monitor.c:128 ../client/pk-monitor-test.c:282
 #: ../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:2027 ../client/pk-monitor.c:130
+#: ../client/pk-console.c:2029 ../client/pk-console-test.c:972
+#: ../client/pk-monitor.c:130 ../client/pk-monitor-test.c:284
 msgid "Show the program version and exit"
 msgstr "ಪ್ರೊಗ್ರಾಂ ಆವೃತ್ತಿಯನ್ನು ತೋರಿಸಿ ನಿರ್ಗಮಿಸು"
 
 #. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:2030
+#: ../client/pk-console.c:2032 ../client/pk-console-test.c:975
 msgid "Set the filter, e.g. installed"
 msgstr "ಫಿಲ್ಟರನ್ನು ಸಿದ್ಧಗೊಳಿಸಿ, ಉದಾ. ಅನುಸ್ಥಾಪಿಸಲಾದ"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:2033
+#: ../client/pk-console.c:2035 ../client/pk-console-test.c:978
 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:2060
+#: ../client/pk-console.c:2062
 msgid "This tool could not connect to system DBUS."
 msgstr "ವ್ಯವಸ್ಥೆಯ DBUS ನೊಂದಿಗೆ ಸಂಪರ್ಕಸಾಧಿಸಲುಈ ಉಪಕರಣದಿಂದ ಸಾಧ್ಯವಾಗಿಲ್ಲ."
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:2150
+#: ../client/pk-console.c:2152 ../client/pk-console-test.c:1053
 msgid "The filter specified was invalid"
 msgstr "ಸೂಚಿಸಲಾದ ಫಿಲ್ಟರ್ ಅಮಾನ್ಯವಾಗಿದೆ"
 
 #. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:2169
+#: ../client/pk-console.c:2171 ../client/pk-console-test.c:1072
 msgid "A search type is required, e.g. name"
 msgstr "ಒಂದು ಹುಡುಕು ಬಗೆಯ ಅಗತ್ಯವಿದೆ, ಉದಾ. ಹೆಸರು"
 
 #. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:2176 ../client/pk-console.c:2185
-#: ../client/pk-console.c:2194 ../client/pk-console.c:2203
+#: ../client/pk-console.c:2178 ../client/pk-console.c:2187
+#: ../client/pk-console.c:2196 ../client/pk-console.c:2205
+#: ../client/pk-console-test.c:1079 ../client/pk-console-test.c:1091
+#: ../client/pk-console-test.c:1103 ../client/pk-console-test.c:1115
 msgid "A search term is required"
 msgstr "ಒಂದು ಹುಡುಕು ಪದದ ಅಗತ್ಯವಿದೆ"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:2210
+#: ../client/pk-console.c:2212 ../client/pk-console-test.c:1125
 msgid "Invalid search type"
 msgstr "ಅಮಾನ್ಯವಾದ ಹುಡುಕು ಬಗೆ"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:2216
+#: ../client/pk-console.c:2218
 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:2225
+#: ../client/pk-console.c:2227 ../client/pk-console-test.c:1152
 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:2234
+#: ../client/pk-console.c:2236 ../client/pk-console-test.c:1163
 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:2242
+#: ../client/pk-console.c:2244 ../client/pk-console-test.c:1172
 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:2249
+#: ../client/pk-console.c:2251 ../client/pk-console-test.c:1179
 msgid "Directory not found"
 msgstr "ಕೋಶವು ಕಂಡುಬಂದಿಲ್ಲ"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2257
+#: ../client/pk-console.c:2259 ../client/pk-console-test.c:1188
 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:2267
+#: ../client/pk-console.c:2269 ../client/pk-console-test.c:1199
 msgid "A transaction identifier (tid) is required"
 msgstr "ವ್ಯವಹಾರ ಪತ್ತೆಗಾರನ (tid) ಅಗತ್ಯವಿದೆ"
 
 #. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:2284
+#: ../client/pk-console.c:2286 ../client/pk-console-test.c:1220
 msgid "A package name to resolve is required"
 msgstr "ಪರಿಹರಿಸಬೇಕಿರುವ ಪ್ಯಾಕೇಜಿನ ಹೆಸರಿನ ಅಗತ್ಯವಿದೆ"
 
 #. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:2293 ../client/pk-console.c:2302
+#: ../client/pk-console.c:2295 ../client/pk-console.c:2304
+#: ../client/pk-console-test.c:1231 ../client/pk-console-test.c:1242
 msgid "A repository name is required"
 msgstr "ಒಂದು ರೆಪೋಸಿಟರಿ ಹೆಸರಿನ ಅಗತ್ಯವಿದೆ"
 
 #. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:2311
+#: ../client/pk-console.c:2313 ../client/pk-console-test.c:1253
 msgid "A repo name, parameter and value are required"
 msgstr "ಒಂದು ರೆಪೊ ಹೆಸರು, ನಿಯತಾಂಕ ಹಾಗು ಮೌಲ್ಯದ ಅಗತ್ಯವಿದೆ"
 
 #. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:2325
+#: ../client/pk-console.c:2327 ../client/pk-console-test.c:1270
 msgid "An action, e.g. 'update-system' is required"
 msgstr "ಒಂದು ಕ್ರಿಯೆಯ, ಉದಾ. 'update-system' ಅಗತ್ಯವಿದೆ"
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:2332
+#: ../client/pk-console.c:2334 ../client/pk-console-test.c:1277
 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:2339
+#: ../client/pk-console.c:2341 ../client/pk-console-test.c:934
 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: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
+#: ../client/pk-console.c:2351 ../client/pk-console.c:2363
+#: ../client/pk-console.c:2372 ../client/pk-console.c:2390
+#: ../client/pk-console.c:2399 ../client/pk-console-test.c:1287
+#: ../client/pk-console-test.c:1302 ../client/pk-console-test.c:1311
+#: ../client/pk-console-test.c:1331 ../client/pk-console-test.c:1340
+#: ../client/pk-generate-pack.c:241 ../client/pk-generate-pack-test.c:288
 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:2379
+#: ../client/pk-console.c:2381 ../client/pk-console-test.c:1320
 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:2406
+#: ../client/pk-console.c:2408
 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:2416 ../client/pk-console.c:2426
+#: ../client/pk-console.c:2418 ../client/pk-console.c:2428
 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:2480
+#: ../client/pk-console.c:2482 ../client/pk-console-test.c:1400
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "ಆಯ್ಕೆ '%s' ಯು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"
 
 #. TRANSLATORS: User does not have permission to do this
-#: ../client/pk-console.c:2493
+#: ../client/pk-console.c:2495
 msgid "Incorrect privileges for this operation"
 msgstr "ಈ ಕಾರ್ಯಕ್ಕಾಗಿನ ಸರಿಯಲ್ಲದ ಸವಲತ್ತುಗಳು"
 
 #. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:2496
+#. /* 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
+#: ../client/pk-console.c:2498 ../client/pk-console-test.c:1412
 msgid "Command failed"
 msgstr "ಆಜ್ಞೆಯು ವಿಫಲಗೊಂಡಿದೆ"
 
+#: ../client/pk-console-shared.c:52 ../client/pk-tools-common.c:51
+#, c-format
+msgid "Please enter a number from 1 to %i: "
+msgstr "1 ರಿಂದ %i ಒಳಗಿನ ಒಂದು ಅಂಕೆಯನ್ನು ನಮೂದಿಸಿ: "
+
+#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
+#: ../client/pk-console-shared.c:213 ../client/pk-tools-common.c:200
+msgid "More than one package matches:"
+msgstr "ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ಪ್ಯಾಕೇಜುಗಳು ತಾಳೆಯಾಗುತ್ತವೆ:"
+
+#. TRANSLATORS: This finds out which package in the list to use
+#: ../client/pk-console-shared.c:222 ../client/pk-tools-common.c:207
+msgid "Please choose the correct package: "
+msgstr "ದಯವಿಟ್ಟು ಸರಿಯಾದ ಪ್ಯಾಕೇಜನ್ನು ಆಯ್ಕೆ ಮಾಡಿ: "
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console-test.c:571
+#, c-format
+msgid "This tool could not find the available package: %s"
+msgstr "ಲಭ್ಯವಿರುವ ಪ್ಯಾಕೇಜುಗಳನ್ನು ಈ ಉಪಕರಣದಿಂದ ಪತ್ತೆ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console-test.c:599
+#, c-format
+msgid "This tool could not find the installed package: %s"
+msgstr "ಅನುಸ್ಥಾಪಿಸಲಾದ ಪ್ಯಾಕೇಜುಗಳನ್ನು ಈ ಉಪಕರಣದಿಂದ ಪತ್ತೆ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console-test.c:627 ../client/pk-console-test.c:655
+#, c-format
+msgid "This tool could not find the package: %s"
+msgstr "ಈ ಉಪಕರಣದಿಂದ ಪ್ಯಾಕೇಜನ್ನು ಪತ್ತೆ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
+#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
+#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
+#: ../client/pk-console-test.c:683 ../client/pk-console-test.c:711
+#: ../client/pk-console-test.c:739 ../client/pk-console-test.c:767
+#: ../client/pk-console-test.c:795
+#, c-format
+msgid "This tool could not find all the packages: %s"
+msgstr "ಈ ಉಪಕರಣದಿಂದ ಎಲ್ಲಾ ಪ್ಯಾಕೇಜುಗಳನ್ನು ಪತ್ತೆ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: %s"
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console-test.c:1131
+msgid "A package name to install is required"
+msgstr "ಅನುಸ್ಥಾಪಿಸಲು ಒಂದು ಪ್ಯಾಕೇಜಿನ ಹೆಸರಿನ ಅಗತ್ಯವಿದೆ"
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console-test.c:1140
+msgid "A filename to install is required"
+msgstr "ಅನುಸ್ಥಾಪಿಸಲು ಒಂದು ಕಡತದ ಹೆಸರಿನ ಅಗತ್ಯವಿದೆ"
+
 #. TRANSLATORS: This is the state of the transaction
 #: ../client/pk-generate-pack.c:101
 msgid "Downloading"
@@ -745,110 +820,111 @@ 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:188 ../client/pk-generate-pack-test.c:228
 msgid "Set the file name of dependencies to be excluded"
 msgstr "ಹೊರತು ಪಡಿಸಲು ಅವಲಂಬನೆಗಳ ಕಡತದ ಹೆಸರುಗಳನ್ನು ಸಿದ್ಧಗೊಳಿಸು"
 
 #. TRANSLATORS: the output location
-#: ../client/pk-generate-pack.c:191
+#: ../client/pk-generate-pack.c:191 ../client/pk-generate-pack-test.c:231
 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:194 ../client/pk-generate-pack-test.c:234
 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:197 ../client/pk-generate-pack-test.c:237
 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:225 ../client/pk-generate-pack-test.c:272
 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:233 ../client/pk-generate-pack-test.c:280
 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:249 ../client/pk-generate-pack-test.c:296
 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
+#. 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-test.c:324 ../client/pk-generate-pack-test.c:330
 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:280 ../client/pk-generate-pack-test.c:337
 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:291 ../client/pk-generate-pack-test.c:348
 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:307 ../client/pk-generate-pack-test.c:364
 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:310 ../client/pk-generate-pack-test.c:367
 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:323 ../client/pk-generate-pack-test.c:380
 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:333 ../client/pk-generate-pack-test.c:392
 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:344 ../client/pk-generate-pack-test.c:401
 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:348 ../client/pk-generate-pack-test.c:405
 #, 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:365 ../client/pk-generate-pack-test.c:413
 msgid "Creating service pack..."
 msgstr "ಸರ್ವಿಸ್‌ ಪ್ಯಾಕನ್ನು ರಚಿಸಲಾಗುತ್ತಿದೆ..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:372
+#: ../client/pk-generate-pack.c:372 ../client/pk-generate-pack-test.c:428
 #, 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:377 ../client/pk-generate-pack-test.c:433
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "'%s' ಅನ್ನು ರಚಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ: %s"
 
 #. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:146
+#: ../client/pk-monitor.c:146 ../client/pk-monitor-test.c:299
 msgid "PackageKit Monitor"
 msgstr "PackageKit ಮೇಲ್ವಿಚಾರಕ"
 
@@ -856,26 +932,106 @@ msgstr "PackageKit ಮೇಲ್ವಿಚಾರಕ"
 msgid "Cannot show the list of transactions"
 msgstr "ವ್ಯವಹಾರಗಳ ಪಟ್ಟಿಯನ್ನು ತೋರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"
 
-#. TRANSLATORS: The package was not found in any software sources
-#: ../client/pk-tools-common.c:118
-#, c-format
-msgid "The package could not be found"
-msgstr "ಪ್ಯಾಕೇಜು ಕಂಡು ಬಂದಿಲ್ಲ"
+#: ../client/pk-monitor-test.c:204
+msgid "Failed to get transaction list"
+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
-msgid "More than one package matches:"
-msgstr "ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ಪ್ಯಾಕೇಜುಗಳು ತಾಳೆಯಾಗುತ್ತವೆ:"
+#: ../client/pk-monitor-test.c:235
+msgid "Failed to get daemon state"
+msgstr "ಡೆಮನ್ ಸ್ಥಿತಿಯನ್ನು ಪಡೆಯುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ"
 
-#. TRANSLATORS: This finds out which package in the list to use
-#: ../client/pk-tools-common.c:137
-msgid "Please choose the correct package: "
-msgstr "ದಯವಿಟ್ಟು ಸರಿಯಾದ ಪ್ಯಾಕೇಜನ್ನು ಆಯ್ಕೆ ಮಾಡಿ: "
+#. ask the user
+#: ../client/pk-task-text.c:64
+msgid "Do you want to allow installing of unsigned software?"
+msgstr "ಸಹಿ ಮಾಡದೆ ಇರುವ ತಂತ್ರಾಂಶವನ್ನು ಅನುಸ್ಥಾಪಿಸಲು ನೀವು ಬಯಸುತ್ತೀರೆ?"
+
+#: ../client/pk-task-text.c:68
+msgid "The unsigned software will not be installed."
+msgstr "ಸಹಿ ಮಾಡದೆ ಇರುವ ತಂತ್ರಾಂಶವನ್ನು ಅನುಸ್ಥಾಪಿಸಲಾಗುವುದಿಲ್ಲ."
+
+#: ../client/pk-task-text.c:100
+msgid "Software source signature required"
+msgstr "ತಂತ್ರಾಂಶ ಆಕರದ ಸಹಿಯ ಅಗತ್ಯವಿದೆ"
+
+#: ../client/pk-task-text.c:102
+msgid "Software source name"
+msgstr "ತಂತ್ರಾಂಶ ಆಕರದ ಹೆಸರು"
+
+#: ../client/pk-task-text.c:103
+msgid "Key URL"
+msgstr "ಕೀಲಿ URL"
+
+#: ../client/pk-task-text.c:104
+msgid "Key user"
+msgstr "ಕೀಲಿ ಬಳಕೆದಾರ"
+
+#: ../client/pk-task-text.c:105
+msgid "Key ID"
+msgstr "ಕೀಲಿ ಐಡಿ"
+
+#: ../client/pk-task-text.c:106
+msgid "Key fingerprint"
+msgstr "ಕೀಲಿ ಫಿಂಗರ್ಪ್ರಿಂಟ್"
 
-#: ../client/pk-tools-common.c:162
+#: ../client/pk-task-text.c:107
+msgid "Key Timestamp"
+msgstr "ಕೀಲಿ ಸಮಯ ಮುದ್ರೆ"
+
+#: ../client/pk-task-text.c:151
+msgid "End user licence agreement required"
+msgstr "ಬಳಕೆದಾರ ಲೈಸೆನ್ಸ್ ಕರಾರಿನ ಅಗತ್ಯವಿದೆ"
+
+#: ../client/pk-task-text.c:152
+msgid "EULA ID"
+msgstr "EULA ID"
+
+#: ../client/pk-task-text.c:155
+msgid "Agreement"
+msgstr "ಕರಾರು"
+
+#. ask the user
+#: ../client/pk-task-text.c:161
+msgid "Do you accept this agreement?"
+msgstr "ನೀವು ಈ ಕರಾರನ್ನು ಒಪ್ಪುತ್ತೀರೆ?"
+
+#: ../client/pk-task-text.c:165
+msgid "The agreement was not accepted."
+msgstr "ಕರಾರನ್ನು ಒಪ್ಪಲಾಗಿಲ್ಲ."
+
+#: ../client/pk-task-text.c:194
+msgid "Media change required"
+msgstr "ಮಾಧ್ಯಮವನ್ನು ಬದಲಾಯಿಸುವ ಅಗತ್ಯವಿದೆ"
+
+#: ../client/pk-task-text.c:195
+msgid "Media type"
+msgstr "ಮಾಧ್ಯಮದ ಬಗೆ"
+
+#: ../client/pk-task-text.c:196
+msgid "Media ID"
+msgstr "ಮಾಧ್ಯಮ ಐಡಿ"
+
+#: ../client/pk-task-text.c:197
+msgid "Text"
+msgstr "ಪಠ್ಯ"
+
+#. ask the user
+#: ../client/pk-task-text.c:201
+msgid "Please insert the correct media"
+msgstr "ದಯವಿಟ್ಟು ಸರಿಯಾದ ಮಾಧಮವನ್ನು ತೂರಿಸಿ"
+
+#: ../client/pk-task-text.c:205
+msgid "The correct media was not inserted."
+msgstr "ಸರಿಯಾದ ಮಾಧಮವನ್ನು ತೂರಿಸಲಾಗಿಲ್ಲ."
+
+#: ../client/pk-task-text.c:303
+msgid "The transaction did not proceed."
+msgstr "ವ್ಯವಹಾರವು ಮುಂದುವರೆಯಲಿಲ್ಲ."
+
+#. TRANSLATORS: The package was not found in any software sources
+#: ../client/pk-tools-common.c:188
 #, c-format
-msgid "Please enter a number from 1 to %i: "
-msgstr "1 ರಿಂದ %i ಒಳಗಿನ ಒಂದು ಅಂಕೆಯನ್ನು ನಮೂದಿಸಿ: "
+msgid "The package could not be found"
+msgstr "ಪ್ಯಾಕೇಜು ಕಂಡು ಬಂದಿಲ್ಲ"
 
 #. TRANSLATORS: when we are getting data from the daemon
 #: ../contrib/browser-plugin/pk-plugin-install.c:466
@@ -1032,174 +1188,174 @@ 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
+#: ../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 ಅನುಸ್ಥಾಪಕ"
 
 #. 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: ಅನುಸ್ಥಾಪಿಸಲು ಪ್ಯಾಕೇಜಿನ ಹೆಸರುಗಳನ್ನು ಸೂಚಿಸಿ."
 
 #. 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 ದೋಷನಿವಾರಣಾ ಆಕರಗಳನ್ನು ಅಶಕ್ತಗೊಳಿಸಲಾಗಿದೆ."
@@ -1558,7 +1714,7 @@ 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."
commit 4f214d7a53f7367caf77c74e241a42717dc7ad2b
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 19:59:48 2009 +0100

    trivial: fix compile

diff --git a/po/POTFILES.in b/po/POTFILES.in
index 0d1e85e..9cd6a74 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -2,12 +2,13 @@
 # List of source files containing translatable strings.
 # Please keep this file sorted alphabetically.
 client/pk-console.c
+client/pk-console-shared.c
 client/pk-console-test.c
 client/pk-generate-pack.c
+client/pk-generate-pack-test.c
 client/pk-monitor.c
 client/pk-monitor-test.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
commit 62fbc56e19670459ad3c86b2335e5f45da812b32
Merge: 2315803... 3f63113...
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 19:55:38 2009 +0100

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

commit 231580316beb35bdef77e47d22643191dd546e4c
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 19:54:09 2009 +0100

    trivial: fix compile with the removal of PkControlSync

diff --git a/client/pk-console-test.c b/client/pk-console-test.c
index 5fce48a..186581d 100644
--- a/client/pk-console-test.c
+++ b/client/pk-console-test.c
@@ -45,7 +45,7 @@ static GMainLoop *loop = NULL;
 static PkBitfield roles;
 static gboolean is_console = FALSE;
 static gboolean nowait = FALSE;
-static PkControlSync *control = NULL;
+static PkControl *control = NULL;
 static PkTaskText *task = NULL;
 static PkProgressBar *progressbar = NULL;
 static GCancellable *cancellable = NULL;
@@ -918,6 +918,29 @@ pk_console_get_summary (void)
 }
 
 /**
+ * pk_console_get_time_since_action_cb:
+ **/
+static void
+pk_console_get_time_since_action_cb (GObject *object, GAsyncResult *res, gpointer data)
+{
+	guint time_ms;
+	GError *error = NULL;
+//	PkControl *control = PK_CONTROL(object);
+
+	/* get the results */
+	time_ms = pk_control_get_time_since_action_finish (control, res, &error);
+	if (time_ms == 0) {
+		/* TRANSLATORS: we keep a database updated with the time that an action was last executed */
+		g_print ("%s: %s\n", _("Failed to get the time since this action was last completed"), error->message);
+		g_error_free (error);
+		goto out;
+	}
+	g_print ("time is %is\n", time_ms);
+out:
+	g_main_loop_quit (loop);
+}
+
+/**
  * main:
  **/
 int
@@ -973,8 +996,8 @@ main (int argc, char *argv[])
 		is_console = TRUE;
 
 	/* we need the roles early, as we only show the user only what they can do */
-	control = pk_control_sync_new ();
-	ret = pk_control_sync_get_properties (control, &error);
+	control = pk_control_new ();
+	ret = pk_control_get_properties_sync (control, &error);
 	if (!ret) {
 		g_print ("Failed to startup: %s\n", error->message);
 		goto out_last;
@@ -1242,7 +1265,6 @@ main (int argc, char *argv[])
 
 	} 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"));
@@ -1256,15 +1278,8 @@ main (int argc, char *argv[])
 			retval = PK_EXIT_CODE_SYNTAX_INVALID;
 			goto out;
 		}
-		time_ms = pk_control_sync_get_time_since_action (control, role, &error);
-		if (time_ms == 0) {
-			/* TRANSLATORS: we keep a database updated with the time that an action was last executed */
-			error = g_error_new (1, 0, "%s: %s", _("Failed to get the time since this action was last completed"), error->message);
-			retval = EXIT_FAILURE;
-			goto out;
-		}
-		g_print ("time since %s is %is\n", value, time_ms);
-		nowait = TRUE;
+		pk_control_get_time_since_action_async (control, role, cancellable,
+							(GAsyncReadyCallback) pk_console_get_time_since_action_cb, NULL);
 
 	} else if (strcmp (mode, "get-depends") == 0) {
 		if (value == NULL) {
diff --git a/client/pk-generate-pack-test.c b/client/pk-generate-pack-test.c
index d2e1eda..2d61d0f 100644
--- a/client/pk-generate-pack-test.c
+++ b/client/pk-generate-pack-test.c
@@ -204,7 +204,7 @@ main (int argc, char *argv[])
 	gboolean ret;
 	gchar *filename = NULL;
 	PkClient *client = NULL;
-	PkControlSync *control = NULL;
+	PkControl *control = NULL;
 	PkBitfield roles;
 	gchar *tempdir = NULL;
 	gboolean exists;
@@ -307,8 +307,8 @@ main (int argc, char *argv[])
 		directory = g_get_current_dir ();
 
 	/* are we dumb and can't do some actions */
-	control = pk_control_sync_new ();
-	ret = pk_control_sync_get_properties (control, &error);
+	control = pk_control_new ();
+	ret = pk_control_get_properties_sync (control, &error);
 	if (!ret) {
 		g_print ("Failed to startup: %s\n", error->message);
 		goto out;
diff --git a/contrib/command-not-found/Makefile.am b/contrib/command-not-found/Makefile.am
index 028b193..b3c8843 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-text.c					\
-	pk-text.h					\
+	pk-tools-common.c				\
+	pk-tools-common.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 b2cd2c1..77e4a40 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-text.h"
+#include "pk-tools-common.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
deleted file mode 120000
index d27cefa..0000000
--- a/contrib/command-not-found/pk-text.c
+++ /dev/null
@@ -1 +0,0 @@
-../../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
deleted file mode 120000
index 044acfb..0000000
--- a/contrib/command-not-found/pk-text.h
+++ /dev/null
@@ -1 +0,0 @@
-../../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
new file mode 120000
index 0000000..4afae3b
--- /dev/null
+++ b/contrib/command-not-found/pk-tools-common.c
@@ -0,0 +1 @@
+../../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
new file mode 120000
index 0000000..f3e70b0
--- /dev/null
+++ b/contrib/command-not-found/pk-tools-common.h
@@ -0,0 +1 @@
+../../client/pk-tools-common.h
\ No newline at end of file
commit b5df7aa06534584c9d9df7f13edef4944b1a7a63
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 19:45:44 2009 +0100

    glib2: remove PkControlSync, it's a useless abstraction that isn't needed

diff --git a/lib/packagekit-glib2/Makefile.am b/lib/packagekit-glib2/Makefile.am
index 800ac3d..b6d4536 100644
--- a/lib/packagekit-glib2/Makefile.am
+++ b/lib/packagekit-glib2/Makefile.am
@@ -35,7 +35,6 @@ libpackagekit_glib2_include_HEADERS =				\
 	pk-client.h						\
 	pk-common.h						\
 	pk-control.h						\
-	pk-control-sync.h					\
 	pk-package.h						\
 	pk-package-id.h						\
 	pk-package-ids.h					\
@@ -60,8 +59,6 @@ libpackagekit_glib2_la_SOURCES =				\
 	pk-common.h						\
 	pk-control.c						\
 	pk-control.h						\
-	pk-control-sync.c					\
-	pk-control-sync.h					\
 	pk-enum.c						\
 	pk-enum.h						\
 	pk-marshal.c						\
diff --git a/lib/packagekit-glib2/packagekit.h b/lib/packagekit-glib2/packagekit.h
index 23c72e5..93007db 100644
--- a/lib/packagekit-glib2/packagekit.h
+++ b/lib/packagekit-glib2/packagekit.h
@@ -27,7 +27,6 @@
 #include <packagekit-glib2/pk-client.h>
 #include <packagekit-glib2/pk-common.h>
 #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-ids.h>
diff --git a/lib/packagekit-glib2/pk-control-sync.c b/lib/packagekit-glib2/pk-control-sync.c
deleted file mode 100644
index c298716..0000000
--- a/lib/packagekit-glib2/pk-control-sync.c
+++ /dev/null
@@ -1,330 +0,0 @@
-/* -*- 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-object.h>
-#include <dbus/dbus-glib.h>
-#include <gio/gio.h>
-
-#include <packagekit-glib2/pk-control-sync.h>
-#include <packagekit-glib2/pk-common.h>
-#include <packagekit-glib2/pk-version.h>
-#include <packagekit-glib2/pk-bitfield.h>
-
-#include "egg-debug.h"
-
-static void     pk_control_sync_finalize	(GObject     *object);
-
-#define PK_CONTROL_SYNC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PK_TYPE_CONTROL_SYNC, PkControlSyncPrivate))
-
-/**
- * PkControlSyncPrivate:
- *
- * Private #PkControlSync data
- **/
-struct _PkControlSyncPrivate
-{
-	DBusGProxy		*proxy;
-};
-
-static gpointer pk_control_sync_object = NULL;
-
-G_DEFINE_TYPE (PkControlSync, pk_control_sync, PK_TYPE_CONTROL)
-
-/**
- * pk_control_sync_fixup_dbus_error:
- **/
-static void
-pk_control_sync_fixup_dbus_error (GError *error)
-{
-	g_return_if_fail (error != NULL);
-
-	/* hardcode domain */
-	error->domain = PK_CONTROL_ERROR;
-
-	/* find a better failure code */
-	if (error->code == DBUS_GERROR_SPAWN_CHILD_EXITED)
-		error->code = PK_CONTROL_ERROR_CANNOT_START_DAEMON;
-	else
-		error->code = PK_CONTROL_ERROR_FAILED;
-}
-
-/**
- * pk_control_sync_get_daemon_state:
- * @control_sync: a valid #PkControlSync instance
- * @error: a %GError to put the error code and message in, or %NULL
- *
- * The engine state debugging output
- *
- * Return value: a string of debugging data of unspecified format, unref wih g_free()
- **/
-gchar *
-pk_control_sync_get_daemon_state (PkControlSync *control, GError **error)
-{
-	gboolean ret;
-	gchar *state = NULL;
-
-	g_return_val_if_fail (PK_IS_CONTROL_SYNC (control), NULL);
-	g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
-	/* call D-Bus sync */
-	ret = dbus_g_proxy_call (control->priv->proxy, "GetDaemonState", error,
-				 G_TYPE_INVALID,
-				 G_TYPE_STRING, &state,
-				 G_TYPE_INVALID);
-	if (!ret) {
-		/* fix up the D-Bus error */
-		if (error != NULL)
-			pk_control_sync_fixup_dbus_error (*error);
-		goto out;
-	}
-out:
-	return state;
-}
-
-/* tiny helper to help us do the async operation */
-typedef struct {
-	GError		**error;
-	GMainLoop	*loop;
-	gboolean	 ret;
-	guint		 seconds;
-} PkControlSyncHelper;
-
-/**
- * pk_control_sync_properties_cb:
- **/
-static void
-pk_control_sync_properties_cb (PkControlSync *control, GAsyncResult *res, PkControlSyncHelper *sync)
-{
-	/* get the result */
-	sync->ret = pk_control_get_properties_finish (PK_CONTROL(control), res, sync->error);
-	g_main_loop_quit (sync->loop);
-}
-
-/**
- * pk_control_sync_get_properties:
- * @control: a valid #PkControlSync instance
- * @error: A #GError or %NULL
- *
- * Gets the properties the daemon supports.
- * Warning: this function is synchronous, and may block. Do not use it in GUI
- * applications.
- *
- * Return value: %TRUE if the properties were set correctly
- **/
-gboolean
-pk_control_sync_get_properties (PkControlSync *control, GError **error)
-{
-	gboolean ret;
-	PkControlSyncHelper *sync;
-
-	g_return_val_if_fail (PK_IS_CONTROL_SYNC (control), FALSE);
-	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-	/* create temp object */
-	sync = g_new0 (PkControlSyncHelper, 1);
-	sync->loop = g_main_loop_new (NULL, FALSE);
-	sync->error = error;
-
-	/* run async method */
-	pk_control_get_properties_async (PK_CONTROL(control), NULL, (GAsyncReadyCallback) pk_control_sync_properties_cb, sync);
-	g_main_loop_run (sync->loop);
-
-	ret = sync->ret;
-
-	/* free temp object */
-	g_main_loop_unref (sync->loop);
-	g_free (sync);
-
-	return ret;
-}
-
-/**
- * pk_control_sync_time_since_action_cb:
- **/
-static void
-pk_control_sync_time_since_action_cb (PkControlSync *control, GAsyncResult *res, PkControlSyncHelper *sync)
-{
-	/* get the result */
-	sync->seconds = pk_control_get_time_since_action_finish (PK_CONTROL(control), res, sync->error);
-	g_main_loop_quit (sync->loop);
-}
-
-/**
- * pk_control_sync_get_time_since_action:
- * @control: a valid #PkControlSync instance
- * @error: A #GError or %NULL
- *
- * We may want to know how long it has been since we refreshed the cache or
- * retrieved the update list.
- *
- * Return value: The number of seconds, or 0 for error
- **/
-guint
-pk_control_sync_get_time_since_action (PkControlSync *control, PkRoleEnum role, GError **error)
-{
-	guint seconds;
-	PkControlSyncHelper *sync;
-
-	g_return_val_if_fail (PK_IS_CONTROL_SYNC (control), FALSE);
-	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-	/* create temp object */
-	sync = g_new0 (PkControlSyncHelper, 1);
-	sync->loop = g_main_loop_new (NULL, FALSE);
-	sync->error = error;
-
-	/* run async method */
-	pk_control_get_time_since_action_async (PK_CONTROL(control), role, NULL, (GAsyncReadyCallback) pk_control_sync_time_since_action_cb, sync);
-	g_main_loop_run (sync->loop);
-
-	seconds = sync->seconds;
-
-	/* free temp object */
-	g_main_loop_unref (sync->loop);
-	g_free (sync);
-
-	return seconds;
-}
-
-/**
- * pk_control_sync_class_init:
- * @klass: The PkControlSyncClass
- **/
-static void
-pk_control_sync_class_init (PkControlSyncClass *klass)
-{
-	GObjectClass *object_class = G_OBJECT_CLASS (klass);
-	object_class->finalize = pk_control_sync_finalize;
-	g_type_class_add_private (klass, sizeof (PkControlSyncPrivate));
-}
-
-/**
- * pk_control_sync_init:
- * @control_sync: This class instance
- **/
-static void
-pk_control_sync_init (PkControlSync *control)
-{
-	DBusGConnection *connection;
-	GError *error = NULL;
-
-	control->priv = PK_CONTROL_SYNC_GET_PRIVATE (control);
-
-	/* get connection */
-	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.");
-	}
-
-	/* get a connection to the main interface */
-	control->priv->proxy = dbus_g_proxy_new_for_name (connection,
-							  PK_DBUS_SERVICE, PK_DBUS_PATH,
-							  PK_DBUS_INTERFACE);
-	if (control->priv->proxy == NULL)
-		egg_error ("Cannot connect to PackageKit.");
-}
-
-/**
- * pk_control_sync_finalize:
- * @object: The object to finalize
- **/
-static void
-pk_control_sync_finalize (GObject *object)
-{
-	PkControlSync *control = PK_CONTROL_SYNC (object);
-	g_object_unref (G_OBJECT (control->priv->proxy));
-	G_OBJECT_CLASS (pk_control_sync_parent_class)->finalize (object);
-}
-
-/**
- * pk_control_sync_new:
- *
- * Return value: a new PkControlSync object.
- **/
-PkControlSync *
-pk_control_sync_new (void)
-{
-	if (pk_control_sync_object != NULL) {
-		g_object_ref (pk_control_sync_object);
-	} else {
-		pk_control_sync_object = g_object_new (PK_TYPE_CONTROL_SYNC, NULL);
-		g_object_add_weak_pointer (pk_control_sync_object, &pk_control_sync_object);
-	}
-	return PK_CONTROL_SYNC (pk_control_sync_object);
-}
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-pk_control_sync_test (gpointer user_data)
-{
-	EggTest *test = (EggTest *) user_data;
-	PkControlSync *control;
-	GError *error = NULL;
-	gboolean ret;
-	gchar *text;
-	PkBitfield roles;
-
-	if (!egg_test_start (test, "PkControlSync"))
-		return;
-
-	/************************************************************/
-	egg_test_title (test, "get control_sync");
-	control = pk_control_sync_new ();
-	egg_test_assert (test, control != NULL);
-
-	/************************************************************/
-	egg_test_title (test, "get properties sync");
-	ret = pk_control_sync_get_properties (control, &error);
-	if (!ret)
-		egg_test_failed (test, "failed to get properties: %s", error->message);
-
-	/* get data */
-	g_object_get (control,
-		      "roles", &roles,
-		      NULL);
-
-	/* check data */
-	text = pk_role_bitfield_to_text (roles);
-	if (g_strcmp0 (text, "cancel;get-depends;get-details;get-files;get-packages;get-repo-list;"
-			     "get-requires;get-update-detail;get-updates;install-files;install-packages;"
-			     "refresh-cache;remove-packages;repo-enable;repo-set-data;resolve;rollback;"
-			     "search-details;search-file;search-group;search-name;update-packages;update-system;"
-			     "what-provides;download-packages;get-distro-upgrades;simulate-install-packages;"
-			     "simulate-remove-packages;simulate-update-packages") != 0) {
-		egg_test_failed (test, "data incorrect: %s", text);
-	}
-	egg_test_success (test, "got correct roles");
-	g_free (text);
-
-	g_object_unref (control);
-	egg_test_end (test);
-}
-#endif
-
diff --git a/lib/packagekit-glib2/pk-control-sync.h b/lib/packagekit-glib2/pk-control-sync.h
deleted file mode 100644
index b20df0b..0000000
--- a/lib/packagekit-glib2/pk-control-sync.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* -*- 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.
- */
-
-#if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
-#error "Only <packagekit.h> can be included directly."
-#endif
-
-/**
- * SECTION:pk-control_sync
- * @short_description: An abstract synchronous control access GObject
- */
-
-#ifndef __PK_CONTROL_SYNC_H
-#define __PK_CONTROL_SYNC_H
-
-#include <glib-object.h>
-
-#include <packagekit-glib2/pk-enum.h>
-#include <packagekit-glib2/pk-control.h>
-
-G_BEGIN_DECLS
-
-#define PK_TYPE_CONTROL_SYNC		(pk_control_sync_get_type ())
-#define PK_CONTROL_SYNC(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), PK_TYPE_CONTROL_SYNC, PkControlSync))
-#define PK_CONTROL_SYNC_CLASS(k)	(G_TYPE_CHECK_CLASS_CAST((k), PK_TYPE_CONTROL_SYNC, PkControlSyncClass))
-#define PK_IS_CONTROL_SYNC(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), PK_TYPE_CONTROL_SYNC))
-#define PK_IS_CONTROL_SYNC_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), PK_TYPE_CONTROL_SYNC))
-#define PK_CONTROL_SYNC_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_CONTROL_SYNC, PkControlSyncClass))
-
-typedef struct _PkControlSyncPrivate	PkControlSyncPrivate;
-typedef struct _PkControlSync		PkControlSync;
-typedef struct _PkControlSyncClass	PkControlSyncClass;
-
-struct _PkControlSync
-{
-	 PkControl		 parent;
-	 PkControlSyncPrivate	*priv;
-};
-
-struct _PkControlSyncClass
-{
-	PkControlClass		parent_class;
-};
-
-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);
-
-guint		 pk_control_sync_get_time_since_action	(PkControlSync		*control,
-							 PkRoleEnum		 role,
-							 GError			**error);
-gchar		*pk_control_sync_get_daemon_state	(PkControlSync		*control,
-							 GError			**error);
-gboolean	 pk_control_sync_get_properties		(PkControlSync		*control,
-							 GError			**error);
-
-G_END_DECLS
-
-#endif /* __PK_CONTROL_SYNC_H */
-
diff --git a/lib/packagekit-glib2/pk-control.c b/lib/packagekit-glib2/pk-control.c
index c2b2df6..1b99e52 100644
--- a/lib/packagekit-glib2/pk-control.c
+++ b/lib/packagekit-glib2/pk-control.c
@@ -106,6 +106,14 @@ typedef struct {
 	PkNetworkEnum		 network;
 } PkControlState;
 
+/* tiny helper to help us do the async operation */
+typedef struct {
+	GError		**error;
+	GMainLoop	*loop;
+	gboolean	 ret;
+	guint		 seconds;
+} PkControlHelper;
+
 /**
  * pk_control_error_quark:
  *
@@ -1313,6 +1321,55 @@ pk_control_get_properties_finish (PkControl *control, GAsyncResult *res, GError
 	return g_simple_async_result_get_op_res_gboolean (simple);
 }
 
+/**
+ * pk_control_get_properties_sync_cb:
+ **/
+static void
+pk_control_get_properties_sync_cb (PkControl *control, GAsyncResult *res, PkControlHelper *helper)
+{
+	/* get the result */
+	helper->ret = pk_control_get_properties_finish (control, res, helper->error);
+	g_main_loop_quit (helper->loop);
+}
+
+/**
+ * pk_control_get_properties_sync:
+ * @control: a valid #PkControl instance
+ * @error: A #GError or %NULL
+ *
+ * Gets the properties the daemon supports.
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: %TRUE if the properties were set correctly
+ **/
+gboolean
+pk_control_get_properties_sync (PkControl *control, GError **error)
+{
+	gboolean ret;
+	PkControlHelper *helper;
+
+	g_return_val_if_fail (PK_IS_CONTROL (control), FALSE);
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkControlHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_control_get_properties_async (control, NULL, (GAsyncReadyCallback) pk_control_get_properties_sync_cb, helper);
+	g_main_loop_run (helper->loop);
+
+	ret = helper->ret;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return ret;
+}
+
 /***************************************************************************************************/
 
 /**
@@ -2002,6 +2059,10 @@ pk_control_test (gpointer user_data)
 	EggTest *test = (EggTest *) user_data;
 	PkControl *control;
 	guint version;
+	GError *error = NULL;
+	gboolean ret;
+	gchar *text;
+	PkBitfield roles;
 
 	if (!egg_test_start (test, "PkControl"))
 		return;
@@ -2063,6 +2124,30 @@ pk_control_test (gpointer user_data)
 	g_object_get (control, "version-micro", &version, NULL);
 	egg_test_assert (test, (version == PK_MICRO_VERSION));
 
+	/************************************************************/
+	egg_test_title (test, "get properties sync");
+	ret = pk_control_get_properties_sync (control, &error);
+	if (!ret)
+		egg_test_failed (test, "failed to get properties: %s", error->message);
+
+	/* get data */
+	g_object_get (control,
+		      "roles", &roles,
+		      NULL);
+
+	/* check data */
+	text = pk_role_bitfield_to_text (roles);
+	if (g_strcmp0 (text, "cancel;get-depends;get-details;get-files;get-packages;get-repo-list;"
+			     "get-requires;get-update-detail;get-updates;install-files;install-packages;"
+			     "refresh-cache;remove-packages;repo-enable;repo-set-data;resolve;rollback;"
+			     "search-details;search-file;search-group;search-name;update-packages;update-system;"
+			     "what-provides;download-packages;get-distro-upgrades;simulate-install-packages;"
+			     "simulate-remove-packages;simulate-update-packages") != 0) {
+		egg_test_failed (test, "data incorrect: %s", text);
+	}
+	egg_test_success (test, "got correct roles");
+	g_free (text);
+
 	g_object_unref (control);
 	egg_test_end (test);
 }
diff --git a/lib/packagekit-glib2/pk-control.h b/lib/packagekit-glib2/pk-control.h
index 2cad94f..c32ecdb 100644
--- a/lib/packagekit-glib2/pk-control.h
+++ b/lib/packagekit-glib2/pk-control.h
@@ -156,6 +156,8 @@ void		 pk_control_get_properties_async	(PkControl		*control,
 gboolean	 pk_control_get_properties_finish	(PkControl		*control,
 							 GAsyncResult		*res,
 							 GError			**error);
+gboolean	 pk_control_get_properties_sync		(PkControl		*control,
+							 GError			**error);
 
 G_END_DECLS
 
diff --git a/lib/packagekit-glib2/pk-self-test.c b/lib/packagekit-glib2/pk-self-test.c
index 984e3a7..4d0b231 100644
--- a/lib/packagekit-glib2/pk-self-test.c
+++ b/lib/packagekit-glib2/pk-self-test.c
@@ -29,7 +29,6 @@
 #include "pk-client.h"
 #include "pk-common.h"
 #include "pk-control.h"
-#include "pk-control-sync.h"
 #include "pk-enum.h"
 #include "pk-package.h"
 #include "pk-package-id.h"
@@ -60,7 +59,6 @@ main (int argc, char **argv)
 	pk_results_test (test);
 	pk_package_test (test);
 	pk_control_test (test);
-	pk_control_sync_test (test);
 	pk_client_test (test);
 	pk_package_sack_test (test);
 	pk_task_test (test);
commit 1addd6cc795ba330e7deb0e9f982efbabaa3a380
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 19:17:47 2009 +0100

    glib2: Add a glib2 version of pkgenpack

diff --git a/client/.gitignore b/client/.gitignore
index b724533..604f5d4 100644
--- a/client/.gitignore
+++ b/client/.gitignore
@@ -1,5 +1,6 @@
 .deps
 .libs
+*.a
 *.o
 pk-marshal.h
 pk-marshal.c
@@ -8,6 +9,7 @@ pkcon-test
 pkmon
 pkmon-test
 pkgenpack
+pkgenpack-test
 pk-self-test
 *.glade.bak
 *.gladep
diff --git a/client/Makefile.am b/client/Makefile.am
index 8e95476..d6feab0 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -65,23 +65,28 @@ PK_GLIB2_LIBS =						\
 	$(top_builddir)/lib/packagekit-glib2/libpackagekit-glib2.la	\
 	$(NULL)
 
-noinst_PROGRAMS = pkcon-test pkmon-test
+noinst_PROGRAMS = pkcon-test pkmon-test pkgenpack-test
 
-# TODO: private library
-
-pkcon_test_SOURCES =					\
+noinst_LIBRARIES = libpkconsole.a
+libpkconsole_a_SOURCES =				\
 	egg-debug.c					\
 	egg-debug.h					\
-	pk-console-test.c				\
+	egg-string.c					\
+	egg-string.h					\
 	pk-task-text.c					\
 	pk-task-text.h					\
-	pk-text.c					\
-	pk-text.h					\
+	pk-console-shared.c				\
+	pk-console-shared.h				\
 	pk-progress-bar.c				\
 	pk-progress-bar.h				\
 	$(NULL)
 
+pkcon_test_SOURCES =					\
+	pk-console-test.c				\
+	$(NULL)
+
 pkcon_test_LDADD =					\
+	libpkconsole.a					\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
 	$(PK_GLIB2_LIBS)				\
@@ -92,12 +97,11 @@ pkcon_test_CFLAGS =					\
 	$(NULL)
 
 pkmon_test_SOURCES =					\
-	egg-debug.c					\
-	egg-debug.h					\
 	pk-monitor-test.c				\
 	$(NULL)
 
 pkmon_test_LDADD =					\
+	libpkconsole.a					\
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
 	$(PK_GLIB2_LIBS)				\
@@ -106,6 +110,23 @@ pkmon_test_LDADD =					\
 pkmon_test_CFLAGS =					\
 	$(WARNINGFLAGS_C)				\
 	$(NULL)
+
+pkgenpack_test_SOURCES =				\
+	pk-generate-pack-test.c				\
+	$(NULL)
+
+pkgenpack_test_LDADD = 					\
+	libpkconsole.a					\
+	$(ARCHIVE_LIBS)					\
+	$(GLIB_LIBS)					\
+	$(DBUS_LIBS)					\
+	$(PK_GLIB2_LIBS)				\
+	$(NULL)
+
+pkgenpack_test_CFLAGS =					\
+	$(WARNINGFLAGS_C)				\
+	$(NULL)
+
 endif
 
 pkcon_SOURCES =						\
@@ -114,8 +135,6 @@ 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)
@@ -152,8 +171,6 @@ 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)
@@ -181,8 +198,6 @@ 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					\
diff --git a/client/pk-generate-pack-test.c b/client/pk-generate-pack-test.c
new file mode 100644
index 0000000..d2e1eda
--- /dev/null
+++ b/client/pk-generate-pack-test.c
@@ -0,0 +1,459 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
+ * Copyright (C) 2008 Shishir Goel <crazyontheedge at gmail.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 <unistd.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <locale.h>
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <glib/gstdio.h>
+#include <packagekit-glib2/packagekit.h>
+
+#include "egg-debug.h"
+#include "egg-string.h"
+
+#include "pk-console-shared.h"
+#include "pk-progress-bar.h"
+
+static PkProgressBar *progressbar = NULL;
+static GCancellable *cancellable = NULL;
+
+/**
+ * pk_generate_pack_get_filename:
+ **/
+static gchar *
+pk_generate_pack_get_filename (const gchar *name, const gchar *directory)
+{
+	gchar *filename = NULL;
+	gchar *distro_id;
+	gchar *iso_time = NULL;
+
+	distro_id = pk_get_distro_id ();
+	if (name != NULL) {
+		filename = g_strdup_printf ("%s/%s-%s.%s", directory, name, distro_id, PK_SERVICE_PACK_FILE_EXTENSION);
+	} else {
+		iso_time = pk_iso8601_present ();
+		/* don't include the time, just use the date prefix */
+		iso_time[10] = '\0';
+		filename = g_strdup_printf ("%s/updates-%s-%s.%s", directory, iso_time, distro_id, PK_SERVICE_PACK_FILE_EXTENSION);
+	}
+	g_free (distro_id);
+	g_free (iso_time);
+	return filename;
+}
+
+/**
+ * pk_generate_pack_progress_cb:
+ **/
+static void
+pk_generate_pack_progress_cb (PkProgress *progress, PkProgressType type, gpointer data)
+{
+	gint percentage;
+	PkStatusEnum status;
+
+	/* 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);
+		if (status == PK_STATUS_ENUM_FINISHED)
+			return;
+		/* TODO: translate */
+		pk_progress_bar_start (progressbar, pk_status_enum_to_text (status));
+	}
+}
+
+/**
+ * pk_generate_pack_sigint_cb:
+ **/
+static void
+pk_generate_pack_sigint_cb (int sig)
+{
+	egg_debug ("Handling SIGINT");
+
+	/* restore default */
+	signal (SIGINT, SIG_DFL);
+
+	/* cancel any tasks still running */
+	g_cancellable_cancel (cancellable);
+
+	/* kill ourselves */
+	egg_debug ("Retrying SIGINT");
+	kill (getpid (), SIGINT);
+}
+
+/* tiny helper to help us do the async operation */
+typedef struct {
+	GError		**error;
+	GMainLoop	*loop;
+	gboolean	 ret;
+} PkGenpackHelper;
+
+/**
+ * pk_generate_pack_generic_cb:
+ **/
+static void
+pk_generate_pack_generic_cb (PkServicePack *pack, GAsyncResult *res, PkGenpackHelper *helper)
+{
+	/* get the result */
+	helper->ret = pk_service_pack_generic_finish (pack, res, helper->error);
+	g_main_loop_quit (helper->loop);
+}
+
+/**
+ * pk_generate_pack_create_for_updates:
+ **/
+static gboolean
+pk_generate_pack_create_for_updates (PkServicePack *pack, const gchar *filename, gchar **excludes, GError **error)
+{
+	gboolean ret;
+	PkGenpackHelper *helper;
+
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkGenpackHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_service_pack_create_for_updates_async (pack, filename, excludes, cancellable,
+						  (PkProgressCallback) pk_generate_pack_progress_cb, NULL,
+						  (GAsyncReadyCallback) pk_generate_pack_generic_cb, helper);
+	g_main_loop_run (helper->loop);
+
+	ret = helper->ret;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return ret;
+}
+
+/**
+ * pk_generate_pack_create_for_package_ids:
+ **/
+static gboolean
+pk_generate_pack_create_for_package_ids (PkServicePack *pack, const gchar *filename, gchar **package_ids, gchar **excludes, GError **error)
+{
+	gboolean ret;
+	PkGenpackHelper *helper;
+
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkGenpackHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_service_pack_create_for_package_ids_async (pack, filename, package_ids, excludes, cancellable,
+						      (PkProgressCallback) pk_generate_pack_progress_cb, NULL,
+						      (GAsyncReadyCallback) pk_generate_pack_generic_cb, helper);
+	g_main_loop_run (helper->loop);
+
+	ret = helper->ret;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return ret;
+}
+
+/**
+ * main:
+ **/
+int
+main (int argc, char *argv[])
+{
+	GError *error = NULL;
+	GOptionContext *context;
+	gchar *options_help;
+	gboolean ret;
+	gchar *filename = NULL;
+	PkClient *client = NULL;
+	PkControlSync *control = NULL;
+	PkBitfield roles;
+	gchar *tempdir = NULL;
+	gboolean exists;
+	gboolean overwrite;
+	gchar **excludes = NULL;
+	gchar *package_id = NULL;
+	PkServicePack *pack = NULL;
+
+	gboolean verbose = FALSE;
+	gchar *directory = NULL;
+	gchar *package_list = NULL;
+	gchar *package = NULL;
+	gboolean updates = FALSE;
+	gint retval = 1;
+
+	const GOptionEntry options[] = {
+		{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
+			_("Show extra debugging information"), NULL },
+		{ "with-package-list", 'l', 0, G_OPTION_ARG_STRING, &package_list,
+			/* TRANSLATORS: we can exclude certain packages (glibc) when we know they'll exist on the target */
+			_("Set the file name of dependencies to be excluded"), NULL},
+		{ "output", 'o', 0, G_OPTION_ARG_STRING, &directory,
+			/* TRANSLATORS: the output location */
+			_("The output file or directory (the current directory is used if ommitted)"), NULL},
+		{ "package", 'p', 0, G_OPTION_ARG_STRING, &package,
+			/* TRANSLATORS: put a list of packages in the pack */
+			_("The package to be put into the service pack"), NULL},
+		{ "updates", 'u', 0, G_OPTION_ARG_NONE, &updates,
+			/* TRANSLATORS: put all pending updates in the pack */
+			_("Put all updates available in the service pack"), 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_generate_pack_sigint_cb);
+
+	context = g_option_context_new ("PackageKit Pack Generator");
+	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);
+	egg_debug_init (verbose);
+
+	client = pk_client_new ();
+	pack = pk_service_pack_new ();
+	cancellable = g_cancellable_new ();
+	progressbar = pk_progress_bar_new ();
+	pk_progress_bar_set_size (progressbar, 25);
+	pk_progress_bar_set_padding (progressbar, 20);
+
+	/* neither options selected */
+	if (package == NULL && !updates) {
+		/* TRANSLATORS: This is when the user fails to supply the correct arguments */
+		g_print ("%s\n", _("Neither --package or --updates option selected."));
+		retval = 1;
+		goto out;
+	}
+
+	/* both options selected */
+	if (package != NULL && updates) {
+		/* TRANSLATORS: This is when the user fails to supply just one argument */
+		g_print ("%s\n", _("Both options selected."));
+		retval = 1;
+		goto out;
+	}
+
+	/* no argument given to --package */
+	if (package != NULL && egg_strzero (package)) {
+		/* TRANSLATORS: This is when the user fails to supply the package name */
+		g_print ("%s\n", _("A package name is required"));
+		retval = 1;
+		goto out;
+	}
+
+	/* no argument given to --output */
+	if (directory != NULL && egg_strzero (directory)) {
+		/* TRANSLATORS: This is when the user fails to supply the output */
+		g_print ("%s\n", _("A output directory or file name is required"));
+		retval = 1;
+		goto out;
+	}
+
+	/* fall back to the system copy */
+	if (package_list == NULL)
+		package_list = g_strdup (PK_SYSTEM_PACKAGE_LIST_FILENAME);
+
+	/* fall back to CWD */
+	if (directory == NULL)
+		directory = g_get_current_dir ();
+
+	/* are we dumb and can't do some actions */
+	control = pk_control_sync_new ();
+	ret = pk_control_sync_get_properties (control, &error);
+	if (!ret) {
+		g_print ("Failed to startup: %s\n", error->message);
+		goto out;
+	}
+
+	/* get data */
+	g_object_get (control,
+		      "roles", &roles,
+		      NULL);
+
+	if (!pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_DEPENDS)) {
+		/* TRANSLATORS: This is when the backend doesn't have the capability to get-depends */
+		g_print ("%s (GetDepends)\n", _("The package manager cannot perform this type of operation."));
+		retval = 1;
+		goto out;
+	}
+	if (!pk_bitfield_contain (roles, PK_ROLE_ENUM_DOWNLOAD_PACKAGES)) {
+		/* TRANSLATORS: This is when the backend doesn't have the capability to download */
+		g_print ("%s (DownloadPackage)\n", _("The package manager cannot perform this type of operation."));
+		retval = 1;
+		goto out;
+	}
+
+#ifndef HAVE_ARCHIVE_H
+	/* TRANSLATORS: This is when the distro didn't include libarchive support into PK */
+	g_print ("%s\n", _("Service packs cannot be created as PackageKit was not built with libarchive support."));
+	goto out;
+#endif
+
+	/* the user can speciify a complete path */
+	ret = g_file_test (directory, G_FILE_TEST_IS_DIR);
+	if (ret) {
+		filename = pk_generate_pack_get_filename (package, directory);
+	} else {
+		if (!g_str_has_suffix (directory, PK_SERVICE_PACK_FILE_EXTENSION)) {
+			/* TRANSLATORS: the user specified an absolute path, but didn't get the extension correct */
+			g_print ("%s .%s \n", _("If specifying a file, the service pack name must end with"), PK_SERVICE_PACK_FILE_EXTENSION);
+			retval = 1;
+			goto out;
+		}
+		filename = g_strdup (directory);
+	}
+
+	/* download packages to a temporary directory */
+	tempdir = g_build_filename (g_get_tmp_dir (), "pack", NULL);
+
+	/* check if file exists before we overwrite it */
+	exists = g_file_test (filename, G_FILE_TEST_EXISTS);
+
+	/*ask user input*/
+	if (exists) {
+		/* TRANSLATORS: This is when file already exists */
+		overwrite = pk_console_get_prompt (_("A pack with the same name already exists, do you want to overwrite it?"), FALSE);
+		if (!overwrite) {
+			/* TRANSLATORS: This is when the pack was not overwritten */
+			g_print ("%s\n", _("The pack was not overwritten."));
+			retval = 1;
+			goto out;
+		}
+	}
+
+	/* get rid of temp directory if it already exists */
+	g_rmdir (tempdir);
+
+	/* make the temporary directory */
+	retval = g_mkdir_with_parents (tempdir, 0777);
+	if (retval != 0) {
+		/* TRANSLATORS: This is when the temporary directory cannot be created, the directory name follows */
+		g_print ("%s '%s'\n", _("Failed to create directory:"), tempdir);
+		retval = 1;
+		goto out;
+	}
+	pk_service_pack_set_temp_directory (pack, tempdir);
+
+	/* get the exclude list */
+	excludes = NULL;
+#if 0
+	ret = pk_obj_list_from_file (PK_OBJ_LIST(list), package_list);
+	if (!ret) {
+		/* TRANSLATORS: This is when the list of packages from the remote computer cannot be opened */
+		g_print ("%s: '%s'\n", _("Failed to open package list."), package_list);
+		retval = 1;
+		goto out;
+	}
+#endif
+
+	/* resolve package name to package_id */
+	if (!updates) {
+		/* TRANSLATORS: The package name is being matched up to available packages */
+		g_print ("%s\n", _("Finding package name."));
+		package_id = pk_console_resolve_package (client, PK_FILTER_ENUM_NONE, package, &error);
+		if (package_id == NULL) {
+			/* TRANSLATORS: This is when the package cannot be found in any software source. The detailed error follows */
+			g_print (_("Failed to find package '%s': %s"), package, error->message);
+			g_error_free (error);
+			retval = 1;
+			goto out;
+		}
+	}
+
+	/* TRANSLATORS: This is telling the user we are in the process of making the pack */
+	g_print ("%s\n", _("Creating service pack..."));
+	if (updates)
+		ret = pk_generate_pack_create_for_updates (pack, filename, excludes, &error);
+	else {
+		gchar **package_ids;
+		package_ids = pk_package_ids_from_id (package_id);
+		ret = pk_generate_pack_create_for_package_ids (pack, filename, package_ids, excludes, &error);
+		g_strfreev (package_ids);
+	}
+
+	/* no more progress */
+	pk_progress_bar_end (progressbar);
+
+	if (ret) {
+		/* TRANSLATORS: we succeeded in making the file */
+		g_print (_("Service pack created '%s'"), filename);
+		g_print ("\n");
+		retval = 0;
+	} else {
+		/* TRANSLATORS: we failed to make te file */
+		g_print (_("Failed to create '%s': %s"), filename, error->message);
+		g_print ("\n");
+		g_error_free (error);
+	}
+
+out:
+	/* get rid of temp directory */
+	g_rmdir (tempdir);
+
+	g_object_unref (cancellable);
+	if (progressbar != NULL)
+		g_object_unref (progressbar);
+	if (pack != NULL)
+		g_object_unref (pack);
+	if (client != NULL)
+		g_object_unref (client);
+	if (control != NULL)
+		g_object_unref (control);
+	g_free (tempdir);
+	g_free (filename);
+	g_free (package_id);
+	g_free (directory);
+	g_free (package_list);
+	g_free (options_help);
+	g_strfreev (excludes);
+	return retval;
+}
commit 99522c898e44e74c805bc9e416c4faac67a620e5
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 19:16:18 2009 +0100

    glib2: remove the PkText shared code, and just duplicate the code for simplicity

diff --git a/client/pk-console-shared.c b/client/pk-console-shared.c
new file mode 100644
index 0000000..3733854
--- /dev/null
+++ b/client/pk-console-shared.c
@@ -0,0 +1,263 @@
+/* -*- 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 <stdio.h>
+#include <gio/gio.h>
+#include <glib/gi18n.h>
+#include <packagekit-glib2/packagekit.h>
+
+#include "egg-debug.h"
+
+#include "pk-console-shared.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';
+	gboolean ret = FALSE;
+
+	/* 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) fgetc (stdin);
+
+		/* positive */
+		if (answer == 'y' || answer == 'Y') {
+			ret = TRUE;
+			break;
+		}
+		/* negative */
+		if (answer == 'n' || answer == 'N')
+			break;
+
+		/* default choice */
+		if (answer == '\n' && defaultyes) {
+			ret = TRUE;
+			break;
+		}
+		if (answer == '\n' && !defaultyes)
+			break;
+	} while (TRUE);
+
+	/* remove the trailing \n */
+	answer = (gchar) fgetc (stdin);
+	if (answer != '\n')
+		ungetc (answer, stdin);
+
+	return ret;
+}
+
+/* tiny helper to help us do the async operation */
+typedef struct {
+	GError		**error;
+	GMainLoop	*loop;
+	PkResults	*results;
+} PkConsoleSyncHelper;
+
+/**
+ * pk_console_sync_resolve_cb:
+ **/
+static void
+pk_console_sync_resolve_cb (PkClient *client, GAsyncResult *res, PkConsoleSyncHelper *helper)
+{
+	PkResults *results;
+	/* get the result */
+	results = pk_client_generic_finish (client, res, helper->error);
+	if (results != NULL) {
+		g_object_unref (results);
+		helper->results = g_object_ref (G_OBJECT (results));
+	}
+	g_main_loop_quit (helper->loop);
+}
+
+/**
+ * pk_console_sync_resolve:
+ * @console: a valid #PkClient instance
+ * @error: A #GError or %NULL
+ *
+ * Resolves a package to a Package ID.
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: a %PkResults object, or NULL for error
+ **/
+static PkResults *
+pk_console_sync_resolve (PkClient *client, PkFilterEnum filter, gchar **packages, GError **error)
+{
+	PkConsoleSyncHelper *helper;
+	PkResults *results;
+
+	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+	/* create temp object */
+	helper = g_new0 (PkConsoleSyncHelper, 1);
+	helper->loop = g_main_loop_new (NULL, FALSE);
+	helper->error = error;
+
+	/* run async method */
+	pk_client_resolve_async (client, filter, packages, NULL, NULL, NULL,
+				 (GAsyncReadyCallback) pk_console_sync_resolve_cb, helper);
+	g_main_loop_run (helper->loop);
+
+	results = helper->results;
+
+	/* free temp object */
+	g_main_loop_unref (helper->loop);
+	g_free (helper);
+
+	return results;
+}
+
+/**
+ * pk_console_resolve_package:
+ **/
+gchar *
+pk_console_resolve_package (PkClient *client, PkBitfield filter, const gchar *package, GError **error)
+{
+	gchar *package_id = NULL;
+	gboolean valid;
+	gchar **tmp;
+	PkResults *results;
+	GPtrArray *array = NULL;
+	guint i;
+	gchar *printable;
+	const PkResultItemPackage *item;
+
+	/* have we passed a complete package_id? */
+	valid = pk_package_id_check (package);
+	if (valid)
+		return g_strdup (package);
+
+	/* split */
+	tmp = g_strsplit (package, ",", -1);
+
+	/* get the list of possibles */
+	results = pk_console_sync_resolve (client, filter, tmp, error);
+	if (results == NULL)
+		goto out;
+
+	/* get the packages returned */
+	array = pk_results_get_package_array (results);
+	if (array == NULL) {
+		*error = g_error_new (1, 0, "did not get package struct for %s", package);
+		goto out;
+	}
+
+	/* nothing found */
+	if (array->len == 0) {
+		*error = g_error_new (1, 0, "could not find %s", package);
+		goto out;
+	}
+
+	/* just one thing found */
+	if (array->len == 1) {
+		item = g_ptr_array_index (array, 0);
+		package_id = g_strdup (item->package_id);
+		goto out;
+	}
+
+	/* TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages  */
+	g_print ("%s\n", _("More than one package matches:"));
+	for (i=0; i<array->len; i++) {
+		item = g_ptr_array_index (array, i);
+		printable = pk_package_id_to_printable (item->package_id);
+		g_print ("%i. %s\n", i+1, printable);
+		g_free (printable);
+	}
+
+	/* TRANSLATORS: This finds out which package in the list to use */
+	i = pk_console_get_number (_("Please choose the correct package: "), array->len);
+	item = g_ptr_array_index (array, i-1);
+	package_id = g_strdup (item->package_id);
+out:
+	if (results != NULL)
+		g_object_unref (results);
+	if (array != NULL)
+		g_ptr_array_unref (array);
+	g_strfreev (tmp);
+	return package_id;
+}
+
+/**
+ * pk_console_resolve_packages:
+ **/
+gchar **
+pk_console_resolve_packages (PkClient *client, PkBitfield filter, gchar **packages, GError **error)
+{
+	gchar **package_ids;
+	guint i;
+	guint len;
+
+	/* get length */
+	len = g_strv_length (packages);
+	egg_debug ("resolving %i packages", len);
+
+	/* create output array*/
+	package_ids = g_new0 (gchar *, len+1);
+
+	/* resolve each package */
+	for (i=0; i<len; i++) {
+		package_ids[i] = pk_console_resolve_package (client, filter, packages[i], error);
+		if (package_ids[i] == NULL) {
+			/* destroy state */
+			g_strfreev (package_ids);
+			package_ids = NULL;
+			break;
+		}
+	}
+	return package_ids;
+}
+
diff --git a/client/pk-console-shared.h b/client/pk-console-shared.h
new file mode 100644
index 0000000..1da5336
--- /dev/null
+++ b/client/pk-console-shared.h
@@ -0,0 +1,44 @@
+/* -*- 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_CONSOLE_SHARED_H
+#define __PK_CONSOLE_SHARED_H
+
+#include <glib.h>
+#include <packagekit-glib2/packagekit.h>
+
+guint		 pk_console_get_number			(const gchar	*question,
+							 guint		 maxnum);
+gboolean	 pk_console_get_prompt			(const gchar	*question,
+							 gboolean	 defaultyes);
+gchar		*pk_console_resolve_package		(PkClient	*client,
+							 PkBitfield	 filter,
+							 const gchar	*package,
+							 GError		**error);
+gchar		**pk_console_resolve_packages		(PkClient	*client,
+							 PkBitfield	 filter,
+							 gchar		**packages,
+							 GError		**error);
+
+#endif /* __PK_CONSOLE_SHARED_H */
+
+
+
diff --git a/client/pk-console-test.c b/client/pk-console-test.c
index 1a6ac18..5fce48a 100644
--- a/client/pk-console-test.c
+++ b/client/pk-console-test.c
@@ -33,9 +33,8 @@
 #include <locale.h>
 
 #include "egg-debug.h"
-//#include "egg-string.h"
 
-#include "pk-text.h"
+#include "pk-console-shared.h"
 #include "pk-task-text.h"
 #include "pk-progress-bar.h"
 
@@ -410,168 +409,6 @@ pk_console_files_cb (PkResultItemFiles *obj, gpointer data)
 	}
 }
 
-/* tiny helper to help us do the async operation */
-typedef struct {
-	GError		**error;
-	GMainLoop	*loop;
-	PkResults	*results;
-} PkConsoleSyncHelper;
-
-/**
- * pk_console_sync_resolve_cb:
- **/
-static void
-pk_console_sync_resolve_cb (PkClient *client, GAsyncResult *res, PkConsoleSyncHelper *helper)
-{
-	PkResults *results;
-	/* get the result */
-	results = pk_client_generic_finish (client, res, helper->error);
-	if (results != NULL) {
-		g_object_unref (results);
-		helper->results = g_object_ref (G_OBJECT (results));
-	}
-	g_main_loop_quit (helper->loop);
-}
-
-/**
- * pk_console_sync_resolve:
- * @console: a valid #PkClient instance
- * @error: A #GError or %NULL
- *
- * Resolves a package to a Package ID.
- * Warning: this function is synchronous, and may block. Do not use it in GUI
- * applications.
- *
- * Return value: a %PkResults object, or NULL for error
- **/
-static PkResults *
-pk_console_sync_resolve (PkClient *client, PkFilterEnum filter, gchar **packages, GError **error)
-{
-	PkConsoleSyncHelper *helper;
-	PkResults *results;
-
-	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-	/* create temp object */
-	helper = g_new0 (PkConsoleSyncHelper, 1);
-	helper->loop = g_main_loop_new (NULL, FALSE);
-	helper->error = error;
-
-	/* run async method */
-	pk_client_resolve_async (client, filter, packages, cancellable, NULL, NULL,
-				 (GAsyncReadyCallback) pk_console_sync_resolve_cb, helper);
-	g_main_loop_run (helper->loop);
-
-	results = helper->results;
-
-	/* free temp object */
-	g_main_loop_unref (helper->loop);
-	g_free (helper);
-
-	return results;
-}
-
-/**
- * pk_console_perhaps_resolve_package:
- **/
-static gchar *
-pk_console_perhaps_resolve_package (PkBitfield filter, const gchar *package, GError **error)
-{
-	gchar *package_id = NULL;
-	gboolean valid;
-	gchar **tmp;
-	PkResults *results;
-	GPtrArray *array = NULL;
-	guint i;
-	gchar *printable;
-	const PkResultItemPackage *item;
-
-	/* have we passed a complete package_id? */
-	valid = pk_package_id_check (package);
-	if (valid)
-		return g_strdup (package);
-
-	/* split */
-	tmp = g_strsplit (package, ",", -1);
-
-	/* get the list of possibles */
-	results = pk_console_sync_resolve (PK_CLIENT(task), filter, tmp, error);
-	if (results == NULL)
-		goto out;
-
-	/* get the packages returned */
-	array = pk_results_get_package_array (results);
-	if (array == NULL) {
-		*error = g_error_new (1, 0, "did not get package struct for %s", package);
-		goto out;
-	}
-
-	/* nothing found */
-	if (array->len == 0) {
-		*error = g_error_new (1, 0, "could not find %s", package);
-		goto out;
-	}
-
-	/* just one thing found */
-	if (array->len == 1) {
-		item = g_ptr_array_index (array, 0);
-		package_id = g_strdup (item->package_id);
-		goto out;
-	}
-
-	/* TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages  */
-	g_print ("%s\n", _("More than one package matches:"));
-	for (i=0; i<array->len; i++) {
-		item = g_ptr_array_index (array, i);
-		printable = pk_package_id_to_printable (item->package_id);
-		g_print ("%i. %s\n", i+1, printable);
-		g_free (printable);
-	}
-
-	/* TRANSLATORS: This finds out which package in the list to use */
-	i = pk_console_get_number (_("Please choose the correct package: "), array->len);
-	item = g_ptr_array_index (array, i-1);
-	package_id = g_strdup (item->package_id);
-out:
-	if (results != NULL)
-		g_object_unref (results);
-	if (array != NULL)
-		g_ptr_array_unref (array);
-	g_strfreev (tmp);
-	return package_id;
-}
-
-/**
- * pk_console_perhaps_resolve:
- **/
-static gchar **
-pk_console_perhaps_resolve (PkBitfield filter, gchar **packages, GError **error)
-{
-	gchar **package_ids;
-	guint i;
-	guint len;
-
-	/* get length */
-	len = g_strv_length (packages);
-	egg_debug ("resolving %i packages", len);
-
-	/* create output array*/
-	package_ids = g_new0 (gchar *, len+1);
-
-	/* resolve each package */
-	for (i=0; i<len; i++) {
-		package_ids[i] = pk_console_perhaps_resolve_package (filter, packages[i], error);
-		if (package_ids[i] == NULL) {
-			/* destroy state */
-			g_strfreev (package_ids);
-			package_ids = NULL;
-			break;
-		}
-	}
-	return package_ids;
-}
-
-
 /**
  * pk_console_progress_cb:
  **/
@@ -728,7 +565,7 @@ pk_console_install_packages (gchar **packages, GError **error)
 	gchar **package_ids;
 	GError *error_local = NULL;
 
-	package_ids = pk_console_perhaps_resolve (pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), packages, &error_local);
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), packages, &error_local);
 	if (package_ids == 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 find the available package: %s"), error_local->message);
@@ -756,7 +593,7 @@ pk_console_remove_packages (gchar **packages, GError **error)
 	gchar **package_ids;
 	GError *error_local = NULL;
 
-	package_ids = pk_console_perhaps_resolve (pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), packages, &error_local);
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), packages, &error_local);
 	if (package_ids == 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 find the installed package: %s"), error_local->message);
@@ -784,7 +621,7 @@ pk_console_download_packages (gchar **packages, const gchar *directory, GError *
 	gchar **package_ids;
 	GError *error_local = NULL;
 
-	package_ids = pk_console_perhaps_resolve (pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
 	if (package_ids == 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 find the package: %s"), error_local->message);
@@ -812,7 +649,7 @@ pk_console_update_packages (gchar **packages, GError **error)
 	gchar **package_ids;
 	GError *error_local = NULL;
 
-	package_ids = pk_console_perhaps_resolve (pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), packages, &error_local);
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), packages, &error_local);
 	if (package_ids == 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 find the package: %s"), error_local->message);
@@ -840,7 +677,7 @@ pk_console_get_requires (PkBitfield filters, gchar **packages, GError **error)
 	gchar **package_ids = NULL;
 	GError *error_local = NULL;
 
-	package_ids = pk_console_perhaps_resolve (pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
 	if (package_ids == 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 find all the packages: %s"), error_local->message);
@@ -868,7 +705,7 @@ pk_console_get_depends (PkBitfield filters, gchar **packages, GError **error)
 	gchar **package_ids = NULL;
 	GError *error_local = NULL;
 
-	package_ids = pk_console_perhaps_resolve (pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
 	if (package_ids == 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 find all the packages: %s"), error_local->message);
@@ -896,7 +733,7 @@ pk_console_get_details (gchar **packages, GError **error)
 	gchar **package_ids = NULL;
 	GError *error_local = NULL;
 
-	package_ids = pk_console_perhaps_resolve (pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
 	if (package_ids == 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 find all the packages: %s"), error_local->message);
@@ -924,7 +761,7 @@ pk_console_get_files (gchar **packages, GError **error)
 	gchar **package_ids = NULL;
 	GError *error_local = NULL;
 
-	package_ids = pk_console_perhaps_resolve (pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NONE), packages, &error_local);
 	if (package_ids == 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 all the packages: %s"), error_local->message);
@@ -952,7 +789,7 @@ pk_console_get_update_detail (gchar **packages, GError **error)
 	gchar **package_ids = NULL;
 	GError *error_local = NULL;
 
-	package_ids = pk_console_perhaps_resolve (pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), packages, &error_local);
+	package_ids = pk_console_resolve_packages (PK_CLIENT(task), pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED), packages, &error_local);
 	if (package_ids == 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 all the packages: %s"), error_local->message);
@@ -985,10 +822,10 @@ pk_connection_changed_cb (PkControl *control_, gboolean connected, gpointer data
 }
 
 /**
- * pk_console_sigint_handler:
+ * pk_console_sigint_cb:
  **/
 static void
-pk_console_sigint_handler (int sig)
+pk_console_sigint_cb (int sig)
 {
 	egg_debug ("Handling SIGINT");
 
@@ -1129,7 +966,7 @@ main (int argc, char *argv[])
 	g_type_init ();
 
 	/* do stuff on ctrl-c */
-	signal (SIGINT, pk_console_sigint_handler);
+	signal (SIGINT, pk_console_sigint_cb);
 
 	/* check if we are on console */
 	if (isatty (fileno (stdout)) == 1)
diff --git a/client/pk-console.c b/client/pk-console.c
index 9a1bfaa..282a50b 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -38,7 +38,6 @@
 #include "egg-debug.h"
 #include "egg-string.h"
 
-#include "pk-text.h"
 #include "pk-tools-common.h"
 
 #define PROGRESS_BAR_SIZE 15
diff --git a/client/pk-generate-pack.c b/client/pk-generate-pack.c
index c6a5760..6be3f8d 100644
--- a/client/pk-generate-pack.c
+++ b/client/pk-generate-pack.c
@@ -1,6 +1,6 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
  *
- * Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
+ * Copyright (C) 2008-2009 Richard Hughes <richard at hughsie.com>
  * Copyright (C) 2008 Shishir Goel <crazyontheedge at gmail.com>
  *
  * Licensed under the GNU General Public License Version 2
@@ -26,7 +26,6 @@
 #include <signal.h>
 #include <stdlib.h>
 #include <locale.h>
-#include <glib.h>
 #include <glib/gi18n.h>
 #include <glib/gstdio.h>
 #include <packagekit-glib/packagekit.h>
@@ -34,7 +33,6 @@
 #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 c7bd684..3d9a0e2 100644
--- a/client/pk-monitor.c
+++ b/client/pk-monitor.c
@@ -32,7 +32,7 @@
 
 #include "egg-debug.h"
 
-#include "pk-text.h"
+#include "pk-tools-common.h"
 
 static PkControl *control = NULL;
 static gboolean verbose = FALSE;
diff --git a/client/pk-task-text.c b/client/pk-task-text.c
index 3ec7480..e2985ba 100644
--- a/client/pk-task-text.c
+++ b/client/pk-task-text.c
@@ -27,7 +27,7 @@
 #include "egg-debug.h"
 
 #include "pk-task-text.h"
-#include "pk-text.h"
+#include "pk-console-shared.h"
 
 static void     pk_task_text_finalize	(GObject     *object);
 
diff --git a/client/pk-text.c b/client/pk-text.c
deleted file mode 100644
index 27d5b85..0000000
--- a/client/pk-text.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/* -*- 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';
-	gboolean ret = FALSE;
-
-	/* 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) fgetc (stdin);
-
-		/* positive */
-		if (answer == 'y' || answer == 'Y') {
-			ret = TRUE;
-			break;
-		}
-		/* negative */
-		if (answer == 'n' || answer == 'N')
-			break;
-
-		/* default choice */
-		if (answer == '\n' && defaultyes) {
-			ret = TRUE;
-			break;
-		}
-		if (answer == '\n' && !defaultyes)
-			break;
-	} while (TRUE);
-
-	/* remove the trailing \n */
-	answer = (gchar) fgetc (stdin);
-	if (answer != '\n')
-		ungetc (answer, stdin);
-
-	return ret;
-}
-
diff --git a/client/pk-text.h b/client/pk-text.h
deleted file mode 100644
index 75899a6..0000000
--- a/client/pk-text.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* -*- 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 915dc18..b021d27 100644
--- a/client/pk-tools-common.c
+++ b/client/pk-tools-common.c
@@ -28,7 +28,76 @@
 #include <egg-debug.h>
 
 #include "pk-tools-common.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';
+	gboolean ret = FALSE;
+
+	/* 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) fgetc (stdin);
+
+		/* positive */
+		if (answer == 'y' || answer == 'Y') {
+			ret = TRUE;
+			break;
+		}
+		/* negative */
+		if (answer == 'n' || answer == 'N')
+			break;
+
+		/* default choice */
+		if (answer == '\n' && defaultyes) {
+			ret = TRUE;
+			break;
+		}
+		if (answer == '\n' && !defaultyes)
+			break;
+	} while (TRUE);
+
+	/* remove the trailing \n */
+	answer = (gchar) fgetc (stdin);
+	if (answer != '\n')
+		ungetc (answer, stdin);
+
+	return ret;
+}
 
 /**
  * pk_console_resolve:
diff --git a/client/pk-tools-common.h b/client/pk-tools-common.h
index 93c9ecd..6846629 100644
--- a/client/pk-tools-common.h
+++ b/client/pk-tools-common.h
@@ -22,9 +22,13 @@
 #ifndef __PK_TOOLS_COMMON_H
 #define __PK_TOOLS_COMMON_H
 
-#include <glib/gi18n.h>
+#include <glib.h>
 #include <packagekit-glib/packagekit.h>
 
+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 5234d93235292c32390a70657f342493e554614b
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 19:14:07 2009 +0100

    glib2: Merge all the changes to PkServicePack so it actually works

diff --git a/lib/packagekit-glib2/pk-service-pack.c b/lib/packagekit-glib2/pk-service-pack.c
index 52203f2..76ec568 100644
--- a/lib/packagekit-glib2/pk-service-pack.c
+++ b/lib/packagekit-glib2/pk-service-pack.c
@@ -40,6 +40,7 @@
 #include <packagekit-glib2/pk-enum.h>
 #include <packagekit-glib2/pk-results.h>
 #include <packagekit-glib2/pk-client.h>
+#include <packagekit-glib2/pk-package-id.h>
 #include <packagekit-glib2/pk-package-ids.h>
 
 #include "egg-debug.h"
@@ -419,66 +420,12 @@ pk_service_pack_set_temp_directory (PkServicePack *pack, const gchar *directory)
 	return TRUE;
 }
 
-#if 0
-/**
- * pk_service_pack_download_package_ids:
- **/
-static gboolean
-pk_service_pack_download_package_ids (PkServicePack *pack, gchar **package_ids, GError **error)
-{
-	gboolean ret;
-	GError *error_local = NULL;
-
-	g_return_val_if_fail (PK_IS_SERVICE_PACK (pack), FALSE);
-	g_return_val_if_fail (package_ids != NULL, FALSE);
-	g_return_val_if_fail (pack->priv->directory != NULL, FALSE);
-
-	egg_debug ("download+ %s", package_ids[0]);
-	ret = pk_client_download_packages (pack->priv->client, package_ids, pack->priv->directory, &error_local);
-	if (!ret) {
-		*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_FAILED_DOWNLOAD,
-				      "failed to download: %s", error_local->message);
-		g_error_free (error_local);
-		goto out;
-	}
-out:
-	return ret;
-}
-#endif
-
-#if 0
-/**
- * pk_service_pack_exclude_packages:
- **/
-static gboolean
-pk_service_pack_exclude_packages (PkServicePack *pack, gchar **package_ids)
-{
-	guint i;
-	guint length;
-	gboolean found;
-
-	g_return_val_if_fail (PK_IS_SERVICE_PACK (pack), FALSE);
-	g_return_val_if_fail (package_ids != NULL, FALSE);
-
-	/* do not just download everything, uselessly */
-	length = pk_package_list_get_size (package_ids);
-	for (i=0; i<length; i++) {
-		obj = pk_package_list_get_obj (package_ids, i);
-		/* will just ignore if the obj is not there */
-		found = pk_obj_list_remove (PK_OBJ_LIST(list), obj);
-		if (found)
-			egg_debug ("removed %s", obj->id->name);
-	}
-	return TRUE;
-}
-#endif
-
 #ifdef HAVE_ARCHIVE_H
 /**
  * pk_service_pack_create_metadata_file:
  **/
 static gboolean
-pk_service_pack_create_metadata_file (PkServicePackState *state)
+pk_service_pack_create_metadata_file (PkServicePackState *state, const gchar *filename)
 {
 	gboolean ret = FALSE;
 	gchar *distro_id = NULL;
@@ -517,13 +464,12 @@ pk_service_pack_create_metadata_file (PkServicePackState *state)
 	}
 
 	/* save contents */
-	ret = g_file_set_contents (state->filename, data, -1, &error);
+	ret = g_file_set_contents (filename, data, -1, &error);
 	if (!ret) {
 		egg_warning ("failed to save file: %s", error->message);
 		g_error_free (error);
 		goto out;
 	}
-
 out:
 	g_key_file_free (file);
 	g_free (data);
@@ -620,7 +566,7 @@ pk_service_pack_create_from_files (PkServicePackState *state, gchar **file_array
 
 	/* create a file with metadata in it */
 	filename = g_build_filename (g_get_tmp_dir (), "metadata.conf", NULL);
-	ret = pk_service_pack_create_metadata_file (state);
+	ret = pk_service_pack_create_metadata_file (state, filename);
 	if (!ret) {
 		*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_FAILED_CREATE,
 				      "failed to generate metadata file %s", filename);
@@ -672,123 +618,6 @@ pk_service_pack_create_from_files (PkServicePackState *state, GPtrArray *file_ar
 }
 #endif
 
-#if 0
-/**
- * pk_service_pack_scan_files_in_directory:
- **/
-static GPtrArray *
-pk_service_pack_scan_files_in_directory (PkServicePack *pack)
-{
-	gchar *src;
-	GPtrArray *file_array = NULL;
-	GDir *dir;
-	const gchar *filename;
-
-	g_return_val_if_fail (PK_IS_SERVICE_PACK (pack), NULL);
-	g_return_val_if_fail (pack->priv->directory != NULL, NULL);
-
-	/* try and open the directory */
-	dir = g_dir_open (pack->priv->directory, 0, NULL);
-	if (dir == NULL) {
-		egg_warning ("failed to get directory for %s", pack->priv->directory);
-		goto out;
-	}
-
-	/* add each file to an array */
-	file_array = g_ptr_array_new ();
-	while ((filename = g_dir_read_name (dir))) {
-		src = g_build_filename (pack->priv->directory, filename, NULL);
-		g_ptr_array_add (file_array, src);
-	}
-	g_dir_close (dir);
-out:
-	return file_array;
-}
-#endif
-
-#if 0
-/**
- * pk_service_pack_package_cb:
- **/
-static void
-pk_service_pack_package_cb (PkClient *client, const PkPackageObj *obj, PkServicePack *pack)
-{
-	g_return_if_fail (PK_IS_SERVICE_PACK (pack));
-
-	/* only shown downloading */
-	if (obj->info != PK_INFO_ENUM_DOWNLOADING)
-		return;
-}
-
-/**
- * pk_service_pack_create_for_package_ids_internal:
- **/
-static gboolean
-pk_service_pack_create_for_package_ids_internal (PkServicePack *pack, gchar **package_ids, GError **error)
-{
-	gchar **package_ids_deps = NULL;
-	PkPackageList *list = NULL;
-	guint length;
-	GPtrArray *file_array = NULL;
-	GError *error_local = NULL;
-	gboolean ret = FALSE;
-
-	g_return_val_if_fail (PK_IS_SERVICE_PACK (pack), FALSE);
-	g_return_val_if_fail (package_ids != NULL, FALSE);
-	g_return_val_if_fail (error != NULL, FALSE);
-	g_return_val_if_fail (state->filename != NULL, FALSE);
-	g_return_val_if_fail (pack->priv->directory != NULL, FALSE);
-
-	/* remove some deps */
-	pk_package_list_set_fuzzy_arch (list, TRUE);
-	pk_service_pack_exclude_packages (pack, list);
-
-	/* get the deps */
-	length = pk_package_list_get_size (list);
-	if (length != 0) {
-		/* download additional package_ids */
-		package_ids_deps = pk_package_list_to_strv (list);
-		pk_service_pack_status_changed (pack, PK_SERVICE_PACK_STATUS_DOWNLOAD_DEPENDENCIES);
-		ret = pk_service_pack_download_package_ids (pack, package_ids_deps, &error_local);
-		g_strfreev (package_ids_deps);
-
-		/* failed to get deps */
-		if (!ret) {
-			*error = g_error_new (PK_SERVICE_PACK_ERROR, error_local->code,
-					      "failed to download deps of package: %s", error_local->message);
-			g_error_free (error_local);
-			goto out;
-		}
-	}
-
-	/* find packages that were downloaded */
-	file_array = pk_service_pack_scan_files_in_directory (pack);
-	if (file_array == NULL) {
-		*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_FAILED_SETUP,
-				      "failed to scan directory: %s", pack->priv->directory);
-		goto out;
-	}
-
-	/* generate pack file */
-	ret = pk_service_pack_create_from_files (pack, file_array, &error_local);
-	if (!ret) {
-		*error = g_error_new (PK_SERVICE_PACK_ERROR, error_local->code,
-				      "failed to create archive: %s", error_local->message);
-		g_error_free (error_local);
-		goto out;
-	}
-
-out:
-	if (list != NULL)
-		g_object_unref (list);
-	if (file_array != NULL) {
-		g_ptr_array_foreach (file_array, (GFunc) g_free, NULL);
-		g_ptr_array_free (file_array, TRUE);
-	}
-	return ret;
-}
-#endif
-
 /**
  * pk_service_pack_generic_state_finish:
  **/
@@ -821,20 +650,48 @@ pk_service_pack_generic_state_finish (PkServicePackState *state, const GError *e
 }
 
 /**
+ * pk_service_pack_get_files_from_array:
+ **/
+static gchar **
+pk_service_pack_get_files_from_array (const GPtrArray *array)
+{
+	gchar **files = NULL;
+	guint i;
+	const PkResultItemFiles *item;
+
+	/* internal error */
+	if (array == NULL) {
+		egg_warning ("internal error");
+		goto out;
+	}
+
+	/* get GStr of all the files */
+	files = g_new0 (gchar *, array->len + 1);
+	for (i=0; i<array->len; i++) {
+		item = g_ptr_array_index (array, i);
+		/* assume only one file per package */
+		files[i] = g_strdup (item->files[0]);
+	}
+out:
+	return files;
+}
+
+/**
  * pk_service_pack_download_ready_cb:
  **/
 static void
 pk_service_pack_download_ready_cb (GObject *source_object, GAsyncResult *res, PkServicePackState *state)
 {
-	PkServicePack *pack = PK_SERVICE_PACK (source_object);
+	PkClient *client = PK_CLIENT (source_object);
 	GError *error = NULL;
 	PkResults *results;
 	PkExitEnum exit_enum;
 	gboolean ret;
 	gchar **files = NULL;
+	GPtrArray *array = NULL;
 
 	/* get the results */
-	results = pk_client_generic_finish (PK_CLIENT(pack), res, &error);
+	results = pk_client_generic_finish (client, res, &error);
 	if (results == NULL) {
 		pk_service_pack_generic_state_finish (state, error);
 		g_error_free (error);
@@ -850,8 +707,11 @@ pk_service_pack_download_ready_cb (GObject *source_object, GAsyncResult *res, Pk
 		goto out;
 	}
 
+	/* get the files data */
+	array = pk_results_get_files_array (results);
+
 	/* now create pack */
-	egg_error ("todo");
+	files = pk_service_pack_get_files_from_array (array);
 	ret = pk_service_pack_create_from_files (state, files, &error);
 	if (!ret) {
 		pk_service_pack_generic_state_finish (state, error);
@@ -866,29 +726,49 @@ pk_service_pack_download_ready_cb (GObject *source_object, GAsyncResult *res, Pk
 	pk_service_pack_generic_state_finish (state, error);
 out:
 	g_strfreev (files);
+	if (array != NULL)
+		g_ptr_array_unref (array);
 	if (results != NULL)
 		g_object_unref (results);
 	return;
 }
 
 /**
+ * pk_service_pack_in_excludes_list:
+ **/
+static gboolean
+pk_service_pack_in_excludes_list (PkServicePackState *state, const gchar *package_id)
+{
+	guint i;
+	if (state->package_ids_exclude == NULL)
+		goto out;
+	for (i=0; state->package_ids_exclude[i] != NULL; i++) {
+		if (pk_package_id_equal_fuzzy_arch (state->package_ids_exclude[i], package_id))
+			return TRUE;
+	}
+out:
+	return FALSE;
+}
+
+/**
  * pk_service_pack_get_depends_ready_cb:
  **/
 static void
 pk_service_pack_get_depends_ready_cb (GObject *source_object, GAsyncResult *res, PkServicePackState *state)
 {
-	PkServicePack *pack = PK_SERVICE_PACK (source_object);
+	PkClient *client = PK_CLIENT (source_object);
 	GError *error = NULL;
 	PkResults *results;
 	PkExitEnum exit_enum;
 	GPtrArray *array = NULL;
 	guint i;
+	guint j = 0;
 	const PkResultItemPackage *package;
 	gchar **package_ids = NULL;
 	gchar **package_ids_to_download = NULL;
 
 	/* get the results */
-	results = pk_client_generic_finish (PK_CLIENT(pack), res, &error);
+	results = pk_client_generic_finish (client, res, &error);
 	if (results == NULL) {
 		pk_service_pack_generic_state_finish (state, error);
 		g_error_free (error);
@@ -909,12 +789,14 @@ pk_service_pack_get_depends_ready_cb (GObject *source_object, GAsyncResult *res,
 	package_ids = g_new0 (gchar *, array->len + 1);
 	for (i=0; i<array->len; i++) {
 		package = g_ptr_array_index (array, i);
-		package_ids[i] = g_strdup (package->package_id);
+		/* only add if the ID is not in the excludes list */
+		if (!pk_service_pack_in_excludes_list (state, package->package_id))
+			package_ids[j++] = g_strdup (package->package_id);
 	}
 	package_ids_to_download = pk_package_ids_add_ids (state->package_ids, package_ids);
 
 	/* now download */
-	pk_client_download_packages_async (PK_CLIENT(state->pack), package_ids_to_download, pack->priv->directory,
+	pk_client_download_packages_async (state->pack->priv->client, package_ids_to_download, state->pack->priv->directory,
 					   state->cancellable, state->progress_callback, state->progress_user_data,
 					   (GAsyncReadyCallback) pk_service_pack_download_ready_cb, state);
 out:
@@ -932,7 +814,7 @@ out:
  * @pack: a valid #PkServicePack instance
  * @filename: the filename of the service pack
  * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
- * @package_ids_exclude: An array of packages to exclude
+ * @package_ids_exclude: An array of packages to exclude, or %NULL
  * @cancellable: a #GCancellable or %NULL
  * @callback: the function to run on completion
  * @progress_callback: the function to run when the progress changes
@@ -970,7 +852,7 @@ pk_service_pack_create_for_package_ids_async (PkServicePack *pack, const gchar *
 	g_object_add_weak_pointer (G_OBJECT (state->pack), (gpointer) &state->pack);
 
 	/* get deps, TODO: use NEWEST? */
-	pk_client_get_depends_async (PK_CLIENT(state->pack), PK_FILTER_ENUM_NONE, state->package_ids, TRUE,
+	pk_client_get_depends_async (pack->priv->client, PK_FILTER_ENUM_NONE, state->package_ids, TRUE,
 				     state->cancellable, state->progress_callback, state->progress_user_data,
 				     (GAsyncReadyCallback) pk_service_pack_get_depends_ready_cb, state);
 
@@ -983,7 +865,7 @@ pk_service_pack_create_for_package_ids_async (PkServicePack *pack, const gchar *
 static void
 pk_service_pack_get_updates_ready_cb (GObject *source_object, GAsyncResult *res, PkServicePackState *state)
 {
-	PkServicePack *pack = PK_SERVICE_PACK (source_object);
+	PkClient *client = PK_CLIENT (source_object);
 	GError *error = NULL;
 	PkResults *results;
 	PkExitEnum exit_enum;
@@ -992,7 +874,7 @@ pk_service_pack_get_updates_ready_cb (GObject *source_object, GAsyncResult *res,
 	const PkResultItemPackage *package;
 
 	/* get the results */
-	results = pk_client_generic_finish (PK_CLIENT(pack), res, &error);
+	results = pk_client_generic_finish (client, res, &error);
 	if (results == NULL) {
 		pk_service_pack_generic_state_finish (state, error);
 		g_error_free (error);
@@ -1017,7 +899,7 @@ pk_service_pack_get_updates_ready_cb (GObject *source_object, GAsyncResult *res,
 	}
 
 	/* get deps, TODO: use NEWEST? */
-	pk_client_get_depends_async (PK_CLIENT(state->pack), PK_FILTER_ENUM_NONE, state->package_ids, TRUE,
+	pk_client_get_depends_async (state->pack->priv->client, PK_FILTER_ENUM_NONE, state->package_ids, TRUE,
 				     state->cancellable, state->progress_callback, state->progress_user_data,
 				     (GAsyncReadyCallback) pk_service_pack_get_depends_ready_cb, state);
 out:
@@ -1032,7 +914,7 @@ out:
  * pk_service_pack_create_for_updates_async:
  * @pack: a valid #PkServicePack instance
  * @filename: the filename of the service pack
- * @package_ids_exclude: An array of packages to exclude
+ * @package_ids_exclude: An array of packages to exclude, or %NULL
  * @cancellable: a #GCancellable or %NULL
  * @callback: the function to run on completion
  * @progress_callback: the function to run when the progress changes
@@ -1069,7 +951,7 @@ pk_service_pack_create_for_updates_async (PkServicePack *pack, const gchar *file
 	g_object_add_weak_pointer (G_OBJECT (state->pack), (gpointer) &state->pack);
 
 	/* get deps, TODO: use NEWEST? */
-	pk_client_get_updates_async (PK_CLIENT(state->pack), PK_FILTER_ENUM_NONE,
+	pk_client_get_updates_async (pack->priv->client, PK_FILTER_ENUM_NONE,
 				     state->cancellable, state->progress_callback, state->progress_user_data,
 				     (GAsyncReadyCallback) pk_service_pack_get_updates_ready_cb, state);
 
commit e0772de8c2dff0c13bc1df0543bb340d9dcf9d79
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 19:12:42 2009 +0100

    glib2: Only print progress if it's different

diff --git a/lib/packagekit-glib2/pk-progress.c b/lib/packagekit-glib2/pk-progress.c
index 7cb7594..38131c8 100644
--- a/lib/packagekit-glib2/pk-progress.c
+++ b/lib/packagekit-glib2/pk-progress.c
@@ -105,43 +105,126 @@ pk_progress_get_property (GObject *object, guint prop_id, GValue *value, GParamS
 }
 
 /**
+ * pk_progress_set_package_id:
+ **/
+static void
+pk_progress_set_package_id (PkProgress *progress, const gchar *package_id)
+{
+	PkProgressPrivate *priv = progress->priv;
+	if (g_strcmp0 (priv->package_id, package_id) == 0)
+		return;
+	g_free (priv->package_id);
+	priv->package_id = g_strdup (package_id);
+	egg_debug ("package_id now %s", package_id);
+}
+
+/**
+ * pk_progress_set_percentage:
+ **/
+static void
+pk_progress_set_percentage (PkProgress *progress, gint percentage)
+{
+	PkProgressPrivate *priv = progress->priv;
+	if (priv->percentage == percentage)
+		return;
+	priv->percentage = percentage;
+	egg_debug ("percentage now %i", percentage);
+}
+
+/**
+ * pk_progress_set_subpercentage:
+ **/
+static void
+pk_progress_set_subpercentage (PkProgress *progress, gint subpercentage)
+{
+	PkProgressPrivate *priv = progress->priv;
+	if (priv->subpercentage == subpercentage)
+		return;
+	priv->subpercentage = subpercentage;
+	egg_debug ("subpercentage now %i", subpercentage);
+}
+
+/**
+ * pk_progress_set_status:
+ **/
+static void
+pk_progress_set_status (PkProgress *progress, PkStatusEnum status)
+{
+	PkProgressPrivate *priv = progress->priv;
+	if (priv->status == status)
+		return;
+	priv->status = status;
+	egg_debug ("status now %s", pk_status_enum_to_text (status));
+}
+
+/**
+ * pk_progress_set_role:
+ **/
+static void
+pk_progress_set_role (PkProgress *progress, PkRoleEnum role)
+{
+	PkProgressPrivate *priv = progress->priv;
+	if (priv->role == role)
+		return;
+	priv->role = role;
+	egg_debug ("role now %s", pk_role_enum_to_text (role));
+}
+
+/**
+ * pk_progress_set_allow_cancel:
+ **/
+static void
+pk_progress_set_allow_cancel (PkProgress *progress, gboolean allow_cancel)
+{
+	PkProgressPrivate *priv = progress->priv;
+	if (priv->allow_cancel == allow_cancel)
+		return;
+	priv->allow_cancel = allow_cancel;
+	egg_debug ("allow-cancel now %i", allow_cancel);
+}
+
+/**
+ * pk_progress_set_caller_active:
+ **/
+static void
+pk_progress_set_caller_active (PkProgress *progress, gboolean caller_active)
+{
+	PkProgressPrivate *priv = progress->priv;
+	if (priv->caller_active == caller_active)
+		return;
+	priv->caller_active = caller_active;
+	egg_debug ("caller-active now %i", caller_active);
+}
+
+/**
  * pk_progress_set_property:
  **/
 static void
 pk_progress_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
 	PkProgress *progress = PK_PROGRESS (object);
-	PkProgressPrivate *priv = progress->priv;
 
 	switch (prop_id) {
 	case PROP_PACKAGE_ID:
-		g_free (priv->package_id);
-		priv->package_id = g_strdup (g_value_get_string (value));
-		egg_debug ("package_id now %s", priv->package_id);
+		pk_progress_set_package_id (progress, g_value_get_string (value));
 		break;
 	case PROP_PERCENTAGE:
-		priv->percentage = g_value_get_int (value);
-		egg_debug ("percentage now %i", priv->percentage);
+		pk_progress_set_percentage (progress, g_value_get_int (value));
 		break;
 	case PROP_SUBPERCENTAGE:
-		priv->subpercentage = g_value_get_int (value);
-		egg_debug ("subpercentage now %i", priv->subpercentage);
+		pk_progress_set_subpercentage (progress, g_value_get_int (value));
 		break;
 	case PROP_ALLOW_CANCEL:
-		priv->allow_cancel = g_value_get_boolean (value);
-		egg_debug ("allow-cancel now %i", priv->allow_cancel);
+		pk_progress_set_allow_cancel (progress, g_value_get_boolean (value));
 		break;
 	case PROP_STATUS:
-		priv->status = g_value_get_uint (value);
-		egg_debug ("status now %s", pk_status_enum_to_text (priv->status));
+		pk_progress_set_status (progress, g_value_get_uint (value));
 		break;
 	case PROP_ROLE:
-		priv->role = g_value_get_uint (value);
-		egg_debug ("role now %s", pk_role_enum_to_text (priv->role));
+		pk_progress_set_role (progress, g_value_get_uint (value));
 		break;
 	case PROP_CALLER_ACTIVE:
-		priv->caller_active = g_value_get_boolean (value);
-		egg_debug ("caller-active now %i", priv->caller_active);
+		pk_progress_set_caller_active (progress, g_value_get_boolean (value));
 		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
commit 3f63113b21ba28de9899fc270002e2b18a701d4f
Author: jassy <jassy at fedoraproject.org>
Date:   Mon Sep 7 17:12:02 2009 +0000

    Sending translation for Punjabi

diff --git a/po/pa.po b/po/pa.po
index 673f1c8..4606114 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -8,742 +8,852 @@ msgid ""
 msgstr ""
 "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-31 07:50+0530\n"
-"Last-Translator: A S Alam <aalam at users.sf.net>\n"
-"Language-Team: Punjabi/Panjabi <punjabi-users at lists.sf.net>\n"
+"POT-Creation-Date: 2009-09-07 14:32+0000\n"
+"PO-Revision-Date: 2009-09-07 22:39+0530\n"
+"Last-Translator: \n"
+"Language-Team: Punjabi/Panjabi <kde-i18n-doc at kde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 0.3\n"
+"X-Generator: Lokalize 1.0\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 ../client/pk-console-test.c:147
 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 ../client/pk-console-test.c:149
 msgid "System time"
 msgstr "ਸਿਸਟਮ ਸਮਾਂ"
 
 #. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:239
+#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
 msgid "Succeeded"
 msgstr "ਸਫ਼ਲ"
 
-#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:239 ../client/pk-console.c:406
+#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
 msgid "True"
 msgstr "ਸਹੀਂ"
 
-#: ../client/pk-console.c:239 ../client/pk-console.c:406
+#: ../client/pk-console.c:242 ../client/pk-console-test.c:151
 msgid "False"
 msgstr "ਗਲਤ"
 
 #. 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 ../client/pk-console-test.c:153
+#: ../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 ../client/pk-console-test.c:158
 msgid "Duration"
 msgstr "ਅੰਤਰਾਲ"
 
-#: ../client/pk-console.c:246
+#: ../client/pk-console.c:249 ../client/pk-console-test.c:158
 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 ../client/pk-console-test.c:162
+#: ../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 ../client/pk-console-test.c:164
 msgid "User ID"
 msgstr "ਯੂਜ਼ਰ ID"
 
 #. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:259
+#: ../client/pk-console.c:262 ../client/pk-console-test.c:171
 msgid "Username"
 msgstr "ਯੂਜ਼ਰ ਨਾਂ"
 
 #. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:263
+#: ../client/pk-console.c:266 ../client/pk-console-test.c:175
 msgid "Real name"
 msgstr "ਅਸਲੀ ਨਾਂ"
 
-#: ../client/pk-console.c:271
+#: ../client/pk-console.c:274 ../client/pk-console-test.c:183
 msgid "Affected packages:"
 msgstr "ਪ੍ਰਭਾਵਿਤ ਪੈਕੇਜ:"
 
-#: ../client/pk-console.c:273
+#: ../client/pk-console.c:276 ../client/pk-console-test.c:185
 msgid "Affected packages: None"
 msgstr "ਪ੍ਰਭਾਵਿਤ ਪੈਕੇਜ: ਕੋਈ ਨਹੀਂ"
 
+#. TRANSLATORS: When processing, we might have to remove other dependencies
+#: ../client/pk-console.c:337 ../client/pk-task-text.c:220
+msgid "The following packages have to be removed:"
+msgstr "ਅੱਗੇ ਦਿੱਤੇ ਪੈਕੇਜਾਂ ਨੂੰ ਹਟਾਇਆ ਜਾਵੇਗਾ:"
+
+#. TRANSLATORS: When processing, we might have to install other dependencies
+#: ../client/pk-console.c:340 ../client/pk-task-text.c:225
+msgid "The following packages have to be installed:"
+msgstr "ਅੱਗੇ ਦਿੱਤੇ ਪੈਕੇਜਾਂ ਨੂੰ ਇੰਸਟਾਲ ਕੀਤਾ ਜਾਵੇਗਾ:"
+
+#. TRANSLATORS: When processing, we might have to update other dependencies
+#: ../client/pk-console.c:343 ../client/pk-task-text.c:230
+msgid "The following packages have to be updated:"
+msgstr "ਅੱਗੇ ਦਿੱਤੇ ਪੈਕੇਜਾਂ ਨੂੰ ਅੱਪਡੇਟ ਕੀਤਾ ਜਾਵੇਗਾ:"
+
+#. TRANSLATORS: When processing, we might have to reinstall other dependencies
+#: ../client/pk-console.c:346 ../client/pk-task-text.c:235
+msgid "The following packages have to be reinstalled:"
+msgstr "ਅੱਗੇ ਦਿੱਤੇ ਪੈਕੇਜਾਂ ਨੂੰ ਮੁੜ-ਇੰਸਟਾਲ ਜਾਵੇਗਾ:"
+
+#. TRANSLATORS: When processing, we might have to downgrade other dependencies
+#: ../client/pk-console.c:349 ../client/pk-task-text.c:240
+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 ../client/pk-console-test.c:205
 msgid "Distribution"
 msgstr "ਡਿਸਟਰੀਬਿਊਸ਼ਨ"
 
 #. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:300
+#: ../client/pk-console.c:365 ../client/pk-console-test.c:207
 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
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:367 ../client/pk-console.c:390
+#: ../client/pk-console-test.c:209 ../client/pk-console-test.c:230
 msgid "Summary"
 msgstr "ਸੰਖੇਪ"
 
 #. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:314
+#: ../client/pk-console.c:379 ../client/pk-console-test.c:219
 msgid "Category"
 msgstr "ਕੈਟਾਗਰੀ"
 
 #. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:316
+#: ../client/pk-console.c:381 ../client/pk-console-test.c:221
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:319
+#: ../client/pk-console.c:384 ../client/pk-console-test.c:224
 msgid "Parent"
 msgstr "ਮੋਢੀ"
 
 #. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:322
+#: ../client/pk-console.c:387 ../client/pk-console-test.c:227
 msgid "Name"
 msgstr "ਨਾਂ"
 
 #. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:328
+#: ../client/pk-console.c:393 ../client/pk-console-test.c:233
 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 ../client/pk-console-test.c:247
 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 ../client/pk-console-test.c:253
+#: ../client/pk-task-text.c:101 ../client/pk-task-text.c:153
+#: ../src/pk-polkit-action-lookup.c:352
 msgid "Package"
 msgid_plural "Packages"
 msgstr[0] "ਪੈਕੇਜ"
 msgstr[1] "ਪੈਕੇਜ"
 
 #. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:348
+#: ../client/pk-console.c:413 ../client/pk-console-test.c:256
 msgid "Updates"
 msgstr "ਅੱਪਡੇਟ"
 
 #. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:352
+#: ../client/pk-console.c:417 ../client/pk-console-test.c:260
 msgid "Obsoletes"
 msgstr "ਬਰਤਰਫ਼"
 
 #. TRANSLATORS: details about the update, the vendor URLs
-#: ../client/pk-console.c:356
+#: ../client/pk-console.c:421 ../client/pk-console-test.c:264
+#: ../client/pk-task-text.c:154
 msgid "Vendor"
 msgstr "ਵੇਂਡਰ"
 
 #. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:360
+#: ../client/pk-console.c:425 ../client/pk-console-test.c:268
 msgid "Bugzilla"
 msgstr "ਬੱਗਜ਼ੀਲਾ"
 
 #. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:364
+#: ../client/pk-console.c:429 ../client/pk-console-test.c:272
 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 ../client/pk-console-test.c:276
 msgid "Restart"
 msgstr "ਮੁੜ-ਚਾਲੂ"
 
 #. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:372
+#: ../client/pk-console.c:437 ../client/pk-console-test.c:280
 msgid "Update text"
 msgstr "ਅੱਪਡੇਟ ਟੈਕਸਟ"
 
 #. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:376
+#: ../client/pk-console.c:441 ../client/pk-console-test.c:284
 msgid "Changes"
 msgstr "ਬਦਲਾਅ"
 
 #. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:380
+#: ../client/pk-console.c:445 ../client/pk-console-test.c:288
 msgid "State"
 msgstr "ਹਾਲਤ"
 
 #. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:385
+#: ../client/pk-console.c:450 ../client/pk-console-test.c:293
 msgid "Issued"
 msgstr "ਜਾਰੀ ਕੀਤਾ"
 
 #. TRANSLATORS: details about the update, date the update was updated
-#: ../client/pk-console.c:390
+#: ../client/pk-console.c:455 ../client/pk-console-test.c:298
 msgid "Updated"
 msgstr "ਅੱਪਡੇਟ ਕੀਤੇ"
 
-#: ../client/pk-console.c:477 ../client/pk-console.c:479
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:475 ../client/pk-console-test.c:316
+msgid "Enabled"
+msgstr "ਯੋਗ"
+
+#. TRANSLATORS: if the repo is disabled
+#: ../client/pk-console.c:478 ../client/pk-console-test.c:319
+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 ../client/pk-console-test.c:341
 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 ../client/pk-console-test.c:344
 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 ../client/pk-console-test.c:347
 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 ../client/pk-console-test.c:350
 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 ../client/pk-console-test.c:353
 msgid "Application restart required by:"
 msgstr "ਐਪਲੀਕੇਸ਼ਨ ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ:"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:588
+#: ../client/pk-console.c:666 ../client/pk-console-test.c:704
 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 ../client/pk-console-test.c:707
 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 ../client/pk-console-test.c:710
 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 ../client/pk-console-test.c:713
 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
+#. ask the user
+#: ../client/pk-console.c:876 ../client/pk-console.c:948
+#: ../client/pk-console.c:1266 ../client/pk-task-text.c:299
+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 ../client/pk-console-test.c:370
 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 ../client/pk-console-test.c:388
 msgid "Message:"
 msgstr "ਸੁਨੇਹਾ:"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1518
+#: ../client/pk-console.c:1760 ../client/pk-console-test.c:407
 msgid "Package files"
 msgstr "ਪੈਕੇਜ ਫਾਇਲਾਂ"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1526
+#: ../client/pk-console.c:1768 ../client/pk-console-test.c:402
 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
+#. ask the user
+#: ../client/pk-console.c:1801 ../client/pk-task-text.c:113
 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 ../client/pk-task-text.c:117
 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 ../client/pk-console-test.c:982
 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 ../client/pk-console-test.c:1016
 msgid "PackageKit Console Interface"
 msgstr "ਪੈਕੇਜਕਿੱਟ ਕਨਸੋਲ ਇੰਟਰਫੇਸ"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1692
+#: ../client/pk-console.c:1934 ../client/pk-console-test.c:1018
 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-monitor.c:128
+#: ../client/pk-console.c:2027 ../client/pk-console-test.c:1109
+#: ../client/pk-generate-pack.c:187 ../client/pk-monitor.c:128
+#: ../client/pk-monitor-test.c:282
 #: ../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-console-test.c:1112
+#: ../client/pk-monitor.c:130 ../client/pk-monitor-test.c:284
 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 ../client/pk-console-test.c:1115
 msgid "Set the filter, e.g. installed"
 msgstr "ਫਿਲਟਰ ਸੈੱਟ ਕਰੋ, ਜਿਵੇਂ ਕਿ ਇੰਸਟਾਲ"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1794
+#: ../client/pk-console.c:2036 ../client/pk-console-test.c:1118
 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 ../client/pk-console-test.c:1193
 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 ../client/pk-console-test.c:1212
 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
+#: ../client/pk-console-test.c:1219 ../client/pk-console-test.c:1231
+#: ../client/pk-console-test.c:1243 ../client/pk-console-test.c:1255
 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 ../client/pk-console-test.c:1265
 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 ../client/pk-console-test.c:1292
 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 ../client/pk-console-test.c:1303
 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 ../client/pk-console-test.c:1312
 msgid "A destination directory and the package names to download are required"
-msgstr "ਡਾਊਨਲੋਡ ਕਰਨ ਵਾਸਤੇ ਟਿਕਾਣਾ ਡਾਇਰੈਕਟਰੀ ਅਤੇ ਤਦ ਪੈਕੇਜ ਨਾਂ ਲਾਜ਼ਮੀ ਹੈ"
+msgstr "ਡਾਊਨਲੋਡ ਕਰਨ ਵਾਸਤੇ ਟਿਕਾਣਾ ਡਾਇਰੈਕਟਰੀ ਅਤੇ ਪੈਕੇਜ ਨਾਂ ਲਾਜ਼ਮੀ ਹੈ"
 
 #. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:2010
+#: ../client/pk-console.c:2252 ../client/pk-console-test.c:1319
 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 ../client/pk-console-test.c:1328
 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 ../client/pk-console-test.c:1339
 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 ../client/pk-console-test.c:1360
 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
+#: ../client/pk-console-test.c:1371 ../client/pk-console-test.c:1382
 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 ../client/pk-console-test.c:1393
 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 ../client/pk-console-test.c:1411
 msgid "An action, e.g. 'update-system' is required"
 msgstr "ਕਾਰਵਾਈ, ਜਿਵੇਂ 'ਅੱਪਡੇਟ-ਸਿਸਟਮ' ਲੋੜੀਦਾ ਹੈ"
 
 #. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:2093
+#: ../client/pk-console.c:2335 ../client/pk-console-test.c:1418
 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 ../client/pk-console-test.c:1425
 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-console-test.c:1435
+#: ../client/pk-console-test.c:1450 ../client/pk-console-test.c:1459
+#: ../client/pk-console-test.c:1479 ../client/pk-console-test.c:1488
+#: ../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 ../client/pk-console-test.c:1468
 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 ../client/pk-console-test.c:1548
 #, 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
+#. /* 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
+#: ../client/pk-console.c:2499 ../client/pk-console-test.c:1560
 msgid "Command failed"
 msgstr "ਕਮਾਂਡ ਫੇਲ੍ਹ ਹੈ"
 
+#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
+#: ../client/pk-console-test.c:523 ../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-console-test.c:532 ../client/pk-tools-common.c:138
+msgid "Please choose the correct package: "
+msgstr "ਠੀਕ ਪੈਕੇਜ ਚੁਣੋ ਜੀ:"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console-test.c:734, c-format
+msgid "This tool could not find the available package: %s"
+msgstr "ਇਹ ਟੂਲ ਉਪਲੱਬਧ ਪੈਕੇਜ ਨਹੀਂ ਲੱਭ ਸਕਿਆ: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console-test.c:762, c-format
+msgid "This tool could not find the installed package: %s"
+msgstr "ਇਹ ਟੂਲ ਇੰਸਟਾਲ ਕੀਤੇ ਪੈਕੇਜ ਨਹੀਂ ਲੱਭ ਸਕਿਆ: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console-test.c:790 ../client/pk-console-test.c:818, c-format
+msgid "This tool could not find the package: %s"
+msgstr "ਇਹ ਟੂਲ ਪੈਕੇਜ ਨਹੀਂ ਲੱਭ ਸਕਿਆ: %s"
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
+#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
+#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
+#: ../client/pk-console-test.c:846 ../client/pk-console-test.c:874
+#: ../client/pk-console-test.c:902 ../client/pk-console-test.c:930
+#: ../client/pk-console-test.c:958, c-format
+msgid "This tool could not find all the packages: %s"
+msgstr "ਇਹ ਟੂਲ ਸਭ ਪੈਕੇਜ ਨਹੀਂ ਲੱਭ ਸਕਿਆ: %s"
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console-test.c:1271
+msgid "A package name to install is required"
+msgstr "ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਪੈਕੇਜ ਨਾਂ ਲਾਜ਼ਮੀ ਹੈ"
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console-test.c:1280
+msgid "A filename to install is required"
+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."
@@ -752,88 +862,173 @@ msgstr ""
 "ਗਿਆ ਹੈ।"
 
 #. 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"
 
 #. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:146
+#: ../client/pk-monitor.c:146 ../client/pk-monitor-test.c:299
 msgid "PackageKit Monitor"
 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
-#, c-format
-msgid "The package could not be found"
-msgstr "ਪੈਕੇਜ ਨਹੀਂ ਲੱਭਿਆ ਜਾ ਸਕਿਆ"
+#: ../client/pk-monitor-test.c:204
+msgid "Failed to get transaction list"
+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
-msgid "More than one package matches:"
-msgstr "ਇੱਕ ਤੋਂ ਵੱਧ ਰਲਦੇ ਪੈਕੇਜ ਲੱਭੇ:"
+#: ../client/pk-monitor-test.c:235
+msgid "Failed to get daemon state"
+msgstr "ਡੈਮਨ ਹਾਲਤ ਪਤਾ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ।"
 
-#. TRANSLATORS: This finds out which package in the list to use
-#: ../client/pk-tools-common.c:137
-msgid "Please choose the correct package: "
-msgstr "ਠੀਕ ਪੈਕੇਜ ਚੁਣੋ ਜੀ:"
+#. ask the user
+#: ../client/pk-task-text.c:64
+msgid "Do you want to allow installing of unsigned software?"
+msgstr "ਕੀ ਤੁਸੀਂ ਨਾ-ਸਾਈਨ ਕੀਤੇ ਸਾਫਟਵੇਅਰ ਇੰਸਟਾਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?"
+
+#: ../client/pk-task-text.c:68
+msgid "The unsigned software will not be installed."
+msgstr "ਨਾ-ਸਾਈਨ ਕੀਤੇ ਸਾਫਟਵੇਅਰ ਇੰਸਟਾਲ ਨਹੀਂ ਕੀਤਾ ਜਾਵੇਗਾ।"
+
+#: ../client/pk-task-text.c:100
+msgid "Software source signature required"
+msgstr "ਸਾਪਟਵੇਅਰ ਸਰੋਤ ਦਸਤਖਤ ਲੋੜੀਂਦੇ"
+
+#: ../client/pk-task-text.c:102
+msgid "Software source name"
+msgstr "ਸਾਫਟਵੇਅਰ ਸਰੋਤ ਨਾਂ"
+
+#: ../client/pk-task-text.c:103
+msgid "Key URL"
+msgstr "ਕੁੰਜੀ URL"
+
+#: ../client/pk-task-text.c:104
+msgid "Key user"
+msgstr "ਕੁੰਜੀ ਯੂਜ਼ਰ"
+
+#: ../client/pk-task-text.c:105
+msgid "Key ID"
+msgstr "ਕੁੰਜੀ ID"
+
+#: ../client/pk-task-text.c:106
+msgid "Key fingerprint"
+msgstr "ਕੁੰਜੀ ਫਿੰਗਰਪ੍ਰਿੰਟ"
+
+#: ../client/pk-task-text.c:107
+msgid "Key Timestamp"
+msgstr "ਕੁੰਜੀ ਟਾਈਮਸਟੈਂਪ"
+
+#: ../client/pk-task-text.c:151
+msgid "End user licence agreement required"
+msgstr "ਅੰਤਮ ਯੂਜ਼ਰ ਲਾਈਸੈਂਸ ਇਕਰਾਰਨਾਮਾ ਲੋੜੀਂਦਾ"
+
+#: ../client/pk-task-text.c:152
+msgid "EULA ID"
+msgstr "EULA ID"
+
+#: ../client/pk-task-text.c:155
+msgid "Agreement"
+msgstr "ਇਕਰਾਰਨਾਮਾ"
 
-#: ../client/pk-tools-common.c:162
+#. ask the user
+#: ../client/pk-task-text.c:161
+msgid "Do you accept this agreement?"
+msgstr "ਕੀ ਤੁਸੀਂ ਇਹ ਇਕਰਾਰਨਾਮਾ ਮਨਜ਼ੂਰ ਕਰਦੇ ਹੋ?"
+
+#: ../client/pk-task-text.c:165
+msgid "The agreement was not accepted."
+msgstr "ਇਕਰਾਰਨਾਮਾ ਮਨਜ਼ੂਰ ਨਹੀਂ ਕੀਤਾ ਸੀ।"
+
+#: ../client/pk-task-text.c:194
+msgid "Media change required"
+msgstr "ਮੀਡੀਆ ਤਬਦੀਲੀ ਲੋੜੀਂਦੀ ਹੈ"
+
+#: ../client/pk-task-text.c:195
+msgid "Media type"
+msgstr "ਮੀਡੀਆ ਕਿਸਮ"
+
+#: ../client/pk-task-text.c:196
+msgid "Media ID"
+msgstr "ਮੀਡੀਆ ID"
+
+#: ../client/pk-task-text.c:197
+msgid "Text"
+msgstr "ਪਾਠ"
+
+#. ask the user
+#: ../client/pk-task-text.c:201
+msgid "Please insert the correct media"
+msgstr "ਠੀਕ ਮੀਡੀਆ ਚੁਣੋ ਜੀ"
+
+#: ../client/pk-task-text.c:205
+msgid "The correct media was not inserted."
+msgstr "ਸਹੀ ਮੀਡੀਆ ਨਹੀਂ ਪਾਇਆ।"
+
+#: ../client/pk-task-text.c:303
+msgid "The transaction did not proceed."
+msgstr "ਸੰਚਾਰ ਅੱਗੇ ਨਹੀਂ ਵਧਿਆ।"
+
+#: ../client/pk-text.c:50
 #, c-format
 msgid "Please enter a number from 1 to %i: "
 msgstr "੧ ਤੋਂ %i ਤੱਕ ਨੰਬਰ ਦਿਓ ਜੀ:"
 
+#. TRANSLATORS: The package was not found in any software sources
+#: ../client/pk-tools-common.c:119
+#, c-format
+msgid "The package could not be found"
+msgstr "ਪੈਕੇਜ ਨਹੀਂ ਲੱਭਿਆ ਜਾ ਸਕਿਆ"
+
 #. TRANSLATORS: when we are getting data from the daemon
 #: ../contrib/browser-plugin/pk-plugin-install.c:466
 msgid "Getting package information..."
@@ -891,24 +1086,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
@@ -981,286 +1174,260 @@ 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
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:397, 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 "ਪੈਕੇਜਕਿੱਟ ਕਨਸੋਲ ਇੰਟਰਫੇਸ"
+msgstr "ਪੈਕੇਜਕਿੱਟ Debuginfo ਇੰਸਟਾਲਰ"
 
 #. 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 "ਠੀਕ ਹੈ।"
 
 #. 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 ਰਿਪੋ ਲੱਭੀਆਂ ਹਨ।"
 
 #. 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 "ਫੇਲ ਹੋਇਆ।"
 
 #. 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 "ਡੀਬੱਗ ਪੈਕੇਜ %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 "ਸਿਮੂਲੇਟ ਮੋਡ ਵਿੱਚ ਪੈਕੇਜ ਇੰਸਟਾਲ ਨਹੀਂ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ"
 
 #. 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 "ਪੈਕੇਜਕਿੱਟ ਸਰਵਿਸ ਪੈਕ"
+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"
@@ -1289,8 +1456,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 +1482,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"
@@ -1393,7 +1558,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
@@ -1514,46 +1679,44 @@ 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 "ਸਿਰਫ ਭਰੋਸੇਯੋਗ"
 
 #~ msgid "The action, one of 'create', 'add', or 'remove'"
 #~ msgstr "ਕਾਰਵਾਈ 'ਬਣਾਓ', 'ਸ਼ਾਮਲ', ਜਾਂ 'ਹਟਾਓ'"
commit 6e84dc68d32346d659f9e725570ed783c35f846d
Merge: a37239a... a4ace64...
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 16:31:40 2009 +0100

    Merge branch 'master' into glib2-service-pack

commit a4ace6437a60f935e0c4233f2158c49650e61cd9
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 16:19:04 2009 +0100

    glib2: Copy the files emitted from DownloadPackages

diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index a2b4016..521ae77 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -101,6 +101,7 @@ typedef struct {
 	PkResults			*results;
 	PkRoleEnum			 role;
 	PkSigTypeEnum			 type;
+	guint				 refcount;
 } PkClientState;
 
 static void pk_client_finished_cb (DBusGProxy *proxy, const gchar *exit_text, guint runtime, PkClientState *state);
@@ -351,6 +352,163 @@ pk_client_state_finish (PkClientState *state, GError *error)
 }
 
 /**
+ * pk_client_copy_finished_remove_old_files:
+ *
+ * Removes all the files that do not have the prefix destination path.
+ * This should remove all the old /var/cache/PackageKit/$TMP/powertop-1.8-1.fc8.rpm
+ * and leave the $DESTDIR/powertop-1.8-1.fc8.rpm files.
+ */
+static void
+pk_client_copy_finished_remove_old_files (PkClientState *state)
+{
+	const PkResultItemFiles *item;
+	GPtrArray *array = NULL;
+	guint i;
+
+	/* get the data */
+	array = pk_results_get_files_array (state->results);
+	if (array == NULL)
+		egg_error ("internal error");
+
+	/* remove any without dest path */
+	for (i=0; i < array->len; ) {
+		item = g_ptr_array_index (array, i);
+		if (!g_str_has_prefix (item->files[0], state->directory))
+			g_ptr_array_remove_index_fast (array, i);
+		else
+			i++;
+	}
+
+	/* we're done modifying the data */
+	g_ptr_array_unref (array);
+}
+
+/**
+ * pk_client_copy_finished_cb:
+ */
+static void
+pk_client_copy_finished_cb (GFile *file, GAsyncResult *res, PkClientState *state)
+{
+	gboolean ret;
+	gchar *path;
+	GError *error = NULL;
+
+	/* debug */
+	path = g_file_get_path (file);
+	egg_debug ("finished copy of %s", path);
+
+	/* get the result */
+	ret = g_file_copy_finish (file, res, &error);
+	if (!ret) {
+		pk_client_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* no more copies pending? */
+	if (--state->refcount == 0) {
+		pk_client_copy_finished_remove_old_files (state);
+		pk_client_state_finish (state, error);
+	}
+out:
+	g_free (path);
+}
+
+/**
+ * pk_client_copy_progress_cb:
+ */
+static void
+pk_client_copy_progress_cb (goffset current_num_bytes, goffset total_num_bytes, PkClientState *state)
+{
+	PkStatusEnum status_enum = PK_STATUS_ENUM_REPACKAGING;
+
+	/* save progress */
+	g_object_set (state->progress,
+		      "status", status_enum,
+		      NULL);
+
+	/* do the callback for GUI programs */
+	if (state->progress_callback != NULL)
+		state->progress_callback (state->progress, PK_PROGRESS_TYPE_STATUS, state->progress_user_data);
+}
+
+/**
+ * pk_client_copy_downloaded_file:
+ */
+static void
+pk_client_copy_downloaded_file (PkClientState *state, const gchar *package_id, const gchar *source_file)
+{
+	gchar *basename;
+	gchar *path;
+	gchar **files;
+	GFile *source;
+	GFile *destination;
+
+	/* generate the destination location */
+	basename = g_path_get_basename (source_file);
+	path = g_build_filename (state->directory, basename, NULL);
+
+	/* copy async */
+	egg_debug ("copy %s to %s", source_file, path);
+	source = g_file_new_for_path (source_file);
+	destination = g_file_new_for_path (path);
+	g_file_copy_async (source, destination, G_FILE_COPY_OVERWRITE, G_PRIORITY_DEFAULT, state->cancellable,
+			   (GFileProgressCallback) pk_client_copy_progress_cb, state,
+			   (GAsyncReadyCallback) pk_client_copy_finished_cb, state);
+
+	/* Add the result (as a GStrv) to the results set */
+	files = g_strsplit (path, ",", -1);
+	pk_results_add_files (state->results, package_id, files);
+
+	/* free everything we've used */
+	g_object_unref (source);
+	g_object_unref (destination);
+	g_strfreev (files);
+	g_free (basename);
+	g_free (path);
+}
+
+/**
+ * pk_client_copy_downloaded:
+ *
+ * We have to copy the files from the temporary directory into the user-specified
+ * directory. There should only be one file for each package, although this is
+ * not encoded in the spec.
+ */
+static void
+pk_client_copy_downloaded (PkClientState *state)
+{
+	guint i;
+	guint j;
+	guint len;
+	const PkResultItemFiles *item;
+	GPtrArray *array = NULL;
+
+	/* get data */
+	array = pk_results_get_files_array (state->results);
+	if (array == NULL)
+		egg_error ("internal error");
+
+	/* get the number of files to copy */
+	for (i=0; i < array->len; i++) {
+		item = g_ptr_array_index (array, i);
+		state->refcount += g_strv_length (item->files);
+	}
+	egg_debug ("%i files to copy", state->refcount);
+
+	/* get a cached value, as pk_client_copy_downloaded_file() adds items */
+	len = array->len;
+
+	/* do the copies pipelined */
+	for (i=0; i < len; i++) {
+		item = g_ptr_array_index (array, i);
+		for (j=0; item->files[j] != NULL; j++)
+			pk_client_copy_downloaded_file (state, item->package_id, item->files[j]);
+	}
+	g_ptr_array_unref (array);
+}
+
+/**
  * pk_client_finished_cb:
  */
 static void
@@ -382,6 +540,12 @@ pk_client_finished_cb (DBusGProxy *proxy, const gchar *exit_text, guint runtime,
 		return;
 	}
 
+	/* do we have to copy results? */
+	if (state->role == PK_ROLE_ENUM_DOWNLOAD_PACKAGES) {
+		pk_client_copy_downloaded (state);
+		return;
+	}
+
 	/* we're done */
 	pk_client_state_finish (state, error);
 }
@@ -3376,17 +3540,17 @@ pk_client_test_download_cb (GObject *object, GAsyncResult *res, EggTest *test)
 
 	/* check number */
 	array = pk_results_get_files_array (results);
-	if (array->len != 1)
+	if (array->len != 2)
 		egg_test_failed (test, "invalid number of files: %i", array->len);
 
 	/* check a result */
 	item = g_ptr_array_index (array, 0);
-	if (item->package_id != NULL)
-		egg_test_failed (test, "invalid package_id: %s, expecting NULL", item->package_id);
+	if (g_strcmp0 (item->package_id, "powertop-common;1.8-1.fc8;i386;fedora") != 0)
+		egg_test_failed (test, "invalid package_id: %s", item->package_id);
 	len = g_strv_length (item->files);
-	if (len != 2)
+	if (len != 1)
 		egg_test_failed (test, "invalid number of files: %i", len);
-	if (g_strcmp0 (item->files[0], "/tmp/powertop-1.8-1.fc8.rpm") != 0)
+	if (g_strcmp0 (item->files[0], "/tmp/powertop-common-1.8-1.fc8.rpm") != 0)
 		egg_test_failed (test, "invalid filename: %s, maybe not rewritten", item->files[0]);
 out:
 	g_ptr_array_unref (array);
@@ -3521,6 +3685,8 @@ pk_client_test (gpointer user_data)
 	egg_test_loop_wait (test, 15000);
 	egg_test_success (test, "cancelled in %i", egg_test_elapsed (test));
 
+	g_cancellable_reset (cancellable);
+
 	/************************************************************/
 	egg_test_title (test, "do downloads");
 	package_ids = pk_package_ids_from_id ("powertop;1.8-1.fc8;i386;fedora");
@@ -3529,6 +3695,7 @@ pk_client_test (gpointer user_data)
 					   (GAsyncReadyCallback) pk_client_test_download_cb, test);
 	g_strfreev (package_ids);
 	egg_test_loop_wait (test, 15000);
+	egg_test_success (test, "downloaded and copied in %i", egg_test_elapsed (test));
 
 	g_object_unref (cancellable);
 	g_object_unref (client);
commit 4f91de0ba116c2f984bbc9bb5095ec301bf4d5a5
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 16:17:46 2009 +0100

    daemon: add a PkTransaction warning if a backend does not download files to the specified directory

diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index ce00100..572d1ee 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -527,9 +527,25 @@ static void
 pk_transaction_files_cb (PkBackend *backend, const gchar *package_id,
 			 const gchar *filelist, PkTransaction *transaction)
 {
+	gchar **files = NULL;
+	guint i;
+
 	g_return_if_fail (PK_IS_TRANSACTION (transaction));
 	g_return_if_fail (transaction->priv->tid != NULL);
 
+	/* ensure the files have the correct prefix */
+	if (transaction->priv->role == PK_ROLE_ENUM_DOWNLOAD_PACKAGES) {
+		files = g_strsplit (filelist, ";", -1);
+		for (i=0; files[i] != NULL; i++) {
+			if (!g_str_has_prefix (files[i], transaction->priv->cached_directory)) {
+				pk_backend_message (transaction->priv->backend, PK_MESSAGE_ENUM_BACKEND_ERROR,
+						    "%s does not have the correct prefix (%s)",
+						    files[i], transaction->priv->cached_directory);
+			}
+		}
+		g_strfreev (files);
+	}
+
 	egg_debug ("emitting files %s, %s", package_id, filelist);
 	g_signal_emit (transaction, signals [PK_TRANSACTION_FILES], 0, package_id, filelist);
 }
commit 0e26b87be468977a9a0756a7b663f01bf0e57c53
Merge: bf3cb21... 08d0430...
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 14:56:14 2009 +0100

    Merge branch 'master' into glib2-download-testing-and-copy

commit 08d043055f5535791885ffa5e6f1b453c14f54af
Author: warrink <warrink at fedoraproject.org>
Date:   Mon Sep 7 12:55:10 2009 +0000

    Sending translation for Dutch

diff --git a/po/nl.po b/po/nl.po
index 3cf937b..7d327a6 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -5,8 +5,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: packagekit.master.nl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-04 14:33+0000\n"
-"PO-Revision-Date: 2009-09-04 20:10+0200\n"
+"POT-Creation-Date: 2009-09-07 08:27+0000\n"
+"PO-Revision-Date: 2009-09-07 14:54+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"
@@ -269,12 +269,12 @@ msgid "Application restart required by:"
 msgstr "Herstart vereist door toepassing:"
 
 #. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:666 ../client/pk-console-test.c:702
+#: ../client/pk-console.c:666 ../client/pk-console-test.c:704
 msgid "Please restart the computer to complete the update."
 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:669 ../client/pk-console-test.c:705
+#: ../client/pk-console.c:669 ../client/pk-console-test.c:707
 msgid "Please logout and login to complete the update."
 msgstr "Log a.u.b uit en weer in om de vernieuwing af te maken."
 
@@ -284,7 +284,7 @@ msgid "Please restart the application as it is being used."
 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:675 ../client/pk-console-test.c:708
+#: ../client/pk-console.c:675 ../client/pk-console-test.c:710
 msgid ""
 "Please restart the computer to complete the update as important security "
 "updates have been installed."
@@ -293,7 +293,7 @@ msgstr ""
 "beveiligings vernieuwingen geïnstaleerd zijn."
 
 #. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:678 ../client/pk-console-test.c:711
+#: ../client/pk-console.c:678 ../client/pk-console-test.c:713
 msgid ""
 "Please logout and login to complete the update as important security updates "
 "have been installed."
@@ -569,24 +569,25 @@ 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:1879 ../client/pk-console-test.c:968
+#: ../client/pk-console.c:1879 ../client/pk-console-test.c:972
 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:1932 ../client/pk-console-test.c:1002
+#: ../client/pk-console.c:1932 ../client/pk-console-test.c:1006
 msgid "PackageKit Console Interface"
 msgstr "PackageKit console-interface"
 
 #. these are commands we can use with pkcon
-#: ../client/pk-console.c:1934 ../client/pk-console-test.c:1004
+#: ../client/pk-console.c:1934 ../client/pk-console-test.c:1008
 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:2027 ../client/pk-console-test.c:1095
+#: ../client/pk-console.c:2027 ../client/pk-console-test.c:1099
 #: ../client/pk-generate-pack.c:187 ../client/pk-monitor.c:128
+#: ../client/pk-monitor-test.c:282
 #: ../contrib/command-not-found/pk-command-not-found.c:616
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:549
 #: ../contrib/device-rebind/pk-device-rebind.c:293 ../src/pk-main.c:211
@@ -594,18 +595,18 @@ msgid "Show extra debugging information"
 msgstr "Extra debuginformatie tonen"
 
 #. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:2030 ../client/pk-console-test.c:1098
-#: ../client/pk-monitor.c:130
+#: ../client/pk-console.c:2030 ../client/pk-console-test.c:1102
+#: ../client/pk-monitor.c:130 ../client/pk-monitor-test.c:284
 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:2033 ../client/pk-console-test.c:1101
+#: ../client/pk-console.c:2033 ../client/pk-console-test.c:1105
 msgid "Set the filter, e.g. installed"
 msgstr "Filter instellen, bijvoorbeeld geïnstalleerd"
 
 #. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:2036 ../client/pk-console-test.c:1104
+#: ../client/pk-console.c:2036 ../client/pk-console-test.c:1108
 msgid "Exit without waiting for actions to complete"
 msgstr "Afsluiten zonder te wachten tot de transacties zijn afgerond"
 
@@ -615,25 +616,25 @@ 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:2153 ../client/pk-console-test.c:1179
+#: ../client/pk-console.c:2153 ../client/pk-console-test.c:1183
 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:2172 ../client/pk-console-test.c:1198
+#: ../client/pk-console.c:2172 ../client/pk-console-test.c:1202
 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:2179 ../client/pk-console.c:2188
 #: ../client/pk-console.c:2197 ../client/pk-console.c:2206
-#: ../client/pk-console-test.c:1205 ../client/pk-console-test.c:1217
-#: ../client/pk-console-test.c:1229 ../client/pk-console-test.c:1241
+#: ../client/pk-console-test.c:1209 ../client/pk-console-test.c:1221
+#: ../client/pk-console-test.c:1233 ../client/pk-console-test.c:1245
 msgid "A search term is required"
 msgstr "Een zoekterm is vereist"
 
 #. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:2213 ../client/pk-console-test.c:1251
+#: ../client/pk-console.c:2213 ../client/pk-console-test.c:1255
 msgid "Invalid search type"
 msgstr "Ongeldig zoektype"
 
@@ -643,63 +644,63 @@ 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:2228 ../client/pk-console-test.c:1278
+#: ../client/pk-console.c:2228 ../client/pk-console-test.c:1282
 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:2237 ../client/pk-console-test.c:1289
+#: ../client/pk-console.c:2237 ../client/pk-console-test.c:1293
 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:2245 ../client/pk-console-test.c:1298
+#: ../client/pk-console.c:2245 ../client/pk-console-test.c:1302
 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"
 
 #. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:2252 ../client/pk-console-test.c:1305
+#: ../client/pk-console.c:2252 ../client/pk-console-test.c:1309
 msgid "Directory not found"
 msgstr "Map niet gevonden"
 
 #. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:2260 ../client/pk-console-test.c:1314
+#: ../client/pk-console.c:2260 ../client/pk-console-test.c:1318
 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:2270 ../client/pk-console-test.c:1325
+#: ../client/pk-console.c:2270 ../client/pk-console-test.c:1329
 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:2287 ../client/pk-console-test.c:1346
+#: ../client/pk-console.c:2287 ../client/pk-console-test.c:1350
 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:2296 ../client/pk-console.c:2305
-#: ../client/pk-console-test.c:1357 ../client/pk-console-test.c:1368
+#: ../client/pk-console-test.c:1361 ../client/pk-console-test.c:1372
 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:2314 ../client/pk-console-test.c:1379
+#: ../client/pk-console.c:2314 ../client/pk-console-test.c:1383
 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:2328 ../client/pk-console-test.c:1397
+#: ../client/pk-console.c:2328 ../client/pk-console-test.c:1401
 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:2335 ../client/pk-console-test.c:1404
+#: ../client/pk-console.c:2335 ../client/pk-console-test.c:1408
 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:2342 ../client/pk-console-test.c:1411
+#: ../client/pk-console.c:2342 ../client/pk-console-test.c:1415
 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"
@@ -708,15 +709,15 @@ msgstr ""
 #. TRANSLATORS: This is when the user fails to supply the package name
 #: ../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-console-test.c:1421
-#: ../client/pk-console-test.c:1436 ../client/pk-console-test.c:1445
-#: ../client/pk-console-test.c:1465 ../client/pk-console-test.c:1474
+#: ../client/pk-console.c:2400 ../client/pk-console-test.c:1425
+#: ../client/pk-console-test.c:1440 ../client/pk-console-test.c:1449
+#: ../client/pk-console-test.c:1469 ../client/pk-console-test.c:1478
 #: ../client/pk-generate-pack.c:243
 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:2382 ../client/pk-console-test.c:1454
+#: ../client/pk-console.c:2382 ../client/pk-console-test.c:1458
 msgid "A package provide string is required"
 msgstr "Een pakket geleverde string is vereist"
 
@@ -731,7 +732,7 @@ 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:2483 ../client/pk-console-test.c:1534
+#: ../client/pk-console.c:2483 ../client/pk-console-test.c:1538
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "Optie '%s' wordt niet ondersteund"
@@ -745,34 +746,34 @@ msgstr "Onjuiste privileges voor deze operatie"
 #. /* 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
-#: ../client/pk-console.c:2499 ../client/pk-console-test.c:1546
+#: ../client/pk-console.c:2499 ../client/pk-console-test.c:1550
 msgid "Command failed"
 msgstr "Opdracht mislukt"
 
 #. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../client/pk-console-test.c:521 ../client/pk-tools-common.c:131
+#: ../client/pk-console-test.c:523 ../client/pk-tools-common.c:131
 msgid "More than one package matches:"
 msgstr "Er zijn meerdere pakketten die overeenkomen:"
 
 #. TRANSLATORS: This finds out which package in the list to use
-#: ../client/pk-console-test.c:530 ../client/pk-tools-common.c:138
+#: ../client/pk-console-test.c:532 ../client/pk-tools-common.c:138
 msgid "Please choose the correct package: "
 msgstr "Kies alstublieft het juiste pakket: "
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:730
+#: ../client/pk-console-test.c:734
 #, c-format
 msgid "This tool could not find the available package: %s"
 msgstr "Dit programma kon het beschikbare pakket %s niet vinden."
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:758
+#: ../client/pk-console-test.c:762
 #, c-format
 msgid "This tool could not find the installed package: %s"
 msgstr "Dit programma kon het geïinstallerde pakket %s niet vinden."
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console-test.c:786 ../client/pk-console-test.c:814
+#: ../client/pk-console-test.c:790 ../client/pk-console-test.c:818
 #, c-format
 msgid "This tool could not find the package: %s"
 msgstr "Dit programma kon het pakket %s niet vinden."
@@ -781,20 +782,20 @@ msgstr "Dit programma kon het pakket %s niet vinden."
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console-test.c:842 ../client/pk-console-test.c:868
-#: ../client/pk-console-test.c:894 ../client/pk-console-test.c:920
-#: ../client/pk-console-test.c:946
+#: ../client/pk-console-test.c:846 ../client/pk-console-test.c:872
+#: ../client/pk-console-test.c:898 ../client/pk-console-test.c:924
+#: ../client/pk-console-test.c:950
 #, c-format
 msgid "This tool could not find all the packages: %s"
 msgstr "Dit programma kon niet alle pakketten vinden: %s"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1257
+#: ../client/pk-console-test.c:1261
 msgid "A package name to install is required"
 msgstr "Een pakketnaam om te installeren is vereist"
 
 #. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console-test.c:1266
+#: ../client/pk-console-test.c:1270
 msgid "A filename to install is required"
 msgstr "Een bestandsnaam om te installeren is vereist"
 
@@ -922,7 +923,7 @@ msgid "Failed to create '%s': %s"
 msgstr "'%s' aanmaken niet gelukt: %s"
 
 #. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:146
+#: ../client/pk-monitor.c:146 ../client/pk-monitor-test.c:299
 msgid "PackageKit Monitor"
 msgstr "PackageKit-monitor"
 
@@ -930,6 +931,14 @@ msgstr "PackageKit-monitor"
 msgid "Cannot show the list of transactions"
 msgstr "Kan de lijst van transacties niet laten zien"
 
+#: ../client/pk-monitor-test.c:204
+msgid "Failed to get transaction list"
+msgstr "Transactie lijst verkrijgen mislukte."
+
+#: ../client/pk-monitor-test.c:235
+msgid "Failed to get daemon state"
+msgstr "Daemon toestand verkrijgen mislukte."
+
 #. ask the user
 #: ../client/pk-task-text.c:64
 msgid "Do you want to allow installing of unsigned software?"
commit 900eaa32dd1fcea794d10bc5eb373eb50d5baf99
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 13:40:49 2009 +0100

    daemon: Add a check to ensure that ::Files() are sent for DownloadPackages

diff --git a/src/pk-backend.c b/src/pk-backend.c
index ceb0467..5d53098 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -98,6 +98,7 @@ struct _PkBackendPrivate
 	gboolean		 simultaneous;
 	gboolean		 has_sent_package;
 	gboolean		 use_time;
+	guint			 download_files;
 	PkNetwork		*network;
 	PkStore			*store;
 	PkPackageObj		*last_package;
@@ -1246,7 +1247,7 @@ pk_backend_files (PkBackend *backend, const gchar *package_id, const gchar *file
 	egg_debug ("emit files %s, %s", package_id, filelist);
 	g_signal_emit (backend, signals [PK_BACKEND_FILES], 0,
 		       package_id, filelist);
-
+	backend->priv->download_files++;
 out:
 	return ret;
 }
@@ -1700,6 +1701,14 @@ pk_backend_finished (PkBackend *backend)
 				    "Backends should send a Package() for %s!", role_text);
 	}
 
+	/* ensure the same number of ::Files() were sent as packages for DownloadPackages */
+	if (!backend->priv->set_error &&
+	    backend->priv->role == PK_ROLE_ENUM_DOWNLOAD_PACKAGES &&
+	    backend->priv->download_files == 0) {
+		pk_backend_message (backend, PK_MESSAGE_ENUM_BACKEND_ERROR,
+				    "Backends should send multiple Files() for each package_id!");
+	}
+
 	/* if we set an error code notifier, clear */
 	if (backend->priv->signal_error_timeout != 0) {
 		g_source_remove (backend->priv->signal_error_timeout);
@@ -2102,6 +2111,7 @@ pk_backend_reset (PkBackend *backend)
 	backend->priv->set_eula = FALSE;
 	backend->priv->finished = FALSE;
 	backend->priv->has_sent_package = FALSE;
+	backend->priv->download_files = 0;
 	backend->priv->thread = NULL;
 	backend->priv->last_package = NULL;
 	backend->priv->allow_cancel = PK_BACKEND_TRISTATE_UNSET;
commit 3f0fc22c44bdc04da027c9815fba0a969bad3f66
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 13:40:34 2009 +0100

    yum: Match the spec for DownloadPackages

diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 903ea26..65d1898 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -862,15 +862,14 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
         self.status(STATUS_DOWNLOAD)
         percentage = 0
         bump = 100 / len(package_ids)
-        files = []
 
         # download each package
-        for package in package_ids:
+        for package_id in package_ids:
             self.percentage(percentage)
-            pkg, inst = self._findPackage(package)
+            pkg, inst = self._findPackage(package_id)
             # if we couldn't map package_id -> pkg
             if not pkg:
-                self.message(MESSAGE_COULD_NOT_FIND_PACKAGE, "Could not find the package %s" % package)
+                self.message(MESSAGE_COULD_NOT_FIND_PACKAGE, "Could not find the package %s" % package_id)
                 continue
 
             n, a, e, v, r = pkg.pkgtup
@@ -884,7 +883,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
 
             # if we couldn't map package_id -> pkg
             if len(packs) == 0:
-                self.message(MESSAGE_COULD_NOT_FIND_PACKAGE, "Could not find a match for package %s" % package)
+                self.message(MESSAGE_COULD_NOT_FIND_PACKAGE, "Could not find a match for package %s" % package_id)
                 continue
 
             # should have only one...
@@ -908,16 +907,16 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
                 pkg_download.localpath = local #Hack:To set the localpath we want
                 try:
                     path = repo.getPackage(pkg_download)
-                    files.append(path)
+
+                    # emit the file we downloaded
+                    package_id_tmp = self._pkg_to_id(pkg_download)
+                    self.files(package_id_tmp, path)
+
                 except IOError, e:
                     self.error(ERROR_PACKAGE_DOWNLOAD_FAILED, "Cannot write to file", exit=False)
                     return
             percentage += bump
 
-        # emit the file list we downloaded
-        file_list = ";".join(files)
-        self.files(package_ids[0], file_list)
-
         # in case we don't sum to 100
         self.percentage(100)
 
commit 7c8c3539317fb463a975322dcf7fdf0b5932d961
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 13:40:20 2009 +0100

    dummy: match the spec for DownloadPackages

diff --git a/backends/dummy/pk-backend-dummy.c b/backends/dummy/pk-backend-dummy.c
index e5d8425..a8089be 100644
--- a/backends/dummy/pk-backend-dummy.c
+++ b/backends/dummy/pk-backend-dummy.c
@@ -1163,28 +1163,25 @@ backend_get_packages (PkBackend *backend, PkBitfield filters)
 static void
 backend_download_packages (PkBackend *backend, gchar **package_ids, const gchar *directory)
 {
-	gchar *filename1;
-	gchar *filename2;
-	gchar *filelist;
+	gchar *filename;
+
 	pk_backend_set_status (backend, PK_STATUS_ENUM_DOWNLOAD);
 
-	filename1 = g_build_filename (directory, "powertop-1.8-1.fc8.rpm", NULL);
-	g_file_set_contents (filename1, "hello dave", -1, NULL);
+	/* first package */
+	filename = g_build_filename (directory, "powertop-1.8-1.fc8.rpm", NULL);
+	g_file_set_contents (filename, "powertop data", -1, NULL);
 	pk_backend_package (backend, PK_INFO_ENUM_DOWNLOADING,
 			    "powertop;1.8-1.fc8;i386;fedora", "Power consumption monitor");
+	pk_backend_files (backend, "powertop;1.8-1.fc8;i386;fedora", filename);
+	g_free (filename);
 
-	filename2 = g_build_filename (directory, "gtk2-2.11.6-6.fc8.rpm", NULL);
-	g_file_set_contents (filename2, "hello brian", -1, NULL);
+	/* second package */
+	filename = g_build_filename (directory, "powertop-common-1.8-1.fc8.rpm", NULL);
+	g_file_set_contents (filename, "powertop-common data", -1, NULL);
 	pk_backend_package (backend, PK_INFO_ENUM_DOWNLOADING,
-			    "gtk2;2.11.6-6.fc8;i386;fedora", "GTK+ Libraries for GIMP");
-
-	/* send the filelist */
-	filelist = g_strjoin (";", filename1, filename2, NULL);
-	pk_backend_files (backend, NULL, filelist);
-
-	g_free (filename1);
-	g_free (filename2);
-	g_free (filelist);
+			    "powertop-common;1.8-1.fc8;i386;fedora", "Power consumption monitor");
+	pk_backend_files (backend, "powertop-common;1.8-1.fc8;i386;fedora", filename);
+	g_free (filename);
 
 	pk_backend_finished (backend);
 }
commit 1fdda578d7274b4785588cf513cd77ac13d5bfaf
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 13:40:06 2009 +0100

    spec: mandate that ::Files() from DownloadPackages must be one per package, with the package_id set correctly

diff --git a/src/org.freedesktop.PackageKit.Transaction.xml b/src/org.freedesktop.PackageKit.Transaction.xml
index aafc394..f905c65 100644
--- a/src/org.freedesktop.PackageKit.Transaction.xml
+++ b/src/org.freedesktop.PackageKit.Transaction.xml
@@ -160,6 +160,19 @@
           <doc:para>
             This method downloads packages into a temporary directory.
           </doc:para>
+          <doc:para>
+            This method should emit one
+            <doc:tt>Files</doc:tt> signal for each package that is downloaded,
+            with the file list set as the name of the complete downloaded file
+            and directory, so for example:
+          </doc:para>
+          <doc:para>
+            <doc:tt>DownloadPackages('hal;0.1.2;i386;fedora','hal-info;2009-09-07;no-arch;updates')</doc:tt>
+            should send two signals, e.g.
+            <doc:tt>Files('hal;0.1.2;i386;fedora', '/tmp/hal-0.1.2.i386.rpm')</doc:tt>
+            and
+            <doc:tt>Files('hal-info;2009-09-07;no-arch;updates', '/tmp/hal-info-2009-09-07.noarch.rpm')</doc:tt>.
+          </doc:para>
         </doc:description>
       </doc:doc>
       <arg type="as" name="package_ids" direction="in">
diff --git a/src/pk-backend.c b/src/pk-backend.c
index b7f656a..ceb0467 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -1224,6 +1224,8 @@ out:
 gboolean
 pk_backend_files (PkBackend *backend, const gchar *package_id, const gchar *filelist)
 {
+	gboolean ret;
+
 	g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE);
 	g_return_val_if_fail (filelist != NULL, FALSE);
 	g_return_val_if_fail (backend->priv->locked != FALSE, FALSE);
@@ -1234,11 +1236,19 @@ pk_backend_files (PkBackend *backend, const gchar *package_id, const gchar *file
 		return FALSE;
 	}
 
+	/* check we are valid */
+	ret = pk_package_id_check (package_id);
+	if (!ret) {
+		egg_warning ("package_id invalid and cannot be processed: %s", package_id);
+		goto out;
+	}
+
 	egg_debug ("emit files %s, %s", package_id, filelist);
 	g_signal_emit (backend, signals [PK_BACKEND_FILES], 0,
 		       package_id, filelist);
 
-	return TRUE;
+out:
+	return ret;
 }
 
 /**
commit 4fa7d82ce644c14fe928bf3cd109c20ca2d54ff2
Author: shanky <shanky at fedoraproject.org>
Date:   Mon Sep 7 12:16:26 2009 +0000

    Sending translation for Kannada

diff --git a/po/kn.po b/po/kn.po
index b0cd4bb..081ac30 100644
--- a/po/kn.po
+++ b/po/kn.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: packagekit.master.kn\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-08-24 11:06+0100\n"
-"PO-Revision-Date: 2009-06-15 14:37+0530\n"
+"POT-Creation-Date: 2009-09-01 02:36+0000\n"
+"PO-Revision-Date: 2009-09-07 17:40+0530\n"
 "Last-Translator: Shankar Prasad <svenkate at redhat.com>\n"
 "Language-Team: Kannada <en at li.org>\n"
 "MIME-Version: 1.0\n"
@@ -32,12 +32,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 "ಅಸತ್ಯ"
 
@@ -85,453 +84,499 @@ 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[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 ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಈ ಉಪಕರಣದಿಂದ ಸಾಧ್ಯವಾಗಿಲ್ಲ ಏಕೆಂದರೆ ಅದು ಕಂಡು ಬಂದಿಲ್ಲ"
+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 "PackageKit ಕನ್ಸೋಲ್ ಸಂಪರ್ಕಸಾಧನ"
 
 #. 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,149 +585,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 "ಒಂದು ಹುಡುಕು ಬಗೆಯ ಅಗತ್ಯವಿದೆ, ಉದಾ. ಹೆಸರು"
 
 #. 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 ""
-"ಈ ಕಾರ್ಯವನ್ನು ಕೊನೆಯ ಬಾರಿಗೆ ಪೂರ್ಣಗೊಳಿಸದ ನಂತರ ಸಮಯವನ್ನು ಪಡೆದುಕೊಳ್ಳುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ"
+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 "ಆಜ್ಞೆಯು ವಿಫಲಗೊಂಡಿದೆ"
 
@@ -708,8 +751,7 @@ msgstr "ಹೊರತು ಪಡಿಸಲು ಅವಲಂಬನೆಗಳ ಕಡತ
 
 #. TRANSLATORS: the output location
 #: ../client/pk-generate-pack.c:191
-msgid ""
-"The output file or directory (the current directory is used if ommitted)"
+msgid "The output file or directory (the current directory is used if ommitted)"
 msgstr "ಔಟ್‌ಪುಟ್ ಕಡತ ಅಥವ ಕೋಶ (ಹೊರತುಪಡಿಸಿದರೆ ಪ್ರಸಕ್ತ ಕೋಶವನ್ನು ಬಳಸಲಾಗುವುದು)"
 
 #. TRANSLATORS: put a list of packages in the pack
@@ -812,7 +854,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 +934,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 +1022,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 "PackageKit ಕನ್ಸೋಲ್ ಸಂಪರ್ಕಸಾಧನ"
+msgstr "PackageKit Debuginfo ಅನುಸ್ಥಾಪಕ"
 
 #. 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 "ERROR: ಅನುಸ್ಥಾಪಿಸಲು ಪ್ಯಾಕೇಜಿನ ಹೆಸರುಗಳನ್ನು ಸೂಚಿಸಿ."
 
 #. 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 +1073,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 ಅಶಕ್ತಗೊಂಡ debuginfo ರೆಪೊಗಳು ಕಂಡುಬಂದಿವೆ."
 
 #. 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 +1106,189 @@ msgstr ""
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:896
 #: ../contrib/debuginfo-install/pk-debuginfo-install.c:940
 msgid "FAILED."
-msgstr ""
+msgstr "FAILED."
 
 #. 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 "debuginfo ಪ್ಯಾಕೇಜ್ %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,8 +1317,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
@@ -1302,8 +1328,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"
@@ -1318,9 +1343,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"
@@ -1334,8 +1358,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"
@@ -1396,7 +1419,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
@@ -1469,8 +1492,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
@@ -1518,43 +1540,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 ea634443f4c349fed5e398b443b71b34dee736ef
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 12:52:53 2009 +0100

    trivial: post release version bump

diff --git a/configure.ac b/configure.ac
index 9973a36..79e6d83 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@ AC_PREREQ(2.52)
 
 m4_define([pk_major_version], [0])
 m4_define([pk_minor_version], [5])
-m4_define([pk_micro_version], [2])
+m4_define([pk_micro_version], [3])
 m4_define([pk_version],
           [pk_major_version.pk_minor_version.pk_micro_version])
 
commit bf3cb21bed18af102d30011c63459c2c6e03c823
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 11:19:48 2009 +0100

    glib2: Add some self tests that fail for downloading

diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index 8906ce3..a2b4016 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -3351,6 +3351,50 @@ pk_client_test_cancel (GCancellable *cancellable)
 	return FALSE;
 }
 
+static void
+pk_client_test_download_cb (GObject *object, GAsyncResult *res, EggTest *test)
+{
+	PkClient *client = PK_CLIENT (object);
+	GError *error = NULL;
+	PkResults *results = NULL;
+	PkExitEnum exit_enum;
+	const PkResultItemFiles *item;
+	GPtrArray *array = NULL;
+	guint len;
+
+	/* get the results */
+	results = pk_client_generic_finish (client, res, &error);
+	if (results == NULL) {
+		egg_test_failed (test, "failed to download: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	exit_enum = pk_results_get_exit_code (results);
+	if (exit_enum != PK_EXIT_ENUM_SUCCESS)
+		egg_test_failed (test, "failed to download: %s", pk_exit_enum_to_text (exit_enum));
+
+	/* check number */
+	array = pk_results_get_files_array (results);
+	if (array->len != 1)
+		egg_test_failed (test, "invalid number of files: %i", array->len);
+
+	/* check a result */
+	item = g_ptr_array_index (array, 0);
+	if (item->package_id != NULL)
+		egg_test_failed (test, "invalid package_id: %s, expecting NULL", item->package_id);
+	len = g_strv_length (item->files);
+	if (len != 2)
+		egg_test_failed (test, "invalid number of files: %i", len);
+	if (g_strcmp0 (item->files[0], "/tmp/powertop-1.8-1.fc8.rpm") != 0)
+		egg_test_failed (test, "invalid filename: %s, maybe not rewritten", item->files[0]);
+out:
+	g_ptr_array_unref (array);
+	if (results != NULL)
+		g_object_unref (results);
+	egg_test_loop_quit (test);
+}
+
 void
 pk_client_test (gpointer user_data)
 {
@@ -3477,6 +3521,15 @@ pk_client_test (gpointer user_data)
 	egg_test_loop_wait (test, 15000);
 	egg_test_success (test, "cancelled in %i", egg_test_elapsed (test));
 
+	/************************************************************/
+	egg_test_title (test, "do downloads");
+	package_ids = pk_package_ids_from_id ("powertop;1.8-1.fc8;i386;fedora");
+	pk_client_download_packages_async (client, package_ids, "/tmp", cancellable,
+					   (PkProgressCallback) pk_client_test_progress_cb, test,
+					   (GAsyncReadyCallback) pk_client_test_download_cb, test);
+	g_strfreev (package_ids);
+	egg_test_loop_wait (test, 15000);
+
 	g_object_unref (cancellable);
 	g_object_unref (client);
 
commit a37239a57cb6e27d9d562f4e20fd91340350e717
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Sep 7 11:01:18 2009 +0100

    glib2: start to convert PkServicePack to using glib2 async methods

diff --git a/lib/packagekit-glib2/Makefile.am b/lib/packagekit-glib2/Makefile.am
index b2296cd..800ac3d 100644
--- a/lib/packagekit-glib2/Makefile.am
+++ b/lib/packagekit-glib2/Makefile.am
@@ -41,6 +41,7 @@ libpackagekit_glib2_include_HEADERS =				\
 	pk-package-ids.h					\
 	pk-package-sack.h					\
 	pk-progress.h						\
+	pk-service-pack.h					\
 	pk-results.h						\
 	pk-task.h						\
 	$(NULL)
@@ -75,6 +76,8 @@ libpackagekit_glib2_la_SOURCES =				\
 	pk-package-sack.h					\
 	pk-progress.c						\
 	pk-progress.h						\
+	pk-service-pack.c					\
+	pk-service-pack.h					\
 	pk-results.c						\
 	pk-results.h						\
 	pk-task.c						\
diff --git a/lib/packagekit-glib2/packagekit.h b/lib/packagekit-glib2/packagekit.h
index 36c2a14..23c72e5 100644
--- a/lib/packagekit-glib2/packagekit.h
+++ b/lib/packagekit-glib2/packagekit.h
@@ -33,6 +33,7 @@
 #include <packagekit-glib2/pk-package-ids.h>
 #include <packagekit-glib2/pk-package-sack.h>
 #include <packagekit-glib2/pk-results.h>
+#include <packagekit-glib2/pk-service-pack.h>
 #include <packagekit-glib2/pk-task.h>
 #include <packagekit-glib2/pk-version.h>
 
diff --git a/lib/packagekit-glib2/pk-service-pack.c b/lib/packagekit-glib2/pk-service-pack.c
new file mode 100644
index 0000000..52203f2
--- /dev/null
+++ b/lib/packagekit-glib2/pk-service-pack.c
@@ -0,0 +1,1231 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008-2009 Richard Hughes <richard at hughsie.com>
+ * Copyright (C) 2008 Shishir Goel <crazyontheedge at gmail.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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <fcntl.h>
+
+#ifdef HAVE_ARCHIVE_H
+#include <archive.h>
+#include <archive_entry.h>
+#endif /* HAVE_ARCHIVE_H */
+
+#include <glib.h>
+#include <glib/gstdio.h>
+#include <gio/gio.h>
+
+#include <packagekit-glib2/pk-service-pack.h>
+#include <packagekit-glib2/pk-common.h>
+#include <packagekit-glib2/pk-enum.h>
+#include <packagekit-glib2/pk-results.h>
+#include <packagekit-glib2/pk-client.h>
+#include <packagekit-glib2/pk-package-ids.h>
+
+#include "egg-debug.h"
+#include "egg-string.h"
+
+#define PK_SERVICE_PACK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PK_TYPE_SERVICE_PACK, PkServicePackPrivate))
+
+typedef enum {
+	PK_SERVICE_PACK_TYPE_UPDATE,
+	PK_SERVICE_PACK_TYPE_INSTALL,
+	PK_SERVICE_PACK_TYPE_UNKNOWN
+} PkServicePackType;
+
+/**
+ * PkServicePackState:
+ *
+ * For use in the async methods
+ **/
+typedef struct {
+	gboolean			 ret;
+	gchar				*filename;
+	gchar				**package_ids;
+	gchar				**package_ids_exclude;
+	gpointer			 progress_user_data;
+	guint				 request;
+	GCancellable			*cancellable;
+	GSimpleAsyncResult		*res;
+	PkProgressCallback		 progress_callback;
+	PkServicePack			*pack;
+	PkServicePackType		 type;
+} PkServicePackState;
+
+struct PkServicePackPrivate
+{
+	gchar			*directory;
+	PkClient		*client;
+};
+
+G_DEFINE_TYPE (PkServicePack, pk_service_pack, G_TYPE_OBJECT)
+
+/**
+ * pk_service_pack_error_quark:
+ *
+ * Return value: Our personal error quark.
+ **/
+GQuark
+pk_service_pack_error_quark (void)
+{
+	static GQuark quark = 0;
+	if (!quark)
+		quark = g_quark_from_static_string ("pk_service_pack_error");
+	return quark;
+}
+
+/**
+ * pk_service_pack_error_get_type:
+ **/
+#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
+GType
+pk_service_pack_error_get_type (void)
+{
+	static GType etype = 0;
+
+	if (etype == 0) {
+		static const GEnumValue values[] =
+		{
+			ENUM_ENTRY (PK_SERVICE_PACK_ERROR_FAILED_SETUP, "FailedSetup"),
+			ENUM_ENTRY (PK_SERVICE_PACK_ERROR_FAILED_DOWNLOAD, "FailedDownload"),
+			ENUM_ENTRY (PK_SERVICE_PACK_ERROR_FAILED_EXTRACTION, "FailedExtraction"),
+			ENUM_ENTRY (PK_SERVICE_PACK_ERROR_FAILED_CREATE, "FailedCreate"),
+			ENUM_ENTRY (PK_SERVICE_PACK_ERROR_NOTHING_TO_DO, "NothingToDo"),
+			ENUM_ENTRY (PK_SERVICE_PACK_ERROR_NOT_COMPATIBLE, "NotCompatible"),
+			{ 0, NULL, NULL }
+		};
+		etype = g_enum_register_static ("PkServicePackError", values);
+	}
+	return etype;
+}
+
+/**
+ * pk_service_pack_check_metadata_file:
+ **/
+static gboolean
+pk_service_pack_check_metadata_file (const gchar *full_path, GError **error)
+{
+	GKeyFile *file;
+	gboolean ret;
+	GError *error_local = NULL;
+	gchar *type = NULL;
+	gchar *distro_id = NULL;
+	gchar *distro_id_us = NULL;
+
+	/* load the file */
+	file = g_key_file_new ();
+	ret = g_key_file_load_from_file (file, full_path, G_KEY_FILE_NONE, &error_local);
+	if (!ret) {
+		*error = g_error_new (1, 0, "failed to load file: %s", error_local->message);
+		g_error_free (error_local);
+		goto out;
+	}
+
+	/* read the value */
+	distro_id = g_key_file_get_string (file, PK_SERVICE_PACK_GROUP_NAME, "distro_id", &error_local);
+	if (distro_id == NULL) {
+		*error = g_error_new (1, 0, "failed to get value: %s", error_local->message);
+		g_error_free (error_local);
+		ret = FALSE;
+		goto out;
+	}
+
+	/* read the value */
+	type = g_key_file_get_string (file, PK_SERVICE_PACK_GROUP_NAME, "type", &error_local);
+	if (type == NULL) {
+		*error = g_error_new (1, 0, "failed to get type: %s", error_local->message);
+		g_error_free (error_local);
+		ret = FALSE;
+		goto out;
+	}
+
+	/* check the types we support */
+	if (g_strcmp0 (type, "update") != 0 && g_strcmp0 (type, "install") != 0) {
+		*error = g_error_new (1, 0, "does not have correct type key: %s", type);
+		ret = FALSE;
+		goto out;
+	}
+
+	/* get this system id */
+	distro_id_us = pk_get_distro_id ();
+
+	/* do we match? */
+	ret = (g_strcmp0 (distro_id_us, distro_id) == 0);
+	if (!ret)
+		*error = g_error_new (1, 0, "distro id did not match %s == %s", distro_id_us, distro_id);
+
+out:
+	g_key_file_free (file);
+	g_free (type);
+	g_free (distro_id);
+	g_free (distro_id_us);
+	return ret;
+}
+
+/**
+ * pk_service_pack_extract:
+ * @directory: the directory to unpack into
+ * @error: a valid %GError
+ *
+ * Decompress a tar file
+ *
+ * Return value: %TRUE if the file was decompressed
+ **/
+#ifdef HAVE_ARCHIVE_H
+static gboolean
+pk_service_pack_extract (const gchar *filename, const gchar *directory, GError **error)
+{
+	gboolean ret = FALSE;
+	struct archive *arch = NULL;
+	struct archive_entry *entry;
+	int r;
+	int retval;
+	gchar *retcwd;
+	gchar buf[PATH_MAX];
+
+	/* save the PWD as we chdir to extract */
+	retcwd = getcwd (buf, PATH_MAX);
+	if (retcwd == NULL) {
+		*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_FAILED_SETUP,
+				      "failed to get cwd");
+		goto out;
+	}
+
+	/* we can only read tar achives */
+	arch = archive_read_new ();
+	archive_read_support_format_tar (arch);
+
+	/* open the tar file */
+	r = archive_read_open_file (arch, filename, 10240);
+	if (r) {
+		*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_FAILED_EXTRACTION,
+				      "cannot open: %s", archive_error_string (arch));
+		goto out;
+	}
+
+	/* switch to our destination directory */
+	retval = chdir (directory);
+	if (retval != 0) {
+		*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_FAILED_SETUP,
+				      "failed chdir to %s", directory);
+		goto out;
+	}
+
+	/* decompress each file */
+	for (;;) {
+		r = archive_read_next_header (arch, &entry);
+		if (r == ARCHIVE_EOF)
+			break;
+		if (r != ARCHIVE_OK) {
+			*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_FAILED_EXTRACTION,
+					      "cannot read header: %s", archive_error_string (arch));
+			goto out;
+		}
+		r = archive_read_extract (arch, entry, 0);
+		if (r != ARCHIVE_OK) {
+			*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_FAILED_EXTRACTION,
+					      "cannot extract: %s", archive_error_string (arch));
+			goto out;
+		}
+	}
+
+	/* completed all okay */
+	ret = TRUE;
+out:
+	/* close the archive */
+	if (arch != NULL) {
+		archive_read_close (arch);
+		archive_read_finish (arch);
+	}
+
+	/* switch back to PWD */
+	retval = chdir (buf);
+	if (retval != 0)
+		egg_warning ("cannot chdir back!");
+
+	return ret;
+}
+#else /* HAVE_ARCHIVE_H */
+static gboolean
+pk_service_pack_extract (const gchar *filename, const gchar *directory, GError **error)
+{
+	*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_FAILED_EXTRACTION,
+			      "The service pack %s cannot be extracted as PackageKit was not built with libarchive support", filename);
+	return FALSE;
+}
+#endif /* HAVE_ARCHIVE_H */
+
+/**
+ * pk_service_pack_get_random:
+ **/
+static gchar *
+pk_service_pack_get_random (const gchar *prefix, guint length)
+{
+	guint32 n;
+	gchar *str;
+	guint i;
+	guint prefix_len;
+
+	/* make a string to hold both parts */
+	prefix_len = egg_strlen (prefix, 28);
+	str = g_strnfill (length + prefix_len, 'X');
+
+	/* copy over prefix */
+	for (i=0; i<prefix_len; i++)
+		str[i] = prefix[i];
+
+	/* use random string */
+	for (i=prefix_len; i<length+prefix_len; i++) {
+		n = g_random_int_range (97, 122);
+		str[i] = (gchar) n;
+	}
+	return str;
+}
+
+/**
+ * pk_service_pack_create_temporary_directory:
+ **/
+static gchar *
+pk_service_pack_create_temporary_directory (const gchar *prefix)
+{
+	gboolean ret;
+	gchar *random;
+	gchar *directory = NULL;
+
+	/* ensure path does not already exist */
+	do {
+		/* last iter results, or NULL */
+		g_free (directory);
+
+		/* get a random path */
+		random = pk_service_pack_get_random (prefix, 8);
+
+		/* ITS4: ignore, the user has no control over the daemon envp  */
+		directory = g_build_filename (g_get_tmp_dir (), random, NULL);
+		g_free (random);
+		ret = g_file_test (directory, G_FILE_TEST_IS_DIR);
+	} while (ret);
+
+	/* create so only user (root) has rwx access */
+	g_mkdir (directory, 0700);
+
+	return directory;
+}
+
+/**
+ * pk_service_pack_check_valid:
+ * @pack: a valid #PkServicePack instance
+ * @error: a %GError to put the error code and message in, or %NULL
+ *
+ * Checks to see if a service pack file is valid, and usable with this system.
+ *
+ * Return value: %TRUE if the service pack is valid
+ **/
+gboolean
+pk_service_pack_check_valid (PkServicePack *pack, const gchar *filename, GError **error)
+{
+	gboolean ret = TRUE;
+	gchar *directory = NULL;
+	gchar *metafile = NULL;
+	GDir *dir = NULL;
+	const gchar *filename_entry;
+	GError *error_local = NULL;
+
+	g_return_val_if_fail (PK_IS_SERVICE_PACK (pack), FALSE);
+	g_return_val_if_fail (filename != NULL, FALSE);
+
+	/* create a random directory */
+	directory = pk_service_pack_create_temporary_directory ("PackageKit-");
+	ret = pk_service_pack_extract (filename, directory, &error_local);
+	if (!ret) {
+		*error = g_error_new (PK_SERVICE_PACK_ERROR, error_local->code,
+				      "failed to check %s: %s", filename, error_local->message);
+		g_error_free (error_local);
+		goto out;
+	}
+
+	/* get the files */
+	dir = g_dir_open (directory, 0, NULL);
+	if (dir == NULL) {
+		*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_FAILED_SETUP,
+				      "failed to get directory for %s", directory);
+		ret = FALSE;
+		goto out;
+	}
+
+	/* find the file, and check the metadata */
+	while ((filename_entry = g_dir_read_name (dir))) {
+		metafile = g_build_filename (directory, filename_entry, NULL);
+		if (g_strcmp0 (filename_entry, "metadata.conf") == 0) {
+			ret = pk_service_pack_check_metadata_file (metafile, &error_local);
+			if (!ret) {
+				*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_NOT_COMPATIBLE,
+						      "Service Pack %s not compatible with your distro: %s", filename, error_local->message);
+				g_error_free (error_local);
+				ret = FALSE;
+				goto out;
+			}
+		}
+		g_free (metafile);
+	}
+out:
+	g_rmdir (directory);
+	g_free (directory);
+	if (dir != NULL)
+		g_dir_close (dir);
+	return ret;
+}
+
+/**
+ * pk_service_pack_set_temp_directory:
+ * @pack: a valid #PkServicePack instance
+ * @directory: the directory to use, or %NULL to use the default
+ *
+ * Sets the directory to use when decompressing the service pack
+ *
+ * Return value: %TRUE if the directory was set
+ **/
+gboolean
+pk_service_pack_set_temp_directory (PkServicePack *pack, const gchar *directory)
+{
+	g_return_val_if_fail (PK_IS_SERVICE_PACK (pack), FALSE);
+	g_free (pack->priv->directory);
+
+	/* use default */
+	if (directory == NULL)
+		directory = pk_service_pack_create_temporary_directory ("PackageKit-");
+
+	pack->priv->directory = g_strdup (directory);
+	return TRUE;
+}
+
+#if 0
+/**
+ * pk_service_pack_download_package_ids:
+ **/
+static gboolean
+pk_service_pack_download_package_ids (PkServicePack *pack, gchar **package_ids, GError **error)
+{
+	gboolean ret;
+	GError *error_local = NULL;
+
+	g_return_val_if_fail (PK_IS_SERVICE_PACK (pack), FALSE);
+	g_return_val_if_fail (package_ids != NULL, FALSE);
+	g_return_val_if_fail (pack->priv->directory != NULL, FALSE);
+
+	egg_debug ("download+ %s", package_ids[0]);
+	ret = pk_client_download_packages (pack->priv->client, package_ids, pack->priv->directory, &error_local);
+	if (!ret) {
+		*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_FAILED_DOWNLOAD,
+				      "failed to download: %s", error_local->message);
+		g_error_free (error_local);
+		goto out;
+	}
+out:
+	return ret;
+}
+#endif
+
+#if 0
+/**
+ * pk_service_pack_exclude_packages:
+ **/
+static gboolean
+pk_service_pack_exclude_packages (PkServicePack *pack, gchar **package_ids)
+{
+	guint i;
+	guint length;
+	gboolean found;
+
+	g_return_val_if_fail (PK_IS_SERVICE_PACK (pack), FALSE);
+	g_return_val_if_fail (package_ids != NULL, FALSE);
+
+	/* do not just download everything, uselessly */
+	length = pk_package_list_get_size (package_ids);
+	for (i=0; i<length; i++) {
+		obj = pk_package_list_get_obj (package_ids, i);
+		/* will just ignore if the obj is not there */
+		found = pk_obj_list_remove (PK_OBJ_LIST(list), obj);
+		if (found)
+			egg_debug ("removed %s", obj->id->name);
+	}
+	return TRUE;
+}
+#endif
+
+#ifdef HAVE_ARCHIVE_H
+/**
+ * pk_service_pack_create_metadata_file:
+ **/
+static gboolean
+pk_service_pack_create_metadata_file (PkServicePackState *state)
+{
+	gboolean ret = FALSE;
+	gchar *distro_id = NULL;
+	gchar *iso_time = NULL;
+	GError *error = NULL;
+	GKeyFile *file = NULL;
+	gchar *data = NULL;
+
+	g_return_val_if_fail (state->filename != NULL, FALSE);
+	g_return_val_if_fail (state->type != PK_SERVICE_PACK_TYPE_UNKNOWN, FALSE);
+
+	file = g_key_file_new ();
+
+	/* get needed data */
+	distro_id = pk_get_distro_id ();
+	if (distro_id == NULL)
+		goto out;
+	iso_time = pk_iso8601_present ();
+	if (iso_time == NULL)
+		goto out;
+
+	g_key_file_set_string (file, PK_SERVICE_PACK_GROUP_NAME, "distro_id", distro_id);
+	g_key_file_set_string (file, PK_SERVICE_PACK_GROUP_NAME, "created", iso_time);
+
+	if (state->type == PK_SERVICE_PACK_TYPE_INSTALL)
+		g_key_file_set_string (file, PK_SERVICE_PACK_GROUP_NAME, "type", "install");
+	else if (state->type == PK_SERVICE_PACK_TYPE_UPDATE)
+		g_key_file_set_string (file, PK_SERVICE_PACK_GROUP_NAME, "type", "update");
+
+	/* convert to text */
+	data = g_key_file_to_data (file, NULL, &error);
+	if (data == NULL) {
+		egg_warning ("failed to convert to text: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* save contents */
+	ret = g_file_set_contents (state->filename, data, -1, &error);
+	if (!ret) {
+		egg_warning ("failed to save file: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+out:
+	g_key_file_free (file);
+	g_free (data);
+	g_free (distro_id);
+	g_free (iso_time);
+	return ret;
+}
+
+/**
+ * pk_service_pack_archive_add_file:
+ **/
+static gboolean
+pk_service_pack_archive_add_file (struct archive *arch, const gchar *filename, GError **error)
+{
+	int retval;
+	int len;
+	int fd = -1;
+	int wrote;
+	gboolean ret = FALSE;
+	gchar *filename_basename = NULL;
+	struct archive_entry *entry = NULL;
+	struct stat st;
+	gchar buff[8192];
+
+	/* stat file */
+	retval = stat (filename, &st);
+	if (retval != 0) {
+		*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_FAILED_CREATE,
+				      "file not found %s", filename);
+		goto out;
+	}
+	egg_debug ("stat(%s), size=%lu bytes\n", filename, (glong) st.st_size);
+
+	/* create new entry */
+	entry = archive_entry_new ();
+	archive_entry_copy_stat (entry, &st);
+	filename_basename = g_path_get_basename (filename);
+	archive_entry_set_pathname (entry, filename_basename);
+
+	/* ._BIG FAT BUG_. We should not have to do this, as it should be
+	 * set from archive_entry_copy_stat() */
+	archive_entry_set_size (entry, st.st_size);
+
+	/* write header */
+	retval = archive_write_header (arch, entry);
+	if (retval != ARCHIVE_OK) {
+		*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_FAILED_CREATE,
+				      "failed to write header: %s\n", archive_error_string (arch));
+		goto out;
+	}
+
+	/* open file to copy */
+	fd = open (filename, O_RDONLY);
+	if (fd < 0) {
+		*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_FAILED_CREATE,
+				      "failed to get fd for %s", filename);
+		goto out;
+	}
+
+	/* ITS4: ignore, buffer statically preallocated  */
+	len = read (fd, buff, sizeof (buff));
+	/* write data to archive -- how come no convenience function? */
+	while (len > 0) {
+		wrote = archive_write_data (arch, buff, len);
+		if (wrote != len)
+			egg_warning("wrote %i instead of %i\n", wrote, len);
+		/* ITS4: ignore, buffer statically preallocated  */
+		len = read (fd, buff, sizeof (buff));
+	}
+	ret = TRUE;
+out:
+	if (fd >= 0)
+		close (fd);
+	if (entry != NULL)
+		archive_entry_free (entry);
+	g_free (filename_basename);
+	return ret;
+}
+
+/**
+ * pk_service_pack_create_from_files:
+ **/
+static gboolean
+pk_service_pack_create_from_files (PkServicePackState *state, gchar **file_array, GError **error)
+{
+	struct archive *arch = NULL;
+	gboolean ret = FALSE;
+	guint i;
+	gchar *filename;
+	gchar **files_and_metadata = NULL;
+
+	g_return_val_if_fail (file_array != NULL, FALSE);
+	g_return_val_if_fail (error != NULL, FALSE);
+
+	/* create a file with metadata in it */
+	filename = g_build_filename (g_get_tmp_dir (), "metadata.conf", NULL);
+	ret = pk_service_pack_create_metadata_file (state);
+	if (!ret) {
+		*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_FAILED_CREATE,
+				      "failed to generate metadata file %s", filename);
+		goto out;
+	}
+	files_and_metadata = pk_package_ids_add_id (file_array, filename);
+
+	/* we can only write tar achives */
+	arch = archive_write_new ();
+	archive_write_set_compression_none (arch);
+	archive_write_set_format_ustar (arch);
+	archive_write_open_filename (arch, state->filename);
+
+	/* for each filename */
+	for (i=0; files_and_metadata[i] != NULL; i++) {
+		/* try to add to archive */
+		ret = pk_service_pack_archive_add_file (arch, files_and_metadata[i], error);
+		if (!ret)
+			goto out;
+	}
+
+	/* completed all okay */
+	ret = TRUE;
+out:
+	g_strfreev (files_and_metadata);
+	g_free (filename);
+	/* delete each filename */
+	for (i=0; file_array[i] != NULL; i++)
+		g_remove (file_array[i]);
+
+	/* close the archive */
+	if (arch != NULL) {
+		archive_write_close (arch);
+		archive_write_finish (arch);
+	}
+	return ret;
+}
+#else
+/**
+ * pk_service_pack_create_from_files:
+ **/
+static gboolean
+pk_service_pack_create_from_files (PkServicePackState *state, GPtrArray *file_array, GError **error)
+{
+	g_return_val_if_fail (PK_IS_SERVICE_PACK (pack), FALSE);
+	*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_FAILED_CREATE,
+			      "The service pack %s cannot be created as PackageKit was not built with libarchive support", pack->priv->filename);
+	return FALSE;
+}
+#endif
+
+#if 0
+/**
+ * pk_service_pack_scan_files_in_directory:
+ **/
+static GPtrArray *
+pk_service_pack_scan_files_in_directory (PkServicePack *pack)
+{
+	gchar *src;
+	GPtrArray *file_array = NULL;
+	GDir *dir;
+	const gchar *filename;
+
+	g_return_val_if_fail (PK_IS_SERVICE_PACK (pack), NULL);
+	g_return_val_if_fail (pack->priv->directory != NULL, NULL);
+
+	/* try and open the directory */
+	dir = g_dir_open (pack->priv->directory, 0, NULL);
+	if (dir == NULL) {
+		egg_warning ("failed to get directory for %s", pack->priv->directory);
+		goto out;
+	}
+
+	/* add each file to an array */
+	file_array = g_ptr_array_new ();
+	while ((filename = g_dir_read_name (dir))) {
+		src = g_build_filename (pack->priv->directory, filename, NULL);
+		g_ptr_array_add (file_array, src);
+	}
+	g_dir_close (dir);
+out:
+	return file_array;
+}
+#endif
+
+#if 0
+/**
+ * pk_service_pack_package_cb:
+ **/
+static void
+pk_service_pack_package_cb (PkClient *client, const PkPackageObj *obj, PkServicePack *pack)
+{
+	g_return_if_fail (PK_IS_SERVICE_PACK (pack));
+
+	/* only shown downloading */
+	if (obj->info != PK_INFO_ENUM_DOWNLOADING)
+		return;
+}
+
+/**
+ * pk_service_pack_create_for_package_ids_internal:
+ **/
+static gboolean
+pk_service_pack_create_for_package_ids_internal (PkServicePack *pack, gchar **package_ids, GError **error)
+{
+	gchar **package_ids_deps = NULL;
+	PkPackageList *list = NULL;
+	guint length;
+	GPtrArray *file_array = NULL;
+	GError *error_local = NULL;
+	gboolean ret = FALSE;
+
+	g_return_val_if_fail (PK_IS_SERVICE_PACK (pack), FALSE);
+	g_return_val_if_fail (package_ids != NULL, FALSE);
+	g_return_val_if_fail (error != NULL, FALSE);
+	g_return_val_if_fail (state->filename != NULL, FALSE);
+	g_return_val_if_fail (pack->priv->directory != NULL, FALSE);
+
+	/* remove some deps */
+	pk_package_list_set_fuzzy_arch (list, TRUE);
+	pk_service_pack_exclude_packages (pack, list);
+
+	/* get the deps */
+	length = pk_package_list_get_size (list);
+	if (length != 0) {
+		/* download additional package_ids */
+		package_ids_deps = pk_package_list_to_strv (list);
+		pk_service_pack_status_changed (pack, PK_SERVICE_PACK_STATUS_DOWNLOAD_DEPENDENCIES);
+		ret = pk_service_pack_download_package_ids (pack, package_ids_deps, &error_local);
+		g_strfreev (package_ids_deps);
+
+		/* failed to get deps */
+		if (!ret) {
+			*error = g_error_new (PK_SERVICE_PACK_ERROR, error_local->code,
+					      "failed to download deps of package: %s", error_local->message);
+			g_error_free (error_local);
+			goto out;
+		}
+	}
+
+	/* find packages that were downloaded */
+	file_array = pk_service_pack_scan_files_in_directory (pack);
+	if (file_array == NULL) {
+		*error = g_error_new (PK_SERVICE_PACK_ERROR, PK_SERVICE_PACK_ERROR_FAILED_SETUP,
+				      "failed to scan directory: %s", pack->priv->directory);
+		goto out;
+	}
+
+	/* generate pack file */
+	ret = pk_service_pack_create_from_files (pack, file_array, &error_local);
+	if (!ret) {
+		*error = g_error_new (PK_SERVICE_PACK_ERROR, error_local->code,
+				      "failed to create archive: %s", error_local->message);
+		g_error_free (error_local);
+		goto out;
+	}
+
+out:
+	if (list != NULL)
+		g_object_unref (list);
+	if (file_array != NULL) {
+		g_ptr_array_foreach (file_array, (GFunc) g_free, NULL);
+		g_ptr_array_free (file_array, TRUE);
+	}
+	return ret;
+}
+#endif
+
+/**
+ * pk_service_pack_generic_state_finish:
+ **/
+static void
+pk_service_pack_generic_state_finish (PkServicePackState *state, const GError *error)
+{
+	/* remove weak ref */
+	if (state->pack != NULL)
+		g_object_remove_weak_pointer (G_OBJECT (state->pack), (gpointer) &state->pack);
+
+	/* get result */
+	if (state->ret) {
+		g_simple_async_result_set_op_res_gboolean (state->res, state->ret);
+	} 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);
+
+	/* deallocate */
+	if (state->cancellable != NULL)
+		g_object_unref (state->cancellable);
+	g_strfreev (state->package_ids);
+	g_strfreev (state->package_ids_exclude);
+	g_free (state->filename);
+	g_object_unref (state->res);
+	g_slice_free (PkServicePackState, state);
+}
+
+/**
+ * pk_service_pack_download_ready_cb:
+ **/
+static void
+pk_service_pack_download_ready_cb (GObject *source_object, GAsyncResult *res, PkServicePackState *state)
+{
+	PkServicePack *pack = PK_SERVICE_PACK (source_object);
+	GError *error = NULL;
+	PkResults *results;
+	PkExitEnum exit_enum;
+	gboolean ret;
+	gchar **files = NULL;
+
+	/* get the results */
+	results = pk_client_generic_finish (PK_CLIENT(pack), res, &error);
+	if (results == NULL) {
+		pk_service_pack_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* get exit code */
+	exit_enum = pk_results_get_exit_code (results);
+	if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
+		error = g_error_new (1, 0, "failed to download");
+		pk_service_pack_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* now create pack */
+	egg_error ("todo");
+	ret = pk_service_pack_create_from_files (state, files, &error);
+	if (!ret) {
+		pk_service_pack_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* we can't handle this, just finish the async method */
+	state->ret = TRUE;
+
+	/* we're done */
+	pk_service_pack_generic_state_finish (state, error);
+out:
+	g_strfreev (files);
+	if (results != NULL)
+		g_object_unref (results);
+	return;
+}
+
+/**
+ * pk_service_pack_get_depends_ready_cb:
+ **/
+static void
+pk_service_pack_get_depends_ready_cb (GObject *source_object, GAsyncResult *res, PkServicePackState *state)
+{
+	PkServicePack *pack = PK_SERVICE_PACK (source_object);
+	GError *error = NULL;
+	PkResults *results;
+	PkExitEnum exit_enum;
+	GPtrArray *array = NULL;
+	guint i;
+	const PkResultItemPackage *package;
+	gchar **package_ids = NULL;
+	gchar **package_ids_to_download = NULL;
+
+	/* get the results */
+	results = pk_client_generic_finish (PK_CLIENT(pack), res, &error);
+	if (results == NULL) {
+		pk_service_pack_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* get exit code */
+	exit_enum = pk_results_get_exit_code (results);
+	if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
+		error = g_error_new (1, 0, "failed to download");
+		pk_service_pack_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* add all the results to the existing list */
+	array = pk_results_get_package_array (results);
+	package_ids = g_new0 (gchar *, array->len + 1);
+	for (i=0; i<array->len; i++) {
+		package = g_ptr_array_index (array, i);
+		package_ids[i] = g_strdup (package->package_id);
+	}
+	package_ids_to_download = pk_package_ids_add_ids (state->package_ids, package_ids);
+
+	/* now download */
+	pk_client_download_packages_async (PK_CLIENT(state->pack), package_ids_to_download, pack->priv->directory,
+					   state->cancellable, state->progress_callback, state->progress_user_data,
+					   (GAsyncReadyCallback) pk_service_pack_download_ready_cb, state);
+out:
+	g_strfreev (package_ids);
+	g_strfreev (package_ids_to_download);
+	if (array != NULL)
+		g_ptr_array_unref (array);
+	if (results != NULL)
+		g_object_unref (results);
+	return;
+}
+
+/**
+ * pk_service_pack_create_for_package_ids_async:
+ * @pack: a valid #PkServicePack instance
+ * @filename: the filename of the service pack
+ * @package_ids: a null terminated array of package_id structures such as "hal;0.0.1;i386;fedora"
+ * @package_ids_exclude: An array of packages to exclude
+ * @cancellable: a #GCancellable or %NULL
+ * @callback: the function to run on completion
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @user_data: the data to pass to @callback
+ *
+ * Create a service pack for the specified Package IDs
+ **/
+void
+pk_service_pack_create_for_package_ids_async (PkServicePack *pack, const gchar *filename, gchar **package_ids,
+					      gchar **package_ids_exclude, GCancellable *cancellable,
+					      PkProgressCallback progress_callback, gpointer progress_user_data,
+					      GAsyncReadyCallback callback, gpointer user_data)
+{
+	GSimpleAsyncResult *res;
+	PkServicePackState *state;
+
+	g_return_if_fail (PK_IS_SERVICE_PACK (pack));
+	g_return_if_fail (callback != NULL);
+
+	res = g_simple_async_result_new (G_OBJECT (pack), callback, user_data, pk_service_pack_create_for_package_ids_async);
+
+	/* save state */
+	state = g_slice_new0 (PkServicePackState);
+	state->res = g_object_ref (res);
+	if (cancellable != NULL)
+		state->cancellable = g_object_ref (cancellable);
+	state->pack = pack;
+	state->progress_callback = progress_callback;
+	state->progress_user_data = progress_user_data;
+	state->filename = g_strdup (filename);
+	state->package_ids = g_strdupv (package_ids);
+	state->package_ids_exclude = g_strdupv (package_ids_exclude);
+	state->type = PK_SERVICE_PACK_TYPE_INSTALL;
+	g_object_add_weak_pointer (G_OBJECT (state->pack), (gpointer) &state->pack);
+
+	/* get deps, TODO: use NEWEST? */
+	pk_client_get_depends_async (PK_CLIENT(state->pack), PK_FILTER_ENUM_NONE, state->package_ids, TRUE,
+				     state->cancellable, state->progress_callback, state->progress_user_data,
+				     (GAsyncReadyCallback) pk_service_pack_get_depends_ready_cb, state);
+
+	g_object_unref (res);
+}
+
+/**
+ * pk_service_pack_get_updates_ready_cb:
+ **/
+static void
+pk_service_pack_get_updates_ready_cb (GObject *source_object, GAsyncResult *res, PkServicePackState *state)
+{
+	PkServicePack *pack = PK_SERVICE_PACK (source_object);
+	GError *error = NULL;
+	PkResults *results;
+	PkExitEnum exit_enum;
+	GPtrArray *array = NULL;
+	guint i;
+	const PkResultItemPackage *package;
+
+	/* get the results */
+	results = pk_client_generic_finish (PK_CLIENT(pack), res, &error);
+	if (results == NULL) {
+		pk_service_pack_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* get exit code */
+	exit_enum = pk_results_get_exit_code (results);
+	if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
+		error = g_error_new (1, 0, "failed to get updates");
+		pk_service_pack_generic_state_finish (state, error);
+		g_error_free (error);
+		goto out;
+	}
+
+	/* add all the results to the existing list */
+	array = pk_results_get_package_array (results);
+	state->package_ids = g_new0 (gchar *, array->len + 1);
+	for (i=0; i<array->len; i++) {
+		package = g_ptr_array_index (array, i);
+		state->package_ids[i] = g_strdup (package->package_id);
+	}
+
+	/* get deps, TODO: use NEWEST? */
+	pk_client_get_depends_async (PK_CLIENT(state->pack), PK_FILTER_ENUM_NONE, state->package_ids, TRUE,
+				     state->cancellable, state->progress_callback, state->progress_user_data,
+				     (GAsyncReadyCallback) pk_service_pack_get_depends_ready_cb, state);
+out:
+	if (array != NULL)
+		g_ptr_array_unref (array);
+	if (results != NULL)
+		g_object_unref (results);
+	return;
+}
+
+/**
+ * pk_service_pack_create_for_updates_async:
+ * @pack: a valid #PkServicePack instance
+ * @filename: the filename of the service pack
+ * @package_ids_exclude: An array of packages to exclude
+ * @cancellable: a #GCancellable or %NULL
+ * @callback: the function to run on completion
+ * @progress_callback: the function to run when the progress changes
+ * @progress_user_data: data to pass to @progress_callback
+ * @user_data: the data to pass to @callback
+ *
+ * Create a service pack for the specified Package IDs
+ **/
+void
+pk_service_pack_create_for_updates_async (PkServicePack *pack, const gchar *filename,
+					  gchar **package_ids_exclude, GCancellable *cancellable,
+					  PkProgressCallback progress_callback, gpointer progress_user_data,
+					  GAsyncReadyCallback callback, gpointer user_data)
+{
+	GSimpleAsyncResult *res;
+	PkServicePackState *state;
+
+	g_return_if_fail (PK_IS_SERVICE_PACK (pack));
+	g_return_if_fail (callback != NULL);
+
+	res = g_simple_async_result_new (G_OBJECT (pack), callback, user_data, pk_service_pack_create_for_updates_async);
+
+	/* save state */
+	state = g_slice_new0 (PkServicePackState);
+	state->res = g_object_ref (res);
+	if (cancellable != NULL)
+		state->cancellable = g_object_ref (cancellable);
+	state->pack = pack;
+	state->type = PK_SERVICE_PACK_TYPE_UPDATE;
+	state->progress_callback = progress_callback;
+	state->progress_user_data = progress_user_data;
+	state->filename = g_strdup (filename);
+	state->package_ids_exclude = g_strdupv (package_ids_exclude);
+	g_object_add_weak_pointer (G_OBJECT (state->pack), (gpointer) &state->pack);
+
+	/* get deps, TODO: use NEWEST? */
+	pk_client_get_updates_async (PK_CLIENT(state->pack), PK_FILTER_ENUM_NONE,
+				     state->cancellable, state->progress_callback, state->progress_user_data,
+				     (GAsyncReadyCallback) pk_service_pack_get_updates_ready_cb, state);
+
+	g_object_unref (res);
+}
+
+/**
+ * pk_service_pack_generic_finish:
+ * @pack: a valid #PkServicePack instance
+ * @res: the #GAsyncResult
+ * @error: A #GError or %NULL
+ *
+ * Gets the result from the asynchronous function.
+ *
+ * Return value: %TRUE for success
+ **/
+gboolean
+pk_service_pack_generic_finish (PkServicePack *pack, GAsyncResult *res, GError **error)
+{
+	GSimpleAsyncResult *simple;
+
+	g_return_val_if_fail (PK_IS_SERVICE_PACK (pack), 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_gboolean (simple);
+}
+
+/**
+ * pk_service_pack_finalize:
+ **/
+static void
+pk_service_pack_finalize (GObject *object)
+{
+	PkServicePack *pack;
+
+	g_return_if_fail (object != NULL);
+	g_return_if_fail (PK_IS_SERVICE_PACK (object));
+	pack = PK_SERVICE_PACK (object);
+
+	g_object_unref (pack->priv->client);
+	g_free (pack->priv->directory);
+
+	G_OBJECT_CLASS (pk_service_pack_parent_class)->finalize (object);
+}
+
+/**
+ * pk_service_pack_class_init:
+ **/
+static void
+pk_service_pack_class_init (PkServicePackClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	object_class->finalize = pk_service_pack_finalize;
+
+	g_type_class_add_private (klass, sizeof (PkServicePackPrivate));
+}
+
+/**
+ * pk_service_pack_init:
+ **/
+static void
+pk_service_pack_init (PkServicePack *pack)
+{
+	pack->priv = PK_SERVICE_PACK_GET_PRIVATE (pack);
+	pack->priv->client = pk_client_new ();
+	pack->priv->directory = NULL;
+}
+
+/**
+ * pk_service_pack_new:
+ *
+ * Return value: A new service_pack class instance.
+ **/
+PkServicePack *
+pk_service_pack_new (void)
+{
+	PkServicePack *pack;
+	pack = g_object_new (PK_TYPE_SERVICE_PACK, NULL);
+	return PK_SERVICE_PACK (pack);
+}
+
+/***************************************************************************
+ ***                          MAKE CHECK TESTS                           ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+static void
+pk_service_pack_test_create_cb (GObject *object, GAsyncResult *res, EggTest *test)
+{
+	PkServicePack *pack = PK_SERVICE_PACK (object);
+	GError *error = NULL;
+	gboolean ret;
+
+	/* get the results */
+	ret = pk_service_pack_generic_finish (pack, res, &error);
+	if (!ret) {
+		egg_test_failed (test, "failed to create pack: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+out:
+	egg_test_loop_quit (test);
+}
+
+static void
+pk_service_pack_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_service_pack_test (gpointer user_data)
+{
+	EggTest *test = (EggTest *) user_data;
+	PkServicePack *pack;
+	gchar **package_ids;
+
+	if (!egg_test_start (test, "PkServicePack"))
+		return;
+
+	/************************************************************/
+	egg_test_title (test, "get an instance");
+	pack = pk_service_pack_new ();
+	egg_test_assert (test, pack != NULL);
+
+	/************************************************************/
+	egg_test_title (test, "get service_pack");
+	pack = pk_service_pack_new ();
+	egg_test_assert (test, pack != NULL);
+
+	/************************************************************/
+	egg_test_title (test, "install package");
+	package_ids = g_strsplit ("glib2;2.14.0;i386;fedora", ",", -1);
+	pk_service_pack_create_for_package_ids_async (pack, "dave.servicepack", package_ids, NULL, NULL,
+				        (PkProgressCallback) pk_service_pack_test_progress_cb, test,
+				        (GAsyncReadyCallback) pk_service_pack_test_create_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 (pack);
+
+	egg_test_end (test);
+}
+#endif
+
diff --git a/lib/packagekit-glib2/pk-service-pack.h b/lib/packagekit-glib2/pk-service-pack.h
new file mode 100644
index 0000000..836795a
--- /dev/null
+++ b/lib/packagekit-glib2/pk-service-pack.h
@@ -0,0 +1,117 @@
+/* -*- 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.
+ */
+
+#if !defined (__PACKAGEKIT_H_INSIDE__) && !defined (PK_COMPILATION)
+#error "Only <packagekit.h> can be included directly."
+#endif
+
+#ifndef __PK_SERVICE_PACK_H
+#define __PK_SERVICE_PACK_H
+
+#include <glib-object.h>
+#include <gio/gio.h>
+
+#include <packagekit-glib2/pk-service-pack.h>
+#include <packagekit-glib2/pk-progress.h>
+
+G_BEGIN_DECLS
+
+#define PK_TYPE_SERVICE_PACK		(pk_service_pack_get_type ())
+#define PK_SERVICE_PACK(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), PK_TYPE_SERVICE_PACK, PkServicePack))
+#define PK_SERVICE_PACK_CLASS(k)	(G_TYPE_CHECK_CLASS_CAST((k), PK_TYPE_SERVICE_PACK, PkServicePackClass))
+#define PK_IS_SERVICE_PACK(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), PK_TYPE_SERVICE_PACK))
+#define PK_IS_SERVICE_PACK_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), PK_TYPE_SERVICE_PACK))
+#define PK_SERVICE_PACK_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_SERVICE_PACK, PkServicePackClass))
+#define PK_SERVICE_PACK_ERROR	 	(pk_service_pack_error_quark ())
+#define PK_SERVICE_PACK_TYPE_ERROR	(pk_service_pack_error_get_type ())
+
+/* the file extension to a servicepack */
+#define PK_SERVICE_PACK_FILE_EXTENSION	"servicepack"
+
+typedef struct PkServicePackPrivate PkServicePackPrivate;
+
+typedef enum
+{
+	PK_SERVICE_PACK_ERROR_FAILED_SETUP,
+	PK_SERVICE_PACK_ERROR_FAILED_DOWNLOAD,
+	PK_SERVICE_PACK_ERROR_FAILED_EXTRACTION,
+	PK_SERVICE_PACK_ERROR_FAILED_CREATE,
+	PK_SERVICE_PACK_ERROR_NOTHING_TO_DO,
+	PK_SERVICE_PACK_ERROR_NOT_COMPATIBLE
+} PkServicePackError;
+
+typedef struct
+{
+	GObject			 parent;
+	PkServicePackPrivate	*priv;
+} PkServicePack;
+
+typedef struct
+{
+	GObjectClass	parent_class;
+	/* Padding for future expansion */
+	void (*_pk_reserved1) (void);
+	void (*_pk_reserved2) (void);
+	void (*_pk_reserved3) (void);
+	void (*_pk_reserved4) (void);
+} PkServicePackClass;
+
+GQuark		 pk_service_pack_error_quark		(void);
+GType		 pk_service_pack_error_get_type		(void);
+GType		 pk_service_pack_get_type		(void);
+PkServicePack	*pk_service_pack_new			(void);
+void		 pk_service_pack_test			(gpointer		 user_data);
+
+/* used by the server */
+gboolean	 pk_service_pack_check_valid		(PkServicePack		*pack,
+							 const gchar		*filename,
+							 GError			**error);
+
+/* used by clients */
+gboolean	 pk_service_pack_set_temp_directory	(PkServicePack		*pack,
+							 const gchar		*directory);
+
+gboolean	 pk_service_pack_generic_finish		(PkServicePack		*pack,
+							 GAsyncResult		*res,
+							 GError			**error);
+
+void		 pk_service_pack_create_for_package_ids_async (PkServicePack	*pack,
+							 const gchar		*filename,
+							 gchar			**package_ids,
+							 gchar			**package_ids_exclude,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GAsyncReadyCallback	 callback,
+							 gpointer		 user_data);
+void		 pk_service_pack_create_for_updates_async (PkServicePack	*pack,
+							 const gchar		*filename,
+							 gchar			**package_ids_exclude,
+							 GCancellable		*cancellable,
+							 PkProgressCallback	 progress_callback,
+							 gpointer		 progress_user_data,
+							 GAsyncReadyCallback	 callback,
+							 gpointer		 user_data);
+
+G_END_DECLS
+
+#endif /* __PK_SERVICE_PACK_H */
+


More information about the PackageKit-commit mailing list