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

Richard Hughes hughsient at kemper.freedesktop.org
Thu Apr 9 02:40:20 PDT 2009


 backends/apt/20packagekit                             |    1 
 backends/apt/Makefile.am                              |   21 
 backends/apt/aptbackend.py                            |  964 +++------
 backends/apt/pk-backend-apt.c                         |  450 +++-
 backends/apt/update-packagekit-app-data               |   44 
 backends/aptcc/.gitignore                             |    2 
 backends/dummy/pk-backend-dummy.c                     |   12 
 backends/test/Makefile.am                             |    6 
 backends/test/helpers/Makefile.am                     |    9 
 backends/test/helpers/PackageKitDbusTest.py           |  107 -
 backends/test/pk-backend-test-dbus.c                  |  114 -
 client/pk-console.c                                   |   14 
 configure.ac                                          |   25 
 contrib/Makefile.am                                   |    8 
 contrib/PackageKit.spec.in                            |    9 
 contrib/cron/.gitignore                               |    1 
 contrib/cron/Makefile.am                              |   11 
 contrib/cron/packagekit-background                    |   14 
 contrib/cron/packagekit-background.cron               |   43 
 contrib/pm-utils/95packagekit                         |   24 
 contrib/pm-utils/Makefile.am                          |   10 
 data/.gitignore                                       |    6 
 data/20packagekit                                     |    1 
 data/95packagekit                                     |   24 
 data/Makefile.am                                      |   52 
 data/job_count.dat                                    |    1 
 data/org.freedesktop.PackageKitAptBackend.conf.in     |   17 
 data/org.freedesktop.PackageKitAptBackend.service.in  |    5 
 data/org.freedesktop.PackageKitTestBackend.conf.in    |   15 
 data/org.freedesktop.PackageKitTestBackend.service.in |    5 
 data/packagekit-background                            |   14 
 data/packagekit-background.cron                       |   43 
 data/packagekit-glib.pc.in                            |   13 
 data/packagekit-qt.pc.in                              |   12 
 docs/api/PackageKit-docs.sgml                         |    1 
 lib/packagekit-glib/Makefile.am                       |    6 
 lib/packagekit-glib/packagekit-glib.pc.in             |   13 
 lib/packagekit-qt/Makefile.am                         |    6 
 lib/packagekit-qt/packagekit-qt.pc.in                 |   12 
 po/ta.po                                              | 1077 ++++++++++
 src/Makefile.am                                       |    2 
 src/pk-backend-dbus.c                                 | 1805 ------------------
 src/pk-backend-dbus.h                                 |  140 -
 src/pk-self-test.c                                    |    2 
 tools/add-method.sh                                   |    2 
 45 files changed, 1981 insertions(+), 3182 deletions(-)

New commits:
commit 2b61bce967b0e0f70ef478e8d13b6bd57a376704
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Apr 9 10:36:57 2009 +0100

    trivial: fix fedora build script

diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index dff6e51..66a9d66 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -237,7 +237,6 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/mozilla/plugins/packagekit-plugin.la
 rm -f $RPM_BUILD_ROOT%{_libdir}/gtk-2.0/modules/*.a
 rm -f $RPM_BUILD_ROOT%{_libdir}/gtk-2.0/modules/*.la
 
-chmod 755 $RPM_BUILD_ROOT%{_libexecdir}/PackageKitDbusTest.py
 touch $RPM_BUILD_ROOT%{_localstatedir}/cache/PackageKit/groups.sqlite
 
 # create a link that GStreamer will recognise
@@ -261,12 +260,6 @@ rm -rf $RPM_BUILD_ROOT
 %post
 update-mime-database %{_datadir}/mime &> /dev/null || :
 
-# the job count used to live in /var/run, but it's now in /var/lib with the
-# other persistent bits
-if [ -e %{_localstatedir}/run/PackageKit/job_count.dat ]; then
-	mv %{_localstatedir}/run/PackageKit/job_count.dat %{_localstatedir}/lib/PackageKit/job_count.dat
-fi
-
 %postun
 update-mime-database %{_datadir}/mime &> /dev/null || :
 
@@ -309,10 +302,8 @@ update-mime-database %{_datadir}/mime &> /dev/null || :
 %{_libdir}/packagekit-backend/libpk_backend_dummy.so
 %{_libdir}/packagekit-backend/libpk_backend_test_*.so
 %ghost %verify(not md5 size mtime) %{_localstatedir}/lib/PackageKit/transactions.db
-%ghost %verify(not md5 size mtime) %{_localstatedir}/lib/PackageKit/job_count.dat
 %{_datadir}/dbus-1/system-services/*.service
 %{_libdir}/pm-utils/sleep.d/95packagekit
-%{_libexecdir}/*py*
 
 %files docs
 %defattr(-,root,root,-)
commit 8662aa16bcd0d21e56c582dae62ab8c4a5bdaeb4
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Apr 9 10:15:02 2009 +0100

    trivial: fix the doc build

diff --git a/docs/api/PackageKit-docs.sgml b/docs/api/PackageKit-docs.sgml
index e724ce0..9846856 100644
--- a/docs/api/PackageKit-docs.sgml
+++ b/docs/api/PackageKit-docs.sgml
@@ -43,7 +43,6 @@
     <xi:include href="spec/pk-introduction.xml"/>
     <xi:include href="spec/pk-concepts.xml"/>
     <xi:include href="spec/pk-backend-compiled.xml"/>
-    <xi:include href="spec/pk-backend-dbus.xml"/>
     <xi:include href="spec/pk-backend-spawn.xml"/>
   </reference>
 
diff --git a/tools/add-method.sh b/tools/add-method.sh
index 040bba9..d2bd560 100755
--- a/tools/add-method.sh
+++ b/tools/add-method.sh
@@ -7,5 +7,5 @@
 # the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 
-$EDITOR docs/spec/pk-methods.xml src/org.freedesktop.PackageKit.Transaction.xml src/pk-transaction.h src/pk-transaction.c  python/packagekit/backend.py python/packagekit/daemonBackend.py libpackagekit/pk-client.h libpackagekit/pk-client.c  libpackagekit/pk-enum.h libpackagekit/pk-enum.c client/pk-console.c backends/*/pk-*.c* src/pk-backend-dbus.c src/pk-backend-dbus.h contrib/*.bash src/pk-engine.c src/pk-backend.h docs/html/pk-faq.html ../gnome-packagekit/src/gpk-common.c
+$EDITOR docs/spec/pk-methods.xml src/org.freedesktop.PackageKit.Transaction.xml src/pk-transaction.h src/pk-transaction.c  python/packagekit/backend.py python/packagekit/daemonBackend.py libpackagekit/pk-client.h libpackagekit/pk-client.c  libpackagekit/pk-enum.h libpackagekit/pk-enum.c client/pk-console.c backends/*/pk-*.c* contrib/*.bash src/pk-engine.c src/pk-backend.h docs/html/pk-faq.html ../gnome-packagekit/src/gpk-common.c
 
commit f2d613ee7c1befe0cc54a7813c41858cf44b0e90
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Apr 9 10:04:29 2009 +0100

    trivial: add .gitignore to aptcc

diff --git a/backends/aptcc/.gitignore b/backends/aptcc/.gitignore
new file mode 100644
index 0000000..8a8544c
--- /dev/null
+++ b/backends/aptcc/.gitignore
@@ -0,0 +1,2 @@
+.deps
+
commit 1eb76fc7b0b165d5180eb86ffd0d25deb1b47cdb
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Apr 9 10:03:50 2009 +0100

    trivial: remove obsolete option

diff --git a/configure.ac b/configure.ac
index 8f57792..329acb2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -800,7 +800,6 @@ echo "
         GIO support:               ${with_gio}
         Browser plugin:            ${build_browser_plugin}
         GStreamer plugin:          ${build_gstreamer_plugin}
-        Application install:       ${enable_app_install}
         Pango module:              ${build_gtk_module}
         BASH Command not found:    ${build_command_not_found}
         Cron scripts:              ${build_cron}
commit de3adda7c3a63563ee02f9118d79ccca606eb1c8
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Apr 9 10:03:20 2009 +0100

    trivial: move the pm-utils functionality out to an optional contrib directory

diff --git a/configure.ac b/configure.ac
index 5380d0f..8f57792 100644
--- a/configure.ac
+++ b/configure.ac
@@ -426,6 +426,13 @@ AC_ARG_ENABLE(cron, AS_HELP_STRING([--enable-cron],[Build cron background functi
 AM_CONDITIONAL(PK_BUILD_CRON, test $build_cron = "yes")
 
 dnl ---------------------------------------------------------------------------
+dnl - Able to build pm-utils script functionality
+dnl ---------------------------------------------------------------------------
+AC_ARG_ENABLE(pm_utils, AS_HELP_STRING([--enable-pm-utils],[Build pm-utils script functionality]),
+	      build_pm_utils=$enableval,build_pm_utils=yes)
+AM_CONDITIONAL(PK_BUILD_PM_UTILS, test $build_pm_utils = "yes")
+
+dnl ---------------------------------------------------------------------------
 dnl - Build ruck (a rug-like interface for PackageKit)
 dnl ---------------------------------------------------------------------------
 AC_ARG_ENABLE(ruck, AS_HELP_STRING([--enable-ruck],[Build ruck client]),
@@ -729,6 +736,7 @@ contrib/gtk-module/Makefile
 contrib/yum-packagekit/Makefile
 contrib/command-not-found/Makefile
 contrib/cron/Makefile
+contrib/pm-utils/Makefile
 contrib/ruck/Makefile
 contrib/ruck/src/Makefile
 backends/Makefile
@@ -796,6 +804,7 @@ echo "
         Pango module:              ${build_gtk_module}
         BASH Command not found:    ${build_command_not_found}
         Cron scripts:              ${build_cron}
+        pm-utils scripts:          ${build_pm_utils}
         RUCK client:               ${build_ruck}
         QT library:                ${build_qt}
 	Managed bindings:          ${build_managed}
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
index 6e642ab..e9f6ae0 100644
--- a/contrib/Makefile.am
+++ b/contrib/Makefile.am
@@ -28,6 +28,10 @@ if PK_BUILD_CRON
 SUBDIRS += cron
 endif
 
+if PK_BUILD_PM_UTILS
+SUBDIRS += pm-utils
+endif
+
 bashcompletiondir = ${SYSCONFDIR}/bash_completion.d
 dist_bashcompletion_DATA = pk-completion.bash
 
diff --git a/contrib/pm-utils/95packagekit b/contrib/pm-utils/95packagekit
new file mode 100755
index 0000000..407cd1a
--- /dev/null
+++ b/contrib/pm-utils/95packagekit
@@ -0,0 +1,24 @@
+#!/bin/bash
+# Copyright (C) 2007-2008 Richard Hughes <richard at hughsie.com>
+#
+# Licensed under the GNU General Public License Version 2
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+case "$1" in
+	thaw|resume)
+		# get PackageKit to invalidate its caches and get new updates
+		dbus-send --system --dest=org.freedesktop.PackageKit \
+			  --type=method_call --print-reply \
+			  /org/freedesktop/PackageKit \
+			  org.freedesktop.PackageKit.StateHasChanged \
+			  string:'resume'
+		;;
+	*)
+		;;
+esac
+
+exit $?
+
diff --git a/contrib/pm-utils/Makefile.am b/contrib/pm-utils/Makefile.am
new file mode 100644
index 0000000..919b135
--- /dev/null
+++ b/contrib/pm-utils/Makefile.am
@@ -0,0 +1,10 @@
+pmutilsdir = $(libdir)/pm-utils/sleep.d
+pmutils_DATA = 95packagekit
+
+EXTRA_DIST =						\
+	95packagekit					\
+	$(NULL)
+
+install-data-hook:
+	chmod a+x $(DESTDIR)$(libdir)/pm-utils/sleep.d/95packagekit;
+
diff --git a/data/95packagekit b/data/95packagekit
deleted file mode 100755
index 407cd1a..0000000
--- a/data/95packagekit
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-# Copyright (C) 2007-2008 Richard Hughes <richard at hughsie.com>
-#
-# Licensed under the GNU General Public License Version 2
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-
-case "$1" in
-	thaw|resume)
-		# get PackageKit to invalidate its caches and get new updates
-		dbus-send --system --dest=org.freedesktop.PackageKit \
-			  --type=method_call --print-reply \
-			  /org/freedesktop/PackageKit \
-			  org.freedesktop.PackageKit.StateHasChanged \
-			  string:'resume'
-		;;
-	*)
-		;;
-esac
-
-exit $?
-
diff --git a/data/Makefile.am b/data/Makefile.am
index c053231..ac88c9b 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -7,9 +7,6 @@ SUBDIRS = 						\
 	tests						\
 	$(NULL)
 
-pmutilsdir = $(libdir)/pm-utils/sleep.d
-pmutils_DATA = 95packagekit
-
 upgradescriptdir = $(datadir)/PackageKit
 upgradescript_SCRIPTS = pk-upgrade-distro.sh
 
@@ -39,7 +36,6 @@ database_DATA =						\
 	$(NULL)
 
 EXTRA_DIST =						\
-	95packagekit					\
 	org.freedesktop.PackageKit.conf.in		\
 	$(servicemain_in_files)				\
 	$(servicetest_in_files)				\
@@ -53,9 +49,6 @@ EXTRA_DIST =						\
 clean-local:
 	rm -f *~
 
-install-data-hook:
-	chmod a+x $(DESTDIR)$(libdir)/pm-utils/sleep.d/95packagekit;
-
 DISTCLEANFILES =					\
 	$(mime_DATA)					\
 	org.freedesktop.PackageKit.service		\
commit aa70f40f1b75c1d917662b52a33cd285ad9089d0
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Apr 9 09:58:00 2009 +0100

    trivial: move the cron scripts out to an optional cron contrib directory

diff --git a/configure.ac b/configure.ac
index b8acb3b..5380d0f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -419,6 +419,13 @@ AC_ARG_ENABLE(command_not_found, AS_HELP_STRING([--enable-command-not-found],[Bu
 AM_CONDITIONAL(PK_BUILD_COMMAND_NOT_FOUND, test $build_command_not_found = "yes")
 
 dnl ---------------------------------------------------------------------------
+dnl - Able to build cron background functionality
+dnl ---------------------------------------------------------------------------
+AC_ARG_ENABLE(cron, AS_HELP_STRING([--enable-cron],[Build cron background functionality]),
+	      build_cron=$enableval,build_cron=yes)
+AM_CONDITIONAL(PK_BUILD_CRON, test $build_cron = "yes")
+
+dnl ---------------------------------------------------------------------------
 dnl - Build ruck (a rug-like interface for PackageKit)
 dnl ---------------------------------------------------------------------------
 AC_ARG_ENABLE(ruck, AS_HELP_STRING([--enable-ruck],[Build ruck client]),
@@ -721,6 +728,7 @@ contrib/gstreamer-plugin/Makefile
 contrib/gtk-module/Makefile
 contrib/yum-packagekit/Makefile
 contrib/command-not-found/Makefile
+contrib/cron/Makefile
 contrib/ruck/Makefile
 contrib/ruck/src/Makefile
 backends/Makefile
@@ -787,6 +795,7 @@ echo "
         Application install:       ${enable_app_install}
         Pango module:              ${build_gtk_module}
         BASH Command not found:    ${build_command_not_found}
+        Cron scripts:              ${build_cron}
         RUCK client:               ${build_ruck}
         QT library:                ${build_qt}
 	Managed bindings:          ${build_managed}
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
index 4e47d70..6e642ab 100644
--- a/contrib/Makefile.am
+++ b/contrib/Makefile.am
@@ -24,6 +24,10 @@ if PK_BUILD_COMMAND_NOT_FOUND
 SUBDIRS += command-not-found
 endif
 
+if PK_BUILD_CRON
+SUBDIRS += cron
+endif
+
 bashcompletiondir = ${SYSCONFDIR}/bash_completion.d
 dist_bashcompletion_DATA = pk-completion.bash
 
diff --git a/contrib/cron/.gitignore b/contrib/cron/.gitignore
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/contrib/cron/.gitignore
@@ -0,0 +1 @@
+
diff --git a/contrib/cron/Makefile.am b/contrib/cron/Makefile.am
new file mode 100644
index 0000000..42ab26b
--- /dev/null
+++ b/contrib/cron/Makefile.am
@@ -0,0 +1,11 @@
+cronfiledir = ${SYSCONFDIR}/cron.daily
+cronfile_SCRIPTS = packagekit-background.cron
+
+crondatadir = ${SYSCONFDIR}/sysconfig
+crondata_SCRIPTS = packagekit-background
+
+EXTRA_DIST =						\
+	packagekit-background				\
+	packagekit-background.cron			\
+	$(NULL)
+
diff --git a/contrib/cron/packagekit-background b/contrib/cron/packagekit-background
new file mode 100755
index 0000000..0a9b845
--- /dev/null
+++ b/contrib/cron/packagekit-background
@@ -0,0 +1,14 @@
+# should we attempt to do this? (valid: yes|no)
+ENABLED=no
+
+# don't install, just check (valid: yes|no)
+CHECK_ONLY=no
+
+# if MAILTO is set, the mail command is used to deliver PackageKit output
+# by default MAILTO is unset, so crond mails the output by itself
+#MAILTO=root
+
+# you may set SYSTEMNAME if you want your PackageKit emails tagged differently
+# default is output of hostname command
+#SYSTEM_NAME=""
+
diff --git a/contrib/cron/packagekit-background.cron b/contrib/cron/packagekit-background.cron
new file mode 100755
index 0000000..c39084e
--- /dev/null
+++ b/contrib/cron/packagekit-background.cron
@@ -0,0 +1,43 @@
+#!/bin/sh
+# Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
+#
+# Some material taken from yum-cron, Copyright 2007 Alec Habig <ahabig at umn.edu>
+#
+# 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.
+
+[ -f /etc/sysconfig/packagekit-background ] && . /etc/sysconfig/packagekit-background
+
+# are we disabled?
+if [ "$ENABLED" == "no" ]; then
+	exit 1
+fi
+
+# set default for SYSTEMNAME
+[ -z "$SYSTEMNAME" ]  && SYSTEMNAME=$(hostname)
+
+PKTMP=$(mktemp /var/run/packagekit-cron.XXXXXX)
+
+# wait a random amount of time to avoid hammering the servers
+sleep $RANDOM
+
+# do action
+if [ "$CHECK_ONLY" == "yes" ]; then
+	pkcon get-updates > $PKTMP
+else
+	pkcon update > $PKTMP
+fi
+
+# send email
+if [ -n "$MAILTO" ]; then
+	mail -s "System updates available: $SYSTEMNAME" $MAILTO < $PKTMP
+else
+	# default behavior is to use cron's internal mailing of output from cron-script
+	cat $PKTMP
+fi
+
+rm -f $PKTMP
+
diff --git a/data/.gitignore b/data/.gitignore
index 007ccb3..e16ddd1 100644
--- a/data/.gitignore
+++ b/data/.gitignore
@@ -1,9 +1,3 @@
 org.freedesktop.PackageKit.service
-org.freedesktop.PackageKitTestBackend.conf
-org.freedesktop.PackageKitTestBackend.service
-org.freedesktop.PackageKitYumBackend.conf
-org.freedesktop.PackageKitYumBackend.service
-org.freedesktop.PackageKitAptBackend.conf
-org.freedesktop.PackageKitAptBackend.service
 packagekit-*.xml
 
diff --git a/data/Makefile.am b/data/Makefile.am
index 25463a0..c053231 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -7,12 +7,6 @@ SUBDIRS = 						\
 	tests						\
 	$(NULL)
 
-cronfiledir = ${SYSCONFDIR}/cron.daily
-cronfile_SCRIPTS = packagekit-background.cron
-
-crondatadir = ${SYSCONFDIR}/sysconfig
-crondata_SCRIPTS = packagekit-background
-
 pmutilsdir = $(libdir)/pm-utils/sleep.d
 pmutils_DATA = 95packagekit
 
@@ -46,8 +40,6 @@ database_DATA =						\
 
 EXTRA_DIST =						\
 	95packagekit					\
-	packagekit-background				\
-	packagekit-background.cron			\
 	org.freedesktop.PackageKit.conf.in		\
 	$(servicemain_in_files)				\
 	$(servicetest_in_files)				\
diff --git a/data/packagekit-background b/data/packagekit-background
deleted file mode 100755
index 0a9b845..0000000
--- a/data/packagekit-background
+++ /dev/null
@@ -1,14 +0,0 @@
-# should we attempt to do this? (valid: yes|no)
-ENABLED=no
-
-# don't install, just check (valid: yes|no)
-CHECK_ONLY=no
-
-# if MAILTO is set, the mail command is used to deliver PackageKit output
-# by default MAILTO is unset, so crond mails the output by itself
-#MAILTO=root
-
-# you may set SYSTEMNAME if you want your PackageKit emails tagged differently
-# default is output of hostname command
-#SYSTEM_NAME=""
-
diff --git a/data/packagekit-background.cron b/data/packagekit-background.cron
deleted file mode 100755
index c39084e..0000000
--- a/data/packagekit-background.cron
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/sh
-# Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
-#
-# Some material taken from yum-cron, Copyright 2007 Alec Habig <ahabig at umn.edu>
-#
-# 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.
-
-[ -f /etc/sysconfig/packagekit-background ] && . /etc/sysconfig/packagekit-background
-
-# are we disabled?
-if [ "$ENABLED" == "no" ]; then
-	exit 1
-fi
-
-# set default for SYSTEMNAME
-[ -z "$SYSTEMNAME" ]  && SYSTEMNAME=$(hostname)
-
-PKTMP=$(mktemp /var/run/packagekit-cron.XXXXXX)
-
-# wait a random amount of time to avoid hammering the servers
-sleep $RANDOM
-
-# do action
-if [ "$CHECK_ONLY" == "yes" ]; then
-	pkcon get-updates > $PKTMP
-else
-	pkcon update > $PKTMP
-fi
-
-# send email
-if [ -n "$MAILTO" ]; then
-	mail -s "System updates available: $SYSTEMNAME" $MAILTO < $PKTMP
-else
-	# default behavior is to use cron's internal mailing of output from cron-script
-	cat $PKTMP
-fi
-
-rm -f $PKTMP
-
commit bc56f279904e06a7d055c26aa252a5c185cf9a69
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Apr 9 09:51:25 2009 +0100

    trivial: move the apt-specific 20packagekit to the apt backend directory

diff --git a/backends/apt/20packagekit b/backends/apt/20packagekit
new file mode 100644
index 0000000..3b6478c
--- /dev/null
+++ b/backends/apt/20packagekit
@@ -0,0 +1 @@
+APT::Update::Post-Invoke-Success { "/usr/bin/dbus-send --system --dest=org.freedesktop.PackageKit --type=method_call /org/freedesktop/PackageKit org.freedesktop.PackageKit.StateHasChanged string:'cache-update'"; };
diff --git a/backends/apt/Makefile.am b/backends/apt/Makefile.am
index 54d0a87..476663a 100644
--- a/backends/apt/Makefile.am
+++ b/backends/apt/Makefile.am
@@ -5,6 +5,9 @@ libpk_backend_apt_la_LIBADD = $(PK_PLUGIN_LIBS)
 libpk_backend_apt_la_LDFLAGS = -module -avoid-version
 libpk_backend_apt_la_CFLAGS = $(PK_PLUGIN_CFLAGS) $(WARNINGFLAGS_C)
 
+aptconfdir = ${SYSCONFDIR}/apt/apt.conf.d
+aptconf_DATA = 20packagekit
+
 helperdir = $(datadir)/PackageKit/helpers/apt
 dist_helper_DATA =                      
 	pk-backend-apt.py				\
@@ -20,6 +23,7 @@ sbin_SCRIPTS =						\
 	$(NULL)
 
 EXTRA_DIST =						\
+	20packagekit					\
 	update-packagekit-app-data			\
 	$(NULL)
 
diff --git a/data/20packagekit b/data/20packagekit
deleted file mode 100644
index 3b6478c..0000000
--- a/data/20packagekit
+++ /dev/null
@@ -1 +0,0 @@
-APT::Update::Post-Invoke-Success { "/usr/bin/dbus-send --system --dest=org.freedesktop.PackageKit --type=method_call /org/freedesktop/PackageKit org.freedesktop.PackageKit.StateHasChanged string:'cache-update'"; };
diff --git a/data/Makefile.am b/data/Makefile.am
index b2522ce..25463a0 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -19,11 +19,6 @@ pmutils_DATA = 95packagekit
 upgradescriptdir = $(datadir)/PackageKit
 upgradescript_SCRIPTS = pk-upgrade-distro.sh
 
-if BACKEND_TYPE_APT
-aptconfdir = ${SYSCONFDIR}/apt/apt.conf.d
-aptconf_DATA = 20packagekit
-endif
-
 @INTLTOOL_XML_RULE@
 mimedir = $(datadir)/mime/packages
 mime_in_files = 					\
@@ -54,7 +49,6 @@ EXTRA_DIST =						\
 	packagekit-background				\
 	packagekit-background.cron			\
 	org.freedesktop.PackageKit.conf.in		\
-	20packagekit					\
 	$(servicemain_in_files)				\
 	$(servicetest_in_files)				\
 	$(serviceapt_in_files)				\
commit fa9c0463d10e14ee059bc5f68eee1e1b6b409f7c
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Apr 9 09:48:06 2009 +0100

    trivial: move the pkgconfig files to thier respective library locations

diff --git a/configure.ac b/configure.ac
index 151c19e..b8acb3b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -744,16 +744,16 @@ backends/pisi/Makefile
 backends/poldek/Makefile
 backends/zypp/Makefile
 data/Makefile
-data/packagekit-glib.pc
-data/packagekit-qt.pc
 data/org.freedesktop.PackageKit.conf
 data/tests/Makefile
 lib/Makefile
 lib/packagekit-glib/Makefile
+lib/packagekit-glib/packagekit-glib.pc
 lib/packagekit-qt/Makefile
 lib/packagekit-qt/modules/Makefile
 lib/packagekit-qt/src/Makefile
 lib/packagekit-qt/test/Makefile
+lib/packagekit-qt/packagekit-qt.pc
 lib/packagekit-sharp/Makefile
 lib/packagekit-sharp/samples/Makefile
 lib/python/Makefile
diff --git a/data/Makefile.am b/data/Makefile.am
index 550b0ff..b2522ce 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -7,12 +7,6 @@ SUBDIRS = 						\
 	tests						\
 	$(NULL)
 
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = 					\
-	packagekit-glib.pc				\
-	packagekit-qt.pc				\
-	$(NULL)
-
 cronfiledir = ${SYSCONFDIR}/cron.daily
 cronfile_SCRIPTS = packagekit-background.cron
 
@@ -60,8 +54,6 @@ EXTRA_DIST =						\
 	packagekit-background				\
 	packagekit-background.cron			\
 	org.freedesktop.PackageKit.conf.in		\
-	packagekit-glib.pc.in				\
-	packagekit-qt.pc.in				\
 	20packagekit					\
 	$(servicemain_in_files)				\
 	$(servicetest_in_files)				\
diff --git a/data/packagekit-glib.pc.in b/data/packagekit-glib.pc.in
deleted file mode 100644
index 4857ed2..0000000
--- a/data/packagekit-glib.pc.in
+++ /dev/null
@@ -1,13 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: packagekit-glib
-Description: PackageKit is a system daemon for installing stuff.
-Version: @VERSION@
-Requires.private: dbus-1, gthread-2.0
-Requires: glib-2.0, gobject-2.0, sqlite3
-Libs: -L${libdir} -lpackagekit-glib
-Cflags: -I${includedir}/PackageKit
-
diff --git a/data/packagekit-qt.pc.in b/data/packagekit-qt.pc.in
deleted file mode 100644
index 384a7ef..0000000
--- a/data/packagekit-qt.pc.in
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: packagekit-qt
-Description: PackageKit is a system daemon for installing stuff.
-Version: @VERSION@
-Requires: QtCore, QtDBus, QtGui, QtSql, QtXml
-Libs: -L${libdir} -lpackagekit-qt
-Cflags: -I${includedir}/PackageKit/packagekit-qt
-
diff --git a/lib/packagekit-glib/Makefile.am b/lib/packagekit-glib/Makefile.am
index aa458c6..d32b1cc 100644
--- a/lib/packagekit-glib/Makefile.am
+++ b/lib/packagekit-glib/Makefile.am
@@ -20,6 +20,11 @@ INCLUDES = \
 	-DPACKAGE_DATA_DIR=\""$(datadir)"\"			\
 	-DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\"
 
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = 						\
+	packagekit-glib.pc					\
+	$(NULL)
+
 lib_LTLIBRARIES =						\
 	libpackagekit-glib.la					\
 	$(NULL)
@@ -145,6 +150,7 @@ TESTS = pk-self-test
 endif
 
 EXTRA_DIST =							\
+	packagekit-glib.pc.in					\
 	pk-marshal.list
 
 BUILT_SOURCES = 						\
diff --git a/lib/packagekit-glib/packagekit-glib.pc.in b/lib/packagekit-glib/packagekit-glib.pc.in
new file mode 100644
index 0000000..4857ed2
--- /dev/null
+++ b/lib/packagekit-glib/packagekit-glib.pc.in
@@ -0,0 +1,13 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: packagekit-glib
+Description: PackageKit is a system daemon for installing stuff.
+Version: @VERSION@
+Requires.private: dbus-1, gthread-2.0
+Requires: glib-2.0, gobject-2.0, sqlite3
+Libs: -L${libdir} -lpackagekit-glib
+Cflags: -I${includedir}/PackageKit
+
diff --git a/lib/packagekit-qt/Makefile.am b/lib/packagekit-qt/Makefile.am
index d7de443..e4b4c1b 100644
--- a/lib/packagekit-qt/Makefile.am
+++ b/lib/packagekit-qt/Makefile.am
@@ -1,6 +1,12 @@
 SUBDIRS = modules src test
 
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = 					\
+	packagekit-qt.pc				\
+	$(NULL)
+
 EXTRA_DIST =						\
+	packagekit-qt.pc.in				\
 	CMakeLists.txt					\
 	Doxyfile
 
diff --git a/lib/packagekit-qt/packagekit-qt.pc.in b/lib/packagekit-qt/packagekit-qt.pc.in
new file mode 100644
index 0000000..384a7ef
--- /dev/null
+++ b/lib/packagekit-qt/packagekit-qt.pc.in
@@ -0,0 +1,12 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: packagekit-qt
+Description: PackageKit is a system daemon for installing stuff.
+Version: @VERSION@
+Requires: QtCore, QtDBus, QtGui, QtSql, QtXml
+Libs: -L${libdir} -lpackagekit-qt
+Cflags: -I${includedir}/PackageKit/packagekit-qt
+
commit 1664c0d17dec17b88a6e75c0f08b184859a05e58
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Apr 9 09:38:52 2009 +0100

    feature: remove job_count.dat, it's not used anymore since switching to the sqlite db

diff --git a/data/Makefile.am b/data/Makefile.am
index 7a8bc00..550b0ff 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -50,11 +50,6 @@ servicemain_DATA     = $(servicemain_in_files:.service.in=.service)
 $(servicemain_DATA): $(servicemain_in_files) Makefile
 	@sed -e "s|\@servicedir\@|$(sbindir)|" -e "s|\@PACKAGEKIT_USER\@|$(PACKAGEKIT_USER)|" $< > $@
 
-localcachedir = $(localstatedir)/lib/PackageKit
-localcache_DATA =					\
-	job_count.dat					\
-	$(NULL)
-
 databasedir = $(PK_DB_DIR)
 database_DATA =						\
 	transactions.db					\
diff --git a/data/job_count.dat b/data/job_count.dat
deleted file mode 100644
index 573541a..0000000
--- a/data/job_count.dat
+++ /dev/null
@@ -1 +0,0 @@
-0
commit b939d88bce372aa5ef451dd22188134a100e7273
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Apr 9 09:36:59 2009 +0100

    feature: remove the DBus backend. The only user (apt) has switched to spawned, and the unit tests have been broken for months

diff --git a/backends/test/Makefile.am b/backends/test/Makefile.am
index 04e97fa..9ecb656 100644
--- a/backends/test/Makefile.am
+++ b/backends/test/Makefile.am
@@ -1,18 +1,12 @@
 SUBDIRS = helpers
 plugindir = $(PK_PLUGIN_DIR)
 plugin_LTLIBRARIES =			\
-	libpk_backend_test_dbus.la	\
 	libpk_backend_test_nop.la	\
 	libpk_backend_test_fail.la	\
 	libpk_backend_test_spawn.la	\
 	libpk_backend_test_succeed.la	\
 	libpk_backend_test_thread.la
 
-libpk_backend_test_dbus_la_SOURCES = pk-backend-test-dbus.c
-libpk_backend_test_dbus_la_LIBADD = $(PK_PLUGIN_LIBS)
-libpk_backend_test_dbus_la_LDFLAGS = -module -avoid-version
-libpk_backend_test_dbus_la_CFLAGS = $(PK_PLUGIN_CFLAGS) $(WARNINGFLAGS_C)
-
 libpk_backend_test_nop_la_SOURCES = pk-backend-test-nop.c
 libpk_backend_test_nop_la_LIBADD = $(PK_PLUGIN_LIBS)
 libpk_backend_test_nop_la_LDFLAGS = -module -avoid-version
diff --git a/backends/test/helpers/Makefile.am b/backends/test/helpers/Makefile.am
index ba1c5d5..9083724 100644
--- a/backends/test/helpers/Makefile.am
+++ b/backends/test/helpers/Makefile.am
@@ -3,19 +3,10 @@ helperdir = $(datadir)/PackageKit/helpers/test_spawn
 
 NULL =
 
-dbusinstancedir = $(LIBEXECDIR)
-dbusinstance_DATA =					\
-	PackageKitDbusTest.py				\
-	$(NULL)
-
 dist_helper_DATA = 					\
 	search-name.sh					\
 	$(NULL)
 
-EXTRA_DIST =						\
-	$(dbusinstance_DATA)				\
-	$(NULL)
-
 install-data-hook:
 	chmod a+rx $(DESTDIR)$(helperdir)/*.sh
 
diff --git a/backends/test/helpers/PackageKitDbusTest.py b/backends/test/helpers/PackageKitDbusTest.py
deleted file mode 100755
index 54844a4..0000000
--- a/backends/test/helpers/PackageKitDbusTest.py
+++ /dev/null
@@ -1,107 +0,0 @@
-#!/usr/bin/python
-
-# 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.
-
-import os
-import sys
-import threading
-
-import dbus
-import dbus.glib
-import dbus.service
-import gobject
-from packagekit.enums import *
-import time
-import signal
-
-# This is common between backends
-from packagekit.daemonBackend import PACKAGEKIT_DBUS_INTERFACE, PACKAGEKIT_DBUS_PATH
-from packagekit.daemonBackend import PackageKitBaseBackend
-from packagekit.daemonBackend import pklog
-
-PACKAGEKIT_DBUS_SERVICE = 'org.freedesktop.PackageKitTestBackend'
-
-#sudo dbus-send --system --dest=org.freedesktop.PackageKitTestBackend --type=method_call --print-reply /org/freedesktop/PackageKitBackend org.freedesktop.PackageKitBackend.SearchName string:filter string:search
-
-# Setup threading support
-gobject.threads_init()
-dbus.glib.threads_init()
-
-def sigquit(signum, frame):
-    print >> sys.stderr, "Quit signal sent - exiting immediately"
-
-    sys.exit(1)
-
-class PackageKitTestBackendService(PackageKitBaseBackend):
-    def threaded(func):
-        '''
-        Decorator to run a method in a separate thread
-        '''
-        def wrapper(*args, **kwargs):
-            thread = threading.Thread(target=func, args=args, kwargs=kwargs)
-            thread.setDaemon(True)
-            thread.start()
-        wrapper.__name__ = func.__name__
-        return wrapper
-
-    def __init__(self, bus_name, bus_path):
-        signal.signal(signal.SIGQUIT, sigquit)
-
-        self.bus_name = bus_name
-        self.bus_path = bus_path
-        self._canceled = threading.Event()
-        PackageKitBaseBackend.__init__(self, bus_name, bus_path)
-
-    @threaded
-    def doInit(self):
-        pklog.info('Init!')
-        time.sleep(0.1)
-
-    def doExit(self):
-        pklog.info('Exit requested!')
-        time.sleep(0.1)
-
-    @threaded
-    def doCancel(self):
-        pklog.info('Cancel!')
-        self.StatusChanged(STATUS_CANCEL)
-        self._canceled.set()
-        self._canceled.wait()
-        pklog.debug('Cancel was successful!')
-
-    @threaded
-    def doSearchName(self, filters, search):
-        pklog.info("SearchName (%s, %s)" % (filters, search))
-        self.AllowCancel(True)
-        self.StatusChanged(STATUS_QUERY)
-        for id,desc in [("foo;0.0.1;i398;fedora", "Foo"),
-                        ("foo-doc;0.0.1;i398;fedora", "Foo documentation"),
-                        ("foo-devel;0.0.1;i398;fedora", "Foo build files")]:
-            if self._canceled.isSet():
-                self.ErrorCode(ERROR_TRANSACTION_CANCELLED,
-                               "Search was canceled")
-                self.Finished(EXIT_KILLED)
-                self._canceled.clear()
-                return
-            time.sleep(1)
-            self.Package(INFO_AVAILABLE, id, desc)
-        self.Finished(EXIT_SUCCESS)
-        self.AllowCancel(False)
-
-def main():
-    bus = dbus.SystemBus()
-    bus_name = dbus.service.BusName(PACKAGEKIT_DBUS_SERVICE, bus=bus)
-    manager = PackageKitTestBackendService(bus_name, PACKAGEKIT_DBUS_PATH)
-
-    mainloop = gobject.MainLoop()
-    mainloop.run()
-
-if __name__ == "__main__":
-    main()
diff --git a/backends/test/pk-backend-test-dbus.c b/backends/test/pk-backend-test-dbus.c
deleted file mode 100644
index 0dad5dc..0000000
--- a/backends/test/pk-backend-test-dbus.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007-2008 Richard Hughes <richard at hughsie.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include <gmodule.h>
-#include <glib.h>
-#include <string.h>
-#include <packagekit-glib/packagekit.h>
-#include <pk-backend.h>
-#include <pk-backend-dbus.h>
-
-static PkBackendDbus *dbus;
-
-#define PK_DBUS_BACKEND_SERVICE_TEST	"org.freedesktop.PackageKitTestBackend"
-
-/**
- * backend_search_name:
- */
-static void
-backend_search_name (PkBackend *backend, PkBitfield filters, const gchar *search)
-{
-	pk_backend_set_allow_cancel (backend, TRUE);
-	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
-	pk_backend_dbus_search_name (dbus, filters, search);
-}
-
-/**
- * pk_backend_cancel:
- */
-static void
-backend_cancel (PkBackend *backend)
-{
-	pk_backend_dbus_cancel (dbus);
-}
-
-/**
- * backend_initialize:
- * This should only be run once per backend load, i.e. not every transaction
- */
-static void
-backend_initialize (PkBackend *backend)
-{
-	egg_debug ("backend: initialize");
-	dbus = pk_backend_dbus_new ();
-	pk_backend_dbus_set_name (dbus, PK_DBUS_BACKEND_SERVICE_TEST);
-}
-
-/**
- * backend_destroy:
- * This should only be run once per backend load, i.e. not every transaction
- */
-static void
-backend_destroy (PkBackend *backend)
-{
-	egg_debug ("backend: destroy");
-	pk_backend_dbus_kill (dbus);
-	g_object_unref (dbus);
-}
-
-PK_BACKEND_OPTIONS (
-	"Test Dbus",				/* description */
-	"Richard Hughes <richard at hughsie.com>",	/* author */
-	backend_initialize,			/* initalize */
-	backend_destroy,			/* destroy */
-	NULL,					/* get_groups */
-	NULL,					/* get_filters */
-	NULL,					/* get_mime_types */
-	backend_cancel,				/* cancel */
-	NULL,					/* download_packages */
-	NULL,					/* get_categories */
-	NULL,					/* get_depends */
-	NULL,					/* get_details */
-	NULL,					/* get_distro_upgrades */
-	NULL,					/* get_files */
-	NULL,					/* get_packages */
-	NULL,					/* get_repo_list */
-	NULL,					/* get_requires */
-	NULL,					/* get_update_detail */
-	NULL,					/* get_updates */
-	NULL,					/* install_files */
-	NULL,					/* install_packages */
-	NULL,					/* install_signature */
-	NULL,					/* refresh_cache */
-	NULL,					/* remove_packages */
-	NULL,					/* repo_enable */
-	NULL,					/* repo_set_data */
-	NULL,					/* resolve */
-	NULL,					/* rollback */
-	NULL,					/* search_details */
-	NULL,					/* search_file */
-	NULL,					/* search_group */
-	backend_search_name,			/* search_name */
-	NULL,					/* update_packages */
-	NULL,					/* update_system */
-	NULL					/* what_provides */
-);
-
diff --git a/configure.ac b/configure.ac
index be51153..151c19e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -747,8 +747,6 @@ data/Makefile
 data/packagekit-glib.pc
 data/packagekit-qt.pc
 data/org.freedesktop.PackageKit.conf
-data/org.freedesktop.PackageKitTestBackend.conf
-data/org.freedesktop.PackageKitAptBackend.conf
 data/tests/Makefile
 lib/Makefile
 lib/packagekit-glib/Makefile
diff --git a/data/Makefile.am b/data/Makefile.am
index 8aa831d..7a8bc00 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -42,8 +42,6 @@ mime_DATA = $(mime_in_files:.xml.in=.xml)
 dbusdir = ${SYSCONFDIR}/dbus-1/system.d
 dist_dbus_DATA = 					\
 	org.freedesktop.PackageKit.conf			\
-	org.freedesktop.PackageKitTestBackend.conf	\
-	org.freedesktop.PackageKitAptBackend.conf	\
 	$(NULL)
 
 servicemaindir       = $(DBUS_SERVICES_DIR)
@@ -52,18 +50,6 @@ servicemain_DATA     = $(servicemain_in_files:.service.in=.service)
 $(servicemain_DATA): $(servicemain_in_files) Makefile
 	@sed -e "s|\@servicedir\@|$(sbindir)|" -e "s|\@PACKAGEKIT_USER\@|$(PACKAGEKIT_USER)|" $< > $@
 
-servicetestdir       = $(DBUS_SERVICES_DIR)
-servicetest_in_files = org.freedesktop.PackageKitTestBackend.service.in
-servicetest_DATA     = $(servicetest_in_files:.service.in=.service)
-$(servicetest_DATA): $(servicetest_in_files) Makefile
-	@sed -e "s|\@servicedir\@|$(libexecdir)|" -e "s|\@PK_BACKEND_USER\@|$(PK_BACKEND_USER)|" $< > $@
-
-serviceaptdir       = $(DBUS_SERVICES_DIR)
-serviceapt_in_files = org.freedesktop.PackageKitAptBackend.service.in
-serviceapt_DATA     = $(serviceapt_in_files:.service.in=.service)
-$(serviceapt_DATA): $(serviceapt_in_files) Makefile
-	@sed -e "s|\@servicedir\@|$(libexecdir)|" -e "s|\@PK_BACKEND_USER\@|$(PK_BACKEND_USER)|" $< > $@
-
 localcachedir = $(localstatedir)/lib/PackageKit
 localcache_DATA =					\
 	job_count.dat					\
@@ -79,8 +65,6 @@ EXTRA_DIST =						\
 	packagekit-background				\
 	packagekit-background.cron			\
 	org.freedesktop.PackageKit.conf.in		\
-	org.freedesktop.PackageKitTestBackend.conf.in	\
-	org.freedesktop.PackageKitAptBackend.conf.in	\
 	packagekit-glib.pc.in				\
 	packagekit-qt.pc.in				\
 	20packagekit					\
@@ -102,8 +86,6 @@ install-data-hook:
 DISTCLEANFILES =					\
 	$(mime_DATA)					\
 	org.freedesktop.PackageKit.service		\
-	org.freedesktop.PackageKitTestBackend.service	\
-	org.freedesktop.PackageKitAptBackend.service	\
 	$(NULL)
 
 MAINTAINERCLEANFILES =					\
diff --git a/data/org.freedesktop.PackageKitAptBackend.conf.in b/data/org.freedesktop.PackageKitAptBackend.conf.in
deleted file mode 100644
index ec84fcf..0000000
--- a/data/org.freedesktop.PackageKitAptBackend.conf.in
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE busconfig PUBLIC
- "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
- "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-<busconfig>
-  <policy user="@PK_BACKEND_USER@">
-    <allow own="org.freedesktop.PackageKitAptBackend"/>
-    <allow send_destination="org.freedesktop.PackageKitAptBackend"
-           send_interface="org.freedesktop.PackageKitBackend"/>
-  </policy>
-  <policy context="default">
-    <allow send_destination="org.freedesktop.PackageKitAptBackend"
-           send_interface="org.freedesktop.DBus.Properties"/>
-    <allow send_destination="org.freedesktop.PackageKitAptBackend"
-           send_interface="org.freedesktop.DBus.Introspectable"/>
-  </policy>
-</busconfig>
-
diff --git a/data/org.freedesktop.PackageKitAptBackend.service.in b/data/org.freedesktop.PackageKitAptBackend.service.in
deleted file mode 100644
index 9326019..0000000
--- a/data/org.freedesktop.PackageKitAptBackend.service.in
+++ /dev/null
@@ -1,5 +0,0 @@
-[D-BUS Service]
-Name=org.freedesktop.PackageKitAptBackend
-Exec=@servicedir@/pk-backend-apt.py
-User=@PK_BACKEND_USER@
-
diff --git a/data/org.freedesktop.PackageKitTestBackend.conf.in b/data/org.freedesktop.PackageKitTestBackend.conf.in
deleted file mode 100644
index 9047a07..0000000
--- a/data/org.freedesktop.PackageKitTestBackend.conf.in
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE busconfig PUBLIC
- "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
- "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-<busconfig>
-  <policy user="@PK_BACKEND_USER@">
-    <allow own="org.freedesktop.PackageKitTestBackend"/>
-    <allow send_destination="org.freedesktop.PackageKitTestBackend"/>
-    <allow send_interface="org.freedesktop.PackageKitBackend"/>
-  </policy>
-  <policy context="default">
-    <allow send_destination="org.freedesktop.PackageKitTestBackend"/>
-    <allow send_interface="org.freedesktop.PackageKitBackend"/>
-  </policy>
-</busconfig>
-
diff --git a/data/org.freedesktop.PackageKitTestBackend.service.in b/data/org.freedesktop.PackageKitTestBackend.service.in
deleted file mode 100644
index 5275d0f..0000000
--- a/data/org.freedesktop.PackageKitTestBackend.service.in
+++ /dev/null
@@ -1,5 +0,0 @@
-[D-BUS Service]
-Name=org.freedesktop.PackageKitTestBackend
-Exec=@servicedir@/PackageKitDbusTest.py
-User=@PK_BACKEND_USER@
-
diff --git a/src/Makefile.am b/src/Makefile.am
index 901296d..df696f6 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -90,8 +90,6 @@ shared_SOURCES =					\
 	pk-inhibit.c					\
 	pk-backend-spawn.h				\
 	pk-backend-spawn.c				\
-	pk-backend-dbus.h				\
-	pk-backend-dbus.c				\
 	pk-transaction-db.h				\
 	pk-transaction-db.c				\
 	pk-transaction-list.c				\
diff --git a/src/pk-backend-dbus.c b/src/pk-backend-dbus.c
deleted file mode 100644
index 34d6775..0000000
--- a/src/pk-backend-dbus.c
+++ /dev/null
@@ -1,1805 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007-2008 Richard Hughes <richard at hughsie.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <time.h>
-#include <errno.h>
-
-#include <string.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif /* HAVE_UNISTD_H */
-
-#include <glib/gi18n.h>
-#include <glib/gprintf.h>
-
-#include <gmodule.h>
-#include <egg-dbus-monitor.h>
-#include <dbus/dbus-glib.h>
-#include <packagekit-glib/packagekit.h>
-
-#include "egg-debug.h"
-#include "pk-backend-internal.h"
-#include "pk-backend-dbus.h"
-#include "pk-marshal.h"
-#include "pk-time.h"
-#include "pk-inhibit.h"
-
-#define PK_BACKEND_DBUS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PK_TYPE_BACKEND_DBUS, PkBackendDbusPrivate))
-
-/**
- * PK_BACKEND_DBUS_MAX_SYNC_RUNTIME:
- *
- * The time in ms the sync request is allowed to take.
- * Any more than this will cause an error and the transaction to be aborted.
- * This is required to stop dumb backends blocking the UI of client programs
- * - what should happen is the program fork()'s and processes the request.
- */
-#define PK_BACKEND_DBUS_MAX_SYNC_RUNTIME	500 /* ms */
-
-struct PkBackendDbusPrivate
-{
-	DBusGConnection		*connection;
-	DBusGProxy		*proxy;
-	PkBackend		*backend;
-	GTimer			*timer;
-	gchar			*service;
-	gulong			 signal_finished;
-	EggDbusMonitor		*monitor;
-};
-
-G_DEFINE_TYPE (PkBackendDbus, pk_backend_dbus, G_TYPE_OBJECT)
-static gpointer pk_backend_dbus_object = NULL;
-
-/**
- * pk_backend_dbus_repo_detail_cb:
- **/
-static void
-pk_backend_dbus_repo_detail_cb (DBusGProxy *proxy, const gchar *repo_id,
-				const gchar *description, gboolean enabled,
-				PkBackendDbus *backend_dbus)
-{
-	egg_debug ("got signal");
-	pk_backend_repo_detail (backend_dbus->priv->backend, repo_id, description, enabled);
-}
-
-/**
- * pk_backend_dbus_status_changed_cb:
- **/
-static void
-pk_backend_dbus_status_changed_cb (DBusGProxy *proxy, const gchar *status_text, PkBackendDbus *backend_dbus)
-{
-	egg_debug ("got signal");
-	pk_backend_set_status (backend_dbus->priv->backend, pk_status_enum_from_text (status_text));
-}
-
-/**
- * pk_backend_dbus_percentage_changed_cb:
- **/
-static void
-pk_backend_dbus_percentage_changed_cb (DBusGProxy *proxy, guint percentage, PkBackendDbus *backend_dbus)
-{
-	egg_debug ("got signal");
-	pk_backend_set_percentage (backend_dbus->priv->backend, percentage);
-}
-
-/**
- * pk_backend_dbus_sub_percentage_changed_cb:
- **/
-static void
-pk_backend_dbus_sub_percentage_changed_cb (DBusGProxy *proxy, guint sub_percentage, PkBackendDbus *backend_dbus)
-{
-	egg_debug ("got signal");
-	pk_backend_set_sub_percentage (backend_dbus->priv->backend, sub_percentage);
-}
-
-/**
- * pk_backend_dbus_package_cb:
- **/
-static void
-pk_backend_dbus_package_cb (DBusGProxy *proxy, const gchar *info_text, const gchar *package_id,
-			    const gchar *summary, PkBackendDbus *backend_dbus)
-{
-	egg_debug ("got signal");
-	pk_backend_package (backend_dbus->priv->backend, pk_info_enum_from_text (info_text), package_id, summary);
-}
-
-/**
- * pk_backend_dbus_details_cb:
- **/
-static void
-pk_backend_dbus_details_cb (DBusGProxy *proxy, const gchar *package_id,
-				const gchar *license, const gchar *group_text,
-				const gchar *detail, const gchar *url,
-				guint64 size, PkBackendDbus *backend_dbus)
-{
-	egg_debug ("got signal");
-	pk_backend_details (backend_dbus->priv->backend, package_id,
-				license, pk_group_enum_from_text (group_text), detail, url, size);
-}
-
-/**
- * pk_backend_dbus_distro_upgrade_cb:
- **/
-static void
-pk_backend_dbus_distro_upgrade_cb (DBusGProxy *proxy,
-				   const gchar *type,
-				   const gchar *name,
-				   const gchar *summary,
-				   PkBackendDbus *backend_dbus)
-{
-	egg_debug ("got signal");
-	pk_backend_distro_upgrade (backend_dbus->priv->backend,
-				   pk_distro_upgrade_enum_from_text (type),
-				   name, summary);
-}
-
-/**
- * pk_backend_dbus_category_cb:
- **/
-static void
-pk_backend_dbus_category_cb (DBusGProxy *proxy, const gchar *parent_id, const gchar *cat_id, const gchar *name,
-			     const gchar *summary, const gchar *icon, PkBackendDbus *backend_dbus)
-{
-	egg_debug ("got signal");
-	pk_backend_category (backend_dbus->priv->backend, parent_id, cat_id, name, summary, icon);
-}
-
-/**
- * pk_backend_dbus_files_cb:
- **/
-static void
-pk_backend_dbus_files_cb (DBusGProxy *proxy, const gchar *package_id,
-			  const gchar *file_list, PkBackendDbus *backend_dbus)
-{
-	egg_debug ("got signal");
-	pk_backend_files (backend_dbus->priv->backend, package_id, file_list);
-}
-
-/**
- * pk_backend_dbus_update_detail_cb:
- **/
-static void
-pk_backend_dbus_update_detail_cb (DBusGProxy *proxy, const gchar *package_id,
-				  const gchar *updates, const gchar *obsoletes,
-				  const gchar *vendor_url, const gchar *bugzilla_url,
-				  const gchar *cve_url, const gchar *restart_text,
-				  const gchar *update_text, const gchar	*changelog,
-				  const gchar *state, const gchar *issued,
-				  const gchar *updated, PkBackendDbus *backend_dbus)
-{
-	egg_debug ("got signal");
-	pk_backend_update_detail (backend_dbus->priv->backend, package_id, updates,
-				  obsoletes, vendor_url, bugzilla_url, cve_url,
-				  pk_restart_enum_from_text (restart_text),
-				  update_text, changelog,
-				  pk_update_state_enum_from_text (state),
-				  issued, updated);
-}
-
-/**
- * pk_backend_dbus_finished_cb:
- **/
-static void
-pk_backend_dbus_finished_cb (DBusGProxy *proxy, const gchar *exit_text, PkBackendDbus *backend_dbus)
-{
-	egg_debug ("deleting dbus %p, exit %s", backend_dbus, exit_text);
-	pk_backend_finished (backend_dbus->priv->backend);
-}
-
-/**
- * pk_backend_dbus_allow_cancel_cb:
- **/
-static void
-pk_backend_dbus_allow_cancel_cb (DBusGProxy *proxy, gboolean allow_cancel, PkBackendDbus *backend_dbus)
-{
-	egg_debug ("got signal");
-	pk_backend_set_allow_cancel (backend_dbus->priv->backend, allow_cancel);
-}
-
-/**
- * pk_backend_dbus_error_code_cb:
- **/
-static void
-pk_backend_dbus_error_code_cb (DBusGProxy *proxy, const gchar *error_text,
-			       const gchar *details, PkBackendDbus *backend_dbus)
-{
-	egg_debug ("got signal");
-	pk_backend_error_code (backend_dbus->priv->backend, pk_error_enum_from_text (error_text), details);
-}
-
-/**
- * pk_backend_dbus_require_restart_cb:
- **/
-static void
-pk_backend_dbus_require_restart_cb (DBusGProxy *proxy, PkRestartEnum type,
-				    const gchar *package_id, PkBackendDbus *backend_dbus)
-{
-	egg_debug ("got signal");
-	pk_backend_require_restart (backend_dbus->priv->backend, type, package_id);
-}
-
-/**
- * pk_backend_dbus_message_cb:
- **/
-static void
-pk_backend_dbus_message_cb (DBusGProxy *proxy, PkMessageEnum message,
-			    const gchar *details, PkBackendDbus *backend_dbus)
-{
-	egg_debug ("got signal");
-	pk_backend_message (backend_dbus->priv->backend, message, details);
-}
-
-/**
- * pk_backend_dbus_repo_signature_required_cb:
- **/
-static void
-pk_backend_dbus_repo_signature_required_cb (DBusGProxy *proxy, 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, PkBackendDbus *backend_dbus)
-{
-	egg_debug ("got signal");
-	pk_backend_repo_signature_required (backend_dbus->priv->backend, package_id, repository_name,
-					    key_url, key_userid, key_id, key_fingerprint, key_timestamp, type);
-}
-
-/**
- * pk_backend_dbus_eula_required_cb:
- **/
-static void
-pk_backend_dbus_eula_required_cb (DBusGProxy *proxy, const gchar *eula_id, const gchar *package_id,
-				  const gchar *vendor_name, const gchar *license_agreement,
-				  PkBackendDbus *backend_dbus)
-{
-	egg_debug ("got signal");
-	pk_backend_eula_required (backend_dbus->priv->backend, eula_id,
-				  package_id, vendor_name, license_agreement);
-}
-
-/**
- * pk_backend_dbus_time_reset:
- **/
-static gboolean
-pk_backend_dbus_time_reset (PkBackendDbus *backend_dbus)
-{
-	g_return_val_if_fail (backend_dbus != NULL, FALSE);
-	/* reset timer for the next method */
-	g_timer_reset (backend_dbus->priv->timer);
-	return TRUE;
-}
-
-/**
- * pk_backend_dbus_time_check:
- **/
-static gboolean
-pk_backend_dbus_time_check (PkBackendDbus *backend_dbus)
-{
-	gdouble seconds;
-	guint time_ms;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-
-	seconds = g_timer_elapsed (backend_dbus->priv->timer, NULL);
-	time_ms = (guint) seconds * 1000;
-	if (time_ms > PK_BACKEND_DBUS_MAX_SYNC_RUNTIME) {
-		egg_warning ("too much time for sync method: %ims", time_ms);
-		pk_backend_error_code (backend_dbus->priv->backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
-				       "The backend took too much time to process the synchronous request - you need to fork!");
-		pk_backend_finished (backend_dbus->priv->backend);
-	}
-
-	/* reset timer for the next method */
-	g_timer_reset (backend_dbus->priv->timer);
-	return TRUE;
-}
-
-/**
- * pk_backend_dbus_remove_callbacks:
- **/
-static gboolean
-pk_backend_dbus_remove_callbacks (PkBackendDbus *backend_dbus)
-{
-	DBusGProxy *proxy;
-
-	/* get copy */
-	proxy = backend_dbus->priv->proxy;
-	if (proxy == NULL) {
-		return FALSE;
-	}
-
-	dbus_g_proxy_disconnect_signal (proxy, "RepoDetail",
-					G_CALLBACK (pk_backend_dbus_repo_detail_cb), backend_dbus);
-	dbus_g_proxy_disconnect_signal (proxy, "StatusChanged",
-					G_CALLBACK (pk_backend_dbus_status_changed_cb), backend_dbus);
-	dbus_g_proxy_disconnect_signal (proxy, "PercentageChanged",
-					G_CALLBACK (pk_backend_dbus_percentage_changed_cb), backend_dbus);
-	dbus_g_proxy_disconnect_signal (proxy, "SubPercentageChanged",
-					G_CALLBACK (pk_backend_dbus_sub_percentage_changed_cb), backend_dbus);
-	dbus_g_proxy_disconnect_signal (proxy, "Package",
-					G_CALLBACK (pk_backend_dbus_package_cb), backend_dbus);
-	dbus_g_proxy_disconnect_signal (proxy, "Details",
-					G_CALLBACK (pk_backend_dbus_details_cb), backend_dbus);
-	dbus_g_proxy_disconnect_signal (proxy, "Files",
-					G_CALLBACK (pk_backend_dbus_files_cb), backend_dbus);
-	dbus_g_proxy_disconnect_signal (proxy, "UpdateDetail",
-					G_CALLBACK (pk_backend_dbus_update_detail_cb), backend_dbus);
-	dbus_g_proxy_disconnect_signal (proxy, "Finished",
-					G_CALLBACK (pk_backend_dbus_finished_cb), backend_dbus);
-	dbus_g_proxy_disconnect_signal (proxy, "AllowCancel",
-					G_CALLBACK (pk_backend_dbus_allow_cancel_cb), backend_dbus);
-	dbus_g_proxy_disconnect_signal (proxy, "ErrorCode",
-					G_CALLBACK (pk_backend_dbus_error_code_cb), backend_dbus);
-	dbus_g_proxy_disconnect_signal (proxy, "RequireRestart",
-					G_CALLBACK (pk_backend_dbus_require_restart_cb), backend_dbus);
-	dbus_g_proxy_disconnect_signal (proxy, "Message",
-					G_CALLBACK (pk_backend_dbus_message_cb), backend_dbus);
-	dbus_g_proxy_disconnect_signal (proxy, "RepoSignatureRequired",
-					G_CALLBACK (pk_backend_dbus_repo_signature_required_cb), backend_dbus);
-	dbus_g_proxy_disconnect_signal (proxy, "EulaRequired",
-					G_CALLBACK (pk_backend_dbus_eula_required_cb), backend_dbus);
-	dbus_g_proxy_disconnect_signal (proxy, "Category",
-					G_CALLBACK (pk_backend_dbus_category_cb), backend_dbus);
-	dbus_g_proxy_disconnect_signal (proxy, "DistroUpgrade",
-					G_CALLBACK (pk_backend_dbus_distro_upgrade_cb), backend_dbus);
-	return TRUE;
-}
-
-/**
- * pk_backend_dbus_set_proxy:
- **/
-static gboolean
-pk_backend_dbus_set_proxy (PkBackendDbus *backend_dbus, const gchar *proxy_http, const gchar *proxy_ftp)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "SetProxy", &error,
-				 G_TYPE_STRING, proxy_http,
-				 G_TYPE_STRING, proxy_ftp,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		g_error_free (error);
-	}
-	return ret;
-}
-
-/**
- * pk_backend_dbus_set_locale:
- **/
-static gboolean
-pk_backend_dbus_set_locale (PkBackendDbus *backend_dbus, const gchar *locale)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "SetLocale", &error,
-				 G_TYPE_STRING, locale,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		g_error_free (error);
-	}
-	return ret;
-}
-
-/**
- * pk_backend_dbus_startup:
- **/
-static gboolean
-pk_backend_dbus_startup (PkBackendDbus *backend_dbus)
-{
-	gboolean ret;
-	GError *error = NULL;
-	gchar *locale;
-	gchar *proxy_http;
-	gchar *proxy_ftp;
-
-	/* manually init the backend, which should get things spawned for us */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "Init", &error,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (!ret) {
-		egg_warning ("%s", error->message);
-		/* cannot use ErrorCode as not in transaction */
-		pk_backend_message (backend_dbus->priv->backend, PK_MESSAGE_ENUM_DAEMON_ERROR, error->message);
-		g_error_free (error);
-		goto out;
-	}
-
-	/* set the proxy */
-	proxy_http = pk_backend_get_proxy_http (backend_dbus->priv->backend);
-	proxy_ftp = pk_backend_get_proxy_http (backend_dbus->priv->backend);
-	pk_backend_dbus_set_proxy (backend_dbus, proxy_http, proxy_ftp);
-	g_free (proxy_http);
-	g_free (proxy_ftp);
-
-	/* set the language */
-	locale = pk_backend_get_locale (backend_dbus->priv->backend);
-	pk_backend_dbus_set_locale (backend_dbus, locale);
-	g_free (locale);
-
-	/* reset the time */
-	pk_backend_dbus_time_check (backend_dbus);
-out:
-	return ret;
-}
-
-/**
- * pk_backend_dbus_set_name:
- **/
-gboolean
-pk_backend_dbus_set_name (PkBackendDbus *backend_dbus, const gchar *service)
-{
-	DBusGProxy *proxy;
-	gboolean ret;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->connection != NULL, FALSE);
-	g_return_val_if_fail (service != NULL, FALSE);
-
-	if (backend_dbus->priv->proxy != NULL) {
-		egg_warning ("need to unref old one -- is this logically allowed?");
-		pk_backend_dbus_remove_callbacks (backend_dbus);
-		g_object_unref (backend_dbus->priv->proxy);
-	}
-
-	/* watch */
-	egg_dbus_monitor_reset (backend_dbus->priv->monitor);
-	egg_dbus_monitor_assign (backend_dbus->priv->monitor, EGG_DBUS_MONITOR_SYSTEM, service);
-
-	/* grab this */
-	egg_debug ("trying to activate %s", service);
-	proxy = dbus_g_proxy_new_for_name (backend_dbus->priv->connection,
-					   service, PK_DBUS_BACKEND_PATH, PK_DBUS_BACKEND_INTERFACE);
-
-	dbus_g_proxy_add_signal (proxy, "RepoDetail",
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (proxy, "StatusChanged",
-				 G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (proxy, "PercentageChanged",
-				 G_TYPE_UINT, G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (proxy, "SubPercentageChanged",
-				 G_TYPE_UINT, G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (proxy, "Package",
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (proxy, "Details",
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT64, G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (proxy, "Files",
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (proxy, "Category",
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (proxy, "UpdateDetail",
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (proxy, "Finished",
-				 G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (proxy, "AllowCancel",
-				 G_TYPE_BOOLEAN, G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (proxy, "ErrorCode",
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (proxy, "RequireRestart",
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (proxy, "Message",
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (proxy, "RepoSignatureRequired",
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-				 G_TYPE_STRING, G_TYPE_UINT, G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (proxy, "EulaRequired",
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-				 G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_add_signal (proxy, "DistroUpgrade",
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-				 G_TYPE_INVALID);
-
-	/* add callbacks */
-	dbus_g_proxy_connect_signal (proxy, "RepoDetail",
-				     G_CALLBACK (pk_backend_dbus_repo_detail_cb), backend_dbus, NULL);
-	dbus_g_proxy_connect_signal (proxy, "StatusChanged",
-				     G_CALLBACK (pk_backend_dbus_status_changed_cb), backend_dbus, NULL);
-	dbus_g_proxy_connect_signal (proxy, "PercentageChanged",
-				     G_CALLBACK (pk_backend_dbus_percentage_changed_cb), backend_dbus, NULL);
-	dbus_g_proxy_connect_signal (proxy, "SubPercentageChanged",
-				     G_CALLBACK (pk_backend_dbus_sub_percentage_changed_cb), backend_dbus, NULL);
-	dbus_g_proxy_connect_signal (proxy, "Package",
-				     G_CALLBACK (pk_backend_dbus_package_cb), backend_dbus, NULL);
-	dbus_g_proxy_connect_signal (proxy, "Details",
-				     G_CALLBACK (pk_backend_dbus_details_cb), backend_dbus, NULL);
-	dbus_g_proxy_connect_signal (proxy, "Files",
-				     G_CALLBACK (pk_backend_dbus_files_cb), backend_dbus, NULL);
-	dbus_g_proxy_connect_signal (proxy, "Category",
-				     G_CALLBACK (pk_backend_dbus_category_cb), backend_dbus, NULL);
-	dbus_g_proxy_connect_signal (proxy, "UpdateDetail",
-				     G_CALLBACK (pk_backend_dbus_update_detail_cb), backend_dbus, NULL);
-	dbus_g_proxy_connect_signal (proxy, "Finished",
-				     G_CALLBACK (pk_backend_dbus_finished_cb), backend_dbus, NULL);
-	dbus_g_proxy_connect_signal (proxy, "AllowCancel",
-				     G_CALLBACK (pk_backend_dbus_allow_cancel_cb), backend_dbus, NULL);
-	dbus_g_proxy_connect_signal (proxy, "ErrorCode",
-				     G_CALLBACK (pk_backend_dbus_error_code_cb), backend_dbus, NULL);
-	dbus_g_proxy_connect_signal (proxy, "RequireRestart",
-				     G_CALLBACK (pk_backend_dbus_require_restart_cb), backend_dbus, NULL);
-	dbus_g_proxy_connect_signal (proxy, "Message",
-				     G_CALLBACK (pk_backend_dbus_message_cb), backend_dbus, NULL);
-	dbus_g_proxy_connect_signal (proxy, "RepoSignatureRequired",
-				     G_CALLBACK (pk_backend_dbus_repo_signature_required_cb), backend_dbus, NULL);
-	dbus_g_proxy_connect_signal (proxy, "EulaRequired",
-				     G_CALLBACK (pk_backend_dbus_eula_required_cb), backend_dbus, NULL);
-	dbus_g_proxy_connect_signal (proxy, "DistroUpgrade",
-				     G_CALLBACK (pk_backend_dbus_distro_upgrade_cb), backend_dbus, NULL);
-
-	backend_dbus->priv->proxy = proxy;
-
-	/* save for later */
-	g_free (backend_dbus->priv->service);
-	backend_dbus->priv->service = g_strdup (service);
-
-	/* Init() */
-	ret = pk_backend_dbus_startup (backend_dbus);
-
-	return ret;
-}
-
-/**
- * pk_backend_dbus_kill:
- **/
-gboolean
-pk_backend_dbus_kill (PkBackendDbus *backend_dbus)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "Exit", &error,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_cancel:
- **/
-gboolean
-pk_backend_dbus_cancel (PkBackendDbus *backend_dbus)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "Cancel", &error,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_get_updates:
- **/
-gboolean
-pk_backend_dbus_get_updates (PkBackendDbus *backend_dbus, PkBitfield filters)
-{
-	gboolean ret;
-	GError *error = NULL;
-	gchar *filters_text;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	filters_text = pk_filter_bitfield_to_text (filters);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "GetUpdates", &error,
-				 G_TYPE_STRING, filters_text,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	g_free (filters_text);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_get_repo_list:
- **/
-gboolean
-pk_backend_dbus_get_repo_list (PkBackendDbus *backend_dbus, PkBitfield filters)
-{
-	gboolean ret;
-	GError *error = NULL;
-	gchar *filters_text;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	filters_text = pk_filter_bitfield_to_text (filters);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "GetRepoList", &error,
-				 G_TYPE_STRING, filters_text,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	g_free (filters_text);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_refresh_cache:
- **/
-gboolean
-pk_backend_dbus_refresh_cache (PkBackendDbus *backend_dbus, gboolean force)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "RefreshCache", &error,
-				 G_TYPE_BOOLEAN, force,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_get_distro_upgrades
- **/
-gboolean
-pk_backend_dbus_get_distro_upgrades (PkBackendDbus *backend_dbus)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy,
-				 "GetDistroUpgrades", &error,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend,
-				       PK_ERROR_ENUM_INTERNAL_ERROR,
-				       error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	return ret;
-}
-
-
-/**
- * pk_backend_dbus_update_system:
- **/
-gboolean
-pk_backend_dbus_update_system (PkBackendDbus *backend_dbus)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "UpdateSystem", &error,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_get_categories:
- **/
-gboolean
-pk_backend_dbus_get_categories (PkBackendDbus *backend_dbus)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "GetCategories", &error,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_repo_enable:
- **/
-gboolean
-pk_backend_dbus_repo_enable (PkBackendDbus *backend_dbus, const gchar *rid, gboolean enabled)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (rid != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "RepoEnable", &error,
-				 G_TYPE_STRING, rid,
-				 G_TYPE_BOOLEAN, enabled,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_repo_set_data:
- **/
-gboolean
-pk_backend_dbus_repo_set_data (PkBackendDbus *backend_dbus, const gchar *rid,
-			       const gchar *parameter, const gchar *value)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (rid != NULL, FALSE);
-	g_return_val_if_fail (parameter != NULL, FALSE);
-	g_return_val_if_fail (value != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "RepoSetData", &error,
-				 G_TYPE_STRING, rid,
-				 G_TYPE_STRING, parameter,
-				 G_TYPE_STRING, value,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_resolve:
- **/
-gboolean
-pk_backend_dbus_resolve (PkBackendDbus *backend_dbus, PkBitfield filters, gchar **packages)
-{
-	gboolean ret;
-	GError *error = NULL;
-	gchar *filters_text;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (packages != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	filters_text = pk_filter_bitfield_to_text (filters);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "Resolve", &error,
-				 G_TYPE_STRING, filters_text,
-				 G_TYPE_STRV, packages,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	g_free (filters_text);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_rollback:
- **/
-gboolean
-pk_backend_dbus_rollback (PkBackendDbus *backend_dbus, const gchar *transaction_id)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (transaction_id != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "Rollback", &error,
-				 G_TYPE_STRING, transaction_id,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_search_name:
- **/
-gboolean
-pk_backend_dbus_search_name (PkBackendDbus *backend_dbus, PkBitfield filters, const gchar *search)
-{
-	gboolean ret;
-	GError *error = NULL;
-	gchar *filters_text;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (search != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	filters_text = pk_filter_bitfield_to_text (filters);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "SearchName", &error,
-				 G_TYPE_STRING, filters_text,
-				 G_TYPE_STRING, search,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	g_free (filters_text);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_search_details:
- **/
-gboolean
-pk_backend_dbus_search_details (PkBackendDbus *backend_dbus, PkBitfield filters, const gchar *search)
-{
-	gboolean ret;
-	GError *error = NULL;
-	gchar *filters_text;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (search != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	filters_text = pk_filter_bitfield_to_text (filters);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "SearchDetails", &error,
-				 G_TYPE_STRING, filters_text,
-				 G_TYPE_STRING, search,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	g_free (filters_text);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_search_group:
- **/
-gboolean
-pk_backend_dbus_search_group (PkBackendDbus *backend_dbus, PkBitfield filters, const gchar *search)
-{
-	gboolean ret;
-	GError *error = NULL;
-	gchar *filters_text;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (search != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	filters_text = pk_filter_bitfield_to_text (filters);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "SearchGroup", &error,
-				 G_TYPE_STRING, filters_text,
-				 G_TYPE_STRING, search,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	g_free (filters_text);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_search_file:
- **/
-gboolean
-pk_backend_dbus_search_file (PkBackendDbus *backend_dbus, PkBitfield filters, const gchar *search)
-{
-	gboolean ret;
-	GError *error = NULL;
-	gchar *filters_text;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (search != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	filters_text = pk_filter_bitfield_to_text (filters);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "SearchFile", &error,
-				 G_TYPE_STRING, filters_text,
-				 G_TYPE_STRING, search,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	g_free (filters_text);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_get_depends:
- **/
-gboolean
-pk_backend_dbus_get_depends (PkBackendDbus *backend_dbus, PkBitfield filters, gchar **package_ids, gboolean recursive)
-{
-	gboolean ret;
-	GError *error = NULL;
-	gchar *filters_text;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (package_ids != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	filters_text = pk_filter_bitfield_to_text (filters);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "GetDepends", &error,
-				 G_TYPE_STRING, filters_text,
-				 G_TYPE_STRV, package_ids,
-				 G_TYPE_BOOLEAN, recursive,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	g_free (filters_text);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_get_requires:
- **/
-gboolean
-pk_backend_dbus_get_requires (PkBackendDbus *backend_dbus, PkBitfield filters, gchar **package_ids, gboolean recursive)
-{
-	gboolean ret;
-	GError *error = NULL;
-	gchar *filters_text;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (package_ids != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	filters_text = pk_filter_bitfield_to_text (filters);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "GetRequires", &error,
-				 G_TYPE_STRING, filters_text,
-				 G_TYPE_STRV, package_ids,
-				 G_TYPE_BOOLEAN, recursive,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	g_free (filters_text);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_get_packages:
- **/
-gboolean
-pk_backend_dbus_get_packages (PkBackendDbus *backend_dbus, PkBitfield filters)
-{
-	gboolean ret;
-	GError *error = NULL;
-	gchar *filters_text;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	filters_text = pk_filter_bitfield_to_text (filters);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "GetPackages", &error,
-				 G_TYPE_STRING, filters_text,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	g_free (filters_text);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_download_packages:
- **/
-gboolean
-pk_backend_dbus_download_packages (PkBackendDbus *backend_dbus, gchar **package_ids, const gchar *directory)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	 g_return_val_if_fail (package_ids != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "DownloadPackages", &error,
-				 G_TYPE_STRV, package_ids,
-				 G_TYPE_STRING, directory,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	return ret;
-}
-
-
-/**
- * pk_backend_dbus_get_update_detail:
- **/
-gboolean
-pk_backend_dbus_get_update_detail (PkBackendDbus *backend_dbus, gchar **package_ids)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (package_ids != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "GetUpdateDetail", &error,
-				 G_TYPE_STRV, package_ids,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_get_details:
- **/
-gboolean
-pk_backend_dbus_get_details (PkBackendDbus *backend_dbus, gchar **package_ids)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (package_ids != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "GetDetails", &error,
-				 G_TYPE_STRV, package_ids,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_get_files:
- **/
-gboolean
-pk_backend_dbus_get_files (PkBackendDbus *backend_dbus, gchar **package_ids)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (package_ids != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "GetFiles", &error,
-				 G_TYPE_STRV, package_ids,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_remove_packages:
- **/
-gboolean
-pk_backend_dbus_remove_packages (PkBackendDbus *backend_dbus, gchar **package_ids, gboolean allow_deps, gboolean autoremove)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (package_ids != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "RemovePackages", &error,
-				 G_TYPE_STRV, package_ids,
-				 G_TYPE_BOOLEAN, allow_deps,
-				 G_TYPE_BOOLEAN, autoremove,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_install_packages:
- **/
-gboolean
-pk_backend_dbus_install_packages (PkBackendDbus *backend_dbus, gchar **package_ids)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (package_ids != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "InstallPackages", &error,
-				 G_TYPE_STRV, package_ids,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_update_packages:
- **/
-gboolean
-pk_backend_dbus_update_packages (PkBackendDbus *backend_dbus, gchar **package_ids)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (package_ids != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "UpdatePackages", &error,
-				 G_TYPE_STRV, package_ids,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_install_files:
- **/
-gboolean
-pk_backend_dbus_install_files (PkBackendDbus *backend_dbus, gboolean trusted, gchar **full_paths)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (full_paths != NULL, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "InstallFiles", &error,
-				 G_TYPE_BOOLEAN, trusted,
-				 G_TYPE_STRV, full_paths,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_what_provides:
- **/
-gboolean
-pk_backend_dbus_what_provides (PkBackendDbus *backend_dbus, PkBitfield filters,
-			       PkProvidesEnum provides, const gchar *search)
-{
-	gboolean ret;
-	GError *error = NULL;
-	const gchar *provides_text;
-	gchar *filters_text;
-
-	g_return_val_if_fail (PK_IS_BACKEND_DBUS (backend_dbus), FALSE);
-	g_return_val_if_fail (backend_dbus->priv->proxy != NULL, FALSE);
-	g_return_val_if_fail (search != NULL, FALSE);
-	g_return_val_if_fail (provides != PK_PROVIDES_ENUM_UNKNOWN, FALSE);
-
-	/* new sync method call */
-	pk_backend_dbus_time_reset (backend_dbus);
-	provides_text = pk_provides_enum_to_text (provides);
-	filters_text = pk_filter_bitfield_to_text (filters);
-	ret = dbus_g_proxy_call (backend_dbus->priv->proxy, "WhatProvides", &error,
-				 G_TYPE_STRING, filters_text,
-				 G_TYPE_STRING, provides_text,
-				 G_TYPE_STRING, search,
-				 G_TYPE_INVALID, G_TYPE_INVALID);
-	if (error != NULL) {
-		egg_warning ("%s", error->message);
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
-		g_error_free (error);
-	}
-	if (ret)
-		pk_backend_dbus_time_check (backend_dbus);
-	g_free (filters_text);
-	return ret;
-}
-
-/**
- * pk_backend_dbus_monitor_changed_cb:
- **/
-static void
-pk_backend_dbus_monitor_changed_cb (EggDbusMonitor *egg_dbus_monitor, gboolean is_active, PkBackendDbus *backend_dbus)
-{
-	gboolean ret;
-	g_return_if_fail (PK_IS_BACKEND_DBUS (backend_dbus));
-
-	if (!is_active) {
-		egg_warning ("DBUS backend disconnected");
-		pk_backend_message (backend_dbus->priv->backend, PK_MESSAGE_ENUM_DAEMON_ERROR, "DBUS backend has exited");
-		/* Init() */
-		ret = pk_backend_dbus_startup (backend_dbus);
-		if (!ret)
-			pk_backend_message (backend_dbus->priv->backend, PK_MESSAGE_ENUM_DAEMON_ERROR, "DBUS backend will not start");
-	}
-}
-
-/**
- * pk_backend_dbus_finalize:
- **/
-static void
-pk_backend_dbus_finalize (GObject *object)
-{
-	PkBackendDbus *backend_dbus;
-	g_return_if_fail (PK_IS_BACKEND_DBUS (object));
-
-	backend_dbus = PK_BACKEND_DBUS (object);
-
-	/* free name */
-	g_free (backend_dbus->priv->service);
-
-	/* we might not have actually set a name yet */
-	if (backend_dbus->priv->proxy != NULL) {
-		pk_backend_dbus_remove_callbacks (backend_dbus);
-		g_object_unref (backend_dbus->priv->proxy);
-	}
-	g_timer_destroy (backend_dbus->priv->timer);
-	g_object_unref (backend_dbus->priv->backend);
-	g_object_unref (backend_dbus->priv->monitor);
-
-	G_OBJECT_CLASS (pk_backend_dbus_parent_class)->finalize (object);
-}
-
-/**
- * pk_backend_dbus_class_init:
- **/
-static void
-pk_backend_dbus_class_init (PkBackendDbusClass *klass)
-{
-	GObjectClass *object_class = G_OBJECT_CLASS (klass);
-	object_class->finalize = pk_backend_dbus_finalize;
-	g_type_class_add_private (klass, sizeof (PkBackendDbusPrivate));
-}
-
-/**
- * pk_backend_dbus_init:
- **/
-static void
-pk_backend_dbus_init (PkBackendDbus *backend_dbus)
-{
-	GError *error = NULL;
-
-	backend_dbus->priv = PK_BACKEND_DBUS_GET_PRIVATE (backend_dbus);
-	backend_dbus->priv->proxy = NULL;
-	backend_dbus->priv->service = NULL;
-	backend_dbus->priv->backend = pk_backend_new ();
-	backend_dbus->priv->timer = g_timer_new ();
-
-	/* get connection */
-	backend_dbus->priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
-	if (error != NULL)
-		egg_error ("unable to get system connection %s", error->message);
-
-	/* babysit the backend and do Init() again it when it crashes */
-	backend_dbus->priv->monitor = egg_dbus_monitor_new ();
-	g_signal_connect (backend_dbus->priv->monitor, "connection-changed",
-			  G_CALLBACK (pk_backend_dbus_monitor_changed_cb), backend_dbus);
-
-	/* ProgressChanged */
-	dbus_g_object_register_marshaller (pk_marshal_VOID__UINT_UINT_UINT_UINT,
-					   G_TYPE_NONE, G_TYPE_UINT,
-					   G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INVALID);
-
-	/* StatusChanged */
-	dbus_g_object_register_marshaller (pk_marshal_VOID__STRING,
-					   G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INVALID);
-
-	/* Finished */
-	dbus_g_object_register_marshaller (pk_marshal_VOID__STRING, G_TYPE_STRING, G_TYPE_INVALID);
-
-	/* ErrorCode, RequireRestart, Message */
-	dbus_g_object_register_marshaller (pk_marshal_VOID__STRING_STRING,
-					   G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-
-	/* Details */
-	dbus_g_object_register_marshaller (pk_marshal_VOID__STRING_STRING_STRING_STRING_STRING_UINT64,
-					   G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING,
-					   G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT64,
-					   G_TYPE_INVALID);
-
-	/* Files */
-	dbus_g_object_register_marshaller (pk_marshal_VOID__STRING_STRING,
-					   G_TYPE_NONE, G_TYPE_STRING,
-					   G_TYPE_STRING, G_TYPE_INVALID);
-	/* Category */
-	dbus_g_object_register_marshaller (pk_marshal_VOID__STRING_STRING,
-					   G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING,
-					   G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-
-	/* Repo Signature Required */
-	dbus_g_object_register_marshaller (pk_marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_STRING_UINT,
-					   G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-					   G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-					   G_TYPE_UINT, G_TYPE_INVALID);
-
-	/* EulaRequired */
-	dbus_g_object_register_marshaller (pk_marshal_VOID__STRING_STRING_STRING_STRING,
-					   G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING,
-					   G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-
-	/* Package */
-	dbus_g_object_register_marshaller (pk_marshal_VOID__STRING_STRING_STRING,
-					   G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-
-	/* RepoDetail */
-	dbus_g_object_register_marshaller (pk_marshal_VOID__STRING_STRING_BOOL,
-					   G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);
-
-	/* UpdateDetail */
-	dbus_g_object_register_marshaller (pk_marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING,
-					   G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING,
-					   G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-					   G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-					   G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-
-	dbus_g_object_register_marshaller (g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INVALID);
-}
-
-/**
- * pk_backend_dbus_new:
- **/
-PkBackendDbus *
-pk_backend_dbus_new (void)
-{
-	if (pk_backend_dbus_object != NULL) {
-		g_object_ref (pk_backend_dbus_object);
-	} else {
-		pk_backend_dbus_object = g_object_new (PK_TYPE_BACKEND_DBUS, NULL);
-		g_object_add_weak_pointer (pk_backend_dbus_object, &pk_backend_dbus_object);
-	}
-	return PK_BACKEND_DBUS (pk_backend_dbus_object);
-}
-
-/***************************************************************************
- ***                          MAKE CHECK TESTS                           ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-static guint number_packages = 0;
-
-/**
- * pk_backend_dbus_test_finished_cb:
- **/
-static void
-pk_backend_dbus_test_finished_cb (PkBackend *backend, PkExitEnum exit, EggTest *test)
-{
-	egg_test_loop_quit (test);
-}
-
-/**
- * pk_backend_dbus_test_package_cb:
- **/
-static void
-pk_backend_dbus_test_package_cb (PkBackend *backend, PkInfoEnum info,
-				 const gchar *package_id, const gchar *summary,
-				 PkBackendDbus *backend_dbus)
-{
-	number_packages++;
-	egg_debug ("package count now %i", number_packages);
-}
-
-static gboolean
-pk_backend_dbus_test_cancel_cb (gpointer data)
-{
-	gboolean ret;
-	guint elapsed;
-	EggTest *test = (EggTest *) data;
-	PkBackendDbus *backend_dbus = PK_BACKEND_DBUS (egg_test_get_user_data (test));
-
-	/* save time */
-	egg_test_set_user_data (test, GINT_TO_POINTER (egg_test_elapsed (test)));
-
-	/************************************************************/
-	egg_test_title (test, "cancel");
-	ret = pk_backend_dbus_cancel (backend_dbus);
-	elapsed = egg_test_elapsed (test);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "check we didnt take too long");
-	if (elapsed < 1000) {
-		egg_test_success (test, "elapsed = %ims", elapsed);
-	} else {
-		egg_test_failed (test, "elapsed = %ims", elapsed);
-	}
-	return FALSE;
-}
-
-void
-pk_backend_test_dbus (EggTest *test)
-{
-	PkBackendDbus *backend_dbus;
-	gboolean ret;
-	guint elapsed;
-
-	if (!egg_test_start (test, "PkBackendDbus"))
-		return;
-
-	/* don't do these when doing make distcheck */
-#ifndef PK_IS_DEVELOPER
-	egg_test_end (test);
-	return;
-#endif
-
-	/* there's a bug in the self check code somewhere, causing ErrorCode in
-	   init, even tho init is overidden by the self check code */
-	egg_warning ("NOT RUNNING pkBackendDbus SELF CHECKS");
-	egg_test_end (test);
-	return;
-
-	/************************************************************/
-	egg_test_title (test, "get an backend_dbus");
-	backend_dbus = pk_backend_dbus_new ();
-	if (backend_dbus != NULL)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-
-	/* so we can spin until we finish */
-	g_signal_connect (backend_dbus->priv->backend, "finished",
-			  G_CALLBACK (pk_backend_dbus_test_finished_cb), test);
-	/* so we can count the returned packages */
-	g_signal_connect (backend_dbus->priv->backend, "package",
-			  G_CALLBACK (pk_backend_dbus_test_package_cb), backend_dbus);
-
-	/* needed to avoid an error */
-	ret = pk_backend_set_name (backend_dbus->priv->backend, "test_dbus");
-	ret = pk_backend_lock (backend_dbus->priv->backend);
-
-	/************************************************************/
-	egg_test_title (test, "set the name and activate");
-	ret = pk_backend_dbus_set_name (backend_dbus, "org.freedesktop.PackageKitTestBackend");
-	elapsed = egg_test_elapsed (test);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "check we actually did something and didn't fork");
-	if (elapsed >= 1)
-		egg_test_success (test, "elapsed = %ims", elapsed);
-	else
-		egg_test_failed (test, "elapsed = %ims", elapsed);
-
-	/************************************************************/
-	egg_test_title (test, "check we are on the bus");
-	if (egg_dbus_monitor_is_connected (backend_dbus->priv->monitor))
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, NULL);
-
-	/************************************************************/
-	egg_test_title (test, "search by name");
-	ret = pk_backend_dbus_search_name (backend_dbus, PK_FILTER_ENUM_NONE, "power");
-	elapsed = egg_test_elapsed (test);
-	egg_test_assert (test, ret);
-
-	/************************************************************/
-	egg_test_title (test, "check we forked and didn't block");
-	if (elapsed < 100)
-		egg_test_success (test, "elapsed = %ims", elapsed);
-	else
-		egg_test_failed (test, "elapsed = %ims", elapsed);
-
-	/* wait for finished */
-	egg_test_loop_wait (test, 5000);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "test number of packages");
-	if (number_packages == 3)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong number of packages %i, expected 3", number_packages);
-
-	/* reset number_packages */
-	pk_backend_reset (backend_dbus->priv->backend);
-	number_packages = 0;
-
-	/************************************************************/
-	egg_test_title (test, "search by name again");
-	ret = pk_backend_dbus_search_name (backend_dbus, PK_FILTER_ENUM_NONE, "power");
-	egg_test_assert (test, ret);
-
-	/* wait for finished */
-	egg_test_loop_wait (test, 5000);
-	egg_test_loop_check (test);
-
-	/************************************************************/
-	egg_test_title (test, "test number of packages again");
-	if (number_packages == 3)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong number of packages %i, expected 3", number_packages);
-
-	/* reset number_packages */
-	pk_backend_reset (backend_dbus->priv->backend);
-	number_packages = 0;
-
-	/************************************************************/
-	egg_test_title (test, "search by name");
-	ret = pk_backend_dbus_search_name (backend_dbus, PK_FILTER_ENUM_NONE, "power");
-	egg_test_assert (test, ret);
-
-	/* schedule a cancel */
-	egg_test_set_user_data (test, backend_dbus);
-	g_timeout_add (1500, pk_backend_dbus_test_cancel_cb, test);
-
-	/************************************************************/
-	egg_test_title (test, "wait for cancel");
-	/* wait for finished */
-	egg_test_loop_wait (test, 5000);
-	egg_test_loop_check (test);
-	egg_test_success (test, NULL);
-	elapsed = GPOINTER_TO_UINT (egg_test_get_user_data (test));
-
-	/************************************************************/
-	egg_test_title (test, "check we waited correct time");
-	if (elapsed < 1600 && elapsed > 1400)
-		egg_test_success (test, "waited %ims", elapsed);
-	else
-		egg_test_failed (test, "waited %ims", elapsed);
-
-	/************************************************************/
-	egg_test_title (test, "test number of packages");
-	if (number_packages == 2)
-		egg_test_success (test, NULL);
-	else
-		egg_test_failed (test, "wrong number of packages %i, expected 2", number_packages);
-
-	/* needed to avoid an error */
-	ret = pk_backend_unlock (backend_dbus->priv->backend);
-
-	g_object_unref (backend_dbus);
-
-	egg_test_end (test);
-}
-#endif
-
diff --git a/src/pk-backend-dbus.h b/src/pk-backend-dbus.h
deleted file mode 100644
index 399f92e..0000000
--- a/src/pk-backend-dbus.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007-2008 Richard Hughes <richard at hughsie.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef __PK_BACKEND_DBUS_H
-#define __PK_BACKEND_DBUS_H
-
-#include <glib-object.h>
-#include "pk-backend.h"
-
-G_BEGIN_DECLS
-
-#define PK_TYPE_BACKEND_DBUS		(pk_backend_dbus_get_type ())
-#define PK_BACKEND_DBUS(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), PK_TYPE_BACKEND_DBUS, PkBackendDbus))
-#define PK_BACKEND_DBUS_CLASS(k)	(G_TYPE_CHECK_CLASS_CAST((k), PK_TYPE_BACKEND_DBUS, PkBackendDbusClass))
-#define PK_IS_BACKEND_DBUS(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), PK_TYPE_BACKEND_DBUS))
-#define PK_IS_BACKEND_DBUS_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), PK_TYPE_BACKEND_DBUS))
-#define PK_BACKEND_DBUS_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_BACKEND_DBUS, PkBackendDbusClass))
-
-/**
- * PK_DBUS_BACKEND_INTERFACE:
- *
- * Interface to use for the dbus backend
- */
-#define PK_DBUS_BACKEND_INTERFACE	"org.freedesktop.PackageKitBackend"
-
-/**
- * PK_DBUS_BACKEND_PATH:
- *
- * Path to use for the dbus backend
- */
-#define PK_DBUS_BACKEND_PATH		"/org/freedesktop/PackageKitBackend"
-
-typedef struct PkBackendDbusPrivate PkBackendDbusPrivate;
-
-typedef struct
-{
-	 GObject		 parent;
-	 PkBackendDbusPrivate	*priv;
-} PkBackendDbus;
-
-typedef struct
-{
-	GObjectClass	parent_class;
-} PkBackendDbusClass;
-
-GType		 pk_backend_dbus_get_type		(void);
-PkBackendDbus	*pk_backend_dbus_new			(void);
-gboolean	 pk_backend_dbus_refresh_cache		(PkBackendDbus		*backend_dbus,
-							 gboolean		 force);
-gboolean	 pk_backend_dbus_update_system		(PkBackendDbus		*backend_dbus);
-gboolean	 pk_backend_dbus_get_categories		(PkBackendDbus		*backend_dbus);
-gboolean	 pk_backend_dbus_resolve		(PkBackendDbus		*backend_dbus,
-							 PkBitfield	 filters,
-							 gchar			**packages);
-gboolean	 pk_backend_dbus_rollback		(PkBackendDbus		*backend_dbus,
-							 const gchar		*transaction_id);
-gboolean	 pk_backend_dbus_search_name		(PkBackendDbus		*backend_dbus,
-							 PkBitfield	 filters,
-							 const gchar		*search);
-gboolean	 pk_backend_dbus_search_details		(PkBackendDbus		*backend_dbus,
-							 PkBitfield	 filters,
-							 const gchar		*search);
-gboolean	 pk_backend_dbus_search_group		(PkBackendDbus		*backend_dbus,
-							 PkBitfield	 filters,
-							 const gchar		*search);
-gboolean	 pk_backend_dbus_search_file		(PkBackendDbus		*backend_dbus,
-							 PkBitfield	 filters,
-							 const gchar		*search);
-gboolean	 pk_backend_dbus_get_packages		(PkBackendDbus		*backend_dbus,
-							 PkBitfield	 filters);
-gboolean	 pk_backend_dbus_download_packages	(PkBackendDbus		*backend_dbus,
-							 gchar			**package_ids,
-							 const gchar		*directory);
-gboolean	 pk_backend_dbus_get_depends		(PkBackendDbus		*backend_dbus,
-							 PkBitfield	 filters,
-							 gchar			**package_ids,
-							 gboolean		 recursive);
-gboolean	 pk_backend_dbus_get_requires		(PkBackendDbus		*backend_dbus,
-							 PkBitfield	 filters,
-							 gchar			**package_ids,
-							 gboolean		 recursive);
-gboolean	 pk_backend_dbus_get_update_detail	(PkBackendDbus		*backend_dbus,
-							 gchar			**package_ids);
-gboolean	 pk_backend_dbus_get_details		(PkBackendDbus		*backend_dbus,
-							 gchar			**package_ids);
-gboolean	 pk_backend_dbus_get_files		(PkBackendDbus		*backend_dbus,
-							 gchar			**package_ids);
-gboolean	 pk_backend_dbus_remove_packages	(PkBackendDbus		*backend_dbus,
-							 gchar			**package_ids,
-							 gboolean		 allow_deps,
-							 gboolean		 autoremove);
-gboolean	 pk_backend_dbus_install_packages	(PkBackendDbus		*backend_dbus,
-							 gchar			**package_ids);
-gboolean	 pk_backend_dbus_update_packages	(PkBackendDbus		*backend_dbus,
-							 gchar			**package_ids);
-gboolean	 pk_backend_dbus_install_files		(PkBackendDbus		*backend_dbus,
-							 gboolean		 trusted,
-							 gchar			**full_paths);
-gboolean	 pk_backend_dbus_what_provides		(PkBackendDbus		*backend_dbus,
-							 PkBitfield	 filters,
-							 PkProvidesEnum		 provides,
-							 const gchar		*search);
-gboolean	 pk_backend_dbus_kill			(PkBackendDbus		*backend_dbus);
-gboolean	 pk_backend_dbus_repo_enable		(PkBackendDbus		*backend_dbus,
-							 const gchar		*rid,
-							 gboolean		 enabled);
-gboolean	 pk_backend_dbus_repo_set_data		(PkBackendDbus		*backend_dbus,
-							 const gchar		*rid,
-							 const gchar		*parameter,
-							 const gchar		*value);
-gboolean	 pk_backend_dbus_get_repo_list		(PkBackendDbus		*backend_dbus,
-							 PkBitfield	 filters);
-gboolean	 pk_backend_dbus_cancel			(PkBackendDbus		*backend_dbus);
-gboolean	 pk_backend_dbus_get_updates		(PkBackendDbus		*backend_dbus,
-							 PkBitfield	 filters);
-gboolean	 pk_backend_dbus_set_name		(PkBackendDbus		*backend_dbus,
-							 const gchar		*service);
-gboolean	 pk_backend_dbus_get_distro_upgrades	(PkBackendDbus		*backend_dbus);
-
-G_END_DECLS
-
-#endif /* __PK_BACKEND_DBUS_H */
diff --git a/src/pk-self-test.c b/src/pk-self-test.c
index 4dc4658..e8370d9 100644
--- a/src/pk-self-test.c
+++ b/src/pk-self-test.c
@@ -36,7 +36,6 @@ void pk_security_test (EggTest *test);
 void pk_time_test (EggTest *test);
 void pk_backend_test (EggTest *test);
 void pk_backend_test_spawn (EggTest *test);
-void pk_backend_test_dbus (EggTest *test);
 void pk_file_monitor_test (EggTest *test);
 void pk_engine_test (EggTest *test);
 
@@ -68,7 +67,6 @@ main (int argc, char **argv)
 	/* backend stuff */
 	pk_backend_test (test);
 	pk_backend_test_spawn (test);
-	pk_backend_test_dbus (test);
 
 	/* system */
 	pk_engine_test (test);
commit cf3700d81c953cc92ccc894508fd35eb918c5dca
Merge: bece89f... a2f7766...
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Apr 9 09:17:59 2009 +0100

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

commit a2f7766e0039ee2c548c673343344e9336f02906
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Apr 8 20:37:23 2009 +0100

    APT: Trivial. Add the update-packagekit-app-data to the extra dist

diff --git a/backends/apt/Makefile.am b/backends/apt/Makefile.am
index d6e31d4..54d0a87 100644
--- a/backends/apt/Makefile.am
+++ b/backends/apt/Makefile.am
@@ -19,6 +19,9 @@ sbin_SCRIPTS =						\
 	update-packagekit-app-data			\
 	$(NULL)
 
+EXTRA_DIST =						\
+	update-packagekit-app-data			\
+	$(NULL)
 
 install-data-hook:
 	chmod a+rx $(DESTDIR)$(libexecdir)/*.py
commit 275a50ec454af6bdace717dce217df656a620d99
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Apr 8 19:36:49 2009 +0100

    APT: Trivial. update-packagekit-app-data is a script and not a binary

diff --git a/backends/apt/Makefile.am b/backends/apt/Makefile.am
index bcb3728..d6e31d4 100644
--- a/backends/apt/Makefile.am
+++ b/backends/apt/Makefile.am
@@ -15,7 +15,7 @@ packagekitpython_PYTHON =  				\
         aptbackend.py					\
         $(NULL)
 
-sbin_PROGRAMS =						\
+sbin_SCRIPTS =						\
 	update-packagekit-app-data			\
 	$(NULL)
 
commit 468fe579ff391316eacb500c6b6d34957bf624de
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Apr 8 20:23:05 2009 +0200

    APT: Revert changes to extract application information from desktop files

diff --git a/backends/apt/update-packagekit-app-data b/backends/apt/update-packagekit-app-data
index 06cc384..b0e6a57 100755
--- a/backends/apt/update-packagekit-app-data
+++ b/backends/apt/update-packagekit-app-data
@@ -3,8 +3,6 @@
 # Authors: Michael Vogt <mvo at ubuntu.com>
 #          Sebastian Heinlein <devel at glatzor.de>
 
-import re
-import sqlite3
 import sys
 import glob
 import os
@@ -16,9 +14,6 @@ from optparse import OptionParser
 
 import gdbm
 
-RE_TRANSLATED_NAME = "Name\[([a-z]+)\]"
-RE_TRANSLATED_COMMENT = "Comment\[([a-z]+)\]"
-
 try:
     import xdg.DesktopEntry
 except ImportError, e:
@@ -28,12 +23,6 @@ except ImportError, e:
 def generate_mime_map(desktop_dir, cache_dir):
     dicts = { 'mime':{}, 'codec':{} }
 
-    db = sqlite3.connect("/var/lib/app-install/desktop.db")
-    db_cursor = db.cursor()
-    db_cursor.execute("DELETE FROM translations")
-    db_cursor.execute("DELETE FROM applications")
-    db.commit()
-
     def record_provider(de, cp, defield,dictname):
         try: 
             keys = de.get(defield, list=True)
@@ -65,39 +54,6 @@ def generate_mime_map(desktop_dir, cache_dir):
         record_provider(de, cp, 'MimeType','mime')
         record_provider(de, cp, 'X-AppInstall-Codecs','codec')
 
-        id = os.path.splitext(os.path.basename(fn))[0]
-        name = de.get("Name", locale=False)
-        categories = de.get("Categories", locale=False)
-        comment = de.get("Comment", locale=False)
-        names = {}
-        comments = {}
-        db_cursor.execute("""INSERT INTO applications
-                             VALUES (?, ?, ?, ?, ?, ?)""",
-                          (id, package, categories, component, name, comment))
-        # Get localised name and comments
-        if de.defaultGroup in de.content:
-            for key in de.content[de.defaultGroup]:
-                match_name = re.match(RE_TRANSLATED_NAME, key)
-                if match_name is not None:
-                    value = de.content[de.defaultGroup][key]
-                    lang = match_name.group(1)
-                    names[lang] = value.decode("utf-8", "ignore")
-                    if lang not in comments:
-                        comments[lang] = ""
-                match_comment = re.match(RE_TRANSLATED_COMMENT, key)
-                if match_comment is not None:
-                    value = de.content[de.defaultGroup][key]
-                    lang = match_comment.group(1)
-                    comments[lang] = value.decode("utf-8", "ignore")
-                    if lang not in names:
-                        names[lang] = ""
-        for lang in names:
-            db_cursor.execute("""INSERT INTO translations
-                                 VALUES (?, ?, ?, ?)""",
-                              (id, names[lang], comments[lang], lang))
-    db.commit()
-    db_cursor.close()
-
     for (dictname, dict) in dicts.iteritems():
         g = gdbm.open(os.path.join(cache_dir,
                                    dictname+"-map.gdbm"),
commit 4f9b3a39e700d018d05365840c5b459e42db6561
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Apr 8 20:20:59 2009 +0200

    APT: install the script to create the mime and codec map

diff --git a/backends/apt/Makefile.am b/backends/apt/Makefile.am
index c6ddeff..bcb3728 100644
--- a/backends/apt/Makefile.am
+++ b/backends/apt/Makefile.am
@@ -15,6 +15,11 @@ packagekitpython_PYTHON =  				\
         aptbackend.py					\
         $(NULL)
 
+sbin_PROGRAMS =						\
+	update-packagekit-app-data			\
+	$(NULL)
+
+
 install-data-hook:
 	chmod a+rx $(DESTDIR)$(libexecdir)/*.py
 
commit 39198d1e0df29b0618eeb42e3a745176a9ae3754
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Apr 8 20:17:33 2009 +0200

    APT: Set the path to the codec and mime type handler map correctly

diff --git a/backends/apt/aptbackend.py b/backends/apt/aptbackend.py
index efa06d0..ab64945 100755
--- a/backends/apt/aptbackend.py
+++ b/backends/apt/aptbackend.py
@@ -1354,7 +1354,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                            "The search term is invalid")
                 return
             codec = "%s:%s" % (match.group(1), match.group(2))
-            db = get_mapping_db("/var/cache/app-install/gai-codec-map.gdbm")
+            db = get_mapping_db("/var/lib/PackageKit/codec-map.gdbm")
             if db == None:
                 self.error(ERROR_INTERNAL_ERROR,
                            "Failed to open codec mapping database")
@@ -1373,7 +1373,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             # Emit packages that contain an application that can handle
             # the given mime type
             handlers = set()
-            db = get_mapping_db("/var/cache/app-install/gai-mime-map.gdbm")
+            db = get_mapping_db("/var/lib/PackageKit/mime-map.gdbm")
             if db == None:
                 return
             if db.has_key(search):
commit 807e2e8c6143cfbd3ad6da1f2a50e454e99266d9
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Apr 8 20:13:45 2009 +0200

    APT: Install the helper correctly

diff --git a/backends/apt/Makefile.am b/backends/apt/Makefile.am
index fbec9b2..c6ddeff 100644
--- a/backends/apt/Makefile.am
+++ b/backends/apt/Makefile.am
@@ -1,5 +1,3 @@
-NULL = 
-
 plugindir = $(PK_PLUGIN_DIR)
 plugin_LTLIBRARIES = libpk_backend_apt.la
 libpk_backend_apt_la_SOURCES = pk-backend-apt.c
@@ -7,8 +5,8 @@ libpk_backend_apt_la_LIBADD = $(PK_PLUGIN_LIBS)
 libpk_backend_apt_la_LDFLAGS = -module -avoid-version
 libpk_backend_apt_la_CFLAGS = $(PK_PLUGIN_CFLAGS) $(WARNINGFLAGS_C)
 
-dbusinstancedir = $(LIBEXECDIR)
-dbusinstance_DATA =                                     \
+helperdir = $(datadir)/PackageKit/helpers/apt
+dist_helper_DATA =                      
 	pk-backend-apt.py				\
         $(NULL)
 
@@ -17,14 +15,9 @@ packagekitpython_PYTHON =  				\
         aptbackend.py					\
         $(NULL)
 
-EXTRA_DIST =                                            \
-        $(dbusinstance_DATA)                            \
-        $(NULL)
-
 install-data-hook:
 	chmod a+rx $(DESTDIR)$(libexecdir)/*.py
 
 clean-local :
 	rm -f *~
 	rm -f *.pyc
-
commit bece89f5e73c1f3c1888a0cdc18a40dfe3b214a8
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Apr 8 12:52:58 2009 +0100

    dummy: allow setting the use-gpg and use-eula variables in runtime

diff --git a/backends/dummy/pk-backend-dummy.c b/backends/dummy/pk-backend-dummy.c
index 13b54b0..c6f218b 100644
--- a/backends/dummy/pk-backend-dummy.c
+++ b/backends/dummy/pk-backend-dummy.c
@@ -22,6 +22,7 @@
 #include <gmodule.h>
 #include <glib.h>
 #include <string.h>
+#include <stdlib.h>
 #include <packagekit-glib/packagekit.h>
 
 #include <pk-backend.h>
@@ -1035,6 +1036,17 @@ backend_repo_set_data (PkBackend *backend, const gchar *rid, const gchar *parame
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_REQUEST);
 	egg_warning ("REPO '%s' PARAMETER '%s' TO '%s'", rid, parameter, value);
+
+	if (g_strcmp0 (parameter, "use-blocked") == 0)
+		_use_blocked = atoi (value);
+	else if (g_strcmp0 (parameter, "use-eula") == 0)
+		_use_eula = atoi (value);
+	else if (g_strcmp0 (parameter, "use-gpg") == 0)
+		_use_gpg = atoi (value);
+	else if (g_strcmp0 (parameter, "use-distro-upgrade") == 0)
+		_use_distro_upgrade = atoi (value);
+	else
+		pk_backend_message (backend, PK_MESSAGE_ENUM_PARAMETER_INVALID, "invalid parameter %s", parameter);
 	pk_backend_finished (backend);
 }
 
commit bc857b47daa33821e79a55d781307668c734e73f
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Apr 8 12:51:40 2009 +0100

    bugfix: display Message()'s in pkcon rather than just ignoring them

diff --git a/client/pk-console.c b/client/pk-console.c
index ac23178..1d8df81 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -1464,6 +1464,16 @@ pk_console_details_cb (PkClient *client, const PkDetailsObj *details, gpointer d
 }
 
 /**
+ * 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
@@ -1855,12 +1865,16 @@ main (int argc, char *argv[])
 			  G_CALLBACK (pk_console_require_restart_cb), NULL);
 	g_signal_connect (client_async, "error-code",
 			  G_CALLBACK (pk_console_error_code_cb), NULL);
+	g_signal_connect (client_async, "message",
+			  G_CALLBACK (pk_watch_message_cb), NULL);
 
 	client_task = pk_client_new ();
 	pk_client_set_use_buffer (client_task, TRUE, NULL);
 	pk_client_set_synchronous (client_task, TRUE, NULL);
 	g_signal_connect (client_task, "finished",
 			  G_CALLBACK (pk_console_finished_cb), NULL);
+	g_signal_connect (client_task, "message",
+			  G_CALLBACK (pk_watch_message_cb), NULL);
 
 	client_install_files = pk_client_new ();
 	g_signal_connect (client_install_files, "finished",
commit bf931d3137fdd82f7c9f1c157ee327ed8b894668
Merge: 1389fd8... f119d88...
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Apr 8 12:34:12 2009 +0200

    Merge branch 'master' into apt-dispatcher

commit 1389fd8cadf4401559a9e405bd26799b8390d76e
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Apr 8 11:22:25 2009 +0100

    APT: Use the new fetch_binary method to download packages

diff --git a/backends/apt/aptbackend.py b/backends/apt/aptbackend.py
index 9711ff1..efa06d0 100755
--- a/backends/apt/aptbackend.py
+++ b/backends/apt/aptbackend.py
@@ -998,6 +998,16 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         '''
         Implement the {backend}-download-packages functionality
         '''
+        def get_range(versions, total):
+            """
+            Calculate the start and end point of a package download progress.
+            """
+            downloaded = 0
+            for ver in versions:
+                start = downloaded * 100 / total
+                end = start + ver.size * 100 / total
+                yield ver, start, end
+                downloaded += ver.size
         pklog.info("Downloading packages: %s" % ids)
         self.status(STATUS_DOWNLOAD)
         self.allow_cancel(True)
@@ -1009,47 +1019,31 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             return
         # Setup the fetcher
         self._check_init(prange=(0,10))
-        progress = PackageKitFetchProgress(self, prange=(10,90))
-        fetcher = apt_pkg.GetAcquire(progress)
-        pm = apt_pkg.GetPackageManager(self._cache._depcache)
-        recs = apt_pkg.GetPkgRecords(self._cache._cache)
-        list = apt_pkg.GetPkgSourceList()
-        list.ReadMainList()
-        # Mark installed packages for reinstallation and not installed packages
-        # for installation without dependencies
+        versions = []
+        total = 0
+        # Check if all ids are vaild and calculate the total download size
         for id in ids:
-            pkg = self._find_package_by_id(id)
-            if pkg == None:
+            pkg_ver = self._get_pkg_version_by_id(id)
+            if pkg_ver is None:
                 self.error(ERROR_PACKAGE_NOT_FOUND,
                            "There is no package %s" % id)
                 return
-            if pkg.isInstalled:
-                self._cache._depcache.SetReInstall(pkg._pkg, True)
-            else:
-                self._cache._depcache.MarkInstall(pkg._pkg, False)
-        # Download 
-        pm.GetArchives(fetcher, list, recs)
-        res = fetcher.Run()
-        self._cache.clear()
-        self.percentage(95)
-        # Copy files from cache to final destination
-        for item in fetcher.Items:
-            pklog.debug("Download item: %s" % item)
-            if (item.Status != item.StatDone and not item.StatIdle) or \
-                res == fetcher.ResultCancelled:
+            if not pkg_ver.downloadable:
                 self.error(ERROR_PACKAGE_DOWNLOAD_FAILED,
-                           "Failed to download %s" % item.DescURI)
+                           "package %s isn't downloadable" % id)
                 return
-            pklog.debug("Copying %s to %s ..." % (item.DestFile, dest))
+            total += pkg_ver.size
+            versions.append(pkg_ver)
+        # Start the download
+        for ver, start, end in get_range(versions, total):
+            progress = PackageKitFetchProgress(self, prange=(start, end))
             try:
-                shutil.copy(item.DestFile, dest)
-            except Exception, e:
-                self.error(ERROR_INTERNAL_ERROR,
-                           "Failed to copy %s to %s: %s" % (item.DestFile,
-                                                                dest, e))
+                ver.fetch_binary(dest, progress)
+            except Exception, error:
+                self.error(ERROR_PACKAGE_DOWNLOAD_FAILED, error.message)
                 return
         self.percentage(100)
- 
+
     @unlock_cache_afterwards
     def install_packages(self, ids):
         '''
commit f119d88ded54c4f3a83c16b57102d6116f1a3cb9
Author: ifelix <ifelix at fedoraproject.org>
Date:   Wed Apr 8 01:44:08 2009 +0000

    Sending translation for po/ta.po

diff --git a/po/ta.po b/po/ta.po
new file mode 100644
index 0000000..3834e6c
--- /dev/null
+++ b/po/ta.po
@@ -0,0 +1,1077 @@
+# translation of packagekit.master.PackageKit.po to Tamil
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# I. Felix <ifelix at redhat.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: packagekit.master.PackageKit\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-04-03 08:09+0000\n"
+"PO-Revision-Date: 2009-04-08 06:40+0530\n"
+"Last-Translator: I. Felix <ifelix at redhat.com>\n"
+"Language-Team: Tamil <fedora-trans-ta at redhat.com>\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\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+
+#. TRANSLATORS: this is an atomic transaction
+#: ../client/pk-console.c:234
+msgid "Transaction"
+msgstr "பரிமாற்றம்"
+
+#. TRANSLATORS: this is the time the transaction was started in system timezone
+#: ../client/pk-console.c:236
+msgid "System time"
+msgstr "கணினி நேரம்"
+
+#. TRANSLATORS: this is if the transaction succeeded or not
+#: ../client/pk-console.c:238
+msgid "Succeeded"
+msgstr "வெற்றியடைதல்"
+
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:238 ../client/pk-console.c:405
+msgid "True"
+msgstr "சரி"
+
+#: ../client/pk-console.c:238 ../client/pk-console.c:405
+msgid "False"
+msgstr "தவறு"
+
+#. TRANSLATORS: this is the transactions role, e.g. "update-system"
+#: ../client/pk-console.c:240
+msgid "Role"
+msgstr "பங்கு"
+
+#. TRANSLATORS: this is The duration of the transaction
+#: ../client/pk-console.c:245
+msgid "Duration"
+msgstr "இடைவெளி"
+
+#: ../client/pk-console.c:245
+msgid "(seconds)"
+msgstr "(நொடிகள்"
+
+#. TRANSLATORS: this is The command line used to do the action
+#: ../client/pk-console.c:249
+msgid "Command line"
+msgstr "கட்டளை வரி"
+
+#. TRANSLATORS: this is the user ID of the user that started the action
+#: ../client/pk-console.c:251
+msgid "User ID"
+msgstr "பயனர் ஐடி"
+
+#. TRANSLATORS: this is the username, e.g. hughsie
+#: ../client/pk-console.c:258
+msgid "Username"
+msgstr "பயனர் பெயர்"
+
+#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
+#: ../client/pk-console.c:262
+msgid "Real name"
+msgstr "உண்மையான பெயர்"
+
+#: ../client/pk-console.c:270
+msgid "Affected packages:"
+msgstr "பாதிக்கப்பட்ட தொகுதிகள்:"
+
+#: ../client/pk-console.c:272
+msgid "Affected packages: None"
+msgstr "பாதிக்கப்பட்ட தொகுதிகள்: ஒன்றுமில்லாத"
+
+#. TRANSLATORS: this is the distro, e.g. Fedora 10
+#: ../client/pk-console.c:297
+msgid "Distribution"
+msgstr "விநியோகம்"
+
+#. TRANSLATORS: this is type of update, stable or testing
+#: ../client/pk-console.c:299
+msgid "Type"
+msgstr "வகை"
+
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:301 ../client/pk-console.c:324
+msgid "Summary"
+msgstr "சுருக்கம்"
+
+#. TRANSLATORS: this is the group category name
+#: ../client/pk-console.c:313
+msgid "Category"
+msgstr "வகை"
+
+#. TRANSLATORS: this is group identifier
+#: ../client/pk-console.c:315
+msgid "ID"
+msgstr "ID"
+
+#. TRANSLATORS: this is the parent group
+#: ../client/pk-console.c:318
+msgid "Parent"
+msgstr "பெற்றோர்"
+
+#. TRANSLATORS: this is the name of the parent group
+#: ../client/pk-console.c:321
+msgid "Name"
+msgstr "பெயர்"
+
+#. TRANSLATORS: this is preferred icon for the group
+#: ../client/pk-console.c:327
+msgid "Icon"
+msgstr "சின்னம்"
+
+#. TRANSLATORS: this is a header for the package that can be updated
+#: ../client/pk-console.c:342
+msgid "Details about the update:"
+msgstr "மேம்படுத்துதல் பற்றிய விவரங்கள்:"
+
+#. TRANSLATORS: details about the update, package name and version
+#: ../client/pk-console.c:344
+msgid "Package"
+msgstr "தொகுப்பு"
+
+#. TRANSLATORS: details about the update, any packages that this update updates
+#: ../client/pk-console.c:347
+msgid "Updates"
+msgstr "மேம்படுத்தல்கள"
+
+#. TRANSLATORS: details about the update, any packages that this update obsoletes
+#: ../client/pk-console.c:351
+msgid "Obsoletes"
+msgstr "நீக்கப்பட்டது"
+
+#. TRANSLATORS: details about the update, the vendor URLs
+#: ../client/pk-console.c:355
+msgid "Vendor"
+msgstr "விற்பனையாளர்"
+
+#. TRANSLATORS: details about the update, the bugzilla URLs
+#: ../client/pk-console.c:359
+msgid "Bugzilla"
+msgstr "பக்ஸிலா"
+
+#. TRANSLATORS: details about the update, the CVE URLs
+#: ../client/pk-console.c:363
+msgid "CVE"
+msgstr "CVE"
+
+#. TRANSLATORS: details about the update, if the package requires a restart
+#: ../client/pk-console.c:367
+msgid "Restart"
+msgstr "மறுதுவக்கு"
+
+#. TRANSLATORS: details about the update, any description of the update
+#: ../client/pk-console.c:371
+msgid "Update text"
+msgstr "மேம்படுத்தப்பட்ட உரை"
+
+#. TRANSLATORS: details about the update, the changelog for the package
+#: ../client/pk-console.c:375
+msgid "Changes"
+msgstr "மாற்றங்கள்"
+
+#. TRANSLATORS: details about the update, the ongoing state of the update
+#: ../client/pk-console.c:379
+msgid "State"
+msgstr "நிலை"
+
+#. TRANSLATORS: details about the update, date the update was issued
+#: ../client/pk-console.c:384
+msgid "Issued"
+msgstr "வழங்கப்பட்டது"
+
+#. TRANSLATORS: details about the update, date the update was updated
+#: ../client/pk-console.c:389
+msgid "Updated"
+msgstr "மேம்படுத்தப்பட்டது"
+
+#: ../client/pk-console.c:476 ../client/pk-console.c:478
+msgid "Percentage"
+msgstr "சதவீதம்"
+
+#: ../client/pk-console.c:478
+msgid "Unknown"
+msgstr "தெரியாத"
+
+#. TRANSLATORS: a package requires the system to be restarted
+#: ../client/pk-console.c:529
+msgid "System restart required by:"
+msgstr "கணினிக்கு மறுதுவக்கம் தேவைப்படுகிறது:"
+
+#. TRANSLATORS: a package requires the session to be restarted
+#: ../client/pk-console.c:532
+msgid "Session restart required:"
+msgstr "அமர்வுக்கு மறுதுவக்கம் தேவைப்படுகிறது:"
+
+#. TRANSLATORS: a package requires the application to be restarted
+#: ../client/pk-console.c:535
+msgid "Application restart required by:"
+msgstr "பயன்பாடிற்கு மறுதுவக்கம் தேவைப்படுகிறது:"
+
+#. TRANSLATORS: a package needs to restart they system
+#: ../client/pk-console.c:572
+msgid "Please restart the computer to complete the update."
+msgstr "கணினியை மீண்டும் துவக்கி மேம்படுத்துதலை முடிக்கவும்."
+
+#. TRANSLATORS: a package needs to restart the session
+#: ../client/pk-console.c:575
+msgid "Please logout and login to complete the update."
+msgstr "வெளியேறிவிட்டு மற்றும் மேம்படுத்துதலை முடிக்க உள்நுழையவும்."
+
+#. TRANSLATORS: a package needs to restart the application
+#: ../client/pk-console.c:578
+msgid "Please restart the application as it is being used."
+msgstr "பயன்படுத்தபட்டிருந்தாலும் அதன் பயன்பாட்டை மீண்டும் துவக்கவும்."
+
+#. TRANSLATORS: The package is already installed on the system
+#: ../client/pk-console.c:691
+#, 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:699
+#, 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:724 ../client/pk-console.c:751
+#: ../client/pk-console.c:847 ../client/pk-console.c:964
+#: ../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: There was an error installing the packages. The detailed error follows
+#: ../client/pk-console.c:732 ../client/pk-console.c:1360
+#, 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:759
+#, 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:815
+#, 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:838 ../client/pk-console.c:876
+#: ../client/pk-console.c:909
+#, 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:888
+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:895
+msgid "Proceed removing additional packages?"
+msgstr "கூடுதல் தொகுப்புகளை நீக்குதல் நடைபெற்று கொண்டிருக்கிறது?"
+
+#. TRANSLATORS: We did not remove any packages
+#: ../client/pk-console.c:900
+msgid "The package removal was canceled!"
+msgstr "தொகுப்புகளை நீக்குவது ரத்து செய்யப்பட்டது!"
+
+#. TRANSLATORS: The package name was not found in any software sources
+#: ../client/pk-console.c:941
+#, 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:972
+#, 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:999 ../client/pk-console.c:1008
+#, c-format
+msgid "This tool could not update %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:1030 ../client/pk-console.c:1038
+#, 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:1060 ../client/pk-console.c:1068
+#, 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:1090 ../client/pk-console.c:1098
+#, 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:1120
+#, 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:1128
+#, 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:1150
+#, c-format
+msgid "File already exists: %s"
+msgstr "கோப்பு ஏற்கனவை வெளியேற்றப்பட்டது: %s"
+
+#. TRANSLATORS: follows a list of packages to install
+#: ../client/pk-console.c:1155 ../client/pk-console.c:1211
+#: ../client/pk-console.c:1286
+msgid "Getting package list"
+msgstr "தொகுப்புகளின் பட்டியல் பெறப்படுகிறது"
+
+#. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
+#: ../client/pk-console.c:1161 ../client/pk-console.c:1217
+#: ../client/pk-console.c:1292
+#, 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:1172
+#, c-format
+msgid "Failed to save to disk"
+msgstr "வட்டில் சேமிப்பதில் தோல்வி"
+
+#. TRANSLATORS: There was an error getting the list. The filename follows
+#: ../client/pk-console.c:1206 ../client/pk-console.c:1281
+#, c-format
+msgid "File does not exist: %s"
+msgstr "கோப்பு வெளியேற்றப்படவில்லை: %s"
+
+#. TRANSLATORS: header to a list of packages newly added
+#: ../client/pk-console.c:1238
+msgid "Packages to add"
+msgstr "சேர்ப்பதற்கான தொகுப்புகள்"
+
+#. TRANSLATORS: header to a list of packages removed
+#: ../client/pk-console.c:1246
+msgid "Packages to remove"
+msgstr "நீக்கவேண்டிய தொகுப்புகள்"
+
+#. TRANSLATORS: We didn't find any differences
+#: ../client/pk-console.c:1314
+#, c-format
+msgid "No new packages need to be installed"
+msgstr "புதிய தொகுப்புகள் நிறுவப்பட வேண்டியுள்ளது"
+
+#. TRANSLATORS: follows a list of packages to install
+#: ../client/pk-console.c:1320
+msgid "To install"
+msgstr "நிறுவுவதற்கு"
+
+#. TRANSLATORS: searching takes some time....
+#: ../client/pk-console.c:1332
+msgid "Searching for package: "
+msgstr "தொகுப்பினை தேடுகிறது: "
+
+#. TRANSLATORS: package was not found -- this is the end of a string ended in ...
+#: ../client/pk-console.c:1336
+msgid "not found."
+msgstr "காணப்படவில்லை."
+
+#. TRANSLATORS: We didn't find any packages to install
+#: ../client/pk-console.c:1347
+#, c-format
+msgid "No packages can be found to install"
+msgstr "நிறுவுவதற்கு தொகுப்புகள் எதுவும் காணப்படவில்லை"
+
+#. TRANSLATORS: installing new packages from package list
+#: ../client/pk-console.c:1353
+msgid "Installing packages"
+msgstr "நிறுவப்பட்ட தொகுப்புகள்"
+
+#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
+#: ../client/pk-console.c:1389
+#, 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:1397
+#, c-format
+msgid "This tool could not get the update details for %s: %s"
+msgstr "This tool could not get the update details for %s: %s"
+
+#. TRANSLATORS: This was an unhandled error, and we don't have _any_ context
+#: ../client/pk-console.c:1443
+msgid "Error:"
+msgstr "பிழை:"
+
+#. TRANSLATORS: This a list of details about the package
+#: ../client/pk-console.c:1457
+msgid "Package description"
+msgstr "தொகுப்பு விளக்கம்"
+
+#. TRANSLATORS: This a list files contained in the package
+#: ../client/pk-console.c:1491
+msgid "Package files"
+msgstr "தொகுப்பு கோப்புகள்"
+
+#. TRANSLATORS: This where the package has no files
+#: ../client/pk-console.c:1499
+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:1522
+msgid "Repository signature required"
+msgstr "நம்பிக்கையான கையெழுத்து தேவைப்படுகிறது"
+
+#. TRANSLATORS: This a prompt asking the user to import the security key
+#: ../client/pk-console.c:1532
+msgid "Do you accept this signature?"
+msgstr "நீங்கள் இந்த கையெமுத்து ஏற்றுக் கொள்கிறீர்களா ?"
+
+#. TRANSLATORS: This is where the user declined the security key
+#: ../client/pk-console.c:1536
+msgid "The signature was not accepted."
+msgstr "கையேழுத்து ஏற்றுக் கொள்ளப்படவில்லை."
+
+#. TRANSLATORS: This a request for a EULA
+#: ../client/pk-console.c:1570
+msgid "End user license agreement required"
+msgstr "இறுதியான பயனரின் உரிம ஒப்பந்தம் தேவைப்படுகிறது"
+
+#. TRANSLATORS: This a prompt asking the user to agree to the license
+#: ../client/pk-console.c:1577
+msgid "Do you agree to this license?"
+msgstr "இந்த உரிமத்தை நீங்கள் ஏற்று கொள்கிறீர்களா?"
+
+#. TRANSLATORS: This is where the user declined the license
+#: ../client/pk-console.c:1581
+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:1610
+msgid "The daemon crashed mid-transaction!"
+msgstr "மத்திய பரிமாற்றத்தின் போது டோமோன் நொறுக்கப்பட்டது!"
+
+#. TRANSLATORS: This is the header to the --help menu
+#: ../client/pk-console.c:1663
+msgid "PackageKit Console Interface"
+msgstr "PackageKit பணியக முகப்பு"
+
+#. these are commands we can use with pkcon
+#: ../client/pk-console.c:1665
+msgid "Subcommands:"
+msgstr "துணைக்கட்டளைகள்:"
+
+#. TRANSLATORS: command line argument, if we should show debugging information
+#. TRANSLATORS: if we should show debugging data
+#: ../client/pk-console.c:1757 ../client/pk-generate-pack.c:185
+#: ../client/pk-monitor.c:125
+#: ../contrib/command-not-found/pk-command-not-found.c:518
+#: ../src/pk-main.c:199
+msgid "Show extra debugging information"
+msgstr "கூடுதல் பிழைதிருத்த தகவலைக் காட்டு"
+
+#. TRANSLATORS: command line argument, just show the version string
+#: ../client/pk-console.c:1760 ../client/pk-monitor.c:127
+msgid "Show the program version and exit"
+msgstr "நிகழ்ச்சி பதிப்பு மற்றும் வெளியேறுவதைக் காட்டு"
+
+#. TRANSLATORS: command line argument, use a filter to narrow down results
+#: ../client/pk-console.c:1763
+msgid "Set the filter, e.g. installed"
+msgstr "வடோப்பினை"
+
+#. TRANSLATORS: command line argument, work asynchronously
+#: ../client/pk-console.c:1766
+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:1793
+msgid "This tool could not connect to system DBUS."
+msgstr "இந்தக் கருவியால் கணினி DBUSஐ இணைக்க முடியாது."
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1880
+msgid "The filter specified was invalid"
+msgstr "வடிப்பி குறிப்பிடுவது தவறானது"
+
+#. TRANSLATORS: a search type can be name, details, file, etc
+#: ../client/pk-console.c:1898
+msgid "A search type is required, e.g. name"
+msgstr "ஒரு தேடும் வகை தேவைப்படுகிறது, எ.கா. பெயர்"
+
+#. TRANSLATORS: the user needs to provide a search term
+#: ../client/pk-console.c:1904 ../client/pk-console.c:1912
+#: ../client/pk-console.c:1920 ../client/pk-console.c:1928
+msgid "A search term is required"
+msgstr "ஒரு தேடும் சொல் தேவைப்படுகிறது"
+
+#. TRANSLATORS: the search type was provided, but invalid
+#: ../client/pk-console.c:1934
+msgid "Invalid search type"
+msgstr "தவறான தேடும் வகை"
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1940
+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:1948
+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:1956
+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:1963
+msgid "A destination directory and then the package names to download are required"
+msgstr "ஒரு இலக்கு அடைவு மற்றும் தொகுப்பு பெயர்கள் பதிவிறக்க தேவைப்படுகிறது"
+
+#. TRANSLATORS: the directory does not exist, so we can't continue
+#: ../client/pk-console.c:1969
+msgid "Directory not found"
+msgstr "அடைவு காணப்படவில்லை"
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1976
+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:1985
+msgid "A transaction identifier (tid) is required"
+msgstr "பரிமாற்ற கண்டுபிடிப்பாளர் (tid) தேவைப்படுகிறது"
+
+#. TRANSLATORS: The user did not specify a package name
+#: ../client/pk-console.c:2001
+msgid "A package name to resolve is required"
+msgstr "தொகுப்பு பெயர் மறுதீர்வுக்கு தேவைப்படுகிறது"
+
+#. TRANSLATORS: The user did not specify a repository (software source) name
+#: ../client/pk-console.c:2009 ../client/pk-console.c:2017
+msgid "A repository name is required"
+msgstr "நம்பகமான ஒரு பெயர் தேவைப்படுகிறது"
+
+#. TRANSLATORS: The user didn't provide any data
+#: ../client/pk-console.c:2025
+msgid "A repo name, parameter and value are required"
+msgstr "ஒரு ரெபோ பெநர், அளவுரு மற்றும் மதிப்பு தேவைப்படுகிறது"
+
+#. TRANSLATORS: The user didn't specify what action to use
+#: ../client/pk-console.c:2038
+msgid "An action, e.g. 'update-system' is required"
+msgstr "செயலுக்கு, எ.கா. 'மேம்படுத்தப்பட்ட கணினி' தேவைப்படுகிறது"
+
+#. TRANSLATORS: The user specified an invalid action
+#: ../client/pk-console.c:2044
+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:2050
+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:2059 ../client/pk-console.c:2070
+#: ../client/pk-console.c:2078 ../client/pk-console.c:2094
+#: ../client/pk-console.c:2102 ../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:2086
+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:2110
+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:2119 ../client/pk-console.c:2128
+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:2181
+#, c-format
+msgid "Option '%s' is not supported"
+msgstr " '%s' விருப்பம் துணைபுரியவில்லை"
+
+#. TRANSLATORS: User does not have permission to do this
+#: ../client/pk-console.c:2194
+msgid "Incorrect privileges for this operation"
+msgstr "இந்த செயல்பாடுக்கு தவறான முன்னுரிமைகள்"
+
+#. TRANSLATORS: Generic failure of what they asked to do
+#: ../client/pk-console.c:2197
+msgid "Command failed"
+msgstr "கட்டளை தோல்வியுற்றது"
+
+#. TRANSLATORS: This is the state of the transaction
+#: ../client/pk-generate-pack.c:101
+msgid "Downloading"
+msgstr "பதிவிறக்குகிறது"
+
+#. TRANSLATORS: This is when the main packages are being downloaded
+#: ../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: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:188
+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 "வெளியேறும் கோப்பு அல்லது அடைவு (தற்போது பயன்படுத்தப்படுகிற அடைவு தவிர்க்கப்பட்டால்)"
+
+#. TRANSLATORS: put a list of packages in the pack
+#: ../client/pk-generate-pack.c:194
+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
+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
+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
+msgid "Both options selected."
+msgstr "இரண்டு விருப்பங்களும் தேர்ந்தெடுக்கப்பட்டது."
+
+#. TRANSLATORS: This is when the user fails to supply the output
+#: ../client/pk-generate-pack.c:249
+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
+msgid "The package manager cannot perform this type of operation."
+msgstr "தொகுப்பு மேலாளர் இந்த வகையான செயலை செய்ய முடியாது."
+
+#. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
+#: ../client/pk-generate-pack.c:285
+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:301
+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:304
+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:317
+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:327
+msgid "Failed to open package list."
+msgstr "தொகுப்பு பட்டியலை திறப்பதில் தோல்வி."
+
+#. TRANSLATORS: The package name is being matched up to available packages
+#: ../client/pk-generate-pack.c:338
+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:342
+#, 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:359
+msgid "Creating service pack..."
+msgstr "சேவை தொகுப்பை உருவாக்குகிறது..."
+
+#. TRANSLATORS: we succeeded in making the file
+#: ../client/pk-generate-pack.c:366
+#, c-format
+msgid "Service pack created '%s'"
+msgstr "சேவை தொகுப்பு '%s'ஐ உருவாக்கியது"
+
+#. TRANSLATORS: we failed to make te file
+#: ../client/pk-generate-pack.c:371
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr "'%s' உருவாக்குவதில் தோல்வி: %s"
+
+#. TRANSLATORS: this is a program that monitors PackageKit
+#: ../client/pk-monitor.c:143
+msgid "PackageKit Monitor"
+msgstr "PackageKit திரை"
+
+#. 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 "தொகுப்புகள் காணப்படவில்லை"
+
+#. 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 "ஒன்றுக்கு மேற்பட்ட தொகுப்புகள் பொருந்துகிறது:"
+
+#. TRANSLATORS: This finds out which package in the list to use
+#: ../client/pk-tools-common.c:137
+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: we failed to find the package, this shouldn't happen
+#: ../contrib/command-not-found/pk-command-not-found.c:369
+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:493
+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:534
+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:556
+msgid "Command not found."
+msgstr "கட்டளைக் காணப்படவில்லை."
+
+#. TRANSLATORS: tell the user what we think the command is
+#: ../contrib/command-not-found/pk-command-not-found.c:563
+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:572
+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
+#: ../contrib/command-not-found/pk-command-not-found.c:584
+#: ../contrib/command-not-found/pk-command-not-found.c:593
+msgid "Similar commands are:"
+msgstr "ஒரே மாதிரியான கட்டளைகள்:"
+
+#. TRANSLATORS: ask the user to choose a file to run
+#: ../contrib/command-not-found/pk-command-not-found.c:600
+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:615
+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:620
+#, 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:641
+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:650
+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:658
+msgid "Please choose a package to install"
+msgstr "நிறுவுவதற்கு ஒரு கோப்பினை தேர்ந்தெடு"
+
+#. TRANSLATORS: when we are getting data from the daemon
+#: ../contrib/browser-plugin/src/contents.cpp:298
+msgid "Getting package information..."
+msgstr "தொகுப்புகளின் தகவலை பெறுகிறது..."
+
+#. TRANSLATORS: run an applicaiton
+#: ../contrib/browser-plugin/src/contents.cpp:304
+#, c-format
+msgid "Run %s"
+msgstr "%sஐ இயக்கு"
+
+#. TRANSLATORS: show the installed version of a package
+#: ../contrib/browser-plugin/src/contents.cpp:310
+msgid "Installed version"
+msgstr "நிறுவப்பட்ட பதிப்பு"
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/src/contents.cpp:318
+#, c-format
+msgid "Run version %s now"
+msgstr "பதிப்பு %sஐ இப்போது இயக்கு"
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/src/contents.cpp:324
+msgid "Run now"
+msgstr "இப்போது இயக்கு"
+
+#. TRANSLATORS: update to a new version of the package
+#: ../contrib/browser-plugin/src/contents.cpp:330
+#, c-format
+msgid "Update to version %s"
+msgstr "%s பதிப்பினை புதுப்பி"
+
+#. TRANSLATORS: To install a package
+#: ../contrib/browser-plugin/src/contents.cpp:336
+#, c-format
+msgid "Install %s now"
+msgstr "இப்போது  %sஐ நிறுவவும்"
+
+#. TRANSLATORS: the version of the package
+#: ../contrib/browser-plugin/src/contents.cpp:339
+msgid "Version"
+msgstr "பதிப்பு"
+
+#. TRANSLATORS: noting found, so can't install
+#: ../contrib/browser-plugin/src/contents.cpp:344
+msgid "No packages found for your system"
+msgstr "உங்கள் கணினியில் தொகுப்புகள் காணப்படவில்லை"
+
+#. TRANSLATORS: package is being installed
+#: ../contrib/browser-plugin/src/contents.cpp:349
+msgid "Installing..."
+msgstr "நிறுவுகிறது..."
+
+#: ../data/packagekit-catalog.xml.in.h:1
+msgid "PackageKit Catalog"
+msgstr "PackageKit கேட்லாக்"
+
+#: ../data/packagekit-package-list.xml.in.h:1
+msgid "PackageKit Package List"
+msgstr "PackageKit தொகுப்பு பட்டியல்"
+
+#: ../data/packagekit-servicepack.xml.in.h:1
+msgid "PackageKit Service Pack"
+msgstr "PackageKit சேவை தொகுப்பு"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:1
+msgid "Accept EULA"
+msgstr "EULAவை ஏற்கிறது"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:2
+msgid "Authentication is required to accept a EULA"
+msgstr "EULAவை ஏற்பதற்கு அங்கீகாரம் தேவைப்படுகிறது"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:3
+msgid "Authentication is required to cancel a task that was not started by yourself"
+msgstr "உங்களால் துவங்கப்படாத பணியை ரத்துச் செய்ய அங்கீகாரம் தேவைப்படுகிறது"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:4
+msgid "Authentication is required to change software source parameters"
+msgstr "மென்பொருள் மூல அளவுருகளை மாற்றுவதற்கு அங்கீகாரம் தேவைப்படுகிறது"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:5
+msgid ""
+"Authentication is required to consider a key used for signing packages as "
+"trusted"
+msgstr "நம்ப்பபட்ட தொகுப்புகளை கையெழுத்திட ஒரு விசையை பயன்படுத்த அங்கீகாரம் தேவைப்படுகிறது"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:6
+msgid "Authentication is required to install a signed package"
+msgstr "கையெழுத்திடப்பட்ட தொகுப்பினை நிறுவுவதற்கு அங்கீகாரம் தேவைப்படுகிறது"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:7
+msgid "Authentication is required to install an untrusted package"
+msgstr "நம்பகமில்லாத தொகுப்பினை நிறுவுவதற்கு அங்கீகாரம் தேவைப்படுகிறது"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:8
+msgid "Authentication is required to refresh the system sources"
+msgstr "கணினி மூலங்களை புதுப்பிக்க அங்கீகாரம் தேவைப்படுகிறது"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:9
+msgid "Authentication is required to remove packages"
+msgstr "தொகுப்புகளை நீக்குவதற்கு அங்கீகாரம் தேவைப்படுகிறது"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:10
+msgid "Authentication is required to rollback a transaction"
+msgstr "ஒரு பரிமாற்றத்தை திரும்ப பெறுவதற்கு அங்கீகாரம் தேவைப்படுகிறது"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:11
+msgid ""
+"Authentication is required to set the network proxy used for downloading "
+"packages"
+msgstr "தொகுப்புகளை பதிவிறக்க பயன்படும் பிணைய பிராக்ஸியை அமைக்க அங்கீகாரம் தேவைப்படுகிறது"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+msgid "Authentication is required to update packages"
+msgstr "தொகுப்புகளை மேம்படுத்த "
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:13
+msgid "Cancel foreign task"
+msgstr "வெளி வேலைகளை ரத்துசெய்"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:14
+msgid "Change software source parameters"
+msgstr " மென்பொருள் மூல அளவுருகளை மாற்று"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:15
+msgid "Install signed package"
+msgstr "பையெமுத்திடப்பட்ட தொகுப்பை நிறுவு"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:16
+msgid "Install untrusted local file"
+msgstr "நம்பமுடியாத  உள்ளமை கோப்பினை நிறுவு"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:17
+msgid "Refresh system sources"
+msgstr "கணினி மூலங்களை புதுப்பி"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+msgid "Remove package"
+msgstr "தொகுப்பினை நீக்கு"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:19
+msgid "Rollback to a previous transaction"
+msgstr "முந்தைய பரிமாற்றத்திற்கு திரும்பி செல்லுதல்"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:20
+msgid "Set network proxy"
+msgstr "பிராக்ஸி பிணையத்தைஅமை"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:21
+msgid "Trust a key used for signing packages"
+msgstr "கையெழுத்திப்பட்ட தொகுப்புகளுக்கு பயன்படுத்தும் விசையை நம்பு"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:22
+msgid "Update packages"
+msgstr "தொகுப்புகளை மேம்படுத்து"
+
+#. TRANSLATORS: failed due to DBus security
+#: ../src/pk-main.c:87
+msgid "Startup failed due to security policies on this machine."
+msgstr "கணினியின் பாதிகாப்பு பாலிஸிகளினால் துவக்குவதில் தோல்வி."
+
+#. TRANSLATORS: only two ways this can fail...
+#: ../src/pk-main.c:89
+msgid "This can happen for two reasons:"
+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 "சரியான பயனர் இயங்கக்கூடியதை ஏற்றவில்லை (பொதுவாக ரூட்)"
+
+#. 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 கோப்பு நிறுவப்படவில்லை:"
+
+#. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
+#: ../src/pk-main.c:193
+msgid "Packaging backend to use, e.g. dummy"
+msgstr "பயன்படுத்த வேண்டிய தொகுப்பிடுதல் பின்தளம், எ.கா டம்மி"
+
+#. TRANSLATORS: if we should run in the background
+#: ../src/pk-main.c:196
+msgid "Daemonize and detach from the terminal"
+msgstr "டீமான் செய்யப்பட்ட மற்றும் முனையத்திலிருந்து நீக்கக்கூடியது"
+
+#. TRANSLATORS: if we should not monitor how long we are inactive for
+#: ../src/pk-main.c:202
+msgid "Disable the idle timer"
+msgstr "வெற்று நேரங்காட்டியை செயல்நீக்கு"
+
+#. TRANSLATORS: show version
+#: ../src/pk-main.c:205
+msgid "Show version and exit"
+msgstr "பதிப்பு மற்றும் வெளியேறுவதைக் காட்டு"
+
+#. TRANSLATORS: exit after we've started up, used for user profiling
+#: ../src/pk-main.c:208
+msgid "Exit after a small delay"
+msgstr "ஒரு சிறிய தாமதத்திற்கு பின் வெளியேறு"
+
+#. TRANSLATORS: exit straight away, used for automatic profiling
+#: ../src/pk-main.c:211
+msgid "Exit after the engine has loaded"
+msgstr "வெளியேறிய பின் எந்திரம் ஏற்றப்பட்டது"
+
+#. TRANSLATORS: describing the service that is running
+#: ../src/pk-main.c:226
+msgid "PackageKit service"
+msgstr "PackageKit சேவை"
+
+#. TRANSLATORS: fatal error, dbus is not running
+#: ../src/pk-main.c:263
+msgid "Cannot connect to the system bus"
+msgstr "கணினி பஸ்ஸுடன் இணைக்க முடியவில்லை"
+
+#. TRANSLATORS: cannot register on system bus, unknown reason
+#: ../src/pk-main.c:313
+#, c-format
+msgid "Error trying to start: %s\n"
+msgstr "துவக்க முயற்சிப்பதில் பிழை: %s\n"
+
commit ad966f75e201bc3f4cfb50232c388789b72f3021
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Sun Apr 5 22:51:12 2009 +0100

    APT: Add a helper function to get the version instace matching a package id. Thanks to JAK for the interface.

diff --git a/backends/apt/aptbackend.py b/backends/apt/aptbackend.py
index 002b39c..9711ff1 100755
--- a/backends/apt/aptbackend.py
+++ b/backends/apt/aptbackend.py
@@ -1680,6 +1680,18 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                candidate[0].component in ["main", "restricted"] and \
                candidate[0].trusted == True
 
+    def _get_pkg_version_by_id(self, id):
+        '''
+        Return a package version matching the given package id or None.
+        '''
+        name, version, arch, data = id.split(";", 4)
+        if self._cache.has_key(name):
+            for pkg_ver in self._cache[name].versions:
+                if pkg_ver.version == version and \
+                   pkg_ver.architecture == arch:
+                    return pkg_ver
+        return None
+
     def _find_package_by_id(self, id):
         '''
         Return a package matching to the given package id
commit 48dfcd80b0fa4e8b68446695bf0f841ba3be21f3
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Sun Apr 5 18:01:05 2009 +0100

    APT: Ifdef the distro upgrade correctly

diff --git a/backends/apt/pk-backend-apt.c b/backends/apt/pk-backend-apt.c
index 2cd799d..9489ef4 100644
--- a/backends/apt/pk-backend-apt.c
+++ b/backends/apt/pk-backend-apt.c
@@ -143,6 +143,7 @@ backend_get_details (PkBackend *backend, gchar **package_ids)
 	g_free (package_ids_temp);
 }
 
+#ifdef HAVE_PYTHON_META_RELEASE
 /**
  * backend_get_distro_upgrades:
  */
@@ -151,6 +152,7 @@ backend_get_distro_upgrades (PkBackend *backend)
 {
 	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "get-distro-upgrades", NULL);
 }
+#endif /* HAVE_PYTHON_META_RELEASE */
 
 /**
  * backend_get_files:
commit 113e7e7760b5f7d1b8d30382ddf9d2c2aa6d88a5
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Sun Apr 5 18:00:05 2009 +0100

    APT: Add a command line option to only operate a single command

diff --git a/backends/apt/aptbackend.py b/backends/apt/aptbackend.py
index 172b6f8..002b39c 100755
--- a/backends/apt/aptbackend.py
+++ b/backends/apt/aptbackend.py
@@ -1943,12 +1943,15 @@ def _format_string(txt, encoding='utf-8'):
     return txt.replace("\n", ";")
 
 
-def run(args):
+def run(args, single=False):
     """
     Start the apt backend
     """
     backend = PackageKitAptBackend("")
-    backend.dispatcher(args)
+    if single == True:
+        backend.dispatch_command(args[0], args[1:])
+    else:
+        backend.dispatcher(args)
 
 def main():
     parser = optparse.OptionParser(description="APT backend for PackageKit")
@@ -1965,6 +1968,10 @@ def main():
                       help="Show a lot of additional information and drop to "
                            "a debugging console on unhandled exceptions "
                            "(Only needed by developers)")
+    parser.add_option("-s", "--single",
+                      action="store_true", dest="single",
+                      help="Only perform one command and don't listen on stdin "
+                           "(Only needed by developers)")
     (options, args) = parser.parse_args()
     if options.debug:
         pklog.setLevel(logging.DEBUG)
@@ -1979,10 +1986,10 @@ def main():
     if options.profile:
         import hotshot
         prof = hotshot.Profile(options.profile)
-        prof.runcall(run)
+        prof.runcall(run, args, options.single)
         prof.close()
     else:
-        run(args)
+        run(args, options.single)
 
 if __name__ == '__main__':
     main()
commit f5e8708c91a5d663c3f40e7b1b59bbf87d0c51ea
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Sun Apr 5 14:50:32 2009 +0200

    APT: Trun the dbus backend into a spawned one

diff --git a/backends/apt/aptbackend.py b/backends/apt/aptbackend.py
index c24d20a..172b6f8 100755
--- a/backends/apt/aptbackend.py
+++ b/backends/apt/aptbackend.py
@@ -5,7 +5,7 @@ Provides an apt backend to PackageKit
 
 Copyright (C) 2007 Ali Sabil <ali.sabil at gmail.com>
 Copyright (C) 2007 Tom Parker <palfrey at tevp.net>
-Copyright (C) 2008 Sebastian Heinlein <glatzor at ubuntu.com>
+Copyright (C) 2008-2009 Sebastian Heinlein <glatzor at ubuntu.com>
 
 Licensed under the GNU General Public License Version 2
 
@@ -23,6 +23,7 @@ import gdbm
 import httplib
 import locale
 import logging
+import logging.handlers
 import optparse
 import os
 import pty
@@ -35,7 +36,6 @@ import string
 import subprocess
 import sys
 import time
-import threading
 import urllib2
 import warnings
 
@@ -48,17 +48,20 @@ import dbus.service
 import dbus.mainloop.glib
 import gobject
 
-from packagekit.daemonBackend import PACKAGEKIT_DBUS_INTERFACE, PACKAGEKIT_DBUS_PATH, PackageKitBaseBackend, PackagekitProgress, pklog, threaded, serialize
+from packagekit.backend import *
+from packagekit.progress import *
+from packagekit.package import *
 from packagekit.enums import *
 
+logging.basicConfig(format="%(levelname)s:%(message)s")
+pklog = logging.getLogger("PackageKitBackend")
+pklog.setLevel(logging.NOTSET)
 
-warnings.filterwarnings(action='ignore', category=FutureWarning)
-
-PACKAGEKIT_DBUS_SERVICE = 'org.freedesktop.PackageKitAptBackend'
-
-apt_pkg.InitConfig()
-apt_pkg.Config.Set("DPkg::Options::", '--force-confdef')
-apt_pkg.Config.Set("DPkg::Options::", '--force-confold')
+_syslog = logging.handlers.SysLogHandler("/dev/log",
+                                      logging.handlers.SysLogHandler.LOG_DAEMON)
+formatter = logging.Formatter('PackageKit: %(levelname)s: %(message)s')
+_syslog.setFormatter(formatter)
+pklog.addHandler(_syslog)
 
 # Xapian database is optionally used to speed up package description search
 XAPIAN_DB_PATH = os.environ.get("AXI_DB_PATH", "/var/lib/apt-xapian-index")
@@ -102,10 +105,6 @@ os.putenv("PATH",
 os.putenv("DEBIAN_FRONTEND", "noninteractive")
 os.putenv("APT_LISTCHANGES_FRONTEND", "none")
 
-# Setup threading support
-gobject.threads_init()
-dbus.glib.threads_init()
-
 # Map Debian sections to the PackageKit group name space
 SECTION_GROUP_MAP = {
     "admin" : GROUP_ADMIN_TOOLS,
@@ -246,7 +245,7 @@ class DpkgInstallProgress(apt.progress.InstallProgress):
         except OSError, (error_no, error_str):
             # resource temporarly unavailable is ignored
             if error_no not in [errno.EAGAIN, errno.EWOULDBLOCK]:
-                print error_str
+                pklog.warn(error_str)
         if self.read.endswith("\n"):
             statusl = string.split(self.read, ":")
             if len(statusl) < 3:
@@ -289,7 +288,7 @@ class PackageKitOpProgress(apt.progress.OpProgress):
     def update(self, percent):
         progress = int(self.pstart + percent / 100 * (self.pend - self.pstart))
         if self.show_progress == True and self.pprev < progress:
-            self._backend.PercentageChanged(progress)
+            self._backend.percentage(progress)
             self.pprev = progress
 
     def done(self):
@@ -313,29 +312,25 @@ class PackageKitFetchProgress(apt.progress.FetchProgress):
 
     def pulse(self):
         apt.progress.FetchProgress.pulse(self)
-        # Strange, but we seem to need this to detect a cancel immediately
-        time.sleep(0.01)
-        if self._backend._canceled.isSet():
-            return False
         progress = int(self.pstart + self.percent/100 * \
                        (self.pend - self.pstart))
         if self.pprev < progress:
-            self._backend.PercentageChanged(progress)
+            self._backend.percentage(progress)
             self.pprev = progress
         return True
 
     def start(self):
-        self._backend.StatusChanged(STATUS_DOWNLOAD)
-        self._backend.AllowCancel(True)
+        self._backend.status(STATUS_DOWNLOAD)
+        self._backend.allow_cancel(True)
 
     def stop(self):
-        self._backend.PercentageChanged(self.pend)
-        self._backend.AllowCancel(False)
+        self._backend.percentage(self.pend)
+        self._backend.allow_cancel(False)
 
     def mediaChange(self, medium, drive):
         #FIXME: Raise an expcetion and handle it in _commit_changes
         #       Strangly _commit_changes does not catch the expcetion
-        self._backend.Message(MESSAGE_UNKNOWN,
+        self._backend.message(MESSAGE_UNKNOWN,
                               "Installing from CD-Rom (%s) is not "
                               "supported." % medium)
         return False
@@ -365,14 +360,14 @@ class PackageKitInstallProgress(apt.progress.InstallProgress):
         self.last_activity = time.time()
         progress = self.pstart + percent/100 * (self.pend - self.pstart)
         if self.pprev < progress:
-            self._backend.PercentageChanged(int(progress))
+            self._backend.percentage(int(progress))
             self.pprev = progress
         pklog.debug("APT status: %s" % status)
 
     def startUpdate(self):
         # The apt system lock was set by _lock_cache() before
         self._backend._unlock_cache()
-        self._backend.StatusChanged(STATUS_COMMIT)
+        self._backend.status(STATUS_COMMIT)
         self.last_activity = time.time()
         self.start_time = time.time()
 
@@ -411,7 +406,7 @@ class PackageKitInstallProgress(apt.progress.InstallProgress):
     def finishUpdate(self):
         pklog.debug("finishUpdate()")
         if self.conffile_prompts:
-            self._backend.Message(MESSAGE_CONFIG_FILES_CHANGED, 
+            self._backend.message(MESSAGE_CONFIG_FILES_CHANGED, 
                                   "The following conffile prompts were found "
                                   "and need investiagtion: %s" % \
                                   "\n".join(self.conffile_prompts))
@@ -458,38 +453,20 @@ class PackageKitAptBackend(PackageKitBaseBackend):
     '''
     PackageKit backend for apt
     '''
-    def __init__(self, bus_name, dbus_path):
+    def __init__(self, args):
         pklog.info("Initializing APT backend")
-        signal.signal(signal.SIGQUIT, sigquit)
+        signal.signal(signal.SIGQUIT, self._sigquit)
         self._cache = None
-        self._canceled = threading.Event()
-        self._canceled.clear()
-        self._lock = threading.Lock()
         self._last_cache_refresh = None
-        PackageKitBaseBackend.__init__(self, bus_name, dbus_path)
-
-    # Methods ( client -> engine -> backend )
-
-    def doInit(self):
-        pklog.info("Initializing cache")
-        self.StatusChanged(STATUS_RUNNING)
-        self.AllowCancel(False)
-        self.NoPercentageUpdates()
+        apt_pkg.InitConfig()
+        apt_pkg.Config.Set("DPkg::Options::", '--force-confdef')
+        apt_pkg.Config.Set("DPkg::Options::", '--force-confold')
+        PackageKitBaseBackend.__init__(self, args)
         self._open_cache(progress=False)
 
-    @serialize
-    def doExit(self):
-        gobject.idle_add(self._doExitDelay)
-
-    def doCancel(self):
-        pklog.info("Canceling current action")
-        self.StatusChanged(STATUS_CANCEL)
-        self._canceled.set()
-        self._canceled.wait()
+    # Methods ( client -> engine -> backend )
 
-    @serialize
-    @threaded
-    def doSearchFile(self, filters, filename):
+    def search_file(self, filters, filename):
         '''
         Implement the apt2-search-file functionality
 
@@ -497,66 +474,54 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         not removed by default even not installed packages can be reported.
         '''
         pklog.info("Searching for file: %s" % filename)
-        self.StatusChanged(STATUS_QUERY)
-        self.NoPercentageUpdates()
+        self.status(STATUS_QUERY)
+        self.percentage(None)
         self._check_init(progress=False)
-        self.AllowCancel(True)
+        self.allow_cancel(True)
 
         for pkg in self._cache:
-            if self._check_canceled(): return False
             for installed_file in self._get_installed_files(pkg):
                 if filename in installed_file:
                     self._emit_visible_package(filters, pkg)
                     break
-        self.Finished(EXIT_SUCCESS)
 
-    @serialize
-    @threaded
-    def doSearchGroup(self, filters, group):
+    def search_group(self, filters, group):
         '''
         Implement the apt2-search-group functionality
         '''
         pklog.info("Searching for group: %s" % group)
-        self.StatusChanged(STATUS_QUERY)
-        self.NoPercentageUpdates()
+        self.status(STATUS_QUERY)
+        self.percentage(None)
         self._check_init(progress=False)
-        self.AllowCancel(True)
+        self.allow_cancel(True)
 
         for pkg in self._cache:
-            if self._check_canceled(): return False
-            elif self._get_package_group(pkg) == group:
+            if self._get_package_group(pkg) == group:
                 self._emit_visible_package(filters, pkg)
-        self.Finished(EXIT_SUCCESS)
 
-    @serialize
-    @threaded
-    def doSearchName(self, filters, search):
+    def search_name(self, filters, search):
         '''
         Implement the apt2-search-name functionality
         '''
         pklog.info("Searching for package name: %s" % search)
-        self.StatusChanged(STATUS_QUERY)
-        self.NoPercentageUpdates()
+        self.status(STATUS_QUERY)
+        self.percentage(None)
         self._check_init(progress=False)
-        self.AllowCancel(True)
+        self.allow_cancel(True)
 
         for pkg in self._cache:
-            if self._check_canceled(): return False
-            elif search in pkg.name:
+            if search in pkg.name:
                 self._emit_visible_package(filters, pkg)
-        self.Finished(EXIT_SUCCESS)
 
-    @serialize
-    @threaded
-    def doSearchDetails(self, filters, search):
+    def search_details(self, filters, search):
         '''
         Implement the apt2-search-details functionality
         '''
         pklog.info("Searching for package name: %s" % search)
-        self.StatusChanged(STATUS_QUERY)
-        self.NoPercentageUpdates()
+        self.status(STATUS_QUERY)
+        self.percentage(None)
         self._check_init(progress=False)
-        self.AllowCancel(True)
+        self.allow_cancel(True)
         results = []
 
         if XAPIAN_SUPPORT == True:
@@ -579,40 +544,33 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         else:
             pklog.debug("Performing apt cache based search")
             for p in self._cache._dict.values():
-                if self._check_canceled(): return
                 needle = search.strip().lower()
                 haystack = p.description.lower()
                 if p.name.find(needle) >= 0 or haystack.find(needle) >= 0:
                     results.append(p)
 
         for r in results:
-            if self._check_canceled(): return
             self._emit_visible_package(filters, r)
 
-        self.Finished(EXIT_SUCCESS)
-
-    @serialize
-    @threaded
-    def doGetDistroUpgrades(self):
+    def get_distro_upgrades(self):
         '''
         Implement the {backend}-get-distro-upgrades functionality
         '''
         pklog.info("Get distro upgrades")
-        self.StatusChanged(STATUS_INFO)
-        self.AllowCancel(False)
-        self.NoPercentageUpdates()
+        self.status(STATUS_INFO)
+        self.allow_cancel(False)
+        self.percentage(None)
 
         if META_RELEASE_SUPPORT == False:
             if self._cache.has_key("update-manager-core") and \
                self._cache["update-manager-core"].isInstalled == False:
-                self.ErrorCode(ERROR_UNKNOWN,
-                               "Please install the package update-manager-core to get notified "
-                               "of the latest distribution releases.")
+                self.error(ERROR_UNKNOWN,
+                           "Please install the package update-manager-core to "
+                           "get notified of the latest distribution releases.")
             else:
-                self.ErrorCode(ERROR_UNKNOWN,
-                               "Please make sure that update-manager-core is"
-                               "correctly installed.")
-            self.Finished(EXIT_FAILED)
+                self.error(ERROR_UNKNOWN,
+                           "Please make sure that update-manager-core is"
+                           "correctly installed.")
             return
 
         #FIXME Evil to start the download during init
@@ -622,15 +580,12 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             time.sleep(1)
         #FIXME: Add support for description
         if meta_release.new_dist != None:
-            self.DistroUpgrade("stable", 
-                               "%s %s" % (meta_release.new_dist.name,
-                                          meta_release.new_dist.version),
-                               "The latest stable release")
-        self.Finished(EXIT_SUCCESS)
-
-    @serialize
-    @threaded
-    def doGetUpdates(self, filters):
+            self.distro_ppgrade("stable", 
+                                "%s %s" % (meta_release.new_dist.name,
+                                           meta_release.new_dist.version),
+                                "The latest stable release")
+
+    def get_updates(self, filters):
         '''
         Implement the {backend}-get-update functionality
         '''
@@ -658,46 +613,41 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             return False
         #FIXME: Implment the basename filter
         pklog.info("Get updates")
-        self.StatusChanged(STATUS_QUERY)
-        self.AllowCancel(True)
-        self.NoPercentageUpdates()
+        self.status(STATUS_QUERY)
+        self.allow_cancel(True)
+        self.percentage(None)
         self._check_init(progress=False)
         self._cache.upgrade(False)
         updates = filter(lambda p: self._cache[p].isUpgradable,
                          self._cache.keys())
         for pkg in self._cache.getChanges():
-            if self._check_canceled(): return False
-            else:
-                updates.remove(pkg.name)
-                info = INFO_NORMAL
-                archive = pkg.candidateOrigin[0].archive
-                origin = pkg.candidateOrigin[0].origin
-                trusted = pkg.candidateOrigin[0].trusted
-                label = pkg.candidateOrigin[0].label
-                if origin in ["Debian", "Ubuntu"] and trusted == True:
-                    if archive.endswith("-security") or \
-                       label == "Debian-Security":
-                        info = INFO_SECURITY
-                    elif succeeds_security_update(pkg):
-                        pklog.debug("Update of %s succeeds a security "
-                                    "update. Raising its priority." % pkg.name)
-                        info = INFO_SECURITY
-                    elif archive.endswith("-backports"):
-                        info = INFO_ENHANCEMENT
-                    elif archive.endswith("-updates"):
-                        info = INFO_BUGFIX
-                if origin in ["Backports.org archive"] and trusted == True:
+            updates.remove(pkg.name)
+            info = INFO_NORMAL
+            archive = pkg.candidateOrigin[0].archive
+            origin = pkg.candidateOrigin[0].origin
+            trusted = pkg.candidateOrigin[0].trusted
+            label = pkg.candidateOrigin[0].label
+            if origin in ["Debian", "Ubuntu"] and trusted == True:
+                if archive.endswith("-security") or \
+                    label == "Debian-Security":
+                    info = INFO_SECURITY
+                elif succeeds_security_update(pkg):
+                    pklog.debug("Update of %s succeeds a security "
+                                "update. Raising its priority." % pkg.name)
+                    info = INFO_SECURITY
+                elif archive.endswith("-backports"):
                     info = INFO_ENHANCEMENT
-                self._emit_package(pkg, info, force_candidate=True)
+                elif archive.endswith("-updates"):
+                    info = INFO_BUGFIX
+            if origin in ["Backports.org archive"] and trusted == True:
+                info = INFO_ENHANCEMENT
+            self._emit_package(pkg, info, force_candidate=True)
         # Report packages that are upgradable but cannot be upgraded
         for missed in updates:
             self._emit_package(self._cache[missed], INFO_BLOCKED)
         self._cache.clear()
-        self.Finished(EXIT_SUCCESS)
 
-    @serialize
-    @threaded
-    def doGetUpdateDetail(self, pkg_ids):
+    def get_update_detail(self, pkg_ids):
         '''
         Implement the {backend}-get-update-details functionality
         '''
@@ -721,59 +671,52 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                        re.findall(MATCH_CVE, changelog, re.MULTILINE))
 
         pklog.info("Get update details of %s" % pkg_ids)
-        self.StatusChanged(STATUS_INFO)
-        self.NoPercentageUpdates()
-        self.AllowCancel(True)
+        self.status(STATUS_INFO)
+        self.percentage(None)
+        self.allow_cancel(True)
         self._check_init(progress=False)
         for pkg_id in pkg_ids:
-            if self._check_canceled(): return
             pkg = self._find_package_by_id(pkg_id)
             if pkg == None:
-                self.ErrorCode(ERROR_PACKAGE_NOT_FOUND,
-                               "Package %s isn't available" % id)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_PACKAGE_NOT_FOUND,
+                           "Package %s isn't available" % id)
                 return
             # FIXME add some real data
             updates = self.get_id_from_package(pkg, force_candidate=False)
             obsoletes = ""
             vendor_url = ""
-            restart = ""
+            restart = "none"
             update_text = ""
             state = ""
             issued = ""
             updated = ""
             #FIXME: Replace this method with the python-apt one as soon as the
             #       consolidate branch gets merged
-            self.StatusChanged(STATUS_DOWNLOAD_CHANGELOG)
+            self.status(STATUS_DOWNLOAD_CHANGELOG)
             changelog = self._get_changelog(pkg)
-            self.StatusChanged(STATUS_INFO)
+            self.status(STATUS_INFO)
             bugzilla_url = ";".join(get_bug_urls(changelog))
             cve_url = ";".join(get_cve_urls(changelog))
-            self.UpdateDetail(pkg_id, updates, obsoletes, vendor_url,
-                              bugzilla_url, cve_url, restart, update_text,
-                              changelog, state, issued, updated)
-        self.Finished(EXIT_SUCCESS)
-
-    @serialize
-    @threaded
-    def doGetDetails(self, pkg_ids):
+            self.update_detail(pkg_id, updates, obsoletes, vendor_url,
+                               bugzilla_url, cve_url, restart, update_text,
+                               _format_string(changelog), state, issued,
+                               updated)
+
+    def get_details(self, pkg_ids):
         '''
         Implement the {backend}-get-details functionality
         '''
         pklog.info("Get details of %s" % pkg_ids)
-        self.StatusChanged(STATUS_DEP_RESOLVE)
-        self.NoPercentageUpdates()
-        self.AllowCancel(True)
+        self.status(STATUS_INFO)
+        self.percentage(None)
+        self.allow_cancel(True)
         self._check_init(progress=False)
         for pkg_id in pkg_ids:
-            if self._check_canceled(): return
             pkg = self._find_package_by_id(pkg_id)
             if pkg == None:
-                self.ErrorCode(ERROR_PACKAGE_NOT_FOUND,
-                               "Package %s isn't available" % id)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_PACKAGE_NOT_FOUND,
+                           "Package %s isn't available" % id)
                 return
-            desc = self._get_package_description(pkg)
             #FIXME: We need more fine grained license information!
             candidate = pkg.candidateOrigin
             if candidate != None and  \
@@ -783,73 +726,63 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             else:
                 license = "unknown"
             group = self._get_package_group(pkg)
-            self.Details(pkg_id, license, group, desc,
+            self.details(pkg_id, license, group,
+                         _format_string(pkg.description),
                          pkg.homepage, pkg.packageSize)
-            self.Finished(EXIT_SUCCESS)
 
-    @serialize
-    @threaded
     @unlock_cache_afterwards
-    def doUpdateSystem(self):
+    def update_system(self):
         '''
         Implement the {backend}-update-system functionality
         '''
         pklog.info("Upgrading system")
         if not self._lock_cache(): return
-        self.StatusChanged(STATUS_UPDATE)
-        self.AllowCancel(False)
-        self.PercentageChanged(0)
+        self.status(STATUS_UPDATE)
+        self.allow_cancel(False)
+        self.percentage(0)
         self._check_init(prange=(0,5))
         try:
             self._cache.upgrade(distUpgrade=False)
         except:
             self._cache.clear()
-            self.ErrorCode(ERROR_DEP_RESOLUTION_FAILED,
-                           "Failed to upgrade the system.")
-            self.Finished(EXIT_FAILED)
+            self.error(ERROR_DEP_RESOLUTION_FAILED,
+                       "Failed to upgrade the system.")
             return
         if not self._commit_changes(): return False
-        self.PercentageChanged(100)
-        self.Finished(EXIT_SUCCESS)
+        self.percentage(100)
 
-    @serialize
-    @threaded
     @unlock_cache_afterwards
-    def doRemovePackages(self, ids, deps=True, auto=False):
+    def remove_packages(self, allowdeps, ids):
         '''
         Implement the {backend}-remove functionality
         '''
         pklog.info("Removing package(s): id %s" % ids)
         if not self._lock_cache(): return
-        self.StatusChanged(STATUS_REMOVE)
-        self.AllowCancel(False)
-        self.PercentageChanged(0)
+        self.status(STATUS_REMOVE)
+        self.allow_cancel(False)
+        self.percentage(0)
         self._check_init(prange=(0,10))
         pkgs=[]
         for id in ids:
             pkg = self._find_package_by_id(id)
             if pkg == None:
-                self.ErrorCode(ERROR_PACKAGE_NOT_FOUND,
-                               "Package %s isn't available" % id)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_PACKAGE_NOT_FOUND,
+                           "Package %s isn't available" % id)
                 return
             if not pkg.isInstalled:
-                self.ErrorCode(ERROR_PACKAGE_NOT_INSTALLED,
-                               "Package %s isn't installed" % pkg.name)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_PACKAGE_NOT_INSTALLED,
+                           "Package %s isn't installed" % pkg.name)
                 return
             pkgs.append(pkg.name[:])
             if pkg._pkg.Essential == True:
-                self.ErrorCode(ERROR_CANNOT_REMOVE_SYSTEM_PACKAGE,
-                               "Package %s cannot be removed." % pkg.name)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_CANNOT_REMOVE_SYSTEM_PACKAGE,
+                           "Package %s cannot be removed." % pkg.name)
                 return
             try:
                 pkg.markDelete()
             except:
                 self._open_cache(prange=(90,99))
-                self.ErrorCode(ERROR_UNKNOWN, "Removal of %s failed" % pkg.name)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_UNKNOWN, "Removal of %s failed" % pkg.name)
                 return
         if not self._commit_changes(fetch_range=(10,10),
                                     install_range=(10,90)):
@@ -857,15 +790,11 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self._open_cache(prange=(90,99))
         for p in pkgs:
             if self._cache.has_key(p) and self._cache[p].isInstalled:
-                self.ErrorCode(ERROR_UNKNOWN, "%s is still installed" % p)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_UNKNOWN, "%s is still installed" % p)
                 return
-        self.PercentageChanged(100)
-        self.Finished(EXIT_SUCCESS)
+        self.percentage(100)
 
-    @serialize
-    @threaded
-    def doGetRepoList(self, filters):
+    def get_repo_list(self, filters):
         '''
         Implement the {backend}-get-repo-list functionality
 
@@ -873,20 +802,19 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                low level access using pure aptsources?
         '''
         pklog.info("Getting repository list: %s" % filters)
-        self.StatusChanged(STATUS_INFO)
-        self.AllowCancel(False)
-        self.PercentageChanged(0)
+        self.status(STATUS_INFO)
+        self.allow_cancel(False)
+        self.percentage(0)
         if REPOS_SUPPORT == False:
             if self._cache.has_key("python-software-properties") and \
                self._cache["python-software-properties"].isInstalled == False:
-                self.ErrorCode(ERROR_UNKNOWN,
-                               "Please install the package "
-                               "python-software-properties to handle repositories")
+                self.error(ERROR_UNKNOWN,
+                           "Please install the package "
+                           "python-software-properties to handle repositories")
             else:
-                self.ErrorCode(ERROR_UNKNOWN,
-                               "Please make sure that python-software-properties is"
-                               "correctly installed.")
-            self.Finished(EXIT_FAILED)
+                self.error(ERROR_UNKNOWN,
+                           "Please make sure that python-software-properties is"
+                           "correctly installed.")
             return
         filter_list = filters.split(";")
         repos = PackageKitSoftwareProperties()
@@ -900,7 +828,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             #FIXME: There is no inconsitent state in PackageKit
             enabled = repos.get_comp_download_state(comp)[0]
             if not FILTER_DEVELOPMENT in filter_list:
-                self.RepoDetail(repo_id, description, enabled)
+                self.repo_detail(repo_id, description, enabled)
         # Emit distro's virtual update repositories
         for template in repos.distro.source_template.children:
             repo_id = "%s_child_%s" % (repos.distro.id, template.name)
@@ -911,7 +839,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             #FIXME: There is no inconsitent state in PackageKit
             enabled = repos.get_comp_child_state(template)[0]
             if not FILTER_DEVELOPMENT in filter_list:
-                self.RepoDetail(repo_id, description, enabled)
+                self.repo_detail(repo_id, description, enabled)
         # Emit distro's cdrom sources
         for source in repos.get_cdrom_sources():
             if FILTER_NOT_DEVELOPMENT in filter_list and \
@@ -922,7 +850,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             description = re.sub(r"</?b>", "", repos.render_source(source))
             repo_id = "cdrom_%s_%s" % (source.uri, source.dist)
             repo_id.join(map(lambda c: "_%s" % c, source.comps))
-            self.RepoDetail(repo_id, description, enabled)
+            self.repo_detail(repo_id, description, enabled)
         # Emit distro's virtual source code repositoriy
         if not FILTER_NOT_DEVELOPMENT in filter_list:
             repo_id = "%s_source" % repos.distro.id
@@ -930,7 +858,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             #FIXME: no translation :(
             description = "%s %s - Source code" % (repos.distro.id, 
                                                    repos.distro.release)
-            self.RepoDetail(repo_id, description, enabled)
+            self.repo_detail(repo_id, description, enabled)
         # Emit third party repositories
         for source in repos.get_isv_sources():
             if FILTER_NOT_DEVELOPMENT in filter_list and \
@@ -941,12 +869,9 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             description = re.sub(r"</?b>", "", repos.render_source(source))
             repo_id = "isv_%s_%s" % (source.uri, source.dist)
             repo_id.join(map(lambda c: "_%s" % c, source.comps))
-            self.RepoDetail(repo_id, description, enabled)
-        self.Finished(EXIT_SUCCESS)
+            self.repo_detail(repo_id, description, enabled)
 
-    @serialize
-    @threaded
-    def doRepoEnable(self, repo_id, enable):
+    def repo_enable(self, repo_id, enable):
         '''
         Implement the {backend}-repo-enable functionality
 
@@ -954,20 +879,19 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                low level access using pure aptsources?
         '''
         pklog.info("Enabling repository: %s %s" % (repo_id, enable))
-        self.StatusChanged(STATUS_RUNNING)
-        self.AllowCancel(False)
-        self.PercentageChanged(0)
+        self.status(STATUS_RUNNING)
+        self.allow_cancel(False)
+        self.percentage(0)
         if REPOS_SUPPORT == False:
             if self._cache.has_key("python-software-properties") and \
                self._cache["python-software-properties"].isInstalled == False:
-                self.ErrorCode(ERROR_UNKNOWN,
-                               "Please install the package "
-                               "python-software-properties to handle repositories")
+                self.error(ERROR_UNKNOWN,
+                           "Please install the package "
+                           "python-software-properties to handle repositories")
             else:
-                self.ErrorCode(ERROR_UNKNOWN,
-                               "Please make sure that python-software-properties is"
-                               "correctly installed.")
-            self.Finished(EXIT_FAILED)
+                self.error(ERROR_UNKNOWN,
+                           "Please make sure that python-software-properties is"
+                           "correctly installed.")
             return
         repos = PackageKitSoftwareProperties()
 
@@ -1025,75 +949,63 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                     found = True
                     break
         if found == False:
-            self.ErrorCode(ERROR_REPO_NOT_AVAILABLE,
-                           "The repository of the id %s isn't available" % repo_id)
-            self.Finished(EXIT_FAILED)
+            self.error(ERROR_REPO_NOT_AVAILABLE,
+                       "The repository of the id %s isn't available" % repo_id)
             return
-        self.Finished(EXIT_SUCCESS)
 
-    @serialize
-    @threaded
     @unlock_cache_afterwards
-    def doUpdatePackages(self, ids):
+    def update_packages(self, ids):
         '''
         Implement the {backend}-update functionality
         '''
         pklog.info("Updating package with id %s" % ids)
         if not self._lock_cache(): return
-        self.StatusChanged(STATUS_UPDATE)
-        self.AllowCancel(False)
-        self.PercentageChanged(0)
+        self.status(STATUS_UPDATE)
+        self.allow_cancel(False)
+        self.percentage(0)
         self._check_init(prange=(0,10))
         pkgs=[]
         for id in ids:
             pkg = self._find_package_by_id(id)
             if pkg == None:
-                self.ErrorCode(ERROR_PACKAGE_NOT_FOUND,
-                               "Package %s isn't available" % id)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_PACKAGE_NOT_FOUND,
+                           "Package %s isn't available" % id)
                 return
             if not pkg.isUpgradable:
-                self.ErrorCode(ERROR_PACKAGE_ALREADY_INSTALLED,
-                               "Package %s is already up-to-date" % pkg.name)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_PACKAGE_ALREADY_INSTALLED,
+                           "Package %s is already up-to-date" % pkg.name)
                 return
             pkgs.append(pkg.name[:])
             try:
                 pkg.markUpgrade()
             except:
                 self._open_cache(prange=(90,100))
-                self.ErrorCode(ERROR_UNKNOWN, "%s could not be queued for "
-                                              "update" % pkg.name)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_UNKNOWN,
+                           "%s could not be queued for update" % pkg.name)
                 return
         if not self._commit_changes(): return False
         self._open_cache(prange=(90,100))
-        self.PercentageChanged(100)
+        self.percentage(100)
         pklog.debug("Checking success of operation")
         for p in pkgs:
             if not self._cache.has_key(p) or not self._cache[p].isInstalled \
                or self._cache[p].isUpgradable:
-                self.ErrorCode(ERROR_UNKNOWN, "%s was not updated" % p)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_UNKNOWN, "%s was not updated" % p)
                 return
         pklog.debug("Sending success signal")
-        self.Finished(EXIT_SUCCESS)
 
-    @serialize
-    @threaded
-    def doDownloadPackages(self, ids, dest):
+    def download_packages(self, dest, ids):
         '''
         Implement the {backend}-download-packages functionality
         '''
         pklog.info("Downloading packages: %s" % ids)
-        self.StatusChanged(STATUS_DOWNLOAD)
-        self.AllowCancel(True)
-        self.PercentageChanged(0)
+        self.status(STATUS_DOWNLOAD)
+        self.allow_cancel(True)
+        self.percentage(0)
         # Check the destination directory
         if not os.path.isdir(dest) or not os.access(dest, os.W_OK):
-            self.ErrorCode(ERROR_UNKNOWN,
-                           "The directory '%s' is not writable" % dest)
-            self.Finished(EXIT_FAILED)
+            self.error(ERROR_UNKNOWN,
+                       "The directory '%s' is not writable" % dest)
             return
         # Setup the fetcher
         self._check_init(prange=(0,10))
@@ -1106,12 +1018,10 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         # Mark installed packages for reinstallation and not installed packages
         # for installation without dependencies
         for id in ids:
-            if self._check_canceled(): return
             pkg = self._find_package_by_id(id)
             if pkg == None:
-                self.ErrorCode(ERROR_PACKAGE_NOT_FOUND,
-                               "There is no package %s" % id)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_PACKAGE_NOT_FOUND,
+                           "There is no package %s" % id)
                 return
             if pkg.isInstalled:
                 self._cache._depcache.SetReInstall(pkg._pkg, True)
@@ -1121,113 +1031,97 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         pm.GetArchives(fetcher, list, recs)
         res = fetcher.Run()
         self._cache.clear()
-        self.PercentageChanged(95)
+        self.percentage(95)
         # Copy files from cache to final destination
         for item in fetcher.Items:
-            if self._check_canceled(): return
             pklog.debug("Download item: %s" % item)
             if (item.Status != item.StatDone and not item.StatIdle) or \
                 res == fetcher.ResultCancelled:
-                self.ErrorCode(ERROR_PACKAGE_DOWNLOAD_FAILED,
-                               "Failed to download %s" % item.DescURI)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_PACKAGE_DOWNLOAD_FAILED,
+                           "Failed to download %s" % item.DescURI)
                 return
             pklog.debug("Copying %s to %s ..." % (item.DestFile, dest))
             try:
                 shutil.copy(item.DestFile, dest)
             except Exception, e:
-                self.ErrorCode(ERROR_INTERNAL_ERROR,
-                               "Failed to copy %s to %s: %s" % (item.DestFile,
+                self.error(ERROR_INTERNAL_ERROR,
+                           "Failed to copy %s to %s: %s" % (item.DestFile,
                                                                 dest, e))
-                self.Finished(EXIT_FAILED)
                 return
-        self.PercentageChanged(100)
-        pklog.debug("Sending success signal")
-        self.Finished(EXIT_SUCCESS)
+        self.percentage(100)
  
-    @serialize
-    @threaded
     @unlock_cache_afterwards
-    def doInstallPackages(self, ids):
+    def install_packages(self, ids):
         '''
         Implement the {backend}-install functionality
         '''
         pklog.info("Installing package with id %s" % ids)
         if not self._lock_cache(): return
-        self.StatusChanged(STATUS_INSTALL)
-        self.AllowCancel(False)
-        self.PercentageChanged(0)
+        self.status(STATUS_INSTALL)
+        self.allow_cancel(False)
+        self.percentage(0)
         self._check_init(prange=(0,10))
         pkgs=[]
         for id in ids:
             pkg = self._find_package_by_id(id)
             if pkg == None:
-                self.ErrorCode(ERROR_PACKAGE_NOT_FOUND,
-                               "Package %s isn't available" % id)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_PACKAGE_NOT_FOUND,
+                           "Package %s isn't available" % id)
                 return
             if pkg.isInstalled:
-                self.ErrorCode(ERROR_PACKAGE_ALREADY_INSTALLED,
-                               "Package %s is already installed" % pkg.name)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_PACKAGE_ALREADY_INSTALLED,
+                           "Package %s is already installed" % pkg.name)
                 return
             pkgs.append(pkg.name[:])
             try:
                 pkg.markInstall()
             except Exception, e:
                 self._open_cache(prange=(90,100))
-                self.ErrorCode(ERROR_UNKNOWN, "%s could not be queued for "
-                                              "installation: %s" % (pkg.name,e))
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_UNKNOWN,
+                           "%s could not be queued for "
+                           "installation: %s" % (pkg.name,e))
                 return
         if not self._commit_changes(): return False
         self._open_cache(prange=(90,100))
-        self.PercentageChanged(100)
+        self.percentage(100)
         pklog.debug("Checking success of operation")
         for p in pkgs:
             if not self._cache.has_key(p) or not self._cache[p].isInstalled:
-                self.ErrorCode(ERROR_UNKNOWN, "%s was not installed" % p)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_UNKNOWN, "%s was not installed" % p)
                 return
-        pklog.debug("Sending success signal")
-        self.Finished(EXIT_SUCCESS)
 
-    @serialize
-    @threaded
     @unlock_cache_afterwards
-    def doInstallFiles(self, trusted, full_paths):
+    def install_files(self, trusted, inst_files):
         '''
         Implement install-files for the apt backend
         Install local Debian package files
         '''
-        pklog.info("Installing package files: %s" % full_paths)
+        pklog.info("Installing package files: %s" % inst_files)
         if not self._lock_cache(): return
-        self.StatusChanged(STATUS_INSTALL)
-        self.AllowCancel(False)
-        self.PercentageChanged(0)
+        self.status(STATUS_INSTALL)
+        self.allow_cancel(False)
+        self.percentage(0)
         self._check_init(prange=(0,10))
         packages = []
         # Collect all dependencies which need to be installed
-        self.StatusChanged(STATUS_DEP_RESOLVE)
-        for path in full_paths:
+        self.status(STATUS_DEP_RESOLVE)
+        for path in inst_files:
             deb = apt.debfile.DebPackage(path, self._cache)
             packages.append(deb)
             if not deb.check():
-                self.ErrorCode(ERROR_UNKNOWN, deb._failureString)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_UNKNOWN, deb._failureString)
                 return
             (install, remove, unauthenticated) = deb.requiredChanges
             pklog.debug("Changes: Install %s, Remove %s, Unauthenticated "
                         "%s" % (install, remove, unauthenticated))
             if len(remove) > 0:
-                self.ErrorCode(ERROR_DEP_RESOLUTION_FAILED, 
-                               "Remove the following packages "
-                               "before: %s" % remove)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_DEP_RESOLUTION_FAILED, 
+                           "Remove the following packages "
+                           "before: %s" % remove)
                 return
             if deb.compare_to_version_in_cache() == \
                apt.debfile.VERSION_OUTDATED:
-                self.Message(MESSAGE_NEWER_PACKAGE_EXISTS, 
+                self.message(MESSAGE_NEWER_PACKAGE_EXISTS, 
                              "There is a later version of %s "
                              "available in the repositories." % deb.pkgname)
         if len(self._cache.getChanges()) > 0 and not \
@@ -1237,100 +1131,82 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         d = PackageKitDpkgInstallProgress(self)
         try:
             d.startUpdate()
-            d.install(full_paths)
+            d.install(inst_files)
             d.finishUpdate()
         except InstallTimeOutPKError, e:
             self._recover()
             #FIXME: should provide more information
-            self.ErrorCode(ERROR_UNKNOWN,
-                           "Transaction was cancelled since the installation "
-                           "of a package hung.\n"
-                           "This can be caused by maintainer scripts which "
-                           "require input on the terminal:\n%s" % e.message)
-            self.Finished(EXIT_KILLED)
+            self.error(ERROR_UNKNOWN,
+                       "Transaction was cancelled since the installation "
+                       "of a package hung.\n"
+                       "This can be caused by maintainer scripts which "
+                       "require input on the terminal:\n%s" % e.message)
             return
         except PackageManagerFailedPKError, e:
             self._recover()
-            self.ErrorCode(ERROR_UNKNOWN, "%s\n%s" % (e.message, e.output))
-            self.Finished(EXIT_FAILED)
+            self.error(ERROR_UNKNOWN, "%s\n%s" % (e.message, e.output))
             return
         except Exception, e:
             self._recover()
-            self.ErrorCode(ERROR_INTERNAL_ERROR, e.message)
-            self.Finished(EXIT_FAILED)
+            self.error(ERROR_INTERNAL_ERROR, e.message)
             return
-        self.PercentageChanged(100)
-        self.Finished(EXIT_SUCCESS)
+        self.percentage(100)
 
-    @serialize
-    @threaded
     @unlock_cache_afterwards
-    def doRefreshCache(self, force):
+    def refresh_cache(self):
         '''
         Implement the {backend}-refresh_cache functionality
         '''
         pklog.info("Refresh cache")
         if not self._lock_cache(): return
-        self.StatusChanged(STATUS_REFRESH_CACHE)
+        self.status(STATUS_REFRESH_CACHE)
         self.last_action_time = time.time()
-        self.AllowCancel(False);
-        self.PercentageChanged(0)
+        self.allow_cancel(False);
+        self.percentage(0)
         self._check_init((0,10))
         try:
             self._cache.update(PackageKitFetchProgress(self, prange=(10,95)))
         except Exception, e:
             self._open_cache(prange=(95,100))
-            if self._check_canceled(): return False
-            self.ErrorCode(ERROR_UNKNOWN, "Refreshing cache failed: %s" % e)
-            self.Finished(EXIT_FAILED)
+            self.error(ERROR_UNKNOWN,
+                       "Refreshing cache failed: %s" % _format_string(e.message))
             return
         self._open_cache(prange=(95,100))
-        self.PercentageChanged(100)
-        self.Finished(EXIT_SUCCESS)
+        self.percentage(100)
 
-    @serialize
-    @threaded
-    def doGetPackages(self, filters):
+    def get_packages(self, filters):
         '''
         Implement the apt2-get-packages functionality
         '''
         pklog.info("Get all packages")
-        self.StatusChanged(STATUS_QUERY)
-        self.NoPercentageUpdates()
+        self.status(STATUS_QUERY)
+        self.percentage(None)
         self._check_init(progress=False)
-        self.AllowCancel(True)
+        self.allow_cancel(True)
 
         for pkg in self._cache:
-            if self._check_canceled(): return False
-            elif self._is_package_visible(pkg, filters):
+            if self._is_package_visible(pkg, filters):
                 self._emit_package(pkg)
-        self.Finished(EXIT_SUCCESS)
 
-    @serialize
-    @threaded
-    def doResolve(self, filters, names):
+    def resolve(self, filters, names):
         '''
         Implement the apt2-resolve functionality
         '''
         pklog.info("Resolve")
-        self.StatusChanged(STATUS_QUERY)
-        self.NoPercentageUpdates()
+        self.status(STATUS_QUERY)
+        self.percentage(None)
         self._check_init(progress=False)
-        self.AllowCancel(False)
+        self.allow_cancel(False)
 
         for name in names:
             if self._cache.has_key(name):
                 self._emit_visible_package(filters, self._cache[name])
             else:
-                self.ErrorCode(ERROR_PACKAGE_NOT_FOUND,
-                               "Package name %s could not be resolved" % name)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_PACKAGE_NOT_FOUND,
+                           "Package name %s could not be resolved" % name)
                 return
-        self.Finished(EXIT_SUCCESS)
 
-    @serialize
-    @threaded
-    def doGetDepends(self, filter, ids, recursive=False):
+    def get_depends(self, filter, ids, recursive_text):
         '''
         Implement the apt2-get-depends functionality
 
@@ -1343,88 +1219,78 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         be computed easily. GDebi features this. Perhaps this should be moved
         to python-apt.
         '''
-        pklog.info("Get depends (%s,%s,%s)" % (filter, ids, recursive))
+        pklog.info("Get depends (%s,%s,%s)" % (filter, ids, recursive_text))
+        recursive = _text_to_bool(recursive_text)
         #FIXME: recursive is not yet implemented
         if recursive == True:
             pklog.warn("Recursive dependencies are not implemented")
-        self.StatusChanged(STATUS_QUERY)
-        self.NoPercentageUpdates()
+        self.status(STATUS_QUERY)
+        self.percentage(None)
         self._check_init(progress=False)
-        self.AllowCancel(True)
+        self.allow_cancel(True)
 
         # Mark all packages for installation
         pkgs = []
         for id in ids:
-            if self._check_canceled(): return
             pkg = self._find_package_by_id(id)
             if pkg == None:
-                self.ErrorCode(ERROR_PACKAGE_NOT_FOUND,
-                               "Package %s isn't available" % id)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_PACKAGE_NOT_FOUND,
+                           "Package %s isn't available" % id)
                 return
             try:
                 pkg.markInstall()
             except Exception, e:
                 #FIXME: Introduce a new info enumerate PK_INFO_MISSING for
                 #       missing dependecies
-                self.ErrorCode(ERROR_DEP_RESOLUTION_FAILED,
-                               "Dependecies for %s cannot be satisfied: %s" % e)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_DEP_RESOLUTION_FAILED,
+                           "Dependecies for %s cannot be satisfied: %s" % e)
                 return
             pkgs.append(pkg)
         # Check the status of the resulting changes
         for p in self._cache.getChanges():
-            if self._check_canceled(): return
             if p in pkgs: continue
             if p.markedDelete:
                 # Packagekit policy forbids removing packages for installation
-                self.ErrorCode(ERROR_DEP_RESOLUTION_FAILED,
-                               "Remove the package %s before" % p.name)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_DEP_RESOLUTION_FAILED,
+                           "Remove the package %s before" % p.name)
                 return
             elif p.markedInstall or p.markedUpgrade:
                 if self._is_package_visible(p, filter):
                     self._emit_package(p)
             else:
-                self.ErrorCode(ERROR_DEP_RESOLUTION_FAILED,
-                               "Please use an advanced package management tool "
-                               "e.g. Synaptic or aptitude, since there is a "
-                               "complex dependency situation.")
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_DEP_RESOLUTION_FAILED,
+                           "Please use an advanced package management tool "
+                           "e.g. Synaptic or aptitude, since there is a "
+                           "complex dependency situation.")
                 return
         # Clean up
         self._cache.clear()
-        self.Finished(EXIT_SUCCESS)
 
-    @serialize
-    @threaded
-    def doGetRequires(self, filter, ids, recursive=False):
+    def get_requires(self, filter, ids, recursive_text):
         '''
         Implement the apt2-get-requires functionality
         '''
-        pklog.info("Get requires (%s,%s,%s)" % (filter, ids, recursive))
+        pklog.info("Get requires (%s,%s,%s)" % (filter, ids, recursive_text))
+        recursive = _text_to_bool(rescursive_text)
         #FIXME: recursive is not yet implemented
         if recursive == True:
             pklog.warn("Recursive dependencies are not implemented")
-        self.StatusChanged(STATUS_DEP_RESOLVE)
-        self.NoPercentageUpdates()
+        self.status(STATUS_DEP_RESOLVE)
+        self.percentage(None)
         self._check_init(progress=False)
-        self.AllowCancel(True)
+        self.allow_cancel(True)
         pkgs = []
 
         # Mark all packages for installation
         for id in ids:
-            if self._check_canceled(): return
             pkg = self._find_package_by_id(id)
             if pkg == None:
-                self.ErrorCode(ERROR_PACKAGE_NOT_FOUND,
-                               "Package %s isn't available" % id)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_PACKAGE_NOT_FOUND,
+                           "Package %s isn't available" % id)
                 return
             if pkg._pkg.Essential == True:
-                self.ErrorCode(ERROR_CANNOT_REMOVE_SYSTEM_PACKAGE,
-                               "Package %s cannot be removed." % pkg.name)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_CANNOT_REMOVE_SYSTEM_PACKAGE,
+                           "Package %s cannot be removed." % pkg.name)
                 return
             pkgs.append(pkg)
             try:
@@ -1432,30 +1298,24 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             except Exception, e:
                 #FIXME: Introduce a new info enumerate PK_INFO_MISSING for
                 #       missing dependecies
-                self.ErrorCode(ERROR_DEP_RESOLUTION_FAILED,
-                               "Error removing %s: %s" % (pkg.name, e))
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_DEP_RESOLUTION_FAILED,
+                           "Error removing %s: %s" % (pkg.name, e))
                 return
         # Check the status of the resulting changes
         for p in self._cache.getChanges():
-            if self._check_canceled(): return
             if p.markedDelete:
                 if not p in pkgs and self._is_package_visible(p, filter):
                     self._emit_package(p)
             else:
-                self.ErrorCode(ERROR_DEP_RESOLUTION_FAILED,
-                               "Please use an advanced package management tool "
-                               "e.g. Synaptic or aptitude, since there is a "
-                               "complex dependency situation.")
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_DEP_RESOLUTION_FAILED,
+                           "Please use an advanced package management tool "
+                           "e.g. Synaptic or aptitude, since there is a "
+                           "complex dependency situation.")
                 return
         # Clean up
         self._cache.clear()
-        self.Finished(EXIT_SUCCESS)
 
-    @serialize
-    @threaded
-    def doWhatProvides(self, filters, provides_type, search):
+    def what_provides(self, filters, provides_type, search):
         def get_mapping_db(path):
             """
             Return the gdbm database at the given path or send an
@@ -1464,48 +1324,46 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             if not os.access(path, os.R_OK):
                 if self._cache.has_key("app-install-data") and \
                    self._cache["app-install-data"].isInstalled == False:
-                    self.ErrorCode(ERROR_UNKNOWN,
-                                   "Please install the package "
-                                   "app-install data for a list of "
-                                   "applications that can handle files of "
-                                   "the given type")
+                    self.error(ERROR_UNKNOWN,
+                               "Please install the package "
+                               "app-install data for a list of "
+                               "applications that can handle files of "
+                               "the given type")
                 else:
-                    self.ErrorCode(ERROR_UNKNOWN,
-                                   "The list of applications that can handle "
-                                   "files of the given type cannot be opened.\n"
-                                   "Try to reinstall the package "
-                                   "app-install-data.")
-                return None
-            try:
-                db = gdbm.open(path)
-            except:
-                self.ErrorCode(ERROR_UNKNOWN,
+                    self.error(ERROR_UNKNOWN,
                                "The list of applications that can handle "
                                "files of the given type cannot be opened.\n"
                                "Try to reinstall the package "
                                "app-install-data.")
                 return None
+            try:
+                db = gdbm.open(path)
+            except:
+                self.error(ERROR_UNKNOWN,
+                           "The list of applications that can handle "
+                           "files of the given type cannot be opened.\n"
+                           "Try to reinstall the package "
+                           "app-install-data.")
+                return None
             else:
                 return db
 
-        self.StatusChanged(STATUS_QUERY)
-        self.NoPercentageUpdates()
+        self.status(STATUS_QUERY)
+        self.percentage(None)
         self._check_init(progress=False)
-        self.AllowCancel(False)
+        self.allow_cancel(False)
         if provides_type == PROVIDES_CODEC:
             # The search term from the codec helper looks like this one:
             match = re.match(r"gstreamer([0-9\.]+)\((.+?)\)", search)
             if not match:
-                self.ErrorCode(ERROR_UNKNOWN,
-                               "The search term is invalid")
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_UNKNOWN,
+                           "The search term is invalid")
                 return
             codec = "%s:%s" % (match.group(1), match.group(2))
             db = get_mapping_db("/var/cache/app-install/gai-codec-map.gdbm")
             if db == None:
-                self.ErrorCode(ERROR_INTERNAL_ERROR,
-                               "Failed to open codec mapping database")
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_INTERNAL_ERROR,
+                           "Failed to open codec mapping database")
                 return
             if db.has_key(codec):
                 # The codec mapping db stores the packages as a string
@@ -1523,7 +1381,6 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             handlers = set()
             db = get_mapping_db("/var/cache/app-install/gai-mime-map.gdbm")
             if db == None:
-                self.Finished(EXIT_FAILED)
                 return
             if db.has_key(search):
                 pklog.debug("Mime type is registered: %s" % db[search])
@@ -1536,51 +1393,24 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                                db[search].split(" "))
                 self._emit_visible_packages_by_name(filters, handlers)
         else:
-            self.ErrorCode(ERROR_NOT_SUPPORTED,
-                           "This function is not implemented in this backend")
-            self.Finished(EXIT_FAILED)
+            self.error(ERROR_NOT_SUPPORTED,
+                       "This function is not implemented in this backend")
             return
-        self.Finished(EXIT_SUCCESS)
 
-    @serialize
-    @threaded
-    def doGetFiles(self, package_ids):
+    def get_files(self, package_ids):
         """
         Emit the Files signal which includes the files included in a package
         Apt only supports this for installed packages
         """
-        self.StatusChanged(STATUS_INFO)
+        self.status(STATUS_INFO)
         for id in package_ids:
             pkg = self._find_package_by_id(id)
             if pkg == None:
-                self.ErrorCode(ERROR_PACKAGE_NOT_FOUND,
-                               "Package %s doesn't exist" % pkg.name)
-                self.Finished(EXIT_FAILED)
+                self.error(ERROR_PACKAGE_NOT_FOUND,
+                           "Package %s doesn't exist" % pkg.name)
                 return
             files = string.join(self._get_installed_files(pkg), ";")
-            self.Files(id, files)
-        self.Finished(EXIT_SUCCESS)
-
-    def doSetProxy(self, http_proxy, ftp_proxy):
-        '''
-        Set a proxy server for http and ftp transfer
-        '''
-        if http_proxy:
-            pklog.debug("Set http proxy to %s" % http_proxy)
-            apt_pkg.Config.set("http::Proxy", http_proxy)
-        if ftp_proxy:
-            pklog.debug("Set ftp proxy to %s" % ftp_proxy)
-            apt_pkg.Config.set("ftp::Proxy", ftp_proxy)
-
-    def doSetLocale(self, code):
-        '''
-        Set the locale of the daemon
-
-        '''
-        #FIXME: Needs testing
-        if code != "":
-            pklog.debug("Setting language to %s" % code)
-            locale.setlocale("LANG", code)
+            self.files(id, files)
 
     # Helpers
 
@@ -1592,10 +1422,9 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         try:
             apt_pkg.PkgSystemLock()
         except SystemError:
-            self.ErrorCode(ERROR_CANNOT_GET_LOCK,
-                           "Only use one package management programme at the "
-                           "the same time.")
-            self.Finished(EXIT_FAILED)
+            self.error(ERROR_CANNOT_GET_LOCK,
+                       "Only use one package management programme at the "
+                       "the same time.")
             return False
         return True
 
@@ -1614,21 +1443,19 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         (Re)Open the APT cache
         '''
         pklog.debug("Open APT cache")
-        self.StatusChanged(STATUS_LOADING_CACHE)
+        self.status(STATUS_LOADING_CACHE)
         try:
             self._cache = PackageKitCache(PackageKitOpProgress(self, prange,
                                                                progress))
         except:
-            self.ErrorCode(ERROR_NO_CACHE, "Package cache could not be opened")
-            self.Finished(EXIT_FAILED)
+            self.error(ERROR_NO_CACHE, "Package cache could not be opened")
             self.Exit()
             return
         if self._cache._depcache.BrokenCount > 0:
-            self.ErrorCode(ERROR_DEP_RESOLUTION_FAILED,
-                           "There are broken dependecies on your system. "
-                           "Please use an advanced package manage e.g. "
-                           "Synaptic or aptitude to resolve this situation.")
-            self.Finished(EXIT_FAILED)
+            self.error(ERROR_DEP_RESOLUTION_FAILED,
+                       "There are broken dependecies on your system. "
+                       "Please use an advanced package manage e.g. "
+                       "Synaptic or aptitude to resolve this situation.")
             self.Exit()
             return
         self._last_cache_refresh = time.time()
@@ -1637,8 +1464,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         """
         Try to recover from a package manager failure
         """
-        self.StatusChanged(STATUS_CLEANUP)
-        self.NoPercentageUpdates()
+        self.status(STATUS_CLEANUP)
+        self.percentage(None)
         try:
             d = PackageKitDpkgInstallProgress(self)
             d.startUpdate()
@@ -1657,26 +1484,23 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                                PackageKitInstallProgress(self, install_range))
         except apt.cache.FetchFailedException, e:
             self._open_cache(prange=(95,100))
-            self.ErrorCode(ERROR_PACKAGE_DOWNLOAD_FAILED, e.message)
-            self.Finished(EXIT_FAILED)
+            pklog.critical(_format_string(e.message))
+            self.error(ERROR_PACKAGE_DOWNLOAD_FAILED, _format_string(e.message))
         except apt.cache.FetchCancelledException:
             self._open_cache(prange=(95,100))
-            self.Finished(EXIT_CANCELLED)
             self._canceled.clear()
         except InstallTimeOutPKError, e:
             self._recover()
             self._open_cache(prange=(95,100))
             #FIXME: should provide more information
-            self.ErrorCode(ERROR_UNKNOWN,
-                           "Transaction was cancelled since the installation "
-                           "of a package hung.\n"
-                           "This can be caused by maintainer scripts which "
-                           "require input on the terminal:\n%s" % e.message)
-            self.Finished(EXIT_KILLED)
+            self.error(ERROR_UNKNOWN,
+                       "Transaction was cancelled since the installation "
+                       "of a package hung.\n"
+                       "This can be caused by maintainer scripts which "
+                       "require input on the terminal:\n%s" % e.message)
         except PackageManagerFailedPKError, e:
             self._recover()
-            self.ErrorCode(ERROR_UNKNOWN, "%s\n%s" % (e.message, e.output))
-            self.Finished(EXIT_FAILED)
+            self.error(ERROR_UNKNOWN, "%s\n%s" % (e.message, e.output))
         else:
             return True
         return False
@@ -1705,19 +1529,9 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             pklog.debug("Reloading the cache is required")
             self._open_cache(prange, progress)
         else:
-            self._cache.clear()
+            pass
+        self._cache.clear()
 
-    def _check_canceled(self):
-        '''
-        Check if the current transaction was canceled. If so send the
-        corresponding error message and return True
-        '''
-        if self._canceled.isSet():
-            self.Finished(EXIT_CANCELLED)
-            self._canceled.clear()
-            return True
-        return False
- 
     def get_id_from_package(self, pkg, force_candidate=False):
         '''
         Return the packagekit id of package. By default this will be the 
@@ -1759,7 +1573,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                 else:
                     info = INFO_AVAILABLE
         summary = pkg.summary
-        self.Package(info, id, summary)
+        self.package(id, info, summary)
 
     def _emit_visible_package(self, filters, pkg, info=None):
         """
@@ -1870,8 +1684,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         '''
         Return a package matching to the given package id
         '''
-        # FIXME: Perform more checks
-        name, version, arch, data = self.get_package_from_id(id)
+        # FIXME: Should use package.Version
+        name, version, arch, data = id.split(";", 4)
         if self._cache.has_key(name):
             return self._cache[name]
         else:
@@ -1929,7 +1743,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         # assume "main" section 
         src_section = "main"
         # use the section of the candidate as a starting point
-        section = pkg._depcache.GetCandidateVer(pkg._pkg).Section
+        section = self._cache._depcache.GetCandidateVer(pkg._pkg).Section
 
         # get the source version, start with the binaries version
         bin_ver = pkg.candidateVersion
@@ -2049,7 +1863,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         if not pkg._lookupRecord():
             return ""
         # get the translated description
-        ver = pkg._depcache.GetCandidateVer(pkg._pkg)
+        ver = self._cache._depcache.GetCandidateVer(pkg._pkg)
         desc_iter = ver.TranslatedDescription
         pkg._records.Lookup(desc_iter.FileList.pop(0))
         desc = ""
@@ -2090,10 +1904,12 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             desc += line
         return desc
 
+    def _get_package_id(self, name, version, arch, data):
+        return ";".join((name, version, arch, data))
 
-def sigquit(signum, frame):
-    pklog.error("Was killed")
-    sys.exit(1)
+    def _sigquit(self, signum, frame):
+        self._unlock_cache()
+        sys.exit(1)
 
 def debug_exception(type, value, tb):
     """
@@ -2111,41 +1927,31 @@ def debug_exception(type, value, tb):
         print
         pdb.pm()
 
-def takeover():
+def _text_to_bool(text):
     """
-    Exit the currently running backend
+    Interpret a string as boolean value.
     """
-    PACKAGEKIT_DBUS_SERVICE = 'org.freedesktop.PackageKitAptBackend'
-    PACKAGEKIT_DBUS_INTERFACE = 'org.freedesktop.PackageKitBackend'
-    PACKAGEKIT_DBUS_PATH = '/org/freedesktop/PackageKitBackend'
-    try:
-        bus = dbus.SystemBus()
-    except dbus.DBusException, e:
-        pklog.critical("Unable to connect to dbus: %s" % e)
-        sys.exit(1)
-    proxy = bus.get_object(PACKAGEKIT_DBUS_SERVICE, PACKAGEKIT_DBUS_PATH)
-    iface = dbus.Interface(proxy, PACKAGEKIT_DBUS_INTERFACE)
-    try:
-        iface.Exit()
-    except dbus.DBusException:
-        pass
-
-def run():
+    #FIXME: Should be part of the backend package
+    if text.lower() in ["yes", "true"]:
+        return True
+    return False
+
+def _format_string(txt, encoding='utf-8'):
+    #FIXME: Should be part of the backend package
+    if not isinstance(txt, unicode):
+        txt = unicode(txt, encoding, errors='replace')
+    return txt.replace("\n", ";")
+
+
+def run(args):
     """
     Start the apt backend
     """
-    loop = dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
-    bus = dbus.SystemBus(mainloop=loop)
-    bus_name = dbus.service.BusName(PACKAGEKIT_DBUS_SERVICE, bus=bus)
-    manager = PackageKitAptBackend(bus_name, PACKAGEKIT_DBUS_PATH)
-    manager.run()
+    backend = PackageKitAptBackend("")
+    backend.dispatcher(args)
 
 def main():
     parser = optparse.OptionParser(description="APT backend for PackageKit")
-    parser.add_option("-t", "--takeover",
-                      action="store_true", dest="takeover",
-                      help="Exit the currently running backend "
-                           "(Only needed by developers)")
     parser.add_option("-r", "--root",
                       action="store", type="string", dest="root",
                       help="Use the given directory as the system root "
@@ -2170,16 +1976,13 @@ def main():
         config.Set("Dir::State::status",
                    os.path.join(options.root, "/var/lib/dpkg/status"))
 
-    if options.takeover:
-        takeover()
-
     if options.profile:
         import hotshot
         prof = hotshot.Profile(options.profile)
         prof.runcall(run)
         prof.close()
     else:
-        run()
+        run(args)
 
 if __name__ == '__main__':
     main()
diff --git a/backends/apt/pk-backend-apt.c b/backends/apt/pk-backend-apt.c
index f57e523..2cd799d 100644
--- a/backends/apt/pk-backend-apt.c
+++ b/backends/apt/pk-backend-apt.c
@@ -1,5 +1,7 @@
 /* -*- 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) 2008-2009 Sebastian Heinlein <glatzor at ubuntu.com>
  * Copyright (C) 2007 Ali Sabil <ali.sabil at gmail.com>
  * Copyright (C) 2007 Tom Parker <palfrey at tevp.net>
  *
@@ -22,12 +24,29 @@
 
 #include "config.h"
 
+#include <packagekit-glib/packagekit.h>
 #include <pk-backend.h>
-#include <pk-backend-dbus.h>
+#include <pk-backend-spawn.h>
+#include <string.h>
 
-static PkBackendDbus *dbus;
+static PkBackendSpawn *spawn;
 
-#define PK_DBUS_BACKEND_SERVICE_APT   "org.freedesktop.PackageKitAptBackend"
+/**
+  * backend_stderr_cb:
+  */
+static gboolean
+backend_stderr_cb (PkBackend *backend, const gchar *output)
+{
+	// APT is a little bit chatty on stderr
+	if (strstr (output, "W:") != NULL)
+		return FALSE;
+	if (strstr (output, "E:") != NULL)
+		return FALSE;
+	// There have been a lot of API changes in python-apt recently
+	if (strstr (output, "DeprecationWarning") != NULL)
+		return FALSE;
+	return TRUE;
+}
 
 /**
  * backend_initialize:
@@ -37,8 +56,9 @@ static void
 backend_initialize (PkBackend *backend)
 {
 	egg_debug ("backend: initialize");
-	dbus = pk_backend_dbus_new ();
-	pk_backend_dbus_set_name (dbus, PK_DBUS_BACKEND_SERVICE_APT);
+	spawn = pk_backend_spawn_new ();
+	pk_backend_spawn_set_filter_stderr (spawn, backend_stderr_cb);
+	pk_backend_spawn_set_name (spawn, "apt");
 }
 
 /**
@@ -49,292 +69,424 @@ static void
 backend_destroy (PkBackend *backend)
 {
 	egg_debug ("backend: destroy");
-	pk_backend_dbus_kill (dbus);
-	g_object_unref (dbus);
+	g_object_unref (spawn);
 }
 
 /**
- * backend_get_groups:
+ * backend_get_mime_types:
  */
-static PkBitfield
-backend_get_groups (PkBackend *backend)
+static gchar *
+backend_get_mime_types (PkBackend *backend)
 {
-	return pk_bitfield_from_enums (
-		PK_GROUP_ENUM_ACCESSORIES,
-		PK_GROUP_ENUM_ADMIN_TOOLS,
-		PK_GROUP_ENUM_COMMUNICATION,
-		PK_GROUP_ENUM_DOCUMENTATION,
-		PK_GROUP_ENUM_DESKTOP_GNOME,
-		PK_GROUP_ENUM_DESKTOP_KDE,
-		PK_GROUP_ENUM_DESKTOP_OTHER,
-		PK_GROUP_ENUM_ELECTRONICS,
-		PK_GROUP_ENUM_GAMES,
-		PK_GROUP_ENUM_GRAPHICS,
-		PK_GROUP_ENUM_INTERNET,
-		PK_GROUP_ENUM_LEGACY,
-		PK_GROUP_ENUM_LOCALIZATION,
-		PK_GROUP_ENUM_MULTIMEDIA,
-		PK_GROUP_ENUM_NETWORK,
-		PK_GROUP_ENUM_OTHER,
-		PK_GROUP_ENUM_PROGRAMMING,
-		PK_GROUP_ENUM_PUBLISHING,
-		PK_GROUP_ENUM_SCIENCE,
-		PK_GROUP_ENUM_SYSTEM,
-		PK_GROUP_ENUM_UNKNOWN,
-		PK_GROUP_ENUM_COLLECTIONS,
-		-1);
+	return g_strdup ("application/x-deb");
 }
 
 /**
- * backend_get_filters:
+ * pk_backend_bool_to_text:
  */
-static PkBitfield
-backend_get_filters (PkBackend *backend)
+static const gchar *
+pk_backend_bool_to_text (gboolean value)
 {
-	return pk_bitfield_from_enums (
-		PK_FILTER_ENUM_GUI,
-		PK_FILTER_ENUM_INSTALLED,
-		PK_FILTER_ENUM_DEVELOPMENT,
-		PK_FILTER_ENUM_SUPPORTED,
-		PK_FILTER_ENUM_FREE,
-		PK_FILTER_ENUM_COLLECTIONS,
-		-1);
+	if (value == TRUE)
+		return "yes";
+	return "no";
 }
 
 /**
- * backend_get_updates:
+ * pk_backend_cancel:
  */
 static void
-backend_get_updates (PkBackend *backend, PkBitfield filters)
+backend_cancel (PkBackend *backend)
 {
-	pk_backend_dbus_get_updates (dbus, filters);
+	/* this feels bad... */
+	pk_backend_spawn_kill (spawn);
 }
 
 /**
- * backend_refresh_cache:
- * */
+ * backend_download_packages:
+ */
 static void
-backend_refresh_cache (PkBackend *backend, gboolean force)
+backend_download_packages (PkBackend *backend, gchar **package_ids, const gchar *directory)
 {
-	pk_backend_dbus_refresh_cache(dbus, force);
+	gchar *package_ids_temp;
+
+	/* send the complete list as stdin */
+	package_ids_temp = pk_package_ids_to_text (package_ids);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "download-packages", directory, package_ids_temp, NULL);
+	g_free (package_ids_temp);
 }
 
 /**
- * pk_backend_update_system:
- * */
+ * backend_get_depends:
+ */
 static void
-backend_update_system (PkBackend *backend)
+backend_get_depends (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
 {
-	pk_backend_dbus_update_system (dbus);
+	gchar *filters_text;
+	gchar *package_ids_temp;
+	package_ids_temp = pk_package_ids_to_text (package_ids);
+	filters_text = pk_filter_bitfield_to_text (filters);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "get-depends", filters_text, package_ids_temp, pk_backend_bool_to_text (recursive), NULL);
+	g_free (filters_text);
+	g_free (package_ids_temp);
 }
 
 /**
- * backend_update_packages
- *  */
+ * backend_get_details:
+ */
 static void
-backend_update_packages (PkBackend *backend, gchar **package_ids)
+backend_get_details (PkBackend *backend, gchar **package_ids)
 {
-	pk_backend_dbus_update_packages (dbus, package_ids);
+	gchar *package_ids_temp;
+	package_ids_temp = pk_package_ids_to_text (package_ids);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "get-details", package_ids_temp, NULL);
+	g_free (package_ids_temp);
 }
 
 /**
- * backend_install_packages
- *  */
+ * backend_get_distro_upgrades:
+ */
 static void
-backend_install_packages (PkBackend *backend, gchar **package_ids)
+backend_get_distro_upgrades (PkBackend *backend)
 {
-	pk_backend_dbus_install_packages (dbus, package_ids);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "get-distro-upgrades", NULL);
 }
 
 /**
- *  * backend_install_files:
- *   */
+ * backend_get_files:
+ */
 static void
-backend_install_files (PkBackend *backend, gboolean trusted, gchar **full_paths)
+backend_get_files (PkBackend *backend, gchar **package_ids)
 {
-	        pk_backend_dbus_install_files (dbus, trusted, full_paths);
+	gchar *package_ids_temp;
+	package_ids_temp = pk_package_ids_to_text (package_ids);
+	pk_backend_spawn_helper (spawn,  "pk-backend-apt.py", "get-files", package_ids_temp, NULL);
+	g_free (package_ids_temp);
 }
 
+/**
+ * backend_get_requires:
+ */
+static void
+backend_get_requires (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
+{
+	gchar *package_ids_temp;
+	gchar *filters_text;
+	package_ids_temp = pk_package_ids_to_text (package_ids);
+	filters_text = pk_filter_bitfield_to_text (filters);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "get-requires", filters_text, package_ids_temp, pk_backend_bool_to_text (recursive), NULL);
+	g_free (filters_text);
+	g_free (package_ids_temp);
+}
 
 /**
- * backend_remove_packages
- *  */
+ * backend_get_updates:
+ */
 static void
-backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow_deps, gboolean autoremove)
+backend_get_updates (PkBackend *backend, PkBitfield filters)
 {
-	pk_backend_dbus_remove_packages (dbus, package_ids, allow_deps, autoremove);
+	gchar *filters_text;
+	filters_text = pk_filter_bitfield_to_text (filters);
+	pk_backend_spawn_helper (spawn,  "pk-backend-apt.py", "get-updates", filters_text, NULL);
+	g_free (filters_text);
 }
 
 /**
- * backend_get_files:
- *  */
+ * backend_get_packages:
+ */
 static void
-backend_get_files (PkBackend *backend, gchar **package_ids)
+backend_get_packages (PkBackend *backend, PkBitfield filters)
 {
-	pk_backend_dbus_get_files (dbus, package_ids);
+	gchar *filters_text;
+	filters_text = pk_filter_bitfield_to_text (filters);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "get-packages", filters_text, NULL);
+	g_free (filters_text);
 }
 
-#ifdef HAVE_PYTHON_META_RELEASE
 /**
- * backend_get_distro_upgrades:
- *  */
+ * backend_get_update_detail:
+ */
 static void
-backend_get_distro_upgrades (PkBackend *backend)
+backend_get_update_detail (PkBackend *backend, gchar **package_ids)
 {
-	pk_backend_dbus_get_distro_upgrades (dbus);
+	gchar *package_ids_temp;
+	package_ids_temp = pk_package_ids_to_text (package_ids);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "get-update-detail", package_ids_temp, NULL);
+	g_free (package_ids_temp);
 }
-#endif /* HAVE_PYTHON_META_RELEASE */
 
+/**
+ * backend_install_packages:
+ */
+static void
+backend_install_packages (PkBackend *backend, gchar **package_ids)
+{
+	gchar *package_ids_temp;
+
+	/* send the complete list as stdin */
+	package_ids_temp = pk_package_ids_to_text (package_ids);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "install-packages", package_ids_temp, NULL);
+	g_free (package_ids_temp);
+}
 
 /**
- * backend_get_details:
- *  */
+ * backend_install_files:
+ */
 static void
-backend_get_details (PkBackend *backend, gchar **package_ids)
+backend_install_files (PkBackend *backend, gboolean trusted, gchar **full_paths)
 {
-	pk_backend_dbus_get_details (dbus, package_ids);
+	gchar *package_ids_temp;
+
+	/* send the complete list as stdin */
+	package_ids_temp = g_strjoinv (PK_BACKEND_SPAWN_FILENAME_DELIM, full_paths);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "install-files", pk_backend_bool_to_text (trusted), package_ids_temp, NULL);
+	g_free (package_ids_temp);
 }
 
 /**
- * backend_get_update_detail:
- *  */
+ * backend_install_signature:
+ *
+FIXME: Not implemented
+ 
 static void
-backend_get_update_detail (PkBackend *backend, gchar **package_ids)
+backend_install_signature (PkBackend *backend, PkSigTypeEnum type,
+			   const gchar *key_id, const gchar *package_id)
 {
-	pk_backend_dbus_get_update_detail (dbus, package_ids);
+	const gchar *type_text;
+
+	type_text = pk_sig_type_enum_to_text (type);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "install-signature", type_text, key_id, package_id, NULL);
+} */
+
+/**
+ * backend_refresh_cache:
+ */
+static void
+backend_refresh_cache (PkBackend *backend, gboolean force)
+{
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "refresh-cache", NULL);
 }
 
 /**
- *  * pk_backend_search_details:
- *   */
+ * pk_backend_remove_packages:
+ */
 static void
-backend_search_details (PkBackend *backend, PkBitfield filters, const gchar *search)
+backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow_deps, gboolean autoremove)
 {
-	pk_backend_dbus_search_details (dbus, filters, search);
+	gchar *package_ids_temp;
+
+	/* send the complete list as stdin */
+	package_ids_temp = pk_package_ids_to_text (package_ids);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "remove-packages", pk_backend_bool_to_text (allow_deps), package_ids_temp, NULL);
+	g_free (package_ids_temp);
 }
 
 /**
- *  * pk_backend_search_name:
- *   */
+ * pk_backend_search_details:
+ */
 static void
-backend_search_name (PkBackend *backend, PkBitfield filters, const gchar *search)
+backend_search_details (PkBackend *backend, PkBitfield filters, const gchar *search)
 {
-	pk_backend_dbus_search_name (dbus, filters, search);
+	gchar *filters_text;
+	filters_text = pk_filter_bitfield_to_text (filters);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "search-details", filters_text, search, NULL);
+	g_free (filters_text);
 }
 
 /**
- *  * pk_backend_search_file:
- *   */
+ * pk_backend_search_file:
+ */
 static void
 backend_search_file (PkBackend *backend, PkBitfield filters, const gchar *search)
 {
-	pk_backend_dbus_search_file (dbus, filters, search);
-} 
+	gchar *filters_text;
+	filters_text = pk_filter_bitfield_to_text (filters);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "search-file", filters_text, search, NULL);
+	g_free (filters_text);
+}
 
 /**
- *  * pk_backend_search_group:
- *   */
+ * pk_backend_search_group:
+ */
 static void
-backend_search_group (PkBackend *backend, PkBitfield filters, const gchar *group)
+backend_search_group (PkBackend *backend, PkBitfield filters, const gchar *search)
 {
-	pk_backend_dbus_search_group (dbus, filters, group);
+	gchar *filters_text;
+	filters_text = pk_filter_bitfield_to_text (filters);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "search-group", filters_text, search, NULL);
+	g_free (filters_text);
 }
 
+/**
+ * pk_backend_search_name:
+ */
+static void
+backend_search_name (PkBackend *backend, PkBitfield filters, const gchar *search)
+{
+	gchar *filters_text;
+	filters_text = pk_filter_bitfield_to_text (filters);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "search-name", filters_text, search, NULL);
+	g_free (filters_text);
+}
 
 /**
- *  * pk_backend_cancel:
- *   */
+ * pk_backend_update_packages:
+ */
 static void
-backend_cancel (PkBackend *backend)
+backend_update_packages (PkBackend *backend, gchar **package_ids)
 {
-	pk_backend_dbus_cancel (dbus);
+	gchar *package_ids_temp;
+
+	/* send the complete list as stdin */
+	package_ids_temp = pk_package_ids_to_text (package_ids);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "update-packages", package_ids_temp, NULL);
+	g_free (package_ids_temp);
 }
 
 /**
- *  * pk_backend_resolve:
- *   */
+ * pk_backend_update_system:
+ */
 static void
-backend_resolve (PkBackend *backend, PkBitfield filters, gchar **package_ids)
+backend_update_system (PkBackend *backend)
 {
-	        pk_backend_dbus_resolve (dbus, filters, package_ids);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "update-system", NULL);
 }
 
 /**
- *  * pk_backend_get_packages:
- *   */
+ * pk_backend_resolve:
+ */
 static void
-backend_get_packages (PkBackend *backend, PkBitfield filters)
+backend_resolve (PkBackend *backend, PkBitfield filters, gchar **package_ids)
 {
-	        pk_backend_dbus_get_packages (dbus, filters);
+	gchar *filters_text;
+	gchar *package_ids_temp;
+	filters_text = pk_filter_bitfield_to_text (filters);
+	package_ids_temp = pk_package_ids_to_text (package_ids);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "resolve", filters_text, package_ids_temp, NULL);
+	g_free (filters_text);
+	g_free (package_ids_temp);
 }
 
 #ifdef HAVE_PYTHON_SOFTWARE_PROPERTIES
 /**
- *  * pk_backend_get_repo_list:
- *   */
+ * pk_backend_get_repo_list:
+ */
 static void
 backend_get_repo_list (PkBackend *backend, PkBitfield filters)
 {
-	        pk_backend_dbus_get_repo_list (dbus, filters);
+	gchar *filters_text;
+	filters_text = pk_filter_bitfield_to_text (filters);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "get-repo-list", filters_text, NULL);
+	g_free (filters_text);
 }
 
 /**
- *  * pk_backend_repo_enable
- *   */
+ * pk_backend_repo_enable:
+ */
 static void
-backend_repo_enable (PkBackend *backend, const gchar *repo_id, gboolean enable )
+backend_repo_enable (PkBackend *backend, const gchar *rid, gboolean enabled)
 {
-	        pk_backend_dbus_repo_enable (dbus, repo_id, enable);
+	if (enabled == TRUE) {
+		pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "repo-enable", rid, "true", NULL);
+	} else {
+		pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "repo-enable", rid, "false", NULL);
+	}
 }
-#endif /* HAVE_PYTHON_SOFTWARE_PROPERTIES */
-
 
 /**
- *  * pk_backend_get_requires:
- *   */
+ * pk_backend_repo_set_data:
+ *
+FIXME: Not implemented
+ 
 static void
-backend_get_requires (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
+backend_repo_set_data (PkBackend *backend, const gchar *rid, const gchar *parameter, const gchar *value)
 {
-	        pk_backend_dbus_get_requires (dbus, filters, package_ids, recursive);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "repo-set-data", rid, parameter, value, NULL);
 }
+*/
+#endif /* HAVE_PYTHON_SOFTWARE_PROPERTIES */
 
 /**
- *  * pk_backend_get_depends:
- *   */
+ * backend_what_provides:
+ */
 static void
-backend_get_depends (PkBackend *backend, PkBitfield filters, gchar **package_ids, gboolean recursive)
+backend_what_provides (PkBackend *backend, PkBitfield filters, PkProvidesEnum provides, const gchar *search)
 {
-	        pk_backend_dbus_get_depends (dbus, filters, package_ids, recursive);
+	gchar *filters_text;
+	const gchar *provides_text;
+	provides_text = pk_provides_enum_to_text (provides);
+	filters_text = pk_filter_bitfield_to_text (filters);
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "what-provides", filters_text, provides_text, search, NULL);
+	g_free (filters_text);
 }
 
 /**
- *  * pk_backend_download_packages
- *   */
+ * pk_backend_get_categories:
+ *
+FIXME: Not implemented
 static void
-backend_download_packages (PkBackend *backend, gchar **package_ids, const gchar *directory)
+backend_get_categories (PkBackend *backend)
 {
-	        pk_backend_dbus_download_packages (dbus, package_ids, directory);
-}
+	pk_backend_spawn_helper (spawn, "pk-backend-apt.py", "get-categories", NULL);
+} */
 
 /**
- *  * pk_backend_what_provides
- *   */
-static void
-backend_what_provides (PkBackend *backend, PkBitfield filters, PkProvidesEnum provides, const gchar *search)
+ * backend_get_groups:
+ */
+static PkBitfield
+backend_get_groups (PkBackend *backend)
 {
-	        pk_backend_dbus_what_provides (dbus, filters, provides, search);
+	return pk_bitfield_from_enums (
+		PK_GROUP_ENUM_ACCESSORIES,
+		PK_GROUP_ENUM_ADMIN_TOOLS,
+		PK_GROUP_ENUM_COMMUNICATION,
+		PK_GROUP_ENUM_DOCUMENTATION,
+		PK_GROUP_ENUM_DESKTOP_GNOME,
+		PK_GROUP_ENUM_DESKTOP_KDE,
+		PK_GROUP_ENUM_DESKTOP_OTHER,
+		PK_GROUP_ENUM_ELECTRONICS,
+		PK_GROUP_ENUM_GAMES,
+		PK_GROUP_ENUM_GRAPHICS,
+		PK_GROUP_ENUM_INTERNET,
+		PK_GROUP_ENUM_LEGACY,
+		PK_GROUP_ENUM_LOCALIZATION,
+		PK_GROUP_ENUM_MULTIMEDIA,
+		PK_GROUP_ENUM_NETWORK,
+		PK_GROUP_ENUM_OTHER,
+		PK_GROUP_ENUM_PROGRAMMING,
+		PK_GROUP_ENUM_PUBLISHING,
+		PK_GROUP_ENUM_SCIENCE,
+		PK_GROUP_ENUM_SYSTEM,
+		PK_GROUP_ENUM_UNKNOWN,
+		PK_GROUP_ENUM_COLLECTIONS,
+		-1);
 }
 
+/**
+ * backend_get_filters:
+ */
+static PkBitfield
+backend_get_filters (PkBackend *backend)
+{
+	return pk_bitfield_from_enums (
+		PK_FILTER_ENUM_GUI,
+		PK_FILTER_ENUM_INSTALLED,
+		PK_FILTER_ENUM_DEVELOPMENT,
+		PK_FILTER_ENUM_SUPPORTED,
+		PK_FILTER_ENUM_FREE,
+		PK_FILTER_ENUM_COLLECTIONS,
+		-1);
+}
 
 
 PK_BACKEND_OPTIONS (
 	"Apt",					/* description */
-	"Ali Sabil <ali.sabil at gmail.com>; Tom Parker <palfrey at tevp.net>; Sebastian Heinlein <glatzor at ubuntu.com>",	/* author */
+	"Sebastian Heinlein <glatzor at ubuntu.com>",	/* author */
 	backend_initialize,			/* initalize */
 	backend_destroy,			/* destroy */
 	backend_get_groups,			/* get_groups */
 	backend_get_filters,			/* get_filters */
-	NULL,					/* get_mime_types */
+	backend_get_mime_types,			/* get_mime_types */
 	backend_cancel,				/* cancel */
 	backend_download_packages,		/* download_packages */
 	NULL,					/* get_categories */
@@ -376,3 +528,5 @@ PK_BACKEND_OPTIONS (
 	backend_update_system,			/* update_system */
 	backend_what_provides			/* what_provides */
 );
+
+
diff --git a/backends/apt/pk-backend-apt.py b/backends/apt/pk-backend-apt.py
old mode 100644
new mode 100755


More information about the PackageKit-commit mailing list