socsvn commit: r253262 - soc2013/mattbw/dummy

mattbw at FreeBSD.org mattbw at FreeBSD.org
Wed Jun 19 22:51:13 UTC 2013


Author: mattbw
Date: Wed Jun 19 22:51:11 2013
New Revision: 253262
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=253262

Log:
  start again against packagekit 0.6.11, until 0.8.9 or some version in between works with FreeBSD.

Added:
  soc2013/mattbw/dummy/egg-string.h
  soc2013/mattbw/dummy/pk-backend-dummy-089.c
  soc2013/mattbw/dummy/pk-backend.h
  soc2013/mattbw/dummy/pk-store.h
Modified:
  soc2013/mattbw/dummy/Makefile
  soc2013/mattbw/dummy/pk-backend-dummy.c

Modified: soc2013/mattbw/dummy/Makefile
==============================================================================
--- soc2013/mattbw/dummy/Makefile	Wed Jun 19 21:52:32 2013	(r253261)
+++ soc2013/mattbw/dummy/Makefile	Wed Jun 19 22:51:11 2013	(r253262)
@@ -4,7 +4,17 @@
 SHLIB_MAJOR=	1
 SRCS=		pk-backend-dummy.c
 
-PKGS= 		pkg packagekit-plugin gio-2.0 gio-unix-2.0
+USE_PK_PKGCONF=	0
+
+PKGS= 		pkg gio-2.0 gio-unix-2.0
+
+.if USE_PK_PKGCONF
+PKGS+=		packagekit-glib2
+.else
+CFLAGS+=	-I/usr/local/include/PackageKit -I/usr/local/include/PackageKit/backend
+LDFLAGS+=	-L/usr/local/lib -lpackagekit-glib2
+.endif
+
 CFLAGS+=	`pkg-config --cflags ${PKGS}`
 CFLAGS+=	-DPK_COMPILATION
 LDFLAGS+=	`pkg-config --libs ${PKGS}`

Added: soc2013/mattbw/dummy/egg-string.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2013/mattbw/dummy/egg-string.h	Wed Jun 19 22:51:11 2013	(r253262)
@@ -0,0 +1,48 @@
+/* -*- 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef __EGG_STRING_H
+#define __EGG_STRING_H
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+guint		 egg_strlen				(const gchar	*text,
+							 guint		 len)
+							 G_GNUC_WARN_UNUSED_RESULT;
+gboolean	 egg_strzero				(const gchar	*text)
+							 G_GNUC_WARN_UNUSED_RESULT;
+gboolean	 egg_strvequal				(gchar		**id1,
+							 gchar		**id2)
+							 G_GNUC_WARN_UNUSED_RESULT;
+gboolean	 egg_strtoint				(const gchar	*text,
+							 gint		*value);
+gboolean	 egg_strtouint				(const gchar	*text,
+							 guint		*value);
+gchar		*egg_strreplace				(const gchar	*text,
+							 const gchar	*find,
+							 const gchar	*replace);
+void		 egg_string_test			(gpointer	 user_data);
+
+G_END_DECLS
+
+#endif /* __EGG_STRING_H */

Added: soc2013/mattbw/dummy/pk-backend-dummy-089.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2013/mattbw/dummy/pk-backend-dummy-089.c	Wed Jun 19 22:51:11 2013	(r253262)
@@ -0,0 +1,1738 @@
+/*-
+ * Copyright (C) 2007-2010 Richard Hughes <richard at hughsie.com>
+ *                    2013 Matt Windsor <mattbw at FreeBSD.org>
+ *
+ * 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., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/* NB: This is under heavy construction.  Currently, it's just the dummy backend
+ * from PackageKit with a few modifications to build using BSD makefiles.
+ * Eventually it will actually support pkgng!
+ */
+
+#include <gmodule.h>
+#include <glib.h>
+#include <string.h>
+#include <stdlib.h>
+#include <gio/gio.h>
+#include <gio/gunixsocketaddress.h>
+
+#include "plugin/pk-backend.h"
+#include "plugin/pk-backend-job.h"
+
+#include "pkg.h"
+
+
+typedef struct {
+	gboolean	has_signature;
+	gboolean	repo_enabled_devel;
+	gboolean	repo_enabled_fedora;
+	gboolean	repo_enabled_livna;
+	gboolean	repo_enabled_local;
+	gboolean	updated_gtkhtml;
+	gboolean	updated_kernel;
+	gboolean	updated_powertop;
+	gboolean	use_blocked;
+	gboolean	use_distro_upgrade;
+	gboolean	use_eula;
+	gboolean	use_gpg;
+	gboolean	use_media;
+	gboolean	use_trusted;
+	gchar         **package_ids;
+	gchar         **values;
+	PkBitfield	filters;
+	gboolean	fake_db_locked;
+}		PkBackendDummyPrivate;
+
+typedef struct {
+	guint		progress_percentage;
+	GSocket        *socket;
+	guint		socket_listen_id;
+	GCancellable   *cancellable;
+	gulong		signal_timeout;
+}		PkBackendDummyJobData;
+
+static PkBackendDummyPrivate *priv;
+
+/**
+ * pk_backend_initialize:
+ */
+void
+pk_backend_initialize(PkBackend * backend)
+{
+	/* create private area */
+	priv = g_new0(PkBackendDummyPrivate, 1);
+	priv->repo_enabled_fedora = TRUE;
+	priv->repo_enabled_devel = TRUE;
+	priv->repo_enabled_livna = TRUE;
+	priv->use_trusted = TRUE;
+}
+
+/**
+ * pk_backend_destroy:
+ */
+void
+pk_backend_destroy(PkBackend * backend)
+{
+	g_free(priv);
+}
+
+/**
+ * pk_backend_get_groups:
+ */
+PkBitfield
+pk_backend_get_groups(PkBackend * backend)
+{
+	return pk_bitfield_from_enums(PK_GROUP_ENUM_ACCESSIBILITY,
+				      PK_GROUP_ENUM_GAMES,
+				      PK_GROUP_ENUM_SYSTEM,
+				      -1);
+}
+
+/**
+ * pk_backend_get_filters:
+ */
+PkBitfield
+pk_backend_get_filters(PkBackend * backend)
+{
+	return pk_bitfield_from_enums(PK_FILTER_ENUM_GUI,
+				      PK_FILTER_ENUM_INSTALLED,
+				      PK_FILTER_ENUM_DEVELOPMENT,
+				      -1);
+}
+
+/**
+ * pk_backend_get_mime_types:
+ */
+gchar         **
+pk_backend_get_mime_types(PkBackend * backend)
+{
+	const gchar    *mime_types[] = {
+		"application/x-rpm",
+		"application/x-deb",
+	NULL};
+	return g_strdupv((gchar **) mime_types);
+}
+
+/**
+ * pk_backend_cancel_timeout:
+ */
+static		gboolean
+pk_backend_cancel_timeout(gpointer data)
+{
+	PkBackendJob   *job = (PkBackendJob *) data;
+	PkBackendDummyJobData *job_data = pk_backend_job_get_user_data(job);
+
+	/* we can now cancel again */
+	job_data->signal_timeout = 0;
+
+	/* now mark as finished */
+	pk_backend_job_error_code(job, PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				  "The task was stopped successfully");
+	pk_backend_job_finished(job);
+	return FALSE;
+}
+
+/**
+ * pk_backend_cancel:
+ */
+void
+pk_backend_cancel(PkBackend * backend, PkBackendJob * job)
+{
+	PkBackendDummyJobData *job_data = pk_backend_job_get_user_data(job);
+
+	/* try to cancel the transaction */
+	g_debug("cancelling transaction");
+	g_cancellable_cancel(job_data->cancellable);
+	if (job_data->signal_timeout != 0) {
+		g_source_remove(job_data->signal_timeout);
+
+		/* emulate that it takes us a few ms to cancel */
+		g_timeout_add(1500, pk_backend_cancel_timeout, job);
+	}
+}
+
+/**
+ * pk_backend_get_depends:
+ */
+void
+pk_backend_get_depends(PkBackend * backend, PkBackendJob * job, PkBitfield filters, gchar ** package_ids, gboolean recursive)
+{
+	pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY);
+
+	if (g_strcmp0(package_ids[0], "scribus;1.3.4-1.fc8;i386;fedora") == 0) {
+		pk_backend_job_package(job, PK_INFO_ENUM_AVAILABLE,
+				       "scribus-clipart;1.3.4-1.fc8;i386;fedora", "Clipart for scribus");
+	} else {
+		pk_backend_job_package(job, PK_INFO_ENUM_INSTALLED,
+			    "glib2;2.14.0;i386;fedora", "The GLib library");
+		pk_backend_job_package(job, PK_INFO_ENUM_AVAILABLE,
+				       "gtk2;gtk2-2.11.6-6.fc8;i386;fedora", "GTK+ Libraries for GIMP");
+	}
+	pk_backend_job_finished(job);
+}
+
+/**
+ * pk_backend_get_details:
+ */
+void
+pk_backend_get_details(PkBackend * backend, PkBackendJob * job, gchar ** package_ids)
+{
+	guint		i;
+	guint		len;
+	const gchar    *package_id;
+
+	pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY);
+	pk_backend_job_set_percentage(job, 0);
+
+	/* each one has a different detail for testing */
+	len = g_strv_length(package_ids);
+	for (i = 0; i < len; i++) {
+		package_id = package_ids[i];
+		if (g_strcmp0(package_id, "powertop;1.8-1.fc8;i386;fedora") == 0) {
+			pk_backend_job_details(job, "powertop;1.8-1.fc8;i386;fedora", "GPL2", PK_GROUP_ENUM_PROGRAMMING,
+					       "PowerTOP is a tool that finds the software component(s) that make your "
+					       "computer use more power than necessary while it is idle.", "http://live.gnome.org/powertop", 101 * 1024);
+		} else if (g_strcmp0(package_id, "kernel;2.6.23-0.115.rc3.git1.fc8;i386;installed") == 0) {
+			pk_backend_job_details(job, "kernel;2.6.23-0.115.rc3.git1.fc8;i386;installed", "GPL2", PK_GROUP_ENUM_PROGRAMMING,
+					       "The kernel package contains the Linux kernel (vmlinuz), the core of any "
+					       "Linux operating system.  The kernel handles the basic functions of the "
+					       "operating system: memory allocation, process allocation, device input "
+					       "and output, etc.", "http://www.kernel.org", 33 * 1024 * 1024);
+		} else if (g_strcmp0(package_id, "gtkhtml2;2.19.1-4.fc8;i386;fedora") == 0) {
+			pk_backend_job_details(job, "gtkhtml2;2.19.1-4.fc8;i386;fedora", "GPL2", PK_GROUP_ENUM_PROGRAMMING,
+					       "GtkHTML2 (sometimes called libgtkhtml) is a widget for displaying html "
+					       "pages.", "http://live.gnome.org/gtkhtml", 133 * 1024);
+		} else if (g_strcmp0(package_id, "vino;2.24.2.fc9;i386;fedora") == 0) {
+			pk_backend_job_details(job, "vino;2.24.2.fc9;i386;fedora", "GPL2", PK_GROUP_ENUM_PROGRAMMING,
+					       "Vino is a VNC server for GNOME. It allows remote users to "
+					       "connect to a running GNOME session using VNC.", "http://live.gnome.org/powertop", 3 * 1024 * 1024);
+		} else if (g_strcmp0(package_id, "gnome-power-manager;2.6.19;i386;fedora") == 0) {
+			pk_backend_job_details(job, "gnome-power-manager;2.6.19;i386;fedora", "GPL2", PK_GROUP_ENUM_PROGRAMMING,
+					       "GNOME Power Manager uses the information and facilities provided by HAL "
+					       "displaying icons and handling user callbacks in an interactive GNOME session.\n"
+					       "GNOME Power Preferences allows authorised users to set policy and "
+					       "change preferences.", "http://projects.gnome.org/gnome-power-manager/", 13 * 1024 * 1024);
+	//TODO:	add other packages
+		} else {
+			pk_backend_job_details(job, "scribus;1.3.4-1.fc8;i386;fedora", "GPL2", PK_GROUP_ENUM_PROGRAMMING,
+					       "Scribus is an desktop *open source* page layöut program with "
+					       "the aim of producing commercial grade output in **PDF** and "
+					       "**Postscript**, primarily, though not exclusively for Linux.\n"
+					       "\n"
+					       "While the goals of the program are for ease of use and simple easy to "
+					       "understand tools, Scribus offers support for professional publishing "
+					       "features, such as CMYK color, easy PDF creation, Encapsulated Postscript "
+					       "import/export and creation of color separations.", "http://live.gnome.org/scribus", 44 * 1024 * 1024);
+		}
+	}
+	pk_backend_job_set_percentage(job, 100);
+	pk_backend_job_finished(job);
+}
+
+/**
+ * pk_backend_get_distro_upgrades:
+ */
+void
+pk_backend_get_distro_upgrades(PkBackend * backend, PkBackendJob * job)
+{
+	pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY);
+	if (!priv->use_distro_upgrade)
+		goto out;
+	pk_backend_job_distro_upgrade(job, PK_DISTRO_UPGRADE_ENUM_STABLE,
+				      "fedora-9", "Fedora 9");
+	pk_backend_job_distro_upgrade(job, PK_DISTRO_UPGRADE_ENUM_UNSTABLE,
+				      "fedora-10-rc1", "Fedora 10 RC1");
+out:
+	pk_backend_job_finished(job);
+}
+
+/**
+ * pk_backend_get_files:
+ */
+void
+pk_backend_get_files(PkBackend * backend, PkBackendJob * job, gchar ** package_ids)
+{
+	guint		i;
+	guint		len;
+	const gchar    *package_id;
+
+	pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY);
+
+	len = g_strv_length(package_ids);
+	for (i = 0; i < len; i++) {
+		package_id = package_ids[i];
+		if (g_strcmp0(package_id, "powertop;1.8-1.fc8;i386;fedora") == 0)
+			pk_backend_job_files(job, package_id, "/usr/share/man/man1/boo;/usr/bin/xchat-gnome");
+		else if (g_strcmp0(package_id, "kernel;2.6.23-0.115.rc3.git1.fc8;i386;installed") == 0)
+			pk_backend_job_files(job, package_id, "/usr/share/man/man1;/usr/share/man/man1/gnome-power-manager.1.gz;/usr/lib/firefox-3.5.7/firefox");
+		else if (g_strcmp0(package_id, "gtkhtml2;2.19.1-4.fc8;i386;fedora") == 0)
+			pk_backend_job_files(job, package_id, "/usr/share/man/man1;/usr/bin/ck-xinit-session;/lib/libselinux.so.1");
+		else
+			pk_backend_job_files(job, package_id, "/usr/share/gnome-power-manager;/usr/bin/ck-xinit-session");
+	}
+	pk_backend_job_finished(job);
+}
+
+/**
+ * pk_backend_get_requires:
+ */
+void
+pk_backend_get_requires(PkBackend * backend, PkBackendJob * job, PkBitfield filters, gchar ** package_ids, gboolean recursive)
+{
+	pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY);
+	pk_backend_job_package(job, PK_INFO_ENUM_INSTALLED,
+			    "glib2;2.14.0;i386;fedora", "The GLib library");
+	pk_backend_job_package(job, PK_INFO_ENUM_INSTALLED,
+	   "gtk2;gtk2-2.11.6-6.fc8;i386;fedora", "GTK+ Libraries for GIMP");
+	pk_backend_job_finished(job);
+}
+
+/**
+ * pk_backend_get_update_detail_timeout:
+ **/
+static		gboolean
+pk_backend_get_update_detail_timeout(gpointer data)
+{
+	guint		i;
+	guint		len;
+	const gchar    *package_id;
+	PkBackendJob   *job = (PkBackendJob *) data;
+	const gchar    *changelog;
+	PkBackendDummyJobData *job_data = pk_backend_job_get_user_data(job);
+
+	/* dummy */
+	changelog = "**Thu Mar 12 2009** Adam Jackson <ajax at redhat.com> 1.6.0-13\n"
+		"- xselinux-1.6.0-selinux-nlfd.patch: Acquire the netlink socket from selinux,\n"
+		"  check it ourselves rather than having libselinux bang on it all the time.\n"
+		"\n"
+		"**Wed Mar 11 2009** Adam Jackson <ajax at redhat.com> 1.6.0-10\n"
+		"- xserver-1.6.0-selinux-less.patch: Don't init selinux unless the policy\n"
+		"  says to be an object manager.\n"
+		"\n"
+		"**Wed Mar 11 2009** Adam Jackson <ajax at redhat.com> 1.6.0-11\n"
+		"- xserver-1.6.0-less-acpi-brokenness.patch: Don't build the (broken)\n"
+		"  ACPI code.\n"
+		"\n"
+		"**Wed Mar 11 2009** Adam Jackson <ajax at redhat.com> 1.6.0-12\n"
+		"- Requires: pixman >= 0.14.0\n"
+		"\n"
+		"**Fri Mar  6 2009** Adam Jackson <ajax at redhat.com> 1.6.0-8\n"
+		"- xserver-1.6.0-primary.patch: Really, only look at VGA devices. (#488869)\n";
+
+	/* each one has a different detail for testing */
+	pk_backend_job_set_percentage(job, 0);
+	len = g_strv_length(priv->package_ids);
+	for (i = 0; i < len; i++) {
+		const gchar    *to_array1[] = {NULL, NULL, NULL};
+		const gchar    *to_array2[] = {NULL, NULL, NULL};
+		const gchar    *to_array3[] = {NULL, NULL, NULL};
+		const gchar    *to_array4[] = {NULL, NULL, NULL};
+		package_id = priv->package_ids[i];
+		if (g_strcmp0(package_id, "powertop;1.8-1.fc8;i386;fedora") == 0) {
+			to_array1[0] = "powertop;1.7-1.fc8;i386;installed";
+			to_array2[0] = "http://www.distro-update.org/page?moo";
+			to_array3[0] = "http://bgzilla.fd.org/result.php?#12344";
+			pk_backend_job_update_detail(job, package_id,
+						     (gchar **) to_array1,
+						     NULL,
+						     (gchar **) to_array2,
+						     (gchar **) to_array3,
+						     NULL,
+						     PK_RESTART_ENUM_NONE,
+					 "Update to newest upstream source",
+				     changelog, PK_UPDATE_STATE_ENUM_STABLE,
+			      "2009-11-17T09:19:00", "2009-11-19T09:19:00");
+		} else if (g_strcmp0(package_id, "kernel;2.6.23-0.115.rc3.git1.fc8;i386;installed") == 0) {
+			to_array1[0] = "kernel;2.6.22-0.104.rc3.git6.fc8;i386;installed";
+			to_array1[1] = "kernel;2.6.22-0.105.rc3.git7.fc8;i386;installed";
+			to_array2[0] = "http://www.distro-update.org/page?moo";
+			to_array3[0] = "http://bgzilla.fd.org/result.php?#12344";
+			to_array3[1] = "http://bgzilla.gnome.org/result.php?#9876";
+			to_array4[0] = "http://nvd.nist.gov/nvd.cfm?cvename=CVE-2007-3381;CVE-2007-3381";
+			pk_backend_job_update_detail(job, package_id,
+						     (gchar **) to_array1,
+						     NULL,
+						     (gchar **) to_array2,
+						     (gchar **) to_array3,
+						     (gchar **) to_array4,
+						     PK_RESTART_ENUM_SYSTEM,
+				      "Update to newest upstream version.\n"
+						     "* This should fix many driver bugs when using nouveau\n"
+						     " * This also introduces the new `frobnicator` driver for *vibrating* rabbit hardware.",
+						     changelog,
+					      PK_UPDATE_STATE_ENUM_UNSTABLE,
+						     "2008-06-28T09:19:00",
+						     NULL);
+		} else if (g_strcmp0(package_id, "gtkhtml2;2.19.1-4.fc8;i386;fedora") == 0) {
+			to_array1[0] = "gtkhtml2;2.18.1-22.fc8;i386;installed";
+			to_array2[0] = "http://www.distro-update.org/page?moo";
+			to_array3[0] = "http://bgzilla.gnome.org/result.php?#9876";
+			pk_backend_job_update_detail(job, package_id,
+						     (gchar **) to_array1,
+						     NULL,
+						     (gchar **) to_array2,
+						     (gchar **) to_array3,
+						     NULL,
+						     PK_RESTART_ENUM_SESSION,
+			       "Update to latest *whizz* **bang** version\n"
+						"* support this new thing\n"
+						     "* something else\n"
+						     "- and that new thing",
+						     changelog,
+					       PK_UPDATE_STATE_ENUM_UNKNOWN,
+						     "2008-07-25T09:19:00",
+						     NULL);
+
+		} else if (g_strcmp0(package_id, "vino;2.24.2.fc9;i386;fedora") == 0) {
+			to_array1[0] = "vino;2.24.1.fc9;i386;fedora";
+			pk_backend_job_update_detail(job, package_id,
+						     (gchar **) to_array1,
+						     NULL,
+						     NULL,
+						     NULL,
+						     NULL,
+						     PK_RESTART_ENUM_NONE,
+						     "Cannot get update as update conflics with vncviewer",
+						     changelog,
+					       PK_UPDATE_STATE_ENUM_UNKNOWN,
+						     "2008-07-25",
+						     NULL);
+		} else {
+			/* signal to UI */
+			pk_backend_job_error_code(job,
+					       PK_ERROR_ENUM_INTERNAL_ERROR,
+			   "the package update detail was not found for %s",
+						  package_id);
+		}
+	}
+	pk_backend_job_set_percentage(job, 100);
+	pk_backend_job_finished(job);
+	job_data->signal_timeout = 0;
+	return FALSE;
+}
+
+/**
+ * pk_backend_get_update_detail:
+ */
+void
+pk_backend_get_update_detail(PkBackend * backend, PkBackendJob * job, gchar ** package_ids)
+{
+	PkBackendDummyJobData *job_data = pk_backend_job_get_user_data(job);
+	pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY);
+	priv->package_ids = package_ids;
+	job_data->signal_timeout = g_timeout_add(500, pk_backend_get_update_detail_timeout, job);
+}
+
+/**
+ * pk_backend_get_updates_timeout:
+ **/
+static		gboolean
+pk_backend_get_updates_timeout(gpointer data)
+{
+	PkBackendJob   *job = (PkBackendJob *) data;
+	PkBackendDummyJobData *job_data = pk_backend_job_get_user_data(job);
+
+	if (priv->use_blocked) {
+		if (!priv->updated_powertop && !priv->updated_kernel && !priv->updated_gtkhtml) {
+			pk_backend_job_package(job, PK_INFO_ENUM_BLOCKED,
+					       "vino;2.24.2.fc9;i386;fedora",
+				   "Remote desktop server for the desktop");
+		}
+	}
+	if (!priv->updated_powertop) {
+		pk_backend_job_package(job, PK_INFO_ENUM_NORMAL,
+				       "powertop;1.8-1.fc8;i386;fedora",
+				       "Power consumption monitor");
+	}
+	if (!priv->updated_kernel) {
+		pk_backend_job_package(job, PK_INFO_ENUM_BUGFIX,
+			  "kernel;2.6.23-0.115.rc3.git1.fc8;i386;installed",
+		"The Linux kernel (the core of the Linux operating system)");
+	}
+	if (!priv->updated_gtkhtml) {
+		pk_backend_job_package(job, PK_INFO_ENUM_SECURITY,
+				       "gtkhtml2;2.19.1-4.fc8;i386;fedora",
+				       "An HTML widget for GTK+ 2.0");
+	}
+	pk_backend_job_finished(job);
+	job_data->signal_timeout = 0;
+	return FALSE;
+}
+
+/**
+ * pk_backend_get_updates:
+ */
+void
+pk_backend_get_updates(PkBackend * backend, PkBackendJob * job, PkBitfield filters)
+{
+	PkBackendDummyJobData *job_data = pk_backend_job_get_user_data(job);
+	pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY);
+	pk_backend_job_set_percentage(job, PK_BACKEND_PERCENTAGE_INVALID);
+	/* check network state */
+	if (!pk_backend_is_online(backend)) {
+		pk_backend_job_error_code(job, PK_ERROR_ENUM_NO_NETWORK, "Cannot check when offline");
+		pk_backend_job_finished(job);
+		return;
+	}
+	job_data->signal_timeout = g_timeout_add(1000, pk_backend_get_updates_timeout, job);
+}
+
+/**
+ * pk_backend_install_thread:
+ */
+static void
+pk_backend_install_thread(PkBackendJob * job, GVariant * params, gpointer user_data)
+{
+	gchar         **package_ids;
+	PkBitfield	transaction_flags;
+	PkBackendDummyJobData *job_data = pk_backend_job_get_user_data(job);
+
+	g_variant_get(params, "(t^a&s)",
+		      &transaction_flags,
+		      &package_ids);
+
+	while (TRUE) {
+
+		/* check cancelled */
+		if (g_cancellable_is_cancelled(job_data->cancellable)) {
+			pk_backend_job_error_code(job,
+					PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "The task was stopped successfully");
+			pk_backend_job_finished(job);
+			break;
+		}
+		if (job_data->progress_percentage == 100) {
+			pk_backend_job_finished(job);
+			break;
+		}
+		if (job_data->progress_percentage == 30) {
+			pk_backend_job_set_allow_cancel(job, FALSE);
+			pk_backend_job_package(job, PK_INFO_ENUM_INSTALLING,
+					"gtkhtml2;2.19.1-4.fc8;i386;fedora",
+					     "An HTML widget for GTK+ 2.0");
+			pk_backend_job_set_status(job, PK_STATUS_ENUM_INSTALL);
+		}
+		if (job_data->progress_percentage == 50) {
+			pk_backend_job_package(job, PK_INFO_ENUM_INSTALLING,
+				  "gtkhtml2-devel;2.19.1-0.fc8;i386;fedora",
+					       "Devel files for gtkhtml");
+			/* this duplicate package should be ignored */
+			pk_backend_job_package(job, PK_INFO_ENUM_INSTALLING,
+			   "gtkhtml2-devel;2.19.1-0.fc8;i386;fedora", NULL);
+			pk_backend_job_set_status(job, PK_STATUS_ENUM_INSTALL);
+		}
+		job_data->progress_percentage += 1;
+		pk_backend_job_set_percentage(job, job_data->progress_percentage);
+
+		/* sleep 100 milliseconds */
+		g_usleep(100000);
+	}
+
+	/* unlock backend again */
+	priv->fake_db_locked = FALSE;
+	pk_backend_job_set_locked(job, FALSE);
+}
+
+/**
+ * pk_backend_install_packages:
+ */
+void
+pk_backend_install_packages(PkBackend * backend, PkBackendJob * job, PkBitfield transaction_flags, gchar ** package_ids)
+{
+	const gchar    *license_agreement;
+	const gchar    *eula_id;
+	gboolean	has_eula;
+	PkBackendDummyJobData *job_data = pk_backend_job_get_user_data(job);
+
+	/* simulate */
+	if (pk_bitfield_contain(transaction_flags, PK_TRANSACTION_FLAG_ENUM_SIMULATE)) {
+		pk_backend_job_set_status(job, PK_STATUS_ENUM_DEP_RESOLVE);
+
+		pk_backend_job_package(job, PK_INFO_ENUM_REMOVING,
+				       "powertop;1.8-1.fc8;i386;fedora", "Power consumption monitor");
+
+		pk_backend_job_package(job, PK_INFO_ENUM_INSTALLING,
+		"gtk2;2.11.6-6.fc8;i386;fedora", "GTK+ Libraries for GIMP");
+
+		pk_backend_job_package(job, PK_INFO_ENUM_UPDATING,
+			    "lib7;7.0.1-6.fc13;i386;fedora", "C Libraries");
+
+		pk_backend_job_package(job, PK_INFO_ENUM_REINSTALLING,
+			"libssl;3.5.7-2.fc13;i386;fedora", "SSL Libraries");
+
+		pk_backend_job_package(job, PK_INFO_ENUM_DOWNGRADING,
+				       "kernel;2.6.23-0.115.rc3.git1.fc8;i386;installed", "The Linux kernel (the core of the Linux operating system)");
+
+		pk_backend_job_package(job, PK_INFO_ENUM_UPDATING,
+				       "gtkhtml2;2.19.1-4.fc8;i386;fedora", "An HTML widget for GTK+ 2.0");
+
+		pk_backend_job_finished(job);
+		return;
+	}
+	if (g_strcmp0(package_ids[0], "vips-doc;7.12.4-2.fc8;noarch;linva") == 0) {
+		if (priv->use_gpg && !priv->has_signature) {
+			pk_backend_job_repo_signature_required(job, package_ids[0], "updates",
+						"http://example.com/gpgkey",
+				     "Test Key (Fedora) fedora at example.com",
+							       "BB7576AC",
+			"D8CC 06C2 77EC 9C53 372F C199 B1EE 1799 F24F 1B08",
+					 "2007-10-04", PK_SIGTYPE_ENUM_GPG);
+			pk_backend_job_error_code(job, PK_ERROR_ENUM_GPG_FAILURE,
+				"GPG signed package could not be verified");
+			pk_backend_job_finished(job);
+			return;
+		}
+		eula_id = "eula_hughsie_dot_com";
+		has_eula = pk_backend_is_eula_valid(backend, eula_id);
+		if (priv->use_eula && !has_eula) {
+			license_agreement = "Narrator: In A.D. 2101, war was beginning.\n"
+				"Captain: What happen ?\n"
+				"Mechanic: Somebody set up us the bomb.\n\n"
+				"Operator: We get signal.\n"
+				"Captain: What !\n"
+				"Operator: Main screen turn on.\n"
+				"Captain: It's you !!\n"
+				"CATS: How are you gentlemen !!\n"
+				"CATS: All your base are belong to us.\n"
+				"CATS: You are on the way to destruction.\n\n"
+				"Captain: What you say !!\n"
+				"CATS: You have no chance to survive make your time.\n"
+				"CATS: Ha Ha Ha Ha ....\n\n"
+				"Operator: Captain!! *\n"
+				"Captain: Take off every 'ZIG' !!\n"
+				"Captain: You know what you doing.\n"
+				"Captain: Move 'ZIG'.\n"
+				"Captain: For great justice.\n";
+			pk_backend_job_eula_required(job, eula_id, package_ids[0],
+					    "CATS Inc.", license_agreement);
+			pk_backend_job_error_code(job, PK_ERROR_ENUM_NO_LICENSE_AGREEMENT,
+				 "licence not installed so cannot install");
+			pk_backend_job_finished(job);
+			return;
+		}
+		if (priv->use_media) {
+			priv->use_media = FALSE;
+			pk_backend_job_media_change_required(job, PK_MEDIA_TYPE_ENUM_DVD, "linux-disk-1of7", "Linux Disc 1 of 7");
+			pk_backend_job_error_code(job, PK_ERROR_ENUM_MEDIA_CHANGE_REQUIRED,
+			       "additional media linux-disk-1of7 required");
+			pk_backend_job_finished(job);
+			return;
+		}
+	}
+	if ((g_strcmp0(package_ids[0], "foobar;1.1.0;i386;debian") != 0) && (g_strcmp0(package_ids[0], "libawesome;42;i386;debian") != 0)) {
+		if (priv->use_trusted && pk_bitfield_contain(transaction_flags, PK_TRANSACTION_FLAG_ENUM_ONLY_TRUSTED)) {
+			pk_backend_job_error_code(job, PK_ERROR_ENUM_CANNOT_INSTALL_REPO_UNSIGNED,
+					      "Can't install as untrusted");
+			pk_backend_job_finished(job);
+			return;
+		}
+	}
+	/* check if something else locked the "fake-db" */
+	if (priv->fake_db_locked) {
+		pk_backend_job_error_code(job, PK_ERROR_ENUM_LOCK_REQUIRED,
+					  "we require lock");
+		pk_backend_job_finished(job);
+		return;
+	}
+	/* we're now locked */
+	priv->fake_db_locked = TRUE;
+	pk_backend_job_set_locked(job, TRUE);
+
+	pk_backend_job_set_allow_cancel(job, TRUE);
+	job_data->progress_percentage = 0;
+	pk_backend_job_package(job, PK_INFO_ENUM_DOWNLOADING,
+			       "gtkhtml2;2.19.1-4.fc8;i386;fedora",
+			       "An HTML widget for GTK+ 2.0");
+
+	pk_backend_job_thread_create(job, pk_backend_install_thread, NULL, NULL);
+}
+
+/**
+ * pk_backend_install_signature:
+ */
+void
+pk_backend_install_signature(PkBackend * backend, PkBackendJob * job, PkSigTypeEnum type,
+			     const gchar * key_id, const gchar * package_id)
+{
+	pk_backend_job_set_status(job, PK_STATUS_ENUM_INSTALL);
+	if (type == PK_SIGTYPE_ENUM_GPG &&
+	/* egg_strequal (package_id, "vips-doc;7.12.4-2.fc8;noarch;linva") && */
+	    g_strcmp0(key_id, "BB7576AC") == 0) {
+		g_debug("installed signature %s for %s", key_id, package_id);
+		priv->has_signature = TRUE;
+	} else {
+		pk_backend_job_error_code(job, PK_ERROR_ENUM_GPG_FAILURE,
+			      "GPG key %s not recognised for package_id %s",
+					  key_id, package_id);
+	}
+	pk_backend_job_finished(job);
+}
+
+/**
+ * pk_backend_refresh_cache_timeout:
+ */
+static		gboolean
+pk_backend_install_files_timeout(gpointer data)
+{
+	PkBackendJob   *job = (PkBackendJob *) data;
+	pk_backend_job_finished(job);
+	return FALSE;
+}
+
+/**
+ * pk_backend_install_files:
+ */
+void
+pk_backend_install_files(PkBackend * backend, PkBackendJob * job, PkBitfield transaction_flags, gchar ** full_paths)
+{
+	PkBackendDummyJobData *job_data = pk_backend_job_get_user_data(job);
+	pk_backend_job_set_status(job, PK_STATUS_ENUM_INSTALL);
+	pk_backend_job_set_percentage(job, 101);
+	job_data->signal_timeout = g_timeout_add(2000, pk_backend_install_files_timeout, job);
+}
+
+/**
+ * pk_backend_refresh_cache_thread:
+ */
+static void
+pk_backend_refresh_cache_thread(PkBackendJob * job, GVariant * params, gpointer user_data)
+{
+	gboolean	force;
+	PkBackendDummyJobData *job_data = pk_backend_job_get_user_data(job);
+
+	g_variant_get(params, "(b)",
+		      &force);
+
+	while (TRUE) {
+
+		/* check cancelled */
+		if (g_cancellable_is_cancelled(job_data->cancellable)) {
+			pk_backend_job_error_code(job,
+					PK_ERROR_ENUM_TRANSACTION_CANCELLED,
+				       "The task was stopped successfully");
+			pk_backend_job_finished(job);
+			break;
+		}
+		if (job_data->progress_percentage == 100) {
+			pk_backend_job_finished(job);
+			break;
+		}
+		if (job_data->progress_percentage == 80)
+			pk_backend_job_set_allow_cancel(job, FALSE);
+		job_data->progress_percentage += 10;
+		pk_backend_job_set_percentage(job, job_data->progress_percentage);
+
+		/* sleep 500 milliseconds */
+		g_usleep(500000);
+	}
+
+	/* unlock backend again */
+	priv->fake_db_locked = FALSE;
+	pk_backend_job_set_locked(job, FALSE);
+}
+
+/**
+ * pk_backend_refresh_cache:
+ */
+void
+pk_backend_refresh_cache(PkBackend * backend, PkBackendJob * job, gboolean force)
+{
+	PkBackendDummyJobData *job_data = pk_backend_job_get_user_data(job);
+	job_data->progress_percentage = 0;
+
+	/* reset */
+	priv->updated_gtkhtml = FALSE;
+	priv->updated_kernel = FALSE;
+	priv->updated_powertop = FALSE;
+
+	pk_backend_job_set_allow_cancel(job, TRUE);
+	pk_backend_job_set_status(job, PK_STATUS_ENUM_REFRESH_CACHE);
+
+	/* check if some other action has lock */
+	if (priv->fake_db_locked) {
+		pk_backend_job_error_code(job, PK_ERROR_ENUM_LOCK_REQUIRED,
+					  "we require lock");
+		pk_backend_job_finished(job);
+		return;
+	}
+	/* we're now locked */
+	priv->fake_db_locked = TRUE;
+	pk_backend_job_set_locked(job, TRUE);
+
+	pk_backend_job_thread_create(job, pk_backend_refresh_cache_thread, NULL, NULL);
+}
+
+/**
+ * pk_backend_resolve_thread:
+ */
+static void
+pk_backend_resolve_thread(PkBackendJob * job, GVariant * params, gpointer user_data)
+{
+	gchar         **search;
+	guint		i;
+	guint		len;
+	PkBitfield	filters;
+
+	g_variant_get(params, "(t^a&s)",
+		      &filters,
+		      &search);
+
+	pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY);
+	pk_backend_job_set_percentage(job, 0);
+
+	/* each one has a different detail for testing */
+	len = g_strv_length(search);
+	for (i = 0; i < len; i++) {
+		if (g_strcmp0(search[i], "vips-doc") == 0 || g_strcmp0(search[i], "vips-doc;7.12.4-2.fc8;noarch;linva") == 0) {
+			if (!pk_bitfield_contain(filters, PK_FILTER_ENUM_INSTALLED)) {
+				pk_backend_job_package(job, PK_INFO_ENUM_AVAILABLE,
+				       "vips-doc;7.12.4-2.fc8;noarch;linva",
+					 "The vips documentation package.");
+			}
+		} else if (g_strcmp0(search[i], "glib2") == 0 || g_strcmp0(search[i], "glib2;2.14.0;i386;fedora") == 0) {
+			if (!pk_bitfield_contain(filters, PK_FILTER_ENUM_NOT_INSTALLED)) {
+				pk_backend_job_package(job, PK_INFO_ENUM_INSTALLED,
+						 "glib2;2.14.0;i386;fedora",
+						       "The GLib library");
+			}
+		} else if (g_strcmp0(search[i], "powertop") == 0 || g_strcmp0(search[i], "powertop;1.8-1.fc8;i386;fedora") == 0)
+			pk_backend_job_package(job, PK_INFO_ENUM_INSTALLED,
+					   "powertop;1.8-1.fc8;i386;fedora",
+					       "Power consumption monitor");
+		else if (g_strcmp0(search[i], "kernel") == 0 || g_strcmp0(search[i], "kernel;2.6.23-0.115.rc3.git1.fc8;i386;installed") == 0)
+			pk_backend_job_package(job, PK_INFO_ENUM_INSTALLED,
+			  "kernel;2.6.23-0.115.rc3.git1.fc8;i386;installed",
+					       "The Linux kernel (the core of the Linux operating system)");
+		else if (g_strcmp0(search[i], "gtkhtml2") == 0 || g_strcmp0(search[i], "gtkhtml2;2.19.1-4.fc8;i386;fedora") == 0)
+			pk_backend_job_package(job, PK_INFO_ENUM_INSTALLED,
+					"gtkhtml2;2.19.1-4.fc8;i386;fedora",
+					     "An HTML widget for GTK+ 2.0");
+		else if (g_strcmp0(search[i], "foobar") == 0 || g_strcmp0(search[i], "foobar;1.1.0;i386;debian") == 0) {
+			if (!pk_bitfield_contain(filters, PK_FILTER_ENUM_INSTALLED)) {
+				pk_backend_job_package(job, PK_INFO_ENUM_AVAILABLE,
+						 "foobar;1.1.0;i386;debian",
+					  "The awesome FooBar application");
+			}
+		} else if (g_strcmp0(search[i], "libawesome") == 0 || g_strcmp0(search[i], "libawesome;42;i386;debian") == 0) {
+			if (!pk_bitfield_contain(filters, PK_FILTER_ENUM_INSTALLED)) {
+				pk_backend_job_package(job, PK_INFO_ENUM_AVAILABLE,
+						"libawesome;42;i386;debian",
+				      "Simple library for warping reality");
+			}
+		}
+	}
+	pk_backend_job_set_percentage(job, 100);
+	pk_backend_job_finished(job);
+}
+
+/**
+ * pk_backend_resolve:
+ */
+void
+pk_backend_resolve(PkBackend * backend, PkBackendJob * job, PkBitfield filters, gchar ** packages)
+{
+	pk_backend_job_thread_create(job, pk_backend_resolve_thread, NULL, NULL);
+}
+
+/**
+ * pk_backend_remove_packages:
+ */
+void
+pk_backend_remove_packages(PkBackend * backend, PkBackendJob * job,
+			   PkBitfield transaction_flags,
+			   gchar ** package_ids,
+			   gboolean allow_deps,
+			   gboolean autoremove)
+{
+	/* check if something else locked the "fake-db" */
+	if (priv->fake_db_locked) {
+		pk_backend_job_error_code(job, PK_ERROR_ENUM_LOCK_REQUIRED,
+					  "we require lock");
+		pk_backend_job_finished(job);
+		return;
+	}
+	/* we're now locked */
+	priv->fake_db_locked = TRUE;
+	pk_backend_job_set_locked(job, TRUE);
+
+	pk_backend_job_set_status(job, PK_STATUS_ENUM_REMOVE);
+	pk_backend_job_error_code(job, PK_ERROR_ENUM_NO_NETWORK, "No network connection available");
+	pk_backend_job_finished(job);
+
+	/* unlock backend again */
+	priv->fake_db_locked = FALSE;
+	pk_backend_job_set_locked(job, FALSE);
+}
+
+/**
+ * pk_backend_search_details_thread:
+ **/
+static void
+pk_backend_search_details_thread(PkBackendJob * job, GVariant * params, gpointer user_data)
+{
+	pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY);
+	pk_backend_job_set_allow_cancel(job, TRUE);
+	pk_backend_job_package(job, PK_INFO_ENUM_AVAILABLE,
+			       "vips-doc;7.12.4-2.fc8;noarch;linva",
+			       "The vips \"documentation\" package.");
+	pk_backend_job_finished(job);
+}
+
+/**
+ * pk_backend_search_details:
+ */
+void
+pk_backend_search_details(PkBackend * backend, PkBackendJob * job, PkBitfield filters, gchar ** values)
+{
+	pk_backend_job_thread_create(job, pk_backend_search_details_thread, NULL, NULL);
+}
+
+/**
+ * pk_backend_search_files:
+ */
+void
+pk_backend_search_files(PkBackend * backend, PkBackendJob * job, PkBitfield filters, gchar ** values)
+{
+	pk_backend_job_set_status(job, PK_STATUS_ENUM_QUERY);
+	pk_backend_job_set_allow_cancel(job, TRUE);
+	if (!pk_bitfield_contain(filters, PK_FILTER_ENUM_INSTALLED))
+		pk_backend_job_package(job, PK_INFO_ENUM_AVAILABLE,
+				       "vips-doc;7.12.4-2.fc8;noarch;linva",
+				       "The vips documentation package");
+	else
+		pk_backend_job_package(job, PK_INFO_ENUM_INSTALLED,
+				       "vips-doc;7.12.4-2.fc8;noarch;linva",
+				       "The vips documentation package");
+	pk_backend_job_finished(job);
+}
+
+/**
+ * pk_backend_search_groups:

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-soc-all mailing list