[gnome-packagekit/glib2: 25/79] moo
- From: Richard Hughes <rhughes src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-packagekit/glib2: 25/79] moo
- Date: Tue, 6 Oct 2009 09:46:55 +0000 (UTC)
commit 496573f45a558fdd9a19a2dda828c4ab6028686a
Author: Richard Hughes <richard hughsie com>
Date: Thu Sep 17 14:30:32 2009 +0100
moo
src/Makefile.am | 8 -
src/gpk-application.c | 120 -------
src/gpk-check-update.c | 80 +----
src/gpk-dbus-task.c | 149 --------
src/gpk-helper-eula.c | 243 -------------
src/gpk-helper-eula.h | 67 ----
src/gpk-helper-media-change.c | 187 ----------
src/gpk-helper-media-change.h | 68 ----
src/gpk-helper-repo-signature.c | 248 --------------
src/gpk-helper-repo-signature.h | 71 ----
src/gpk-helper-untrusted.c | 252 --------------
src/gpk-helper-untrusted.h | 64 ----
src/gpk-self-test.c | 2 +
src/gpk-task.c | 716 +++++++++++++++++++++++++++++++++++++++
src/gpk-task.h | 63 ++++
src/gpk-update-viewer.c | 105 ------
16 files changed, 796 insertions(+), 1647 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index da2fbd3..1117562 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -80,10 +80,6 @@ libgpkshared_a_SOURCES = \
gpk-language.h \
gpk-modal-dialog.c \
gpk-modal-dialog.h \
- gpk-helper-repo-signature.c \
- gpk-helper-repo-signature.h \
- gpk-helper-eula.c \
- gpk-helper-eula.h \
gpk-helper-run.c \
gpk-helper-run.h \
gpk-helper-deps-remove.c \
@@ -92,12 +88,8 @@ libgpkshared_a_SOURCES = \
gpk-helper-deps-install.h \
gpk-helper-deps-update.c \
gpk-helper-deps-update.h \
- gpk-helper-untrusted.c \
- gpk-helper-untrusted.h \
gpk-helper-chooser.c \
gpk-helper-chooser.h \
- gpk-helper-media-change.c \
- gpk-helper-media-change.h \
gpk-gnome.c \
gpk-gnome.h \
gpk-common.c \
diff --git a/src/gpk-application.c b/src/gpk-application.c
index ee02d59..ee2c40a 100644
--- a/src/gpk-application.c
+++ b/src/gpk-application.c
@@ -44,12 +44,9 @@
#include "gpk-dialog.h"
#include "gpk-cell-renderer-uri.h"
#include "gpk-desktop.h"
-#include "gpk-helper-repo-signature.h"
-#include "gpk-helper-eula.h"
#include "gpk-helper-run.h"
#include "gpk-helper-deps-remove.h"
#include "gpk-helper-deps-install.h"
-#include "gpk-helper-media-change.h"
static void gpk_application_finalize (GObject *object);
@@ -105,12 +102,9 @@ struct GpkApplicationPrivate
PkActionMode action;
GPtrArray *package_list;
GtkWidget *image_status;
- GpkHelperRepoSignature *helper_repo_signature;
- GpkHelperEula *helper_eula;
GpkHelperRun *helper_run;
GpkHelperDepsRemove *helper_deps_remove;
GpkHelperDepsInstall *helper_deps_install;
- GpkHelperMediaChange *helper_media_change;
#if !PK_CHECK_VERSION(0,5,2)
gboolean dep_check_info_only; /* bodge to tell apart the differing uses of GetDepends */
#endif
@@ -2901,54 +2895,6 @@ gpk_application_allow_cancel_cb (PkClient *client, gboolean allow_cancel, GpkApp
}
/**
- * gpk_application_repo_signature_event_cb:
- **/
-static void
-gpk_application_repo_signature_event_cb (GpkHelperRepoSignature *helper_repo_signature, GtkResponseType type, const gchar *key_id, const gchar *package_id, GpkApplication *application)
-{
- gboolean ret;
- GError *error = NULL;
-
- if (type != GTK_RESPONSE_YES) {
- goto out;
- }
-
- /* install signature */
- ret = pk_client_install_signature (application->priv->client_secondary, PK_SIGTYPE_ENUM_GPG, key_id, package_id, &error);
- if (!ret) {
- egg_warning ("cannot install signature: %s", error->message);
- g_error_free (error);
- goto out;
- }
-out:
- return;
-}
-
-/**
- * gpk_application_eula_event_cb:
- **/
-static void
-gpk_application_eula_event_cb (GpkHelperEula *helper_eula, GtkResponseType type, const gchar *eula_id, GpkApplication *application)
-{
- gboolean ret;
- GError *error = NULL;
-
- if (type != GTK_RESPONSE_YES) {
- goto out;
- }
-
- /* install signature */
- ret = pk_client_accept_eula (application->priv->client_secondary, eula_id, &error);
- if (!ret) {
- egg_warning ("cannot accept eula: %s", error->message);
- g_error_free (error);
- goto out;
- }
-out:
- return;
-}
-
-/**
* gpk_application_deps_remove_event_cb:
**/
static void
@@ -3016,57 +2962,6 @@ out:
}
/**
- * gpk_application_media_change_event_cb:
- **/
-static void
-gpk_application_media_change_event_cb (GpkHelperMediaChange *helper_media_change, GtkResponseType type, GpkApplication *application)
-{
- if (type != GTK_RESPONSE_YES)
- goto out;
-
- /* requeue */
- gpk_application_primary_requeue (application);
-out:
- return;
-}
-
-/**
- * gpk_application_eula_required_cb:
- **/
-static void
-gpk_application_eula_required_cb (PkClient *client, const gchar *eula_id, const gchar *package_id,
- const gchar *vendor_name, const gchar *license_agreement, GpkApplication *application)
-{
- /* use the helper */
- gpk_helper_eula_show (application->priv->helper_eula, eula_id, package_id, vendor_name, license_agreement);
-}
-
-#if PK_CHECK_VERSION(0,4,7)
-/**
- * gpk_application_media_change_required_cb:
- **/
-static void
-gpk_application_media_change_required_cb (PkClient *client, PkMediaTypeEnum type, const gchar *media_id, const gchar *media_text, GpkApplication *application)
-{
- /* use the helper */
- gpk_helper_media_change_show (application->priv->helper_media_change, type, media_id, media_text);
-}
-#endif
-
-/**
- * gpk_application_repo_signature_required_cb:
- **/
-static void
-gpk_application_repo_signature_required_cb (PkClient *client, const gchar *package_id, const gchar *repository_name,
- const gchar *key_url, const gchar *key_userid, const gchar *key_id,
- const gchar *key_fingerprint, const gchar *key_timestamp,
- PkSigTypeEnum type, GpkApplication *application)
-{
- /* use the helper */
- gpk_helper_repo_signature_show (application->priv->helper_repo_signature, package_id, repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp);
-}
-
-/**
* gpk_application_package_row_activated_cb:
**/
static void
@@ -3781,14 +3676,6 @@ gpk_application_init (GpkApplication *application)
main_window = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "window_manager"));
/* helpers */
- application->priv->helper_repo_signature = gpk_helper_repo_signature_new ();
- g_signal_connect (application->priv->helper_repo_signature, "event", G_CALLBACK (gpk_application_repo_signature_event_cb), application);
- gpk_helper_repo_signature_set_parent (application->priv->helper_repo_signature, GTK_WINDOW (main_window));
-
- application->priv->helper_eula = gpk_helper_eula_new ();
- g_signal_connect (application->priv->helper_eula, "event", G_CALLBACK (gpk_application_eula_event_cb), application);
- gpk_helper_eula_set_parent (application->priv->helper_eula, GTK_WINDOW (main_window));
-
application->priv->helper_run = gpk_helper_run_new ();
gpk_helper_run_set_parent (application->priv->helper_run, GTK_WINDOW (main_window));
@@ -3800,10 +3687,6 @@ gpk_application_init (GpkApplication *application)
g_signal_connect (application->priv->helper_deps_install, "event", G_CALLBACK (gpk_application_deps_install_event_cb), application);
gpk_helper_deps_install_set_parent (application->priv->helper_deps_install, GTK_WINDOW (main_window));
- application->priv->helper_media_change = gpk_helper_media_change_new ();
- g_signal_connect (application->priv->helper_media_change, "event", G_CALLBACK (gpk_application_media_change_event_cb), application);
- gpk_helper_media_change_set_parent (application->priv->helper_media_change, GTK_WINDOW (main_window));
-
/* Hide window first so that the dialogue resizes itself without redrawing */
gtk_widget_hide (main_window);
gtk_window_set_icon_name (GTK_WINDOW (main_window), GPK_ICON_SOFTWARE_INSTALLER);
@@ -4159,12 +4042,9 @@ gpk_application_finalize (GObject *object)
g_object_unref (application->priv->gconf_client);
g_object_unref (application->priv->markdown);
g_object_unref (application->priv->builder);
- g_object_unref (application->priv->helper_eula);
g_object_unref (application->priv->helper_run);
g_object_unref (application->priv->helper_deps_remove);
g_object_unref (application->priv->helper_deps_install);
- g_object_unref (application->priv->helper_media_change);
- g_object_unref (application->priv->helper_repo_signature);
if (application->priv->status_id > 0)
g_source_remove (application->priv->status_id);
diff --git a/src/gpk-check-update.c b/src/gpk-check-update.c
index fc074f5..0bc57af 100644
--- a/src/gpk-check-update.c
+++ b/src/gpk-check-update.c
@@ -50,7 +50,6 @@
#include "gpk-check-update.h"
#include "gpk-enum.h"
#include "gpk-error.h"
-#include "gpk-helper-repo-signature.h"
static void gpk_check_update_finalize (GObject *object);
static void gpk_check_update_libnotify_cb (NotifyNotification *notification, gchar *action, gpointer data);
@@ -72,9 +71,8 @@ struct GpkCheckUpdatePrivate
gchar *icon_name;
PkTransactionList *tlist;
PkControl *control;
- GpkHelperRepoSignature *helper_repo_signature;
GpkAutoRefresh *arefresh;
- PkClient *client;
+ PkTask *task;
GConfClient *gconf_client;
guint number_updates_critical_last_shown;
NotifyNotification *notification_updates_available;
@@ -534,8 +532,8 @@ gpk_check_update_libnotify_cb (NotifyNotification *notification, gchar *action,
/* try to cancel */
g_cancellable_cancel (cupdate->priv->cancellable);
} else if (g_strcmp0 (action, "update-all-packages") == 0) {
- pk_client_update_system_async (cupdate->priv->client, TRUE, cupdate->priv->cancellable, NULL, NULL,
- (GAsyncReadyCallback) gpk_check_update_update_system_finished_cb, cupdate);
+ pk_task_update_system_async (cupdate->priv->task, cupdate->priv->cancellable, NULL, NULL,
+ (GAsyncReadyCallback) gpk_check_update_update_system_finished_cb, cupdate);
} else if (g_strcmp0 (action, "show-update-viewer") == 0) {
ret = g_spawn_command_line_async (BINDIR "/gpk-update-viewer", &error);
if (!ret) {
@@ -546,8 +544,8 @@ gpk_check_update_libnotify_cb (NotifyNotification *notification, gchar *action,
/* just update the important updates */
package_ids = pk_ptr_array_to_strv (cupdate->priv->important_updates_array);
- pk_client_update_packages_async (cupdate->priv->client, TRUE, package_ids, cupdate->priv->cancellable, NULL, NULL,
- (GAsyncReadyCallback) gpk_check_update_update_system_finished_cb, cupdate);
+ pk_task_update_packages_async (cupdate->priv->task, package_ids, cupdate->priv->cancellable, NULL, NULL,
+ (GAsyncReadyCallback) gpk_check_update_update_system_finished_cb, cupdate);
g_strfreev (package_ids);
} else if (g_strcmp0 (action, "distro-upgrade-info") == 0) {
@@ -987,8 +985,8 @@ gpk_check_update_get_updates_finished_cb (GObject *object, GAsyncResult *res, Gp
/* convert */
package_ids = pk_ptr_array_to_strv (security_array);
- pk_client_update_packages_async (cupdate->priv->client, TRUE, package_ids, cupdate->priv->cancellable, NULL, NULL,
- (GAsyncReadyCallback) gpk_check_update_update_system_finished_cb, cupdate);
+ pk_task_update_packages_async (cupdate->priv->task, package_ids, cupdate->priv->cancellable, NULL, NULL,
+ (GAsyncReadyCallback) gpk_check_update_update_system_finished_cb, cupdate);
gpk_check_update_notify_doing_updates (cupdate);
g_strfreev (package_ids);
goto out;
@@ -997,8 +995,8 @@ gpk_check_update_get_updates_finished_cb (GObject *object, GAsyncResult *res, Gp
/* just do everything */
if (update == GPK_UPDATE_ENUM_ALL) {
egg_debug ("we should do the update automatically!");
- pk_client_update_system_async (cupdate->priv->client, TRUE, cupdate->priv->cancellable, NULL, NULL,
- (GAsyncReadyCallback) gpk_check_update_update_system_finished_cb, cupdate);
+ pk_task_update_system_async (cupdate->priv->task, cupdate->priv->cancellable, NULL, NULL,
+ (GAsyncReadyCallback) gpk_check_update_update_system_finished_cb, cupdate);
gpk_check_update_notify_doing_updates (cupdate);
goto out;
}
@@ -1034,7 +1032,7 @@ gpk_check_update_get_active_roles (GpkCheckUpdate *cupdate)
tids = pk_transaction_list_get_ids (cupdate->priv->tlist);
for (i=0; tids[i] != NULL; i++) {
/* get progress */
- progress = pk_client_get_progress (cupdate->priv->client, tids[i], cupdate->priv->cancellable, &error);
+ progress = pk_client_get_progress (PK_CLIENT(cupdate->priv->task), tids[i], cupdate->priv->cancellable, &error);
if (progress == NULL) {
egg_warning ("failed to get progress of %s: %s", tids[i], error->message);
g_error_free (error);
@@ -1069,7 +1067,7 @@ gpk_check_update_query_updates (GpkCheckUpdate *cupdate)
}
/* get new update list */
- pk_client_get_updates_async (cupdate->priv->client, PK_FILTER_ENUM_NONE, cupdate->priv->cancellable, NULL, NULL,
+ pk_client_get_updates_async (PK_CLIENT(cupdate->priv->task), PK_FILTER_ENUM_NONE, cupdate->priv->cancellable, NULL, NULL,
(GAsyncReadyCallback) gpk_check_update_get_updates_finished_cb, cupdate);
out:
return;
@@ -1198,7 +1196,7 @@ gpk_check_update_auto_refresh_cache_cb (GpkAutoRefresh *arefresh, GpkCheckUpdate
{
g_return_if_fail (GPK_IS_CHECK_UPDATE (cupdate));
- pk_client_refresh_cache_async (cupdate->priv->client, TRUE, cupdate->priv->cancellable, NULL, NULL,
+ pk_client_refresh_cache_async (PK_CLIENT(cupdate->priv->task), TRUE, cupdate->priv->cancellable, NULL, NULL,
(GAsyncReadyCallback) gpk_check_update_refresh_cache_finished_cb, cupdate);
}
@@ -1300,7 +1298,7 @@ out:
static void
gpk_check_update_auto_get_upgrades_cb (GpkAutoRefresh *arefresh, GpkCheckUpdate *cupdate)
{
- pk_client_get_distro_upgrades_async (cupdate->priv->client, cupdate->priv->cancellable, NULL, NULL,
+ pk_client_get_distro_upgrades_async (PK_CLIENT(cupdate->priv->task), cupdate->priv->cancellable, NULL, NULL,
(GAsyncReadyCallback) gpk_check_update_get_distro_upgrades_finished_cb, cupdate);
}
@@ -1365,49 +1363,6 @@ out:
#endif
/**
- * gpk_check_update_repo_signature_event_cb:
- **/
-static void
-gpk_check_update_repo_signature_event_cb (GpkHelperRepoSignature *helper_repo_signature, GtkResponseType type, const gchar *key_id, const gchar *package_id, GpkCheckUpdate *cupdate)
-{
- gboolean ret;
- GError *error = NULL;
-
- if (type != GTK_RESPONSE_YES) {
- goto out;
- }
-
- /* install signature */
- ret = FALSE;//pk_client_install_signature_async (cupdate->priv->client, cupdate->priv->cancellable, PK_SIGTYPE_ENUM_GPG, key_id, package_id, &error);
- if (!ret) {
- egg_warning ("cannot install signature: %s", error->message);
- g_error_free (error);
- goto out;
- }
- /* set state */
- egg_debug ("repo sig cb");
- gpk_check_update_query_updates (cupdate);
-out:
- return;
-}
-
-#if 0
-/**
- * gpk_check_update_repo_signature_required_cb:
- **/
-static void
-gpk_check_update_repo_signature_required_cb (PkClient *client, const gchar *package_id, const gchar *repository_name,
- const gchar *key_url, const gchar *key_userid, const gchar *key_id,
- const gchar *key_fingerprint, const gchar *key_timestamp,
- PkSigTypeEnum type, GpkCheckUpdate *cupdate)
-{
- /* use the helper */
- gpk_helper_repo_signature_show (cupdate->priv->helper_repo_signature, package_id,
- repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp);
-}
-#endif
-
-/**
* gpk_check_update_get_properties_cb:
**/
static void
@@ -1491,11 +1446,7 @@ gpk_check_update_init (GpkCheckUpdate *cupdate)
G_CALLBACK (gpk_cupdate_connection_changed_cb), cupdate);
/* use an asynchronous query object */
- cupdate->priv->client = pk_client_new ();
-
- /* helpers */
- cupdate->priv->helper_repo_signature = gpk_helper_repo_signature_new ();
- g_signal_connect (cupdate->priv->helper_repo_signature, "event", G_CALLBACK (gpk_check_update_repo_signature_event_cb), cupdate);
+ cupdate->priv->task = pk_task_new ();
cupdate->priv->control = pk_control_new ();
g_signal_connect (cupdate->priv->control, "updates-changed",
@@ -1544,9 +1495,8 @@ gpk_check_update_finalize (GObject *object)
g_object_unref (cupdate->priv->arefresh);
g_object_unref (cupdate->priv->gconf_client);
g_object_unref (cupdate->priv->control);
- g_object_unref (cupdate->priv->client);
+ g_object_unref (cupdate->priv->task);
g_object_unref (cupdate->priv->dbus_monitor_viewer);
- g_object_unref (cupdate->priv->helper_repo_signature);
g_object_unref (cupdate->priv->cancellable);
g_ptr_array_unref (cupdate->priv->important_updates_array);
g_free (cupdate->priv->icon_name);
diff --git a/src/gpk-dbus-task.c b/src/gpk-dbus-task.c
index 2603bda..4b95991 100644
--- a/src/gpk-dbus-task.c
+++ b/src/gpk-dbus-task.c
@@ -49,10 +49,7 @@
#include "gpk-enum.h"
#include "gpk-x11.h"
#include "gpk-desktop.h"
-#include "gpk-helper-repo-signature.h"
-#include "gpk-helper-eula.h"
#include "gpk-helper-run.h"
-#include "gpk-helper-untrusted.h"
#include "gpk-helper-chooser.h"
static void gpk_dbus_task_finalize (GObject *object);
@@ -103,12 +100,7 @@ struct _GpkDbusTaskPrivate
gchar *parent_icon_name;
gchar *error_details;
gint timeout;
- GpkHelperRepoSignature *helper_repo_signature;
- GpkHelperEula *helper_eula;
GpkHelperRun *helper_run;
-#if (!PK_CHECK_VERSION(0,5,0))
- GpkHelperUntrusted *helper_untrusted;
-#endif
GpkHelperChooser *helper_chooser;
DBusGMethodInvocation *context;
GpkDbusTaskRole role;
@@ -195,129 +187,7 @@ gpk_dbus_task_set_timestamp (GpkDbusTask *task, guint32 timestamp)
return TRUE;
}
-/**
- * gpk_dbus_task_repo_signature_event_cb:
- **/
-static void
-gpk_dbus_task_repo_signature_event_cb (GpkHelperRepoSignature *helper_repo_signature, GtkResponseType type, const gchar *key_id, const gchar *package_id, GpkDbusTask *task)
-{
- gboolean ret;
- GError *error = NULL;
-
- if (type != GTK_RESPONSE_YES) {
- goto out;
- }
-
- /* install signature */
- ret = pk_client_install_signature (task->priv->client_secondary, PK_SIGTYPE_ENUM_GPG, key_id, package_id, &error);
- if (!ret) {
- egg_warning ("cannot install signature: %s", error->message);
- g_error_free (error);
- goto out;
- }
-out:
- return;
-}
-
-/**
- * gpk_dbus_task_eula_event_cb:
- **/
-static void
-gpk_dbus_task_eula_event_cb (GpkHelperEula *helper_eula, GtkResponseType type, const gchar *eula_id, GpkDbusTask *task)
-{
- gboolean ret;
- GError *error = NULL;
-
- if (type != GTK_RESPONSE_YES) {
- goto out;
- }
-
- /* install signature */
- ret = pk_client_accept_eula (task->priv->client_secondary, eula_id, &error);
- if (!ret) {
- egg_warning ("cannot accept eula: %s", error->message);
- g_error_free (error);
- goto out;
- }
-out:
- return;
-}
-
-/**
- * gpk_dbus_task_eula_cb:
- **/
-static void
-gpk_dbus_task_eula_required_cb (PkClient *client, const gchar *eula_id, const gchar *package_id,
- const gchar *vendor_name, const gchar *license_agreement, GpkDbusTask *task)
-{
- g_return_if_fail (GPK_IS_DBUS_TASK (task));
-
- gpk_modal_dialog_setup (task->priv->dialog, GPK_MODAL_DIALOG_PAGE_CUSTOM, pk_bitfield_value (GPK_MODAL_DIALOG_WIDGET_PROGRESS_BAR));
- gpk_modal_dialog_set_title (task->priv->dialog, _("EULA required"));
- gpk_modal_dialog_set_image_status (task->priv->dialog, PK_STATUS_ENUM_SIG_CHECK);
- gpk_modal_dialog_set_percentage (task->priv->dialog, 101);
- if (task->priv->show_progress)
- gpk_modal_dialog_present (task->priv->dialog);
-
- /* use the helper */
- gpk_helper_eula_show (task->priv->helper_eula, eula_id, package_id, vendor_name, license_agreement);
-}
-
-/**
- * gpk_dbus_task_repo_signature_required_cb:
- **/
-static void
-gpk_dbus_task_repo_signature_required_cb (PkClient *client, const gchar *package_id, const gchar *repository_name,
- const gchar *key_url, const gchar *key_userid, const gchar *key_id,
- const gchar *key_fingerprint, const gchar *key_timestamp,
- PkSigTypeEnum type, GpkDbusTask *task)
-{
- g_return_if_fail (GPK_IS_DBUS_TASK (task));
-
- gpk_modal_dialog_setup (task->priv->dialog, GPK_MODAL_DIALOG_PAGE_CUSTOM, pk_bitfield_value (GPK_MODAL_DIALOG_WIDGET_PROGRESS_BAR));
- gpk_modal_dialog_set_title (task->priv->dialog, _("Signature required"));
- gpk_modal_dialog_set_image_status (task->priv->dialog, PK_STATUS_ENUM_SIG_CHECK);
- gpk_modal_dialog_set_percentage (task->priv->dialog, 101);
- if (task->priv->show_progress)
- gpk_modal_dialog_present (task->priv->dialog);
-
- /* use the helper */
- gpk_helper_repo_signature_show (task->priv->helper_repo_signature, package_id, repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp);
-}
-
static void gpk_dbus_task_install_package_files_internal (GpkDbusTask *task, gboolean trusted);
-
-#if (!PK_CHECK_VERSION(0,5,0))
-/**
- * gpk_dbus_task_untrusted_event_cb:
- **/
-static void
-gpk_dbus_task_untrusted_event_cb (GpkHelperUntrusted *helper_untrusted, GtkResponseType type, GpkDbusTask *task)
-{
- GError *error = NULL;
- const gchar *title;
-
- if (type != GTK_RESPONSE_YES) {
- error = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_CANCELLED, "did not agree to download");
- dbus_g_method_return_error (task->priv->context, error);
- goto out;
- }
-
- title = _("Install untrusted");
- gpk_modal_dialog_setup (task->priv->dialog, GPK_MODAL_DIALOG_PAGE_PROGRESS, 0);
- gpk_modal_dialog_set_title (task->priv->dialog, title);
- if (task->priv->show_progress)
- gpk_modal_dialog_present_with_time (task->priv->dialog, task->priv->timestamp);
-
- /* install trusted */
- gpk_dbus_task_install_package_files_internal (task, FALSE);
-out:
- if (error != NULL)
- g_error_free (error);
- return;
-}
-#endif
-
static void gpk_dbus_task_install_package_ids_dep_check (GpkDbusTask *task);
/**
@@ -3235,23 +3105,9 @@ gpk_dbus_task_init (GpkDbusTask *task)
G_CALLBACK (gpk_dbus_task_button_close_cb), task);
/* helpers */
- task->priv->helper_repo_signature = gpk_helper_repo_signature_new ();
- g_signal_connect (task->priv->helper_repo_signature, "event", G_CALLBACK (gpk_dbus_task_repo_signature_event_cb), task);
- gpk_helper_repo_signature_set_parent (task->priv->helper_repo_signature, main_window);
-
- task->priv->helper_eula = gpk_helper_eula_new ();
- g_signal_connect (task->priv->helper_eula, "event", G_CALLBACK (gpk_dbus_task_eula_event_cb), task);
- gpk_helper_eula_set_parent (task->priv->helper_eula, main_window);
-
task->priv->helper_run = gpk_helper_run_new ();
gpk_helper_run_set_parent (task->priv->helper_run, main_window);
-#if (!PK_CHECK_VERSION(0,5,0))
- task->priv->helper_untrusted = gpk_helper_untrusted_new ();
- g_signal_connect (task->priv->helper_untrusted, "event", G_CALLBACK (gpk_dbus_task_untrusted_event_cb), task);
- gpk_helper_untrusted_set_parent (task->priv->helper_untrusted, main_window);
-#endif
-
task->priv->helper_chooser = gpk_helper_chooser_new ();
g_signal_connect (task->priv->helper_chooser, "event", G_CALLBACK (gpk_dbus_task_chooser_event_cb), task);
gpk_helper_chooser_set_parent (task->priv->helper_chooser, main_window);
@@ -3328,13 +3184,8 @@ gpk_dbus_task_finalize (GObject *object)
g_object_unref (task->priv->dialog);
g_object_unref (task->priv->vendor);
g_object_unref (task->priv->language);
- g_object_unref (task->priv->helper_eula);
g_object_unref (task->priv->helper_run);
-#if (!PK_CHECK_VERSION(0,5,0))
- g_object_unref (task->priv->helper_untrusted);
-#endif
g_object_unref (task->priv->helper_chooser);
- g_object_unref (task->priv->helper_repo_signature);
G_OBJECT_CLASS (gpk_dbus_task_parent_class)->finalize (object);
}
diff --git a/src/gpk-self-test.c b/src/gpk-self-test.c
index bf38fa1..6e84de9 100644
--- a/src/gpk-self-test.c
+++ b/src/gpk-self-test.c
@@ -25,6 +25,7 @@
#include "egg-debug.h"
#include "gpk-common.h"
#include "gpk-enum.h"
+#include "gpk-task.h"
void egg_markdown_test (EggTest *test);
void egg_string_test (EggTest *test);
@@ -49,6 +50,7 @@ main (int argc, char **argv)
/* tests go here */
egg_markdown_test (test);
egg_string_test (test);
+ gpk_task_test (test);
gpk_enum_test (test);
gpk_common_test (test);
// gpk_dbus_test (test);
diff --git a/src/gpk-task.c b/src/gpk-task.c
new file mode 100644
index 0000000..83a3e04
--- /dev/null
+++ b/src/gpk-task.c
@@ -0,0 +1,716 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard hughsie com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+#include <packagekit-glib2/packagekit.h>
+
+#include "egg-debug.h"
+
+#include "gpk-task.h"
+#include "gpk-gnome.h"
+#include "gpk-common.h"
+#include "gpk-enum.h"
+
+static void gpk_task_finalize (GObject *object);
+
+#define GPK_TASK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GPK_TYPE_TASK, GpkTaskPrivate))
+
+/**
+ * GpkTaskPrivate:
+ *
+ * Private #GpkTask data
+ **/
+struct _GpkTaskPrivate
+{
+ gpointer user_data;
+ GtkWindow *parent_window;
+ GtkWindow *current_window;
+ GtkBuilder *builder_untrusted;
+ GtkBuilder *builder_signature;
+ GtkBuilder *builder_eula;
+ guint request;
+ const gchar *help_id;
+};
+
+G_DEFINE_TYPE (GpkTask, gpk_task, PK_TYPE_TASK)
+
+/**
+ * gpk_task_set_parent_window:
+ **/
+gboolean
+gpk_task_set_parent_window (GpkTask *task, GtkWindow *parent_window)
+{
+ g_return_val_if_fail (GPK_IS_TASK (task), FALSE);
+ g_return_val_if_fail (parent_window != NULL, FALSE);
+ task->priv->parent_window = parent_window;
+ return TRUE;
+}
+
+/**
+ * gpk_task_button_accept_cb:
+ **/
+static void
+gpk_task_button_accept_cb (GtkWidget *widget, GpkTask *task)
+{
+ gtk_widget_hide (GTK_WIDGET(task->priv->current_window));
+ pk_task_user_accepted (PK_TASK(task), task->priv->request);
+ task->priv->request = 0;
+ task->priv->current_window = NULL;
+}
+
+/**
+ * gpk_task_button_decline_cb:
+ **/
+static void
+gpk_task_button_decline_cb (GtkWidget *widget, GpkTask *task)
+{
+ gtk_widget_hide (GTK_WIDGET(task->priv->current_window));
+ pk_task_user_declined (PK_TASK(task), task->priv->request);
+ task->priv->request = 0;
+ task->priv->current_window = NULL;
+}
+
+/**
+ * gpk_task_dialog_response_cb:
+ **/
+static void
+gpk_task_dialog_response_cb (GtkDialog *dialog, gint response_id, GpkTask *task)
+{
+ if (response_id == GTK_RESPONSE_YES) {
+ gpk_task_button_accept_cb (GTK_WIDGET(dialog), task);
+ return;
+ }
+ /* all other options */
+ gpk_task_button_decline_cb (GTK_WIDGET(dialog), task);
+}
+
+/**
+ * gpk_task_button_help_cb:
+ **/
+static void
+gpk_task_button_help_cb (GtkWidget *widget, GpkTask *task)
+{
+ /* show the help */
+ gpk_gnome_help (task->priv->help_id);
+}
+
+/**
+ * gpk_task_untrusted_question:
+ **/
+static void
+gpk_task_untrusted_question (PkTask *task, guint request, PkResults *results)
+{
+ GtkWidget *widget;
+ gchar *text;
+ gchar *message;
+ PkRoleEnum role;
+ GpkTaskPrivate *priv = GPK_TASK(task)->priv;
+
+ /* save the current request */
+ priv->request = request;
+
+ /* title */
+ widget = GTK_WIDGET(gtk_builder_get_object (priv->builder_untrusted, "label_title"));
+ text = g_strdup_printf ("<b><big>%s</big></b>", _("The software is not signed by a trusted provider."));
+ gtk_label_set_label (GTK_LABEL (widget), text);
+ g_free (text);
+
+ /* message */
+ g_object_get (results, "role", &role, NULL);
+ if (role == PK_ROLE_ENUM_UPDATE_PACKAGES ||
+ role == PK_ROLE_ENUM_UPDATE_SYSTEM) {
+ message = g_strdup_printf ("%s\n%s\n\n%s\n%s",
+ /* TRANSLATORS: is not GPG signed */
+ _("The software is not signed by a trusted provider."),
+ /* TRANSLATORS: user has to trust provider -- I know, this sucks */
+ _("Do not update this package unless you are sure it is safe to do so."),
+ /* TRANSLATORS: warn the user that all bets are off */
+ _("Malicious software can damage your computer or cause other harm."),
+ /* TRANSLATORS: ask if they are absolutely sure they want to do this */
+ _("Are you <b>sure</b> you want to update this package?"));
+ } else {
+ message = g_strdup_printf ("%s\n%s\n\n%s\n%s",
+ /* TRANSLATORS: is not GPG signed */
+ _("The software is not signed by a trusted provider."),
+ /* TRANSLATORS: user has to trust provider -- I know, this sucks */
+ _("Do not install this package unless you are sure it is safe to do so."),
+ /* TRANSLATORS: warn the user that all bets are off */
+ _("Malicious software can damage your computer or cause other harm."),
+ /* TRANSLATORS: ask if they are absolutely sure they want to do this */
+ _("Are you <b>sure</b> you want to install this package?"));
+ }
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder_untrusted, "label_message"));
+ gtk_label_set_markup (GTK_LABEL (widget), message);
+ g_free (message);
+
+ /* show window */
+ priv->current_window = GTK_WINDOW(gtk_builder_get_object (priv->builder_untrusted, "dialog_error"));
+ if (priv->parent_window != NULL) {
+ gtk_window_set_transient_for (priv->current_window, priv->parent_window);
+ gtk_window_set_modal (priv->current_window, TRUE);
+ /* this is a modal popup, so don't show a window title */
+ gtk_window_set_title (priv->current_window, "");
+ }
+ gtk_widget_show (GTK_WIDGET(priv->current_window));
+}
+
+/**
+ * gpk_task_key_question:
+ **/
+static void
+gpk_task_key_question (PkTask *task, guint request, PkResults *results)
+{
+ GPtrArray *array;
+ const PkItemRepoSignatureRequired *item;
+ GpkTaskPrivate *priv = GPK_TASK(task)->priv;
+ GtkWidget *widget;
+ gchar *text;
+
+ /* save the current request */
+ priv->request = request;
+
+ /* get data */
+ array = pk_results_get_repo_signature_required_array (results);
+ if (array->len != 1) {
+ egg_warning ("array length %i, aborting", array->len);
+ goto out;
+ }
+
+ /* only one item supported */
+ item = g_ptr_array_index (array, 0);
+
+ /* show correct text */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder_signature, "label_name"));
+ gtk_label_set_label (GTK_LABEL (widget), item->repository_name);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder_signature, "label_url"));
+ gtk_label_set_label (GTK_LABEL (widget), item->key_url);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder_signature, "label_user"));
+ gtk_label_set_label (GTK_LABEL (widget), item->key_userid);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder_signature, "label_id"));
+ gtk_label_set_label (GTK_LABEL (widget), item->key_id);
+
+ text = pk_package_id_to_printable (item->package_id);
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder_signature, "label_package"));
+ gtk_label_set_label (GTK_LABEL (widget), text);
+ g_free (text);
+
+ /* show window */
+ priv->current_window = GTK_WINDOW(gtk_builder_get_object (priv->builder_signature, "dialog_gpg"));
+ if (priv->parent_window != NULL) {
+ gtk_window_set_transient_for (priv->current_window, priv->parent_window);
+ gtk_window_set_modal (priv->current_window, TRUE);
+ /* this is a modal popup, so don't show a window title */
+ gtk_window_set_title (priv->current_window, "");
+ }
+ priv->help_id = "gpg-signature";
+ gtk_widget_show (GTK_WIDGET(priv->current_window));
+out:
+ g_ptr_array_unref (array);
+}
+
+/**
+ * gpk_task_eula_question:
+ **/
+static void
+gpk_task_eula_question (PkTask *task, guint request, PkResults *results)
+{
+ GPtrArray *array;
+ const PkItemEulaRequired *item;
+ GpkTaskPrivate *priv = GPK_TASK(task)->priv;
+ GtkWidget *widget;
+ GtkTextBuffer *buffer;
+ gchar *text;
+ gchar **split;
+
+ /* save the current request */
+ priv->request = request;
+
+ /* get data */
+ array = pk_results_get_eula_required_array (results);
+ if (array->len != 1) {
+ egg_warning ("array length %i, aborting", array->len);
+ goto out;
+ }
+
+ /* only one item supported */
+ item = g_ptr_array_index (array, 0);
+
+ /* title */
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder_eula, "label_title"));
+
+ split = pk_package_id_split (item->package_id);
+ text = g_strdup_printf ("<b><big>License required for %s by %s</big></b>", split[0], item->vendor_name);
+ gtk_label_set_label (GTK_LABEL (widget), text);
+ g_free (text);
+
+ buffer = gtk_text_buffer_new (NULL);
+ gtk_text_buffer_insert_at_cursor (buffer, item->license_agreement, strlen (item->license_agreement));
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder_eula, "textview_details"));
+ gtk_text_view_set_buffer (GTK_TEXT_VIEW (widget), buffer);
+
+ /* set minimum size a bit bigger */
+ gtk_widget_set_size_request (widget, 100, 200);
+
+ /* show window */
+ priv->current_window = GTK_WINDOW(gtk_builder_get_object (priv->builder_eula, "dialog_eula"));
+ if (priv->parent_window != NULL) {
+ gtk_window_set_transient_for (priv->current_window, priv->parent_window);
+ gtk_window_set_modal (priv->current_window, TRUE);
+ /* this is a modal popup, so don't show a window title */
+ gtk_window_set_title (priv->current_window, "");
+ }
+ priv->help_id = "eula";
+ gtk_widget_show (GTK_WIDGET(priv->current_window));
+
+ g_object_unref (buffer);
+ g_strfreev (split);
+out:
+ g_ptr_array_unref (array);
+}
+
+/**
+ * gpk_task_media_change_question:
+ **/
+static void
+gpk_task_media_change_question (PkTask *task, guint request, PkResults *results)
+{
+ GPtrArray *array;
+ const PkItemMediaChangeRequired *item;
+ GpkTaskPrivate *priv = GPK_TASK(task)->priv;
+ const gchar *name;
+ gchar *message = NULL;
+
+ /* save the current request */
+ priv->request = request;
+
+ /* get data */
+ array = pk_results_get_media_change_required_array (results);
+ if (array->len != 1) {
+ egg_warning ("array length %i, aborting", array->len);
+ goto out;
+ }
+
+ /* only one item supported */
+ item = g_ptr_array_index (array, 0);
+
+ name = gpk_media_type_enum_to_localised_text (item->media_type);
+ /* TRANSLATORS: dialog body, explains to the user that they need to insert a disk to continue. The first replacement is DVD, CD etc */
+ message = g_strdup_printf (_("Additional media is required. Please insert the %s labeled '%s' to continue."), name, item->media_text);
+
+ priv->current_window = GTK_WINDOW (gtk_message_dialog_new (priv->parent_window, GTK_DIALOG_DESTROY_WITH_PARENT,
+ /* TRANSLATORS: this is the window title when a new cd or dvd is required */
+ GTK_MESSAGE_INFO, GTK_BUTTONS_CANCEL, _("A media change is required")));
+ gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG(priv->current_window), "%s", message);
+
+ /* TRANSLATORS: this is button text */
+ gtk_dialog_add_button (GTK_DIALOG(priv->current_window), _("Continue"), GTK_RESPONSE_YES);
+
+ /* set icon name */
+ gtk_window_set_icon_name (priv->current_window, GPK_ICON_SOFTWARE_INSTALLER);
+
+ g_signal_connect (priv->current_window, "response", G_CALLBACK (gpk_task_dialog_response_cb), task);
+ gtk_widget_show_all (GTK_WIDGET(priv->current_window));
+out:
+ g_free (message);
+ g_ptr_array_unref (array);
+}
+
+/**
+ * gpk_task_simulate_question_type_to_text:
+ **/
+static const gchar *
+gpk_task_simulate_question_type_to_text (PkInfoEnum info)
+{
+ if (info == PK_INFO_ENUM_REMOVING) {
+ /* TRANSLATORS: When processing, we might have to remove other dependencies */
+ return _("The following packages have to be removed:");
+ }
+
+ if (info == PK_INFO_ENUM_INSTALLING) {
+ /* TRANSLATORS: When processing, we might have to install other dependencies */
+ return _("The following packages have to be installed:");
+ }
+
+ if (info == PK_INFO_ENUM_UPDATING) {
+ /* TRANSLATORS: When processing, we might have to update other dependencies */
+ return _("The following packages have to be updated:");
+ }
+
+ if (info == PK_INFO_ENUM_REINSTALLING) {
+ /* TRANSLATORS: When processing, we might have to reinstall other dependencies */
+ return _("The following packages have to be reinstalled:");
+ }
+
+ if (info == PK_INFO_ENUM_DOWNGRADING) {
+ /* TRANSLATORS: When processing, we might have to downgrade other dependencies */
+ return _("The following packages have to be downgraded:");
+ }
+
+ /* do not show */
+ return NULL;
+}
+
+/**
+ * gpk_task_simulate_question:
+ **/
+static void
+gpk_task_simulate_question (PkTask *task, guint request, PkResults *results)
+{
+ guint i;
+ guint len;
+ const gchar *package_id;
+ const gchar *title;
+ gchar *printable;
+ gchar *summary;
+ PkPackage *package;
+ PkPackageSack *sack;
+ PkInfoEnum info;
+ PkInfoEnum info_last = PK_INFO_ENUM_UNKNOWN;
+ GpkTaskPrivate *priv = GPK_TASK(task)->priv;
+
+ /* save the current request */
+ priv->request = request;
+
+ /* get data */
+ sack = pk_results_get_package_sack (results);
+
+ /* print data */
+ len = pk_package_sack_get_size (sack);
+ for (i=0; i<len; i++) {
+ package = pk_package_sack_get_index (sack, i);
+ g_object_get (package,
+ "info", &info,
+ "summary", &summary,
+ NULL);
+ /* new header */
+ if (info != info_last) {
+ title = gpk_task_simulate_question_type_to_text (info);
+ g_print ("%s\n", title);
+ info_last = info;
+ }
+ package_id = pk_package_get_id (package);
+ printable = pk_package_id_to_printable (package_id);
+ g_print (" %s\t%s\n", printable, summary);
+
+ g_free (summary);
+ g_free (printable);
+ g_object_unref (package);
+ }
+
+ /* TRANSLATORS: ask the user if the proposed changes are okay */
+// ret = gpk_console_get_prompt (_("Proceed with changes?"), FALSE);
+// if (ret) {
+// pk_task_user_accepted (task, request);
+// } else {
+// /* TRANSLATORS: tell the user we didn't do anything */
+// g_print ("%s\n", _("The transaction did not proceed."));
+ pk_task_user_declined (task, request);
+// }
+
+ g_object_unref (sack);
+}
+
+/**
+ * gpk_task_setup_dialog_untrusted:
+ **/
+static void
+gpk_task_setup_dialog_untrusted (GpkTask *task)
+{
+ GtkWidget *widget;
+ GtkWidget *button;
+ guint retval;
+ GError *error = NULL;
+
+ /* get UI */
+ task->priv->builder_untrusted = gtk_builder_new ();
+ retval = gtk_builder_add_from_file (task->priv->builder_untrusted, GPK_DATA "/gpk-error.ui", &error);
+ if (error != NULL) {
+ egg_warning ("failed to load ui: %s", error->message);
+ g_error_free (error);
+ }
+
+ /* connect up default actions */
+ widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_untrusted, "dialog_error"));
+ g_signal_connect (widget, "delete_event", G_CALLBACK (gpk_task_button_decline_cb), task);
+
+ /* set icon name */
+ widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_untrusted, "dialog_error"));
+ gtk_window_set_icon_name (GTK_WINDOW(widget), GPK_ICON_SOFTWARE_INSTALLER);
+
+ /* connect up buttons */
+ widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_untrusted, "button_close"));
+ g_signal_connect (widget, "clicked", G_CALLBACK (gpk_task_button_decline_cb), task);
+
+ /* don't show text in the expander */
+ widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_untrusted, "expander_details"));
+ gtk_widget_hide (widget);
+
+ /* TRANSLATORS: button label, force the install, even though it's untrusted */
+ button = gtk_button_new_with_mnemonic (_("_Force install"));
+ g_signal_connect (button, "clicked", G_CALLBACK (gpk_task_button_accept_cb), task);
+
+ /* TRANSLATORS: button tooltip */
+ gtk_widget_set_tooltip_text (button, _("Force installing package"));
+
+ /* add to box */
+ widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_untrusted, "dialog_error"));
+ widget = gtk_dialog_get_action_area (GTK_DIALOG(widget));
+ gtk_box_pack_start (GTK_BOX (widget), button, FALSE, FALSE, 0);
+ gtk_widget_show (button);
+}
+
+/**
+ * gpk_task_setup_dialog_signature:
+ **/
+static void
+gpk_task_setup_dialog_signature (GpkTask *task)
+{
+ GtkWidget *widget;
+ guint retval;
+ GError *error = NULL;
+
+ /* get UI */
+ task->priv->builder_signature = gtk_builder_new ();
+ retval = gtk_builder_add_from_file (task->priv->builder_signature, GPK_DATA "/gpk-signature.ui", &error);
+ if (error != NULL) {
+ egg_warning ("failed to load ui: %s", error->message);
+ g_error_free (error);
+ }
+
+ /* connect up default actions */
+ widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_signature, "dialog_gpg"));
+ g_signal_connect (widget, "delete_event", G_CALLBACK (gpk_task_button_decline_cb), task);
+
+ /* set icon name */
+ widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_signature, "dialog_gpg"));
+ gtk_window_set_icon_name (GTK_WINDOW(widget), GPK_ICON_SOFTWARE_INSTALLER);
+
+ /* connect up buttons */
+ widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_signature, "button_yes"));
+ g_signal_connect (widget, "clicked", G_CALLBACK (gpk_task_button_accept_cb), task);
+ widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_signature, "button_help"));
+ g_signal_connect (widget, "clicked", G_CALLBACK (gpk_task_button_help_cb), task);
+ widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_signature, "button_no"));
+ g_signal_connect (widget, "clicked", G_CALLBACK (gpk_task_button_decline_cb), task);
+}
+
+/**
+ * gpk_task_setup_dialog_eula:
+ **/
+static void
+gpk_task_setup_dialog_eula (GpkTask *task)
+{
+ GtkWidget *widget;
+ guint retval;
+ GError *error = NULL;
+
+ /* get UI */
+ task->priv->builder_eula = gtk_builder_new ();
+ retval = gtk_builder_add_from_file (task->priv->builder_eula, GPK_DATA "/gpk-eula.ui", &error);
+ if (error != NULL) {
+ egg_warning ("failed to load ui: %s", error->message);
+ g_error_free (error);
+ }
+
+ /* connect up default actions */
+ widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_eula, "dialog_eula"));
+ g_signal_connect (widget, "delete_event", G_CALLBACK (gpk_task_button_decline_cb), task);
+
+ /* set icon name */
+ widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_eula, "dialog_eula"));
+ gtk_window_set_icon_name (GTK_WINDOW(widget), GPK_ICON_SOFTWARE_INSTALLER);
+
+ /* connect up buttons */
+ widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_eula, "button_agree"));
+ g_signal_connect (widget, "clicked", G_CALLBACK (gpk_task_button_accept_cb), task);
+ widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_eula, "button_help"));
+ g_signal_connect (widget, "clicked", G_CALLBACK (gpk_task_button_help_cb), task);
+ widget = GTK_WIDGET (gtk_builder_get_object (task->priv->builder_eula, "button_cancel"));
+ g_signal_connect (widget, "clicked", G_CALLBACK (gpk_task_button_decline_cb), task);
+}
+
+/**
+ * gpk_task_class_init:
+ **/
+static void
+gpk_task_class_init (GpkTaskClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ PkTaskClass *task_class = PK_TASK_CLASS (klass);
+
+ object_class->finalize = gpk_task_finalize;
+ task_class->untrusted_question = gpk_task_untrusted_question;
+ task_class->key_question = gpk_task_key_question;
+ task_class->eula_question = gpk_task_eula_question;
+ task_class->media_change_question = gpk_task_media_change_question;
+ task_class->simulate_question = gpk_task_simulate_question;
+
+ g_type_class_add_private (klass, sizeof (GpkTaskPrivate));
+}
+
+/**
+ * gpk_task_init:
+ * @task: This class instance
+ **/
+static void
+gpk_task_init (GpkTask *task)
+{
+ task->priv = GPK_TASK_GET_PRIVATE (task);
+ task->priv->request = 0;
+ task->priv->parent_window = NULL;
+ task->priv->current_window = NULL;
+
+ /* setup dialogs ahead of time */
+ gpk_task_setup_dialog_untrusted (task);
+ gpk_task_setup_dialog_eula (task);
+ gpk_task_setup_dialog_signature (task);
+}
+
+/**
+ * gpk_task_finalize:
+ * @object: The object to finalize
+ **/
+static void
+gpk_task_finalize (GObject *object)
+{
+ GpkTask *task = GPK_TASK (object);
+
+ g_object_unref (task->priv->builder_untrusted);
+ g_object_unref (task->priv->builder_signature);
+ g_object_unref (task->priv->builder_eula);
+
+ G_OBJECT_CLASS (gpk_task_parent_class)->finalize (object);
+}
+
+/**
+ * gpk_task_new:
+ *
+ * Return value: a new GpkTask object.
+ **/
+GpkTask *
+gpk_task_new (void)
+{
+ GpkTask *task;
+ task = g_object_new (GPK_TYPE_TASK, NULL);
+ return GPK_TASK (task);
+}
+
+/***************************************************************************
+ *** MAKE CHECK TESTS ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+static void
+gpk_task_test_install_packages_cb (GObject *object, GAsyncResult *res, EggTest *test)
+{
+ GpkTask *task = GPK_TASK (object);
+ GError *error = NULL;
+ PkResults *results;
+ PkExitEnum exit_enum;
+ GPtrArray *packages;
+ const PkItemPackage *item;
+ guint i;
+
+ /* get the results */
+ results = pk_task_generic_finish (GPK_TASK (task), res, &error);
+ if (results == NULL) {
+ egg_test_failed (test, "failed to resolve: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ exit_enum = pk_results_get_exit_code (results);
+ if (exit_enum != GPK_EXIT_ENUM_SUCCESS)
+ egg_test_failed (test, "failed to resolve success: %s", pk_exit_enum_to_text (exit_enum));
+
+ packages = pk_results_get_package_array (results);
+ if (packages == NULL)
+ egg_test_failed (test, "no packages!");
+
+ /* list, just for shits and giggles */
+ for (i=0; i<packages->len; i++) {
+ item = g_ptr_array_index (packages, i);
+ egg_debug ("%s\t%s\t%s", pk_info_enum_to_text (item->info), item->package_id, item->summary);
+ }
+
+ if (packages->len != 3)
+ egg_test_failed (test, "invalid number of packages: %i", packages->len);
+
+ g_ptr_array_unref (packages);
+
+ egg_debug ("results exit enum = %s", pk_exit_enum_to_text (exit_enum));
+out:
+ if (results != NULL)
+ g_object_unref (results);
+ egg_test_loop_quit (test);
+}
+
+static void
+gpk_task_test_progress_cb (PkProgress *progress, PkProgressType type, EggTest *test)
+{
+ PkStatusEnum status;
+ if (type == GPK_PROGRESS_TYPE_STATUS) {
+ g_object_get (progress,
+ "status", &status,
+ NULL);
+ egg_debug ("now %s", pk_status_enum_to_text (status));
+ }
+}
+
+void
+gpk_task_test (gpointer user_data)
+{
+ EggTest *test = (EggTest *) user_data;
+ GpkTask *task;
+ gchar **package_ids;
+
+ if (!egg_test_start (test, "GpkTask"))
+ return;
+
+ /************************************************************/
+ egg_test_title (test, "get task");
+ task = gpk_task_new ();
+ egg_test_assert (test, task != NULL);
+
+ /* For testing, you will need to manually do:
+ pkcon repo-set-data dummy use-gpg 1
+ pkcon repo-set-data dummy use-eula 1
+ pkcon repo-set-data dummy use-media 1
+ */
+
+ /************************************************************/
+ egg_test_title (test, "install package");
+ package_ids = pk_package_ids_from_id ("vips-doc;7.12.4-2.fc8;noarch;linva");
+ pk_task_install_packages_async (GPK_TASK (task), package_ids, NULL,
+ (PkProgressCallback) gpk_task_test_progress_cb, test,
+ (GAsyncReadyCallback) gpk_task_test_install_packages_cb, test);
+ g_strfreev (package_ids);
+ egg_test_loop_wait (test, 150000);
+ egg_test_success (test, "installed in %i", egg_test_elapsed (test));
+
+ g_object_unref (task);
+ egg_test_end (test);
+}
+#endif
+
diff --git a/src/gpk-task.h b/src/gpk-task.h
new file mode 100644
index 0000000..8e0c9a0
--- /dev/null
+++ b/src/gpk-task.h
@@ -0,0 +1,63 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offtask: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard 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 __GPK_TASK_H
+#define __GPK_TASK_H
+
+#include <glib-object.h>
+#include <gtk/gtk.h>
+#include <packagekit-glib2/packagekit.h>
+
+G_BEGIN_DECLS
+
+#define GPK_TYPE_TASK (gpk_task_get_type ())
+#define GPK_TASK(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GPK_TYPE_TASK, GpkTask))
+#define GPK_TASK_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GPK_TYPE_TASK, GpkTaskClass))
+#define GPK_IS_TASK(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GPK_TYPE_TASK))
+#define GPK_IS_TASK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GPK_TYPE_TASK))
+#define GPK_TASK_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GPK_TYPE_TASK, GpkTaskClass))
+
+typedef struct _GpkTaskPrivate GpkTaskPrivate;
+typedef struct _GpkTask GpkTask;
+typedef struct _GpkTaskClass GpkTaskClass;
+
+struct _GpkTask
+{
+ PkTask parent;
+ GpkTaskPrivate *priv;
+};
+
+struct _GpkTaskClass
+{
+ PkTaskClass parent_class;
+};
+
+GQuark gpk_task_error_quark (void);
+GType gpk_task_get_type (void);
+GpkTask *gpk_task_new (void);
+void gpk_task_test (gpointer user_data);
+gboolean gpk_task_set_parent_window (GpkTask *task,
+ GtkWindow *window);
+
+G_END_DECLS
+
+#endif /* __GPK_TASK_H */
+
diff --git a/src/gpk-update-viewer.c b/src/gpk-update-viewer.c
index 76e7eeb..fcec96b 100644
--- a/src/gpk-update-viewer.c
+++ b/src/gpk-update-viewer.c
@@ -49,8 +49,6 @@
#include "gpk-cell-renderer-restart.h"
#include "gpk-cell-renderer-spinner.h"
#include "gpk-enum.h"
-#include "gpk-helper-repo-signature.h"
-#include "gpk-helper-eula.h"
#include "gpk-helper-deps-update.h"
#define GPK_UPDATE_VIEWER_AUTO_QUIT_TIMEOUT 10 /* seconds */
@@ -69,8 +67,6 @@ static PkClient *client_primary = NULL;
static PkClient *client_secondary = NULL;
static PkControl *control = NULL;
static GPtrArray *update_list = NULL;
-static GpkHelperRepoSignature *helper_repo_signature = NULL;
-static GpkHelperEula *helper_eula = NULL;
static GpkHelperDepsUpdate *helper_deps_update = NULL;
static EggMarkdown *markdown = NULL;
static gchar *package_id_last = NULL;
@@ -2363,97 +2359,6 @@ gpk_update_viewer_allow_cancel_cb (PkClient *client, gboolean allow_cancel, gpoi
}
/**
- * gpk_update_viewer_eula_cb:
- **/
-static void
-gpk_update_viewer_eula_required_cb (PkClient *client, const gchar *eula_id, const gchar *package_id,
- const gchar *vendor_name, const gchar *license_agreement, gpointer data)
-{
- /* use the helper */
- gpk_helper_eula_show (helper_eula, eula_id, package_id, vendor_name, license_agreement);
-}
-
-/**
- * gpk_update_viewer_repo_signature_event_cb:
- **/
-static void
-gpk_update_viewer_repo_signature_event_cb (GpkHelperRepoSignature *_helper_repo_signature, GtkResponseType type, const gchar *key_id, const gchar *package_id, gpointer data)
-{
- GtkTreeView *treeview;
- GtkTreeModel *model;
- gboolean ret;
- GError *error = NULL;
-
- if (type != GTK_RESPONSE_YES) {
- /* make sensitive again */
- gpk_update_viewer_undisable_packages ();
- goto out;
- }
-
- /* install signature */
- ret = pk_client_install_signature (client_secondary, PK_SIGTYPE_ENUM_GPG, key_id, package_id, &error);
- if (!ret) {
- egg_warning ("cannot install signature: %s", error->message);
- g_error_free (error);
-
- /* make sensitive again */
- gpk_update_viewer_undisable_packages ();
- goto out;
- }
-out:
- /* set state */
- treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
- model = gtk_tree_view_get_model (treeview);
- gpk_update_viewer_reconsider_info (model);
-}
-
-/**
- * gpk_update_viewer_eula_event_cb:
- **/
-static void
-gpk_update_viewer_eula_event_cb (GpkHelperRepoSignature *_helper_eula, GtkResponseType type, const gchar *eula_id, gpointer data)
-{
- GtkTreeView *treeview;
- GtkTreeModel *model;
- gboolean ret;
- GError *error = NULL;
-
- if (type != GTK_RESPONSE_YES) {
- /* make sensitive again */
- gpk_update_viewer_undisable_packages ();
- goto out;
- }
-
- /* install signature */
- ret = pk_client_accept_eula (client_secondary, eula_id, &error);
- if (!ret) {
- egg_warning ("cannot accept eula: %s", error->message);
- g_error_free (error);
- /* make sensitive again */
- gpk_update_viewer_undisable_packages ();
- goto out;
- }
-out:
- /* set state */
- treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
- model = gtk_tree_view_get_model (treeview);
- gpk_update_viewer_reconsider_info (model);
-}
-
-/**
- * gpk_update_viewer_repo_signature_required_cb:
- **/
-static void
-gpk_update_viewer_repo_signature_required_cb (PkClient *client, const gchar *package_id, const gchar *repository_name,
- const gchar *key_url, const gchar *key_userid, const gchar *key_id,
- const gchar *key_fingerprint, const gchar *key_timestamp,
- PkSigTypeEnum type, gpointer data)
-{
- /* use the helper */
- gpk_helper_repo_signature_show (helper_repo_signature, package_id, repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp);
-}
-
-/**
* pk_client_distro_upgrade_cb:
**/
static void
@@ -2863,14 +2768,6 @@ main (int argc, char *argv[])
gtk_window_set_icon_name (GTK_WINDOW (main_window), GPK_ICON_SOFTWARE_INSTALLER);
/* helpers */
- helper_repo_signature = gpk_helper_repo_signature_new ();
- g_signal_connect (helper_repo_signature, "event", G_CALLBACK (gpk_update_viewer_repo_signature_event_cb), NULL);
- gpk_helper_repo_signature_set_parent (helper_repo_signature, GTK_WINDOW (main_window));
-
- helper_eula = gpk_helper_eula_new ();
- g_signal_connect (helper_eula, "event", G_CALLBACK (gpk_update_viewer_eula_event_cb), NULL);
- gpk_helper_eula_set_parent (helper_eula, GTK_WINDOW (main_window));
-
helper_deps_update = gpk_helper_deps_update_new ();
g_signal_connect (helper_deps_update, "event", G_CALLBACK (gpk_update_viewer_deps_update_event_cb), NULL);
gpk_helper_deps_update_set_parent (helper_deps_update, GTK_WINDOW (main_window));
@@ -3006,8 +2903,6 @@ main (int argc, char *argv[])
g_object_unref (update_list);
g_strfreev (install_package_ids);
- g_object_unref (helper_eula);
- g_object_unref (helper_repo_signature);
g_object_unref (helper_deps_update);
g_object_unref (list_store_updates);
g_object_unref (text_buffer);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]