From owner-svn-soc-all@FreeBSD.ORG Wed Jun 19 22:51:12 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id E432F64B for ; Wed, 19 Jun 2013 22:51:12 +0000 (UTC) (envelope-from mattbw@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::16:124]) by mx1.freebsd.org (Postfix) with ESMTP id D4A7D13CC for ; Wed, 19 Jun 2013 22:51:12 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r5JMpCPj026778 for ; Wed, 19 Jun 2013 22:51:12 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r5JMpC8U026731 for svn-soc-all@FreeBSD.org; Wed, 19 Jun 2013 22:51:12 GMT (envelope-from mattbw@FreeBSD.org) Date: Wed, 19 Jun 2013 22:51:12 GMT Message-Id: <201306192251.r5JMpC8U026731@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mattbw@FreeBSD.org using -f From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r253262 - soc2013/mattbw/dummy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 19 Jun 2013 22:51:13 -0000 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 + * + * 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 + +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 + * 2013 Matt Windsor + * + * 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 +#include +#include +#include +#include +#include + +#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 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 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 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 1.6.0-12\n" + "- Requires: pixman >= 0.14.0\n" + "\n" + "**Fri Mar 6 2009** Adam Jackson 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@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 ***